[Powered by Google Translate] [Walkthrough - Problem Set 2]
[Zamyla Chan - Harvard University]
[Dies ist CS50. CS50.TV]
Gut. Hallo, alle, und Lösungsweg 2 begrüßen zu dürfen.
Zunächst möchte ich Ihnen für die Ausrüstung pset 1 gratulieren.
Ich weiß, dass es hätte ein bisschen hart für einige von euch haben,
hätte Ihren ersten Computer-Programm, das Sie geschrieben haben,
sondern nur daran erinnern, dass am Ende dieser, wenn man zurückblickt am Ende des Semesters
Sie bei pset 1 aussehen und du wirst sagen: "Hey, ich hätte tun können, dass in 5 Minuten."
So kennen und vertrauen, dass am Ende dieses finden Sie auf jeden Fall finden pset 1 ganz einfach.
Aber jetzt ist es eine große Leistung, und herzlichen Glückwunsch zu immer getan.
Nun, auch eine kurze Notiz, bevor wir in das Fleisch der Komplettlösung.
Ich möchte nur eine kurze Notiz zu machen, dass ich manchmal nicht genug Zeit haben,
während der Komplettlösungen durch jede einzelne Art, die das Problem set go
und eher nur vielleicht auf 1 oder 2 Art Implementierungen konzentrieren,
Möglichkeiten, wie Sie dies tun könnte.
Aber das ist nicht zu sagen, dass Sie zu tun, es einen anderen Weg, sind verboten.
Oft gibt es, wie bei der Informatik, zahlreiche Möglichkeiten, Dinge zu tun,
und so sicher fühlen Sie sich frei, um eine andere Art von Lösung als ich vorgestellt habe verwenden.
[Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net]
[Pset2 - 0. Ein Abschnitt der Fragen - 1. Caesar - 2. Vigenere]
Gut. So Problem Set 2: Crypto ist ein Spaß ein.
Wieder mit jedem pset Sie mit einem Querschnitt von Fragen beginnen
das wird in Ihrem Abschnitte mit Ihnen zugewiesenen Lehre Kollegen durchgeführt werden.
Wir werden nicht durch diese über die Komplettlösung zu gehen,
aber auf jeden Fall helfen Ihnen bei der pset.
Also der erste Teil des Problems Set ist Caesar.
Und so Caesar jemand übergeben Sie einen Schlüssel mit einer ganzen Zahl,
und du wirst verschlüsseln eine Textzeichenfolge, dass sie Ihnen
und geben sie wieder eine verschlüsselte Sache.
Wenn jemand beobachtete A Christmas Story, es ist ein Beispiel, dass es.
Dann wird der zweite Teil des Problems Set ist Vigenere,
das ist eine erweiterte Verschlüsselungstechnik.
Und so werden wir einen Text verschlüsseln,
aber anstatt mit nur einer einzigen Zahl, wir eigentlich los um sie zu codieren
mit einem Schlüsselwort, dass der Benutzer uns zur Verfügung stellen.
Okay, so dass das erste Werkzeug in der Werkzeugpalette ist heute eigentlich los, um die Aktualisierung des Geräts.
Auf der Diskussionsrunde würden wir Dinge wie zu sehen: "Warum nicht diese Arbeit?"
"Warum nicht Absenden 50 arbeiten?"
und oft die Lösung ist eigentlich nur, um Ihr Gerät zu aktualisieren.
Und so, wenn Sie nur in einem Terminal-Fenster in Ihrem Gerät sudo yum-y laufen -
das ist ein Flag, ja zu sagen, zu aktualisieren alles - Update
dann ist dein Gerät wird aktualisiert, wenn nötig zu sein.
Und es tut nicht weh, wenn Sie bereits auf der jüngsten Version der Appliance.
Dann wird es einfach sagen, keine neuen Updates zur Verfügung und Sie können weiterarbeiten zusammen.
Aber das ist gut, selbst auszuführen jedes Mal, dass Sie das Gerät öffnen
weil wir noch sehr viel -
manchmal, wenn wir kommen in ein bug - Befestigung im Gerät.
So stellen Sie sicher, dass Sie die aktuellste Version des Gerätes haben
und führen, dass es zu aktualisieren.
Gut. So da wir mit Briefen zu tun und ändern, Verschlüsselung Dinge,
werden wir wirklich wollen, um die besten Freunde mit unseren ASCII-Tabelle werden.
Es gibt zahlreiche diejenigen online, wenn Sie zu finden. Vielleicht sogar Ihre eigenen.
Grundsätzlich mit jedem Buchstaben und jede Zahl und jeden Charakter
es ist eine Zahl mit ihnen verbundenen,
und so ist es gut, ihre ASCII-Werte neben dem eigentlichen Brief zu sehen.
Das wird definitiv helfen Ihnen bei der gestellten Aufgabe.
Eine Sache, die mir wirklich geholfen bei diesem Problem Satz war tatsächlich ausdrucken,
und als ich ging durch, würde ich tatsächlich zu zeichnen,
schreiben: "Wenn dies muss dorthin gehen, dann ..."
Art zu zeichnen, zeichnen ihn aus, werden die besten Freunde mit Ihrem ASCII-Tabelle.
Dann haben wir ein paar andere Werkzeuge zur Verfügung.
Dieses Mal statt tatsächlich den Benutzer zur Eingabe all ihrer Eingabe
werden wir eine Kombination zu tun.
Wir werden sie für einige Eingabe auffordern,
aber wir sind auch zu benutzen Sie einfach die Kommandozeilen-Argumente.
Also, wenn sie ihr Programm ausführen, in der Regel sagen Sie. / Hallo, zum Beispiel,
wenn Ihr Programm war hello.c.
Aber dieses Mal, anstatt nur sagen, dass, können sie Worte, Argumente danach zu setzen.
Und so werden wir nutzen, was sie in uns als ihre Eingabe passieren, wie gut,
so bewegend über die reine Aufforderung zur Zahl, sondern auch die Verwendung der Befehlszeile Argumente.
Und dann werden wir in Arrays und Strings, die wir verwenden eine Menge als auch gehe.
Hier ist nur ein Beispiel für 1 Mini-ASCII-Tabelle.
Wie ich schon sagte, entspricht jeder Buchstabe einer Reihe,
und so machen Sie sich damit. Es wird sich als nützlich erweisen.
Und später, wenn wir beginnen dabei einige ASCIIMath Umgang mit den Zahlen -
Addieren, Subtrahieren ihnen - dann definitiv gut zu diesem Diagramm entnehmen.
Also hier ist ein Beispiel für eine Caesar-Chiffre - etwas, dass Sie mit gespielt haben.
Es ist nur ein Rad. Im Wesentlichen gibt es eine äußere Alphabet und dann gibt es eine innere Alphabet.
So hier ist ein Beispiel für die Cäsar-Chiffre, aber mit einem Schlüssel von 0.
Im Wesentlichen A mit A ausgerichtet ist, B ist mit B ausgerichtet ist, den ganzen Weg bis Z.
Aber dann sagen wir wollten einen Schlüssel von 3, zum Beispiel.
Dann würden wir drehen das innere Rad, so dass A jetzt ausgerichtet D, etc.
Und dies ist im wesentlichen das, was wir tun werden.
Wir haben nicht ein Rad, sondern was wir tun müssen, ist unser Programm zu machen
Art der Verschiebung des Alphabets zusammen mit uns eine bestimmte Menge von Zahlen.
So wie ich schon sagte, wir gehen mit Befehlszeilenargumente zu tun
sowie immer eine ganze Zahl.
So die Art und Weise, dass ein Benutzer Ihrer Caesar Programm ausgeführt wird mit den Worten. / Caesar
und dann Eingabe einer Nummer darauf.
Und diese Zahl ist der Schlüssel, die Verschiebung,
wie oft du gehst zu Drehen des inneren Lenkrad Ihres Caesar-Chiffre sind.
Und damit Sie sehen hier ein Beispiel.
Wenn wir in die Buchstaben von A bis L in unserem Caesar-Chiffre,
dann wäre es Eingang D bis O, denn das ist jeder Brief über 3 Mal verschoben,
wie das Beispiel des Rades, dass ich Sie zeigte.
Also, wenn Sie eingegeben haben, zum Beispiel, ist diese CS50!
dann wäre es auch verschieben alle Buchstaben.
Und das ist eine wichtige Sache, sowohl Cäsar und Vigenere
ist, dass wir gehen zu überspringen alle Nicht-Buchstaben.
Also keine Leerzeichen, Zeichen, etc, Zahlen, werden wir halten sie das gleiche.
Wir sind nur gehen, um die Buchstaben in diesem Fall verschieben.
So wie Sie in das Rad zu sehen, wir haben nur die Buchstaben zur Verfügung zu stellen,
so wollen wir nur die Buchstaben verschieben und verschlüsseln die Briefe.
Also das erste, was zu tun, sah man, dass die Nutzung für Caesar in Problem 2 gesetzt
ist Caesar laufen und dann eine Nummer eingeben, wenn Sie es in der Klemme.
Also, was wir tun müssen, ist es irgendwie, dass Schlüssel und darauf zugreifen.
Und so wollen wir irgendwie sehen, es wird die zweite Befehlszeile Argument sein.
Die erste wird. / Caesar sein, und das nächste wird der Schlüssel Zahl sein.
Also, bevor wir hatten int main (void) an unsere C-Programme starten.
Wir schälen zurück eine Schicht ein wenig gehen
und tatsächlich sehen, dass statt der Übergabe in void unsere Hauptfunktion
wir eigentlich zu tun mit 2 Parametern.
Wir haben einen int namens argc und dann ein Array von Strings als argv.
So argc eine ganze Zahl,
und stellt die Anzahl der Argumente in Ihrem Programm übergeben.
Und dann argv ist eigentlich die Liste der Argumente übergeben.
Alle Argumente sind Zeichenfolgen, und so argv stellt ein Array, eine Liste von Strings.
Lassen Sie uns über Arrays ein wenig sprechen.
Arrays sind im Wesentlichen eine neue Datenstruktur.
Wir haben ints haben wir verdoppelt, wir haben Streicher, und jetzt haben wir Arrays.
Arrays sind Datenstrukturen, die mehrere Werte des gleichen Typs halten kann,
so im Wesentlichen eine Liste von welcher Art Sie wollen.
Im Wesentlichen, wenn Sie wollten eine Liste von ganzen Zahlen alle in 1 variable,
dann würden Sie eine neue Variable vom Typ int array war.
So Arrays sind nullindizierte, dh, das erste Element des Arrays mit dem Index 0 ist.
Wenn das Array der Länge 4, wie in diesem Beispiel, dann ist dein letztes Element würde bei Index 3 sein,
das ist 4 - 1.
So zum Array zu erstellen, würden Sie etwas tun.
Angenommen, Sie möchten eine doppelte Array.
Dies gilt für jede Art von Datentyp, though.
So sagen, Sie wollen eine doppelte Array. Angenommen, Sie möchten es nennen Mailbox.
Wie würden Sie initialisieren andere doppelt,
Sie würden das Doppelte und dann sagen Sie den Namen, aber dieses Mal stellen wir die eckigen Klammern,
und dann die Nummer es wird die Länge des Arrays ist.
Beachten Sie, dass in Arrays können wir nicht immer die Länge,
so haben Sie immer zu definieren und zu entscheiden, wie viele Boxen,
wie viele Werte das Array wird halten.
So unterschiedliche Werte im Array gesetzt, wirst du dieses folgende Syntax verwenden,
wie Sie sehen auf der Folie.
Sie haben Mailbox Index 0 auf 1,2 eingestellt werden,
Mailbox-Index 1 auf 2,4, etc.
So, jetzt haben wir überprüft Arrays ein bisschen, wir gehen zurück zu argc und argv.
Wir wissen, dass argv ist jetzt ein Array von Strings.
So, wenn ein Benutzer in vergeht - sagen, dass sie ein Programm -
sie sagen. / hallo David Malan,
Was das Programm für Sie tun wird eigentlich schon mit dem, was argc und argv sind gekommen.
So brauchen Sie nicht zu bekümmern.
Argc wäre in diesem Fall 3 sein, weil es 3 unterschiedliche Wörter durch ein Leerzeichen getrennt sieht.
Und so dann die Anordnung in diesem Fall wäre die erste Index sein. / Hallo,
der nächste David, der nächste Malan.
Hat jemand auf Anhieb sehen, was die Beziehung zwischen argv,
das Array, und argc ist?
Yeah. Wir werden in das in einem Beispiel in args.c. bekommen
Mal sehen, ob wir einen Vorteil aus der Beziehung zwischen dem 2 nehmen kann.
Hier könnte, dass in dem Gerät finden Sie die Standard-Anwendung
zu. c Dateien zu öffnen ist manchmal Emacs.
Aber wir müssen mit gedit umgehen wollen, so was Sie tun können ist, können Sie direkt auf Ihrem C-Datei klicken,
gehen Sie zu Eigenschaften, Öffnen mit, und wählen Sie dann gedit als Standard festlegen,
und nun sollte Ihr Programm in gedit anstelle von Emacs öffnen.
Perfect.
Also hier habe ich ein Programm, das ich ausdrucken möchten jedes Befehlszeilenargument.
So was gibt der Benutzer, möchte ich im wesentlichen Rückkehr es zurück, um sie auf einer neuen Zeile.
Also, was ist eine Struktur, die wir verwenden, um iterieren kann etwas -
etwas, das Sie wahrscheinlich in Ihrem pset 1 verwendet?
Wenn Sie über eine bestimmte Anzahl von Dingen zu gehen? >> [Schüler] For-Schleife.
For-Schleife. Genau. Also lasst uns mit der for-Schleife starten.
Wir haben für int i = 0. Lasst uns einfach mit einem Standard-Initialisierung variable starten.
Ich werde die Bedingung für eine Reihe lassen und dann sagen, i + +, werden die Dinge dort zu tun.
Gut.
So denken zurück zu argv, wenn argv die Liste der Argumente übergeben, um das Programm ist
und argc ist die Anzahl der Argumente im Programm,
dann heißt das, dass argc Wesentlichen die Länge der argv, richtig ist,
da gehen, um so viele Werte als den Wert argc sein.
Also, wenn wir wollen, durchlaufen jedes Element in argv,
wir gehen zu wollen, zu jeder Zeit Zugriff auf die Variable in argv am angegebenen Index.
Die mit diesem dargestellt werden, richtig?
Diese Variable stellt hier die bestimmte Zeichenfolge in dieser Instanz
denn es ist ein String-Array - die bestimmte Zeichenfolge an diesem bestimmten Index.
Was wir tun wollen, in diesem Fall haben wir es ausdrucken wollen, so sagen wir printf.
Und jetzt argv ist ein String, so wollen wir, dass die Platzhalter dort abzulegen.
Wir wollen eine neue Zeile nur um es gut aussehen.
Also hier haben wir eine for-Schleife. Wir haben nicht den Zustand noch.
So i beginnt bei 0, und dann jedes Mal, es geht um die angegebene Zeichenfolge gedruckt ist
an diesem bestimmten Index im Array.
Also, wenn wir aufhören Ausdrucken von Elementen im Array wollen?
Wenn wir fertig sind, nicht wahr? Wenn wir das Ende des Arrays erreicht.
So wollen wir nicht in der Vergangenheit die Länge des Arrays überschreiten,
und wir wissen bereits brauchen wir nicht, um tatsächlich aktiv herauszufinden, was die Länge der argv ist
weil es uns gegeben, und was ist das? Argc. Genau.
Deshalb wollen wir diesen Prozess argc Anzahl der Zeiten zu tun.
Ich bin nicht im richtigen Verzeichnis.
Gut.
Nun wollen wir args. Keine Fehler, was ausgezeichnet ist.
Also lasst uns einfach laufen args.
Was wird das wohl zu uns zurückkehren? Es ist gerade dabei, es zu drucken zurück.
"Sie eingegeben args in das Programm, ich werde es geben, zu dir zurück."
So sagen wir, wir wollen args dann sagen foo bar.
So druckt er es an uns zurück. Alles in Ordnung?
So gibt es ein Beispiel dafür, wie man argc und argv verwenden
wohl wissend, dass argc repräsentiert die Länge des argv.
Stellen Sie sicher, dass Sie nicht immer mit Arrays Zugang ein über die Länge des Arrays
weil C werden auf jeden Fall Sie schreien.
Du bekommst so etwas wie eine Segmentation Fault,
das ist nie Spaß, im Grunde sagen, du versuchst, etwas zu zugreifen
Das gibt es nicht, nicht Ihnen gehören.
So stellen Sie sicher, und vor allem mit der Null-Indizierung, wir wollen nicht -
Wie zum Beispiel, wenn man ein Feld von Länge 4 haben,
, dass Array-Index 4 nicht existieren, weil wir bei 0, beginnen bei Null-Index.
Es wird zur zweiten Natur geworden wie for-Schleifen, wenn wir bei 0 beginnen.
Also einfach im Hinterkopf behalten,.
Sie wollen nicht immer Zugriff auf den Index eines Arrays, unerreichbar ist.
So können wir nun sehen, wie wir Art des Zugriffs kann
die Befehlszeilenargumente, die übergeben werden
Aber wie Sie die Zeichenfolge sahen, ist das argv eigentlich ein String-Array.
So ist es eigentlich nicht eine ganze Zahl noch nicht, aber in Caesar wollen wir mit Zahlen umzugehen.
Glücklicherweise gibt es eine Funktion für uns geschaffen, die tatsächlich umsetzen kann einen String in einen Integer.
Auch hier haben wir es nicht mit Benutzereingaben, wo wir sie veranlasst sind
zur Eingabe hier für den Schlüssel, so können wir nicht wirklich Erneut auffordern und sagen:
"Oh, gib mir noch eine ganze Zahl, sagen, wenn es nicht gültig."
Aber wir müssen noch für die korrekte Nutzung zu überprüfen.
In Caesar sie dürfen nur in 1 Zahl übergeben,
und so haben sie nach. / caesar laufen und dann haben sie, um Ihnen eine Nummer.
So argc muss eine gewisse Nummer sein.
Welche Zahl wäre das, wenn sie übergeben Sie die. / Caesar und dann einen Schlüssel haben?
Was ist argc? >> [Student] 2. >> Zwei. Genau.
Also Sie wollen sicherstellen, dass argc 2 ist.
Ansonsten haben Sie grundsätzlich weigern, das Programm auszuführen.
In wichtigsten ist es eine Funktion, die int main sagt,
so dann haben wir immer in guter Praxis return 0 am Ende eines erfolgreichen Programms.
Also, wenn, sagen wir, sie geben Ihnen 3 Befehlszeilenargumente statt 2
oder geben Sie ein, zum Beispiel, dann, was Sie tun müssen, ist Sie wollen für, dass der Check
und dann wieder 1 zu sagen, nein, ich kann nicht mit diesem Programm fortfahren.
[Schüler] Es kann nicht ein Raum in Ihrem Text. >> Entschuldigen Sie mich?
[Schüler] Es kann nicht ein Raum, in dem Text, den Sie versuchen zu verschlüsseln sind werden.
Ah!
In Bezug auf den Text, den wir versuchen zu verschlüsseln, das tatsächlich kommt später
wenn wir diesen Text zu geben.
So jetzt sind wir nur akzeptieren, wie Befehlsargumente die tatsächliche Zahl,
die eigentliche Wende für die Caesar-Verschlüsselung.
[Schüler] Warum brauchen Sie 2, um nur 1 argc dagegen? Es ist definitiv ein Nummer.
Right. Der Grund, warum brauchen wir 2 für argc anstelle von 1
Denn wenn Sie ein Programm ausführen und sagen. / caesar oder. / hallo,
das tatsächlich zählt als Befehlszeilenargument.
Also das bereits belegt 1 und so dann sind wir die Eingabe 1 extra.
Sie sind also tatsächlich die Eingabe einer Zeichenfolge im Befehlszeilenargument.
Was Sie tun wollen, für Caesar wollen wir mit einer ganzen Zahl beschäftigen,
so können Sie diese Funktion atoi.
Und im Grunde, übergeben Sie es in einen String und dann kehren Sie zurück eine ganze Zahl
Wenn es möglich ist, diese Zeichenfolge in eine Ganzzahl machen.
Jetzt erinnere mich, als wir mit printf oder GetString, solche Dinge zu tun haben,
Wir sind die Bibliotheken, die speziell für uns sind.
Also am Anfang beginnen wir mit einem Hashtag Standard-I / O,. H, so etwas.
Nun, das ist atoi nicht innerhalb einer jener Bibliotheken,
so, was wir tun müssen, ist, wir haben die richtige Bibliothek für die zählen.
Also zurück erinnern, um Walkthrough 1, wo ich über die manuelle Funktion.
Sie geben Menschen in Ihrem Terminal und dann gefolgt von dem Namen einer Funktion.
Und so, die öffnet sich eine ganze Liste von seiner Verwendung,
aber wie gut es öffnet sich die Bibliothek, gehört.
Also werde ich das für Sie zu verlassen, um die manuelle Funktion mit atoi verwenden
und herauszufinden, welche Bibliothek Sie sind in der Lage sein, um die atoi Funktion nutzen zu müssen.
Also haben wir den Schlüssel und jetzt ist es darum geht, die Klartext
und so die tatsächlich wird auf Benutzereingaben, wo Sie aufgefordert.
Wir behandelten GetInt und GetFloat, und so in die gleiche Richtung
wir gehen mit GetString zu tun haben.
Aber in diesem Fall brauchen wir nicht um jeden tun, während oder while-Schleifen zu überprüfen.
GetString wird definitiv geben Sie uns eine Zeichenfolge,
und wir werden zu verschlüsseln, was der Benutzer uns gibt.
So kann man davon ausgehen, dass alle diese Benutzer eingegebene Zeichenfolgen korrekt sind.
Great.
Also, wenn Sie haben den Schlüssel und einmal du hast den Text,
was jetzt noch übrig ist, müssen Sie den Klartext zu verschlüsseln.
Nur um schnell über lingo abzudecken, ist der Klartext, was der Benutzer Ihnen,
und der Geheimtext ist, was du zu ihnen zurückkehren.
So Strings, in der Lage sein, durch tatsächlich Buchstabe für Buchstabe zu gehen
denn wir müssen jeden Buchstaben zu verschieben,
Wir verstehen, dass Strings, wenn wir solche peel back der Schicht,
sehen wir, dass sie nur wirklich sind eine Liste von Zeichen.
Man kommt nach dem anderen.
Und so können wir behandeln Strings als Arrays, weil sie Zeichen-Arrays sind.
So, Sie haben eine Zeichenfolge mit dem Namen Text,
und innerhalb dieser variablen Text gespeichert Dies ist CS50.
Dann Text Index 0 wäre eine Kapitalerhöhung T, wäre Index 1 h, etc. werden
Und dann mit Arrays, in der argc beispielsweise in args.c,
wir sahen, dass wir durchlaufen eine Reihe hatten
und so hatten wir von i iterieren = 0 bis i kleiner als die Länge ist.
Also müssen wir einen Weg, herauszufinden, was die Länge der Zeichenkette
wenn wir gehen, um über sie zu durchlaufen.
Glücklicherweise gibt es wieder eine Funktion für uns, obwohl später in CS50
Sie werden definitiv in der Lage sein zu implementieren und machen Sie Ihre eigene Funktion
das kann die Berechnung der Länge eines Strings.
Aber jetzt werden wir Stringlänge, so strlen verwenden.
Sie passieren in einem String, und dann kehren Sie ein int, die die Länge des Strings repräsentiert.
Lassen Sie uns an einem Beispiel, wie wir vielleicht in der Lage zu iterieren jedes Zeichen in einem String suchen
und etwas zu tun damit.
Was wir wollen, ist iterieren jedes Zeichen des Strings,
und was wir tun wollen, ist, dass wir drucken zurück jedes Zeichen 1 von 1
außer wir noch etwas daneben.
Also lasst uns mit der for-Schleife starten. Int i = 0.
Wir werden um Platz für den Zustand zu verlassen.
Wir wollen durchlaufen, bis wir das Ende des Strings erreicht, nicht wahr?
Also dann, welche Funktion gibt uns die Länge des Strings?
[Unverständlich Studenten Antwort]
Das ist die Länge der Befehlszeilenargumente.
Aber nach einer Zeichenkette wollen wir eine Funktion, die uns die Länge der Zeichenkette verwenden.
Also das ist Stringlänge.
Und so ist, dann müssen Sie in einem String um es weiterzugeben.
Es muss wissen, was String es um die Länge berechnen muss.
Also in diesem Fall sind wir mit String s zu tun.
Great.
Also, was wir tun wollen, die printf lassen.
Jetzt wollen wir mit den Charakteren umzugehen. Wir drucken möchten jeden einzelnen Charakter.
Wenn Sie es ausdrucken einen Schwimmer möchten, verwenden Sie den Platzhalter wie% f.
Mit einem int würden Sie% d.
Und so ähnlich, mit einem Zeichen, das Sie verwenden% c zu sagen, ich werde sein Schreiben eines Zeichens
Das ist in einer Variable gespeichert.
So haben wir das, und fügen wir einen Punkt und einen Platz zu.
Welche Zeichen verwenden wir?
Wir werden verwenden, was Charakter, den wir bei der Saite sind.
Also werden wir werden mit etwas mit einer Schnur,
aber wir wollen zu den Zugriff auf den bestimmten Charakter gibt.
Also, wenn ein String ist nur ein Array, wie können wir dann Zugriff auf Elemente von Arrays?
Wir haben diese eckigen Klammern, und dann haben wir den Index drin.
So haben wir in eckigen Klammern. Unser Index in diesem Fall können wir einfach i. Genau.
Also hier sind wir sagen, wir gehen zu drucken ein Zeichen gefolgt von einem Punkt und einem Leerzeichen,
und der Charakter wird das i-te Brief in unserem String s betragen.
Ich werde einfach, dass zu speichern. Okay.
Jetzt werde ich Stringlänge laufen.
Also mussten wir einen String namens OMG, und jetzt ist es noch mehr verstärkt.
Ebenso sagen wir, wir tatsächlich wollen, um einen String aus der Benutzer zu erhalten.
Wie können wir das tun?
Vor, woher bekommen wir eine int?
Wir sagten GetInt, nicht wahr? Aber dies ist nicht int, also lasst GetString.
Lasst uns Stringlänge. Hier haben wir nicht geben Sie eine bestimmte prompt.
Also ich weiß nicht.
Ich werde meinen Namen hier stellen und so kann ich dann eines dieser Dinge zu tun
wo ich zuzuweisen ein Wort für jeden Buchstaben oder so ähnlich. Cool.
Also das ist Stringlänge.
Also sind wir zurück zu Caesar.
Wir haben ein paar Werkzeuge, wie wir über einen String iterieren
wie wir jedes einzelne Element zugreifen.
So, jetzt können wir wieder auf dem Programm.
Wie ich schon erwähnt, in der ASCII-Tabelle, dein bester Freund,
Sie gehen, um die Nummern, die mit jedem Buchstaben zugeordnet sind, zu sehen.
Also hier sagen, dass unsere Klartext Ich bin schwindelig!
Dann wird jedes dieser Zeichen wird eine Nummer und ASCII-Wert zugeordnet sein,
auch das Apostroph, auch der Raum, auch das Ausrufezeichen,
so dass Sie wollen, dass im Auge behalten.
So sagen unsere wichtigsten, dass der Benutzer in ihren Befehlszeilenargument enthalten 6 ist.
Das heißt, für den ersten Buchstaben, der I ist, die von 73 dargestellt wird,
Sie wollen, zu ihnen zurückzukehren, was Schreiben ist mit dem ASCII-Wert von 73 + 6 dargestellt.
In diesem Fall das würde 79 sein.
Jetzt wollen wir zum nächsten Zeichen zu gehen.
So dass die nächste im Index 1 des Klartextes würde das Apostroph sein.
Aber denken Sie daran wollen wir nur die Briefe zu verschlüsseln.
So wollen wir sicherstellen, dass der Apostroph tatsächlich gleich bleibt,
dass wir nicht von 39 auf whatever 45 ändern.
Wir wollen es als ein Apostroph halten.
So wollen wir erinnern nur verschlüsseln die Buchstaben
weil wir alle andere Symbole zu bleiben in unserem Programm unverändert wollen.
Eine andere Sache, dass wir wollen, ist, um die Kapitalausstattung zu bewahren.
Also, wenn Sie einen Großbuchstaben haben, sollte es als Großbuchstaben bleiben.
Kleinbuchstaben sollten als Kleinbuchstaben bleiben.
So einige nützliche Funktionen in der Lage sein, mit nur Verschlüsselungsbestimmungseinrichtung Buchstaben umzugehen
und halten die Erhaltung der Marktkapitalisierung der Dinge
ist die isalpha, isupper, islower Funktionen.
Und so sind diese Funktionen, die Ihnen einen booleschen Wert zurückgeben.
Grundsätzlich wahr oder falsch. Ist das ein Großbuchstabe? Ist das alphanumerische?
Ist dies ein Brief, im Wesentlichen.
Also hier sind 3 Beispiele, wie Sie diese Funktion verwenden.
Grundsätzlich könnte man testen, ob der Wert an Sie zurückgeschickt von dieser Funktion wahr oder falsch ist
basierend auf dieser Eingabe.
Entweder nicht verschlüsseln etwas oder verschlüsseln sie oder stellen Sie sicher, dass es in Großbuchstaben, etc. ist
[Schüler] Können Sie sich erklären, die ein wenig mehr, und wie Sie sie nutzen? >> Ja, sicher.
Also, wenn wir zurückblicken, haben wir hier ein Kapital I, nicht wahr?
Wir wissen also, dass ich bis O geht, weil ich es + 6 O.
Aber wir wollen sicherstellen, dass O wird eine Kapitalerhöhung O. sein
Also im Grunde ist diese Art des Gehens zu unserem Eingang zu ändern.
Egal, ob es groß oder nicht wollen Art ändern, wie wir damit umgehen.
Also dann, wenn wir die isupper Funktion auf dieser bestimmten Index,
so isupper ("I"), die für uns wahr zurückgibt, so dass wir wissen, dass es oben ist.
So dann auf der Grundlage, dass später werden wir in eine Formel zu gehen
dass Sie verwenden, um Dinge in Caesar verschieben,
so dann im Grunde ist es geht um eine etwas andere Formel sein, wenn es in Großbuchstaben ist
im Gegensatz zu Kleinbuchstaben. Sinn?
Yeah. Keine Sorge.
Ich sprach ein wenig über das Hinzufügen von 6 auf einen Brief, der nicht ganz sinnvoll
außer wenn wir irgendwie verstehen, dass diese Zeichen
sind so eine Art austauschbar mit Zahlen.
Was wir tun ist, wir Art der Nutzung implizite Casting.
Wir werden in Gießen ein bisschen später gehen, wo Sie einen Wert und Sie machen es zu einer anderen Art
als es ursprünglich war.
Aber mit diesem pset wir in der Lage sein Art synonym verwenden Zeichen
und ihre entsprechenden ganzzahligen Werten.
Also, wenn Sie einfach umhüllen einen Charakter nur mit den einfachen Anführungszeichen,
dann wirst du in der Lage sein, mit ihm mit Zahlen arbeiten, die sich mit ihm als integer.
So die Hauptstadt C bezieht sich auf 67 Jahre. Kleinbuchstaben f 102 betrifft.
Auch wenn Sie diese Werte wissen wollen, an Ihrem ASCII-Tabelle aussehen.
Also lasst uns in einige Beispiele, wie Sie vielleicht in der Lage sein, um zu subtrahieren, und fügen Sie gehen,
wie man eigentlich wirklich mit diesen Zeichen zu umgehen, verwenden sie austauschbar.
I sagen, dass ASCIIMath wird die Zugabe eines Zeichens auf eine ganze Zahl zu berechnen
und zeigt dann die resultierende Charakter sowie die resultierende ASCII-Wert.
Und hier sage ich - wir werden viel mit diesem Teil später -
aber im Grunde, ich sage, dass der Benutzer ausgeführt werden soll ASCIIMath zusammen mit einem Schlüssel zu sagen,
und ich sage, dass diese Taste wird die Zahl sein,
mit denen werden wir diesen Charakter hinzufügen.
Also hier bemerken, dass ich da bin anspruchsvolle einen Schlüssel,
da ich verlangen, dass sie geben mir ein Ding,
Ich will nur. / Asciimath und einen Schlüssel zu akzeptieren.
Also werde ich verlangen, dass argc gleich 2 ist.
Wenn es nicht ist, dann werde ich auf 1 zurück, und das Programm wird beendet.
So sage ich der Schlüssel wird nicht das erste Befehlszeilenargument sein,
es geht um die zweite, und wie Sie hier sehen,
Ich werde das in einen Integer zu machen.
Dann werde ich ein Zeichen gesetzt r sein.
Beachten Sie, dass der Typ der variablen chr tatsächlich eine Ganzzahl ist.
Die Art und Weise, dass ich in der Lage, r als Integer verwenden bin durch umhüllt es mit diesen einfachen Anführungszeichen.
Um unsere printf Anweisung zurück, wo wir einen Platzhalter für einen Charakter haben
und dann ein Platzhalter für eine ganze Zahl,
der Charakter wird durch die chr dargestellt, und die Zahl ist der Schlüssel.
Und so ist, dann werden wir in Folge fügen Sie die 2 zusammen.
So werden wir r hinzuzufügen +, was der Schlüssel ist,
und dann werden wir das Ergebnis, dass zu drucken.
So lasst uns asciimath. Es ist up to date, so lasst uns einfach laufen asciimath.
Oh, aber sehen, ist es nicht tun, weil wir nicht wirklich geben hat es einen Schlüssel.
Also, wenn es gerade ein, unsere Funktion ist es gerade an uns zurück.
Also lasst uns in einem Schlüssel übergeben. Mir jemand eine Nummer. >> [Schüler] 4.
4. Okay.
R so um 4 wird uns v, die auf den ASCII-Wert von 118 entspricht.
Also es irgendwie Sinn macht, dass -
Eigentlich kann ich frage Sie, was denken Sie, die ASCII-Wert von r ist, wenn r + 4 ist 118?
Dann ja, das ist r 114.
Also, wenn Sie auf der ASCII-Tabelle dann schauen, sicher genug, sehen Sie, dass r um 114 vertreten ist.
So, jetzt wissen wir, dass wir Zahlen, Zeichen hinzuzufügen, scheint dies ziemlich einfach.
Wir gehen nur zu iterieren eine Zeichenkette wie wir in einem Beispiel vor sah.
Wir prüfen, ob es ein Brief ist.
Wenn ja, dann werden wir es durch, was der Schlüssel ist, zu verschieben.
Ganz einfach, außer wenn Sie dies möchten,
Sie sehen, dass z, vertreten durch 122, dann würde Ihnen einen anderen Charakter.
Wir haben eigentlich wollen innerhalb unseres Alphabets zu bleiben, nicht wahr?
Also müssen wir herausfinden, einen Weg Art Umwickeln.
Wenn Sie zed zu erreichen, und Sie möchten eine bestimmte Anzahl zu erhöhen,
Sie wollen nicht in außerhalb des ASCII-Alphabet Abschnitt gehen;
Sie wickeln zurück hin zu A.
Aber bedenken Sie, du bist immer noch die Erhaltung der Fall.
So wissen, dass Briefe nicht Symbolen geworden
wie Symbole werden nicht mehr so ​​gut zu ändern.
In der letzten pset Sie definitiv nicht brauchen, um,
aber eine Option war, um Ihre gierigen pset mit der Modulo-Funktion zu implementieren.
Aber jetzt sind wir wirklich brauchen, um Modul verwenden,
so lasst uns einfach über diese ein wenig gehen.
Im Wesentlichen, wenn Sie x modulo y, die Ihnen den Rest von x durch y geteilt.
Hier sind einige Beispiele. Wir haben 27% 15.
Grundsätzlich, wenn Sie subtrahieren 15 von 27 so oft wie möglich, ohne sich negativ
dann bekommst du 12 übrig.
Also das ist ein bisschen wie in der Mathematik Kontext, aber wie können wir tatsächlich nutzen das?
Es wird für unsere wrapover nützlich.
Dafür sagen wir einfach, fragte ich Sie alle in 3 Gruppen einteilen.
Manchmal tun dies in Gruppen und so etwas.
Sagen wir, ich sagte: "Okay, ich Sie alle wollen in 3 geteilt werden."
Wie können Sie das tun?
[Unverständlich Studenten Antwort] Ja, genau. Abzuzählen. Okay.
Lasst uns wirklich tun. Wollen Sie anfangen?
[Schüler Abzählen] 1, 2, 3, 4.
Aber nicht vergessen ... >> [Schüler] Oh, sorry.
Das ist ein wirklich guter Punkt.
Du hast gesagt, 4, aber wir eigentlich wollen Sie 1 sagen, weil wir wollen nur 3 Gruppen.
Also dann, wie - Nein, das ist ein wirklich gutes Beispiel, weil dann, wie Sie vielleicht 1 sagen?
Was ist die Beziehung zwischen 4 und 1?
Nun, das ist 4 mod 3 1.
Also, wenn Sie fortfahren, würden Sie 2 sein.
So haben wir 1, 2, 3, 1, 2.
Wieder bist du eigentlich die fünfte Person. Woher wissen Sie, auf 2 statt 5 sagen?
Du sagst 5 mod 3 = 2 ist.
Ich möchte sehen, wie viele Gruppen von 3 übrig bleiben, dann die Reihenfolge bin ich
Und so ist, dann, wenn wir weiter entlang der ganze Raum,
dann würden wir sehen, dass wir immer die tatsächliche Anwendung der MOD-Funktion, um uns
zur Art der abzählen.
Das ist eine weitere Art von konkretes Beispiel dafür, wie Sie modulo verwenden
weil ich sicher bin die meisten von uns haben wahrscheinlich durch diesen Prozess gegangen
wo wir mussten abzählen.
Haben Sie Fragen zu modulo?
Es wird sehr wichtig, die Begriffe zu verstehen,
so möchte ich sicherstellen, dass Sie Leute verstehen.
[Schüler] Wenn es keinen Rest, bedeutet es Ihnen die tatsächliche Zahl?
Wenn einer der ersten 3 von ihnen es getan hätte, wäre es ihnen gegeben habe, was sie tatsächlich waren,
oder würde es ihnen haben [unverständlich] >> Das ist eine gute Frage.
Wenn es keinen Rest für die Modulo - so sagen, Sie haben 6 mod 3 -
das tatsächlich gibt Ihnen zurück 0.
Wir werden darüber etwas später sprechen.
Oh yeah, zum Beispiel die dritte Person - ist 3 mod 3 tatsächlich 0 aber sie sagte, 3.
Also das ist ein bisschen wie eine innere Haken, zum Beispiel,
wie okay, wenn der mod dann 0 ist werde ich die dritte Person sein.
Aber wir werden in Art, wie wir wollen mit dem, was 0 ist später beschäftigen zu bekommen.
So jetzt haben wir irgendwie einen Weg der Kartierung der zed nach rechts Brief.
So, jetzt haben wir durch diesen Beispielen gegangen,
wir irgendwie sehen, wie Caesar funktionieren könnte.
Sie sehen die 2 Alphabete und dann sieht man sie verschiebt.
Also lasst uns versuchen, auszudrücken, dass in Bezug auf die Formel.
Diese Formel ist eigentlich für Sie in der Spezifikation angegeben,
aber lassen Sie uns Art des Blickes durch das, was jede Variable bedeutet.
Unser Resultat wird der verschlüsselte Text sein.
Also das sagt, dass die i-te Zeichen der Geheimtext
wird der i-te Zeichen des Klartextes entsprechen.
Das macht Sinn, weil wir immer sein Futter diese Dinge wollen.
So, es wird das i-te Zeichen des Chiffretext sowie k, die unsere Schlüssel sein -
das macht Sinn - und dann haben wir diese mod 26.
Erinnern Sie sich zurück, wenn wir die zed hatten
Wir wollten nicht in den Charakter zu bekommen, so wollten wir es mod
und Art der Wrap-around des Alphabets.
Nach zed Sie ein zu gehen, b, c, d, bis Sie sich mit der richtigen Nummer.
So wissen wir, dass zed, wenn + 6, würde uns f denn nach zed kommt a, b, c, d, e, f.
So erinnern wir wir sicher wissen, dass zed + 6 wird uns f.
In ASCII-Werte, z 122 und f 102.
Also müssen wir einen Weg, unsere Caesar Formel zu finden uns 102
nach der Einnahme in 122.
Also, wenn wir nur gelten diese Formel, die ('z' + 6)% 26, das tatsächlich gibt Ihnen 24
weil 122 + 6 128; 128% 26 gibt Ihnen 24 übrigen.
Aber das bedeutet nicht wirklich f. Das ist definitiv nicht 102.
Das ist auch nicht der sechste Buchstabe im Alphabet.
So offensichtlich, müssen wir einen Weg der Feinabstimmung dieses ein wenig zu haben.
Im Hinblick auf die regelmäßige Alphabet, wissen wir, dass z der 26. Buchstabe ist und f die sechste.
Aber wir sind in der Informatik, so dass wir zum Index gehen auf 0 gesetzt.
Also anstelle von z ist die Zahl 26, wir gehen es die Nummer 25 sagen,
weil a 0 ist.
So, jetzt lasst uns gelten diese Formel.
Wir haben z durch 25 + 6 dargestellt, die Ihnen 31.
Und 31 mod 26 gibt Ihnen 5 als Rest.
Das ist perfekt, weil wir wissen, dass f die fünfte Buchstabe im Alphabet ist.
Aber es ist noch nicht f, nicht wahr? Es ist noch nicht 102.
Also für diese pset, wird eine Herausforderung werden versuchen, herauszufinden, die Beziehung
zwischen Konvertierung zwischen diesen ASCII-Werte und der alphabetischen Index.
Im Grunde, was Sie tun wollen, wollen Sie beginnen mit den ASCII-Werten,
aber dann wollen Sie irgendwie übersetzen, dass in einem alphabetischen Index
dann berechnen, welchen Buchstaben es sein sollte - im Grunde, was seinem alphabetischen Index
der Chiffre Charakter - dann übersetzen diese zurück zu den ASCII-Werte.
Also, wenn Sie sich peitschen Ihre ASCII-Tabelle, dann versuchen und finden Sie die Beziehungen zwischen, sagen wir, 102 und 5
oder die 122 und 25.
Wir haben unsere Schlüssel aus den Befehlszeilenargumenten bekommen, haben wir den Klartext bekommen,
wir haben es verschlüsselt.
Jetzt müssen wir noch zu tun haben, ist zu drucken.
Wir könnten dies tun ein paar verschiedene Möglichkeiten.
Was wir tun können, ist tatsächlich drucken, wie wir entlang gehen.
Als wir über iterieren die Zeichen in der Zeichenfolge,
konnten wir einfach nur rechts und dann drucken, wenn wir sie zu berechnen.
Alternativ können Sie auch speichern sie in einem Array und haben eine Reihe von Zeichen
und am Ende über diese gesamte Array durchlaufen und drucken Sie es aus.
So haben Sie eine Reihe von Optionen dafür.
Und denken Sie daran, dass% c wird der Platzhalter für den Druck ein Zeichen sein.
So, da haben wir Caesar, und jetzt bewegen wir uns auf Vigenere,
das ist sehr ähnlich wie Caesar, sondern nur etwas komplexer.
So im Wesentlichen mit Vigenere wird wirst du in ein Schlüsselwort vorbei fährt.
Also statt einer Zahl, wirst du einen String haben,
und damit geht um Sie als Suchbegriff zu handeln.
Dann, wie üblich, wirst du eine Eingabeaufforderung für einen String zu bekommen von dem Benutzer
und dann verschlüsseln und dann ihnen die Chiffretext zurück.
Also wie gesagt, es ist sehr ähnlich zu Caesar, aber anstatt der Verlagerung von einer bestimmten Anzahl,
die Zahl ist eigentlich los, um jedes Mal von Charakter zu Charakter ändern.
Um sicherzustellen, dass tatsächliche Zahl darstellen zu verschieben, ist es von der Tastatur Buchstaben dargestellt.
Also, wenn Sie in einer Verschiebung der a, zum Beispiel geben, dann wäre das zu einer Verschiebung von 0 entsprechen.
Es ist also wieder zurück zur alphabetischen Index.
Was könnte nützlich sein, wenn Sie sehen, dass wir tatsächlich den Umgang mit ASCII-Werte sind
sowie die Briefe, sowie der alphabetischen Index,
vielleicht finden oder ein eigenes ASCII-Tabelle, die den alphabetischen Index von 0 bis 25 zeigt,
a bis z und die ASCII-Werte, so dass Sie irgendwie sehen die Beziehung
und skizzieren und versuchen Sie einige Muster.
Ebenso, wenn Sie wurden bei der bestimmte Instanz Verschiebung um f -
und dies ist entweder Klein-oder Großbuchstaben f - dann wäre bis 5 entsprechen.
Sind wir gut so weit?
Die Formel für Vigenere ist ein bisschen anders.
Grundsätzlich sehen Sie, dass es genau wie Caesar ist,
Ausnahme statt nur k haben wir k Index j.
Beachten Sie, dass wir nicht mit i, weil im Wesentlichen die Länge des Schlüsselworts
ist nicht notwendigerweise der Länge der Chiffretext.
Dies wird ein wenig klarer sein, wenn wir ein Beispiel, dass ich ein bisschen haben später sehen.
Grundsätzlich, wenn Sie Ihr Programm ausführen mit dem Schlüsselwort ohai,
dann heißt das, dass jedes Mal, ohai wird Ihre Verschiebung sein.
Also je nachdem, welche Position Sie in Ihrem Keyword
Sie gehen zu Ihrem bestimmten Chiffretextzeichen um diesen Betrag zu verschieben.
Wieder, wie Caesar, wollen wir sicherstellen, dass wir die Aktivierung der Dinge zu bewahren
und wir haben nur encipher Buchstaben, nicht in Zeichen oder Leerzeichen.
So blickt die Caesar auf die Funktionen, die Sie verwendet haben,
die Art und Weise, dass Sie sich entschieden haben, wie die Dinge verschieben, und gelten, dass Ihr Programm hier.
Also lasst uns Kartenansicht heraus.
Wir haben einen Klartext, dass wir aus der Benutzer aus GetString bekommen
sagen This ... ist CS50!
Dann haben wir ein Schlüsselwort ohai.
Die ersten 4 Zeichen sind ziemlich einfach.
Wir wissen, dass T wird durch o verschoben werden,
dann h wird durch h verschoben werden, wird i würde durch a verschoben werden.
Hier sehen Sie, dass eine 0 steht,
so wird der Endwert ist eigentlich nur die gleichen Buchstaben wie vorher.
Dann s wird durch i verschoben.
Aber dann haben Sie diese Zeit hier.
Wir wollen nicht zu verschlüsseln, dass, so werden wir nicht ändern, es durch nichts
und nur Ausdruck der Zeit unverändert.
[Schüler] Ich verstehe nicht, wie Sie wissen, dass dies durch verschoben wird - Wo haben Sie - >> Oh, sorry.
An der Spitze hier sehen Sie, dass das Befehlszeilenargument ohai hier
das wird sich das Schlüsselwort sein.
Und so grundsätzlich, Sie über die Zeichen in dem Schlüsselwort Radfahren.
[Schüler] So o wird zu verlagern das gleiche -
So o entspricht einer bestimmten Anzahl im Alphabet.
[Schüler] Right. Aber wo hast du den CS50 Teil aus?
Oh. Das ist in GetString, wo du, du "Gib mir einen String zu kodieren."
[Schüler] Sie werden euch dieses Argument durch verschieben
und dann wirst du für den ersten String fragen. >> Yeah.
Also, wenn sie das Programm ausführen, werden sie das Schlüsselwort enthalten
in ihrer Befehlszeilenargumente, wenn sie es laufen.
Dann, wenn Sie überprüft haben, dass sie habe tatsächlich euch 1 und nicht mehr, nicht weniger,
dann werde sie für eine Zeichenfolge aufgefordert sind, sagen: "Gib mir einen String zurück."
Also das ist, wo sie in diesem Fall Sie diese gegeben haben ... ist CS50!
So dann wirst du zu bedienen, dass und verwenden ohai und iterieren.
Beachten Sie, dass wir hier über die Verschlüsselung der Zeit übersprungen,
aber im Hinblick auf unsere Position für ohai, das nächste verwendeten wir o.
In diesem Fall ist es ein bisschen schwieriger zu sehen, denn das ist 4,
also lasst uns weiterhin ein wenig. Nur mit mir hier bleiben.
Dann haben wir i und s, die dann von o und h jeweils umgerechnet.
Dann haben wir einen Raum, und so wissen wir, dass wir nicht um die Räume zu verschlüsseln.
Aber beachten Sie, dass anstatt ein an dieser Stelle genau hier,
wir durch eine Verschlüsselung - ich weiß nicht, ob du das kannst sehen - hier richtig.
So ist es nicht wie Sie tatsächlich vorgegebenen, sagen wir, o hier geht, geht h hier
a geht hier geht ich hier, o, h, a, i, o, h, a, i. Sie tun das nicht.
Sie nur verschieben Sie Ihre Position in dem Schlüsselwort
wenn Sie wissen, dass Sie tatsächlich gehen zu verschlüsseln eine tatsächliche Brief.
Hat diese Art von Sinn?
Okay.
Also einfach ein paar Erinnerungen.
Sie wollen sicherstellen, dass Sie nur bis zum nächsten Brief in Ihren Suchbegriff voranzutreiben
wenn der Charakter in Ihren Klartext ist ein Brief.
So sagen wir in der o.
Wir bemerken, dass das nächste Zeichen der Index i des Klartextes, eine Zahl ist, zum Beispiel.
Dann werden wir nicht voran j der Index für unsere Schlüsselwort, bis wir einen weiteren Brief zu erreichen.
Auch Sie wollen auch sicherstellen, dass Sie Wraparound an den Anfang des Schlüsselwortes
wenn Sie am Ende dabei sind.
Wenn Sie sehen, wir hier bei i sind, hat die nächsten ein bis o sein.
Sie wollen also einen Weg zu können wraparound an den Anfang Ihrer Keyword finden
jedes Mal, wenn Sie das Ende erreichen.
Und so wieder, welche Art von Operator ist nützlich, in diesem Fall zum Umwickeln?
Wie in der Zählung off Beispiel.
[Schüler] Das Prozentzeichen. >> Ja, das Prozent-Zeichen, die modulo ist.
So modulo wird sich als nützlich hierher kommen, wenn Sie wickeln über den Index in Ihrem ohai wollen.
Und nur eine schnelle Tipp: Versuchen Sie, wickeln Sie das Schlüsselwort ein bisschen wie das Abzählen denken,
wo, wenn es 3 Gruppen, die vierte Person,
ihre Zahl, dass sie sagte, war 4 mod 3, die 1 war.
So versuchen und halten sie auf diese Weise.
Wie Sie gesehen haben in der Formel, wo immer Sie ci und dann pi haben aber dann kj,
Sie wollen sicherstellen, dass Sie den Überblick zu halten von denen.
Sie brauchen nicht nennen es i, müssen Sie nicht nennen es j,
aber Sie möchten sicherstellen, dass Sie Spur zu halten von der Position, dass Sie sich in Ihrem Klartext
sowie die Position, dass Sie sich in Ihrem Suchbegriff sind
denn diese sind nicht notwendigerweise die gleichen sein.
Nicht nur, dass das Schlüsselwort - es könnte eine ganz andere Länge als Ihren Klartext sein.
Auch Ihren Klartext, gibt es Zahlen und Zeichen,
so ist es nicht zu perfekt zusammen. Ja.
[Schüler] Gibt es eine Funktion zu Fall ändern?
Können Sie eine Kapital A? >> Ja, es ist definitiv.
Sie können sich - ich glaube, es ist toupper, alle 1 Wort.
Aber wenn man versucht, die Dinge zu verschlüsseln und die Erhaltung der Text,
ist es am besten grundsätzlich separaten Fälle.
Wenn es ein Großbuchstabe ist, dann wollen Sie von dieser Verschiebung
weil Sie in Ihrer Formel, wenn man zurückblickt, wie wir solche go
auswechselbar zwischen dem ASCII Darstellungsweise die Zahlen
und die tatsächliche alphabetischen Index, wollen wir sicherstellen,
es geht um eine Art Muster, das Sie verwenden sind werden.
Ein weiterer Hinweis auf das Muster, eigentlich.
Du wirst auf jeden Fall mit Zahlen zu tun haben.
Versuchen Sie nicht, magischen Zahlen zu verwenden, die ein Beispiel des Stils.
So, Sie wollen zu jeder Zeit Verschiebung etwas von mögen -
Okay, so Wink, ist ein weiterer Spoiler, wenn du gehst zu verschieben etwas sind
um einen bestimmten Betrag, versuchen nicht auf diejenige durch eine tatsächliche Zahl darstellen
sondern versuchen und sehen, ob Sie den ASCII-Wert, welche Art von machen mehr Sinn verwenden können.
Noch ein Hinweis: Da wir mit Formeln zu tun haben,
obwohl Ihr TF wird Art wissen, was Muster, das Sie verwenden möglicherweise,
am besten in Ihren Kommentaren Art erklären, die Logik, wie,
"Ich bin mit diesem Muster, weil ..." und die Art der zu erklären das Muster prägnant in Ihren Kommentaren.
[Dies war Komplettlösung 2] Wenn es nicht noch andere Fragen gibt, dann werde ich einfach hier bleiben für ein wenig.
Viel Glück mit Ihrem pset 2: Crypto und danke für Ihr Kommen.
[Student] Danke. >> Danke.
[Media Offline-intro]