[Musik zu spielen] David J. MALAN: In Ordnung. Dies ist CS50, und dies ist das Ende der 2. Woche. Also heute werden wir unseren Blick weiter an, wie wir die Dinge darstellen Unter der hood-- weg von Zahlen wie ganze Zahlen und Fließkommawerte und die Konzentration auf Saiten und letztlich mehr interessante Programme. Aber wir werden auch einen Blick auf eine nehmen Paar von domänenspezifischen problems-- von denen die erste werden, die mit der Kryptographie die Kunst der Verschlüsselung Informationen in dem Sie hier siehe oben ist ein Bild von Radio Orphan Annie Geheimnis Decoder Ring von gestern. Dies ist eigentlich sehr primitive Form und kinderfreundliche Form der cryptopgraphy wobei dieser Ring zwei disks-- eine innerhalb und eine außerhalb. Und durch Drehung einer von denen, können Wesentlichen antreten Buchstaben wie A bis Z mit anderen Buchstaben B wie durch A. Mit anderen Worten, Sie können buchstäblich drehen das Alphabet, dabei kommen mit einer Abbildung von Schreiben von Buchstaben, so daß, wenn man wollte eine geheime Nachricht senden , jemanden wie Annie, könnten Sie schreiben Sie Ihre Nachricht und dann drehen die Buchstaben, wobei, wenn du meinst zu sagen "A," Sie sagen statt "B" Sie sagen, "B", Sie sagen statt "C" - oder etwas ein wenig schlauer als dass-- und schließlich so lange, wie Annie hat diese Decoder Ring, sie kann die Nachricht entschlüsseln. Jetzt können Sie sich erinnern, in der Tat, dass diese wurde in einer sehr berühmten Film eingesetzt, dass spielt bis zum Erbrechen während die Weihnachtszeit. Werfen wir einen Blick hier. RALPHIE PARKER: "Sei es alle in Zusammenfassung bekannt dass Ralph Parker wird zum Mitglied der Little Orphan Annie Geheimnis Kreis und ist es, alle Titel Ehrungen und Vorteile auftretenden dazu. " RALPHIE PARKER (erzählen): Little Orphan Annie unterzeichnet. Gegengezeichnet, Pierre Andre! In der Tinte. Ehrungen und Vorteile, bereits im Alter von neun Jahren. [Musik zu spielen] [RADIO CHATTER] RALPHIE PARKER: Kommen Sie. Lassen Sie uns auf damit. Ich weiß nicht alles, was Jazz müssen über Schmuggler und Piraten. Radiosprecher: Hören Sie morgen Nacht für das abschließende Abenteuer The Black Pirate Ship. Jetzt ist es Zeit für Annies Secret Message für Sie Mitglieder der Secret Circle. Denken Sie daran, Kinder, nur für Mitglieder von Annie Secret Circle kann geheime Nachricht Annies decodieren. Denken Sie daran, Annie auf dich. Stellen Sie Ihre Stifte B-2. Hier ist die nachrichten-- 12, 11, 2-- RALPHIE PARKER (erzählen): Ich bin in meinem ersten geheimen Treffen. Radiosprecher: -25, 14, 11, 18, 16-- RALPHIE PARKER (erzählen): Oh, Pierre war in der großen Stimme heute Abend. Ich könnte sagen, dass heute Abend Botschaft war wirklich wichtig. Radiosprecher: --3, 25. Das ist eine Nachricht von Annie sich. Denken Sie daran, nicht weitersagen. [KEUCHEN] RALPHIE PARKER (erzählen): Neunzig Sekunden später bin ich in der nur Platz in der Haus, in dem ein Junge von neun konnte in der Privatsphäre und decodieren zu sitzen. Ah. "B." [CHUCKLES] RALPHIE PARKER (erzählen): Ich ging zum nächsten. "E" Das erste Wort ist "sein." Ja! Es kam jetzt einfacher. "U." [CHUCKLES] RANDY PARKER: Ach, komm schon, Ralphie. Ich muss gehen! RALPHIE PARKER: Ich bin gleich unten, Ma. Herrje. "T" "O" "Seien Sie sicher, auf. "" Seien Sie sicher, "Was? Was war Little Orphan Annie versucht zu sagen? "Achten Sie darauf," was? MUTTER: Ralphie, Randy muss gehen. Würden Sie bitte kommen? RALPHIE PARKER: All right, Mama! Ich bin gleich aus sein! RALPHIE PARKER (erzählen): Ich war jetzt näher bekommen. Die Spannung war schrecklich. Was war es? Das Schicksal des Planeten kann in der Schwebe. MUTTER: Ralphie, Randy muss gehen! RALPHIE PARKER: Ich werde gleich sein aus, für crying out loud! RALPHIE PARKER (Erzählen): Fast geschafft! Meine Finger flogen! Mein Geist war ein Stahlfalle. Jede Pore in Schwingung versetzt. Es war fast klar! Ja! Ja! Ja! Ja! RALPHIE PARKER: "Seien Sie sicher, um Ihre Ovomaltine trinken. " Ovomaltine? Eine miese Handels? [Musik zu spielen] RALPHIE PARKER: Son of a bitch. [Lacht] David J. MALAN: Also das ist dann ein Blick auf, was Kryptographie kann für ein this-- sein Trinken von gestern. So eine schnelle Ankündigung. Wenn Sie frei sind diese Freitag um 13.15 Uhr und würde möchten uns für CS50 beitreten Mittagessen, Kopf zu dieser URL hier. First come, first wie gewohnt bedienen. Aber im Laufe der Zeit, werden wir sicherstellen, dass die meisten alle, die teilnehmen möchten kann planen-weise. So Zeichenfolgen. Wir haben den Zamyla-- Sie haben jetzt wahrscheinlich erfüllt in Problem-Set, dessen 1-- Name wird so geschrieben sind. Und nehmen Sie ihren Namen eingegeben in ein Computerprogramm, ist mit so etwas wie getString. Um abrufen diese Tastenanschläge, wie wissen wir über eine Vertretung gehen String, ein Wort, ein Absatz, oder mehrere Buchstaben wie diese hier? Wir sprachen letzte Mal über Zahlen und Probleme dass mit Integer-Überlauf auftreten und Fließkommawerte und Probleme, die entstehen innerhalb Präzision. Mit Streichern, wir zumindest haben ein bisschen mehr Flexibilität weil nur strings-- in der realen world-- kann eine ziemlich beliebiger Länge sein. Ziemlich kurz, ziemlich lang. Aber selbst dann sind wir los dass Computer finden kann manchmal aus der Erinnerung und auch nicht laufen speichern groß genug Schnur. Aber jetzt lassen Sie uns beginnen zu visualisieren ein String als etwas in diesen Feldern Hier. So sechs solcher Boxen, von denen jede stellt ein Zeichen oder "char". So daran erinnern, dass "char" - c-h-a-r-- ist einer der eingebauten Datentypen in C Und was ist schön, dass Sie verwenden können, diese Art von als Baustein, ein Puzzle-Stück, wenn man so will, zu einer Form größere Art der Daten, die wir weiter um ein "string" nennen. Nun, was ist sinnvoll, über das Denken über Dinge wie Zeichenfolgen in dieser Art und Weise? Nun stellt sich heraus, dass wir tatsächlich nutzen diese Struktur tatsächlich Zugriff auf einzelne Zeichen in einem hübschen unkompliziert. Ich werde weitermachen und erstellen eine Datei namens "stringzero.c" aber Sie können es nennen, wie Sie möchten. Und auf der Website der Kurs ist schon dieses Beispiel im Voraus, so dass Sie nicht brauchen, um geben alles aus. Und ich werde weitermachen und zuerst tun int main nichtig. Und innerhalb von wenigen Tagen, wir beginnen auseinander zu necken was nichtig ist hier, warum es int neben dem Haupt, und so weiter. Aber jetzt lassen Sie uns weiter zu kopieren und einfügen, dass. Ich werde einen String namens s erklären. Und ich werde aus Rück GetString unabhängig von den Benutzertypen in. Das wird eine einfach zu sein Programm, keine Anweisungen, Ich werde einfach blind zu erwarten, dass der Benutzer weiß, was zu tun ist, um es einfach zu halten. Und jetzt werde ich eine for-Schleife haben. Und Innenseite meiner for-Schleife Ich bin gehen zu müssen, int i bekommt Null. Und i ist wieder nur eine Konvention, eine Indexvariable zum Zählen, aber ich könnte dies, was ich will rufen. Ich werde tun, ich weniger gut than-- Zamyla Name ist sechs Buchstaben lang. Also bin ich zu hart gehen Code, der es für jetzt. Und dann ++ ich. Und jetzt innerhalb dieser geschweiften Klammern werde ich printf tun, und ich möchte eine drucken Zeichen zu einem Zeitpunkt. Also ich werde% c für den Einsatz vielleicht das erste Mal. Und dann möchte ich jeden Druck Charakter auf seine eigene Linie. Also werde ich eine Put- kleine Backslash n gibt. Schließen Zitat. Und jetzt will ich hier etwas zu tun. Ich will aus dem Druck bestimmten Buchstaben in der Zeichenfolge, s, so wie ich bin Iteration von Null auf bis zu sechs. Mit anderen Worten, ich möchte drucken Sie das i-te Zeichen von s. Nun, wie kann ich dies tun? Nun viel wie die Boxen in diese Darstellung hier Art, zaubern den Begriff des Boxens Buchstaben in, können Sie das tun, ähnlich syntaktisch in C, indem Sie einfach, Ich möchte i-ten Zeichen ausdrucken S. Mit den eckigen Klammern auf der Tastatur des Computers dass auf einer US-Tastatur in der Regel über dem Return-Taste. Das ist also nicht ganz richtig doch, wie Sie vielleicht bemerkt haben. Aber ich bin zu Art, zu gehen blind vorantreiben hier. Und ich werde tun, machen String 0. Aber bevor ich das tue, lassen Sie uns sehen, ob wir kann nicht erwarten, einige häufige Fehler. Wird das zu kompilieren? Nein, ich bin fehlt eine ganze Reihe von Dingen. Bibliotheken, die ich gehört habe. Also, die Header-Dateien vielleicht will ich anlegen? Ja. ZIELGRUPPE: Sie müssen Standard-I / O [unverständlich] David J. MALAN: Ausgezeichnet. Also muss ich Standard-I / O. Wofür Zweck will ich Standard-I / O? Für printf. So gehören stdio.h. Und Sie schlagen auch vor, dass ich schließen der CS50-Bibliothek aus welchem ​​Grund? Zu haben, Strings. Also werden wir sehen, was CS50 Bibliothek tut , diese Vorstellung von einem String erstellen. Aber für jetzt, die Sie gerade denken kann es als eine tatsächliche Datentyp. So dass scheint zu sein, ein wenig aufgeräumt. Und jetzt gehe ich voran gehen und in der Tat zu tun zu machen String 0. Zusammengestellt. Also das ist gut. Also lassen Sie mich ./string0 heranzoomen, so können wir siehe genauer, was passiert. Eingeben. Z-A-M-Y-L-A geben. Und wir haben heraus Zamyla Namen gedruckt. Also das ist ziemlich gut. So, jetzt gehen Sie vor und lassen führen Sie dieses Programm wieder, und geben Sie den vollständigen Namen Daven. Überraschung, Überraschung. Eingeben. Hmm. Wir haben nicht gedruckt Daven richtig voll Vornamen. Jetzt sollte dies in der Hand sein Rückblick, weil von dem, was, Art, dumm Design-Entscheidung? Ja, ich hart codiert die sechs Innenseite meiner for-Schleife. Jetzt habe ich das nur, weil Ich wusste, dass der Name Zamyla wollte sechs Buchstaben sein. Aber das ist sicherlich nicht eine allgemeine Lösung. So stellt sich heraus können wir dynamisch herauszufinden, die Länge eines Strings durch den Aufruf einer Funktion namens strlen. Wieder bewusst kurz und bündig eben genannten , um es bequemer zu geben. Aber das ist gleichbedeutend mit immer die Länge eines Strings. Ich werde wieder in mein Terminal gehen Fenster und starten den Compiler. Aber es ist an mir zu kreischen. Implizit Bibliotheksfunktion erklärt mit Typ unsigned int strlen const-- Ich bin verloren. Vollständig. Also, vor allem als Augen beginnen glasig mit Fehlermeldungen wie diese, Fokus ehrlich auf die ersten paar Worte. Wir wissen, das Problem ist in Linie 8, wie hier angedeutet. Und es ist in String-0.c. Implizit erklärt Bibliotheksfunktion strlen. So daß im allgemeinen werde ein Muster von Fehlermeldungen ist. Implizit etwas zu erklären. Also kurz gesagt, was habe ich schien haben in Bezug getan, um die Linie 8, hier. Was könnte die Lösung sein, auch wenn Sie noch nie strlen selbst verwendet? ZIELGRUPPE: Teil einer anderen Bibliothek? David J. MALAN: Teil von einer anderen Bibliothek. So wird erklärt, so zu sprechen. Es ist in einigen Datei erwähnt andere als stdio.h und CS50.h. Jetzt wo ist es definiert? Um ehrlich zu sein, haben Sie entweder nur weiß, dass dies von der Spitze des Kopfes, oder Sie diese Google und finden Sie heraus. Oder weiß, das habe ich in der CS50 geöffnet Appliance Die Terminal-Programm, das ist nur der große, Vollbild-Version was ist in der Unterseite der Fenster gedit ist. Und es stellt sich heraus, dass es eine ähnlich knappe Befehl, genannt Mann für die manuelle, wo, wenn Sie geben der Name einer Funktion und drücken Sie die Eingabetaste, Sie werden ziemlich zurück Arkane Dokumentation. Es ist nur Text, der in der Regel sieht ein wenig so etwas wie dieses. Es ist ein wenig überwältigend auf den ersten Blick. Aber ehrlich gesagt bin ich zu gehen ließ meine Augen glasig und nur auf dem Teil zu konzentrieren Ich kümmere mich um für den Moment. Welches ist das. Die aussieht wie strukturell etwas, was ich bin vertraut. In der Tat die man-Seite, so zu sprechen, wird Ihnen sagen, in welcher Header-Datei eine Funktion wie strlen definiert ist. Also werde ich jetzt zurück zu gedit zu gehen. Und ich werde weitermachen und fügen hier # include und speichern Sie die Datei. Ich werde, um den Bildschirm mit klaren Control L Wenn Sie sich schon gefragt haben. Und ich werde wieder laufen make string.0, kompiliert diese Zeit. ./string.0 Zamyla. Das schien zu funktionieren Lass mich gehen vor und führen Sie es mit Davenport. Eingeben. Und das schien auch zu funktionieren. Also wir tun können, ein wenig besser als das, obwohl, können wir ordentlich die Dinge beginnen bis nur ein wenig. Und ich werde tatsächlich führen nun eine andere Sache. Ich werde weitermachen und speichern Sie diese in einer anderen Datei. Und ich werde anrufen Diese Datei string1.c nur im Einklang mit dem Code zu sein Sie werden in der Lage, online zu finden sein. Und lassen Sie konzentriert sich auf Genau der gleiche Code. Es stellt sich heraus, dass ich Art gewesen Nahme für selbstverständlich, dass mein Laptop, und wiederum das Gerät CS50 hat eine Menge von Speicher, eine Menge von RAM, eine Menge von Bytes Platz in der ich Strings speichern. Aber die Realität, wenn ich lange getippt genug, und genug Tastatureingaben, Ich könnte in der Theorie Typ in mehr Zeichen als mein Computer körperlich und ein Speicher für. Und dies ist problematisch. Ähnlich wie ein int nur kann zählen so hoch ist, in der Theorie, Sie können nur so viele Zeichen stopfen in den Arbeitsspeicher des Computers oder Zufalls Zugriffsspeicher. So hatte ich eine bessere Antizipation Dieses Problem, auch wenn es vielleicht eine seltene sein Ecke Fall, so zu sprechen. Nicht so oft vorkommen, passieren könnte. Und wenn es passiert, und ich weiß nicht antizipieren und das Programm für sie, mein Programm tun könnte, wer weiß was. Einfrieren, hängen, Neustart, was auch immer. Etwas erwartet passieren könnte. Also, was ich tun werde jetzt, nun wirklich, ist, bevor ich überhaupt blind eine Variable wie s, dass wurde den Rückgabewert zugewiesen eine andere Funktion wie getstring, Ich werde sicherstellen, dass dass der Wert gültig ist. Also ich weiß nur aus der Lektüre Dokumentation CS50 für getstring, was letztlich werden wir Sie bei Punkt dass getstring gibt ein spezielles Symbol genannt NULL, N-U-L-L in allen Kappen, wenn etwas schief geht. Also normalerweise, gibt es einen String. Aber sonst, wenn es N-U-L-L-- zurück wir werden schließlich sehen, was das wirklich means-- das bedeutet nur, etwas Schlimmes passiert. Nun bedeutet dies, ähnlich wie in Scratch, Ich kann ein Zustand hier in C zu überprüfen, wenn s nicht gleich NULL. Also, wenn Sie das nicht vorher gesehen haben, Dies bedeutet nur, nicht gleich. Es ist also das Gegenteil von gleich Gleichen, die sich erinnern, ist anders als bei einzelnen entspricht, die Aufgabe ist. Also, wenn s nicht gleich NULL, erst dann Ich möchte diese Zeilen Code auszuführen. In anderen Worten, bevor ich tauchen in blind und starten Iteration über S und Behandeln als ob es ein Sequenz von Zeichen, ich werde erst prüfen, warten Sie eine Minute, ist definitiv nicht gleich diesem besonderen Wert, NULL? Denn wenn es ist, können schlimme Dinge passieren. Und jetzt, davon ausgehen, dass schlechte Dinge Geschehen bedeutet, dass Ihr Programm abstürzt, und man kann nicht unbedingt erholen. Also ehrlich gesagt, sieht es immer hässlicher. ist es irgendwie verwirrend jetzt einen Blick auf. Aber das wird mehr werden es dauerte nicht lange vertraut. Aber ich werde vorschlagen jetzt eine weitere Verbesserung. Das ist eine Verbesserung auf Richtigkeit. Mein Programm ist jetzt richtig, denn in dem seltenen Fall, dass nicht genügend Speicher vorhanden ist, werde ich damit umgehen, und ich werde einfach nichts zu tun. Ich zumindest nicht abstürzen. Aber lassen Sie uns eine endgültige Version hier. Und eine Datei namens string2.c. Ich werde das Einfügen gleichen Code nur für einen Moment, und ich werde dieses Highlight Linie 11, hier, nur für einen Augenblick. Nun ist die Realität ist, dass Smart-Compiler wie Clang könnte dies für uns zu fixieren hinter den Kulissen ohne jemals zu wissen, unsere. Aber lassen Sie uns darüber nachdenken grundsätzlich als problematisch Design. Diese Codezeile ist natürlich sagen, initialisieren eine Variable i auf 0. Das ist ziemlich einfach. Und was das ist wieder Rechnung, hier, ++ i, da? Wir haben es gesehen, aber wir nicht wirklich darüber reden. ZIELGRUPPE: Erhöhen ich. David J. MALAN: Erhöhen ich. So bei jeder Iteration durch Diese Schleife, in jedem Zyklus, Erhöhen Sie i um eins. So wird es größer und größer, und größer, bis die Schleife beendet. Wie kommt es zu beenden? Nun gibt es diese Mittel Zustand, den wir verwendet haben. Sie haben gesehen, und in Komplettlösungen in der P-Reihe. Aber was ist dieses Sprichwort? Führen Sie die folgende Schleife, so solange ich weniger als das, was ist? ZIELGRUPPE: Die Länge der Zeichenkette. David J. MALAN: Der Länge der Zeichenfolge. So ist es recht sauber übersetzt Englisch in diesem Sinne. Nun das Problem ist, dass jedes Mal, wenn ich durchlaufen diese Schleife in der Theorie, Ich frage diese Frage. Ist i kleiner als der String-Länge von s? Ist i kleiner als der String-Länge von s? Jetzt wird i Wechsel an jeder Iteration? Es ist. Aufgrund der ++. Also jeder Iteration i wird immer größer. Aber ist s immer größer, oder kleiner oder Ändern überhaupt? Nein. Also in Bezug auf Design, eine der Achsen auf dem wir versuchen, Code zu bewerten in der Klasse, fühlt sich diese Art von dumm. Wie Sie buchstäblich, bei jeder Iteration dieser Schleife fragen, die elbe verdammte Frage noch einmal, und wieder und wieder, und buchstäblich es wird sich nie ändern. Zumindest, wenn ich nicht zu berühren und s versuchen, den Inhalt von s ändern. So kann ich ein wenig besser als dies zu tun. Und was ich tun werde, ist nicht erklären nur eine Variable i, aber eine zweite variable werde ich willkürlich, aber konventionell, nennen Sie es n. Zuordnen n gleich der String-Länge von s. Und dann hier, ich bin zu gehen tun eine clevere kleine Optimierung, so am Ende des Tages zu sprechen, dass nicht mehr richtig oder nicht weniger richtig als zuvor. Aber es ist ein besseres Design. In der Tatsache, dass ich mit weniger Zeit, weniger CPU-Zyklen, so zu sprechen, um die gleiche Antwort Frage, aber nur einmal. Sie haben Fragen zu diesem allgemeinen Grundsatz der Verbesserung, sagen, Effizienz eines Programms? Ja? ZIELGRUPPE: Warum wollen Sie verwenden Sie die [unverständlich]? David J. MALAN: Gute Frage. Also, warum wir den ++ auf das Ende des i statt am Anfang des i? In diesem Fall hat es keine funktionalen Auswirkungen. Und überhaupt, ich neige dazu, verwenden Sie den Postfix-Operator , so dass es ein wenig mehr klar, wie um, wenn der Betrieb geschieht. Für die Leser gibt es ein weiteres Aussagen, wobei Sie ++ ich tun konnte. Dies sind funktional Wert in diesem Fall denn es gibt nichts anderes um diese Schrittweite. Aber Sie können sich mit Fälle und Zeilen Code , in der das macht einen Unterschied. So allgemein, wissen wir nicht auch sprechen über dieser. Denn ehrlich gesagt, macht es Ihren Code sexier, und irgendwie glatter, und weniger Zeichen. Aber die Realität ist, es ist viel schwieriger, Ich denke, auch für mich, meine Meinung zu wickeln um sie manchmal die Reihenfolge der Operationen. So nebenbei, wenn Sie wirklich nicht, wie diese, auch wenn dies Art von sexy suchen, können Sie auch tun i + = 1, das ist der hässlicher Version gleiche Idee für postfix Inkrementierung. Ich dies, und Sie sagen sollte Spaß machen, aber Sie werden kommen, um zu sehen, wie Code etwas Schönes vor lang. [Gelächter] David J. MALAN: Richtig? Ja. Frage in der Mitte. ZIELGRUPPE: Müssen Sie int n sagen? David J. MALAN: Sie tun nicht zu sagen, int n. So, weil wir bereits gesagt haben int, Sie brauchen nicht, um es noch einmal sagen. Der Haken ist, dass n muss sein die gleichen Datentyp wie ich. Also das ist nur eine Bequemlichkeit hier. Ja. ZIELGRUPPE: Können Sie über die gehen Druckzeichen s Halterung ich wieder? David J. MALAN: Absolut. So% c, erinnern von den letzten Zeit ist nur ein Platzhalter. Es bedeutet, legte eine char hier. Backslash n natürlich nur Mittel setzen einen Zeilenumbruch hier. So dass nur Blätter, jetzt, dieses Stück neue Syntax. Und das ist wörtlich zu sagen, Halte die Zeichenkette s genannt und holen ihre i-ten Charakter, so zu sprechen. Und ich sage immer i-ten Zeichen denn bei jeder Iteration des Schleifen es ist, als ob wir den Druck aus, erste S Halterung 0, als Programmierer könnte man sagen. Dann ist S Halterung 1 s Halterung 2, dann 3, dann 4. Aber natürlich ist es eine Variable, so drücke ich es nur mit i. Key ist jedoch, zu realisieren, vor allem, wenn Sie nicht haben zu dieser Welt zu akklimatisieren der Programmierung, wo wir alle scheinen von Null zu zählen, ich muss Zählen von Null beginnen jetzt. Da Strings, erstes Zeichen, die z in Zamyla ist auf Gedeih und Verderb werde am Standort Zahl Null zu leben. Alles klar, also lassen Sie mich bringen uns wieder hier, um Zamyla und sehen, was wirklich los ist auf unter der Haube. Also gibt es diese Vorstellung von Art Casting. Sie könnte in der Tat haben bereits mit dieser gespielt, Vielleicht für den Hacker Ausgabe von S. ein. Aber Typumwandlung bezieht sich nur auf die Fähigkeit in C und einige andere Sprachen zu einem Datentyp in einen anderen konvertieren. Nun, wie können wir das sehen ziemlich unkompliziert? Also das, Rückruf, ist der Anfang des englischen Alphabets. Und der Kontext erinnern, von wie vor einer Woche ist ASCII. Die American Standard Code für Informationsaustausch. Das ist nur ein wirklich langer Weg zu sagen, eine Zuordnung von Buchstaben Zahlen und aus Zahlen, Buchstaben. Also A bis M hier, Punkt Punkt Punkt, Linie mit, Rückruf, die Dezimalzahl 65 auf bis. Und wir haben nicht zu sprechen über dies ausdrücklich, aber sicher gibt es ähnliche Zahlen für Kleinbuchstaben. Und in der Tat, es gibt. Die Welt entschieden sich einige Jahre vor, dass eine kleine, Kleinbuchstaben a, wird zu 97 sein. Und b wenig los ist 98, und so weiter. Und für jede andere Taste auf Tastatur, gibt es wird ein ähnliches Muster von Bits. Oder äquivalent eine Dezimalzahl. So ist die Frage auf der Hand, dann, wie können wir tatsächlich unter der Haube sehen dies? So werde ich immer wieder zu gehen, um gedit. Und eher als Typ dieses von Grund auf, Ich werde weitermachen und öffnen Sie einfach etwas aus heutiger ASCII-Code genannt Null. Und ASCII Null sieht wie folgt aus. Also lassen Sie wickeln unseren Köpfen, um dieses. Also zuerst, ich habe kommentiert der Code, das ist schön. Weil es buchstäblich Erzählen Sie mir, was zu erwarten ist, Anzeige eine Zuordnung für Großbuchstaben. Nun weiß ich nicht recht, was ich damit meine, also lasst uns zu schließen. In Englisch, vielleicht Technikfreak etwas Englisch, was macht die Leitung 18 erscheinen zu tun für uns? Nur Zeile 18. Wie ist es zu induzieren? Was es wird, hier zu beginnen? ZIELGRUPPE: Eine Schleife. David J. MALAN: Eine Schleife. Und wie oft ist dass geht zu durchlaufen? ZIELGRUPPE: [Zwischen Stimmen] sechsmal. David J. MALAN: Nicht sechsmal. ZIELGRUPPE: 26 mal. David J. MALAN: 26 mal. Ja, sorry. 26 mal. Warum? Nun, es ist ein wenig seltsam, aber Ich habe das Zählen von 65 gestartet. Welches ist seltsam, aber nicht falsch. Es ist nicht schlecht pro sagen. Und ich mache das nur weil in diesem Beispiel Ich bin eine Art Vorwegnahme dass das Kapital A war 65. Nun ist dies nicht die eleganteste Weg, dies zu tun, die Art der Festcode esoterischen Werte, die niemand wird immer erwartet, dass sie sich erinnern. Aber jetzt merke, dass ich bin Dabei oben durch 65 plus 26. Weil anscheinend ich will gar nicht um die Arithmetik in meinem Kopf zu tun. Also lasse ich die Compiler tun. Aber dann auf jeder Schleife, jede Iteration der Schleife, ich bin Erhöhen ich. So, jetzt sieht das ein wenig kryptisch. Aber wir sollten die Grund Gebäude haben Blöcke, mit denen dies zu verstehen. % C ist nur ein Platzhalter für ein Zeichen. % I ist ein Platzhalter für einen int. Und es stellt sich heraus, dass durch die Verwendung dieser neue Syntax, diese in Klammern, so zu sprechen, so einen Datentyp in einer Klammer, Ich kann den Compiler zu zwingen, zu behandeln i keine ganze Zahl, sondern als char. Dabei zeigt mir den Charakter Äquivalent dieser Zahl. Jetzt hier unten, dieser Code ist so ziemlich identisch. Ich wollte nur sicherstellen, Super expliziten die Tatsache, dass ich mit 97 ab, die Kleinbuchstaben ein. Auf bis über 26 weitere Buchstaben. Und ich bin wieder doing--, Gießen i, so zu sprechen. Oder Typumwandlung i, so zu sprechen. Von einem int auf ein char. So das Ergebnis sein wird, ehrlich gesagt, Informationen, die wir bereits kennen. Ich werde dafür sorgen, ASCII-0 dot-- nicht dot c. Beachten Sie, dass Sie wahrscheinlich gemacht Fehler, wie ich gerade tat versehentlich. Machen ascii-0. Jetzt werde ich zu ./ascii-0 zu tun. Ich werde heranzoomen, und leider es wird über den Bildschirm. Aber wir sehen eine ganze Diagramm, wo eine Karten zu 97, Karten zu 98 b, und wenn wir nach oben weiter Ein natürlich Karten 65. Das ist also nur zu sagen, dass was wir gepredigt, gibt es diese Gleichwertigkeit wird in der Tat der Fall ist in der Realität. So eine schnelle Änderung dieser. Lassen Sie mich zu öffnen ascii-1.c. Und beachten Sie diese kluge, sortieren der Klärung dieser. Dies ist ascii-1.c und feststellen, diese verrückte Sache. Und das ist wirklich trifft den Kern von welchem ​​Computer tun. Auch wenn wir Menschen würden nicht im Sinne von letters-- zählen Ich glaube nicht daran, zu starten, gut ein, dann b, und verwenden Sie diese, um physische Objekte zu zählen. Man kann sicherlich sagen, dass ich initialisieren eine Variable namens c-- aber ich konnte diese anything-- genannt haben so ist c, Kapital A. initialisiert Da am Ende des Tages, den Computer ist es egal, was du bist Speicherung, es kümmert sich nur, wie Sie wollen um diese Informationen zu präsentieren. Wie beurteilen Sie den Computer zu wollen interpretieren, dass die Muster von Bits? Das ist also nicht etwas, was ich würde generell empfehlen, tun. Es ist wirklich nur ein Beispiel zu vermitteln, dass Sie absolut initialisieren eine ganze Zahl auf ein char. Denn unter der Motorhaube eines char, natürlich, ist nur eine Zahl von 0 bis 255. So können Sie sicher legte es in einer Int. Und was dies auch zeigt, ist, dass wir kann von einem konvertieren Typ zu einem anderen, hier schließlich Druck elbe. Und in der Tat, das werde ich beheben online-- gemeint war, das zu sagen, wieder hier. Lassen Sie mich diese sich online zu reinigen, und wir werden sehen in einer Online-Komplettlösung nach Bedarf was dort gedacht. Ok. Also letzte Beispiel jetzt mit a und b und dann werden wir nehmen die Dinge eine Kerbe. Also mit ein und b und c in der Aktivierung und die Gleichwertigkeit davon, lassen Sie uns einen Blick auf dieses Beispiel hier. Ein weiterer Code-Beispiel. Wir werden eine, die ist offen schon gemacht, so dass wir nicht haben, um es zu tippen alle aus aus dem Nichts. Und in Erwartung bemerken wir mit mehreren Kopf sind Dateien, unter denen unser neuer Freund, string.h. Jetzt sieht das auf den ersten Blick, ein wenig kryptisch. Aber lassen Sie uns sehen, ob wir nicht die Vernunft durch das, was hier vor sich geht. Zuerst einen String bekomme ich vom Benutzer, und ich habe diese Zeichenfolge in einer Variablen s genannt. Copy & Paste aus der Zeit vor. In Zeile 22, ich bin anscheinend tut genau das, was Ich habe vor einem Moment, ich bin Iteration über die Zeichen in s. Und die neuen Tricks werden hier mit String-Länge, die kleine Optimierung der Speicherung der String-Länge n, eher als der Aufruf wieder strlen, und wieder und wieder. Und nur die Überprüfung, dass ich weniger als n ist. Jetzt ist hier, werden die Dinge ein wenig interessant. Aber es ist nur eine Anwendung dieses gleiche neue Idee. Was in Englisch tut s Bügel i dar? ZIELGRUPPE: Zählung der jeweils Charakter [unverständlich]. David J. MALAN: Zählung der einzelnen Zeichen. Und noch mehr kurz und bündig, s Halterung, die ich vertrete, was? Würden Sie sagen. Nicht auf Sie auf der Stelle hier setzen. ZIELGRUPPE: Well-- David J. MALAN: Also, wenn das Wort, wenn ist-- der String Zamyla, die starts-- ZIELGRUPPE: --Sie befassen sich mit die Zeichen separately-- David J. MALAN: Gut. Genau. Die eckige Klammer-Notation können Sie um jedes Zeichen einzeln zuzugreifen, so s Klammer 0 wird den sein erste Zeichen in der Zeichenfolge. s Winkel 1 sein wird, das zweite, und so weiter. So ist die Frage, die ich fragen, hier, in diesem Zustand ist, was? Ist die i-te Zeichen von s größer oder gleich in Kleinbuchstaben ein? Und was bedeutet das, hier, mit den Doppel Et-Zeichen? Publikum (zusammen): Und. David J. MALAN: Und. Es ist nur entspricht diese. Und ist das nicht ein Schlüsselwort in C, müssen Sie Einsatz, ärgerlich, Kaufmanns-Und-Zeichen. Und dies ist umgekehrt, fragt S i-ten Zeichen weniger als oder gleich in Kleinbuchstaben z? Und wieder, hier, wo Verständnis der zugrunde liegenden Umsetzung eines Computer macht Sinn. Beachten Sie, dass, auch wenn ich der Punkt Punkt Punkt dort, sieht aus wie a bis z in Kleinbuchstaben werden alle zusammenhängenden Werte bis 97 auf bis. Und gleich für Großbuchstaben ab 65. So dass die Gerichte zum Mitnehmen, dann, ist, dass in Deutsch, Englisch, Wie würden Sie welche Zeile 24 tut? Ja? ZIELGRUPPE: Am 24. ist es zu überprüfen, ob jedes Zeichen ist ein Kleinbuchstaben. David J. MALAN: Es ist zu prüfen, ob Jedes Zeichen ist ein Kleinbuchstabe. Also noch kurz und bündig, ist die i-ten Charakter der Klein s? Das ist alles, wir sind hier logisch auszudrücken, ein wenig kryptisch, aber letztlich ziemlich unkompliziert. S ist der i-te Zeichen in Kleinbuchstaben? Wenn ja, und hier ist, wo die Dinge ein wenig Geist Biegen nur für einen Augenblick, und wenn ja, gehen vor und drucken Sie ein Zeichen. Also das ist nur ein Platzhalter, was aber Charakter? Warum mache ich s i Halterung minus dieser Ausdruck hier? Nun bemerken das Muster hier. Die tatsächlichen Zahlen nicht so sehr wichtig. Aber feststellen, dass 97 wie weit weg von 65? ZIELGRUPPE: 32. David J. MALAN: 32. Wie weit ist 98 von 66? ZIELGRUPPE: 32. David J. MALAN: Wenig c von Big C? 32. Es gibt also 32 Hopfen aus Ein Brief zum anderen. Also ehrlich gesagt, ich, konnte vereinfachen, dass diese auf. Aber dann bin ich ein bisschen hart zu kodieren Dieses niedrige Niveau Verständnis dass kein Leser jemals los zu verstehen. Also ich werde es so verallgemeinern, ich wissen, dass die Kleinbuchstaben sind größer. Ich weiß, die Buchstaben sind kleinere Werte, ironisch. Aber dies ist effektiv äquivalent sagen subtrahieren 32 von s i Halterung. So im Rahmen dieser Briefe, wenn der Buchstabe geschieht, ein, klein geschrieben werden A und I zu subtrahieren 32, Welche Auswirkungen das haben wird, mathematisch, auf Kleinbuchstaben a? ZIELGRUPPE: Capitalizes-- David J. MALAN: Wandelt es. Und in der Tat, das ist, warum unsere Programm heißt Kapital Null. Dieses Programm entweder nutzt einen Brief, nach der Überprüfung, ob es in der Tat ein Kleinbuchstabe. Ansonsten in Zeile 30, was soll ich tun, wenn es ist nicht ein Kleinbuchstabe, dass ich Blick auf zu einem bestimmten Iteration in der Schleife. Nur ausdrucken. Also nicht Sachen ändern das ist nicht einmal Kleinbuchstaben. Beschränken Sie sich auf wenig ein wenig durch z. Nun, das ist ziemlich obskuren. Aber am Ende des Tages, diese ist, wie wir, es war einmal, hatte, die Dinge umzusetzen. Wenn ich statt öffnen zu nutzen eine, oh Gott sei Dank. Es gibt eine Funktion bis oberen genannt Das kann tun alles, was wir gerade getan auf einem recht niedrigen Niveau. Nun zu den oberen ist interessant denn es wird in einer Datei erklärt, und Sie würden nur wissen, durch Überprüfung der Unterlagen, oder gesagt, sagen wir, in der Klasse, wo es existiert, in einer Datei namens ctype.h. Also das ist ein weiterer neuer Freund von uns. Und genau das tut, Ober , was der Name vermuten lässt. Sie können passieren in, als Argument, zwischen Diese Klammern, einige Charakter. Ich werde in der i-ten Charakter geben von s mit unserer Phantasie neue Notation mit eckigen Klammern. Und nehmen Sie eine Vermutung, was ist die Rückkehr Wert von bis oberen offenbar gehen zu sein? Einem Großbuchstaben. Einem Großbuchstaben. Also, wenn ich pass in Kleinbuchstaben a, hoffentlich, nach Definition von der oberen, es geht um eine Rückkehr Großbuchstaben A. Andernfalls wenn es nicht ein Kleinbuchstabe in der erste Ort, ich habe gerade ausdrucken. Und in der Tat feststellen, dass die zweiten Freund hier. Nicht nur zu den oberen existiert, aber niedriger ist, was tatsächlich beantwortet diese Frage für mich. Nun, wer diese Dinge schrieb, 10s von Jahren, wissen Sie was? Implementiert, um obere und ist senken mit Code wie diesen. Aber noch einmal, im Einklang mit Diese Idee der Abstraktion weg, Art, unteren Ebene Details der Implementierung. Und auf den Schultern von Menschen stehen die vor uns kamen, mit Hilfe von Funktionen wie obere und untere ist, die wunderbar genug sind schön Namen zu sagen, was sie tun, ist ein wunderbares Paradigma zu verabschieden. Jetzt stellt sich heraus, dass, wenn ich lesen Die man-Seite für, sagen wir, zu den oberen, Ich lerne etwas anderes. So wird der Mensch toUpper. Es ist ein wenig überwältigend. Aber beachten Sie, hier ist die Rede von Die Header-Datei, die ich verwenden soll. Nebenbei bemerkt, weil diese ist irreführend, die Funktion verwendet ints statt Zeichen aus Gründen der Fehlerprüfung. Aber wir werden vielleicht kommen Zurück zu der in der Zukunft. Aber beachten Sie, hier, zu den oberen Konvertiten der Buchstabe c, um, wenn möglich, in Großbuchstaben. Also das ist ziemlich einfach. Und nun ein wenig präziser zu lassen. Schauen wir uns den Teil des man-Seite unter Rückgabewert. Der zurückgegebene Wert ist, dass des umgewandelten Brief. Oder c, wenn die Umwandlung nicht möglich war, wobei c die ursprünglichen Eingangs. Ich weiß, was von hier aus Das Argument für den oberen. Also, was ist das Mitnehmen von diesem? Der zurückgegebene Wert ist, dass Schreiben der konvertierten, oder c, das Original des Briefes, wenn die Umsetzung war nicht möglich. Was kann ich damit Verbesserung machen, um meinen Code-Design? Ja? ZIELGRUPPE: Sie können die sonst zu entfernen. David J. MALAN: Ich kann entfernen Sie die else-Anweisung, und nicht nur die else-Anweisung. ZIELGRUPPE: Sie können entfernen [unverständlich]. David J. MALAN: Ich kann entfernen Sie die gesamte Gabel in der Straße, die, wenn ganz anderes. Also ja, lassen Sie mich zu öffnen die endgültige Version davon, Kapital-2 und bemerken, wie, wenn Sie werden, sexy, der Code ist jetzt immer, in, dass ich von einigen reduziert sieben oder so auf nur vier Zeilen, die Funktionalität, die ich bestimmt einfach durch Aufruf der oberen, vorbei in s i Halterung und Druck aus, mit dem Platzhalter% C, dass insbesondere Charakter. Nun wohl, es ist ein Fehler, oder zumindest die Gefahr eines Fehlers, in diesem Programm. Also einfach zurückkommen zu einem früheren Service, was soll ich wohl auch tun, in dieses Programm es robuster zu machen, so dass es keine Möglichkeit gibt es kann Absturz, auch in seltenen Fällen? ZIELGRUPPE: Stellen Sie sicher, es ist nicht NULL. David J. MALAN: Stellen Sie sicher, es ist nicht NULL. Also wirklich, um diese super machen richtig, ich sollte etwas tun, wenn s nicht NULL ist, dann gehen Sie vor und führen Diese Zeilen Code, die Ich kann dann Gedankenstrich so, und dann in meiner engen Klammer setzen. So gut, Zusammenbinden der beiden Ideen. Ja? ZIELGRUPPE: Könnten Sie verwenden eine do while-Schleife, statt? David J. MALAN: Könnte Ich eine do-while-Schleife zu tun? ZIELGRUPPE: --Sie sicherstellen möchten, dass Sie tatsächlich [unverständlich]. David J. MALAN: Könnte Sie eine Do While verwenden? Kurze Antwort, nein. Weil Sie gerade sind Einführung weiterer Eckball Fall. Wenn die Zeichenfolge der Länge Null. Wenn ich zum Beispiel einfach auf Geben Sie, ohne jemals die Eingabe Zamyla. Ich werde Sie wieder von Hand eine tatsächliche String, wie wir sehen, schließlich, das hat Null-Zeichen. Es ist immer noch ein String ist, es ist einfach super kurz. Aber wenn Sie ein Do While verwenden, wirst du blind versuchen, etwas zu tun mit in Bezug auf diese Schnur, und nichts los ist, dort zu sein. ZIELGRUPPE: Nun, wenn Sie getan haben tun [unverständlich], während s-- David J. MALAN: Oh ich sehe, halten immer ein String von dem Benutzer. So kurze Antwort, die Sie könnte, und halten Sie belästigen sie Ihnen eine Zeichenfolge, die ist zu geben kurz genug, um in den Speicher passen. Absolut. Ich wählte nicht zu. Wenn sie mir nicht die Saite, die ich wollen, ich bin verlassen, ich gebe auf. Aber absolut, zu diesem Zweck, Sie konnte absolut das tun. So Header-Dateien der Bibliothek, dass wir sind jetzt vertraut mit diesen hier. Standard-I / O, CS50.h, string.h, ctype.h, und es gibt in der Tat andere. Einige von euch haben entdeckt, die Mathematik-Bibliothek in der Datei math.h. Aber lassen Sie mich Ihnen vorstellen, jetzt, zu diese Ressource, die CS50 Personal, Davin, und Rob, und Gabe insbesondere zusammengestellt haben. Das wird sich bald verlinken auf Website des Kurses. Es heißt CS50 Referenz. Das ist nur, um Ihnen einen schnellen geben Geschmack davon, funktioniert wie folgt. Lassen Sie mich gehen, um reference.cs50.net. Sie werden auf der linken Hand zu sehen Seite eine überwältigende Liste von Funktionen, die mit c kommen. Aber wenn ich zu kümmern, für den Augenblick, über so etwas wie strlen, Ich kann es dort geben. Es filtert die Liste um genau das, was mich interessiert. Ich werde darauf klicken. Und jetzt auf der linken Seite, Sie werden sehen, was wir hoffen, ist ein einfacher, Menschen freundliche Erklärung, wie Diese Funktion arbeitet. Gibt die Länge eines Strings. Hier ist eine Übersicht, hier ist, wie Sie verwenden Sie es in Bezug auf die Header-Datei, und in dem, was der Funktion sieht aus wie in Bezug auf seine Argumente. Und dann hier, Renditen die Länge einer Zeichenkette. Aber für diejenigen von Ihnen, noch komfortabler, Sie können tatsächlich auf mehr bequem, und der Inhalt dieser Seite, jetzt wird sich ändern Um die Standardwerte von dem, was sein Sie erhalten, indem Sie die man-Seite. Mit anderen Worten, CS50 Referenz ist eine Vereinfachung von man-Seiten von den Mitarbeitern, für Studenten. Insbesondere diejenigen, weniger komfortabel und dazwischen, so dass Sie nicht zu versuchen, wickeln euer Gehirn um, ehrlich gesagt, einige ziemlich kryptische Syntax und Dokumentation irgendwann. So halten, dass, in den kommenden Tagen. So, hier ist wieder ein Zamyla. Lassen Sie uns nun fragen, eine Frage, die ist ein wenig mehr menschliche zugänglich. Dank Chang, der gewesen ist Drucken mehr Elefanten Nonstop in den letzten paar Tagen. Wir haben die Möglichkeit zu geben, mindestens einer von ihnen weg. Wenn wir nur einen Freiwilligen zu bekommen auf bis zu kommen auf dem Bildschirm zeichnen. Wie wäre es hier? Komm auf. Wie heißen Sie? Alex: Alex. David J. MALAN: Alex. In Ordnung. Alex, komm auf. Wir sind dabei zu sehen, Ihre Handschrift auf dem Bildschirm hier. Alles klar, schön, Sie zu treffen. ALEX: Nice Sie kennen zu lernen. David J. MALAN: In Ordnung. Also, super einfache Übung. Bar ist nicht hoch bekommen einen Elefanten heute. Sie sind in der Rolle des getstring. Und ich werde nur sagen, die Zeichenfolge, die Sie bekommen haben. Und annehmen, dass Sie, getstring, genannt worden. Und der Mensch, wie ich, in Zamyla, Z-A-M-Y-L-A getippt. Dann nichts wie los und schreiben Zamyla auf die Bildschirm, als ob Sie es bekommen haben und gespeichert es irgendwo im Speicher. Raum lassen für das, was sein wird mehrere Wörter des anderen, die OK ist, weiterzumachen. [Gelächter] So Zamyla, Excellent. So, jetzt annehmen, dass Sie, getstring, werden wieder aufgerufen. Und deshalb biete ich Ihnen, bei der Tastatur, mit einem anderen Namen, Belinda. In Ordnung. Und jetzt die nächste Zeit ist getstring genannt wird, tippe ich in so etwas wie Gabe, G-A-B-E. Du bist wirklich unter Herzdirektzugriffsspeicher. Welches ist alles Zeichnung völlig zufällig. Ok. [Gelächter] ALEX: Sorry meine Handschrift ist schlecht. David J. MALAN: Nein, das ist OK. Und wie Rob, R-O-B. Ok. Gut. So dass ich Sie nicht davon aus, würde Art lagen die Dinge in dieser Weise. Aber wir können diese Arbeit zu machen. Also, wie haben Sie von über gehen aus diesen Zeichen in Erinnerung? In anderen Worten, wenn wir denken Diese rechteckige schwarze Bildschirm als Vertreter einer Computer-RAM oder Speicher. Und erinnern daran, dass RAM ist nur eine ganze Reihe von Bytes, und Bytes sind eine ganze Reihe von Bits. Und Bits sind irgendwie implementiert, allgemein mit irgendeiner Form von Strom in der Hardware. Also das ist die Art von Schichtung wir gesprochen haben und kann nun für selbstverständlich halten. Wie haben Sie von gehen Sie entscheiden, wo zu schreiben Rob gegenüber Gabe im Vergleich Belinda gegenüber Zamyla? ALEX: Ich habe es gerade in der anordnen, dass du mir gesagt hast. David J. MALAN: Und das ist wahr. Aber was geregelt, wo Sie setzen Belinda Name und Gabe Name? ALEX: Nichts? David J. MALAN: [lacht] Also das funktioniert, ist das in Ordnung. So wenig sind Computer geordneter als die. Und so, wenn wir dort bleiben implement-- für nur ein moment-- wenn wir tatsächlich Umsetzung so etwas wie getstring in einem Computer, Zamyla könnte so ziemlich festgelegt werden wie Sie auf dem Bildschirm haben, gibt. Und was ist der Schlüssel zu bemerken hier, was Alex getan hat, ist, gibt es eine Art Abgrenzung unter jedem dieser Worte, oder? Sie wollte nicht schreiben Z-A-M-Y-L-A-B-E-L-I-N-D-A-G-A-B-- in anderen Worten, es ist eine Art Abgrenzung der zu sein scheint, Art, Zufalls Abstand zwischen diesen verschiedenen Wörtern. Aber das ist gut, weil wir Menschen können nun visualisieren, dass diese vier verschiedenen Saiten. Es ist nicht nur eine Folge der Partien von Zeichen. So ein Computer, dann, inzwischen könnte eine Zeichenfolge wie Zamyla zu nehmen, legte jeder dieser Briefe innerhalb eines Bytes des Speichers. Aber diese Zahl ist viel größer, natürlich als sechs Zeichen. Es gibt eine ganze Reihe von RAM. Und so fortan, diese Gitter der Boxen wird zu dem, was Alex nur darstellen hat hier auf dem Bildschirm. Und jetzt, Alex, wir Ihnen eine anbieten kann Blau oder Orange Elephant von Chang. Alex: Ich werde einen blauen Elefanten zu nehmen. David J. MALAN: Ein blauer Elefant. So ein großen Applaus, wenn wir es könnten, für Alex hier. [Applaus] ALEX: Danke. David J. MALAN: Danke. Also das Essen zum Mitnehmen ist, dass, obwohl die Muster Art verändert im Laufe der Zeit, hier auf dem Brett, da war dieser Abgrenzung der verschiedenen Saiten Alex bekam, dass für uns. Jetzt Computern, ehrlich gesagt, könnte das gleiche tun. Sie konnten Art von plop Strings überall im RAM. Hier oben, hier, hier unten, hier unten. Sie könnten genau das tun. Aber selbstverständlich ist, dass wahrscheinlich nicht die beste Planung. Oder? Wenn ich immer wieder gefragt, Alex Namen bekommen, wahrscheinlich würde er setzen einige mehr hier unten, vielleicht bis hier, hier, hier, schließlich hier. Aber mit ein bisschen mehr Planung, natürlich, wir könnten die Dinge mehr sauber zu legen. Und in der Tat ist das, was ein Computer. Aber der Haken ist, dass wenn die nächste Saite, die ich bekommen nach Zamyla ist etwas wie die Belinda, schlagen, wo wir vielleicht schreiben die Buchstabe B mit Bezug auf dieses Gitter? Wo würden Sie gehen? Rechts von der a, unterhalb der Z, unter der ein? Was wäre Ihre erste Instinkte sein? ZIELGRUPPE: Unterhalb der z. David J. MALAN: Also unter dem z. Und das ist ziemlich einfach, oder? Es ist eine Art ordentlich, es ist, was wir tun auf einer Tastatur, wenn wir die Eingabetaste drücken, oder eine E-Mail, wenn Sie ein Aufzählung der Dinge. Aber die Realität ist, dass Computer versuchen, effizienter zu sein, und stopfen sicherlich so viel Daten in den RAM möglichst so dass Sie keine Bytes verschwenden Sie nicht. So dass Sie verschwenden keine einem Bildschirm Immobilien. Und das Problem ist aber, dass wenn wir buchstäblich legte den Brief b nach a, wie werden wir zu wissen, wo Zamyla Name endet Und der Name Belinda beginnt? So können Sie den Menschen nur vorgeschlagen, gut, drücken Sie die Eingabetaste, im Wesentlichen. Legen Sie es unten. Oder sogar als Alex tat, nur mit dem Schreiben beginnen der nächste Name unter dem vorherigen, und darunter eine, und dann unten, dass man. Das ist ein visueller Hinweis. Computer haben eine andere visuelle Hinweis, aber es ist ein wenig mehr prägnant. Es ist diese flippige Charakter. Backslash 0, das ist vielleicht erinnert an Backslash n, und so weiter, jetzt. Die speziellen Escape-Sequenzen. Backslash 0 ist der Weg der aus acht Null-Bits in einer Reihe. 0000 0000. Die Art und Weise zum Ausdruck bringen, dass ist nicht zu traf die Zahl Null auf der Tastatur, denn in der Tat, dass ein ASCII-Zeichen ist. Es sieht aus wie eine Zahl, aber tatsächlich eine Dezimalzahl dass die kreisförmige stellt Glyphe, die kreisförmige Schriftbild. Inzwischen Backslash Null bedeutet, wörtlich legte acht Null-Bytes hier für mich. Also das ist etwas willkürlich. Wir konnten keine Muster verwendet haben von Bits, aber die Welt entschieden sich einige Jahre vor, dass zu vertreten das Ende einer Zeichenkette in dem Speicher, hat gerade eine ganze Reihe von Nullen. Weil wir, dass zu erkennen. Jetzt, dass bedeutet, dass kein Brief von der Alphabet mit Nullen dargestellt werden. Aber das ist OK, die wir bereits gesehen haben, dass wir mit 65 bis 97 auf etwas. Wir haben nicht überall zu bekommen Nah an allen Nullen. So Belinda im Speicher eines Computers ist eigentlich los, hier zu gehen. Ich habe es in gelb gezeichnet nur unsere Aufmerksamkeit auf sich zu ziehen. Und beachtet auch diese ist völlig beliebig. Ich habe es als Raster gezogen. Wie, ist RAM nur einige physikalische Objekt. Es muss nicht unbedingt Zeilen und Spalten an sich. Es ist nur eine ganze Reihe von Bytes bekam in Hardware implementiert irgendwie. Aber wenn ich nach Belinda in Gabes Namen eingegeben haben, er wird hier am Ende in Erinnerung, und wenn ich in Daven Namen eingegeben haben, zum Beispiel, wird er hier zu Ende. Und ich kann auch weiterhin schreiben noch mehr Namen. Leider, wenn ich versuche, einen super langen Namen, Ich könnte schließlich ein Speicherproblem. In diesem Fall ist getstring werde NULL zurück, wie gesagt. Aber zum Glück, zumindest in dieser visuellen hier haben wir nicht ganz so weit. Nun, was ist schön, ist, dass diese allgemeine Idee der Behandlung Dinge als in Boxen Vertreter einer Funktion von C und eine Menge von Sprachen, als Array bezeichnet. Ein Array ist eine andere Art von Daten. Es ist eine Datenstruktur, wenn man so will. Struktur im Sinne der es wirklich, Art, wie ein Feld, zumindest in Ihrem geistigen Auge. Ein Array ist eine zusammenhängende Sequenz identischer Datentypen, Rücken an Rücken, um zurück zurück. So ein String ist, in anderen Worten ist ein Array von Zeichen. Ein Array von Zeichen. Aber es stellt sich heraus, die Sie haben können Arrays aus Trauben der Dinge. In der Tat können wir sogar setzen Zahlen in einem Array. So dass die Form, in der wir werden beginnen erklärt diese Daten Struktur als eine Anordnung bekannt, wird sich auch eckige Klammern verwenden. Aber diese eckigen Klammern sind los haben unterschiedliche Bedeutung in diesem Zusammenhang. Und lassen Sie uns sehen, es wie folgt. Nehmen wir an, ich öffnete bis eine neue Datei hier. Und ich spare dies als ages.c. Und ich werde dies in meinem Ordner hier zu speichern. Und jetzt gehe ich voran gehen und fangen Sie etwas wie sind CS50.h, gehören stdio.h, int main nichtig. Und dann innerhalb von hier, ich will zuerst einen int namens Alter. Und ich werde das nutzen, um eine zu bekommen int vom Benutzer für sein Alter. Aber dieses Programm soll genutzt werden, mehrere Personen, aus welchem ​​Kontext. Ich habe eine Reihe von Menschen bekam. Alle von ihnen haben zu tippen in ihre Alter für einige vielleicht, ich weiß es nicht, Wettbewerb oder Ereignis dass sie für angekommen. Also das nächste Person, ich brauchen eine andere Variable. Denn wenn ich nur tun, Alter bekommt getInt, das ist gehen zu verprügeln, oder überschreiben Alter des früheren Person. Also das ist nicht gut. Also mein erster Instinkt könnte sein, oh, alles in Ordnung, wenn ich mehrere Volks bekommen ages-- nennen wir dieses age1, int age2 bekommt int, int Age3 bekommt getInt. Und jetzt werde ich nutzen einige Pseudocode. Tun Sie etwas mit diesen Zahlen. Wir werden für einen anderen Tag zu verlassen, was Wir sind da zu tun, weil wir nur Pflege für den Moment über age1, age2, Age3. Leider, wenn ich kompilieren dieses Programm und legte es vor der tatsächlichen Benutzer, was ist der grundlegend schlechtes Design Entscheidung, die ich gemacht zu haben scheinen? Ja? ZIELGRUPPE: [unverständlich] David J. MALAN: Ja, Ich habe nicht einmal versucht, um herauszufinden, wie viele Zeitalter ich eigentlich kümmern? Wenn ich weniger als drei Leute hier, und damit weniger als drei Altersstufen, Ich bin immer noch blind erwarten drei. Gott bewahre vier Personen zeigen. Mein Programm will einfach nicht noch unterstützt. Und so, lange Rede Kurz gesagt, ist keine gute Angewohnheit. Oder? Ich wurde im Wesentlichen zu kopieren und Code einfügen und nur die Feinabstimmung die Variablennamen. Und, mein Gott, wenn Sie hatte, nicht drei Altersgruppen, aber 10 oder 100 oder sogar 6.500 Studenten, zum Beispiel. Das wird nicht besonders sein elegant-Code oder nachhaltig. Du wirst zu haben, Schreiben Sie die Programm jedes Mal Ihre Zahl der Menschen ändert. Also Gott sei Dank, in unserer aktuellen ages.c Datei für heute, wir haben eine clevere Lösung. Zuerst werde ich das leihen konstruieren wir haben ein paar Mal benutzt, Dazu while-Schleife, um zu bekommen, die Zahl der Personen im Raum. Ich werde einfach um den Benutzer zu belästigen, wieder und immer wieder, bis er oder sie gibt mir ein Wert von n, der eine positive ganze Zahl ist. Ich könnte verwendet haben, letzte Zeit zu bekommen positive Int. Aber wir haben das nicht für real, so ging ich weiter und wieder diese Idee umgesetzt. Jetzt hier unten, das ist der neue Trick. In Zeile 27, wie die Kommentare in Zeile 26 sagt, erklären eine Reihe, in der zu aller Alters speichern. Also, wenn Sie bekommen, nicht eine int, nicht wollen, zwei ints, sondern eine ganze Reihe von ints. Insbesondere n ganzen Zahlen, N könnte drei, vielleicht 100, vielleicht 1000 sein. Die Syntax, ganz einfach, ist es, sagen wir, welche Datentyp wollen Sie? Was wollen Sie anrufen möchten dass Teil des Speichers? Was tun Sie, um das Raster nennen wollen Das sieht dann so bildhaft? Und in Klammern hier, sagen Sie, wie groß das Array sein. Und so früher, als ich sagte, das Syntax ist ein wenig anders hier, wir sind immer noch mit eckigen Klammern, aber wenn ich ein Array deklarieren, Die Zahl in der eckigen Klammern bedeutet wie groß wollen Sie das Array zu sein. Im Gegensatz dazu, als wir mit s Klammer ich vor einem Augenblick, s, ein String ist, ist in der Tat eine Reihe von Zeichen, aber wenn Sie nicht eine Variable deklarieren, wie mit diesem Begriff hier, du bist einfach immer einen bestimmten Index, eine bestimmte Element aus diesem Array. Sobald wir wissen, dass der Rest Dies ist unkompliziert. Wenn ich neue zuerst zu drucken was ist das Alter der Person Nummer i. Wo ich einfach sagen, Person Nummer eins, Person Nummer zwei, Person Nummer drei. Und ich bin gerade dabei Arithmetik, so dass wie normale Menschen, zählen wir von einer für diese Programm, und nicht Null ist. Dann rufe ich getint, aber ich speichern die Antwort im Alter Halterung I. Welches ist das i-te Zeit, in der Anordnung. Während also beim letzten Mal waren wir die Behandlung diese Boxen als Zeichen für Zamyla Namen, und andere. Nun stellen diese Boxen 32 Bits oder vier Bytes in denen wir speichern können int, int, int. All das, wiederum, sind die gleichen Datentyp. Jetzt mache ich etwas albern, wie die Zeit vergeht, nur zu rechtfertigen Schreiben dieses Programms. Und dann hier unten, ich wieder durchlaufen über die Anordnung zu sagen in einem Jahr, Person Nummer eins Willen sein etwas Jahre alt. Und um herauszufinden, dass math-- Ich meine, das ist nicht sehr kompliziert arithmetic-- Ich nur hinzufügen, um eine ihrem Alter. Nur um zu zeigen, wieder, dieses. So wie ich kann Index in einem String, s, so kann ich Index in ein Array von Alter, so da. Also, wo soll das noch werden uns? Also werden wir sehen, letztlich eine paar Dinge in den kommenden Tagen. Eine, die ganze Zeit, wenn Schreiben Sie Ihre eigenen Programme, wie Mario, gierig, Kredit. Sie habe den Namen eingeben Das Programm und Enter drücken. Und dann immer die Eingabe des Benutzers. Mit getString, getInt, getLongLong oder dergleichen. Aber es stellt sich heraus, dass die C unterstützt so genannte Kommandozeile Argumente, die gehen, um uns lassen tatsächlich an Wörter, die Sie eingeben, bekommen, an der blinkenden Eingabeaufforderung Nach dem Programm-Namen. Also in den nächsten Tagen, kommen Sie könnte so etwas wie Cäsar geben, oder ./caesar Nummer 13, danach. Wir werden sehen, wie das funktioniert. Da ja in Problem zwei gesetzt, wir sind euch vorstellen um ein wenig etwas erinnert an Ralphie Herausforderung früher der Kartographie. Die Kunst der Verschlüsselung Informationen. Dies ist in der Tat sehr erinnert an das, was Ralphie taten. Dies ist ein Beispiel einer Verschlüsselung Algorithmus namens ROT13, R-O-T 13. Was einfach bedeutet, drehen Sie den Buchstaben im Alphabet 13 Plätze. Und wenn Sie das tun, werden Sie nun sehen, was ist vielleicht ein vertrauter Begriff. Aber die Art und Weise werden wir nutzen Dies ist letztlich im Allgemeinen. In S. zwei, in der Standard-Ausgabe, Sie werden ein paar Chiffren zu implementieren, eine namens Caesar, nannte man Vigenere. Beide sind Dreh Chiffren, dass Sie irgendwie drehen Sie einen Brief in einem anderen Brief. Und Caesar ist super einfach. Sie fügen eine, die Sie hinzufügen, 13, oder eine Zahl bis zu 26. Vigenere tut das auf eine pro Buchstabe Basis. So Vigenere, wie Sie sehen werden in der Spezifikation, ist sicherer. Aber am Ende des Tages, was Sie werden die Umsetzung und S. zwei, ist, dass die wichtigsten, die Sie beide verwenden für die Verschlüsselung und Entschlüsselung. Bezug nehmend auf den Prozess der Umwandlung Klartext, einige Original-Nachricht, Cypher in Text, der ist etwas verschlüsselt. Und dann wieder entschlüsseln. In der Hacker-Ausgabe, inzwischen werden Sie sein mit etwas ähnliches beauftragt im Geist, wo wir geben Ihnen eine Datei, aus einer typischen Linux oder Mac oder Unix-Computer genannt etsy Passwort, welches eine ganze enthält Haufen von Benutzernamen und Passwörtern. Und diese Passwörter alle verschlüsselt oder gehasht, so zu sprechen, mehr richtig wie Sie in der Spezifikation zu sehen. Und der Hacker-Edition ist eine Herausforderung Sie mit der Einnahme eines Eingangs wie diese, und Rissbildung das Passwort ein. Das heißt, herauszufinden, was die Passwort Menschen tatsächlich war. Weil, ja, sind Passwörter in der Regel nicht in der klaren gespeichert, und in der Regel Passwörter sollte schwer zu erraten sein. Das ist nicht oft der Fall. Und was ich dachte, wir würden zu tun ist, Schluss mit ein paar Minuten Blick auf ein besonders schlechte Wahl der Passwörter aus einem Film, den Sie vielleicht liebevoll erinnern. Und wenn nicht, sollte man mieten. [VIDEO PLAYBACK] -Helm, Sie Unhold, was ist los? Was tun Sie, um meine Tochter? -Permit Mir das vorstellen brillanten jungen plastischen Chirurgen, Arzt Phillip Schlotkin. Die größte Nase Job Mann in der gesamte Universum und Beverly Hills. -Ihr Hoheit. -Nase Job? Ich verstehe nicht. Sie ist schon eine Nase Job hatte. Es war ihre süße 16 vorhanden. Nein, es ist nicht das, was Sie denken. Es ist viel, viel schlimmer. Wenn Sie mir nicht die Kombination mit der Luft Schild, Arzt Schlotkin geben Sie Ihrem Tochter zurück ihre alte Nase. - [Keucht] Nooooooooooooo. Wo hast du das her? -all Rechts. Ich werde sagen, ich werde erzählen. Nein, Papa, nein. Sie darf nicht. -Sie Recht meine Liebe. Ich werde Ihre neue Nase verpassen. Aber ich werde ihnen nicht sagen, die Kombination, egal was. -Sehr gut. Arzt Schlotkin, tun Sie Ihre schlimmsten. -My Vergnügen. -NO! Warten, warten. Ich werde erzählen. Ich werde erzählen. -I Wusste, dass es funktionieren würde. Alle Rechte, gib es mir. -Der Kombination ist eins. -on. -on. -Zwei. -Zwei. -Zwei. -Drei. -Drei. -Drei. -Vier. -Vier. -Vier. -Fünf. -Fünf. -Fünf. SO Kombination ist eine, zwei, drei, vier, fünf. Das ist die dümmste Kombination Die ich je in meinem Leben gehört. Das ist die Art von Sache, ein Idiot würde auf seinem Gepäck haben. -Danke, Hoheit. [REMOTE KLICKS] -Was Haben Sie getan? -I Schaltete die Wand. Nein, das hast du nicht, du schaltete den ganzen Film. -I Must've den falschen Knopf gedrückt. Nun, legte sie zurück auf! Legen Sie den Film auf! -yes, Sir! Ja, Sir. -Lassen Gehen, Arnold. Komm, Gretchen. Natürlich wissen Sie, ich werde müssen Sie für dieses Gesetz. -Well? Hat es funktioniert? Wo ist der König? -Es Gearbeitet, mein Herr, wir die Kombination. -Great. Jetzt können wir jeden letzten Atemzug Frischluft von Planet Druidia. Was ist die Kombination? -on, Zwei, drei, vier, fünf. -on, Zwei, drei, vier, fünf? -yes. -Das Ist erstaunlich. Ich habe das gleiche bekommen Kombination auf mein Gepäck. Bereiten Sie für Spaceball 1 sofortige Ausreise. -yes, Sir. -AND Ändern Sie die Kombination auf mein Gepäck. [Türschließ SOUND] [Klirren von DOORS SCHLAGEN HELM] -Ahh. [END VIDEO PLAYBACK] David J. MALAN: Das ist es für CS50, wir sehen uns nächste Woche. SPRECHER: Und jetzt, Tief Gedanken, von Daven Farnham. DAVEN FARNHAM: Codierung in C so viel härter als Scratch. printf, Scratch war eine Lüge. [Gelächter SOUNDBITE]