[Musikwiedergabe] DAVID MALAN: Alles klar. Dies CS50 und dies ist das Ende der Woche 2. Es tut mir so leid, dass ich nicht sein konnte dort mit Ihnen allen heute aber Sie sind in sehr guten Händen. Erlauben Sie mir, einzuführen CS50 eigenen Rob Bowden. ROB BOWDEN: Und natürlich, dann Wir haben, um Spaß zu der Tatsache zu machen dass er schickte uns eine vertikale Video- und zeigen dies. [VIDEO PLAYBACK] [Musikwiedergabe] [SPUREN] -Dieses Video nicht haben auf diese Weise zu betrachten. Es hätte verhindert werden können. Sagen Sie Nein zu vertikalen Videos. -Vertikale Videos passieren, wenn Sie Halten Sie Ihre Kamera in die falsche Richtung. Ihr Video wird am Ende aussehen wie Mist. - [GRUNT] -Es Gibt immer mehr Menschen süchtig zur Herstellung von vertikalen Videos jeden Tag. Es ist nicht zu knacken oder nichts, aber es ist noch wirklich schlecht. Es gibt zwei verschiedene Arten von Menschen, die mit VVS behaftet sind. Die erste Gruppe behandelt das Videos schießen sie wie Bilder. Sie bedeuten nicht schaden. Sie einfach nicht verstehen, dass während Sie können ein Bild drehen, Sie nicht wirklich drehen können ein Video. [CRASH] - [MONKEY SOUNDS] -Die Andere Gruppe Menschen die geben nicht a [PIEPTON]. -Vertikale Video-Syndrom ist gefährlich. Bewegte Bilder haben immer horizontal. Neben Fernsehern sind horizontal. Computerbildschirme sind horizontal. Menschen Augen horizontal sind. Wir nicht gebaut beobachten vertikalen Videos. -Ich Liebe vertikalen Videos. -Nobody Kümmert sich um Sie. -Wenn Die dieses Problem nicht gegengesteuert wird, können auch beginnt mit vier Videos auf einmal nur um Bandbreite zu sparen. -Letterboxed Vertikalen Videos würden werden die Größe einer Briefmarke. -Und Es wird überall verbreitet. Movie-Bildschirme immer horizontal. Wenn vertikale Videos werden akzeptierten, Kinos müssen groß und dünn sein. -Und Alle Kinos würde müssen wieder aufgebaut zu werden. Und als sie wieder aufgebaut wurden, Mila Kunis wäre alt und hässlich. -Birds Wird in sie abstürzen und sterben. Wir `ll alle steif Hals aus nach oben. -Und Niemand sitzen der ersten Reihe immer wieder. -George Lucas wird Re-Release-Sterne- Kriege again-- die dünne Auflage. -Ich War nie wirklich in der Lage, zu sagen die Geschichte, die ich erzählen wollte. Das war eine große Chance für mich, experimentieren mit einer neuen Technologie. -Du bist ein Trottel. -jeder Wenn ein Mobilgerät zu verwende Video aufnehmen, ist die Versuchung da. Sag einfach nein. Sagen Sie Nein zu George Lucas. Sagen Sie Nein zu alt Mila Kunis. Sagen Sie Nein zu vertikalen Videos. -Und Wenn Sie jemanden sehen, es zu tun, zu sagen, "Du bist nicht der Aufnahme dieses Recht Dummy!" [Musikwiedergabe] [END PLAYBACK] [Applaus] [AUDIO OUT] ROB BOWDEN: --Einfach Form der Kryptographie, Das ist im Grunde die Verschlüsselungs und Entschlüsselung von geheimen Botschaften. Hier haben wir also ein sehr einfaches Spielzeug. Und die Idee ist der Außenring dreht sich um den inneren Ring. Und Sie können sehen, vielleicht, wenn ich heran in, dass-- es ist schwer zu sehen. Aber, wie sich die Zahl 1-- gut, bewegt, dass. Die Zahl 1 ordnet den Brief X, Nummer 2 Karten auf das Schreiben J. unglaublich schwierig nicht nach vorne zu springen. Schreiben 2 Karten zu J. Number 3 zuordnet D. So mit diesem Ring kann Ihnen jemand eine Nachricht 1, 2, 3. Sie aus irgendeinem Grund wollen sie XJD erzählen. Aber man kann ihnen geben einige Nachricht von Zahlen, und, solange sie diesen Ring haben, können sie entschlüsseln kann, was Sie sagen wollen. So können Sie gesehen haben, dies besonderes Beispiel Kryptographie vor, wenn rund um die Weihnachtszeit Sie A Christmas Story gesehen haben. Wenn Sie noch nie gesehen es vor, dann nur schalten Sie TBS bei buchstäblich jedes Mal, am Weihnachtsabend, weil sie zeigen, es ist nur Rücken an Rücken Rücken an Rücken, um den ganzen Tag zu unterstützen. Und die relevante Video ist diese. [VIDEO PLAYBACK] -Stellen Sie es allen und jedem bekannt dass Ralph Parker ist hiermit, zum Mitglied des Kleinen Orphan Annie Secret Circle und ist mit allen Ehren mit dem Titel und Nutzen auftretenden daran. Signiert Little Orphan Annie. Gegengezeichnet Pierre Andre in der Tinte! Ehrungen und Vorteile bereits im Alter von neun! [KREISCHT VON RADIO] -Komm schon. Lassen Sie uns weitermachen. Ich glaube nicht, All That Jazz brauchen über Schmuggler und Piraten. -listen Morgen Abend mit die abschließende Abenteuer des Schwarzen Piratenschiff. Jetzt ist es Zeit für Geheime Botschaft Annies für Sie Mitglieder des Secret Circle. Denken Sie daran, Kinder, nur für Mitglieder von Annies Secret Circle kann geheime Botschaft Annies dekodieren. Denken Sie daran, ist Annie auf dich. Stellen Sie Ihre Stifte bis B2. Hier ist die Botschaft. 12. 11. 2. -Ich Bin in meinem ersten geheimen Treffen. -25. 14. 11. 18. 16. Oh, ist Pierre in große Stimme heute abend. Ich könnte sagen, dass heute Abend Botschaft war wirklich wichtig. -3. 25. Das ist eine Botschaft von Annie sich. Denken Sie daran, nicht weitersagen. -Five Sekunden später, ich bin in der nur Raum im Haus, wo ein Junge von neun konnte in der Privatsphäre und decodieren zu sitzen. Aha! B! Ich ging auf die nächste. E. Das erste Wort ist "sein." S. Es kam jetzt einfacher. U. 25. Das ist R. -Komm, Ralphie! Ich muss gehen! -Ich Gleich unten, Ma! Gee Whiz. T. O. "Achten Sie darauf," - sicher sein, was? Was war Little Orphan Annie versucht zu sagen? Achten Sie darauf, was? -Randy Muss gehen! Würden Sie bitte herauskommen? -Alle Recht, Mama! Ich komme bald aus sein! Ich war jetzt näher bekommen. Die Spannung war schrecklich. Was war es? Das Schicksal des Planeten kann in der Schwebe zu hängen! -Ralphie, Randy erhielt zu gehen! -Ich Direkt aus sein, verdammt noch mal! Fast da! Meine Finger flogen. Mein Verstand war eine Stahlfalle. Jede Pore in Schwingung versetzt. Es war fast klar! Ja. Ja. Ja. Ja. Achten Sie darauf, Ihren Ovomaltine trinken. Ovomaltine? Eine miese Handels? Hurensohn. [END PLAYBACK] ROB BOWDEN: Also das ist, wie Ovomaltine betrifft Kryptographie. Grundsätzlich CS50 nur beworben Ovomaltine, so konnten wir ist ein mieses Werbespot für Ovomaltine. Gut. So, jetzt tatsächlichen Informatik. Denken Sie daran, am Montag wir aufgehört haben tauchen tiefer in die Saiten. So waren wir zu tun haben die Zeichenfolge "Zamyla." Und wir erkennen, die Tatsache, dass wir behandeln können "Zamyla" als eine Folge von Zeichen. Und denken Sie daran, dass wir gelernt, die Klammer-Notation. Also, wenn diese gespeichert wurden in einer Zeichenfolge "s", dann wenn wir die s Halterung 0, würde das zeigen die Buchstaben Kapital Z. Und wenn wir die s Halterung 1, dass würde bedeuten, die erste Kleinbuchstaben a, und so weiter bis zur n Halterung 5, das wäre das letzte a anzugeben. Jetzt erinnern, dass die Länge dieser Zeichenfolge ist 6, aber die Indizes in den String sind 0 bis 5, Z durch, die zuletzt ein. Also das passt nun in ein größeres Bild der Arbeitsspeicher Ihres Computers, Ihre RAM. Also irgendwo das Programm, das Sie mit Ihrem Computer sind muss Zamyla erinnern irgendwo im Speicher. So kann ich einen Freiwilligen haben? Ja bitte. Und wie ist dein Name? Dean: Dean. ROB BOWDEN: Dean? Freut mich, Dean. Also komm her, und wir gehen zu müssen, die Sie zeichnen auf unserer schönen geschicktes Layout Speicher. Nun Ich mag an Speicher denken, als ein langer Streifen von Bytes, sondern nur zu Anzeigezwecken wir werden einfach nach rechts, oben nach links unten. OK? Also werde ich zu einer Show program-- Getstrings.c. Und so alle dieses Programm Dabei fordert vier Saiten vom Anwender mit GetString und dann Druck was auch immer das erste Zeichenfolge eingegeben wurde. Wir ignorieren zwei bis vier. OK. Also hier now-- wenn Ich erstes Anfordern s1. So sind Sie den Computer neu. Und Sie implementieren GetString. So können Sie einen String aus anfordern mich, und ich sagen, OK, Dean. Geben Sie die Zeichenfolge "Dean." Also irgendwo im Speicher, den Sie müssen daran denken, "Dean." So schreiben Sie es in den Speicher irgendwo. Perfect. OK. So, jetzt haben wir s2. Und s2 sein wird eine Anforderung, GetString. Also werde ich, um eine Zeichenfolge eingeben. Ich werde geben "Hannah." So geben Sie "Hannah" irgendwo in den Speicher. Ja. A-H. OK, so jetzt s3. Und es wird zu einem anderen ersuchen, GetString. Und jetzt geben Sie "Maria". Gut. Und dann gibt es noch eine letzte Anfrage an GetString, S4. Also, ich weiß es nicht. Wie wäre es mit uns zu gehen antidisestablishmentarianism. So geben Sie, dass in den Speicher. Ja. So einfach tun "Rob." OK. So, jetzt explain-- warum hat Du diese Räume verlassen? Warum haben Sie dieses Feld leer haben Raum hier, hier und hier oben? Ja. So bemerken, wenn ich gehe um s1-- so dass, wenn wir drucken hatten "Hannah" Lauf bis neben "Dean" Wie können wir wissen, wann die Zeichenfolge "Dean" endet? So drucken Sie die Zeichenfolge s1 kann nur gedruckt "DeanHannahMariaRob" wenn sie keine Ahnung haben wann "Dean" tatsächlich endet. Gut. So in Erinnerung, wie wir tatsächlich Betreiber dieses Ende eines Strings ist mit umgekehrten Schrägstrich Null. Also dieser Raum ist genau das, was wir wollten. Es sollte ein Backslash Null sein. Dies wird ein Backslash Null sein, und dies wird ein Backslash Null sein. Und Sie können eine fabelhafte Preis haben für ein perfektes Freiwilligen. Werfen Sie einen Stress-Ball! OK. Also dieses Zeichen Backslash Null wie wir zeigen, das Ende einer Zeichenfolge. Es ist, wie wenn ein bestimmtes Programm will, um eine Zeichenfolge zu drucken, es ist how-- erinnern wir gelernt, die strlen-Funktion der letzten Woche? String-Länge? Es ist, wie String-Länge ist in der Lage bestimmen, wie lange ein String ist. Es hält nur Iteration in den Zeichen , bis er feststellt, die Backslash Null Charakter. So ist die wichtigste Sache zu erkennen, über den umgekehrten Schrägstrich Nullzeichen wird es vertreten alle Nullen in Bits. So bemerken, dass dies deutliche von der Null-Zeichen. So ist die Nullzeichen, wenn Sie sich erinnern in dem Beispiel, dass er am Ende ergab Vorlesung, wo die Zeichen map zu-- wie Kapital A-Karten bis 65. Kleinbuchstaben ein Karten bis 97. Klein b würde 98 sein. So dass die Zahl 0 Karten zu-- ich nicht weiß, aus der Spitze von meinem Kopf. 44 oder 45. Irgendwo in dieser Region. Also das Zeichen 0 ist eine tatsächliche Zahl. Aber umgekehrten Schrägstrich Null Karten für alle Null-Bits. Es gibt also eine Unterscheidung Backslash zwischen Null was wir das Nullabschluss nennen. Es gibt einen Unterschied zwischen Backslash Null und das Zeichen Null. Gut. So spricht ein bisschen mehr über Zeichenfolgen. Also sehen wir hier, das ist, wie es wäre in Speicher verlegt werden. Also diese Idee von Strings als eine Folge von characters-- so das offizielle Computer sciency Begriff für Sequenz ein Array ist. So würden wir einen String aufrufen ein Array von Zeichen. Und es gibt tatsächlich andere Daten Typen, die wir Arrays aus zu machen. Also, diese zu motivieren, uns ein Beispiel. Wir nennen ages0.c Ich werde Kopieren Sie unsere Vorlage. OK. Also in diesem Programm, was wir tun möchte, ist greifen die Alters von drei Studenten in den Kurs. So wissen wir, das int age-- und jetzt werde ich sagen: 0. So möchten Sie vielleicht age1 sagen, aber zum Zwecke werden wir in Kürze sehen, Ich werde sagen, int age0 gleich getint. So selben Aufruf getint dass wir habe mit I nicht geschehen, werden aufgefordert und sagte: "Gib mir das Alter." Aber gerade anfordert. Und age1 gleich getint. Und int age2 gleich getint. Also, noch einmal, drei Studenten, aber letztlich die Variablenindizes sind age0 durch age2. OK. So wird dieses Programm tun, was wir wollen mit age0, age1 und age2, aber dieses Programm letztlich arbeitet für drei Studenten. OK. So, jetzt was, wenn ich vier Studenten? Nun, ich bin zu haben, um zurück zu gehen in meinen Code, ändern Sie den Kommentar, und jetzt haben wir einen int Age3 gleich getint. OK. Also, wer das Problem sieht hier? Was ist das Problem mit dieser Art von Setup? Ja. Ja. So schaffen wir gerade ein Variable für jeden Schüler. Nun, da funktioniert, aber letztlich, was, wenn ich jetzt sagen: "Ich möchte, um das Alter zu packen acht Studenten oder 16 Schüler oder die aber viele Studenten die Hunderte von Studenten in CS50 oder die Tausende von Studenten auf dem Campus oder die Milliarden von Menschen auf der Welt? Also letztendlich das ist nicht nachhaltig. Jedes Mal, wenn Sie sich das Kopieren zu sehen und Einfügen von Code wie folgt, Sie sollten in der Regel das Gefühl, , dass es einen besseren Weg. Also das ist, wo wir einführen ein Array-Deklaration. Also, wenn Sie ein Array deklarieren, das ist, was das allgemeine Format wird aussehen würde. Wir werden die Art sagen. und dann werden wir zu gehen geben Sie den Namen des Arrays, so wie wir jede gegebene Variable zu definieren. Und schließlich sind wir mit Diese Halterung Notation wieder sondern in einem anderen Kontext als wie wir früher verwenden. So, hier das sieht aus wie ein normaler Variablendeklaration, die wir gesehen haben. Also haben wir int x Semikolon gesehen. Nun könnten wir etwas sehen wie int x 5 Klammern. Und setzen diese Idee in die Getint Programm, das wir have-- so dass wir umsetzen können dies in der gleichen Weise. Nehmen wir an, in CS neigen wir dazu, zu verwenden n, wenn die Anzahl von etwas. So, hier sind wir zu gehen speichern vier Studenten. Und jetzt können wir sagen, int Alter Halterung N- nicht ganz bekommen yet-- um eine Anordnung von vier Studenten zu erklären. So, wie diese aussehen wird, in Speicher wird ähnlich der folgenden sein. Deaktivieren Sie diese. Und wir werden irgendwo in memory-- Ich werde dies dort oben gesetzt. Also irgendwo im Speicher. Eins zwei drei vier. Wir haben vier ganzen Zahlen in einer Reihe für diese Anordnung von vier Ganzzahlen. Also gerade, was ist der Größe eines dieser Felder? Ja. Es ist vier Bytes. Es ist 32 Bit. So, jetzt ist das anders aus dem Array, dass wir früher sahen, das Array von Zeichen. In einer Schnur war jede Box nur ein Byte, da ein Zeichen ist nur ein Byte. Aber mit einer Reihe von ganzen Zahlen, die jeweils Box verfügt über vier Bytes in Ordnung sein um eine ganze Integer passen. Also das ist, was eine Reihe von vier ints aussehen würde. Und dann wieder auf Code. Jetzt wollen wir eigentlich Shop Zahlen in diesem Array. So, jetzt ist dies ein sehr, sehr, sehr gemeinsames Muster, das wird irgendwann geworden Muskelgedächtnis. So int i gleich 0 ist. i kleiner als n ist. i plus plus. Altersklasse i gleich getint. Also dieser for-Schleife, dieses Format, Sie sollten sehr gewöhnungsbedürftig. So ist dies in der Regel, wie wir laufen fast jedem Array. Nun beachtet diese Art von erklärt, warum von Anfang an wir nicht für Loops gehen für int haben i gleich 1 ist, i kleiner oder gleich 10. Der Grund dafür ist, dass ausgehend von Null macht diese Arbeit auch mit Arrays. So Arrays null indexiert. Wenn diese Anordnung eine Länge von 4, die Indizes 0 bis 3. So durch die erste Iteration dieser for-Schleife wir werden werden die Festlegung von Alters Halterung 0 gleich einem Aufruf getint. Also, was ich geschehen an der Tastatur eingeben. Im zweiten Durchgang sind wir Setzen age1 gleich getint. Dritten Durchgang, age2. Letzten Durchgang Age3. So dass, wenn in dem ersten Durchlauf der Schleife Ich geben Sie die Nummer 4 auf der Tastatur, dann werden wir eine 4 übertragen Sie hier. Wenn auf dem zweiten Durchlauf I geben 50 werden wir eine 50 ablegen. Am dritten Pass, ich könnte Geben negativen 1, negativ 1, und schließlich, ob ich geben 0-- und Jetzt denken Sie daran, dass dies Index drei. Nachdem wir Schleife zurück, i gehen, um 4 erhöht. i nicht mehr kleiner als n ist, die 4 ist. Und wir brechen aus der Schleife. So würde, was mit das sein? [Unverständlich]? ZIELGRUPPE: [unverständlich] Ja. Also das Array nur vier Plätze, die als Indizes 0 bis 3 bedeutet. Also, wenn dies der Fall wäre, würde ich nehmen Sie auf den Wert 4 an einem gewissen Punkt. Altersstufe 4 wird die Einstellung Was auch immer geschieht, um hier zu sein zu dem, was ich zu sagen habe, geben Sie 6. Das wird diese Einstellung werden bis 6. Aber wir wissen nicht, was ist hier. Dies ist keine Speicher dass wir den Zugang zu. Also, wenn Sie daran denken, aus vorigen Vortrag, er war Ausdruck von Werten und Zamyla irgendwann schlug er diese Segmentierung Fehler. So dass Sie wahrscheinlich sehen werden viele Segmentierungsfehler, wie Sie implementieren einige der Problemstellungen. Aber dies ist einer der Wege, auf denen können Sie eine Segmentierung begegnen Fehler, wenn Sie den Zugriff auf starten Speicher in einer Weise, dass Sie sollte nicht sein. So dass wir nicht haben Zugang zu dieser Ort und das ist ein Fehler. Also das ist besser. Nun gibt es noch eine kleine Problem mit diesem Code. Und das ist im Grunde, dass wir noch in vier Studenten fest. Nun, wenn ich acht Studenten verwenden, OK. Es ist nicht so große Sache. Ich kann gehen, ändern Sie die Stellung zu nehmen, und ändern Sie n. Nun wird mit acht Studenten zu arbeiten. Wenn ich diese kompilieren und ausführen Dazu wird es zeigen mich- es ganze Zahlen für acht anfordern Studenten und es wird nur funktionieren. Aber es ist alles andere als ideal, um zu müssen, Kompilieren Sie das Programm jedes Mal I, um die Zahl der Studierenden zu ändern dass ich das Alter eingeben. So dass die endgültige Verbesserung Diese, wie wir hier-- sehen wir gehen, um die Anzahl der Personen anfordern. Hier haben wir eine Reihe der Menschen in den Zimmern oder jegliche Altersgruppen von Menschen in den Raum. Aber wir werden, um die Anzahl zu beantragen von Menschen in dem Raum von dem Benutzer. Also das ist genau das gleiche do-while- Schleife, die wir zuvor gesehen haben. Es ist genau das gleiche do-while-Schleife, die Sie kann auf das Problem Set Umsetzung werden. So lange, wie sie sind Eingabe eine n kleiner als 1, so es muss doch zumin sein mindestens eine Person im Raum. Solange sie Eingabe eine n kleiner als 1, dann werden wir halten wieder zu fragen. Bitte geben Sie die Anzahl von Menschen in dem Raum. Nun, wenn wir die Anzahl Leute in der room-- so könnte ich es geben, dass sind 200 Personen in diesem Raum. Dann hier unten werden wir kommen und erklären, eine Reihe von Größe 200. Wir deklarieren Array, das ist groß genug, um 200 Altersstufen zu halten. Herab, es ist die for-Schleife dass Sie sehr gewöhnungsbedürftig. So Iteration über dieses Array, Zuweisung an jedem Standort in diesem Array eine ganze Zahl und dann letztendlich hier sind wir gerade erst ein Beispiel Iteration über dieses Array, nicht auf Werte zuweisen, aber auf Werte zugreifen. Also hier sehen wir, dass wir sagen, ein Jahr ab jetzt, Person% i% i wird Jahre alt sein, wo das erste% i i plus 1. Also ist i der Index-Variable. Und das zweite% i wird den sein Wert in der Alters Array plus 1 gespeichert. Also das plus 1 ist, nur weil wir sind saying-- dieses plus 1, im Alter von i + 1. Dies plus 1 ist, nur weil wir sind sagen, ein Jahr ab jetzt der Person wird diese alt sein. Warum ist dies i plus 1? Deshalb haben wir ein Plus 1 gibt es? Ja. Ja. Also denken Sie daran Arrays null indexiert. Also, wenn wir dies für den Druck jemanden, der gerade gelesen, die Ausgabe, dann wohl sie etwas sehen wollen wie Person ein, person Nummer eins, wird 20 Jahre alt sein. Person Nummer zwei wird die 15 Jahre alt sein. Sie würden lieber nicht sehen, Person Zahl Null ist 15 Jahre alt. So kompilieren und diese nur zu sehen, was es sieht like-- etwas Raum erstellen. Machen Alter kompiliert. Laufende Altersgruppen. Wir sehen, Zahl der Menschen in den Raum. Also werde ich sagen, es gibt drei Menschen in den Raum. Alter der Person, die Nummer eins, sagen wir, 15, 20, 25. Und jetzt werde ich in einem Jahr sagen jetzt werden sie 16, 21, 26 zu sein. Lassen Sie uns sehen, dass dies funktioniert mit eine n nicht gleich 3 ist. Also, wenn ich sage, Personenanzahl 5, ein, zwei, drei, zwei, eins, ein Jahr ab jetzt sie werden zwei, drei, vier, drei, zwei Jahre alt. Also ich könnte genauso leicht haben n 10.000 sein. Jetzt werde ich hier sitzen schon ein während der Eingabe von Alter, aber das funktioniert. So, jetzt im Speicher irgendwo wir haben eine Reihe von Größen 10000, so letztendlich 40.000 Bytes, weil es vier Bytes für jede dieser Zahlen. So gibt es eine Reihe von Größe 10.000, wo wir können speichern Sie das Alter dieser 10.000 Menschen. Gut. Fragen über irgendwelche von diesem? Ja. Was, wenn Sie eine negative Zahl gab? Schauen wir mal was passiert. Also in diesem besonderen Fall-- Nummer von Menschen in dem Raum, negativ. Es zurückgewiesen, dass, weil sich hier ein, wir passieren sein Umgang mit der Tatsache, dass, wenn n weniger als ein, wir werden wieder an. Wenn Sie versuchen, ein zu erklären Reihe von negativen Größe, es im allgemeinen nicht funktioniert. Also lassen Sie uns versuchen. Lassen Sie uns zu ignorieren was auch immer Wert, den sie Input für n und einfach sagen, int Alter negativ. Mal sehen, ob es noch kompiliert. Ich bin mir nicht sicher. Nein. Also Alter wird als ein deklariert Array mit einer negativen Größe. So upfront es ein Array erkennt, kann nicht sein von negativen Größe und lehnt sie ab. Nun, wenn wir nicht umgehen Dieses do-while-Schleife richtig, wenn wir nicht die Überprüfung wenn n kleiner als 1-- lassen Sie uns sagen wir einfach hatte nicht das überhaupt und statt uns einfach an eine ganze Zahl. Egal, was die ganze Zahl ist, erklären wir, eine Reihe von dieser Größe. So kann der Compiler nicht evtl. beschweren jetzt. Wenn ich kompilieren this-- so kann es nicht zu beklagen, weil sie nicht wissen, dass ich gehen, um eine negative Zahl eingeben, die ungültig sein könnte. Für alle, sie weiß, ich könnte geben Sie eine positive Zahl ist, Das ist völlig in Ordnung. So stelle ich mir, wenn ich geben Sie negatives 1 Leute im Raum, Segmentation Fault. So, OK. So fügen wir dies wieder nur halten Sie es, was es ursprünglich war. So stellen Alters. Nun, wenn ich etwas ausprobieren negativen age-- also lassen Sie uns sagen, es gibt fünf Menschen in den Raum. Alter der Person Nummer eins negativ 4, Person drei Null ist, three-- Person OK. Also hier, ein Jahr ab jetzt, Personennummer man wird minus 3 Jahre alt sein. Also wahrscheinlich nicht sinnvoll. Aber das ist nur, weil der Suche auf den Code alles, was wir tun fordert getint. Nun, wenn wir hatten, war der GetPositiveInt Funktion oder wir hatten einfach nur das getan Art gleichen while-Schleife dort unten, dann wäre dies völlig in Ordnung arbeiten. Aber in diesem speziellen Fall haben wir einfach nicht geschehen zu sein Umgang mit negativen Werten. Alle anderen Fragen über Arrays? OK. Also haben wir jetzt Arrays gesehen. Und wir gehen zu müssen, zu verwenden das für Befehlszeilenargumente. So bei der Problem gesetzt two-- Ich weiß, viele von Ihnen vielleicht noch auf Problem-Set arbeiten eine, sondern zwei Probleme setzen steht vor der Tür. In Problem stellte zwei, du bist zu gehen müssen Sie mit Strings, Arrays zu tun haben, und Befehlszeilenargumente. Also, was sind Kommandozeilenargumente? Jetzt können Sie sich hier einen zu sehen kleiner Teaser für genau das, was ist gehen zu geschehen. Wir sehen int main, inc argc, String argv Klammern. Also lassen Sie uns zuerst versuchen, zu interpretieren was das ist versucht zu sagen. Jetzt ok. So in der Befehlszeile Sie sein sollte am Anfang, einige dieser Befehle jetzt, und Sie wahrscheinlich ausgeführt haben cd im Terminal vor. Also, wenn wir sagen, cd pset1, Sie wissen, dass das sollte sein Wechsel in den pset1 Verzeichnis. Jetzt bemerken, dass Sie nie haben ein Programm geschrieben, wie dies vor. Jedes Programm, das Sie geschrieben haben, Sie laufen, sagen wir, dot Slash Mario, dot Slash gierig, und dann ist es könnten Sie zu einer Eingabe auffordern. Nun, das ist nicht das, was Verzeichnis wechseln tut. Wenn Sie cd laufen, ist es nicht so sagen, welchem ​​Verzeichnis Sie wollen, CD in? Stattdessen können Sie einfach sagen, cd pset1 und es geht einfach in die pset1 Verzeichnis. So ähnlich haben wir andere Beispiele. machen hallo. Wenn Sie machen laufen, ist es nicht so sagen, welches Programm möchten Sie machen? Du gerade gesagt, bei der Befehlszeile machen hallo. Bewegung ist ein weiteres Beispiel. Dieses wir bewegen die mario.c Datei ein Verzeichnis nach oben. Jetzt wissen wir also mit diesem Beispiel wir wirklich vorbei zwei Argumente. Es gibt mario.c als erstes Argument, und Punkt Punkt ist das zweite Argument. Und dann, wenn Sie zum Laufen zu bringen, die Sie sehen, dass wirklich lange Befehls line-- dass wirklich lange Befehls in der Befehlszeile gedruckt. So dass lange command-- diese ist nur einen kurzen Teil davon, aber jetzt müssen wir drei Befehlszeilenargumente. Dot Dash Null, hallo, und hello.c. Das sind also Befehlszeilen Argumente, Argumente dass Sie auf die vorbeifahr sind Kommandozeile, so dass sie muss nicht aufgefordert, Wenn Sie das Programm ausführen. Es wäre frustrierend, wenn bei Sie clang lief es sagte: "OK, die program-- die Datei werden Sie der Zusammenstellung? Hello.c. Was würden Sie flags gerne geben? dash o. Was hättest du gerne die Datei aufgerufen werden? Hallo. Nein, Sie führen Sie einfach clang dash o hallo hello.c. So im Rückblick auf diese. Jetzt argc-- argc ist das Argument zählt. Es ist die Anzahl der Befehlszeilen Argumente in der Befehlszeile eingegeben. Nun, technisch argv-- die v steht für Vektor, was im Grunde bedeutet Array. Sie können jedoch ignorieren. Argv-- wir String argv, so String argv Klammern. Also das ist eine andere Form der Klammern Sie noch nie gesehen haben. So haben wir gesehen, Halterung Notation, als wir gesagt haben, wie, string s gleich Zamyla. s Halterung 0 greift den Charakter Z. Wir haben auch gesehen, Klammern, wenn wir gesagt int Alter Konsole 5. Das erklärte ein Array der Größe 5. So, hier ist eine Version von der Klammern wir noch nie gesehen haben. Also diese Art von String argv, dass wäre völlig vertraut sein dass es nur ein String sein. Nun werden die Klammern dass dieses ein Array ist. So String argv Klammern Mittel dass argv ist ein Array von Zeichenfolgen. Nun technisch ein String ein Array von Zeichen. Also das ist jetzt ein Array einer Anordnung von Zeichen. Aber es ist viel einfacher zu denken dies als nur ein Array von Strings. Warum also könnten die Klammern leer sein? Wie, warum können wir nicht sagen, Halterung 5, Bügel n? Ja. Ja. Wir wissen nicht, wie viele Eingänge gibt sein werden. Also, wenn wir uns den Klang Beispiel Wir sagen clang dash o hallo hello.c. In diesem besonderen Fall gibt es passieren zu drei Befehlszeilenargumente sein. Und so ist die brackets-- wir werden sehen, in einem zweiten wäre es nicht drei sein. Es wäre technisch vier sein. Aber die Klammern, würden wir beispielsweise sind es drei. Aber jetzt, wenn wir sah unterwegs mario.c dot dot, die Klammern wir wollen zwei in sie setzen. Und es gibt eine Menge von Befehlen, eine variable Anzahl von Befehlszeilen Argumente. Also, was diese Version des Klammer-Notation zeigt ist, dass argv ist ein Array von Zeichenfolgen. Aber wir wissen nicht, wie viele Saiten sind in diesem Array. Und woher wissen wir dann, wie viele Strings im Array? Das ist der springende Punkt argc. argc sagt uns, wie lange argv ist. Also das letzte, was in zu halten Geist ist, dass, technisch gesehen, der Befehl selbst zählt der Befehlszeilenargumente. So cd pset1 gibt es zwei Befehlszeilenargumente. Das Programm an sich, cd, und dann das eigentliche Argument, ein Teil davon, pset1. Jedes Programm, das Sie bisher geschrieben haben, hat eine Befehlszeilen argument-- dot hatten Slash Mario. Das ist der einzige Befehlszeilenargument. So, jetzt betrachten clang dash o hallo hello.c. Also, was ist argc? 4. So argc ist 4. Clang, so argv Halterung 0 ist Klang. argv Halterung 1 ist strich 0. argv Halterung 2 hallo, und argv Halterung 3 hello.c. OK, so dass Fragen über das, und dann werden wir Blick auf einige programmatische Beispiele. OK. Also werden wir einen Blick auf hello3.c zu nehmen. So sollte diese vom vertraut sein eine der ersten c Beispiele wir hatten, wo wir nur sagen würde, hallo Welt, aber das ist jetzt allgemeiner. Hier sind wir also sagen hallo % s Backslash n argv Halterung 1. Notice-- so bis zu diesem Punkt, das ist was meine Vorlagendatei hat ausgesehen. Ich hatte int main (void), und dann würde ich tun Sie etwas in der Hauptfunktion. Jetzt statt, sobald wir anfangen zu tun mit Befehlszeilenargumente, wir brauchen, um einen Zustand andere Form der Haupt. So suchen Sie in hello3 wieder, der Haupt wird um zwei Argumente now-- int argc zu nehmen, die Anzahl der Kommandozeilenargumente, und String argv Klammern, die tatsächliche Zeichenfolgen in der Befehlszeile eingegeben. Also werde ich das ändern Vorlage, um diese Tatsache zu reflektieren. Nun, wenn Sie schreiben, ein Programm, wenn Sie nicht tun müssen keine Befehlszeilen nehmen Argumente, dann benutzen Sie einfach int main (void). Aber jetzt, wenn du schreibst Befehlszeilenargument Programme, die Sie gehen zu tun, für die Problem gesetzt two-- so jetzt, dass Sie laufen Programme, die zu übernehmen müssen Befehlszeilenargumente, Sie benötigen Haupt dieser Form zu haben. So hier-- das ist die große Nutzung der Befehlszeilenargument. So Druck argv 1. OK also lassen Sie kompilieren und führen Sie dieses Programm. Machen hello3. Kompiliert. Dot Slash hello3. Und lassen Sie uns sagen: "Rob." Hallo Rob. Wenn ich sage: "Hallo Maria," Hallo Maria. Hallo Maria. Hannah immer noch sagt: "Hallo Maria, "weil ich nicht nichts mit unseren argv 2 tut. Argv 2 wäre jetzt "Hannah." Argc würde 3 sein. Was passiert, wenn ich das tat? So hallo null. Er berührte kurz auf die Tatsache, dass, technisch gesehen, GetString könnte null zurück, aber wir werden eine zu bekommen viel mehr in das, was null tatsächlich ist. Aber nehmen Sie es als eine Angelegenheit von Tatsache, dass keine in der Regel schlecht. Wir haben etwas falsch gemacht, wenn es Druck "Hallo null." Und der Grund, wir haben etwas falsch ist-- auch, wenn ich lief dot Strich hello3, argc war 1. Das heißt also, die Länge des argv war 1. Wenn ein Array der Länge 1, das einzig gültige Index ist Null. Und hier argv 1 außerhalb der Bereich dieser Array. Es war ähnlich wie zuvor, als ich versuchte, außerhalb des Endes der Anordnung zu speichern. 6 So versuche ich, etwas zugreifen außerhalb der argv zählt, und wir bekommen null. So eine bessere Version Dies ist eine Verbesserung, ausdrücklich die Überprüfung argc. Also, wenn argc gleich 2 ist, bedeutet, dass wir liefen so etwas wie dot Strich hello3 Rob. Und es wird print "Hallo Rob." Wenn argc nicht gleich 2 ist, dann ist es nur geht zu ignorieren, was Sie setzen an der Befehlszeilenargument als Befehlszeilenargumente. Oder wenn Sie nicht setzen überhaupt, ist es gerade dabei, das zu ignorieren und einfach nur sagen: "hallo Sie." So kompilieren dies. Machen hello4. Laufen hello4. Läuft es auf diese Weise, Was soll gedruckt werden? "Hallo Sie." Hallo Sie. Was ist hello4 Rob? "Hallo Rob." Und schließlich, Hallo Rob Maria nur "Hallo Du" wieder, weil Sie nicht wirklich geben etwas, das sie erwartet. Sie eingegeben mehr Namen , als er verarbeiten konnte, so dass es nur zu Verzug Die Hallo Ihr Verhalten. Also Fragen dazu? Oder Kommandozeilenargumente? OK, so dass sich ein Blick auf ein paar weitere Beispiele für die Verwendung Befehlszeilen arguments-- zuerst wir dash 1 Punkt c argv. So werden die Kommentare zu verschenken, was dieses Programm tun sollte. Aber beachten now-- diese for-Schleife, dies das genaue Muster übereinstimmt Ich war, bevor er sagte. Wir haben einfach geschehen zu sein Verwendung Argc statt n. Jetzt argc ist wirklich der n. Es ist die Länge des argv Array. So werden über die argv Iteration Array printf-ing einander argv Wert. Also, wenn ich diese. Machen argv 1. Es kompiliert. Dot Slash argv 1. Gerade läuft das, es Drucke dot Strich argv 1 denn das war der einzige Befehlszeile- argument-- den Programmnamen. Es wird immer mindestens zu sein Argc kann nicht kleiner als eins ist, denn es wird immer mindestens ist der Name des Programms zu laufen. So argv 1 Rob wird argv 1 drucken und dann auf der neuen Linie "Rob." So in der ersten Iteration dieser Schleife ist i 0. Argv 0 ist der Programmname. Dot Slash argv 1. Und dann argv 1 ist mein erster Befehlszeilenargument, das Rob ist. An diesem Punkt sind wir gleich argc. Wir brechen aus der Schleife und wir sind fertig. So wird dies für eine beliebige arbeiten Anzahl der Befehlszeilenargumente. Beachten Sie, er druckt argv 0, argv 1, argv 2, argv 3, argv 4. Und es gibt keine argv 5. argc gleich 5 ist. So zumin argc-- bei i gleich 5, wir brechen aus der Schleife. OK. Also Fragen, bevor wir Blick auf ein komplexeres Beispiel? So argv 2. Gut. Also wir sind immer noch das Drucken die Befehlszeilenargumente. Aber jetzt müssen wir feststellen, for-Schleife eine verschachtelt. Was also ist das denn? So die erste Schleife tut genau das, was zuvor. Wir sind immer noch mehr als Looping Jede Befehlszeilenargument, aber jetzt diese zweite loop-- wir haben bevor auch so etwas wie dieses gesehen. Als er über die Iteration Zamyla Ausdruck Z-A-M-Y-L-A. Also das zweite Schleife für int j gleich 0, n gleich strlen von argv Halterung i. Also lassen Sie uns zuerst für die denken, the-- wir durch zu gehen. Lassen Sie uns denken, was würde der Computer tun, wenn ich lief dieses Programm als nur dot Slash argv Strich 2. Also, wenn ich lief diesen Code, dann Argc wird gleich 1 sein. Und Streich argv-- gibt es nur gehen, um einen Index in argv sein, und das wird gleich zu Punkt zu sein Slash argv 2-- den Programmnamen. OK, so jetzt habe ich gleich 0, i weniger als 1, i plus plus für int j gleich 0 ist, n gleich strlen von argv Halterung 0, so dass in die erste Iteration dieser Schleife. argv Halterung 0 dot Strich argv 2. Also, was ist die Länge dieser Zeichenfolge? Nun, dot Slash A-R-G-V Strich 2. So strlen davon wird 8 sein. So j gleich 0 ist, n gleich 8. Solange j kleiner als 8 ist, j ++ ist. Und damit werden wir sein, Drucken eines einzelnen Zeichens, das ist argv Halterung i Halter j. So ist die einzige i gleich Null ist. Wir haben immer noch nur einen Befehlszeilenargument. In dieser ersten Iteration der for-Schleife, wir sind gehen, um Druck sein argv Halterung 0 Halterung 0. Und dann j wird sich erhöhen. Und wir sind, um den Druck gehen argv Halterung 0 Halterung 1. Und dann argv Halterung 0 Halterung 2. Das ist also unsere erste Begegnung von mehrdimensionalen Arrays. Früheren Bedenken Sie, dass ich sagte, dass argv ist technisch ein Array von Arrays von Zeichen. Also hier, wenn ich sagte so etwas wie string s gleich argv Halterung i, und dann sagte ich, s Halterung j, diese wäre erreichen die gleiche Sache. Jetzt können Sie Halterung j zuvor gesehen haben s. Dass der Zugang nur die j-te Charakter dieser Zeichenfolge. Also mit diesem, bekommen wir die j-ten Zeichen des i-ten argv. Also, was soll dies letztlich ausgegeben? Machen argv 2. Es kompiliert. Dot Slash argv 2. "Rob Maria Hannah" und geben Sie uns einen gewissen Spielraum. Wir sehen also, dass es sich um die Ausgabe dot in einer eigenen Zeile und Schrägstrich in einer eigenen Zeile und in einer eigenen Zeile. Es ist Ausdruck von jedem individuellen Charakter jedes Befehlszeilenargument. Und dann zwischen ihnen, weil dieser neuen Linie wir Druck hier unten, in zwischen ihnen, es wird eine neue Zeile zu drucken. So ist dies ähnlich Der Stand der argv dash 1, die jeweils gedruckt Befehlszeilenargument, aber jetzt sind wir Druck die Befehlszeilenargumente und dann durch jede Iteration Charakter der einzelnen Befehlszeilenargument um diese Ausgabe zu erhalten. OK? Also Fragen dazu? Eine Sache zu beachten ist, dass Befehlszeilen arguments-- so sind sie durch Leerzeichen getrennt, wie Sie würden natürlich erwarten, dass sie zu sein. So ein String kann Räume in ihm haben. Es ist nicht super wichtig, aber wenn ich wollte die dritte Befehlszeilenargument um einen Raum in mir haben, dann könnte so etwas wie das sagen. OK? Also das hat jetzt nur noch drei Befehlszeilen arguments-- gut 4. Dot Slash argv Strich 2, Rob, Maria, und Hannah Bloomberg. OK. Fragen zu diesem Thema? Es gibt nichts besonderes über das Leerzeichen. Es passiert einfach zu sein, dass die Befehlszeilen behandelt das Leerzeichen so wie Sie trennen jedes Argument. Gut. Also Problem Set two-- wirst du sein wirst Blick auf geheimen Schlüsseln. So ähnlich dem Beispiel wir sahen, von A Christmas Story, Sie gehen zu implementieren einige Algorithmen, die, da eine Nachricht, Sie in der Lage sein wirst um diese Nachricht zu verschlüsseln dass nur jemand mit diesem Geheimnis Schlüssel, mit dem Decoder-Ring, sollten in der Lage zu entschlüsseln. Das ist also die Standardausgabe. Du wirst zu implementieren zwei verschiedenen Versionen. Wenn Sie geschehen, einen Blick zu nehmen bei der Hacker edition-- jetzt, wir gehen zu geben, Sie eine Zeichenfolge wie diese, was einem verschlüsselten Passwort. Also Ihr Ziel ist es, herauszufinden, was das entschlüsselte Passwort ist. Nun ist dies tatsächlich, wie Passwörter werden in einer Menge von Computern gespeichert sind, und es ist nur speichert diese zufällige Zeichenfolge. Sie haben, um herauszufinden, wie man aus dieser zufälligen Zeichenkette zu dem, was das Original-Passwort war. Und schließlich, nach dieser Problem einrichten, sollten Sie in der Lage sein zu verstehen, was das bedeutet. So erfahren Sie, wie zu entschlüsseln diese Art der zufällige Zeichenfolge. Und falls Sie sich erinnern, von Woche 0, könnten Sie diese URL gesehen haben. Und Sie sollten in der Lage zu sein, entschlüsseln diese schließlich. Sie werden vielleicht nicht glücklich sein, wenn Sie entschlüsseln Sie es und klicken Sie auf den Link. Gut. Das war es für heute. Sie sehen also nächste Woche! [Elektronische Musik zu spielen]