>> Sprecher 1: In Ordnung.
Willkommen zurück.
Dies ist Woche Zwei CS50, und wir haben bisher wurde die Verwendung von Funktionen, sondern
weitgehend genommen sie für selbstverständlich.
Wir haben die printf hat das verwendete Nebeneffekt Druck
Dinge auf dem Bildschirm.
Wir haben zu gewöhnen-int, erhalten schweben.
>> Aber was, wenn Sie wirklich wollen, schaffen Ihre eigenen Funktionen, wie einige
Sie vielleicht schon begonnen zu haben tun für Problem Set One, obwohl
nicht unbedingt erforderlich?
Nun, lassen Sie uns fortfahren und erneut, dass Problem nur die Benutzer zu fragen
ihren Namen und den Druck etwas auf der Bildschirm, sondern versuchen, ausklammern einige
der Gemeinsamkeit, dass wir gesehen in unseren Code so weit.
Also damit meine ich die folgenden.
>> Ich werde weitermachen und erstellen ein neues Programm, rufen Sie einfach
es Hello.c wie gewohnt.
Ich werde weitermachen und mich gehören Standard io.h an der Spitze.
Ich werde auch mir selbst präventiv der CS50-Bibliothek, so dass
Ich glaube nicht an die vom Compiler bekommen schrie.
Und jetzt gehe ich voran gehen und erklären, int, main, nichtig.
>> Und dann in hier, das ist, wo ich will zu beginnen, um die Funktionalität auslagern
eine andere Funktion, die ich selbst bin gehen, um zu schreiben, aber das bedeutet nicht
Derzeit existieren.
Zum Beispiel: Angenommen, ich wollte eine Funktion schreiben, die mir erlaubt
ausdrucken hallo, Komma, und dann einige Namen des Benutzers.
Statt weiterhin printf tun hallo,% s, wäre es nicht schön, wenn
gab es nur eine Funktion aufgerufen printf nicht aber drucken Name?
>> Also mit anderen Worten, ich möchte in der Lage sein ein Programm schreiben, das ein wenig tut
etwas wie dieses.
Zuerst werde ich sagen, dass Ihre printf Name, wodurch der Benutzer aufgefordert wird
gib mir seinen Namen, und dann bin ich gehen, um die vertrauten string s verwenden, um
erklären einen String.
Gib mir eine Variable vom Typ string, nennen es s und speichern, dass die
Ergebnis des Aufrufs bekommen Zeichenfolge.
Aber jetzt in Wochen vorbei, würde ich etwas mühsam getan hallo,% s / n.
>> Und in anderen Worten, wir haben gesehen Beispiel ein paar Mal, und es ist ein
triviales Beispiel, denn es gibt nur eine Codezeile so ist es wirklich nicht ein
große Sache zu halten Eingabe wieder.
Aber nehmen wir an, dass diese Codezeile tatsächlich wurden zu einer Belastung und
es ist nicht eine Zeile Code, aber es ist 10 Codezeilen ein paar Wochen von jetzt an,
und du bist nur müde Kopieren und Einfügen von oder
Abtippen denselben Code.
Wäre es nicht schön, anstatt das zu tun printf hallo,% s und so weiter,
wäre es nicht schön, wenn es nur eine Funktion aufgerufen drucken Name,
ein Argument -
Mit anderen Worten, es dauert Eingang -
und dann Semikolon.
So, dass Funktion, wäre es nicht wäre schön, wenn die bestanden?
Dann würde ich nicht zu befürchten printf was ist, was% s und alle
diese Komplexität, die sind gar nicht so interessant.
Sie sind nützlich.
>> So drucken Name war leider nicht erfunden einige 40 plus Jahren.
Niemand dachte daran, es zu schreiben.
Aber das ist die Schönheit der mit einem Programmiersprache, wie in
Scratch können Sie benutzerdefinierte Blöcke, so in C und fast jeder Sprache, können Sie
definieren Sie Ihre eigene Funktionalität, kann Sie auch eigene Funktionen definieren.
Also auch wenn wir Hauptsache durch automatisch kostenlos, können wir erklären,
unsere eigenen Funktionen.
>> Also werde ich etwas Platz hier oben machen bis oben, und ich werde erklären, meine
eigene Funktion, die gehen, um einen Blick ist wenig seltsam auf den ersten, aber wir kommen
zurück zu dieser vor lang.
Ich werde sagen, nichtig, wodurch anzeigt, diese Funktion macht
etwas, hat einen Nebeneffekt, aber es nicht wieder etwas zu mir in die
gleichen Weise, int bekommen oder bekommen String selbst tut.
Und ich werde Ihnen diese Funktion eine Name des Druck-Namen, und ich bin zu gehen
anzugeben, dass dieser Kerl wird dauern ein String, und ich werde das nennen
string name.
Ich könnte es, was ich will, aber ich möchte meinen Code zu sein selbst dokumentieren.
In anderen Worten, wenn einer von euch zu diese Datei öffnen und lesen Sie sie, könnten Sie
Art folgern aus dem Namen, dass Eingang, welche Rolle es soll zu spielen.
>> Und jetzt darunter, ich werde zu öffnen geschweiften Klammer und geschlossenen geschweiften Klammer,
und so feststellen, ich habe das gleiche gefolgt Muster auf vier bis sieben Zeilen wie
Ich habe für eine gute Woche plus verfolgt nun zwischen, sagen wir, neun Linien und
14, die wichtigsten zu komponieren.
In anderen Worten, ausdrucken Namen eine weitere Funktion.
Nun wird der Compiler nicht zu wissen, diese Sache automatisch aufrufen
weil ich buchstäblich nur erfunden, aber es wird noch wissen, zu nennen wichtigsten
automatisch, und dann natürlich in Linie 13, rufe ich meine eigene Funktion.
Und weil ich habe erklärt, dass Funktion up on line vier vor den Hauptmahlzeiten,
dies wird den Compiler lehren was Zitat unquote, "print name"
bedeutet und was es tun sollte.
Also ich bin Art von ihm eine neue benutzerdefinierte blockieren im Rahmen von, sagen wir, Scratch.
>> Also hier kann ich setzen, dass sehr häufig oder wiederkehrende Muster der Code, den ich halten
Schreiben in der Klasse, printf % S hallo,% s / n ", -
was will ich hier setzen?
S?
Deshalb möchte ich in diesem Zusammenhang Namen setzen.
So bemerkt ein bisschen eine Dichotomie hier.
Weil ich erklärte meine eigene Funktion und ich habe etwas willkürlich genannt
es ausdrucken Namen, und weil ich in Klammern angegeben, dass diese
Funktion nimmt ein Argument, die Art der das ist ein string - so ist es ein Wort
oder eine Phrase oder so ähnlich - und Ich rufe dieses Argument Namen, dass
bedeutet die einzige Variable, die in ist Umfang, so zu sprechen, ist der Name.
>> S existiert nur zwischen dem, was zwei geschweiften Klammern, natürlich?
Nun wirklich, wie Linie 10 durch 14, so genau wie am Montag nicht verwenden können
S, aber was ich tun kann, ist vorbei S in den Druck ein.
Drucken Namen einfach so passiert, es aufzugeben ein Alias, ein Synonym, ein Spitzname,
Namen nannte es, und jetzt Verwendung in dieser Linie.
So, jetzt lassen Sie mich diese speichern, vergrößern oder verkleinern.
>> Lassen Sie mich gehen Sie vor und machen hallo.
Sieht gut aus.
Haben Sie nicht ausspucken eventuelle Fehler. . / Hallo eingeben.
Was ist mein Name?
David.
Und hallo David.
Also gar nicht so aufregend, aber gerade jetzt denken.
Sie haben nun die gleiche Zutat wie wir in Scratch zu
machen unsere eigenen Funktionen.
>> Aber es ist ein bisschen wie ein gotcha.
Angenommen, ich hätte nicht wirklich gedacht, diese durch und ich eigentlich ohne
wirklich darüber nachzudenken schrieb Diese Funktion hier unten.
Fühlt sich absolut vernünftig.
In Scratch gibt es keine Vorstellung der Ort in Ihrer Skripte.
Sie hätte den hier oben, hier oben, hier oben, und es könnte zu starten
um ein wenig chaotisch aussehen, wenn Sie dies nicht tun legte es ordentlich, aber es funktioniert nicht
egal, wo physisch die Skripte waren auf dem Bildschirm.
Leider gibt es in C - und das ist im Gegensatz zu Sprachen wie Java und Python
und andere, die Sie kennen könnten mit - leider in C, tut Bestellung
egal, denn was ist Uhr wird jetzt passieren.
>> Die Standardfunktion das wird auszuführen ist, natürlich, main.
Main Drucklegung Namen nennen Linie acht, aber leider die
Compiler wird nicht einmal wissen, dass Name in Druckschrift existiert, bis sie in die Linie 11 erhält,
das ist leider werde zu spät sein.
So lasst uns machen hallo.
Und jetzt verdammt, zwei Fehler generiert.
So, jetzt lassen Sie mich nach oben auf die sehr zunächst, wie sollten wir immer zu tun, und
feststellen, dass es bei mir schreien, "Implizite Deklaration der Funktion
ausdrucken Namen. "
>> Also haben wir diese Nachricht gesehen, Implizite Deklaration der Funktion.
Wann haben wir diese Art von Fehler gesehen?
Als ich nicht zählen eine Bibliothek.
Wenn ich cs50.h vergessen und ich würde schrie für den String oder int bekommen.
Aber in diesem Fall diese Funktion Drucken Name ist nicht in einer Bibliothek, nicht wahr?
Es ist buchstäblich in dieser Datei, so was wirklich das Problem?
>> Nun leider in C, gelangen Sie so unglaublich buchstäblich, wenn Sie
möchten eine Funktion namens Print Namen vorhanden sind, müssen Sie entweder implementieren
diese Funktion an der Spitze des Code, so dass es zugänglich zu senken ist
Funktionen, aber ehrlich gesagt, wird das schlampig sehr schnell.
Ich persönlich mag Putting wichtigsten ersten weil dann ist es ganz klar, was diese
Programm macht auf den ersten Blick.
Und plus, können Sie in seltsamen Ecke bekommen Fälle, in denen, wenn x nennen will
y, aber y nennen könnte x, die Sie gerade physisch nicht tatsächlich legte eine
übereinander.
>> Aber es stellt sich heraus, in C, können wir lösen diese sehr einfach.
Ich werde ein wenig Raum setzen hier, und ich werde einfach
präventiv, wenn auch etwas redundant, geht auf die lehren
Compiler, dass es eine Funktion genannt Name in Druckschrift, dauert es eine Zeichenfolge,
und ich werde rufen es nennen Semikolon.
>> Also das ist jetzt in der vierten Zeile, die wir habe nicht gesehen, ist eine Erklärung
einer Funktion Name in Druckschrift, aber es ist nur ein Versprechen, dass diese Funktion
schließlich festgelegt, ggf. werden umgesetzt werden.
Das kann ich jetzt in Ruhe zu lassen, weil Jetzt ist die Definition, die
Durchführung, Art der letzten Meile der Umsetzung dieser
bestimmte Funktion.
Also ehrlich gesagt ist es dumm ist, ist es ärgerlich, aber dies ist der Weg C ist, und es ist
denn es dauert sehr wörtlich und, wie ein Computer offen sollte,
nur, dass genau das, was Sie sagen, es zu zu tun, und so, dass die Bestellung wichtig ist.
>> Also man im Hinterkopf behalten und wieder beginnen, bemerken die Wiederholung von Mustern.
Chancen sind Sie, wenn Sie nicht über bereits, starten, um Nachrichten zu begegnen
wie diese, die auf den ersten Blick völlig kryptisch, aber wenn Sie beginnen
für diese Schlüsselwörter aussehen "Implizite Deklaration", der eine Erwähnung
Funktion in diesem Fall - und ehrlich gesagt, Sie manchmal sogar noch ein wenig grün
Karotte Symbol, das Ihnen sagt, wo das Problem ist wahrscheinlich -
können Sie beginnen, Ihren Weg durch Arbeit noch ungesehen Fehlermeldungen.
Irgendwelche Fragen zu dem Schreiben eigene Funktion in dieser Art und Weise?
>> Lasst uns etwas tun, das ist eine wenig mehr überzeugend.
Anstatt nur etwas tun, das hat ein Nebeneffekt der Druck, lass mich gehen
vor und speichern Sie eine neue Datei, und wir werden nennen diese positive.c, obwohl es
gehen, um ein wenig unterschiedlich sein im Vergleich zum letzten Mal.
Und dieses Mal möchte ich wieder zu implementieren Das letzte Mal positive.C beispielsweise die
wird den Benutzer zu zwingen geben mich eine positive ganze Zahl.
Aber ich hatte zu benutzen bekommen int letzten Zeit.
Wäre es nicht schön gewesen, wenn es eine Funktion aufgerufen bekommen positive int
dass ich nur diese auslagern Stück Funktionalität?
Also der Unterschied ist hier, wir werden Umsetzung bekommen positive int, aber im Gegensatz zu
Name in Druckschrift, die einen Nebeneffekt hatte - es kam nicht wieder etwas zu mir wie
eine Zahl oder ein String -
bekommen positive int ist, natürlich, geht auf zurückkehren, hoffentlich eine positive int.
>> Also lasst uns dies tun.
Fügen cs50.h, auch Standard io.h
Int main nichtig.
Und jetzt hier, ich werde weitermachen und lassen Sie uns sagen, int, nennen es n, gleich
bekommen positive int.
Und wie bekommen int existiert bereits weil die Mitarbeiter schrieb er, ich werde
für den Augenblick, die davon ausgehen, erhalten positive int existiert, und jetzt werde ich
voran gehen und sagen, printf, danke für die% i / n ", n.
>> So jetzt, wenn ich dieses Programm zu kompilieren, was passieren wird in meinem Terminal
Fenster am unteren Rand des Bildschirms?
Ich werde wahrscheinlich, dass gleichen Fehler wie zuvor.
Lassen Sie uns also versuchen, diese.
Als positiv.
Und wieder implizite Deklaration Funktion, bekommen positive int.
So können wir diese in Lösung ein paar Möglichkeiten.
Ich werde es einfach zu halten und nur meine Erklärung hier und erhalten
positive int.
Ich brauche die sogenannte Signatur.
Die Signatur bezieht sich nur auf die Ästhetik der
erste Zeile des Programms.
Also, was sollte sich positiv int zurück?
>> So ein int.
Ich meine, im Idealfall würde es zurückgeben so etwas wie positive int, aber das
existiert nicht.
Wir haben nicht gesehen, dass unter unseren Daten Typen, also müssen wir mit dem Deal
Tatsache, dass wir nur sehr wenige haben Datentypen zu arbeiten.
Aber wir können einen int zurück und nur darauf vertrauen, dass es positiv sein wird.
Es wird aufgerufen werden bekommen positive int.
>> Und jetzt, wie etwa ihre Argumente?
Braucht es jede Eingabe?
So muss es nicht wissen, im Voraus nichts.
Holen String nicht, bekommen int nicht.
Printf tut - es muss einige haben Eingabe übergeben hinein - und Name in Druckschrift
benötigt eine Eingabe, sondern bekommen positive int nicht.
Also ich bin explizit gehen sagen dem Compiler nichtig.
Void ist die Abwesenheit von irgendetwas anderes.
So nichtig Mittel nichts drinnen vor sich geht dieser Klammern, Semikolon.
>> Und nun an der Unterseite meiner Datei - und wieder, ich bin nur Art von anal
hier setzen Haupt an der Spitze, die ist eine gute Übung, weil auf diese Weise,
wenn Sie oder jemand anderes öffnet die Datei, die
Funktionalität ist recht.
Sie können in von Platz eins zu tauchen.
So, jetzt werde ich diese zu duplizieren, bekommen positive int Leere, aber ich bin nicht
werde ein Semikolon jetzt getroffen.
Ich werde geschweiften Klammern öffnen, und jetzt muss ich ausleihen
einige Ideen von Montag.
>> So wie Sie sich erinnern, haben wir etwas mögen die folgenden, während
etwas nicht stimmt.
Und was habe ich getan?
Ich habe so etwas wie geben mich eine positive ganze Zahl,
wenig von einer Eingabeaufforderung.
Ich könnte keine Worte, die ich will.
Und dann habe ich was?
Int n gleich bekommen int, keine Argumente zu.
>> Und den Unterschied bemerken.
Wenn Sie eine Funktion aufrufen, wenn Sie eine Funktion, die Sie nicht in Leere setzen.
Sie müssen nur das tun, wenn die Vereinbarkeit eines Funktion, die Vermittlung der Compiler, was
sie erwarten sollten.
So brauchen Sie nicht zu setzen erlischt es sich.
>> Und nun, was war mein Zustand?
Nun, das ist n nicht gleich positiv, aber das ist nur Pseudo-Code.
Also, wie drücke ich dies mehr sauber?
So kleiner oder gleich Null ist.
Also noch einmal, bemerken Sie tun können weniger als oder gleich.
Auch wenn es zwei getrennte Symbole, können Sie es auf zu tun
Ihre Tastatur als solche.
>> Aber es gibt noch ein Fehler, dass Ich habe es vermasselt letztes Mal zu.
Ich habe zu erklären -
genau.
Ich muss n außerhalb erklären der Schleife.
Also muss ich setzen n bis hier, und ich weiß nicht wollen wieder erklären sie hier
damit ich eine neue Variable.
Ich will einfach nur, um einen Wert in hier zuordnen.
>> Und jetzt bin ich noch nicht ganz fertig.
Lassen Sie mich vor mir selbst bekommen und behaupten, ich bin fertig.
Machen Sie positiv, und jetzt es gibt einen neuen Fehler.
Steuerung erreicht Ende Nicht-void-Funktion.
Also neue Fehlermeldung, aber wenn man Art von necken neben jedes der Worte, es
wahrscheinlich deutet an, was falsch ist.
>> Steuern.
Kontrolle bedeutet nur, auf die Reihenfolge von Operationen in einem Programm.
Der Computer ist in der Steuerung und etwas schief gelaufen ist.
So ist das Ende des ein Nicht-void-Funktion.
Welche Funktion ist es offenbar gemeint?
Welche Funktion ist nicht nichtig?
So bekommen positive int, und ein wenig verwirrend in diesem gut,
es ist eine Art von Leere.
Es hat eine Spezifikation für nichtig sein Argumente, aber ihr Ausgang ist mit gehen
sein vom Typ n.
Also das Wort auf der linken Seite ist die sogenannte Rückgabetyp.
Das Wort auf der Innenseite ist hier die null oder mehr Argumente
dass eine Funktion übernimmt.
>> Also, was muss ich tun?
An diesem Punkt in meinem Code, Zeile 21, wo die blinkende Eingabeaufforderung ist jetzt, ich
haben eine positive int innen der Variable n.
Wie gebe ich es zurück zur Hauptansicht?
Buchstäblich.
Zurück n Semikolon.
>> So wie Colton ein Stück zurück Papier mit einer Antwort auf mich fallen
das Stück Papier in das kleine schwarze Box auf dem Tisch, der in zu tun
Code, Sie buchstäblich nur schreiben, zurück n, und es ist, als ob Colton waren
reichte mir etwas Körperliches zurück.
In diesem Fall, was passiert ist, erhalten positive int wird übergeben zurück
was vermutlich eine positive integer zu wem?
Woher kommt dieser Wert am Ende?
Das endet in dieser Variable n, und dann haben wir mit der Linie neun gehen.
>> Mit anderen Worten, in der Reihenfolge Operationen, startet dieses Programm
Ausführung und der Compiler erkennt, oh, wollen Sie die Bibliothek?
Lassen Sie mich gehen greifen, was drin ist, dass.
Oh, Sie wollen den Standard IO-Bibliothek?
Lassen Sie mich gehen greifen, was drin ist, dass.
Was bedeutet, dass der Compiler selbst sagen wenn er trifft Linie vier?
Oh, Sie haben versprochen, die Umsetzung Funktion aufgerufen bekommen positive, aber
bekommen wir zurück zu, dass später etwas in diese Richtung.
>> Int main Leere bedeutet nur, hier ist den Mut meines Programms.
Linie sieben ist nur ein geschweiften Klammer.
Zeile acht wird auf der linken Seite sagen, gib me 32 Bit für eine ganze Zahl, nennen es n.
Auf der rechten Seite ist es sagen bekommen positive int.
Lassen Sie uns jetzt Pause, die Geschichte, weil jetzt Ich weiß nicht in Bewegung bleiben mein Cursor nach unten.
Mein Cursor geht jetzt hier unten, weil jetzt bekommen positive int führt.
Int n deklariert ist.
Gehen Sie wie folgt.
Printf gibt mir eine positive ganze Zahl ist.
>> Holen Sie sich einen int vom Benutzer, speichern Sie es in n, und vielleicht tun dies immer und immer wieder.
Diese Schleife bedeutet, dass dieser Code könnte führen nach oben und unten wieder so
wieder, aber wenn der Benutzer schließlich kooperiert und gibt mir eine positive
int, schlug ich die Leitung 21, an welchem ​​Punkt der Zahl zurück, übergeben und die man
soll ich jetzt hervorheben?
Nine.
Kontrolle, so zu sprechen, gibt zu neun auszukleiden.
Das ist die Linie, die jetzt das Sagen hat.
>> Also das ist, was passiert ist alles diesmal unter der Haube, sondern
wenn wir Funktionen wie printf verwendet oder sogar String, dass jemand anderes
schrieb für Sie wurde Steuerelement übergeben aus, um jemand anderes Codezeile
durch zeilenweise.
Es ist nur, wir könnten es nicht sehen, und wir konnte nicht wirklich zeigen sie in dieser
Programm, weil es in einem anderen Datei auf der Festplatte
Unbemerkt von uns.
Lassen Sie uns also tatsächlich kompilieren und führen Sie diese jetzt.
>> Als positiv.
Kompilieren, das ist Fortschritt.
. / Positiv.
Gib mir eine positive ganze Zahl ist.
Lasst uns schwierig sein.
Negative 1.
Null.
Lass es uns 50.
Vielen Dank für die 50 und so Kontrolle hat jetzt zurückgegeben.
Haben Sie Fragen, dann auf das?
Ja?
>> [Unverständlich].
>> Sagen Sie es erneut.
Oh, gute Frage.
So könnten Sie hier eine Parallele feststellen, dass Ich bin ein bisschen Schneiden einer Ecke auf.
In Zeile 12 und sprach: Ich bin, bekommen positive int liefert einen int, aber von demselben
Logik, es liegt nun nahe, dass in Reihensechszylinder, ich sage, dass Haupt-Renditen
ein int, aber was haben wir noch nie hatte in einem unserer Programme?
Wir hatten noch nie die Rede von Dieses Schlüsselwort Rückkehr.
>> So stellt sich heraus, dass in C, mindestens die Version davon, dass wir mit
machte im Jahr 1999, technisch gesehen, ist dies geschieht automatisch für Sie.
Immer, wenn Sie ein Programm zu implementieren, und Sie implementieren eine Funktion namens main,
Diese Funktion wird Null zurück Verzug, wenn Sie nicht etwas anderes sagen,
und Null ist nur eine Konvention.
Die Welt ist Null dabei anzeigt, dass alles gut ist,
effektiv verlässt uns mit vier Milliarden möglichen Dinge, die gehen könnte
falsch, so dass, wenn wir eine Rückkehr, dass vielleicht einen Code bedeuten, dass bedeutet dies,
Sache ging schief.
Wir konnten zwei zurück, was bedeutet, diese andere Sache ging schief.
Wir konnten vier Milliarden zurück, die bedeutet dies andere Sache ging schief.
>> Und wenn Sie jetzt denken über Ihre eigenen PC oder Mac, können Sie sich erinnern, dass
manchmal bekommt man kryptische Fehlermeldungen von Software, die Sie
Verwendung, und manchmal ist ein menschliches freundliche Beschreibung, aber es gibt
oft ein Code oder eine Zahl auf dem Bildschirm?
Wenn dies nicht in den Sinn kommen, nur ein Auge dafür.
Das ist in der Regel, was diese Codes beziehen.
Sie sind in Microsoft Word enthalten und anderen Programmen, so dass, wenn Sie eine Datei
Bug-Report mit dem Unternehmen, können Sie ihnen sagen, oh, ich habe Fehler Nummer 45.
Und einige Programmierer bei der Firma zurück können, dass nachschlagen in seinem oder ihrem
Code und sagen, oh, das ist, weil ich gemacht dieser Fehler und das ist, warum der Benutzer
Diese Nachricht bekam.
>> Aber ehrlich gesagt, es ist nur ein wenig ablenken und ein wenig langweilig,
Schluss, dass mindestens auf der ersten paar Programme, also haben wir
wurde das Weglassen.
Aber die ganze Zeit jede Ihrer Funktionen main hat heimlich hatte diese
Zeile automatisch hinzugefügt für Sie durch die Compiler, nur durch Konvention
sparen Sie Zeit.
>> [Unverständlich].
>> Sie brauchen nicht, um es in den wichtigsten gehören.
Das ist in Ordnung.
Sie brauchen, um es zu schließen, wenn Sie waren Implementierung einer Funktion wie diese.
Andernfalls wird die Funktion flache Sie würde nicht funktionieren.
Aber in Haupt-, ist es nicht notwendig.
In ein oder zwei Wochen, werden wir anfangen, in diese Gewohnheit, sobald wir anfangen wollen,
bedeutet Fehler.
Wirklich gute Frage.
>> So schnell verbal Pause zu erwähnen, dass an diesem Freitag, werden wir nicht zu Mittag essen
per se, aber wir werden beim Abendessen mit einige der Studenten und Mitarbeiter.
Wenn Sie möchten, sich uns anzuschließen, fühlen du auf cs50.net/rsvp gehen.
18.00 an diesem Freitag.
Der Raum ist, wie immer, begrenzt, aber wir auch weiterhin tun, diese auf einer fast
wöchentlich, wenn der Raum läuft diese Woche.
>> So der Cliffhanger, dass wir aufgehört haben auf Montag war, dass Strings kann tatsächlich
indiziert in werden, was nur bedeutet, dass Sie kann mit dem ersten Zeichen zu bekommen, die
zweite Zeichen, das dritte Zeichen und so weiter, da kann man
effektiv von einem String zu denken, wie hallo, als in diesem Fall fünf
Buchstaben innerhalb der Boxen.
Und Sie können an jeder von denen bekommen Boxen mit dem, was wir taten Syntax
Einführung am Montag?
Diese eckigen Klammern auf Ihrer Tastatur.
Das meinte nur gehen, um Standort Null.
>> Wir beginnen bei Null zu zählen, so Klammer Null bedeutet h, eine Halterung
bedeutet e, und so weiter.
Und so die ganze Zeit, als wir waren mit Streichern und der Eingabe in "hallo"
und "Welt" und andere Dinge auf der Bildschirm, wird es gespeichert wurde
in Boxen wie diese.
Und nehmen Sie eine Vermutung.
Was macht jede Box stellen physisch Inneren des Computers?
>> [Unverständlich].
>> Es tut uns leid?
>> Charaktere.
>> So ein Charakter, sicherlich im Fall von Strings und ein Charakter ist gerade
acht Bit oder einem Byte.
So sind Sie wahrscheinlich mindestens vage mit der Tatsache vertraut, dass Ihr
Computer-Speicher.
Es verfügt über zwei Arten von Speicher mindestens.
Eine davon ist die Festplatte, wo Sie sparen stopfen dauerhaft, und das ist
typischerweise groß, so können Sie Filme Musik und so weiter.
>> Dann haben Sie eine andere Art von Speicher genannt RAM, R-A-M, Random Access
Speicher, und dies ist die Art von Speicher die verwendet wird, wenn sich der Computer
läuft, aber wenn Sie die Stromversorgung oder verlieren Batterie stirbt, alles, was gespeichert ist
in RAM verschwindet, wenn Sie die Macht zu verlieren insgesamt, weil es nicht
persistent.
Sie haben in der Regel, in diesen Tagen, ein gig davon, zwei Konzerte, vielleicht auch mehr.
Und der Kopf des RAM ist, dass es viel ist viel, viel schneller als Festplatten
oder auch Solid State Drives in diesen Tagen, aber es ist in der Regel teurer, so
Sie haben weniger davon.
>> So heutigen Gespräch wirklich bezieht to RAM, diese Art von Speicher,
existiert nur, solange es Macht wird in den Computer eingespeist.
Also, wenn Sie in H-E-L-L-O-Typ, auf Enter die Tastatur wird die Uhr in einem gehen
Byte RAM, wird die E in Going ein weiteres Byte RAM, wie
der Rest des Wortes.
So erinnern, was wir in der Lage waren zum letzten Mal zu tun war.
Lassen Sie mich gehen Sie vor und öffnen Sie die Datei dass wir aufgerufen string.c und erinnern
dass es sah ein wenig etwas wie dieses.
Lassen Sie mich tatsächlich wieder rollen und ändern es genau, wie es aussah,
String-Länge von s.
>> Also bei dem Programm finden Sie hier.
Wir sind der CS50-Bibliothek so die wir verwenden können erhalten Zeichenfolge.
Wir gehören Standard io.h so können wir printf verwenden.
Warum haben wir gehören string.h?
Dies war am Montag neu.
Also wollten wir String-Länge.
Str. Kiel.
Menschen vor Jahren beschlossen, lasst uns einfach prägnant sein.
Statt nannte es "Mensur" nennen wir es "str Kiel" und lassen Sie die
Figur, die Welt aus, und damit ist was wir bekommen Zugang zu mit string.h.
>> Dies ist vertraut.
Dies ist vertraut.
Dies ist ein wenig neu.
In Zeile 22 - und wir kommen wieder dazu, aber jetzt wissen -
und Sie würden nur wissen das aus mit Lesen Sie die Dokumentation oder wenn
Sie wusste bereits C -
String bekommen manchmal kann vermasseln.
Wenn der Benutzer wirklich kontradiktorischen oder unkooperativ und er oder sie gerade
nicht geben nichts auf der Tastatur oder Typen so viel auf der Tastatur,
es überwältigt den Arbeitsspeicher des Computers, in der Theorie, den String könnte zurückkehren
etwas anderes als ein Zeichenfolge.
Es könnte zurückkehren einen besonderen Wert genannt NULL in Großbuchstaben, N-U-L-L, und das ist
nur eine sogenannte Sentinel Wert.
Es ist ein spezieller Wert, bedeutet etwas Schlimmes passiert in diesem Fall.
Es ist das Fehlen einer Zeichenkette.
>> Also null Ich bin für die Überprüfung einfach so, dass, lange Rede, kurzer Sinn, str Kiel und
andere Funktionen, die mit C kommen, wenn sie erwarten einen String, aber sie geben sie
das Fehlen einer Zeichenfolge, wenn Sie passieren sie NULL, den Computer oder das Programm
wird nur geradezu abstürzen.
Es hängen.
Es wird werfen einige Fehlermeldung.
Schlimme Dinge passieren wird.
Also auch wenn dies immer noch nicht eindeutig definiert -
Dies wird mehr Sinn in einer Woche zu machen oder zwei - in Zeile 22, dies ist nur ein
Beispiel Selbst defensive Fehlerprüfung für den Fall einer Zeit von
eine Million etwas schief geht, bei zumindest mein Programm wird nicht abstürzen.
>> Also, wenn s nicht tut gleich etwas Schlimmes, Ich habe diese for-Schleife, und das war
wo wir hatten, dass andere neues Stück Syntax.
Ich habe eine for-Schleife durchlaufen von Null bis zu einer Länge von S.
Und dann ist hier, ich war ein Ausdrucken s Halterung i, aber warum habe ich% c alle
plötzlich anstelle von% s sogar wenn s ist ein String?
Es ist ein Zeichen, nicht wahr?
S ist ein String, aber s Halterung etwas, s Halterung, wobei i gleich Null
oder ein oder zwei, das ist eine individuelle Zeichen in der Zeichenfolge, und so für
dass printf muss informiert werden, dass es ist in der Tat ein Zeichen zu erwarten.
>> Und dann erinnern, tat, was diese Programm tatsächlich tun?
>> Gedruckt es in den Spalten.
>> Ja, genau.
Es ist einfach gedruckt das Wort, das ich geben in eine Säule, ein Zeichen pro Zeile.
Also mal sehen, dieses wieder.
So machen Zeichenfolge.
Zusammengestellt OK. . / String.
Lassen Sie mich in H-E-L-L-O eingeben, Enter und Tat ich es, eine pro Zeile.
>> Also lassen Sie mich tun eine Optimierung hier.
Wenn Sie darüber nachdenken, vor allem, wenn Sie programmiert haben vor, es gibt
wohl eine Ineffizienz in Zeile 24.
Mit anderen Worten, es ist nicht unbedingt das beste Design.
Geradlinige, zumindest wenn man daran erinnern, was str Kiel ist, aber es ist
etwas dumm potentiell.
Was könnte das sein?
>> [Unverständlich].
>> Genau.
Es ist für die Dauer der Überprüfung s jedes einzelne Mal, obwohl
H-E-L-L-O wird immer zu fünf Zeichen lang sein.
Jedes Mal, wenn durch diese Schleife, die fünf ändert sich nicht.
Ich könnte Inkrementieren i, aber was die Länge n auf jeden
Iteration dieser Schleife?
Es ist fünf vor fünf, es ist fünf, und Trotzdem bin ich noch fragen diese
Frage wieder und wieder und wieder.
Nun ehrlich gesagt, ist der Computer so verdammt schnell, niemand wird eine Bekanntmachung
Unterschied in diesem Fall, aber diese Art der schlechten Design-Entscheidungen können
beginnen zu addieren, wenn der Compiler selbst nicht versuchen, dies für Sie zu beheben, welche
es gewohnt nicht an zumindest im Gerät.
>> Also werde ich, dies zu tun.
Ich werde ein Komma nach hinzufügen meine erste Variable, i.
Ich werde mir selbst ein anderes Variable, nannte es n, nur durch
Konvention für Zahlen, und dann bin ich werde zuweisen n Der Wert von String
Länge s.
Und dann werde ich ändern mein Zustand, was sein?
Ich werde meinen Zustand ändern um während i kleiner als n ist.
>> So, jetzt, wie oft bin ich Überprüfung der Länge von s?
Einmal, aber es ist in Ordnung, ich gegen überprüfen n immer wieder, weil jetzt die
Werte sind nicht wirklich zu ändern.
Jetzt für jetzt, weiß nur, dass, wenn Sie eine Funktion aufrufen, es ist ein bisschen
Overhead, nicht genug, um Sie zu entmutigen wirklich jemals mit Funktionen, sondern
sicherlich, wenn es eine Codezeile so - und die Linien erhalten
mehr interessante dauerte nicht lange - wo gibt es eine Möglichkeit zu denken, wenn ich
Geben Sie diesen Code ein, wie viele mal wird es ausführen?
Sie beginnen, im Laufe der Zeit die sehen Leistung Ihrer Programme können
in der Tat ändern.
>> In der Tat, setzt eines der Problem, das wir haben getan in den vergangenen Jahren beinhaltet
Umsetzung, wie Sie sich vielleicht erinnern aus Woche Null, eine Rechtschreibprüfung, sondern ein
Rechtschreibprüfung, die zur Unterstützung ist ein Wörterbuch von 150.000 zzgl.
Worte, die wir Ihnen Jungs.
Sie müssten, Code zu schreiben, dass die Ladung diese Worte in den Arbeitsspeicher, so in
Boxen wie wir sahen, auf dem Bildschirm einen Moment her, und dann so schnell wie möglich
können, müssen Sie in der Lage, eine Antwort Frage nach der Form wird dieses Wort
falsch geschrieben?
Ist das Wort falsch geschrieben?
>> Und in so etwas wie das, was wir haben getan in den vergangenen Jahren wird es in sich,
wenn auch auf einem Opt-in freiwilliger Basis ein Konkurrenz der Arten, wobei die
Studenten, die weniger RAM verwenden und weniger Zeit, weniger CPU-Zyklen, bis Ende
sprudelt bis an die Spitze eines kleinen Leaderboard oder Ranking, dass wir anziehen
Homepage des Kurses wie wir getan in den vergangenen Jahren.
Also noch einmal, völlig optional, aber diese spricht zu den Gestaltungsmöglichkeiten
die vor uns sind, wenn wir beginnen Gebäude oben auf einige dieser
Grundbausteine.
>> Also lassen Sie mich zurück zu diesem Diagramm für nur einen Augenblick und zeigen ein wenig
etwas mehr.
Dies ist in der Tat ein String ist, und wir haben gemacht Vorteil von wenigen Bibliotheken,
Standard io.h was sich -
>> Printf.
>> Printf, unter anderem.
cs50.h, die int bekommen hat und den String und so weiter, string.h, die
hatte str Kiel.
Aber es stellt sich heraus, es gibt noch eine andere.
Ehrlich gesagt, es gibt viele, viele header Dateien, die Funktionen erklären
für Bibliotheken, aber dies ist ctype.h tatsächlich zu etwas sein
vorteilhaft, weil ich gehe voran gehen und Umsetzung einer
anderen Programm finden Sie hier.
>> Lassen Sie mich gehen Sie vor und eröffnen etwas Ich schrieb im Voraus genannt
capitalize.c, und lassen Sie uns ein Blick darauf, wie das funktioniert.
Beachten Sie, dass ich mit in dieser Version davon, drei bekannten Dateien.
Beachten Sie, dass in Zeile 18, ich bin immer eine Textzeile.
Hinweis in Zeile 21, ich behauptete, dass Mit dem folgenden Code wird gehen
kapitalisieren s, was der Benutzer eingegeben in, und wie mache ich das?
Nun, ich nehme -
Lektion gelernt vom letzten Mal -
Ich erkläre i und n und Iteration Das Zeichen in der Zeichenfolge.
Und was ist dann dieser Block von Code in Zeile 24 bis 27
tut in juristischer Hinsicht?
>> Kleinbuchstaben zurück.
>> Genau.
Wenn s Halterung i - so, wenn das i-te Charakter s, ist die eine spezifische
char in der Zeichenfolge, ist größer als oder gleich Kleinbuchstaben a und -
erinnern, dass eine doppelte kaufmännisches bedeuten und -
und das gleiche Zeichen, s Halterung i ist weniger als oder gleich z Kleinbuchstaben
das heißt, es ist ein a oder ein b oder ein c oder Punkt, Punkt, Punkt, oder ein z, was bedeutet,
es ist Kleinbuchstaben.
Was will ich in diesem Fall tun?
Nun, ich kann diese etwas tun kryptisch, aber
lasst uns necken diese auseinander.
>> Ich werde printf nennen, druckt% c denn ich will diese nachdrucken
Zeichen auf dem Bildschirm.
Ich werde dann s Halterung i, die nehmen i-te Zeichen in s, und warum dann
mache ich diesen kleinen Trick hier, Kleinbuchstaben ein Minus Hauptstadt A?
Was soll das gehen, um me, allgemein gesprochen?
>> [Unverständlich].
>> Genau.
Ich glaube nicht wirklich daran erinnern -
es war 65 für das Kapital A. Ich weiß nicht wirklich daran erinnern, was Kleinbuchstaben a,
aber egal.
Der Computer kennt.
So, indem er sagte, Kleinbuchstaben ein Minus Ein Kapital, es ist seltsam zu sein
Subtrahieren eines char von einem anderen, aber was sind Zeichen unter der Haube?
Sie sind nur Zahlen.
Also was auch immer diese Zahlen sind, lassen Sie den Computer daran erinnern
anstatt mich der Mensch.
>> So Kleinbuchstaben ein Minus Kapital A gehen, um mir einen Unterschied.
Es passiert zu 32 sein, und das wäre der Fall für Kleinbuchstaben b und Kapital B
und so weiter.
Er bleibt konsequent, zum Glück.
Also bin ich im Wesentlichen sagen, nehmen Sie die Kleinbuchstaben, subtrahieren, dass
Standard-Unterschied, und dass Änderungen wirksam s i Halterung aus
Kleinbuchstaben, natürlich, Großbuchstaben, ohne meine wirklich mit zu denken
über oder denken Sie daran, was waren die Zahlen, die wir darüber gesprochen, wenn die acht
Freiwillige kamen auf die Bühne?
Jetzt unterdessen in der anderen, wenn es nicht ein Kleinbuchstabe, bestimmt
durch die Linie 24, nur ausdrucken.
Ich will nur die berühren Zeichen, die waren
eigentlich ursprünglich Kleinbuchstaben.
>> Also mal sehen, dies.
Machen Sie profitieren.
Zusammengestellt, OK.
. / Kapitalisieren.
Und lassen Sie mich in H-E-L-L-O geben in Kleinbuchstaben eingeben.
Und feststellen, dass es umgesetzt wird in Großbuchstaben.
Lassen Sie mich dies wieder tun mit ein anderes Wort.
Wie wäre es mit D-A-V-I-D mit dem ersten D kapitalisiert als Name der Regel ist?
Enter.
Beachten Sie, es ist immer noch richtig.
Es ist einfach ausgegeben, dass erste D unverändert über die anderen zu konstruieren.
>> So im Hinterkopf behalten, dann ein paar Dinge hier.
Einer, wenn Sie schon immer einmal zwei überprüfen Bedingungen auf einmal, können Sie und sie
zusammen, wie wir vorausgesagt.
Sie können Zeichen in dieser Weise vergleichen und effektiv zu behandeln Zeichen als
Zahlen, aber ehrlich gesagt, das ist so verdammt kryptischen ich werde nie vergessen
wie man sich mit diesem von Grund auf ohne Begründung durch sie für ganz
ein bisschen Zeit.
>> Wäre es nicht schön gewesen, wenn jemand draußen schrieb eine Funktion aufgerufen wird
senken das könnte für mich wahr oder beantworten falsch, ist dieses Zeichen Kleinbuchstaben?
Nun zum Glück, wer schrieb ctype.h genau das tat.
Lassen Sie mich gehen hier oben, und fügen Sie ctype für c Typen, und jetzt lass mich gehen hier unten und
umschreiben diese Zeile wie folgt.
>> Also, wenn es heißt niedriger ist, behaupte ich, s Halterung i, dann werde ich löschen
diese beiden Linien insgesamt.
So, jetzt jemand anderes, ich hoffe, schrieb eine Funktion aufgerufen niedriger ist, und es
fällt sie taten, und sie erklärt es innerhalb von ctype.h.
Und jetzt gehe ich in die Linie 27 verlassen allein, ich werde in die Linie 31 verlassen
allein, zu bemerken, wie viel ich habe verschärft meinen Code.
Es ist jetzt sauberer.
Es ist weniger schwer zu durchschauen weil jetzt die Funktion ist darüber hinaus
so wunderbar nannte sie nur tut, was es sagt.
>> So, jetzt werde ich diese zu speichern.
Ich werde zu verkleinern.
Und ebenso wie in Scratch könnten Sie haben Booleans, Boolean Werte true oder
falsch, das ist genau das, was ist senken effektiv Renditen.
Lassen Sie mich neu zu kompilieren.
Lassen Sie mich re-run.
Und jetzt versuchen wir es wieder, H-E-L-L-O, Enter.
Das ist ziemlich gut.
Und versuchen Sie es erneut, sicherzustellen, dass ich nicht schrauben etwas auf.
Das ist so gut kapitalisiert.
>> Aber dies ist nicht gut genug, weil die andere Sache, die ich nie
erinnern, wenn ich durch sie wirklich funktionieren sorgfältig auf, sagen wir, ist Papier
diese verdammte Linie.
Wäre es nicht schön, wenn es eine Funktion aufgerufen, upper?
Nun, es stellt sich heraus, es ist in ctype.h als gut.
Ich werde weitermachen und geben -
lassen Sie mich bringen diese Linie zurück.
Anstelle dieser hier, lass mich gehen und sagen, Ersatz für die c% der
aufgrund des Aufrufs dieser Funktion Obergrenze für die i-te Zeichen s.
Und nun bemerken, es wird immer ein wenig ausgeglichen.
Ich habe den Überblick, wie viele halten Klammern habe ich geöffnet und geschlossen.
>> So jetzt ist es noch sauberer.
Nun, das Programm wird immer besser und besser wohl weil es entworfen
viel, viel mehr lesbar, aber ist es kein wir korrigieren.
Machen Sie profitieren.
. / Kapitalisieren.
H-E-L-L-O. Laufen wir es wieder, D-A-V-I-D. OK, so sind wir immer noch in
ziemlich guter Form.
>> Aber jetzt zu den oberen.
Ich schlage vor, dass es eine weitere Verfeinerung könnten wir machen, das wäre
wirklich nett, das wirklich anziehen könnte bis dieser Code und wirklich geben uns fünf
von fünf für Design, zum Beispiel.
Was schön wäre, um loszuwerden?
Nun, schauen Sie, wie verdammt lange diesen Block Code ist nur etwas Einfaches zu tun.
>> Jetzt als beiseite, so haben Sie vielleicht gesehen in Super-Abschnitt im vergangenen
Wochenende, brauchen Sie nicht unbedingt brauchen die geschweiften Klammern, wenn Sie nur eine
Codezeile, obwohl wir vorgeschlagen halten sie so, dass es viel macht
mehr klar, wie in Scratch U-förmige Blöcke, was drin ist der Zweigniederlassung.
Aber wäre es nicht, wenn zu den oberen schön, wenn angesichts dessen Eingang, verwandelte sie in
Großbuchstaben, wenn es nicht ist, und was wäre werden im umgekehrten Fall wunderbar, wenn
es ist schon Großbuchstaben?
Nur führt es durch und lassen sie allein.
>> Also vielleicht ist es das tut.
Ich könnte versuchen und hoffe nur, dass es, aber lassen Sie mich
vorstellen eine andere Sache.
Anstelle der Verwendung dieses eingebauten Terminal Fenster hier unten, daran erinnern, dass
dieser Platz schwarze Ikone gibt Ihnen eine größere Terminal-Fenster, dass ich kann die volle
Bildschirm, wenn ich will?
So stellt sich heraus, dass sie irgendwie seltsam sind benannt, aber es gibt diese Dinge genannt
man pages, Handbuchseiten, Mann für kurze, und ich kann auf diese durch
Eingabe Mann -
was will ich schreiben?
Man to oberen.
>> Und nun bemerken, wenn es eine Funktion innerhalb des Computers, in
In diesem Fall das Gerät, das nur das Betriebssystem Linux, es geht
um mir einen etwas kryptischen Satz Ausgang, aber Sie werden feststellen, dass im Laufe der Zeit
sie ist immer so ziemlich das formatiert gleichen, so dass Sie beginnen, sich daran zu gewöhnen.
Beachten Sie an der Spitze der oberen und offenbar ist die gleiche Dokumentation
für zu senken.
Wer schrieb es wurde Schneiden einige Ecken und setzte alles auf eine Seite.
Diese Dinge 'Zweck in Leben ist ein Konvertit
Brief an Ober-oder Kleinschreibung.
>> Beachten Sie, dass unter Synopsis, die man-Seite lehrt mich, was ich haben Datei
zu schließen, um dieses Ding zu benutzen.
Es gibt mir die Unterschriften für diese Funktionen, die beide von ihnen, auch
wenn wir jetzt nur kümmern uns um eins.
Hier ist nun eine Beschreibung.
Um oberen wandelt die Buchstaben c in Großbuchstaben, wenn möglich.
>> Noch nicht so lehrreich, aber lassen Sie mich jetzt unter Rückgabewert aussehen, das Ding
Das ist wieder übergeben.
So der zurückgegebene Wert ist, dass der umgewandelt Brief oder c, wenn die
Umwandlung nicht möglich war.
Was ist c?
>> Der ursprüngliche Charakter.
>> Der ursprüngliche Charakter und wir wissen, dass durch die wieder gehen bis zu der
Synopsis, und wer schrieb diese Funktion gerade beschlossen, dass der Eingang
an oberen und unteren nur zur willkürlich werde genannt werden c.
Man könnte sie als es fast alles haben sie wollen, aber sie hielten es
einfach wie c.
Also habe ich die Manpage konsultiert.
Dieser Satz beruhigt mich, dass, wenn es ist nicht ein Kleinbuchstabe, ist es
werde nur gib mir C, das ist perfekt, was bedeutet, kann ich loswerden
meine else-Bedingung.
>> Also lassen Sie mich zurück zu gedit und Jetzt lassen Sie mich nur dies tun.
Ich werde meine printf Anweisung kopieren.
Ich werde weitermachen und rechts reingehen die for-Schleife, dass Druck aus, und erhalten
Befreien Sie sich von jetzt diese ganze if-Konstrukt.
War das nicht eine schlechte Idee, und es war sehr viel richtig und im Einklang mit
alles, was wir predigen, aber gerade nicht erforderlich.
Sobald Sie etwas Bibliothek realisieren Funktion vorhanden ist, dass jemand anderes
schrieb, oder vielleicht haben Sie schrieb an anderer Stelle in die Datei, können Sie es verwenden und wirklich
beginnen zu straffen Sie den Code.
>> Und wenn ich Dinge wie guter Stil sagen, die Tatsache, dass diese Person die als
funktionieren bis oberen oder vorher ist geringer ist wunderbar nützlich, weil
sie sind sehr beschreibend.
Sie würde nicht wollen, um Ihre Funktionen aufrufen x und y und z, die über
viel, viel weniger Bedeutung.
Irgendwelche Fragen zu dieser Reihe Verbesserungen?
>> So genügt es, eine der sagen Imbissbuden ist auch euer eigenes Problem
Satz - vielleicht Problem Satz, aber sicherlich zwei P gesetzt und weiter, auch
wenn sie korrekt sind nicht unbedingt , sie sind perfekt, nur
noch oder besonders gut entwickelt.
Das ist die andere Achse anfangen, darüber nachzudenken.
Das war also eine Zeichenfolge innerhalb Ihres Arbeitsspeicher des Computers, aber wenn Sie ein
ganze Reihe von Figuren wie H-E-L-L-O innerhalb von RAM, und nehme
dass Sie in Ihrem Programm nennen den String mehrfach, so dass Sie
rufen den String einmal, dann rufen den String wieder.
Nun, was ist zu gehen geschehen im Laufe der Zeit?
>> In anderen Worten, wenn Sie eine Linie von Code, allerdings aus dem Zusammenhang gerissen, wie
string s bekommt -
Lassen Sie uns dies tun.
String name gleich den String.
Es gelte also Codezeile gemeint ist um den Benutzer für seinen oder ihren Namen zu fragen.
Das nächste Codezeile soll fragen der Benutzer für seine oder ihre Schule und
Diese nächste Zeile und so weiter.
Angenommen, wir fragen halten der Benutzer für den einen und
andere und andere Zeichenfolge.
Sie werden in Erinnerung bleiben gleichzeitig.
Man ist nicht auf die anderen vermischen.
Schule ist nicht überschreiben die andere.
Aber wo tun sie alle am Ende in Erinnerung?
>> Nun, wenn wir beginnen, auf dem Bildschirm zeichnen, was wir können diese Sache
hier wie eine Tafel, wenn dieser schwarzen Rechteck stellt meines Computers
Speicher, ich werde willkürlich beginnen Teilen Sie es in kleine Quadrate,
von denen jedes ein Byte des Speichers.
Ehrlich gesagt, wenn Sie ein Gigabyte RAM in diesen Tagen haben Sie eine Milliarde Bytes
Arbeitsspeicher in Ihrem Computer, so dass eine Milliarde dieser Quadrate.
So genügt es zu sagen, diese ist nicht wirklich maßstabsgetreu.
>> Aber wir halten konnte zeichnen alle diese eindeutig nicht maßstäblich Quadrate, und dies
kollektiv repräsentiert mein Arbeitsspeicher des Computers.
Jetzt werden wir nur tun, Punkt, Punkt, Punkt.
Also mit anderen Worten, wenn ich jetzt aufgefordert die Benutzer mit get String, um mir ein
String, was passiert?
Wenn der Benutzer in "Hallo," das endet in H-E-L-L-O. Aber angenommen, die
Benutzer dann in Arten -
Eigentlich sollte ich nicht getan habe hallo, da fragen wir
sie für ihren Namen.
So gehen wir zurück, wenn ich dies tun können.
>> Also, wenn ich in D-Typ-A-V-I-D für meinen Namen, aber daran erinnern, dass in der zweiten Zeile
Code wurde Zeichenfolge wieder zu bekommen um ihre Schule zu bekommen.
Wo ist das Wort, das der Benutzer Typen in als nächstes gehen?
Na ja, vielleicht, es wird in Serie gehen H-A-R-V-A-R-D. Also obwohl ich
gezeichnet als zwei Zeilen, das ist nur eine ganze Reihe von Bytes in Ihrem
Arbeitsspeicher des Computers.
Es gibt jetzt ein Problem, denn nun wenn ich mit RAM in diesem sehr günstigen
aber irgendwie naive Art und Weise, was kann man offenbar nicht unterscheiden?
Wo man anfängt und wo einem Ende, nicht wahr?
Sie sind irgendwie verwischt zusammen.
>> So stellt sich heraus den Computer tut dies nicht.
Lassen Sie mich eigentlich blättern zurück in die Zeit einer paar Zeichen, und statt Harvard
gehen sofort nach dem Namen des Benutzers, der Benutzer tatsächlich bekommt, hinter
die Szenen, ein spezielles Zeichen eingefügt durch das
Computer für ihn oder sie.
/ 0, sonst wie die NUL-Zeichen bekannt annoyingly namens N-U-L, nicht
N-U-L-L, aber Sie schreiben es als / 0.
Es ist nur alle Null-Bits ist ein Marker in zwischen dem ersten Wort, das der Benutzer-
eingegeben und die zweite.
>> So Harvard tatsächlich jetzt endet da diese Zeichenfolge
und eine weitere / 0.
Mit anderen Worten, durch diese mit Sentinel-Werte, acht zusammenhängenden Null
Bits, können Sie jetzt beginnen zu unterscheiden ein Zeichen von einem anderen.
Also die ganze Zeit, was "Hallo" wurde, ist tatsächlich "Hallo" mit einem / 0, und
Inzwischen könnte es sehr gut durchaus ein bisschen mehr RAM
innerhalb des Computers.
>> Lass es mich tun eine andere Sache jetzt.
Es stellt sich heraus, dass alle diese Quadrate wir haben zeichnen, sie sind, ja,
Strings, sondern auch allgemein, diese Dinge sind Arrays.
Ein Array ist nur ein Teil des Speichers das ist die Rücken an Rücken zu Rücken an Rücken,
und Sie verwenden in der Regel eine Reihe von Weg dieser eckigen Klammer-Notation.
So werden wir diese ziemlich viel zu sehen im Laufe der Zeit, aber lassen Sie mich gehen Sie vor und
eröffnen, nennen wir es altert.
Und bemerken, was wir tun können mit die gleichen Tricks, ein wenig
bisschen mehr Syntax hier.
>> Also in Zeile 17 des Programms - eigentlich, lassen Sie mich das Programm zuerst
so können wir sehen, was dieses Ding tut.
Lassen Sie mich rufen Altersgruppen zu machen dieses Programm kompilieren.
. / Altersklassen.
Wie viele Menschen sind in den Raum?
Nennen Sie es drei.
Alter der ersten Person?
18, 19 und 20.
Und jetzt etwas lächerlich, nur ich machte ein Programm, das im Alter von denen haben
drei Personen.
>> Also gibt es eindeutig eine Chance für etwas Spaß arithmetische hier.
Zum Glück ist die Mathematik richtig.
18 ging an 19, 19 ging bis 20 und so weiter.
Aber was wirklich gemeint zu sein Veranschaulichung ist hier, wie wir die Speicherung
Diese drei Menschen im Alter.
Lassen Sie mich zu vergrößern, was ist hier los ist.
>> Also erstens, sollten diese ersten paar Zeilen werden immer ziemlich vertraut.
Ich bin einfach nur den Benutzer zur Eingabe der Anzahl der Personen im Raum.
Dann bin ich mit bekommen int und tun, während auf tun dies wieder und wieder und wieder.
Wir haben dieses Muster vor gesehen, aber Zeile 27 ist neu und eigentlich ganz
nützlich, und wird sich immer nützlich.
Beachten Sie, dass das, was in anderen Zeile 27 ist ist, dass ich eine Erklärung sein scheinen
int genannt Altersgruppen, aber warten.
Es ist nicht nur int Alters.
Es gibt diese eckigen Klammern, innerhalb von n ist.
>> So ist die Halterung n in diesem Zusammenhang nicht innerhalb eines printf Anweisung hier aber
in diesem einzigen Zeile 27, ist diese Linie sagen, gib mir n ints, von denen jede
ist vom Typ int.
Also das ist ein Eimer, so zu sprechen, der, in diesem Fall drei Integer zurück zu
Rücken an Rücken, so dass ich effektiv haben drei Variablen.
Die Alternative zu sein klar, wäre dies.
>> Wenn ich wollte, dass die ersten Schüler Alter, ich könnte dies tun.
Wenn ich wollte, dass die zweiten Schüler Alter, ich könnte dies tun.
Wenn ich wollte, dass die dritten Schüler Alter, ich könnte dies tun.
Und Gott bewahre wir brauchen jeden Alter in diesem Raum -
Ich meine, das ist eine verdammt viel von Kopie, fügen Sie wieder und wieder und wieder.
Und zzgl. sobald ich dieses Programm kompilieren, wenn ein anderer Student geht in über out
dieser Tür, jetzt meine Nummer von Variablen ist falsch.
>> Also, was ist schön, über ein Array ist als Sobald Sie das Gefühl selbst
Kopieren und Einfügen, stehen die Chancen, dass es nicht der beste Ansatz.
Ein Array ist dynamisch potentiell.
Ich weiß nicht im Voraus, wie viele Leute wissen, gehen, um im Raum zu sein,
aber ich weiß, ich brauche n von ihnen, und ich werde herauszufinden, n, wenn die Zeit kommt.
Diese Codezeile bedeutet jetzt, gib mir ein Teil des Speichers, die wie folgt aussieht
wobei die Anzahl von Feldern auf dem Bildschirm ist völlig abhängig von n, dass
der Benutzer eingegeben in.
>> So, jetzt der Rest des Programms ist eigentlich ziemlich ähnlich, was wir
habe gerade mit Zeichen.
Merke ich, haben eine for-Schleife ab Zeile 30.
So, nachdem ich das Array zu bekommen, ich Iteration von y gleich Null auf bis zu n.
Ich habe nur dieses lehrreiche printf Nachricht nur sagen, gib mir das Alter
von Person #% i, so die Nummer eins, Nummer zwei, Nummer drei.
Und warum ich das tun?
Ehrlich gesagt, lieber Mensch, um von einer zählen auf bis während Informatiker,
Null auf bis.
Informatiker sind nicht zu Mit dieser Art von Programm, so dass wir
werde nur anfangen zu zählen an einem wie normale Menschen.
>> Und jetzt in Zeile 33, die etwas bemerken anderes Stück Syntax.
Das i-te in diesem Alter Variable vom Typ Array wird einen int zu bekommen.
Und nun endlich, das ist nur arithmetische hier unten.
Ich beschloss, in einer separaten Schleife Anspruch einige Zeit vergeht, und jetzt in dieser
separaten Kreislauf, führen diese Zeilen.
>> Ein Jahr ab jetzt, ich werde Person i sein Jahre alt, aber bemerken, ist dies nicht der
Variable i.
Dies ist nun% i für int.
Und Bekanntmachung als ersten Platzhalter, ich Stecker in i plus 1, so dass wir wie eine Zählung
normaler Mensch.
Und dann für den Wert ihres Alters, für i Jahre alt, ich nehme Alters Halterung
i - und warum mache ich plus eins hier?
Sie nur im Alter.
Es ist meine dumme Auswahl an Programmen.
Sie nur im Alter von einem Jahr.
Ich könnte in einer beliebigen Anzahl dieses Typs Eigentlich möchte ich dort.
>> Also, was ist eigentlich alle die Relevanz hier?
Nun, lassen Sie mich eigentlich zurück blättern hier und ein Bild malen
von dem, was vor uns liegt.
Was wir mit unserem nächsten tun Problem Zwei Set wird in der Dilettantismus
Welt der Kryptographie.
Dies ist also eine Folge von Zeichen, so dass ein Folge von mehreren Zeichen, und welche
bedeutet dies sagen?
Es ist nicht in der Online-Version der Folien.
>> Also ich behaupten, dass dies das entspricht ein dumme Werbung von vielen Jahren
vor, das könnte in der Tat erinnern einen ihrer Ursprünge.
Also das ist ein Beispiel für Verschlüsselung oder Kryptographie.
Es stellt sich heraus, dass, wenn Sie wollen tatsächlich Informationen senden oder teilen
Informationen mit jemandem sicher, wie eine Meldung wie diese, können Sie
Verschlüsselung der Buchstaben.
Aber in der Regel sind die Wörter nicht verschlüsselt zufällig.
Sie sind in gewisser Weise vertauscht oder verändert in gewisser Weise so, dass - oops.
Das ist ein Spaß Spoiler für die nächste Zeit.
>> So kann man abbilden, was offenbar O B. Beachten Sie, dass Leitungen bis
Kapitalisierung-weise.
Offenbar wird e r.
Offenbar F-H-E-R zu S-U-R-E. So es stellt sich heraus, es gibt eine Abbildung, und in
In diesem Fall gibt es eine ziemlich dumm Kartierung, wenn jemand es herausgefunden hat?
Dies ist die so genannte Rot 13, 13 drehen.
Es ist die dümmste Verschlüsselung Mechanismen, weil es buchstäblich nur
fügt 13 bis jeder einen der Buchstaben, dumm in dem Sinne, dass, wenn Sie nur
haben ein bisschen freie Zeit auf Ihre Hände und ein Bleistift, oder einfach nur, dass es
durch im Kopf, könnten Sie versuchen, alle möglichen Ergänzungen - eins, zwei,
drei, Punkt, Punkt, Punkt, 25 nur drehen das ganze Alphabet, und
Irgendwann werden Sie herausfinden, was diese Meldung.
Also, wenn Sie tat etwas wie dies in Grundschule vorbei Nachrichten an Ihre
bester Freund, wenn Ihr der Grundschule Lehrer einfach durch die Lese-
Nachricht und Brute gezwungen die Lösung, Sie vielleicht bekommen haben
eine Antwort, dass durch.
>> Jetzt natürlich, in der realen Welt, Kryptographie ist anspruchsvoller.
Dies ist ein Text-Snippet aus einer Computersystem, das Benutzernamen und hat
Passwörter, wie fast alle von uns tun, und das ist, was vergessen könnte
aussehen, wenn auf Ihrer Festplatte gespeichert fahren, aber in verschlüsselter Form.
Dies ist nicht nur eine Drehung von Briefen, A ist, B und B C. Dies ist
viel anspruchsvoller, aber es nutzt was allgemein als geheimen Schlüssel bekannt
Kryptographie.
Dieses Bild erzählt die folgende Geschichte mit ein paar Symbolen.
>> Auf der linken Seite haben wir, was nennen wir Klartext.
In der Welt der Kryptographie, glatt Text ist nur die ursprüngliche Nachricht
geschrieben in Englisch oder Französisch oder eine Sprache auch immer.
Wenn Sie es verschlüsseln möchten, wir passieren es bildhaft durch ein Vorhängeschloss, so
einige Art von Algorithmus, eine Funktion oder Programm, dass jemand schrieb
dass verschlüsselt die Buchstaben hoffentlich mehr kompliziert als einfach nur mit 13
für jeden von ihnen.
>> Was Sie aus diesem Prozess in die Mitte gibt heißt cyphertext.
So eine Art sexy Wort.
Es bedeutet nur, es ist die verschlüsselte Version des Klartext.
Und nur, wenn Sie das gleiche Geheimnis, 13 oder minus 13, sind Sie in der Lage,
Entschlüsseln einer Nachricht so.
>> So in Problem Set Two, unter den Dingen Du wirst, wenn in der Hacker tun
Ausgabe, haben Sie, um Code zu schreiben diese Passwörter knacken, herauszufinden,
was sie waren und wie sie waren verschlüsselt, obwohl wir Ihnen ein bisschen
der Beratung auf dem Weg.
In der Standard Edition, stellen wir ein paar Chiffren, Verschlüsselung
Mechanismen, nannte man Caesar, ein genannt Vigenere, dass es noch
Dreh-Chiffren, wo A wird etwas, wird B etwas, aber
Sie haben es programmatisch denn es wird in der Tat ein Geheimnis sein
Schlüssel handelt, die in der Regel eine Zahl oder ein Stichwort, dass nur die
Absender und der Empfänger diese Nachrichten verstehen sollten.
>> Nun, diese tatsächlich Inkarnationen in der realen Welt.
Dies ist zum Beispiel kleine Waise Annies Geheimnis Decoder Ring, und Sie
kann tatsächlich setzen diese Dreh-Chiffren -
A wird zu etwas, wird B etwas - mit ein paar Räder,
eine auf der Außenseite, einem auf der Innenseite so dass, wenn Sie das Rad drehen, oder
der Ring, können Sie tatsächlich Line-Up der Briefe mit verschiedenen Buchstaben,
immer einen geheimen Code.
Und so wie der Cliffhanger für heute, , was ich dachte, ich hätte tun müssen, ist ein bisschen
Rückschritt, dass, wenn Sie den Fernseher einschalten am 24. Dezember, können Sie beobachten die
Film bis zum Überdruss für 24 Stunden in einer Reihe.
Aber für heute, werde ich es öffnen sich hier und geben uns nur zwei Minuten ein
pädagogisch relevanten Christmas Story mit einem kleinen Kerl namens Ralphie.
>> [VIDEO PLAYBACK]
>> -Sei es, um alle und jeden, die bekannt Ralph Parker wird ernannt
Mitglied der Little Orphan Annie Geheimnis Kreis und wird auf alle Titel
die Ehren und Vorteile auftretenden dazu.
>> -Signed, Little Orphan Annie.
Gegengezeichnet, Pierre Andre in Tinte.
Ehrungen und Leistungen bereits im Alter von neun Jahren.
>> [Schreien auf RADIO]
>> Komm, lass uns auf mit ihm zu bekommen.
Ich brauche nicht all that jazz über Schmuggler und Piraten.
>> -Hören Sie morgen Abend für die Abschluss Abenteuer der schwarzen
Piratenschiff.
Jetzt ist es Zeit für Annie Secret Message for you Mitglieder
der geheimen Kreis.
Erinnern Sie sich, Kinder.
Nur die Mitglieder des Secret Circle Annies kann Annies geheime Botschaft zu entschlüsseln.
Denken Sie daran, Annie auf dich.
Legen Sie Ihre Stifte bis B2.
Hier ist die Botschaft.
12, 11, 2 -
>> -Ich bin in meinem ersten geheimen Treffen.
>> -25, 14, 11, 18, 16 -
>> -Pierre war in der großen Stimme heute abend.
Ich könnte sagen, dass die heutige Nachricht war wirklich wichtig.
>> -3, 25.
Das ist eine Nachricht von Annie sich.
Denken Sie daran, es niemandem sagen.
>> -90 Sekunden später, ich bin in der nur noch Zimmer in dem Haus, wo ein Junge von neun
konnte in der Privatsphäre und decodieren zu sitzen.
Aha, ging B. ich zum nächsten.
E. Das erste Wort ist "sein." S. Es war leichter, jetzt kommen.
U. 25.
Das ist R.
>> -Komm, Ralphie.
I gotta go.
>> -Ich werde gleich runter, Ma.
Herrje.
>> -T. Achten Sie darauf, O..
Achten Sie darauf, was?
Was war Little Orphan Annie versucht zu sagen?
Achten Sie darauf, was?
>> -Ralphie hat Randy muss gehen.
Würden Sie bitte kommen?
>> In Ordnung, Ma.
Ich komme gleich sein.
>> -Ich war immer näher an jetzt.
Die Spannung war schrecklich.
Was war es?
Das Schicksal des Planeten kann hängen in der Schwebe.
>> -Ralphie, Randys Gotta Go.
>> -Ich werde direkt aus für crying out loud.
>> -Fast da.
Meine Finger flogen.
Mein Geist war ein Stahl-Falle.
Jede Pore vibrierte.
Es war fast klar.
Ja, ja, ja, ja, ja.
>> -Achten Sie darauf, Ihre Ovomaltine trinken.
Ovomaltine?
Ein miesen Werbespot?
Son of a bitch.
>> [END VIDEO PLAYBACK]
>> Sprecher 1: Dies ist CS50, und dass Problem wird sein Set Zwei.
Wir sehen uns nächste Woche.
>> Sprecher 2: An der nächsten CS50, geschieht dies.
>> Sprecher 1: So ein Thema haben wir nicht sah so weit ist
dass der Zeiger auf Funktionen.
Nun, das ist eine Funktion Zeiger nur die Adresse eines öffentlichen
Funktion, sondern ähnlich wie -
Sohn von a -