1 00:00:00,000 --> 00:00:01,940 [Powered by Google Translate] [Walkthrough - Problem Set 2] 2 00:00:01,940 --> 00:00:04,130 [Zamyla Chan - Harvard University] 3 00:00:05,170 --> 00:00:07,490 [Dies ist CS50. CS50.TV] 4 00:00:07,490 --> 00:00:10,750 Gut. Hallo, alle, und Lösungsweg 2 begrüßen zu dürfen. 5 00:00:10,750 --> 00:00:14,330 Zunächst möchte ich Ihnen für die Ausrüstung pset 1 gratulieren. 6 00:00:14,330 --> 00:00:18,140 Ich weiß, dass es hätte ein bisschen hart für einige von euch haben, 7 00:00:18,140 --> 00:00:20,460 hätte Ihren ersten Computer-Programm, das Sie geschrieben haben, 8 00:00:20,460 --> 00:00:24,500 sondern nur daran erinnern, dass am Ende dieser, wenn man zurückblickt am Ende des Semesters 9 00:00:24,500 --> 00:00:29,820 Sie bei pset 1 aussehen und du wirst sagen: "Hey, ich hätte tun können, dass in 5 Minuten." 10 00:00:29,820 --> 00:00:35,700 So kennen und vertrauen, dass am Ende dieses finden Sie auf jeden Fall finden pset 1 ganz einfach. 11 00:00:35,700 --> 00:00:40,640 Aber jetzt ist es eine große Leistung, und herzlichen Glückwunsch zu immer getan. 12 00:00:40,640 --> 00:00:44,010 Nun, auch eine kurze Notiz, bevor wir in das Fleisch der Komplettlösung. 13 00:00:44,010 --> 00:00:48,340 Ich möchte nur eine kurze Notiz zu machen, dass ich manchmal nicht genug Zeit haben, 14 00:00:48,340 --> 00:00:52,500 während der Komplettlösungen durch jede einzelne Art, die das Problem set go 15 00:00:52,500 --> 00:00:56,140 und eher nur vielleicht auf 1 oder 2 Art Implementierungen konzentrieren, 16 00:00:56,140 --> 00:00:57,750 Möglichkeiten, wie Sie dies tun könnte. 17 00:00:57,750 --> 00:01:01,970 Aber das ist nicht zu sagen, dass Sie zu tun, es einen anderen Weg, sind verboten. 18 00:01:01,970 --> 00:01:05,980 Oft gibt es, wie bei der Informatik, zahlreiche Möglichkeiten, Dinge zu tun, 19 00:01:05,980 --> 00:01:12,190 und so sicher fühlen Sie sich frei, um eine andere Art von Lösung als ich vorgestellt habe verwenden. 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. Ein Abschnitt der Fragen - 1. Caesar - 2. Vigenere] 22 00:01:17,160 --> 00:01:20,650 Gut. So Problem Set 2: Crypto ist ein Spaß ein. 23 00:01:20,650 --> 00:01:24,500 Wieder mit jedem pset Sie mit einem Querschnitt von Fragen beginnen 24 00:01:24,500 --> 00:01:29,600 das wird in Ihrem Abschnitte mit Ihnen zugewiesenen Lehre Kollegen durchgeführt werden. 25 00:01:29,600 --> 00:01:31,670 Wir werden nicht durch diese über die Komplettlösung zu gehen, 26 00:01:31,670 --> 00:01:35,100 aber auf jeden Fall helfen Ihnen bei der pset. 27 00:01:35,100 --> 00:01:38,100 Also der erste Teil des Problems Set ist Caesar. 28 00:01:38,100 --> 00:01:43,470 Und so Caesar jemand übergeben Sie einen Schlüssel mit einer ganzen Zahl, 29 00:01:43,470 --> 00:01:48,420 und du wirst verschlüsseln eine Textzeichenfolge, dass sie Ihnen 30 00:01:48,420 --> 00:01:50,670 und geben sie wieder eine verschlüsselte Sache. 31 00:01:50,670 --> 00:01:56,050 Wenn jemand beobachtete A Christmas Story, es ist ein Beispiel, dass es. 32 00:01:56,050 --> 00:01:59,090 Dann wird der zweite Teil des Problems Set ist Vigenere, 33 00:01:59,090 --> 00:02:01,790 das ist eine erweiterte Verschlüsselungstechnik. 34 00:02:01,790 --> 00:02:05,640 Und so werden wir einen Text verschlüsseln, 35 00:02:05,640 --> 00:02:09,600 aber anstatt mit nur einer einzigen Zahl, wir eigentlich los um sie zu codieren 36 00:02:09,600 --> 00:02:13,340 mit einem Schlüsselwort, dass der Benutzer uns zur Verfügung stellen. 37 00:02:16,270 --> 00:02:22,090 Okay, so dass das erste Werkzeug in der Werkzeugpalette ist heute eigentlich los, um die Aktualisierung des Geräts. 38 00:02:22,090 --> 00:02:26,430 Auf der Diskussionsrunde würden wir Dinge wie zu sehen: "Warum nicht diese Arbeit?" 39 00:02:26,430 --> 00:02:28,110 "Warum nicht Absenden 50 arbeiten?" 40 00:02:28,110 --> 00:02:31,830 und oft die Lösung ist eigentlich nur, um Ihr Gerät zu aktualisieren. 41 00:02:31,830 --> 00:02:36,730 Und so, wenn Sie nur in einem Terminal-Fenster in Ihrem Gerät sudo yum-y laufen - 42 00:02:36,730 --> 00:02:40,040 das ist ein Flag, ja zu sagen, zu aktualisieren alles - Update 43 00:02:40,040 --> 00:02:42,280 dann ist dein Gerät wird aktualisiert, wenn nötig zu sein. 44 00:02:42,280 --> 00:02:46,960 Und es tut nicht weh, wenn Sie bereits auf der jüngsten Version der Appliance. 45 00:02:46,960 --> 00:02:51,280 Dann wird es einfach sagen, keine neuen Updates zur Verfügung und Sie können weiterarbeiten zusammen. 46 00:02:51,280 --> 00:02:55,800 Aber das ist gut, selbst auszuführen jedes Mal, dass Sie das Gerät öffnen 47 00:02:55,800 --> 00:02:57,140 weil wir noch sehr viel - 48 00:02:57,140 --> 00:03:00,320 manchmal, wenn wir kommen in ein bug - Befestigung im Gerät. 49 00:03:00,320 --> 00:03:03,180 So stellen Sie sicher, dass Sie die aktuellste Version des Gerätes haben 50 00:03:03,180 --> 00:03:07,710 und führen, dass es zu aktualisieren. 51 00:03:07,710 --> 00:03:14,360 Gut. So da wir mit Briefen zu tun und ändern, Verschlüsselung Dinge, 52 00:03:14,360 --> 00:03:20,410 werden wir wirklich wollen, um die besten Freunde mit unseren ASCII-Tabelle werden. 53 00:03:20,410 --> 00:03:24,350 Es gibt zahlreiche diejenigen online, wenn Sie zu finden. Vielleicht sogar Ihre eigenen. 54 00:03:24,350 --> 00:03:29,950 Grundsätzlich mit jedem Buchstaben und jede Zahl und jeden Charakter 55 00:03:29,950 --> 00:03:32,210 es ist eine Zahl mit ihnen verbundenen, 56 00:03:32,210 --> 00:03:38,670 und so ist es gut, ihre ASCII-Werte neben dem eigentlichen Brief zu sehen. 57 00:03:38,670 --> 00:03:42,310 Das wird definitiv helfen Ihnen bei der gestellten Aufgabe. 58 00:03:42,310 --> 00:03:45,750 Eine Sache, die mir wirklich geholfen bei diesem Problem Satz war tatsächlich ausdrucken, 59 00:03:45,750 --> 00:03:48,380 und als ich ging durch, würde ich tatsächlich zu zeichnen, 60 00:03:48,380 --> 00:03:51,150 schreiben: "Wenn dies muss dorthin gehen, dann ..." 61 00:03:51,150 --> 00:03:55,270 Art zu zeichnen, zeichnen ihn aus, werden die besten Freunde mit Ihrem ASCII-Tabelle. 62 00:03:57,240 --> 00:04:00,750 Dann haben wir ein paar andere Werkzeuge zur Verfügung. 63 00:04:00,750 --> 00:04:03,750 Dieses Mal statt tatsächlich den Benutzer zur Eingabe all ihrer Eingabe 64 00:04:03,750 --> 00:04:05,230 werden wir eine Kombination zu tun. 65 00:04:05,230 --> 00:04:06,880 Wir werden sie für einige Eingabe auffordern, 66 00:04:06,880 --> 00:04:11,350 aber wir sind auch zu benutzen Sie einfach die Kommandozeilen-Argumente. 67 00:04:11,350 --> 00:04:15,600 Also, wenn sie ihr Programm ausführen, in der Regel sagen Sie. / Hallo, zum Beispiel, 68 00:04:15,600 --> 00:04:17,310 wenn Ihr Programm war hello.c. 69 00:04:17,310 --> 00:04:22,500 Aber dieses Mal, anstatt nur sagen, dass, können sie Worte, Argumente danach zu setzen. 70 00:04:22,500 --> 00:04:27,210 Und so werden wir nutzen, was sie in uns als ihre Eingabe passieren, wie gut, 71 00:04:27,210 --> 00:04:31,720 so bewegend über die reine Aufforderung zur Zahl, sondern auch die Verwendung der Befehlszeile Argumente. 72 00:04:31,720 --> 00:04:36,590 Und dann werden wir in Arrays und Strings, die wir verwenden eine Menge als auch gehe. 73 00:04:41,460 --> 00:04:44,810 Hier ist nur ein Beispiel für 1 Mini-ASCII-Tabelle. 74 00:04:44,810 --> 00:04:48,460 Wie ich schon sagte, entspricht jeder Buchstabe einer Reihe, 75 00:04:48,460 --> 00:04:52,510 und so machen Sie sich damit. Es wird sich als nützlich erweisen. 76 00:04:52,510 --> 00:04:55,610 Und später, wenn wir beginnen dabei einige ASCIIMath Umgang mit den Zahlen - 77 00:04:55,610 --> 00:05:00,110 Addieren, Subtrahieren ihnen - dann definitiv gut zu diesem Diagramm entnehmen. 78 00:05:02,860 --> 00:05:06,920 Also hier ist ein Beispiel für eine Caesar-Chiffre - etwas, dass Sie mit gespielt haben. 79 00:05:06,920 --> 00:05:11,190 Es ist nur ein Rad. Im Wesentlichen gibt es eine äußere Alphabet und dann gibt es eine innere Alphabet. 80 00:05:11,190 --> 00:05:15,290 So hier ist ein Beispiel für die Cäsar-Chiffre, aber mit einem Schlüssel von 0. 81 00:05:15,290 --> 00:05:21,540 Im Wesentlichen A mit A ausgerichtet ist, B ist mit B ausgerichtet ist, den ganzen Weg bis Z. 82 00:05:21,540 --> 00:05:26,590 Aber dann sagen wir wollten einen Schlüssel von 3, zum Beispiel. 83 00:05:26,590 --> 00:05:33,280 Dann würden wir drehen das innere Rad, so dass A jetzt ausgerichtet D, etc. 84 00:05:33,280 --> 00:05:35,250 Und dies ist im wesentlichen das, was wir tun werden. 85 00:05:35,250 --> 00:05:38,340 Wir haben nicht ein Rad, sondern was wir tun müssen, ist unser Programm zu machen 86 00:05:38,340 --> 00:05:44,490 Art der Verschiebung des Alphabets zusammen mit uns eine bestimmte Menge von Zahlen. 87 00:05:44,490 --> 00:05:48,650 So wie ich schon sagte, wir gehen mit Befehlszeilenargumente zu tun 88 00:05:48,650 --> 00:05:50,390 sowie immer eine ganze Zahl. 89 00:05:50,390 --> 00:05:55,050 So die Art und Weise, dass ein Benutzer Ihrer Caesar Programm ausgeführt wird mit den Worten. / Caesar 90 00:05:55,050 --> 00:05:58,090 und dann Eingabe einer Nummer darauf. 91 00:05:58,090 --> 00:06:01,130 Und diese Zahl ist der Schlüssel, die Verschiebung, 92 00:06:01,130 --> 00:06:06,740 wie oft du gehst zu Drehen des inneren Lenkrad Ihres Caesar-Chiffre sind. 93 00:06:06,740 --> 00:06:08,390 Und damit Sie sehen hier ein Beispiel. 94 00:06:08,390 --> 00:06:14,550 Wenn wir in die Buchstaben von A bis L in unserem Caesar-Chiffre, 95 00:06:14,550 --> 00:06:19,520 dann wäre es Eingang D bis O, denn das ist jeder Brief über 3 Mal verschoben, 96 00:06:19,520 --> 00:06:22,080 wie das Beispiel des Rades, dass ich Sie zeigte. 97 00:06:22,080 --> 00:06:25,300 Also, wenn Sie eingegeben haben, zum Beispiel, ist diese CS50! 98 00:06:25,300 --> 00:06:27,960 dann wäre es auch verschieben alle Buchstaben. 99 00:06:27,960 --> 00:06:31,040 Und das ist eine wichtige Sache, sowohl Cäsar und Vigenere 100 00:06:31,040 --> 00:06:34,890 ist, dass wir gehen zu überspringen alle Nicht-Buchstaben. 101 00:06:34,890 --> 00:06:39,160 Also keine Leerzeichen, Zeichen, etc, Zahlen, werden wir halten sie das gleiche. 102 00:06:39,160 --> 00:06:42,920 Wir sind nur gehen, um die Buchstaben in diesem Fall verschieben. 103 00:06:42,920 --> 00:06:45,870 So wie Sie in das Rad zu sehen, wir haben nur die Buchstaben zur Verfügung zu stellen, 104 00:06:45,870 --> 00:06:50,150 so wollen wir nur die Buchstaben verschieben und verschlüsseln die Briefe. 105 00:06:51,370 --> 00:06:56,720 Also das erste, was zu tun, sah man, dass die Nutzung für Caesar in Problem 2 gesetzt 106 00:06:56,720 --> 00:07:05,280 ist Caesar laufen und dann eine Nummer eingeben, wenn Sie es in der Klemme. 107 00:07:05,280 --> 00:07:10,940 Also, was wir tun müssen, ist es irgendwie, dass Schlüssel und darauf zugreifen. 108 00:07:10,940 --> 00:07:14,730 Und so wollen wir irgendwie sehen, es wird die zweite Befehlszeile Argument sein. 109 00:07:14,730 --> 00:07:20,950 Die erste wird. / Caesar sein, und das nächste wird der Schlüssel Zahl sein. 110 00:07:22,190 --> 00:07:29,200 Also, bevor wir hatten int main (void) an unsere C-Programme starten. 111 00:07:29,200 --> 00:07:31,790 Wir schälen zurück eine Schicht ein wenig gehen 112 00:07:31,790 --> 00:07:34,720 und tatsächlich sehen, dass statt der Übergabe in void unsere Hauptfunktion 113 00:07:34,720 --> 00:07:37,920 wir eigentlich zu tun mit 2 Parametern. 114 00:07:37,920 --> 00:07:44,070 Wir haben einen int namens argc und dann ein Array von Strings als argv. 115 00:07:44,070 --> 00:07:46,030 So argc eine ganze Zahl, 116 00:07:46,030 --> 00:07:49,640 und stellt die Anzahl der Argumente in Ihrem Programm übergeben. 117 00:07:49,640 --> 00:07:53,590 Und dann argv ist eigentlich die Liste der Argumente übergeben. 118 00:07:53,590 --> 00:08:00,820 Alle Argumente sind Zeichenfolgen, und so argv stellt ein Array, eine Liste von Strings. 119 00:08:01,830 --> 00:08:03,990 Lassen Sie uns über Arrays ein wenig sprechen. 120 00:08:03,990 --> 00:08:05,940 Arrays sind im Wesentlichen eine neue Datenstruktur. 121 00:08:05,940 --> 00:08:09,660 Wir haben ints haben wir verdoppelt, wir haben Streicher, und jetzt haben wir Arrays. 122 00:08:09,660 --> 00:08:13,820 Arrays sind Datenstrukturen, die mehrere Werte des gleichen Typs halten kann, 123 00:08:13,820 --> 00:08:18,320 so im Wesentlichen eine Liste von welcher Art Sie wollen. 124 00:08:18,320 --> 00:08:24,400 Im Wesentlichen, wenn Sie wollten eine Liste von ganzen Zahlen alle in 1 variable, 125 00:08:24,400 --> 00:08:29,090 dann würden Sie eine neue Variable vom Typ int array war. 126 00:08:29,090 --> 00:08:34,450 So Arrays sind nullindizierte, dh, das erste Element des Arrays mit dem Index 0 ist. 127 00:08:34,450 --> 00:08:41,799 Wenn das Array der Länge 4, wie in diesem Beispiel, dann ist dein letztes Element würde bei Index 3 sein, 128 00:08:41,799 --> 00:08:44,810 das ist 4 - 1. 129 00:08:45,940 --> 00:08:48,420 So zum Array zu erstellen, würden Sie etwas tun. 130 00:08:48,420 --> 00:08:51,440 Angenommen, Sie möchten eine doppelte Array. 131 00:08:51,440 --> 00:08:56,520 Dies gilt für jede Art von Datentyp, though. 132 00:08:56,520 --> 00:09:00,210 So sagen, Sie wollen eine doppelte Array. Angenommen, Sie möchten es nennen Mailbox. 133 00:09:00,210 --> 00:09:04,760 Wie würden Sie initialisieren andere doppelt, 134 00:09:04,760 --> 00:09:09,760 Sie würden das Doppelte und dann sagen Sie den Namen, aber dieses Mal stellen wir die eckigen Klammern, 135 00:09:09,760 --> 00:09:13,570 und dann die Nummer es wird die Länge des Arrays ist. 136 00:09:13,570 --> 00:09:16,840 Beachten Sie, dass in Arrays können wir nicht immer die Länge, 137 00:09:16,840 --> 00:09:21,230 so haben Sie immer zu definieren und zu entscheiden, wie viele Boxen, 138 00:09:21,230 --> 00:09:25,440 wie viele Werte das Array wird halten. 139 00:09:25,440 --> 00:09:31,820 So unterschiedliche Werte im Array gesetzt, wirst du dieses folgende Syntax verwenden, 140 00:09:31,820 --> 00:09:33,200 wie Sie sehen auf der Folie. 141 00:09:33,200 --> 00:09:37,620 Sie haben Mailbox Index 0 auf 1,2 eingestellt werden, 142 00:09:37,620 --> 00:09:42,180 Mailbox-Index 1 auf 2,4, etc. 143 00:09:42,180 --> 00:09:47,910 So, jetzt haben wir überprüft Arrays ein bisschen, wir gehen zurück zu argc und argv. 144 00:09:47,910 --> 00:09:52,220 Wir wissen, dass argv ist jetzt ein Array von Strings. 145 00:09:52,220 --> 00:09:55,080 So, wenn ein Benutzer in vergeht - sagen, dass sie ein Programm - 146 00:09:55,080 --> 00:09:58,740 sie sagen. / hallo David Malan, 147 00:09:58,740 --> 00:10:05,160 Was das Programm für Sie tun wird eigentlich schon mit dem, was argc und argv sind gekommen. 148 00:10:05,160 --> 00:10:07,620 So brauchen Sie nicht zu bekümmern. 149 00:10:07,620 --> 00:10:14,370 Argc wäre in diesem Fall 3 sein, weil es 3 unterschiedliche Wörter durch ein Leerzeichen getrennt sieht. 150 00:10:14,370 --> 00:10:18,850 Und so dann die Anordnung in diesem Fall wäre die erste Index sein. / Hallo, 151 00:10:18,850 --> 00:10:21,770 der nächste David, der nächste Malan. 152 00:10:21,770 --> 00:10:25,640 Hat jemand auf Anhieb sehen, was die Beziehung zwischen argv, 153 00:10:25,640 --> 00:10:28,990  das Array, und argc ist? 154 00:10:32,820 --> 00:10:38,090 Yeah. Wir werden in das in einem Beispiel in args.c. bekommen 155 00:10:38,090 --> 00:10:42,880 Mal sehen, ob wir einen Vorteil aus der Beziehung zwischen dem 2 nehmen kann. 156 00:10:42,880 --> 00:10:46,550 Hier könnte, dass in dem Gerät finden Sie die Standard-Anwendung 157 00:10:46,550 --> 00:10:49,450 zu. c Dateien zu öffnen ist manchmal Emacs. 158 00:10:49,450 --> 00:10:54,660 Aber wir müssen mit gedit umgehen wollen, so was Sie tun können ist, können Sie direkt auf Ihrem C-Datei klicken, 159 00:10:54,660 --> 00:11:04,580 gehen Sie zu Eigenschaften, Öffnen mit, und wählen Sie dann gedit als Standard festlegen, 160 00:11:04,580 --> 00:11:13,020 und nun sollte Ihr Programm in gedit anstelle von Emacs öffnen. 161 00:11:14,710 --> 00:11:16,290 Perfect. 162 00:11:17,120 --> 00:11:25,520 Also hier habe ich ein Programm, das ich ausdrucken möchten jedes Befehlszeilenargument. 163 00:11:25,520 --> 00:11:32,050 So was gibt der Benutzer, möchte ich im wesentlichen Rückkehr es zurück, um sie auf einer neuen Zeile. 164 00:11:32,050 --> 00:11:36,710 Also, was ist eine Struktur, die wir verwenden, um iterieren kann etwas - 165 00:11:36,710 --> 00:11:40,380 etwas, das Sie wahrscheinlich in Ihrem pset 1 verwendet? 166 00:11:40,380 --> 00:11:45,840 Wenn Sie über eine bestimmte Anzahl von Dingen zu gehen? >> [Schüler] For-Schleife. 167 00:11:45,840 --> 00:11:48,910 For-Schleife. Genau. Also lasst uns mit der for-Schleife starten. 168 00:11:48,910 --> 00:11:56,900 Wir haben für int i = 0. Lasst uns einfach mit einem Standard-Initialisierung variable starten. 169 00:11:56,900 --> 00:12:02,370 Ich werde die Bedingung für eine Reihe lassen und dann sagen, i + +, werden die Dinge dort zu tun. 170 00:12:02,370 --> 00:12:04,090 Gut. 171 00:12:04,090 --> 00:12:11,590 So denken zurück zu argv, wenn argv die Liste der Argumente übergeben, um das Programm ist 172 00:12:11,590 --> 00:12:15,380 und argc ist die Anzahl der Argumente im Programm, 173 00:12:15,380 --> 00:12:21,280 dann heißt das, dass argc Wesentlichen die Länge der argv, richtig ist, 174 00:12:21,280 --> 00:12:28,970 da gehen, um so viele Werte als den Wert argc sein. 175 00:12:28,970 --> 00:12:35,910 Also, wenn wir wollen, durchlaufen jedes Element in argv, 176 00:12:35,910 --> 00:12:43,290 wir gehen zu wollen, zu jeder Zeit Zugriff auf die Variable in argv am angegebenen Index. 177 00:12:43,290 --> 00:12:49,060 Die mit diesem dargestellt werden, richtig? 178 00:12:49,060 --> 00:12:53,430 Diese Variable stellt hier die bestimmte Zeichenfolge in dieser Instanz 179 00:12:53,430 --> 00:12:57,030 denn es ist ein String-Array - die bestimmte Zeichenfolge an diesem bestimmten Index. 180 00:12:57,030 --> 00:13:00,690 Was wir tun wollen, in diesem Fall haben wir es ausdrucken wollen, so sagen wir printf. 181 00:13:00,690 --> 00:13:04,680 Und jetzt argv ist ein String, so wollen wir, dass die Platzhalter dort abzulegen. 182 00:13:04,680 --> 00:13:08,430 Wir wollen eine neue Zeile nur um es gut aussehen. 183 00:13:08,430 --> 00:13:12,530 Also hier haben wir eine for-Schleife. Wir haben nicht den Zustand noch. 184 00:13:12,530 --> 00:13:20,020 So i beginnt bei 0, und dann jedes Mal, es geht um die angegebene Zeichenfolge gedruckt ist 185 00:13:20,020 --> 00:13:22,980 an diesem bestimmten Index im Array. 186 00:13:22,980 --> 00:13:28,410 Also, wenn wir aufhören Ausdrucken von Elementen im Array wollen? 187 00:13:28,410 --> 00:13:35,720 Wenn wir fertig sind, nicht wahr? Wenn wir das Ende des Arrays erreicht. 188 00:13:35,720 --> 00:13:38,870 So wollen wir nicht in der Vergangenheit die Länge des Arrays überschreiten, 189 00:13:38,870 --> 00:13:43,700 und wir wissen bereits brauchen wir nicht, um tatsächlich aktiv herauszufinden, was die Länge der argv ist 190 00:13:43,700 --> 00:13:47,520 weil es uns gegeben, und was ist das? Argc. Genau. 191 00:13:47,520 --> 00:13:56,640 Deshalb wollen wir diesen Prozess argc Anzahl der Zeiten zu tun. 192 00:13:56,640 --> 00:13:59,550 Ich bin nicht im richtigen Verzeichnis. 193 00:14:02,100 --> 00:14:03,490 Gut. 194 00:14:03,490 --> 00:14:08,990 Nun wollen wir args. Keine Fehler, was ausgezeichnet ist. 195 00:14:08,990 --> 00:14:11,430 Also lasst uns einfach laufen args. 196 00:14:11,430 --> 00:14:15,130 Was wird das wohl zu uns zurückkehren? Es ist gerade dabei, es zu drucken zurück. 197 00:14:15,130 --> 00:14:18,320 "Sie eingegeben args in das Programm, ich werde es geben, zu dir zurück." 198 00:14:18,320 --> 00:14:23,170 So sagen wir, wir wollen args dann sagen foo bar. 199 00:14:23,170 --> 00:14:26,570 So druckt er es an uns zurück. Alles in Ordnung? 200 00:14:26,570 --> 00:14:30,790 So gibt es ein Beispiel dafür, wie man argc und argv verwenden 201 00:14:30,790 --> 00:14:33,460 wohl wissend, dass argc repräsentiert die Länge des argv. 202 00:14:33,460 --> 00:14:42,750 Stellen Sie sicher, dass Sie nicht immer mit Arrays Zugang ein über die Länge des Arrays 203 00:14:42,750 --> 00:14:45,140 weil C werden auf jeden Fall Sie schreien. 204 00:14:45,140 --> 00:14:47,560 Du bekommst so etwas wie eine Segmentation Fault, 205 00:14:47,560 --> 00:14:52,470 das ist nie Spaß, im Grunde sagen, du versuchst, etwas zu zugreifen 206 00:14:52,470 --> 00:14:55,000 Das gibt es nicht, nicht Ihnen gehören. 207 00:14:55,000 --> 00:14:59,430 So stellen Sie sicher, und vor allem mit der Null-Indizierung, wir wollen nicht - 208 00:14:59,430 --> 00:15:02,390 Wie zum Beispiel, wenn man ein Feld von Länge 4 haben, 209 00:15:02,390 --> 00:15:07,240 , dass Array-Index 4 nicht existieren, weil wir bei 0, beginnen bei Null-Index. 210 00:15:07,240 --> 00:15:11,730 Es wird zur zweiten Natur geworden wie for-Schleifen, wenn wir bei 0 beginnen. 211 00:15:11,730 --> 00:15:13,610 Also einfach im Hinterkopf behalten,. 212 00:15:13,610 --> 00:15:22,590 Sie wollen nicht immer Zugriff auf den Index eines Arrays, unerreichbar ist. 213 00:15:26,710 --> 00:15:32,560 So können wir nun sehen, wie wir Art des Zugriffs kann 214 00:15:32,560 --> 00:15:35,930 die Befehlszeilenargumente, die übergeben werden 215 00:15:35,930 --> 00:15:41,330 Aber wie Sie die Zeichenfolge sahen, ist das argv eigentlich ein String-Array. 216 00:15:41,330 --> 00:15:45,740 So ist es eigentlich nicht eine ganze Zahl noch nicht, aber in Caesar wollen wir mit Zahlen umzugehen. 217 00:15:45,740 --> 00:15:54,430 Glücklicherweise gibt es eine Funktion für uns geschaffen, die tatsächlich umsetzen kann einen String in einen Integer. 218 00:15:54,430 --> 00:15:58,710 Auch hier haben wir es nicht mit Benutzereingaben, wo wir sie veranlasst sind 219 00:15:58,710 --> 00:16:03,740 zur Eingabe hier für den Schlüssel, so können wir nicht wirklich Erneut auffordern und sagen: 220 00:16:03,740 --> 00:16:07,840 "Oh, gib mir noch eine ganze Zahl, sagen, wenn es nicht gültig." 221 00:16:07,840 --> 00:16:10,540 Aber wir müssen noch für die korrekte Nutzung zu überprüfen. 222 00:16:10,540 --> 00:16:13,520 In Caesar sie dürfen nur in 1 Zahl übergeben, 223 00:16:13,520 --> 00:16:18,030 und so haben sie nach. / caesar laufen und dann haben sie, um Ihnen eine Nummer. 224 00:16:18,030 --> 00:16:23,660 So argc muss eine gewisse Nummer sein. 225 00:16:23,660 --> 00:16:29,060 Welche Zahl wäre das, wenn sie übergeben Sie die. / Caesar und dann einen Schlüssel haben? 226 00:16:29,060 --> 00:16:32,920 Was ist argc? >> [Student] 2. >> Zwei. Genau. 227 00:16:32,920 --> 00:16:35,490 Also Sie wollen sicherstellen, dass argc 2 ist. 228 00:16:35,490 --> 00:16:39,620 Ansonsten haben Sie grundsätzlich weigern, das Programm auszuführen. 229 00:16:39,620 --> 00:16:43,040 In wichtigsten ist es eine Funktion, die int main sagt, 230 00:16:43,040 --> 00:16:47,360 so dann haben wir immer in guter Praxis return 0 am Ende eines erfolgreichen Programms. 231 00:16:47,360 --> 00:16:50,840 Also, wenn, sagen wir, sie geben Ihnen 3 Befehlszeilenargumente statt 2 232 00:16:50,840 --> 00:16:54,350 oder geben Sie ein, zum Beispiel, dann, was Sie tun müssen, ist Sie wollen für, dass der Check 233 00:16:54,350 --> 00:16:59,900 und dann wieder 1 zu sagen, nein, ich kann nicht mit diesem Programm fortfahren. 234 00:16:59,900 --> 00:17:03,190 [Schüler] Es kann nicht ein Raum in Ihrem Text. >> Entschuldigen Sie mich? 235 00:17:03,190 --> 00:17:06,780 [Schüler] Es kann nicht ein Raum, in dem Text, den Sie versuchen zu verschlüsseln sind werden. 236 00:17:06,780 --> 00:17:08,480 Ah! 237 00:17:08,480 --> 00:17:11,280 In Bezug auf den Text, den wir versuchen zu verschlüsseln, das tatsächlich kommt später 238 00:17:11,280 --> 00:17:13,970 wenn wir diesen Text zu geben. 239 00:17:13,970 --> 00:17:18,260 So jetzt sind wir nur akzeptieren, wie Befehlsargumente die tatsächliche Zahl, 240 00:17:18,260 --> 00:17:21,579 die eigentliche Wende für die Caesar-Verschlüsselung. 241 00:17:21,579 --> 00:17:27,569 [Schüler] Warum brauchen Sie 2, um nur 1 argc dagegen? Es ist definitiv ein Nummer. 242 00:17:27,569 --> 00:17:32,200 Right. Der Grund, warum brauchen wir 2 für argc anstelle von 1 243 00:17:32,200 --> 00:17:36,260 Denn wenn Sie ein Programm ausführen und sagen. / caesar oder. / hallo, 244 00:17:36,260 --> 00:17:38,280 das tatsächlich zählt als Befehlszeilenargument. 245 00:17:38,280 --> 00:17:43,020 Also das bereits belegt 1 und so dann sind wir die Eingabe 1 extra. 246 00:17:45,030 --> 00:17:49,440 Sie sind also tatsächlich die Eingabe einer Zeichenfolge im Befehlszeilenargument. 247 00:17:49,440 --> 00:17:52,730 Was Sie tun wollen, für Caesar wollen wir mit einer ganzen Zahl beschäftigen, 248 00:17:52,730 --> 00:17:57,180 so können Sie diese Funktion atoi. 249 00:17:57,180 --> 00:18:02,850 Und im Grunde, übergeben Sie es in einen String und dann kehren Sie zurück eine ganze Zahl 250 00:18:02,850 --> 00:18:06,070 Wenn es möglich ist, diese Zeichenfolge in eine Ganzzahl machen. 251 00:18:06,070 --> 00:18:10,960 Jetzt erinnere mich, als wir mit printf oder GetString, solche Dinge zu tun haben, 252 00:18:10,960 --> 00:18:13,390 Wir sind die Bibliotheken, die speziell für uns sind. 253 00:18:13,390 --> 00:18:19,450 Also am Anfang beginnen wir mit einem Hashtag Standard-I / O,. H, so etwas. 254 00:18:19,450 --> 00:18:22,430 Nun, das ist atoi nicht innerhalb einer jener Bibliotheken, 255 00:18:22,430 --> 00:18:26,600 so, was wir tun müssen, ist, wir haben die richtige Bibliothek für die zählen. 256 00:18:26,600 --> 00:18:32,720 Also zurück erinnern, um Walkthrough 1, wo ich über die manuelle Funktion. 257 00:18:32,720 --> 00:18:37,110 Sie geben Menschen in Ihrem Terminal und dann gefolgt von dem Namen einer Funktion. 258 00:18:37,110 --> 00:18:39,720 Und so, die öffnet sich eine ganze Liste von seiner Verwendung, 259 00:18:39,720 --> 00:18:42,890 aber wie gut es öffnet sich die Bibliothek, gehört. 260 00:18:42,890 --> 00:18:47,000 Also werde ich das für Sie zu verlassen, um die manuelle Funktion mit atoi verwenden 261 00:18:47,000 --> 00:18:53,360 und herauszufinden, welche Bibliothek Sie sind in der Lage sein, um die atoi Funktion nutzen zu müssen. 262 00:18:54,450 --> 00:18:57,670 Also haben wir den Schlüssel und jetzt ist es darum geht, die Klartext 263 00:18:57,670 --> 00:19:01,820 und so die tatsächlich wird auf Benutzereingaben, wo Sie aufgefordert. 264 00:19:01,820 --> 00:19:05,540 Wir behandelten GetInt und GetFloat, und so in die gleiche Richtung 265 00:19:05,540 --> 00:19:07,670 wir gehen mit GetString zu tun haben. 266 00:19:07,670 --> 00:19:12,440 Aber in diesem Fall brauchen wir nicht um jeden tun, während oder while-Schleifen zu überprüfen. 267 00:19:12,440 --> 00:19:14,480 GetString wird definitiv geben Sie uns eine Zeichenfolge, 268 00:19:14,480 --> 00:19:17,630 und wir werden zu verschlüsseln, was der Benutzer uns gibt. 269 00:19:17,630 --> 00:19:23,770 So kann man davon ausgehen, dass alle diese Benutzer eingegebene Zeichenfolgen korrekt sind. 270 00:19:23,770 --> 00:19:24,670 Great. 271 00:19:24,670 --> 00:19:27,270 Also, wenn Sie haben den Schlüssel und einmal du hast den Text, 272 00:19:27,270 --> 00:19:31,660 was jetzt noch übrig ist, müssen Sie den Klartext zu verschlüsseln. 273 00:19:31,660 --> 00:19:36,530 Nur um schnell über lingo abzudecken, ist der Klartext, was der Benutzer Ihnen, 274 00:19:36,530 --> 00:19:41,030 und der Geheimtext ist, was du zu ihnen zurückkehren. 275 00:19:42,450 --> 00:19:45,850 So Strings, in der Lage sein, durch tatsächlich Buchstabe für Buchstabe zu gehen 276 00:19:45,850 --> 00:19:48,550 denn wir müssen jeden Buchstaben zu verschieben, 277 00:19:48,550 --> 00:19:51,390 Wir verstehen, dass Strings, wenn wir solche peel back der Schicht, 278 00:19:51,390 --> 00:19:54,130 sehen wir, dass sie nur wirklich sind eine Liste von Zeichen. 279 00:19:54,130 --> 00:19:55,930 Man kommt nach dem anderen. 280 00:19:55,930 --> 00:20:01,690 Und so können wir behandeln Strings als Arrays, weil sie Zeichen-Arrays sind. 281 00:20:01,690 --> 00:20:05,640 So, Sie haben eine Zeichenfolge mit dem Namen Text, 282 00:20:05,640 --> 00:20:09,400 und innerhalb dieser variablen Text gespeichert Dies ist CS50. 283 00:20:09,400 --> 00:20:15,680 Dann Text Index 0 wäre eine Kapitalerhöhung T, wäre Index 1 h, etc. werden 284 00:20:17,530 --> 00:20:23,970 Und dann mit Arrays, in der argc beispielsweise in args.c, 285 00:20:23,970 --> 00:20:27,090 wir sahen, dass wir durchlaufen eine Reihe hatten 286 00:20:27,090 --> 00:20:32,440 und so hatten wir von i iterieren = 0 bis i kleiner als die Länge ist. 287 00:20:32,440 --> 00:20:35,560 Also müssen wir einen Weg, herauszufinden, was die Länge der Zeichenkette 288 00:20:35,560 --> 00:20:37,090 wenn wir gehen, um über sie zu durchlaufen. 289 00:20:37,090 --> 00:20:42,300 Glücklicherweise gibt es wieder eine Funktion für uns, obwohl später in CS50 290 00:20:42,300 --> 00:20:45,860 Sie werden definitiv in der Lage sein zu implementieren und machen Sie Ihre eigene Funktion 291 00:20:45,860 --> 00:20:48,260 das kann die Berechnung der Länge eines Strings. 292 00:20:48,260 --> 00:20:52,120 Aber jetzt werden wir Stringlänge, so strlen verwenden. 293 00:20:52,120 --> 00:21:00,440 Sie passieren in einem String, und dann kehren Sie ein int, die die Länge des Strings repräsentiert. 294 00:21:00,440 --> 00:21:05,840 Lassen Sie uns an einem Beispiel, wie wir vielleicht in der Lage zu iterieren jedes Zeichen in einem String suchen 295 00:21:05,840 --> 00:21:08,470 und etwas zu tun damit. 296 00:21:08,470 --> 00:21:13,250 Was wir wollen, ist iterieren jedes Zeichen des Strings, 297 00:21:13,250 --> 00:21:19,150 und was wir tun wollen, ist, dass wir drucken zurück jedes Zeichen 1 von 1 298 00:21:19,150 --> 00:21:22,060 außer wir noch etwas daneben. 299 00:21:22,060 --> 00:21:27,020 Also lasst uns mit der for-Schleife starten. Int i = 0. 300 00:21:27,020 --> 00:21:30,070 Wir werden um Platz für den Zustand zu verlassen. 301 00:21:32,700 --> 00:21:36,840 Wir wollen durchlaufen, bis wir das Ende des Strings erreicht, nicht wahr? 302 00:21:36,840 --> 00:21:41,340 Also dann, welche Funktion gibt uns die Länge des Strings? 303 00:21:41,340 --> 00:21:43,160 [Unverständlich Studenten Antwort] 304 00:21:43,160 --> 00:21:46,420 Das ist die Länge der Befehlszeilenargumente. 305 00:21:46,420 --> 00:21:50,650 Aber nach einer Zeichenkette wollen wir eine Funktion, die uns die Länge der Zeichenkette verwenden. 306 00:21:50,650 --> 00:21:53,090 Also das ist Stringlänge. 307 00:21:53,090 --> 00:21:57,130 Und so ist, dann müssen Sie in einem String um es weiterzugeben. 308 00:21:57,130 --> 00:21:59,760 Es muss wissen, was String es um die Länge berechnen muss. 309 00:21:59,760 --> 00:22:03,160 Also in diesem Fall sind wir mit String s zu tun. 310 00:22:04,790 --> 00:22:05,860 Great. 311 00:22:05,860 --> 00:22:10,770 Also, was wir tun wollen, die printf lassen. 312 00:22:10,770 --> 00:22:14,850 Jetzt wollen wir mit den Charakteren umzugehen. Wir drucken möchten jeden einzelnen Charakter. 313 00:22:14,850 --> 00:22:22,150 Wenn Sie es ausdrucken einen Schwimmer möchten, verwenden Sie den Platzhalter wie% f. 314 00:22:22,150 --> 00:22:24,580 Mit einem int würden Sie% d. 315 00:22:24,580 --> 00:22:30,890 Und so ähnlich, mit einem Zeichen, das Sie verwenden% c zu sagen, ich werde sein Schreiben eines Zeichens 316 00:22:30,890 --> 00:22:34,570 Das ist in einer Variable gespeichert. 317 00:22:34,570 --> 00:22:40,840 So haben wir das, und fügen wir einen Punkt und einen Platz zu. 318 00:22:40,840 --> 00:22:45,430 Welche Zeichen verwenden wir? 319 00:22:45,430 --> 00:22:49,780 Wir werden verwenden, was Charakter, den wir bei der Saite sind. 320 00:22:49,780 --> 00:22:52,890 Also werden wir werden mit etwas mit einer Schnur, 321 00:22:52,890 --> 00:22:56,420 aber wir wollen zu den Zugriff auf den bestimmten Charakter gibt. 322 00:22:56,420 --> 00:23:02,740 Also, wenn ein String ist nur ein Array, wie können wir dann Zugriff auf Elemente von Arrays? 323 00:23:02,740 --> 00:23:06,480 Wir haben diese eckigen Klammern, und dann haben wir den Index drin. 324 00:23:06,480 --> 00:23:11,820 So haben wir in eckigen Klammern. Unser Index in diesem Fall können wir einfach i. Genau. 325 00:23:15,290 --> 00:23:22,370 Also hier sind wir sagen, wir gehen zu drucken ein Zeichen gefolgt von einem Punkt und einem Leerzeichen, 326 00:23:22,370 --> 00:23:30,870 und der Charakter wird das i-te Brief in unserem String s betragen. 327 00:23:32,920 --> 00:23:39,330 Ich werde einfach, dass zu speichern. Okay. 328 00:23:42,510 --> 00:23:46,840 Jetzt werde ich Stringlänge laufen. 329 00:23:46,840 --> 00:23:53,440 Also mussten wir einen String namens OMG, und jetzt ist es noch mehr verstärkt. 330 00:23:53,440 --> 00:23:57,870 Ebenso sagen wir, wir tatsächlich wollen, um einen String aus der Benutzer zu erhalten. 331 00:23:57,870 --> 00:23:59,580 Wie können wir das tun? 332 00:23:59,580 --> 00:24:01,610 Vor, woher bekommen wir eine int? 333 00:24:01,610 --> 00:24:08,040 Wir sagten GetInt, nicht wahr? Aber dies ist nicht int, also lasst GetString. 334 00:24:11,780 --> 00:24:17,770 Lasst uns Stringlänge. Hier haben wir nicht geben Sie eine bestimmte prompt. 335 00:24:17,770 --> 00:24:19,940 Also ich weiß nicht. 336 00:24:19,940 --> 00:24:23,820 Ich werde meinen Namen hier stellen und so kann ich dann eines dieser Dinge zu tun 337 00:24:23,820 --> 00:24:29,600 wo ich zuzuweisen ein Wort für jeden Buchstaben oder so ähnlich. Cool. 338 00:24:29,600 --> 00:24:31,900 Also das ist Stringlänge. 339 00:24:33,000 --> 00:24:34,640 Also sind wir zurück zu Caesar. 340 00:24:34,640 --> 00:24:38,620 Wir haben ein paar Werkzeuge, wie wir über einen String iterieren 341 00:24:38,620 --> 00:24:41,250 wie wir jedes einzelne Element zugreifen. 342 00:24:41,250 --> 00:24:44,720 So, jetzt können wir wieder auf dem Programm. 343 00:24:44,720 --> 00:24:48,650 Wie ich schon erwähnt, in der ASCII-Tabelle, dein bester Freund, 344 00:24:48,650 --> 00:24:52,300 Sie gehen, um die Nummern, die mit jedem Buchstaben zugeordnet sind, zu sehen. 345 00:24:52,300 --> 00:24:55,900 Also hier sagen, dass unsere Klartext Ich bin schwindelig! 346 00:24:55,900 --> 00:25:01,090 Dann wird jedes dieser Zeichen wird eine Nummer und ASCII-Wert zugeordnet sein, 347 00:25:01,090 --> 00:25:04,710 auch das Apostroph, auch der Raum, auch das Ausrufezeichen, 348 00:25:04,710 --> 00:25:06,600 so dass Sie wollen, dass im Auge behalten. 349 00:25:06,600 --> 00:25:12,360 So sagen unsere wichtigsten, dass der Benutzer in ihren Befehlszeilenargument enthalten 6 ist. 350 00:25:12,360 --> 00:25:17,770 Das heißt, für den ersten Buchstaben, der I ist, die von 73 dargestellt wird, 351 00:25:17,770 --> 00:25:25,610 Sie wollen, zu ihnen zurückzukehren, was Schreiben ist mit dem ASCII-Wert von 73 + 6 dargestellt. 352 00:25:25,610 --> 00:25:29,020 In diesem Fall das würde 79 sein. 353 00:25:30,840 --> 00:25:35,040 Jetzt wollen wir zum nächsten Zeichen zu gehen. 354 00:25:35,040 --> 00:25:40,960 So dass die nächste im Index 1 des Klartextes würde das Apostroph sein. 355 00:25:40,960 --> 00:25:46,780 Aber denken Sie daran wollen wir nur die Briefe zu verschlüsseln. 356 00:25:46,780 --> 00:25:50,040 So wollen wir sicherstellen, dass der Apostroph tatsächlich gleich bleibt, 357 00:25:50,040 --> 00:25:54,310 dass wir nicht von 39 auf whatever 45 ändern. 358 00:25:54,310 --> 00:25:57,150 Wir wollen es als ein Apostroph halten. 359 00:25:57,150 --> 00:26:00,780 So wollen wir erinnern nur verschlüsseln die Buchstaben 360 00:26:00,780 --> 00:26:04,560 weil wir alle andere Symbole zu bleiben in unserem Programm unverändert wollen. 361 00:26:04,560 --> 00:26:07,130 Eine andere Sache, dass wir wollen, ist, um die Kapitalausstattung zu bewahren. 362 00:26:07,130 --> 00:26:10,250 Also, wenn Sie einen Großbuchstaben haben, sollte es als Großbuchstaben bleiben. 363 00:26:10,250 --> 00:26:12,830 Kleinbuchstaben sollten als Kleinbuchstaben bleiben. 364 00:26:13,620 --> 00:26:19,480 So einige nützliche Funktionen in der Lage sein, mit nur Verschlüsselungsbestimmungseinrichtung Buchstaben umzugehen 365 00:26:19,480 --> 00:26:22,380 und halten die Erhaltung der Marktkapitalisierung der Dinge 366 00:26:22,380 --> 00:26:25,130 ist die isalpha, isupper, islower Funktionen. 367 00:26:25,130 --> 00:26:29,270 Und so sind diese Funktionen, die Ihnen einen booleschen Wert zurückgeben. 368 00:26:29,270 --> 00:26:34,180 Grundsätzlich wahr oder falsch. Ist das ein Großbuchstabe? Ist das alphanumerische? 369 00:26:34,180 --> 00:26:37,180 Ist dies ein Brief, im Wesentlichen. 370 00:26:37,180 --> 00:26:41,070 Also hier sind 3 Beispiele, wie Sie diese Funktion verwenden. 371 00:26:41,070 --> 00:26:47,060 Grundsätzlich könnte man testen, ob der Wert an Sie zurückgeschickt von dieser Funktion wahr oder falsch ist 372 00:26:47,060 --> 00:26:49,400 basierend auf dieser Eingabe. 373 00:26:49,400 --> 00:26:54,880 Entweder nicht verschlüsseln etwas oder verschlüsseln sie oder stellen Sie sicher, dass es in Großbuchstaben, etc. ist 374 00:26:54,880 --> 00:27:01,080 [Schüler] Können Sie sich erklären, die ein wenig mehr, und wie Sie sie nutzen? >> Ja, sicher. 375 00:27:01,080 --> 00:27:08,470 Also, wenn wir zurückblicken, haben wir hier ein Kapital I, nicht wahr? 376 00:27:08,470 --> 00:27:14,550 Wir wissen also, dass ich bis O geht, weil ich es + 6 O. 377 00:27:14,550 --> 00:27:18,740 Aber wir wollen sicherstellen, dass O wird eine Kapitalerhöhung O. sein 378 00:27:18,740 --> 00:27:22,940 Also im Grunde ist diese Art des Gehens zu unserem Eingang zu ändern. 379 00:27:22,940 --> 00:27:26,870 Egal, ob es groß oder nicht wollen Art ändern, wie wir damit umgehen. 380 00:27:26,870 --> 00:27:32,360 Also dann, wenn wir die isupper Funktion auf dieser bestimmten Index, 381 00:27:32,360 --> 00:27:36,480 so isupper ("I"), die für uns wahr zurückgibt, so dass wir wissen, dass es oben ist. 382 00:27:36,480 --> 00:27:40,360 So dann auf der Grundlage, dass später werden wir in eine Formel zu gehen 383 00:27:40,360 --> 00:27:42,750 dass Sie verwenden, um Dinge in Caesar verschieben, 384 00:27:42,750 --> 00:27:46,560 so dann im Grunde ist es geht um eine etwas andere Formel sein, wenn es in Großbuchstaben ist 385 00:27:46,560 --> 00:27:50,670 im Gegensatz zu Kleinbuchstaben. Sinn? 386 00:27:51,020 --> 00:27:52,760 Yeah. Keine Sorge. 387 00:27:54,900 --> 00:27:58,990 Ich sprach ein wenig über das Hinzufügen von 6 auf einen Brief, der nicht ganz sinnvoll 388 00:27:58,990 --> 00:28:05,500 außer wenn wir irgendwie verstehen, dass diese Zeichen 389 00:28:05,500 --> 00:28:08,920 sind so eine Art austauschbar mit Zahlen. 390 00:28:08,920 --> 00:28:11,250 Was wir tun ist, wir Art der Nutzung implizite Casting. 391 00:28:11,250 --> 00:28:18,100 Wir werden in Gießen ein bisschen später gehen, wo Sie einen Wert und Sie machen es zu einer anderen Art 392 00:28:18,100 --> 00:28:20,440 als es ursprünglich war. 393 00:28:20,440 --> 00:28:25,910 Aber mit diesem pset wir in der Lage sein Art synonym verwenden Zeichen 394 00:28:25,910 --> 00:28:30,880 und ihre entsprechenden ganzzahligen Werten. 395 00:28:30,880 --> 00:28:35,140 Also, wenn Sie einfach umhüllen einen Charakter nur mit den einfachen Anführungszeichen, 396 00:28:35,140 --> 00:28:40,390 dann wirst du in der Lage sein, mit ihm mit Zahlen arbeiten, die sich mit ihm als integer. 397 00:28:40,390 --> 00:28:48,040 So die Hauptstadt C bezieht sich auf 67 Jahre. Kleinbuchstaben f 102 betrifft. 398 00:28:48,040 --> 00:28:51,480 Auch wenn Sie diese Werte wissen wollen, an Ihrem ASCII-Tabelle aussehen. 399 00:28:51,480 --> 00:28:56,160 Also lasst uns in einige Beispiele, wie Sie vielleicht in der Lage sein, um zu subtrahieren, und fügen Sie gehen, 400 00:28:56,160 --> 00:29:03,130 wie man eigentlich wirklich mit diesen Zeichen zu umgehen, verwenden sie austauschbar. 401 00:29:03,870 --> 00:29:11,350 I sagen, dass ASCIIMath wird die Zugabe eines Zeichens auf eine ganze Zahl zu berechnen 402 00:29:11,350 --> 00:29:17,590 und zeigt dann die resultierende Charakter sowie die resultierende ASCII-Wert. 403 00:29:17,590 --> 00:29:22,290 Und hier sage ich - wir werden viel mit diesem Teil später - 404 00:29:22,290 --> 00:29:29,100 aber im Grunde, ich sage, dass der Benutzer ausgeführt werden soll ASCIIMath zusammen mit einem Schlüssel zu sagen, 405 00:29:29,100 --> 00:29:30,880 und ich sage, dass diese Taste wird die Zahl sein, 406 00:29:30,880 --> 00:29:34,600 mit denen werden wir diesen Charakter hinzufügen. 407 00:29:34,600 --> 00:29:38,560 Also hier bemerken, dass ich da bin anspruchsvolle einen Schlüssel, 408 00:29:38,560 --> 00:29:40,590 da ich verlangen, dass sie geben mir ein Ding, 409 00:29:40,590 --> 00:29:45,600 Ich will nur. / Asciimath und einen Schlüssel zu akzeptieren. 410 00:29:45,600 --> 00:29:49,330 Also werde ich verlangen, dass argc gleich 2 ist. 411 00:29:49,330 --> 00:29:54,360 Wenn es nicht ist, dann werde ich auf 1 zurück, und das Programm wird beendet. 412 00:29:55,070 --> 00:29:58,540 So sage ich der Schlüssel wird nicht das erste Befehlszeilenargument sein, 413 00:29:58,540 --> 00:30:05,080 es geht um die zweite, und wie Sie hier sehen, 414 00:30:05,080 --> 00:30:11,790 Ich werde das in einen Integer zu machen. 415 00:30:15,740 --> 00:30:19,230 Dann werde ich ein Zeichen gesetzt r sein. 416 00:30:19,230 --> 00:30:23,970 Beachten Sie, dass der Typ der variablen chr tatsächlich eine Ganzzahl ist. 417 00:30:23,970 --> 00:30:30,480 Die Art und Weise, dass ich in der Lage, r als Integer verwenden bin durch umhüllt es mit diesen einfachen Anführungszeichen. 418 00:30:33,850 --> 00:30:40,560 Um unsere printf Anweisung zurück, wo wir einen Platzhalter für einen Charakter haben 419 00:30:40,560 --> 00:30:43,590 und dann ein Platzhalter für eine ganze Zahl, 420 00:30:43,590 --> 00:30:49,450 der Charakter wird durch die chr dargestellt, und die Zahl ist der Schlüssel. 421 00:30:49,450 --> 00:30:54,320 Und so ist, dann werden wir in Folge fügen Sie die 2 zusammen. 422 00:30:54,320 --> 00:30:58,420 So werden wir r hinzuzufügen +, was der Schlüssel ist, 423 00:30:58,420 --> 00:31:03,520 und dann werden wir das Ergebnis, dass zu drucken. 424 00:31:06,210 --> 00:31:14,220 So lasst uns asciimath. Es ist up to date, so lasst uns einfach laufen asciimath. 425 00:31:14,220 --> 00:31:18,290 Oh, aber sehen, ist es nicht tun, weil wir nicht wirklich geben hat es einen Schlüssel. 426 00:31:18,290 --> 00:31:23,850 Also, wenn es gerade ein, unsere Funktion ist es gerade an uns zurück. 427 00:31:23,850 --> 00:31:29,250 Also lasst uns in einem Schlüssel übergeben. Mir jemand eine Nummer. >> [Schüler] 4. 428 00:31:29,250 --> 00:31:30,920 4. Okay. 429 00:31:30,920 --> 00:31:39,280 R so um 4 wird uns v, die auf den ASCII-Wert von 118 entspricht. 430 00:31:39,280 --> 00:31:43,880 Also es irgendwie Sinn macht, dass - 431 00:31:43,880 --> 00:31:51,250 Eigentlich kann ich frage Sie, was denken Sie, die ASCII-Wert von r ist, wenn r + 4 ist 118? 432 00:31:53,070 --> 00:31:55,470 Dann ja, das ist r 114. 433 00:31:55,470 --> 00:32:03,010 Also, wenn Sie auf der ASCII-Tabelle dann schauen, sicher genug, sehen Sie, dass r um 114 vertreten ist. 434 00:32:03,010 --> 00:32:08,610 So, jetzt wissen wir, dass wir Zahlen, Zeichen hinzuzufügen, scheint dies ziemlich einfach. 435 00:32:08,610 --> 00:32:12,740 Wir gehen nur zu iterieren eine Zeichenkette wie wir in einem Beispiel vor sah. 436 00:32:12,740 --> 00:32:17,170 Wir prüfen, ob es ein Brief ist. 437 00:32:17,170 --> 00:32:20,420 Wenn ja, dann werden wir es durch, was der Schlüssel ist, zu verschieben. 438 00:32:20,420 --> 00:32:23,650 Ganz einfach, außer wenn Sie dies möchten, 439 00:32:23,650 --> 00:32:32,140 Sie sehen, dass z, vertreten durch 122, dann würde Ihnen einen anderen Charakter. 440 00:32:32,140 --> 00:32:37,770 Wir haben eigentlich wollen innerhalb unseres Alphabets zu bleiben, nicht wahr? 441 00:32:37,770 --> 00:32:43,180 Also müssen wir herausfinden, einen Weg Art Umwickeln. 442 00:32:43,180 --> 00:32:47,190 Wenn Sie zed zu erreichen, und Sie möchten eine bestimmte Anzahl zu erhöhen, 443 00:32:47,190 --> 00:32:51,230 Sie wollen nicht in außerhalb des ASCII-Alphabet Abschnitt gehen; 444 00:32:51,230 --> 00:32:54,140 Sie wickeln zurück hin zu A. 445 00:32:54,140 --> 00:32:58,550 Aber bedenken Sie, du bist immer noch die Erhaltung der Fall. 446 00:32:58,550 --> 00:33:00,980 So wissen, dass Briefe nicht Symbolen geworden 447 00:33:00,980 --> 00:33:05,290 wie Symbole werden nicht mehr so ​​gut zu ändern. 448 00:33:05,290 --> 00:33:08,170 In der letzten pset Sie definitiv nicht brauchen, um, 449 00:33:08,170 --> 00:33:14,310 aber eine Option war, um Ihre gierigen pset mit der Modulo-Funktion zu implementieren. 450 00:33:14,310 --> 00:33:17,230 Aber jetzt sind wir wirklich brauchen, um Modul verwenden, 451 00:33:17,230 --> 00:33:19,900 so lasst uns einfach über diese ein wenig gehen. 452 00:33:19,900 --> 00:33:26,920 Im Wesentlichen, wenn Sie x modulo y, die Ihnen den Rest von x durch y geteilt. 453 00:33:26,920 --> 00:33:30,930 Hier sind einige Beispiele. Wir haben 27% 15. 454 00:33:30,930 --> 00:33:36,200 Grundsätzlich, wenn Sie subtrahieren 15 von 27 so oft wie möglich, ohne sich negativ 455 00:33:36,200 --> 00:33:39,060 dann bekommst du 12 übrig. 456 00:33:39,060 --> 00:33:44,650 Also das ist ein bisschen wie in der Mathematik Kontext, aber wie können wir tatsächlich nutzen das? 457 00:33:44,650 --> 00:33:47,100 Es wird für unsere wrapover nützlich. 458 00:33:47,100 --> 00:33:55,420 Dafür sagen wir einfach, fragte ich Sie alle in 3 Gruppen einteilen. 459 00:33:55,420 --> 00:33:58,010 Manchmal tun dies in Gruppen und so etwas. 460 00:33:58,010 --> 00:34:01,320 Sagen wir, ich sagte: "Okay, ich Sie alle wollen in 3 geteilt werden." 461 00:34:01,320 --> 00:34:04,240 Wie können Sie das tun? 462 00:34:04,240 --> 00:34:06,810 [Unverständlich Studenten Antwort] Ja, genau. Abzuzählen. Okay. 463 00:34:06,810 --> 00:34:10,260 Lasst uns wirklich tun. Wollen Sie anfangen? 464 00:34:10,260 --> 00:34:13,810 [Schüler Abzählen] 1, 2, 3, 4. 465 00:34:13,810 --> 00:34:16,620 Aber nicht vergessen ... >> [Schüler] Oh, sorry. 466 00:34:16,620 --> 00:34:18,730 Das ist ein wirklich guter Punkt. 467 00:34:18,730 --> 00:34:24,130 Du hast gesagt, 4, aber wir eigentlich wollen Sie 1 sagen, weil wir wollen nur 3 Gruppen. 468 00:34:24,130 --> 00:34:30,159 Also dann, wie - Nein, das ist ein wirklich gutes Beispiel, weil dann, wie Sie vielleicht 1 sagen? 469 00:34:30,159 --> 00:34:33,370 Was ist die Beziehung zwischen 4 und 1? 470 00:34:33,370 --> 00:34:36,760 Nun, das ist 4 mod 3 1. 471 00:34:36,760 --> 00:34:41,460 Also, wenn Sie fortfahren, würden Sie 2 sein. 472 00:34:41,460 --> 00:34:44,540 So haben wir 1, 2, 3, 1, 2. 473 00:34:44,540 --> 00:34:49,420 Wieder bist du eigentlich die fünfte Person. Woher wissen Sie, auf 2 statt 5 sagen? 474 00:34:49,420 --> 00:34:53,760 Du sagst 5 mod 3 = 2 ist. 475 00:34:53,760 --> 00:34:59,100 Ich möchte sehen, wie viele Gruppen von 3 übrig bleiben, dann die Reihenfolge bin ich 476 00:34:59,100 --> 00:35:02,860 Und so ist, dann, wenn wir weiter entlang der ganze Raum, 477 00:35:02,860 --> 00:35:07,760 dann würden wir sehen, dass wir immer die tatsächliche Anwendung der MOD-Funktion, um uns 478 00:35:07,760 --> 00:35:09,990 zur Art der abzählen. 479 00:35:09,990 --> 00:35:14,490 Das ist eine weitere Art von konkretes Beispiel dafür, wie Sie modulo verwenden 480 00:35:14,490 --> 00:35:17,960 weil ich sicher bin die meisten von uns haben wahrscheinlich durch diesen Prozess gegangen 481 00:35:17,960 --> 00:35:19,630 wo wir mussten abzählen. 482 00:35:19,630 --> 00:35:21,840 Haben Sie Fragen zu modulo? 483 00:35:21,840 --> 00:35:25,360 Es wird sehr wichtig, die Begriffe zu verstehen, 484 00:35:25,360 --> 00:35:28,640 so möchte ich sicherstellen, dass Sie Leute verstehen. 485 00:35:28,640 --> 00:35:34,660 [Schüler] Wenn es keinen Rest, bedeutet es Ihnen die tatsächliche Zahl? 486 00:35:34,660 --> 00:35:40,430 Wenn einer der ersten 3 von ihnen es getan hätte, wäre es ihnen gegeben habe, was sie tatsächlich waren, 487 00:35:40,430 --> 00:35:43,310 oder würde es ihnen haben [unverständlich] >> Das ist eine gute Frage. 488 00:35:43,310 --> 00:35:48,750 Wenn es keinen Rest für die Modulo - so sagen, Sie haben 6 mod 3 - 489 00:35:48,750 --> 00:35:52,340 das tatsächlich gibt Ihnen zurück 0. 490 00:35:53,670 --> 00:35:57,290 Wir werden darüber etwas später sprechen. 491 00:35:58,810 --> 00:36:07,720 Oh yeah, zum Beispiel die dritte Person - ist 3 mod 3 tatsächlich 0 aber sie sagte, 3. 492 00:36:07,720 --> 00:36:14,900 Also das ist ein bisschen wie eine innere Haken, zum Beispiel, 493 00:36:14,900 --> 00:36:17,620 wie okay, wenn der mod dann 0 ist werde ich die dritte Person sein. 494 00:36:17,620 --> 00:36:22,740 Aber wir werden in Art, wie wir wollen mit dem, was 0 ist später beschäftigen zu bekommen. 495 00:36:22,740 --> 00:36:32,750 So jetzt haben wir irgendwie einen Weg der Kartierung der zed nach rechts Brief. 496 00:36:32,750 --> 00:36:34,920 So, jetzt haben wir durch diesen Beispielen gegangen, 497 00:36:34,920 --> 00:36:37,880 wir irgendwie sehen, wie Caesar funktionieren könnte. 498 00:36:37,880 --> 00:36:42,640 Sie sehen die 2 Alphabete und dann sieht man sie verschiebt. 499 00:36:42,640 --> 00:36:44,430 Also lasst uns versuchen, auszudrücken, dass in Bezug auf die Formel. 500 00:36:44,430 --> 00:36:46,940 Diese Formel ist eigentlich für Sie in der Spezifikation angegeben, 501 00:36:46,940 --> 00:36:52,070 aber lassen Sie uns Art des Blickes durch das, was jede Variable bedeutet. 502 00:36:52,070 --> 00:36:55,000 Unser Resultat wird der verschlüsselte Text sein. 503 00:36:55,000 --> 00:36:58,300 Also das sagt, dass die i-te Zeichen der Geheimtext 504 00:36:58,300 --> 00:37:02,500 wird der i-te Zeichen des Klartextes entsprechen. 505 00:37:02,500 --> 00:37:08,130 Das macht Sinn, weil wir immer sein Futter diese Dinge wollen. 506 00:37:08,130 --> 00:37:13,480 So, es wird das i-te Zeichen des Chiffretext sowie k, die unsere Schlüssel sein - 507 00:37:13,480 --> 00:37:17,230 das macht Sinn - und dann haben wir diese mod 26. 508 00:37:17,230 --> 00:37:19,860 Erinnern Sie sich zurück, wenn wir die zed hatten 509 00:37:19,860 --> 00:37:24,190 Wir wollten nicht in den Charakter zu bekommen, so wollten wir es mod 510 00:37:24,190 --> 00:37:26,540 und Art der Wrap-around des Alphabets. 511 00:37:26,540 --> 00:37:33,430 Nach zed Sie ein zu gehen, b, c, d, bis Sie sich mit der richtigen Nummer. 512 00:37:33,430 --> 00:37:44,690 So wissen wir, dass zed, wenn + 6, würde uns f denn nach zed kommt a, b, c, d, e, f. 513 00:37:44,690 --> 00:37:52,530 So erinnern wir wir sicher wissen, dass zed + 6 wird uns f. 514 00:37:52,530 --> 00:38:03,530 In ASCII-Werte, z 122 und f 102. 515 00:38:03,530 --> 00:38:10,570 Also müssen wir einen Weg, unsere Caesar Formel zu finden uns 102 516 00:38:10,570 --> 00:38:13,590 nach der Einnahme in 122. 517 00:38:13,590 --> 00:38:19,550 Also, wenn wir nur gelten diese Formel, die ('z' + 6)% 26, das tatsächlich gibt Ihnen 24 518 00:38:19,550 --> 00:38:25,980 weil 122 + 6 128; 128% 26 gibt Ihnen 24 übrigen. 519 00:38:25,980 --> 00:38:29,140 Aber das bedeutet nicht wirklich f. Das ist definitiv nicht 102. 520 00:38:29,140 --> 00:38:33,590 Das ist auch nicht der sechste Buchstabe im Alphabet. 521 00:38:33,590 --> 00:38:41,550 So offensichtlich, müssen wir einen Weg der Feinabstimmung dieses ein wenig zu haben. 522 00:38:42,970 --> 00:38:51,340 Im Hinblick auf die regelmäßige Alphabet, wissen wir, dass z der 26. Buchstabe ist und f die sechste. 523 00:38:51,340 --> 00:38:55,460 Aber wir sind in der Informatik, so dass wir zum Index gehen auf 0 gesetzt. 524 00:38:55,460 --> 00:39:00,690 Also anstelle von z ist die Zahl 26, wir gehen es die Nummer 25 sagen, 525 00:39:00,690 --> 00:39:02,630 weil a 0 ist. 526 00:39:02,630 --> 00:39:04,770 So, jetzt lasst uns gelten diese Formel. 527 00:39:04,770 --> 00:39:11,710 Wir haben z durch 25 + 6 dargestellt, die Ihnen 31. 528 00:39:11,710 --> 00:39:15,790 Und 31 mod 26 gibt Ihnen 5 als Rest. 529 00:39:15,790 --> 00:39:20,500 Das ist perfekt, weil wir wissen, dass f die fünfte Buchstabe im Alphabet ist. 530 00:39:20,500 --> 00:39:26,400 Aber es ist noch nicht f, nicht wahr? Es ist noch nicht 102. 531 00:39:26,400 --> 00:39:32,730 Also für diese pset, wird eine Herausforderung werden versuchen, herauszufinden, die Beziehung 532 00:39:32,730 --> 00:39:36,910 zwischen Konvertierung zwischen diesen ASCII-Werte und der alphabetischen Index. 533 00:39:36,910 --> 00:39:40,280 Im Grunde, was Sie tun wollen, wollen Sie beginnen mit den ASCII-Werten, 534 00:39:40,280 --> 00:39:45,390 aber dann wollen Sie irgendwie übersetzen, dass in einem alphabetischen Index 535 00:39:45,390 --> 00:39:52,610 dann berechnen, welchen Buchstaben es sein sollte - im Grunde, was seinem alphabetischen Index 536 00:39:52,610 --> 00:39:57,660 der Chiffre Charakter - dann übersetzen diese zurück zu den ASCII-Werte. 537 00:39:57,660 --> 00:40:04,870 Also, wenn Sie sich peitschen Ihre ASCII-Tabelle, dann versuchen und finden Sie die Beziehungen zwischen, sagen wir, 102 und 5 538 00:40:04,870 --> 00:40:10,440 oder die 122 und 25. 539 00:40:12,140 --> 00:40:15,690 Wir haben unsere Schlüssel aus den Befehlszeilenargumenten bekommen, haben wir den Klartext bekommen, 540 00:40:15,690 --> 00:40:17,520 wir haben es verschlüsselt. 541 00:40:17,520 --> 00:40:19,820 Jetzt müssen wir noch zu tun haben, ist zu drucken. 542 00:40:19,820 --> 00:40:22,040 Wir könnten dies tun ein paar verschiedene Möglichkeiten. 543 00:40:22,040 --> 00:40:24,570 Was wir tun können, ist tatsächlich drucken, wie wir entlang gehen. 544 00:40:24,570 --> 00:40:28,250 Als wir über iterieren die Zeichen in der Zeichenfolge, 545 00:40:28,250 --> 00:40:31,660 konnten wir einfach nur rechts und dann drucken, wenn wir sie zu berechnen. 546 00:40:31,660 --> 00:40:36,030 Alternativ können Sie auch speichern sie in einem Array und haben eine Reihe von Zeichen 547 00:40:36,030 --> 00:40:39,280 und am Ende über diese gesamte Array durchlaufen und drucken Sie es aus. 548 00:40:39,280 --> 00:40:40,980 So haben Sie eine Reihe von Optionen dafür. 549 00:40:40,980 --> 00:40:47,280 Und denken Sie daran, dass% c wird der Platzhalter für den Druck ein Zeichen sein. 550 00:40:47,280 --> 00:40:50,420 So, da haben wir Caesar, und jetzt bewegen wir uns auf Vigenere, 551 00:40:50,420 --> 00:40:57,580 das ist sehr ähnlich wie Caesar, sondern nur etwas komplexer. 552 00:40:57,580 --> 00:41:03,310 So im Wesentlichen mit Vigenere wird wirst du in ein Schlüsselwort vorbei fährt. 553 00:41:03,310 --> 00:41:06,510 Also statt einer Zahl, wirst du einen String haben, 554 00:41:06,510 --> 00:41:09,200 und damit geht um Sie als Suchbegriff zu handeln. 555 00:41:09,200 --> 00:41:14,440 Dann, wie üblich, wirst du eine Eingabeaufforderung für einen String zu bekommen von dem Benutzer 556 00:41:14,440 --> 00:41:19,050 und dann verschlüsseln und dann ihnen die Chiffretext zurück. 557 00:41:19,050 --> 00:41:24,650 Also wie gesagt, es ist sehr ähnlich zu Caesar, aber anstatt der Verlagerung von einer bestimmten Anzahl, 558 00:41:24,650 --> 00:41:30,620 die Zahl ist eigentlich los, um jedes Mal von Charakter zu Charakter ändern. 559 00:41:30,620 --> 00:41:34,890 Um sicherzustellen, dass tatsächliche Zahl darstellen zu verschieben, ist es von der Tastatur Buchstaben dargestellt. 560 00:41:34,890 --> 00:41:43,150 Also, wenn Sie in einer Verschiebung der a, zum Beispiel geben, dann wäre das zu einer Verschiebung von 0 entsprechen. 561 00:41:43,150 --> 00:41:45,900 Es ist also wieder zurück zur alphabetischen Index. 562 00:41:45,900 --> 00:41:49,100 Was könnte nützlich sein, wenn Sie sehen, dass wir tatsächlich den Umgang mit ASCII-Werte sind 563 00:41:49,100 --> 00:41:51,790 sowie die Briefe, sowie der alphabetischen Index, 564 00:41:51,790 --> 00:41:58,020 vielleicht finden oder ein eigenes ASCII-Tabelle, die den alphabetischen Index von 0 bis 25 zeigt, 565 00:41:58,020 --> 00:42:03,750 a bis z und die ASCII-Werte, so dass Sie irgendwie sehen die Beziehung 566 00:42:03,750 --> 00:42:07,020 und skizzieren und versuchen Sie einige Muster. 567 00:42:07,020 --> 00:42:11,010 Ebenso, wenn Sie wurden bei der bestimmte Instanz Verschiebung um f - 568 00:42:11,010 --> 00:42:21,110 und dies ist entweder Klein-oder Großbuchstaben f - dann wäre bis 5 entsprechen. 569 00:42:21,110 --> 00:42:24,180 Sind wir gut so weit? 570 00:42:25,770 --> 00:42:30,050 Die Formel für Vigenere ist ein bisschen anders. 571 00:42:30,050 --> 00:42:32,960 Grundsätzlich sehen Sie, dass es genau wie Caesar ist, 572 00:42:32,960 --> 00:42:37,390 Ausnahme statt nur k haben wir k Index j. 573 00:42:37,390 --> 00:42:44,810 Beachten Sie, dass wir nicht mit i, weil im Wesentlichen die Länge des Schlüsselworts 574 00:42:44,810 --> 00:42:49,850 ist nicht notwendigerweise der Länge der Chiffretext. 575 00:42:49,850 --> 00:42:56,130 Dies wird ein wenig klarer sein, wenn wir ein Beispiel, dass ich ein bisschen haben später sehen. 576 00:42:56,130 --> 00:43:03,160 Grundsätzlich, wenn Sie Ihr Programm ausführen mit dem Schlüsselwort ohai, 577 00:43:03,160 --> 00:43:08,560 dann heißt das, dass jedes Mal, ohai wird Ihre Verschiebung sein. 578 00:43:08,560 --> 00:43:11,060 Also je nachdem, welche Position Sie in Ihrem Keyword 579 00:43:11,060 --> 00:43:15,800 Sie gehen zu Ihrem bestimmten Chiffretextzeichen um diesen Betrag zu verschieben. 580 00:43:15,800 --> 00:43:19,630 Wieder, wie Caesar, wollen wir sicherstellen, dass wir die Aktivierung der Dinge zu bewahren 581 00:43:19,630 --> 00:43:22,900 und wir haben nur encipher Buchstaben, nicht in Zeichen oder Leerzeichen. 582 00:43:22,900 --> 00:43:26,330 So blickt die Caesar auf die Funktionen, die Sie verwendet haben, 583 00:43:26,330 --> 00:43:32,570 die Art und Weise, dass Sie sich entschieden haben, wie die Dinge verschieben, und gelten, dass Ihr Programm hier. 584 00:43:32,570 --> 00:43:35,260 Also lasst uns Kartenansicht heraus. 585 00:43:35,260 --> 00:43:39,680 Wir haben einen Klartext, dass wir aus der Benutzer aus GetString bekommen 586 00:43:39,680 --> 00:43:44,090 sagen This ... ist CS50! 587 00:43:44,090 --> 00:43:47,090 Dann haben wir ein Schlüsselwort ohai. 588 00:43:47,090 --> 00:43:50,930 Die ersten 4 Zeichen sind ziemlich einfach. 589 00:43:50,930 --> 00:43:55,580 Wir wissen, dass T wird durch o verschoben werden, 590 00:43:55,580 --> 00:44:01,990 dann h wird durch h verschoben werden, wird i würde durch a verschoben werden. 591 00:44:01,990 --> 00:44:04,610 Hier sehen Sie, dass eine 0 steht, 592 00:44:04,610 --> 00:44:11,940 so wird der Endwert ist eigentlich nur die gleichen Buchstaben wie vorher. 593 00:44:11,940 --> 00:44:15,250 Dann s wird durch i verschoben. 594 00:44:15,250 --> 00:44:19,370 Aber dann haben Sie diese Zeit hier. 595 00:44:19,370 --> 00:44:25,960 Wir wollen nicht zu verschlüsseln, dass, so werden wir nicht ändern, es durch nichts 596 00:44:25,960 --> 00:44:31,280 und nur Ausdruck der Zeit unverändert. 597 00:44:31,280 --> 00:44:38,020 [Schüler] Ich verstehe nicht, wie Sie wissen, dass dies durch verschoben wird - Wo haben Sie - >> Oh, sorry. 598 00:44:38,020 --> 00:44:41,620 An der Spitze hier sehen Sie, dass das Befehlszeilenargument ohai hier 599 00:44:41,620 --> 00:44:43,740 das wird sich das Schlüsselwort sein. 600 00:44:43,740 --> 00:44:49,550 Und so grundsätzlich, Sie über die Zeichen in dem Schlüsselwort Radfahren. 601 00:44:49,550 --> 00:44:52,020 [Schüler] So o wird zu verlagern das gleiche - 602 00:44:52,020 --> 00:44:56,260 So o entspricht einer bestimmten Anzahl im Alphabet. 603 00:44:56,260 --> 00:44:58,400 [Schüler] Right. Aber wo hast du den CS50 Teil aus? 604 00:44:58,400 --> 00:45:02,540 Oh. Das ist in GetString, wo du, du "Gib mir einen String zu kodieren." 605 00:45:02,540 --> 00:45:07,510 [Schüler] Sie werden euch dieses Argument durch verschieben 606 00:45:07,510 --> 00:45:09,380 und dann wirst du für den ersten String fragen. >> Yeah. 607 00:45:09,380 --> 00:45:12,440 Also, wenn sie das Programm ausführen, werden sie das Schlüsselwort enthalten 608 00:45:12,440 --> 00:45:14,740 in ihrer Befehlszeilenargumente, wenn sie es laufen. 609 00:45:14,740 --> 00:45:19,740 Dann, wenn Sie überprüft haben, dass sie habe tatsächlich euch 1 und nicht mehr, nicht weniger, 610 00:45:19,740 --> 00:45:23,750 dann werde sie für eine Zeichenfolge aufgefordert sind, sagen: "Gib mir einen String zurück." 611 00:45:23,750 --> 00:45:27,630 Also das ist, wo sie in diesem Fall Sie diese gegeben haben ... ist CS50! 612 00:45:27,630 --> 00:45:32,090 So dann wirst du zu bedienen, dass und verwenden ohai und iterieren. 613 00:45:32,090 --> 00:45:38,200 Beachten Sie, dass wir hier über die Verschlüsselung der Zeit übersprungen, 614 00:45:38,200 --> 00:45:51,660 aber im Hinblick auf unsere Position für ohai, das nächste verwendeten wir o. 615 00:45:51,660 --> 00:45:54,990 In diesem Fall ist es ein bisschen schwieriger zu sehen, denn das ist 4, 616 00:45:54,990 --> 00:45:57,710 also lasst uns weiterhin ein wenig. Nur mit mir hier bleiben. 617 00:45:57,710 --> 00:46:02,960 Dann haben wir i und s, die dann von o und h jeweils umgerechnet. 618 00:46:02,960 --> 00:46:09,370 Dann haben wir einen Raum, und so wissen wir, dass wir nicht um die Räume zu verschlüsseln. 619 00:46:09,370 --> 00:46:18,930 Aber beachten Sie, dass anstatt ein an dieser Stelle genau hier, 620 00:46:18,930 --> 00:46:28,330 wir durch eine Verschlüsselung - ich weiß nicht, ob du das kannst sehen - hier richtig. 621 00:46:28,330 --> 00:46:33,710 So ist es nicht wie Sie tatsächlich vorgegebenen, sagen wir, o hier geht, geht h hier 622 00:46:33,710 --> 00:46:39,200 a geht hier geht ich hier, o, h, a, i, o, h, a, i. Sie tun das nicht. 623 00:46:39,200 --> 00:46:43,760 Sie nur verschieben Sie Ihre Position in dem Schlüsselwort 624 00:46:43,760 --> 00:46:51,020 wenn Sie wissen, dass Sie tatsächlich gehen zu verschlüsseln eine tatsächliche Brief. 625 00:46:51,020 --> 00:46:53,920 Hat diese Art von Sinn? 626 00:46:53,920 --> 00:46:55,800 Okay. 627 00:46:56,490 --> 00:46:58,500 Also einfach ein paar Erinnerungen. 628 00:46:58,500 --> 00:47:03,760 Sie wollen sicherstellen, dass Sie nur bis zum nächsten Brief in Ihren Suchbegriff voranzutreiben 629 00:47:03,760 --> 00:47:06,390 wenn der Charakter in Ihren Klartext ist ein Brief. 630 00:47:06,390 --> 00:47:09,120 So sagen wir in der o. 631 00:47:09,120 --> 00:47:19,310 Wir bemerken, dass das nächste Zeichen der Index i des Klartextes, eine Zahl ist, zum Beispiel. 632 00:47:19,310 --> 00:47:31,630 Dann werden wir nicht voran j der Index für unsere Schlüsselwort, bis wir einen weiteren Brief zu erreichen. 633 00:47:31,630 --> 00:47:36,230 Auch Sie wollen auch sicherstellen, dass Sie Wraparound an den Anfang des Schlüsselwortes 634 00:47:36,230 --> 00:47:37,770 wenn Sie am Ende dabei sind. 635 00:47:37,770 --> 00:47:42,030 Wenn Sie sehen, wir hier bei i sind, hat die nächsten ein bis o sein. 636 00:47:42,030 --> 00:47:47,690 Sie wollen also einen Weg zu können wraparound an den Anfang Ihrer Keyword finden 637 00:47:47,690 --> 00:47:49,470 jedes Mal, wenn Sie das Ende erreichen. 638 00:47:49,470 --> 00:47:55,040 Und so wieder, welche Art von Operator ist nützlich, in diesem Fall zum Umwickeln? 639 00:47:56,630 --> 00:47:59,840 Wie in der Zählung off Beispiel. 640 00:47:59,840 --> 00:48:03,710 [Schüler] Das Prozentzeichen. >> Ja, das Prozent-Zeichen, die modulo ist. 641 00:48:03,710 --> 00:48:11,250 So modulo wird sich als nützlich hierher kommen, wenn Sie wickeln über den Index in Ihrem ohai wollen. 642 00:48:11,250 --> 00:48:17,700 Und nur eine schnelle Tipp: Versuchen Sie, wickeln Sie das Schlüsselwort ein bisschen wie das Abzählen denken, 643 00:48:17,700 --> 00:48:23,590 wo, wenn es 3 Gruppen, die vierte Person, 644 00:48:23,590 --> 00:48:30,610 ihre Zahl, dass sie sagte, war 4 mod 3, die 1 war. 645 00:48:30,610 --> 00:48:32,880 So versuchen und halten sie auf diese Weise. 646 00:48:34,770 --> 00:48:42,740 Wie Sie gesehen haben in der Formel, wo immer Sie ci und dann pi haben aber dann kj, 647 00:48:42,740 --> 00:48:44,700 Sie wollen sicherstellen, dass Sie den Überblick zu halten von denen. 648 00:48:44,700 --> 00:48:47,580 Sie brauchen nicht nennen es i, müssen Sie nicht nennen es j, 649 00:48:47,580 --> 00:48:53,270 aber Sie möchten sicherstellen, dass Sie Spur zu halten von der Position, dass Sie sich in Ihrem Klartext 650 00:48:53,270 --> 00:48:55,790 sowie die Position, dass Sie sich in Ihrem Suchbegriff sind 651 00:48:55,790 --> 00:48:59,840 denn diese sind nicht notwendigerweise die gleichen sein. 652 00:48:59,840 --> 00:49:06,400 Nicht nur, dass das Schlüsselwort - es könnte eine ganz andere Länge als Ihren Klartext sein. 653 00:49:06,400 --> 00:49:09,140 Auch Ihren Klartext, gibt es Zahlen und Zeichen, 654 00:49:09,140 --> 00:49:14,450 so ist es nicht zu perfekt zusammen. Ja. 655 00:49:14,450 --> 00:49:19,280 [Schüler] Gibt es eine Funktion zu Fall ändern? 656 00:49:19,280 --> 00:49:24,530 Können Sie eine Kapital A? >> Ja, es ist definitiv. 657 00:49:24,530 --> 00:49:27,890 Sie können sich - ich glaube, es ist toupper, alle 1 Wort. 658 00:49:30,650 --> 00:49:36,310 Aber wenn man versucht, die Dinge zu verschlüsseln und die Erhaltung der Text, 659 00:49:36,310 --> 00:49:39,350 ist es am besten grundsätzlich separaten Fälle. 660 00:49:39,350 --> 00:49:42,040 Wenn es ein Großbuchstabe ist, dann wollen Sie von dieser Verschiebung 661 00:49:42,040 --> 00:49:46,460 weil Sie in Ihrer Formel, wenn man zurückblickt, wie wir solche go 662 00:49:46,460 --> 00:49:50,900 auswechselbar zwischen dem ASCII Darstellungsweise die Zahlen 663 00:49:50,900 --> 00:49:55,020 und die tatsächliche alphabetischen Index, wollen wir sicherstellen, 664 00:49:55,020 --> 00:50:01,850 es geht um eine Art Muster, das Sie verwenden sind werden. 665 00:50:01,850 --> 00:50:04,580 Ein weiterer Hinweis auf das Muster, eigentlich. 666 00:50:04,580 --> 00:50:07,250 Du wirst auf jeden Fall mit Zahlen zu tun haben. 667 00:50:07,250 --> 00:50:11,280 Versuchen Sie nicht, magischen Zahlen zu verwenden, die ein Beispiel des Stils. 668 00:50:11,280 --> 00:50:18,470 So, Sie wollen zu jeder Zeit Verschiebung etwas von mögen - 669 00:50:18,470 --> 00:50:22,400 Okay, so Wink, ist ein weiterer Spoiler, wenn du gehst zu verschieben etwas sind 670 00:50:22,400 --> 00:50:26,310 um einen bestimmten Betrag, versuchen nicht auf diejenige durch eine tatsächliche Zahl darstellen 671 00:50:26,310 --> 00:50:32,810 sondern versuchen und sehen, ob Sie den ASCII-Wert, welche Art von machen mehr Sinn verwenden können. 672 00:50:32,810 --> 00:50:35,470 Noch ein Hinweis: Da wir mit Formeln zu tun haben, 673 00:50:35,470 --> 00:50:41,200 obwohl Ihr TF wird Art wissen, was Muster, das Sie verwenden möglicherweise, 674 00:50:41,200 --> 00:50:44,430 am besten in Ihren Kommentaren Art erklären, die Logik, wie, 675 00:50:44,430 --> 00:50:51,880 "Ich bin mit diesem Muster, weil ..." und die Art der zu erklären das Muster prägnant in Ihren Kommentaren. 676 00:50:54,090 --> 00:50:58,990 [Dies war Komplettlösung 2] Wenn es nicht noch andere Fragen gibt, dann werde ich einfach hier bleiben für ein wenig. 677 00:50:58,990 --> 00:51:04,370 Viel Glück mit Ihrem pset 2: Crypto und danke für Ihr Kommen. 678 00:51:06,070 --> 00:51:08,620 [Student] Danke. >> Danke. 679 00:51:09,220 --> 00:51:10,800 [Media Offline-intro]