ROB: In Ordnung. Willkommen auf der ersten Seite. Ich bin Rob. JOSEPH: Ich bin Joseph. ROB: Also werden wir tauchen rechts in. Erste Sache, darüber zu sprechen ist die Appliance. So hoffnungsvoll die meisten von euch haben heruntergeladen es schon. Aber Sie können die Anweisungen zu sehen bei cs50.net/appliance. Oh Gott, jetzt bin ich selbstbewusst. Ich immer noch hören. JOSEPH: Wow, es klingt wie es ist desorientiert. ROB: So einige Menschen wurden mit Probleme mit ihm, also warten Sie nicht, bis die letzte Minute des Problems zu setzen versuchen und lösen das Geräte-und finden heraus, dass es nicht funktioniert. JOSEPH: Und wenn etwas nicht funktioniert und Sie Hilfe benötigen, können Sie gehen cs50.net/discussion, wo wir haben ein Forum, wo Sie können Sie Ihre Fragen stellen. Und wir werden sie schließlich bekommen. ROB: In Ordnung. Also das ist, was die Appliance aussieht. Auch hier ist es nur eine völlig getrennte Betriebssystem im laufenden unabhängig von Betriebssystem werden auf dem Laptop läuft. Und die wichtigsten Dinge, die Sie werden mit gedit sind. Hoffentlich hat dies bereits zu einem vertrauten Ort. Das Terminal. Und Sie können auch laufen Chrome innerhalb der Appliance. Es gab ein paar Leute die Internet gemeldet haben, nicht in der Appliance zu arbeiten. Und einige von ihnen haben einfach angenommen, dass es nicht sein soll Internet in der Appliance. Aber ja, es soll zum Internet sein. Ich werde es jetzt zu sagen, aber es funktioniert nicht wirklich nichts zu bedeuten. Wenn das Internet nicht funktioniert, das ist, was Sie dazu neigen, müssen zu laufen, um es zu beheben. Wenn Sie mit Internet-Themen, nicht daran erinnern, nur per Post auf Diskutieren, und wir werden sagen, dass laufen. Aber das Internet sollte funktionieren. So ist die einzige andere Sache - ja, nichts sonst ist wirklich relevant. Aber ich wollte nur darauf hinweisen, dass - siehe dazu unten rechts. Also jedes Ihrer Geräte sollte eine IP-Adresse. Und später im Semester, diese IP- Adresse wird mehr relevant werden, wenn Sie auf der Web-p-Reihe arbeiten, weil Sie werden in der Lage sein, für den Zugriff auf Website, die Sie gerade arbeiten von Ihrem lokalen Chrome mit dieser IP-Adresse. Aber was Ich mag, um die IP-Adresse zu verwenden für - und Sie wissen nicht, dies zu tun, ich wollen einfach nur darauf hinweisen - ist hier. Also das ist ein Terminal-Fenster auf meine Mac, ist dies nicht in der Appliance überhaupt. Und Sie können nachschlagen, was dieser Befehl tut. Aber ich bin zu SSH direkt gehen meine Appliance. Ich weiß nicht, was das IP ist. JOSEPH: 168 - 168.224.1.0. ROB: Also, wenn ich fertig bin mit diesem, einloggen Nun, im Grunde ist diese identisch mit a Terminal-Fenster in meinem Appliance. Also habe ich so ziemlich nie wirklich gearbeitet innerhalb der Appliance sich. Ich habe es immer laufen minimiert im Hintergrund und in sie SSHed. Das Problem dabei ist, gehen Sie nicht in der Lage sein gedit leicht zu verwenden direkt von diesem. Aber wenn Sie ein echter cool sein wollen Hacker, dann sollten Sie verwendet, um eine zu bekommen Kommandozeilen-Texteditor sowieso. So Vim und Emacs und Nano, alle diese es verschiedene Alternativen. Nano neigt dazu, die einfachste ist. Und ich denke, es hat keine Syntax-Highlighting. Oh, nein, es ist völlig tut. So können Sie Nano zu verwenden, da dass man ziemlich einfach. Sie alle diese Befehle sehen an der Unterseite. Dieses kleine Karotte-Symbol. Wenn Sie noch nicht zuvor gesehen, werden Sie wahrscheinlich sehen es jetzt viel. Es bedeutet in der Regel die Steuer Karotte, wie unten links auf der Tastatur Steuerzeichen. So, hier ist es mir zu sagen, hier unten - oh, es ist nicht abgeschnitten, wenn ich zoomen Also Kontrolle, X ist, wie Ich werde zu verlassen. Und es sagt, ich kann für Y getroffen Ja, für das Speichern, N für Nein. Also das ist Nano. Vim und Emacs neigen dazu, etwas mehr sein kompliziert und überwältigend. Aber können Sie sich daran gewöhnt, und dann wirst du es lieben. So ist das also. JOSEPH: Keine Notwendigkeit, das zu tun. ROB: Ja. Sie sind frei, gedit für den Einsatz Rest des Semesters. So alle gerätebezogenen Fragen? Oder haben Sie Gedanken auf, was anderes haben muss über gesprochen werden das Gerät? Ja. Sprecher 1: Wenn Sie in Ihrem SSHed was war das Passwort Hochrote? ROB: Ja. Das Passwort für so ziemlich alles in der Appliance wird Crimson sein. SPRECHER 2: Installieren Sie wie ein echter IDE auf dem Gerät, wird es funktionieren? ROB: Ich kann mir vorstellen Eclipse-macht haben ein Fedora Version, in diesem Fall ja, Sie können das tun. Es ist wahrscheinlich nicht wirklich gelohnt. Sprecher 2: OK. So ist es wahrscheinlich einfacher, wenn ich wollte Verwendung von Eclipse, benutzen Sie einfach die native und dann hochladen - ROB: Oh, das ist wahrscheinlich auch einfacher. Aber Sie können es Arbeits innerhalb der Appliance. JOSEPH: Und für die Kamera, die Frage war, können Sie ein anderes installieren IDE Innenseite der Appliance? ROB: Eklipse als eine Beispiel einer IDE. Alle anderen Appliance Fragen? Gut. So werden wir nun zur Kommandozeile Interface-bezogene Dinge, so CLI. Und wieder, ich bin nur zur Arbeit zu gehen in hier, da diese identisch mit Arbeit in einem Terminal-Fenster innerhalb der Appliance. Wie ist diese Schrift suchen? Ist das groß genug? Gut. So gibt es eine Menge von Befehlen, die Sie sollte recht gewöhnungs während des Semesters. Der große zwei für die Navigation sind ls, Liste die Dateien in diesem Verzeichnis, und cd, so Verzeichnis. So kann ich auf dem Desktop ändern und dann ein sehr häufiges Muster ist cd ein Verzeichnis und sofort ls Was ist in dem Verzeichnis. Menschen manchmal auch nicht erkennen, dass Tab Abschluss ist eine Sache. So wie CD, vh, und dann traf ich Tab. Ich tippe fast nie aus die ganze Sache. Und dann, wenn ich schlagen immer Tab wieder, wird es automatisch Auflistung beginnen für mich. So kann ich cd vhosts, lokalen Host. Und das ist gerade dabei, - wenn Sie den Begriff noch nicht gehört vor, ist nur ein anderes Wort Verzeichnis für Ordner. So jetzt, wenn Sie sehen - wir bringen, dass an die Spitze. So jetzt, wenn Sie sehen, in Klammern, die Sie siehe die kleine Tilde, Schrägstrich, vhost, Schrägstrich, lokalen Host. Also die Tilde, das bezieht sich zu meinem Home-Verzeichnis. Es ist ein Verzeichnis, das Sie sind in, wenn Sie SSH in. Es ist das Verzeichnis, das Sie in sind, wenn Sie eröffnen ein Terminal. Es ist, wo Sie beginnen. Und so bin ich innerhalb meines Home-Verzeichnis, und ich bin innerhalb des vhost Verzeichnis innerhalb meines Home-Verzeichnis. Und dann bin ich innerhalb der lokalen Gastgeber Verzeichnis innerhalb davon. So einige andere nützliche Dinge mit cd - oder gut, im Allgemeinen, so dot immer bezieht sich auf das aktuelle Verzeichnis. Cd, ist ein Punkt ziemlich wertlos Befehl. Aber das ändert sich, um die aktuellen Verzeichnis. Ein sinnvoller in Bezug auf ein cd Punkt, Punkt, was nur ein Verzeichnis nach oben zu gehen. Und beachten Sie, dass diese - Ich möchte sagen, Aliasnamen, aber diese Symbole, Punkt, Punkt und, punkt, die Arbeit für so ziemlich jeden Befehl Sie gehen zu denken läuft. So wie CD ist wohl, wo Sie sind Verwendung der meisten, aber diese sind nicht Dinge, die einfach cd versteht. Es ist ziemlich viel etwas, das gesamte Befehlszeile versteht. Viele Programme verstehen Punkt-und Punkt-, Punkt. Also die anderen nützlichen - CD, Bindestrich. Also das wird mir das bringen letzte Verzeichnis, dass ich in. Also manchmal werde ich etwas tun, oh, ich bin in hier zu arbeiten. Und ich sehe einige Fehler mit etwas, und Ich werde gehen, es untersuchen, indem Sie auf einige zufällige Verzeichnis irgendwo. Und ich weiß nicht, ob es werde lassen Sie mich dort. Es wird. Also habe ich alles tun, was ich will in diesem Verzeichnis. Blah, blah, blah, blah, blah. Und ich war wie, alles in Ordnung, ich will , zurück zu gehen, wo ich war. cd, Bindestrich, und es bringt mich gleich wieder. Also werde ich eine Menge werfen dieser bei Ihnen heute. Ich erwarte nicht, Sie speichern alle von ihnen. Es ist eine Art weiß nur, dass sie existieren. Und dann später, wenn Sie wie sie sind, hmm, ich will zurück zu der Verzeichnis, das ich gerade in war, oh, warte, so etwas existiert. Sie haben nicht nur tippen im ganzen Verzeichnis wieder. JOSEPH: Und irgendwann werden Sie nur verwenden sie immer und immer wieder, und es wird Muskelgedächtnis geworden. ROB: Ja. Also, wie ich schon sagte, dass Tilde ist Ihr Home-Verzeichnis. So kann ich cd, Tilde. Aber ich weiß noch nicht einmal zu haben, tun, wenn ich nur - Ich werde wieder in das Verzeichnis gehen, so es ist nicht ein sinnloses Beispiel. Aber wenn ich nur cd zu tun, das ist auch die gleiche wie zu meinem Home-Verzeichnis. Ich tun, Command, K. JOSEPH: Sie können auch klar, die Wort, und es sollte es zu deaktivieren. ROB: Und ich denke auch, Kontrolle, L tut es auch. So viele verschiedene Möglichkeiten. Ich denke, es gibt einige Unterschiede, wo klar und Kontrolle, L wird nur wirklich schieben Sie es an die Spitze und Ich kann mich noch zurückblättern. Command, buchstäblich zerstört K alles, und Sie kann nicht scrollen wieder auf. Zumindest ist das, wie es in iTerm2. Ich weiß nicht, wie andere Dinge - oh. Mit SSHing, wenn Sie also auf Windows sind, Sie gehen zu müssen, PuTTY download um SSH seit Windows nicht haben wie eine integrierte SSH-Tool. Von Macs, können Sie einfach SSH direkt von einem Terminalfenster. OK. Fragen? Mit ls, so etwas zu gewöhnen die meisten dieser Befehle - gut, ich werde nur tun, ein. Ls, Bindestrich, l. So Bindestrich, l ist, was wir , eine Flagge zu ls aufrufen. Und viele dieser Befehle haben Fahnen dass Sie an sie weitergeben. Also in diesem Fall, Bindestrich, l ist eine Flagge es sagt mir, dass eine Voll zu geben Auflistung aller Informationen dieser Dateien. So sehen wir hier, dass Desktop war am 30. Juli um 12:54 Uhr geändert. Downloads bei 6. September modifiziert. Dies sind die aktuellen Größe und Bytes dieser Verzeichnisse. Sie müssen nicht zu verstehen, all dies. Das Zeug auf der linken Seite, der diese drwx, das wird viel mehr relevant werden später, wenn Sie zu tun haben - das hat mit mit Berechtigungen zu tun an diesen Dateien zu suchen. Und so, wenn Sie nicht der einzige Benutzer auf waren dieser Computer, würden Sie in der Lage, sagen, OK, ich der einzige sein dürfen sich die Datei ansehen, oder ich bin gehen, damit jeder an dieser Datei zu suchen. So jemand anderes auf meinem Computer kann an dieser Datei zu suchen. Ich weiß nicht einmal wissen, was diese - was hat das zu tun? JOSEPH: Ich bin nicht ganz sicher, eigentlich. ROB: Keine Ahnung. JOSEPH: Aber wenn Sie nicht wissen, gibt es eine hilfreiche Befehl, den Sie verwenden können, Ihnen sagen, was die Ausgabe bedeutet. Und wenn Sie im Menschen geben vor dem Befehl - so M-A-N. ROB: Mann. So ein Mann ist ein anderes das ist sehr nützlich. Und ein Mann, ls. Also die man-Seiten, beide haben sie Befehle, die Sie sein werden, mit gerade in der Befehlszeile, und sie haben auch Funktionen, die relevant sein wird mit C. So kann der Mensch - und ich ignorierte 3. Aber man 3 printf bringen wird bis die C-Version von printf. Aber wenn ich nur man printf tun, das ist gehen, um das Kommando printf das geschieht in der Befehlszeile. So ein Mann, ls. Die man-Seiten können schön sein überwältigend. Hier aber, dass Sie dieses Angebot sehen all dieser Flags, ls versteht. Also, wenn wir zu stürzen, l, und - Ich werde einfach dies auf Sie werfen. Aber um zu suchen, möchten Sie zum ersten Hit der Frage Zeichen oder Schrägstrich-Taste. So senken. Und dann kann ich suchen für was ich will. So werde ich für Armaturenbrett, l senken. Und da war es. So verwenden Sie eine lange Liste Format. Das bedeutet nicht, mir helfen herauszufinden, was dass bestimmte Spalte gemeint, aber ich nehmen irgendwo hier wäre es zu erklären, dass. So verwenden Sie die man-Seiten für jeden Befehl dass Sie nicht sofort verstehen. Ich bin mir ziemlich sicher, Sie können auch der Mensch, der Mensch. Eine Schnittstelle zum Online Referenzhandbücher. Oh, eine letzte, die vielleicht leicht ist relevant ist, ls, Bindestrich, ein. Also merken, wenn ich nur tun, ls, Ich diese fünf Dateien. Wenn ich ls, Dash, a, I bekommen viel mehr Dateien. Also die Sache gemeinsam zwischen all diesen neue Dateien ist der Punkt vorher. Also der Konvention ist, dass eine Datei, die beginnt mit einem Punkt versteckt. Also Sie wollen nicht, dass die Datei anzuzeigen, die Sie wollen nicht, dass es mit Chaos haben Ihre Verzeichnisliste. Es ist nur, wenn Sie ausdrücklich bitten, alles in Ordnung, ls, Bindestrich, ein, zeigen Sie mir. Der eine steht für alle Dateien, auch unsichtbare. So einige andere Befehle. Oh, Fragen an dieser Stelle? Ja. SPEAKER 3: Wenn Sie ls tun, a, was ist der Punkt, Punkt? ROB: Oh. Also das ist, was ich meinte. Es ist die gleiche Sache, wo Ich kann wie CD, Punkt, Punkt. Technisch sind Punkt-und Punkt-, Punkt Dateien, die in jedem einzelnen vorhanden Verzeichnis, in dem der Punkt-Datei verweist in das aktuelle Verzeichnis. Also, wenn ich cd, Punkt, werde ich einfach in dem Verzeichnis bleiben. Und Punkt, Punkt bezieht sich immer auf die vorherige Verzeichnis eine Ebene höher. Also, wenn ich in die Protokolle und ls gehen, Bindestrich, al, Ich werde sehen, Punkt, Punkt. cd zu Punkt, Punkt bringt mich auf das vorherige Verzeichnis. Ja. OK. Also ein weiterer ziemlich wichtig Befehl rm. Also das ist, was wir zu verwenden, um zu entfernen. Und lassen Sie mich eigentlich das andere tun Befehl zuerst. So mkdir. Mkdir ist, wie Sie Verzeichnisse erstellen. Und ich werde ein temporäres Verzeichnis erstellen und gehen Sie in dieses temporäre Verzeichnis. Und wie erwartet, ist es leer. Aber wenn ich ls, Bindestrich, ein, habe ich noch Punkt und Punkt, Punkt, Punkt, weil sich auf das aktuelle Verzeichnis. Und Punkt, Punkt bezieht sich auf die vorherige Verzeichnis. Und die wird immer, egal existieren das Verzeichnis, sind Sie in. Und das ist ein völlig unnötig Befehl, aber Touch. Ich bin nur mit ihm, denn es ist eine einfache Möglichkeit, Dateien zu erstellen. So berühren a, b berühren, berühren Sie c ist nur gehen, um drei Dateien genannt zu erstellen, b und c, die vollständig leer sind. Also der Punkt, der mir die in die Erstellung erster Linie ist nur so, dass rm wie können wir sie entfernen. So rm, ein. Es wird mich fragen, entfernen regelmäßig eine leere Datei? Und dann werde ich sagen: Ja. Also, wenn ich sicher weiß, dass ich Löschen Sie die Datei, ohne sein dazu aufgefordert werden, entfernen Sie regelmäßig leere Datei?, dann rm, Bindestrich, f sein wird, die Flagge, die sagt, erzwingen zu entfernen, ohne mich sogar aufgefordert, oh, Sie sind sicher, dass Sie die Datei löschen wollen? Ja, ich bin sicher. So rm, Bindestrich, fb wird nur es tun, ohne zu fragen. Lassen Sie uns also einige weitere Verzeichnisse. mkdir, tmp2, cd, tmp2, berühren Sie ein, berühren b. OK. So, jetzt will ich entfernen tmp2 als Verzeichnis. So rm tmp2. Sie können tmp2 nicht entfernen, es ist ein Verzeichnis. Also das Problem hier ist, dass rm nicht sofort an die Arbeit auf Verzeichnisse. Es ist nur für Dateien wie gedacht Nicht-Verzeichnisdateien. Und was wir tun können, hier ist rm, Bindestrich, r. Das steht für rekursiv, die zu gegebener nicht, dass noch etwas für Sie. Aber wenn man die Rekursion zu bekommen, es wird mehr bedeuten. So rm, Bindestrich, r, tmp2 wird sich rekursiv in diesem Verzeichnis abgelegt. So steigen in Verzeichnis tmp2? Ja, lass uns in die zu gehen. Wollen wir tmp2 entfernen / a? Ja. Wollen wir tmp2 / b entfernen? Ja. Jetzt wissen wir entfernen wollen das Verzeichnis tmp2? Ja. Und nun das Verzeichnis und alles, was innerhalb der es entfernt wurde. Es ist technisch ein Befehl rmdir dass Sie verwenden können, zu entfernen Verzeichnisse, aber es funktioniert nur, auf leere Verzeichnisse sowieso. Und zu sehen, dass wir einfach mkdir tun, tmp2 wieder. Tmp2, berühren ein. OK. Also, wenn ich versuche, dirtmp2 entfernen, wird es sagen, das Verzeichnis nicht leer ist. Also ich benutze so ziemlich nie entfernen Befehl dir trotzdem, weil rm, Bindestrich, r auf leere Verzeichnisse arbeiten und nicht-leere Verzeichnisse. Und auch, wenn ich will nicht zu haben, gehen durch diesen gesamten Prozess der Abstieg in das Verzeichnis und Entfernen jede einzelne Datei, rm Bindestrich, rf, tmp2. Und jetzt ist es weg. Etwas vorsichtig sein etwa ist rm, Bindestrich, rf. Und es macht mir Angst, noch geben sie, weil, wenn ich versehentlich Enter drücken, oder so etwas. So rm, Bindestrich, rf, Tilde würde, ohne mich veranlasst, wird die f nicht aufgefordert mir, es wird automatisch entfernen meine gesamte Home-Verzeichnis und alles in ihm. So können Sie denken, das ist eine dumme Sache zu tun. Und gut ist es. Aber es kann sehr leicht passieren, durch Unfall, wenn, sagen wir, ich wollte zu entfernen meine Schrägstrich, vhost-Verzeichnis. Und gerade in der schnellen Schreib-, Ich habe aus Versehen tun. Das wird rekursiv meine beiden entfernen Home-Verzeichnis und die vhost-Verzeichnis in diesem speziellen Verzeichnis, das nur passiert jetzt nicht. Aber das wäre noch zu entfernen meine gesamte Home-Verzeichnis. Zumindest nicht durch eine f, es würde mich zuerst fragen. Und ich würde wie, oh, sein nein, ich wollen nicht, das zu tun. Aber die Leute, Schrägstrich, einschließlich mich dazu neigen, in die zu Gewohnheit, immer rf-ing. Selbst reguläre Dateien, ich kann nur RM, c, neige ich dazu, nur rm, Bindestrich, rf, c. Nur vorsichtig sein, wenn Sie rf-ing sind. SPRECHER 4: Was macht C zu tun? ROB: C Ich bin über diese C-Datei im Gespräch in diesem Verzeichnis, dass rm, c. JOSEPH: Und noch gefährlicher, wenn Sie ein Stern, bezieht er sich auf alles das Verzeichnis. Also, was ich häufig dazu neigen, zu tun ist, ich will gehen in ein Verzeichnis, und ich möchte entfernen Sie alle Dateien dort. So rm, Bindestrich, rf, Stern. ROB: Ja. Rm, Bindestrich, rf, Stern. JOSEPH: Und wenn Sie nicht aufpassen in welchem ​​Verzeichnis du bist - Ich war nicht in temp, aber ich war zufällig in meinem Home-Verzeichnis, dann werde ich alles entfernen in meinem Home-Verzeichnis. Und ich habe tatsächlich auch schon gemacht, und Ich denke, dass du das schon getan haben, oder Jay hat das getan, bevor. ROB: Ich habe versehentlich entfernt - so ignorieren diesen Befehl für ein bisschen. JOSEPH: Nicht lustig. ROB: Also in dem Schrägstrich bin-Verzeichnis ist ein Haufen von binären Dateien, in denen es werde vertraut diejenigen wie Klang. Nun, klirren und im Grunde alle diese Dinge, die ich an der Eingabe renne Linie in dieser Schrägstrich bin. JOSEPH: Wie ls ist hier. ROB: Also Punkt, Schrägstrich, würde ls Liste dieses Verzeichnis. JOSEPH: Rm ist auch in diesem Verzeichnis. ROB: Ich habe versehentlich rm, rf-ed bin, die jeden Befehl ich konnte entfernt möglicherweise überhaupt wollen. Was dann habe ich nur eine Neuinstallation neue Appliance an diesem Punkt. JOSEPH: Also sehr vorsichtig sein, wenn Sie diesen Befehl verwenden. ZIELGRUPPE: [unverständlich]? ROB: Ja. Das ist auch eine schlechte Angewohnheit. Wenn Sie bemerken, ich bin jetzt - gut, kann man nicht bemerken, aber meine Zoom-in vielleicht können. Also ich bin jetzt root @ Appliance. So ist der Benutzer jharvard wir wollen Sie werden immer mit. Root ist der Benutzer, der die Berechtigung hat absolut nichts zu tun. So bemerken, wenn ich jharvard, wenn ich versuche, cd - was ist ein Verzeichnis, dass? Oh, das ist root ein gutes Beispiel. So cd, Wurzel. Zugriff verweigert. Denn wenn wir uns dieser Auflistung - wieder, die Sie nicht haben ganz verstehen. Aber diese drei Striche sagen dass andere lassen Sie sich nicht Benutzer in dieses Verzeichnis. Und das passiert mit Verzeichnis von root-Benutzer gehören. Also die Tatsache, dass ich jharvard und kein einer, der nicht Wurzel in erlaubt Dieses Verzeichnis, das bedeutet, dass ich gehen, um die Erlaubnis verweigert, wenn ich sie versuchen, cd hinein. Also, wenn ich bin Wurzel, habe ich die Erlaubnis, absolut alles tun, einschließlich wichtigen Dateien löschen zu der Appliance und zerstören die ganze Sache. Also ist es eine schlechte Angewohnheit, in zu erhalten einfach spazieren gehen Ihre Betriebssystem als Wurzel. Ich tue es trotzdem. Fragen? Und ich werde Wurzel zu verlassen, bleiben, wie jharvard. OK. Weitere relevante Befehle. So gehen zurück in unsere temp, die mv steht für Bewegung. Sie können verschieben ein. Jetzt wollen wir es nennen b, so jetzt nennt man b. Oder vielleicht verschieben möchten wir b ein Verzeichnis nach oben. So, jetzt leer diesem Verzeichnis. Ich bin zurück zu meinem Home-Verzeichnis zu gehen, und sehen wir, dass b im hier, weil der Home-Verzeichnis war ein Verzeichnis aus das Verzeichnis, das b hatte sich schon Es gibt auch cp. So cp kopieren Super Abschnitt Punkt, Text. Ich kann es nennen ist, Punkt, Text. Jetzt haben wir beide Super Abschnitt Punkt-, Text-und s, Punkt, Text. Das funktioniert auch auf Verzeichnisse. I rf-ed eine einzelne Datei. So cp - Nun, zunächst wollen wir versuchen, cp, tmp, tmp2. So Weglassen Verzeichnis tmp. So ähnlich RM, das Standardverhalten ist es, nicht auf Verzeichnissen. Und wieder, ähnlich wie rm, ist der Standard Verhalten - ja, dass es funktioniert Verzeichnisse mit ein, Bindestrich-r entfernt. So kopieren Sie rekursiv die temp Verzeichnis in tmp2. Und jetzt haben wir beide tmp und tmp2, und das ist nicht so hilfreich, da tmp leer war in den ersten Platz. Tmp2. Lassen Sie uns jetzt kopieren tmp in tmp2. Und wir sehen, dass tmp2 hat auch die Datei a, weil das Verzeichnis und alles in der die Verzeichnis kopiert wurde. Und das etwas hilfreich sein können, wenn, Sie sagen, sie arbeiten auf ein Problem eingestellt - oder eigentlich sind später Problemstellungen sogar noch wichtiger, da es wird eine ganze Menge sein von Dateien und Dinge. Aber Sie wollen einfach nur, für den Bruchteil zweiten, wie, alles in Ordnung bist du, ich bin gehen, um etwas anderes zu versuchen. Lassen Sie mich meine gesamte pset1 kopieren Sie einfach Backup-Verzeichnis in pset1 so, dass, wenn Ich am Ende Schrauben Dinge, ich kann gehen Sie zurück in mein Backup-Verzeichnis. Es gibt mehr Möglichkeiten, entsprechende Versionierung Sichern Ihrer Code, aber das ist immer eine schnelle Möglichkeit, nur die dass Sie eine Kopie von etwas haben Sie sind dabei, zu ändern. So Echo ist auch ein Ein-Aus-Befehl, dass Art sillily wird, nur um die zu drucken Befehlszeile genau das, was Sie wollte Echo. So echo hallo. Wir werden einfach ausdrucken hallo. Echo hallo Welt. Wir drucken hallo Welt. Das kommt zum Einsatz, wenn Sie beginnen die Kombination Befehle. Und wieder, nicht erwarten, dass Sie ganz verstehe das noch nicht, aber es ist etwas zu sehen. Und dann, wenn Sie für die Beispiele sind googeln oder Sie erkennen, was Sie tun möchten etwas, kann es hilfreich sein. Lassen Sie uns also, als ein Beispiel, so ls, Bindestrich, l. Also hier sehe ich den Ausgang von ls, Bindestrich, l. Und ich sage: OK, ich will speichern, die in einer Datei. All diese Ausgabe hier, ich will in einer separaten Datei abgelegt. Also das etwas größer als Symbol ist, was wir zu nennen. Wir Umleitung der Ausgabe in eine Datei. Nennen Sie die Datei blah, weil das ist, Ich neige dazu, was immer es nennen. So, jetzt sehen wir, haben wir eine Datei blah hier richtig. Und wenn ich es öffne, werde ich sehen, es ist genau die Ausgabe des Befehls dass ich gerade lief. Und ebenso können Sie - Wenn dies in eine Datei ausgegeben, diese wird die Eingabe aus einer Datei erhalten. Was ist ein Befehl, dass ich - JOSEPH: Ich denke, Sie verwenden können, mehr oder weniger wahrscheinlich. ROB: Aber wie wäre es mit etwas weniger blah? Ich weiß nicht. Wenn Sie in diesem Szenario kommen, wie es gibt psets, dass es nützlich. JOSEPH: Sie können über die Pipeline in Echo. Rohr die Datei in Echo zu sehen. ROB: Es ist Rohr. JOSEPH: Sorry. ROB: In Ordnung. Das ist also die Ausgabe in eine Datei. Dies ist bekommen Sie den Text aus der Datei und übergeben Sie das Programm. Und Sie werden auch sehen, dieser Kerl. Also das ist eine Art zu tun, beides auf einmal. Und tatsächlich, ich werde zwei neue einführen Befehle, nur um davon Gebrauch zu machen. Die Geschichte ist ein handliches Befehl, nur ist Drucklegung einer Liste mit der alles, was ich jemals führen Sie eine Befehlszeile. So sehen wir hier alles, was ich habe betreibt dieses ganze Zeit. Viele ls ist. Und ein weiterer nützlicher Befehl grep ist, dass ihr Zweck ist die Suche über Text-Suche nach Mustern, gut, auf der Suche nach was auch immer Sie wollen, dass es zu suchen. Und so eine praktische Anwendung ist hier, sagen wir wir wollen, um die Geschichte zu packen. Und ich möchte für die Befehle aussehen wo ich - was ist ein nützliches zu suchen? JOSEPH: [unverständlich]? ROB: Oder sagen wir einfach für alle schauen berührt, warum auch immer. Also das ist, was es aussehen wird. Und Sie müssen nicht völlig müssen verstehen. Aber die Idee ist hier, was ist Geschichte das gleiche Ausgangs hier getan wo es den Ausdruck des gesamten Geschichte von allem, was ich je laufen. Wir sind dann vorbei, dass - so statt ihn auf den Bildschirm, wir, dass die weitergeben wollen Befehl grep, die Suche wird alle Instanzen des Wortes Touch. Und so mit dieser Kombination aus Werkzeuge Geschichte und grep, ich kann sehen, OK, hier alle Befehle, die ich je haben laufen, und hier ist ein etwas allgemeines. Wir sind an der Unterseite. Und es ist auch den Befehl, mir Ich lief, der hatte die Wort Touch in ihr. Aber das Rohr ist eine ziemlich nützliche Sache zum Kombinieren mehrerer Programme. Und tatsächlich, es ist eine Abkürzung für let mich Ausgang der Geschichte zu bla-Datei, und Lassen Sie mich mit der Datei grep blah wie das, was ich möchte über aussehen. Also das Rohr ist nur eine Abkürzung für diese beiden Befehle. Ja. SPRECHER 4: [unverständlich]? ROB: Ja. Was ist - Oh. Lassen Sie uns testen. So Katze, Hund, Fisch. Deshalb möchte ich grep. Dash, r, wieder sein wird rekursiv, so will ich hinunter steigen alle Verzeichnisse. Ich möchte rekursiv für alle grep - und lassen Sie mich vorübergehend zu Diese aus dem Weg. Ignorieren Sie mich. OK. Deshalb möchte ich vorübergehend für grep Alle Instanzen der Wort Fisch. Und hier das, was ich tue, ist greppen rekursiv für das Wort Fisch. Und Stern bedeutet, über alle diese Dateien in diesem Verzeichnis. Und so gab sie mir eine Berechtigung verweigert, denn es ist nicht erlaubt, das zu lesen bestimmten Datei. Aber es fand Fisch in der Datei, Test. Ich könnte auch sagen, und zwar, nur ich wollen in der Datei blah aussehen, in diesem Fall wird nichts finden. Ich möchte nur in der Datei, Test aussehen. Es wird Fisch. Das ist eine ziemlich nützliche Befehl im Allgemeinen kennen. Es gibt einige Alternativen zu grep , das soll mehr sein werden Programmierer freundlich, aber ich neige noch zurückfallen auf grep. Fragen? OK. Gibt es noch andere Befehle? Oh. Nur eine einmalige, die ich immer finden sein Spaß Cal. So bemerken, wenn ich in diesem schönen Vollbild-Modus, habe ich keine wie oben Symbolleiste oder nichts. So Cal gibt mir nur eine nette kleine Kalender, der ist richtig jetzt abgeschnitten wird, nehme ich an. Aber nette kleine Befehl. JOSEPH: Es ist [unverständlich]. Andere Befehle, die Sie haben gesehen sind Klang und machen. Wir werden über sie gehen später noch genauer. Aber wenn Sie gearbeitet haben die PSET, sollten Sie sich vertraut mit denen. ROB: In Ordnung. Fragen zu Befehlszeilen Dinge? Gut. Also machen wir weiter, einige C-related stuff. Variablen Mathematik. OK. So wie wir in Mathe Scratch, Sie können auch Mathematik in C verwenden Bevor wir dazu kommen ganz, so Variablen. Denken Sie daran, dass, wenn Sie erklären, ein Variable wie int x oder y float, können Sie haben es vor geben zu geben der Name variabel. Also Typen, die wir bisher gesehen haben, sind int, float, double, lange, lange, die ich nicht wirklich wissen, ob wir gesehen, dass so weit. Es gibt einige andere. Wir sehen Zeichen. Es ist kurz, das ist, wie es die Gegenteil von dem, lange, lange, wo es kleiner ist als eine ganze Zahl ist. Wir haben auch gesehen Zeichenfolge. Also, was ist das Besondere an Schnur? Warum würde ich sagen, es ist nicht ganz wie int? SPRECHER 4: Es ist nicht wirklich existieren. ROB: Ja. Also der einzige Grund, warum wir String Denn wenn Sie das tun Hash, enthalten cs50.h. Und wir werden Beispiele dafür später sehen - oh, das bedeutet nicht, dass gut umgehen - wo cs50.h etwas tut entlang der Linien von Art def, char Stern, String. Und damit sagt, dass wir nicht einmal wissen, was ein Zeichen Stern ist leer. Aber das ist zu sagen, wir wollen String. Jeder Ort, den Sie habe mit Schnur, Sie worden sein könnte mit char Stern, was ist eigentlich ein Typ, der existiert in der C-Sprache. Aber wir werden, um das zu bekommen. Oh, und es geht zurück. Ordentlich. So gleiche Sache mit bool wo wahr und falsch. Das ist nicht wirklich ein eingebauter Typ in C. Stattdessen ist es nur, dies ist der Wert Null? Dann haben wir nur prüfen werde es um falsch zu sein. Hat dies den Wert - gut, hat dies keine Wert, der nicht Null ist? Dann werden wir prüfen, dass es wahr ist. So ein wahr ist, ist wahr, zwei, alles ungleich Null ist wahr. Das sind also diejenigen. Fragen zur Deklaration von Variablen und Variablentypen und so? Ja. SPRECHER 4: Für lange, lange in dem Buch, sie sagte, es sei zu lange lange int sein. Aber wird nur lange, lange zu arbeiten? ROB: Also diese Art Modifikatoren. So int x. So können wir auch sagen, unsigned int x. Wir können sagen, short int x. Wir können sagen, lange, lange int x. Aber so ziemlich jedem dieser Dinge, die ich gerade gesagt, unsigned int, short int, long long int, können Sie loswerden die int, und es wird einfach davon ausgehen, dass Sie gemeint int. So unsigned x, das bedeutet nur, - Sie wissen, wie in der Regel mit einem int, Sie können sagen, x gleich minus 3? Mit einem unsigned int, können Sie nicht. JOSEPH: Und wieder, für die Kamera, die Frage war, was ist der Unterschied zwischen lang long int und gerade lange lange? ROB: Ja. Also werde ich fast nie long long int schreiben. Ich werde lange lange schreiben. JOSEPH: Sie haben Fragen? ROB: OK. So dumme kleine Erinnerung an das ist, wie Wir deklarieren eine Variable und initialisieren die Variable und erklären, ein anderer Variable und initialisieren alles in einem Schritt. So ist die Deklaration der Variablen und die Initialisierung Variable nicht auf, kann aber auf der gleichen Linie. Die Standard-Mathematik-Betreiber So haben wir dass Sie es gewohnt sind - Plus, Minus, dividieren, Zeiten. Es gibt auch Modulo, die wir sehen. Es ist nicht, zumindest in C, ein eingebautes Energie Potenzierung Einfügemarke-Operator. Nun, es ist ein Caret-Operator, aber es ist nicht Macht. JOSEPH: Aber es ist nicht Potenzierung, Ja. ROB: Verwenden Sie die Einfügemarke anzunehmen, dass es bedeutet, wie Quadrat oder was auch immer. So einige Dinge zu halten dir nichts Division. Ich werde stehen. So erklärt initialize Antwort. Also wir sagen Schwimmer Antwort gleich 1 geteilt durch 10. Drucken Antwort auf zwei Dezimalstellen. Und das ist die Art der Sache, dass ich printf würde der Mensch, um herauszufinden, dass was zum Teufel soll%, Punkt, 2f das? Und das bedeutet nur, na ja, ohne auf die 0.2. Und%, f, was wir zu drucken, um zu schwimmen. Die 0,2 ist zu sagen, dass Druck schwimmen auf zwei Dezimalstellen. Also das Programm hat einen Fehler, und man könnte bevor in einigen gesehen haben vor CS natürlich. Aber was ist das Bug? SPRECHER 5: Null. ROB: Ja. Wenn wir also sagen, gleich Antwort 1 geteilt durch 10, wollen wir die beantworten zu 0,1 sein. Aber 1 geteilt durch 10, 1 eine integer, 10 eine ganze Zahl ist. Und so, wenn wir eine ganze Zahl dividiert durch tun eine ganze Zahl, wir gehen, um wieder eine ganze Zahl ist. So 1 geteilt durch 10 ist 0,1. Da es uns braucht eine ganze Zahl zu geben, es nur geht, wegwerfen, dass Dezimalstelle und sagen, dass die Antwort ist null. Und so, wenn wir drucken hier zu beantworten, es geht um 0.00 ausdrucken. JOSEPH: Und nur als Anmerkung, es tatsächlich wegwirft, was nach der Komma. Also, wenn Sie stattdessen hatte 6 geteilt durch 10, Sie denken vielleicht, dass es dir zu geben 0,6 und dann würden Sie auf 1 runden. Aber eigentlich, was passiert, wenn es zu tippen Aufgabe ist es, dass es fällt, was nach dem Komma. So hat sich 0,6 0. ROB: Ja. Und wir werden truncate für das zu sagen. Also, wenn Sie in einen int gegossen, die Komma abgeschnitten. So ist die Lösung für das - es gibt eigentlich zwei. Und ich werde diesen zweiten zu tun, weil dieses ist eine viel einfachere Lösung. So ein Update ist verwenden Schwimmer in der Division. Und wirklich, Sie haben nur machen, einer von ihnen ein Schwimmer. Aber es ist nur etwas klarer für beide von ihnen schwebt machen. Also 1,0 geteilt durch 10,0 ist Division zwei Schwimmern. Die Antwort wird am Ende als ein Schwimmer, und so werden Sie richtig gedruckt 0.10 hier. Etwas, das nicht so gut funktionieren etwa das heißt, gut, sicher, es war leicht genug, um eine 1 umwandeln schwimmen, indem es 1,0. Aber was, wenn statt hatten wir zwei ganze Zahlen wie int x gleich 1 und int y gleich 10, und dann wollten wir x durch y geteilt haben? So ist es nicht einfach, gerade x.0 tun oder so etwas. So ist die Lösung, um das wirft. So Gießen ist ein Weg in C konvertieren von einem variablen Typ zum anderen. So hier ist 1 eine ganze Zahl ist. Und indem Sie diesen Schwimmer vor es wir ein Casting mit einem Schwimmer. Und so wird diese konvertieren die 1 bis 1,0. Und das wird zu konvertieren die 10 bis 10,0. Und dann die Dinge verhalten sich ähnlich wie die vorherigen Version, die wir gerade gezeigt wo, wie erwartet, erhalten wir 0,10 und es wird gedruckt, dass. Und wir können dies mit zu tun Variablen, zu. So können wir sagen, float x geteilt durch float y. JOSEPH: Sie haben Fragen? ROB: So wie im regulären Mathematik, wir haben Betreiber Vorrang. Also in Mathematik Klasse, sind Sie eher es nennen Reihenfolge der Operationen. Hier ist die offizielle Bezeichnung Betreiber Vorrang. Aber die Rangfolge der Operatoren, oder die meisten Betreiber, wie man erwarten würde. So wie in der Mathematik, 2 mal 10 ist wird mehr als eng gruppiert werden Diese 10 geteilt durch 2 und 2. Die Reihenfolge der Operationen, wird es tun 2 Zeiten 10, 10 geteilt durch 2, und es wird 20 plus 5 plus 2 zu tun. Es ist also wie erwartet, und Sie können Klammern zu gruppieren Ausdrücke. Sie können keine eckigen Klammern Gruppen Ausdrücke. Ja? SPRECHER 5: Können Sie eigentlich einfach wieder 1 Sekunde? Können Sie einen int in einen String zu werfen? ROB: Also in C, kann man alles gegossen Sie alles, was Sie wollen. Das bedeutet nicht, es ist eine gute Sache zu tun. Also, wenn Sie einen int zu werfen ein String ist, bedeutet, dass - und wir werden in diese zu bekommen viel gründlicher - JOSEPH: Viel später. ROB: Ich wollte nicht sagen, viel später, so habe ich versucht, meinen Satz zu ändern. Wir werden in sie viel gründlicher zu bekommen später, wo wirklich, wenn Sie eine String-Variable - so ein String kann beliebig sein lange, oder? Und wir haben gesagt, dass ein int ist vier Byte und lange, lange ist acht Bytes und ein Schwimmer vier Bytes. So ein String ist, wie ein int, hat nur eine bestimmte Anzahl von Bytes zu. Und das wird vier Bytes. Aber ein String kann schön sein beliebig lange, oder? Also hallo Welt bereits, wenn es das ist 10 Zeichen oder was auch immer, das ist schon gehen, um über die 4 Bytes Ich kann in einen String passen. Und so wie Zeichen wirklich funktioniert ist, dass sie sind, wo im Speicher diese Zeichenfolge wird gehalten. Und so immer hier, wenn ich sage, String x Hallo Welt entspricht, innerhalb von x einfach nur sagen, oh, hallo Welt gespeichert an diesem besonderen Ort im Speicher. Also, wenn wir versuchen, eine ganze Zahl in eine Guss String, dann werden wir versuchen, zu interpretieren einige zufällige Teil des Speichers als String. Und das fast immer bricht Dinge. JOSEPH: Aber wenn das verwirrt Sie, wir werden es für mehr in die Tiefe später. ROB: Ja. Das ist, wohin du gehst in Zeiger zu bekommen. Und das ist ein bedeutenden Teil von zwei Wochen dieses Kurses. SPEAKER 6: Funktioniert es wie Objekte in anderen Sprachen nicht wirklich oder? ROB: Also in anderen Sprachen, Objekte würde mit Zeigern dargestellt werden. Es ist nicht das Gleiche, aber. Irgendwelche Gedanken? JOSEPH: Nein Keine Gedanken. ROB: OK. JOSEPH: Weiter. ROB: Gehen Sie einfach mit dem. Gut. So Modulo. So wie wir plus, minus, teilen und vermehren. So Modulo ist eine Sie kann noch nicht gesehen habe. Und es sagt nur, geben mich der Rest der. Also 55% 10. Der Rest tut 55 geteilt um 10 würde 5 sein. Also 55% 10 5. Und 3% 5 würde 3 sein. 8% 8 0 sein. 16% 15 1 sein. JOSEPH: Eine Sache, die mit diesem beachten, Auch ist es vielleicht nicht wie erwartet wenn Sie eine negative Zahl zu verwenden. So negativen 5% 4, einige Leute könnte denken, das ist - was würden Sie denken negativ 5% 4 wäre? SPRECHER 5: One. JOSEPH: Also manche Leute sagen, eine, einige Leute sagen, negative. Aber was - ROB: Ich würde noch nicht einmal , sagte einer von denen. JOSEPH: Zwei, sorry. Einige Leute sagen - ROB: Drei. JOSEPH: Drei? ROB: Negativ - was war das - negativ fünf - JOSEPH: Drei, drei, drei. Entschuldigung. Da Modulo, in der Regel, wenn Sie habe gesehen anderswo, bedeutet das normalerweise, geben eine positive Zahl, oder? ROB: Also, wenn wir in der Mathematik sagen, 10% der, sie neigen zu wollen, um Ihnen - wenn wir um 10 mod, dann erwarten wir, bekommen eine Zahl zwischen 0 und 9. In hier, das ist nicht der Fall, dass Sie erhalten negative Zahlen zurückgekehrt. JOSEPH: Also minus 5% 4 wäre negativ ein. ROB: Aber es ist selten, dass man mod-Ing sind negative Zahlen zu beginnen. Direkt dies. JOSEPH: Ja. ROB: Meh. OK. So eine letzte Sache, über hinweisen, Schwimmer ist, es ist ein gefährliches Verhalten, Schwimmer sind aber nicht eine genaue Darstellung. So geht wieder zurück auf die Bytes, daran erinnern, dass ein int ist immer vier Byte und eine Schwimmer ist immer vier Bytes. So Lucas Beispiel ist ziemlich gut. So denken von 1 geteilt durch drei. So 0,3333333. Wenn ich nur 32 Bit, wie kann Ich speichere 0,33333 genau? Und vielleicht, warum auch immer, sagen Sie, gut, gut, sagen wir einfach, dass diese besondere 1011001, lassen nur sagen, dass sollte 0.333333 sein. Nun, Sie haben nur eine endliche Anzahl von diese Bits, so ist es unmöglich, stellen jede einzelne Floating-Point- Wert angegeben nur 32 Bit. Nun, es ist unmöglich, jede darstellen Fließkommawert angegeben unendlich - gut, da jede endliche Anzahl von Bits. Also die Frage ist hier, nun, als wir bis auf zwei Dezimalstellen zu drucken, wir haben die Antwort richtig 0,10 zu bekommen. Aber unter der Haube, ist es wirklich so nahe wie möglich an gespeicherten 0,10 als dieser Bits darstellen kann. Ist das auf der nächsten Folie? Oder ist es nicht? JOSEPH: Ja, es ist so. ROB: Blegh, blegh. JOSEPH: Ja, können Sie einfach Ziehen Sie die Noten ein wenig. ROB: Ich werde einfach zu vergrößern in der letzten auf die. Oh mein Gott, das ist [unverständlich]. Damit Nummer. Das ist, was gedruckt wird wenn wir dieses Programm laufen. Und feststellen, dass es nicht wirklich eine große Sache wenn wir nur die Sorge um, wie zwei vor drei Dezimalstellen. Wie wir nur 0,10 ursprünglich gedruckt, und das ist, warum wir nichts falsch sah. Aber sobald wir anfangen, in der exakte, genaue Zahl, dass es darstellt, sehen wir, dass es nicht kann genau darstellen 0.1. Und Teil des Problems hier ist wie, alles in Ordnung, das ist in Ordnung, aber, na ja, erste, was, wenn wir versucht haben, Antwort gleich gleich 0,1? Ist das wahr oder falsch gehen, zurückzukehren? Und so ist es schwer zu sagen. Ich denke, es könnte tatsächlich wahr zurück. Wird es zuerst - Ich weiß nicht. Die Antwort ist, wenn Sie sich zu starten mit Gleitkomma-Werte, die Sie ziemlich viel sollten nicht mit Gleichheit werden Aufgrund dieser Ungenauigkeit. Und für alles, was Sie wissen, ist es die hundertste Dezimalstelle, dass die Floating-Point war nicht in der Lage korrekt zu behandeln. Und so wird die Gleichstellung gerade nicht selbst obwohl die Zahl - wenn Sie hatte mit genauen Zahlen, sollten die Zahlen genau das gleiche. Es ist im Laufe der wie 50 Berechnungen mit dieser schwimmenden Punktwerte, der Fehler kann bauen höher und höher und höher, und Dinge einfach etwas falsch. JOSEPH: Und es war wirklich berühmte Beispiele, dass dies geschieht. Wie NASA-Ingenieure haben diese bekommen falsch, was Raketen explodieren in die Luft, nachdem sie ins Leben gerufen haben. Und viele Probleme wie die. Also ja. SPEAKER 6: Wenn Sie sagen, 0,3 f, hat sie den Rest abschneiden? Oder ist es auf-oder abrunden? ROB: Wird es rund printf? JOSEPH: Ich denke, printf abschneidet. ROB: OK. So können wir in ähnlicher Weise in die entgegengesetzte gehen Richtung dieser, wobei in diesem Fall der nächste es darstellen könnte 0,1 war mit dieser Nummer. Der nächst es vielleicht in der Lage zu sein, repräsentieren 0,2 ist in der entgegengesetzten Richtung, ,199999996356 oder so etwas. Also, wenn wir in diese Richtung ging der Dinge, dann printf 0,3 f zurückkehren würde 1,99 statt 2,00. JOSEPH: Und ich bin mir nicht ganz auf, dass sicher. Vielleicht möchten Sie einen kleinen, wenig Programm, um einfach mal, dass. ROB: Obwohl, was wir sind sicher, dass wenn Sie, dass ein Guss versucht int, und Gießen in einen int wird sich dazu führen, dass die Dezimalstelle abgeschnitten, wenn Sie versuchen, werfen 1.9999999 in einen int, werden Sie ein zu erhalten. Und so nutzen Sie in der Regel sollte die Runde Funktion in der Mathematik-Bibliothek. Fragen? OK. JOSEPH: So bewegen auf die Bedingungen und boolesche Ausdrücke. So Sie diese gesehen haben, bevor. Und eigentlich möchte ich, dass meine machen Computer ist im richtigen Format hier. Raum. Es tut uns leid, wir gehen zu müssen, umzugehen ein wenig mit Cutoff an den Rändern. Aber ja, ihr Jungs haben gesehen, bevor in Scratch. Also das hier ist ein Ausdruck was verwendet wird, eine bedingte Anweisung. So beantworten größer als Null Willen Ihnen sagen, wahr oder falsch. Und diese sind wirklich wichtig, weil sie ermöglichen es uns vorstellen Logik in unseren Code. So zum Beispiel ist dies ein Programm, Scratch, die den Benutzer fragt geschrieben für eine ganze Zahl und sagt ihnen, ob die ganze Zahl, die sie dir gab, war ein positive oder negative Zahl ist. Und die Umwandlung hier zu sehen ist Sie zuerst drucken Sie die Aussage, geben Sie mir eine ganze Zahl. Und dann fragen Sie sie für eine ganze Zahl. Und dann haben Sie bedingte Logik über verwenden hier, um zu prüfen, ob diese Zahl tatsächlich grßer als Null ist oder nicht. So, hier haben wir einen Booleschen Ausdruck innerhalb einer bedingten If-Anweisung. Gibt es noch Fragen? Haben Sie Fragen dazu? OK. Es gibt also mehr als nur größer als natürlich. Sie können boolesche Ausdrücke konstruieren mit den meisten Arten von Dingen, die Sie wäre in Mathe zu denken. So größer. Das sollte ein kleiner sein. Entschuldigung. Und der Abstand. ROB: Gott bewahre Sie es verlassen. JOSEPH: In Ordnung. So größer als, kleiner als, größer als oder gleich, kleiner als oder gleich. Wir verwenden für Doppel Gleichen überprüfen Gleichheit, da einzelne Mittel gleich Zuordnung, oder? Ja. Und dann können wir auch nicht gleich durch mit Ausrufezeichen, entspricht. Und das Ausrufezeichen-Symbol kann auch erweitert werden, so dass, wenn Sie wollen, um jede Art von Boolean invertieren Ausdruck, können Sie das tun. So wird dies als wahr ausgewertet nur wenn die Antwort weniger als oder gleich Null ist. Haben Sie Fragen dazu? OK. So kann man auch kombinieren diese Ausdrücke mit logischen Und-und logische Oder. Also das ist nur der und Symbol, was sollte Shift 7 sein. Und das ist das Pipe-Symbol, das ist, kein Klein L. Es ist das einzige das ist richtig über dem Enter-Taste. So können Sie zwei von diesen verwenden, um zu symbolisieren logische Und die logische Oder. So wird dies nur true zurück, wenn Antwort eins, zwei, drei oder vier. Und das wird nur true zurück, wenn Antwort ist darüber hinaus auf beiden Seiten. Es ist also nicht eine, zwei, drei, oder vier. Und die Art, die Sie verwenden würden dass in einem Ausdruck - ROB: Oder eine Null oder eine fünf. JOSEPH: Null oder ein fünf. Entschuldigung. Ja, ja, ja. OK. Und im Laufe der bald hier, auf die gleiche Weise würde diesen Ausdruck zu verwenden, eine kleinere Ausdrucksseite eines Wird Vorbehalts Aussage, würden Sie es auch verwenden, die gleicher Weise durch nur darum, es in der die Klammern der If-Anweisung. Also das printf wird nur ausgelöst, wenn Antwort eins, zwei, drei oder vier. Haben Sie Fragen zum Kombinieren Ausdrücke? So gibt es eine weitere Bedingung Konstrukt nennen wir eine If / Else. Also im Grunde bedeutet dies nun, OK, wenn etwas, was ich wollte, um zu überprüfen, war nicht wahr ist, dann zu gehen und die Else durchzuführen, dass andere Aktion. Also in diesem Fall, fragte ich der Benutzer für eine ganze Zahl. Die ganze Zahl größer als Null? Ja? Nun, dann nahm sie eine positive Zahl. Wenn nicht, dann muss es negativ oder Null. So haben Sie eine negative Zahl abgeholt oder in diesem Fall Null. Ja. Oder eine Null. Und dann haben wir auch If / Else, Wenn und Else. Also das lässt uns führen eine Folge von Dinge nur, wenn die ersten, die scheitern. Also in diesem Fall, wir machen jetzt die letzte holen Null. Also, wenn sie weder eine positive noch abgeholt eine negative Zahl ist, dann müssen sie haben null abgeholt. Also es geht einfach unten die Kette wie diese. So ein Beispiel, wie ein Wenn sich von - Wenn ein / Else ist anders nur eine Folge von Ifs. Und dies ist eine häufige Frage, die Leute fragen, ist, nun ja, wenn man wie ein zu 95 in CS50, was das wird Programm sagen? SPRECHER 5: Sie bekam eine A. JOSEPH: Ja. Sie haben jedes einzelne einer von denen, rechts. Sie bekam ein A, B haben Sie, die Sie bekam ein C und ein D, oder? So bekommen alle diese ausgewertet in Ordnung. Während also eine 95 grßer ist als 90, ist es auch größer als 80, ist es auch mehr als 70, und es ist auch größer als 60 ist. Also du hast all diese Qualitäten. Und ich nehme an, Sie würden nur wollen, dass die A. Die Möglichkeit, das zu beheben, ist zu ersetzen die mit Else / Wenn 's. So in diesem Szenario sieht es, dass 95 mehr als 90, und dann tut es den Rest nicht bewerten der Aussagen. Haben Sie Fragen dazu? So gibt es eine andere Art von bedingten Struktur, die wir hier haben, die wir rufen Sie eine Switch-Anweisung. Also das können Sie im Grunde überprüfen was der Wert einer Zahl, die Sie setzen in den Switch-Anweisung ist. Also in diesem Szenario, wir sind Schalt n auf, und wir sagen, oh, wenn n ein, und drucken Sie diese Aussage. Und dann brechen, was bedeutet, Ausfahrt aus der Switch-Anweisung. Wenn es nicht eine, dann gut, nur schließlich lassen Sie sich von den Fällen. Und so prüft sie, ob es eine oder zwei oder drei, und er druckt entsprechend. Und was das Schlüsselwort default hier unten Mittel ist, wenn sie nicht eingegeben hat jede von denen, dann sagen ungültig. Also sagen wir, ich frage für n und der Benutzer gibt mir vier. Na ja, passt es keinem dieser Fälle, so wird es ausdrucken, was in der Standardsektion. Ja, in Frage zu stellen? SPRECHER 5: Können Sie Boolean verwenden Ausdrücke statt ein, zwei oder drei? JOSEPH: Die Frage ist können Sie mit Boolean-Ausdrücke statt einer, zwei und drei? Und in C, ich glaube, Sie kann das nicht tun. Aber auch in anderen Sprachen, die Sie vielleicht stoßen am Ende der Semester wie JavaScript, Sie können. Nun, würden Sie berechnen zunächst dieser Wert und es dann in die switch-Anweisung. Ja? ROB: Also Teil der Leistung des Schalters Aussagen aus denke, wenn man das getan hat als If / Else, so wie, wenn n gleich entspricht einer oder was auch immer. Else / Wenn n gleich gleich zwei, was auch immer. Else / Wenn n gleich gleich drei. Also der Weg das Programm laufen würde, ist es sequenziell nach unten gehen, die Liste und zu überprüfen, ist n ein? Nope. Ist n zwei? Nope. Ist n drei? Ja. Tun Sie dies. Während bei switch-Anweisungen, ist es tatsächlich in der Lage zu kompilieren es zu sein wirklich schnell. Und sobald sie sagt, Schalter, es sagt, alles in Ordnung, n zwei, ich bin sofort los, um zu springen, wo Ich soll die Ausführung beginnen. Ich werde nicht erst prüfen, ist n ein, ist n zwei? Es kann sofort tun beginnen was es tun soll. Und aus diesem Grund, kann es nicht nehmen Boolean Bedingungen. Oder wäre es zu tun haben, die sequentielle, wie, alles in Ordnung, ist n größer als Null? Else ist n größer als 10 oder was auch immer. JOSEPH: In diesem Fall, wenn Sie verwendet If / Else, wenn das, dann wird der Schalter würde etwa drei Mal laufen schneller als der If / Else, Wenn. Wir können den Schalter in solchen organisieren eine Möglichkeit, die wir nicht brechen nach jedem der Fälle. Also in diesem Fall bin ich der Partitionierung Zahlen, die wir in ein und wählen zwei, die nicht hoch Zahlen und drei sind eine hohe Zahl. So dass in diesem Fall ein oder zwei, wenn n, es wird den Fall getroffen und dann wird es durchfallen, weil es gibt keine Pause. Und es wird hier zu enden. Also, wenn wir ein Pick, wird es das tun printf und dann zu brechen, so dass keine der Dieses wird ausgeführt. Und natürlich, wenn sie in drei geben oder etwas anderes, dann wird es überspringen diese und nicht hin, und es wird stattdessen führen Sie die entsprechenden Zeile. Haben Sie Fragen dazu? Ja? SPRECHER 4: Würden Sie eine Fehlermeldung erhalten, wenn Sie hatte eine Pause nach Fall ein, aber es nicht etwas für sie zu tun? JOSEPH: Die Frage ist also würden Sie bekommen ein Fehler, wenn Sie eine Pause nach haben Groß ein, aber es gibt nichts zu tun? Und die Antwort ist nein. Sie werden nicht tatsächlich einen Fehler. Ja, hmm mm. So als eine Art ein wenig hier Wandel, Ich werde eine printf hier setzen. Whoops. So was würde das drucken, wenn Ich legte ein als Eingabe? Ja. Es würde Ihnen sagen, es dauerte nicht eine hohe Zahl doppelt, oder? Weil es diesen ersten Fall schlagen, es wäre nicht zerbrechen, und es fallen durch den zweiten Fall. Haben Sie Fragen dazu? ROB: Haben Sie weitere Fragen? JOSEPH: OK, abkühlen. Gut. Also es ist etwas anderes fordern wir ein ternären Operator, der im Grunde ein alternative Syntax zu tun, Wenn dann Else. Und es können Sie sie alle auf einer Linie zu tun. Also in diesem Programm, Ich frage den Benutzer nach n. Und wenn n größer als 100 ist, sage ich sie nahm sie eine hohe Anzahl. Else Ich sage ihnen, sie nahm eine geringe Anzahl. So können wir diese wirklich lange Syntax verwenden, String, S, und dann prüfen, ob n größer als 100, und weisen es entsprechend. Aber wir können so viel übersichtlicher machen mit dieser ternären Operator Syntax die eine Frage beinhaltet Zeichen und Doppelpunkt. Also das Fragezeichen ist im Wesentlichen eine Frage zu stellen, oder? ROB: Vielleicht Vergrößern auf die. JOSEPH: Ja. Guter Punkt. Das ist also die ternäre Operator. Ich zuerst die Frage stellen, n größer als 100? Wenn ja, dann führe ich das erste Teil vor dem Doppelpunkt. Wenn es nicht ist, dann führen die ich zweite Teil nach dem Doppelpunkt. So dass, wenn n größer als 100 ist, dann hebt es hoch und Puts dass in String s. Wenn n kleiner als 100 ist, nimmt es günstig und legt dann, dass in String s. So, dass diese großen Brocken kondensieren nach unten in genau diesem eine Zeile. SPRECHER 5: Ist das beliebt? JOSEPH: Ja, es ist sehr beliebt für Dinge, bei denen im Wesentlichen Sie wollen Sie eine Zuordnung auf Basis eine Art von Zustand. Und in diesem Fall haben wir versucht um einen Wert in String s zuweisen. Es ist nicht so - Ich glaube, ich weiß nicht wirklich lieber in anderen Fällen. Aber es ist besonders nützlich, für diese Aufgabe. ROB: Das ist ein ziemlich häufiges Muster wo Sie einige Variable haben, die Sie gehen zu sagen, wenn etwas, stellen diese Variable auf einen Wert, sonst setzen diese Variable auf einen anderen Wert. Und das ist das Szenario wo mit einem ternären. JOSEPH: Und Sie sparen vielen Linien, oder? Und es macht den Code wohl ein bisschen mehr lesbar. Ja, in Frage zu stellen? Lautsprecher 6: Bei einem ternären, können Sie gehen, String s equals s, Fragezeichen? Und dann könnte man, sagen wir, fünf verschiedene Optionen. Und je nachdem, was die Anzahl von n wurde, würden Sie einer von denen wählen? JOSEPH: Die Frage ist also, gibt es eine Art von Syntax, wo Sie Zeichenfolge tun können s gleich n ist, und dann mehr als zwei Optionen, die nach diesem Fragezeichen? Und eine einfache Antwort ist, nein, es ist nicht wirklich ein guter Weg, das zu tun, es sei denn, Sie nisten mehrere ternäre wollen Teilnehmer innerhalb der jeweils anderen. Sie könnte wie n größer als 100 zu tun, Fragezeichen, und dann noch ternären Operator, n größer als 50, Fragezeichen, und nisten es so. Aber in diesem Szenario ist der Code Erhalten Art unlesbar und chaotisch, und es könnte besser sein, gerade zu gehen Wenn ein / Else-Anweisung an diesem Punkt. ROB: Und auch, als eine Randnotiz, PHP falsch implementiert die ternären Betreiber, so dass verschachtelte Ternäre nicht einmal, wie sie sollten. JOSEPH: Ja. So wird es ein wenig verwirrend, vor allem, wenn Sie gehen verschiedene Sprachen. ROB: Es ist verwirrend genug, dass Sprachen sind falsch daran. JOSEPH: Also wirklich, nur um zu klären, nicht jeder weiß, was das % S tut hier? Haben Sie Fragen dazu? Ich denke, gerade für die Kamera, die% s im Grunde genommen lässt uns einen Platzhalter für einen String. Und dann am Ende, wir festlegen, dass die Variable, um in diese setzen wir wollen Platzhalter ist s. So dass im Grunde nimmt s und es bringt es auf hier. Und dann wird es ausdrucken, die Sie ausgewählt eine hohe oder eine niedrige Zahl abgeholt. OK. So Schlaufen ermöglichen Ihnen, die Dinge durchführen in kreisenden Bewegungen, oder? Sie könnten dies erlebt haben Kratzer in Form von Forever Schleifen oder Repeat Until oder Wiederholen einer bestimmten Mal. Warum ist dies so gut für uns? Nun, in C, sagen wir, wir haben diese Lied im Scratch umgesetzt, dass singt, das ist das Lied dass nie endet. Es geht nur auf und auf und auf immer und ewig. Nun, man kann nicht wirklich ein Programm machen dass eine unendliche Anzahl von printf Aussagen, oder? Also in diesem Szenario eine Möglichkeit dass man diese Arbeit zu machen und um sie für immer zu drucken ist, stattdessen eine While-Schleife. So eine While-Schleife wird ausgeführt, was in den Körper der beiden Klammern, dazu gehört, auf, was der Zustand ist. So dass in diesem besonderen Beispiel vor, wenn wir dies für immer zu drucken, wollen, was könnten wir tun? Nun, sicher, nicht wahr? Also diese Art kombiniert die Idee von einigen Booleschen Ausdruck zusammen mit einer Schleife. Und wir Boolean gelernt Ausdrücke früher. Also, wenn der Zustand im Inneren des Zwar bleibt wahr, daß diese Schleife auf und auf und auf ausführen. Und in diesem Fall, wenn wir liefern sie nur mit echten, bewirkt dies eine unendliche Schleife, die den Song auf und druckt auf und wie wir vorher ohne gewünschte mit einem Programm, das eine unendliche hat Anzahl der printf-Anweisungen, das ist nicht möglich. Also mehr zwingend, obwohl, Sie können dies mit ein verwenden Variable und eine Bedingung. Also sagen wir, wir wiederholen möchten die Satz, völlig durchgeknallten, 10-mal. Also, was Sie mit einer While-Schleife tun können, ist Sie können zunächst einen Zähler initialisieren Variable außerhalb des While-Schleife bis 10. Und dann im Grunde jedes Mal, wenn Sie gehen durch die While-Schleife, die Sie ausdrucken die Aussage, und dann können Sie verringern die Zählervariable, bis zum Ende, irgendwann, wenn wir subtrahieren ich genug mal, 1 aus ich oft genug - und nur zu klären, habe ich minus minus bedeutet, dass ich gleich I minus 1. Das wird im Grunde bringe ich auf die Punkt, wo ich einmal getroffen Null diese Bedingung ist nicht mehr wahr und so tritt es aus der Schleife. So völlig durchgeknallten druckt nur 10-mal. Haben Sie Fragen zu einer While-Schleife? OK. So gibt es eine Weise, die wir tun können, was wir gerade hat in einem prägnanten Weise mit nennen wir eine For-Schleife. So eine For-Schleife besteht aus einer Initialisierung, eine Bedingung und eine Update, so wie wir vorher hatten in dieser While-Schleife. Werfen wir also einen Blick. In dieser While-Schleife hatten wir ein Initialisierung, dann hatten wir ein bedingen, dass wir überprüft. Und dann hatten wir ein Update Schritt an der Spitze. Mit einer For-Schleife, dies im Grunde nimmt diese drei Dinge und kondensiert nach unten in eine Zeile. So die erste Sache, die es in der tut For-Schleife ist die Initialisierung. Und dann haben Sie ein Semikolon, und dann Sie die Bedingung, die ich zu tun ist größer als Null geht dort, und dann das Update Schritt. Also das wird auf die durchgeführt Ende der Schleife. Also diese beiden Programme Wesentlichen gleichwertig. Haben Sie Fragen? Also, was ist ein Unterschied zwischen diesen beiden? Kann jemand es aus? Es könnte ein bisschen subtil sein. Es ist nur ein sehr kleiner Unterschied. Ja? SPRECHER 5: Sie würden nicht in der Lage, zu verwenden die ich Variable außerhalb der For-Schleife [Unverständlich]? JOSEPH: Genau. Das ist also etwas, das wir bekommen später als Geltungsbereich von Variablen. Aber im Grunde, diese int ich Leben außerhalb dieses While-Schleife. Also, wenn diese While-Schleife ist getan Ausführung, werde ich in der Lage, wie ich später nutzen auf dem Programm. Während bei dieser For-Schleife, diese int I innerhalb dieser For-Schleife Gültigkeitsbereich. Und weil sie innerhalb dieses Bereichs liegt der For-Schleife, das beginnt an den Enden mit Klammern und die geschweifte Klammer drüben. Alles, was innerhalb der erklärt hat kann hier nicht im Freien verwendet werden. Also, wenn ich versuche, ich draußen verwenden, wird es sagen Sie mir, nicht gemeldeten Symbol. Und im Grunde, würde ich nicht in der Lage, es zu benutzen. ROB: Und auch, vor 10 Jahren, in buchstäblich alle Fälle sind geschweiften Klammern was Sie verwendet, um zu bestimmen, der Umfang der Variablen. Also dort, int I gleich 10 innerhalb dieser erklärt Satz von geschweiften Klammern. Und so ist, dann, so lange wie Sie versuchen, ich vor diesem geschweifte Klammer, ist es in Ordnung. Sie können sehen, die bei der Eingabe machen, können Sie siehe Bindestriche und ein std, gleich, c99. Damit ist eine spätere Version von C, die GCC eingeführt hat, dass auch gibt diese Verknüpfung. Also diese verwendet werden, um nicht in C erlaubt und Sie sehen, warum, weil diese int Ich außerhalb dieses geschweifte Klammer aber es ist immer noch als in der sein Umfang dieser geschweiften Klammern. Aber das ist eine sehr bequeme Sache, und so ist es eine gute Erweiterung. JOSEPH: Sie haben Fragen? OK. Also, was ist sinnvoller ist, dass manchmal Sie Art von Dynamik wollen Ihre Schleife, oder? Sie müssen nicht nur unbedingt drucken möchten völlig verworren die ganze Zeit, die Sie wollen von Countdown 10 oder so etwas. Und so können Sie die Zählervariable verwenden innerhalb dieser Schleife auch. Und in diesem Fall dieses Programm einfach zählt von 10 ganz nach unten. Und was bedeutet es nicht drucken? Es druckt nicht Null ist, Recht, denn wenn - Ja, es ist auch nicht gedruckt 11. So ist es nicht gedruckt wird Null, denn wenn Ich Null ist, denken Sie daran, es wertet die Bedingung, bevor es auf um die Schleife auszuführen. Und wenn ich Null ist, ist dies falsch, so es nicht ausdrucken Countdown Null, es gibt einfach Zählung um 10 den ganzen Weg bis zu 1. Wenn wir wollten eigentlich auf Null zu drucken, dann würden wir ein Gleichheitszeichen setzen nach dieser größer als Zeichen. OK. Also eine Möglichkeit, Eingabevalidierung zu tun, was ist, wenn Sie den Benutzer auffordern, tun etwas, um sicherzustellen, dass sie machen wollen, dass Sie Ihre Anweisungen zu befolgen, ist die Verwendung von Die while-Schleife, oder? Also in diesem Fall bitte ich für eine positive Zahl und dann bin ich Eingabe wartet. Und dann habe ich überprüft, während der Eingang kleiner als Null ist, immer wieder fragen sie. So lange, wie sie mir eine Nummer zu geben dass nicht positiv ist, immer wieder zu fragen, fragen immer wieder, immer wieder zu fragen. Aber was ist schon ein wenig komisch über diese? Oder was scheint nicht optimal zu diese Struktur hier richtig? Anyone? Ja? SPEAKER 6: Du wieder der Befehl zweimal. JOSEPH: Richtig. So haben wir zwei Aussagen printf hier, nicht wahr? So gibt es einen Weg, wir könnten diese nur erhalten, bis auf eine, die würde unsere Code leichter zu lesen und eine etwas mehr sauber. Und dann würden wir nicht zu haben, Holen Sie haben in doppelt so gut. Und eine Möglichkeit, dies zu tun ist durch Verwendung einer Do-While-Schleife. Und eine Do-While-Schleife ist im Grunde ein andere Form von einer While-Schleife, wo was innerhalb der geschweiften Klammern ist wird mindestens einmal ausgeführt. Also hier erkläre ich, int Eingang, außerhalb zuerst. Und dann habe ich einfach sagen, tun dies Anweisung, während der Eingang kleiner als Null ist. So trifft es die ersten Do. Es führt immer diese mindestens einmal, so dass sie immer den Benutzer fragen zur Eingabe mindestens einmal. Und dann wertet er, dass Eingaben, und es geht weiter im Kreis. Ja, in Frage zu stellen? SPEAKER 6: Gibt es eine Möglichkeit, es zu tun [Unverständlich] Typen, wie wenn Sie sagen, GetString, und jemand [unverständlich] ist es eine Möglichkeit, [unverständlich] JOSEPH: Die Frage ist also, gibt es eine Weg zur Eingabevalidierung tun, wenn der Benutzer nicht in die Ordnung zu bringen Variablentyp? Also, wenn wir fragen, für eine int, und sie geben Sie uns eine Zeichenfolge anstelle. Und in den Funktionen, die wir umsetzen für Sie, GetInt, GetString in allen jene Funktionen, die es eigentlich schon tun, diese Art von Grundtyp Eingangs Validierung unter der Haube. Also, wenn Sie mit den Funktionen, die wir sind Sie gab, die Sie nicht wirklich zu haben. Aber wenn Sie wollen, um mehr zu sehen, wie Sie können tatsächlich tun, werden Sie sehen können unter der Haube auf der Datei I/O-- nicht Datei, die Standard-I / O-Funktionen wie ein Lesen von der Standardeingabe und Standardausgabe. Und Sie können ein besseres Gefühl zu bekommen dafür, wie Sie das tun. ROB: Ein Problem ist jedoch, speziell mit der Sie beispielsweise sagte, erwarten Sie eine Zeichenfolge und ich geben Sie eine int. Wie würden Sie den Unterschied zwischen absichtlich wollen die String-123 gegenüber wollen die int-123? So string, ist ziemlich viel da ist es kein Validierung, es ist nur, was sie eingegeben werden Sie interpretieren als String. Int ist einfacher, denn egal, die Eingang, den Sie von der Benutzer nehmen, sind Sie immer sie einen String. Und damit kann man dann String zu überprüfen, sind alle diese tatsächlich Ziffern? JOSEPH: OK. Haben Sie Fragen zu einem Do-While-Schleife? ROB: Oh, und das ist auch - geht zurück auf den Geltungsbereich, ein etwas gemeinsam Fehler versucht, einige lokale verwenden Variable in diesem Do-While Schleife innerhalb dieser Bedingung. Und tatsächlich, wenn wir nur losgeworden dies und sagte, int Eingang gleich GetInt, dann wird der Compiler bei schreien uns, denn Eingang existiert nicht außerhalb des Geltungsbereichs diese geschweiften Klammern. JOSEPH: Und das ist, warum wir brauchen diese Formation hier. OK. So kann man auch von einem brechen Schleife vorzeitig, wenn Sie wollen. Also das ist eine andere Art der Umsetzung, was wir gerade umgesetzt. Und statt der Verwendung der Bedingung in den Klammern verwenden wir ein Wenn Anweisung innerhalb des Körpers der Do-While-Schleife. Und im Grunde ist die Eingabe, wenn schließlich größer als Null ist, werden wir brechen aus der Schleife. Und so gehen wir alle die Art, wie hier unten. Und Sie können sehen, dass diese würde Wahrscheinlich werden bei diesem bevorzugten Szenario, denn es ist ein wenig etwas sauberer und ein wenig Bit leichter zu lesen. Während diese, Sie Art haben extra Linien in sie. Es ist nur ein wenig hässlicher, Ich denke, in einem gewissen Sinn. Ja, in Frage zu stellen? SPRECHER 4: Wird brechen nur erhalten Sie aus einer Reihe von Klammern? JOSEPH: Richtig. Die Frage ist also nur brechen erhalten Sie aus einer Schleife? Und die Antwort ist ja. Also, wenn Sie für For-Schleifen geschachtelt haben, Beispiel, wenn ich für int I 0 entspricht bis 10 und dann für int J gleich 0 bis zum 10., wenn ich aus dem inneren brechen Schleife, werde ich immer noch gehen zu der äußeren Schleife. Also, es wird halten Ausführung der Operationen an der Außenseite. Haben Sie Fragen dazu? Ja? SPRECHER 5: Aber brechen nur Funktionen für geschweiften Klammern, nicht für andere Aussagen zu? [Unverständlich] JOSEPH: Die Frage ist also brechen Funktion nur für Schleifen im Gegensatz zu Wenn andere Aussagen wie? Und ja, ist das so, weil Sie brichst aus einer Schleife, rechts, in einem gewissen Sinn. ROB: In den allermeisten Fällen ist es Dies ist die Art von Wenn etwas, dann brechen. So müssen Sie nicht haben, um zu brechen, um zu gelten Wenn die, die um ihn herum Wickeln wird. Und dies ist auch nicht viel von einer Schleife, aber denken Sie daran, dass Schalter sind auch von durch Pausen unterbrochen. Wir sahen den Pausen genutzt mit Schaltern vor. JOSEPH: Und Sie können sie auch in While-Schleifen und For-Schleifen. Haben Sie Fragen? OK. Also das nächste up ist Funktionen. Sie könnten also eine dieser BYOB verwendet haben Blöcke im Scratch-Projekt. Und das im Grunde können Sie definieren einen Satz von Anweisungen zu befolgen. Und was ich damit meine ist, wir denken zurück zu Mathematik, Recht, Algebra. Sie haben das, was wir eine Funktion von x nennen, eine Variable, und sagen wir mal so Funktion f von x ist gleich x plus 5. So können Sie von f von x als dieser schwarzen denken kann Box, die 15 nimmt und dann 20 produziert. So allgemein eine Funktion etwas, das einige Eingaben und nimmt erzeugt dann einige Ausgänge. Und warum sind Funktionen gut? Sie sind gut für eine Reihe von Gründen. So jemand will einen Stich nehmen zu welcher Organisation bedeutet? In Bezug auf die Funktionen, warum sind hilfreich? Ja? SPRECHER 4: Es macht Ihre Code besser lesbar. JOSEPH: Richtig. Damit wird eines der Dinge ist, es macht Ihr Code besser lesbar, oder? Anstatt wie int x gleich x mal x mal x, kann ich Würfel von x haben, die mehr und mehr lesbar ist verständlich für den Leser. Organisation ist auch in Bezug auf Aufspaltung der Code in überschaubare Abschnitte, so dass anstatt zu versuchen, implementieren diese alle in einem langen Abschnitt in Haupt, können Sie Art es aufspalten in wie, OK, schreiben wir eine Funktion , etwas zu würfeln, schreiben wir ein funktionieren, etwas zu quadrieren. So können Sie es in kleine aufzuteilen, kleine Teile, die Sie angehen können im Gegensatz zu versuchen, anzugehen ein großes Problem auf einmal. ROB: Oder noch klein, wenig Teile, die Sie und ein Partner anzugehen. JOSEPH: Ja. ROB: Anstatt also sowohl von Sie versuchen, ein Implantat funktionieren in der gleichen Zeit. JOSEPH: Vereinfachung. Wer möchte eine Vermutung nehmen? Ja? SPRECHER 5: Mehr Wiederholung. JOSEPH: Richtig. Also eine Sache, die Sie tun können, mit Vereinfachung ist, dass es auf eine Art die gleiche Richtung wie die Wiederverwendbarkeit ist, dass sobald ich einen Würfel-Funktion, kann ich benutzen Sie einfach, dass über und über und über wieder in meinem Programm statt Tippen x mal x mal x und über immer und immer wieder. Und Vereinfachung auch hier nur bedeutet dies, macht den Code Art leichter zu debuggen, wenn man einmal gespalten diese in die Funktionen. Denn dann können Sie, wo lokalisieren Ihre Probleme Art sind. Haben Sie Fragen? So eine Idee ist Abstraktion, oder? Diese Black Box. Wie wissen Sie, was tut GetInt auf eine Eingabe von dem Benutzer zu empfangen? Wir haben Ihnen gesagt, nicht wirklich, oder? Alles, was wir dir gesagt habe ist GetInt tut genau das, was sie sagt, es tut. Also selbst wenn wir nicht sagen, wie es funktioniert, wissen Sie immer noch. So dass in diesem besonderen Fall ist dies eine vierfache Funktion, die funktioniert verschiedene Dinge zu einem Eingangs um eine Ausgabe zu erzeugen. Und Sie können eine Zahl vervierfachen durch Multiplikation mit Vier. Oder Sie können, was wir Bit verschieben sie durch zwei. Und wir werden diese decken ein wenig später. Und es gibt keine Notwendigkeit, zu wissen, wie diese funktioniert tatsächlich solange es funktioniert wie angegeben. Also unter der Haube, ich könnte wie, kehren Eingabezeiten acht geteilt durch zwei. Und Sie würden nicht wissen, oder? Alles, was Sie wissen müssen, ist es tut, was es sagt. Also das ist der nützliche Sache über Abstraktion. Und noch etwas ist irgendwie diese Idee lokalisieren Sie Ihren Code ein bestimmten Abschnitt. Also, wenn Sie ein Problem haben, brauchen Sie nicht müssen alle über den Code gehen versuchen zu beheben, wo das Problem war. Also in diesem Fall, ich umgesetzt Würfel falsch. Ich dachte, Würfel wurde Multiplikation durch drei. So dass in diesem Fall ist dies ein Programm, dass, nur multipliziert wurde von drei überall. Und es ist ein weiteres Programm, das hat faktorisierte Würfel in eine Funktion. Und jetzt, wenn ich meinen Fehler beheben hier muss ich jede einzelne Zeile beheben der Code in diesem Programm. Während auf der anderen Seite, wenn ich die Funktion, ich muss nur ändern was falsch war an einem Ort. Also in der Informatik, die wir rufen und Ausgänge. Eingänge werden als Parameter bezeichnet oder Argumente und gibt heißen Rückgabewerte. Und wir werden sehen, wie diese hilft uns Art der Definition einer Funktion in einer Sekunde. Das ist also eine Funktionsdefinition für Cubing. So dauert es einen Eingang, und dann es gibt diese Zahl mal selbst dreimal. Also lassen Sie diese nach unten zu brechen. So haben wir eine Funktionskopf, die besteht im Wesentlichen aus drei Dingen. So haben wir die Parameter, die sind, wie ich schon sagte, die Ein in dieser Funktion. Und dann geben wir der Funktion einen Namen. In diesem Fall, es heißt Würfel. Und dann geben wir, was der Typ von der Rückgabewert. Also in diesem Fall, mein Würfel-Funktion nimmt in einer ganzen Zahl und auch gibt eine ganze Zahl. Also, wenn ich pass in zwei, eine ganze Zahl, es acht zurück zu mir, die eine ganze Zahl ist. So Rückgabetyp Name-Parameter. Fragen dazu? Und dann ist der Rückgabewert tatsächlich am Ende mit den Worten Rückkehr angegeben und dann wieder was auch immer enthält den Rückgabewert. Also in diesem Fall, wenn wir sie alle zusammen, nimmt eine Funktion Parameter, es ist etwas genannt wird, und es etwas, das die Art ist zurück dass wir sagen, dass es sein würde. Haben Sie Fragen? So wie wir eine Funktion? Nun schreiben wir eine Funktion und dann wir sie verwenden in unserem Programm, oder? Also rief ich sie Cube, und dann kann ich Cube verwenden. Aber was ist wichtig zu beachten, ist, dass die Reihenfolge wichtig. Wenn ich unter Haupt Würfel, ist es werde in Würfel laufen. Und an diesem Punkt, es gibt nichts genannt Würfel im Programm, und es ist gerade dabei, wie ich zu haben Keine Ahnung, was Würfel ist. So wird es Ihnen sagen, implizit Deklaration der Funktion. Das ist der Fehler, die sich zeigt. Und so dass in diesem Fall ist unter Würfel Haupt, so dass es nicht geht es wissen. SPRECHER 5: So ist in der Regel Haupt die letzte Funktion definiert? JOSEPH: Die Frage ist also, Haupt ist in der Regel der letzte Sache, die Sie definieren möchten? Und nein. Es ist, weil wir in der Regel gerne Haupt an der Spitze zu sein, oder? Denn das ist das erste, was Sie möchte der Programmierer Öffnen der Programm zu sehen. Und so, wie wir dieses Problem lösen wir von Haupt wollen an der Spitze zu sein, aber die Funktionen, die wir wollen, wir wollen sie unter sein Haupt noch nutzen zu können sie innerhalb der Haupt? Nun verwenden wir, was wir ein Funktionsprototyp. Also, was im Wesentlichen eine Funktion Prototyp wird, wird es nimmt erste, was die Unterschrift oder die Funktionskopf von dem, was wir umsetzen wollen, nach unten hier, und wir haben es bei die Oberseite eines Programms. Also in diesem Fall sagen wir, dass, na ja, später in unserem Programm, wir gehen ein Versprechen, dies umzusetzen Funktion namens int Würfel, der findet eine ganze Zahl Eingang. So, jetzt, denn das ist oberhalb der Haupt, Hauptsache, es geht zu sagen, oh, gut, später im Programm, das wird sein gibt, so kann ich darauf verweisen, so dass ich lass es einfach durch zu gehen für jetzt. Und dann an der Unterseite, implementieren wir Kubus. Und dann wird Haupt nur sagen, Nun, es wird der Link zu sortieren diese zwei Symbole zusammen. Und wir abdecken, was das bedeutet später. Und so werden es wissen, dass dies die Würfel-Funktion, dass es verwendet werden soll. ROB: Das [unverständlich] zu wollen Haupt unten oder top, ich habe es gesehen. Es gibt Dinge, die einfach gerne an der unteren Haupt zu setzen. Aber sobald ein Projekt bekommt besonders großen, in der Regel ist in ein Haupt Datei alle ihre eigenen. Und an diesem Punkt, wie die int Würfel Linie würde - innerhalb von stdio.h sind ein Haufen Zeilen wie diese int Würfel int Eingabezeile. Und so sind diese Prototypen Dinge, die Sie neigen dazu, in Header-Dateien an gesagt, welchem ​​Punkt ist es egal. Nun, es spielt keine Rolle. Diejenigen, gehen immer an der Spitze. Und wenn Haupt ist keine Datei, die alle ihre eigenen, Sie müssen nicht darum kümmern einzelnen Funktionsprototypen in der Datei. JOSEPH: Und wir werden auf diese ein wenig zu Etwas später, als Rob zu sprechen beginnt über das Kompilieren. Und so gibt es auch einen Unterschied zwischen Parameter und Argument. Und Parameter ist genau das, was wir rufen, wenn diese Eingänge definieren wir die Funktion. Und wir nennen es ein Argument, wenn wir tatsächlich passieren in der Funktion. So dass in diesem Fall ist dies ein Parameter, wie gesagt. Und wenn wir tatsächlich nutzen es dort, Würfel von x, dann x selbst ist was wir ein Argument nennen an die Funktion Würfels. ROB: Also Argumente Parameter sind - gibt es diese Unterscheidung, sehr austauschbar verwirrt. An diesem Punkt ist für mich, es ist wie eine der diese Worte, dass, wenn ich es sehe in die wilde, kann ich nicht helfen, aber sofort Frage, ob sie es verwenden in der richtige Rahmen, weil die Unterschied ist subtil genug, dass nur neigt jeder - Ich bin fast immer sagen Argument unabhängig davon, was ich meine. JOSEPH: Und Funktionen sind auch nützlich für das, was wir Nebenwirkungen nennen. So kann eine Funktion keine Eingänge zu nehmen, und es können aber auch keine Ausgänge. Also in diesem Fall bin ich Definition eines Unterprogramms, die nicht hat Rückgabewert. Und um das zu geben, verwenden wir nennen wir eine Lücke hier. Und so die Nebenwirkungen dieser Funktion ist, dass es Sachen druckt nur aus auf die Seite. Es ist nicht wirklich übernehmen keine Eingänge, und es funktioniert nicht alle Ausgänge tatsächlich produzieren. Aber dies könnte nützlich sein in dem Sinne Wenn Sie beispielsweise debuggen möchten etwas in Ihrem Programm, wenn Sie wollen , ein wenig Unterprogramm schreiben, dass druckt, sagen wir, der Inhalt Speicher oder so etwas. Usw. Diese Nebenwirkungen sind manchmal nützlich außerhalb des Kontextes der gerade wie Ein-und Ausgänge. Haben Sie Fragen? Und zu diesem besonderen Segment zu beenden, was hat das Programm? Ich gebe Ihnen ein paar Jungs Sekunden, um es zu lesen. Auf einer sehr einfachen Ebene, was wir wollen sagen, ist, dass es tauscht x und y, oder? So wie viele von euch eigentlich denken dies wird x und y tauschen? Heben Sie Ihre Hand. Niemand. OK. Wer denkt, dass es wird nicht vertauschen x und y? Und die Summe war nicht der gesamte Raum. Also manche Leute sind sich nicht sicher. OK. Das ist vernünftig. Lassen Sie uns also durch das, was passiert, wenn zu gehen Sie funktioniert in erster eigentlich nennen Um diese Frage zu beantworten. Also das ist, was Speicher Art sieht aus wie. Das ist wie eine Art vereinfachtes Modell von dem, was Speicher aussieht, wenn Sie ein Programm ausführen. Es gibt also so etwas wie der Stapel hier unten und so etwas wie den Haufen. Und diese Richtung wachsen Mitte der Erinnerung. So dass in diesem besonderen Fall, wenn Sie eine Funktion aufrufen, es wird auf den Stapel gelegt. Und dann, was auch immer, dass enthalten Funktion bleibt in dem, was wir nennen das Rahmen-Funktion Stack. Und so eine nette Visualisierung erhalten Dazu let's - zum Beispiel wir die Hauptprogramm zuvor. Und innerhalb von Haupt-, riefen wir Kubus. Also Haupt würde zuerst auf den Stapel Rahmen, denn es ist die erste Funktion das nennt. Und dann, wenn Würfel innerhalb der genannten Haupt, wird es auf der Oberseite des Haupt setzen innerhalb des Speichers. Also, was Sie hier feststellen, dass Würfel hat seine eigenen Parameter und ihre eigenen Einheimischen. Also, wenn Sie wirklich etwas passieren, um eine Funktion, die Parameter, die es wird sind Kopien von dem, was war in von der Haupt geleitet. Und irgendwie erklären, wollen wir zu Fuß durch ein Programm. So haben wir die Stapel, das ist nur der Stapelteil. Und was wir tun, ist, dass wir zuerst zu initialisieren x und y eins und zwei. So haben wir diese kleinen Boxen. Sie sind im Haupt Stack sitzen Rahmen auf dem Stapel. Sie enthalten eins und zwei. Jetzt rufen wir Swap. Was passiert ist, passieren wir in x-und y- Swap-und Swap seine eigenen Kopien erstellt der diese Variablen verwenden, um in der Stapelrahmen. So, jetzt da drüben, wir haben eine, welche enthält den Wert, x hatte, und b, die enthält den Wert, y hatte. So ein, zwei. Und Sie werden feststellen, dass diese getrennt von x und y innerhalb des Haupt. Also haben wir jetzt eine vorübergehende Variable auf eine enthalten. Wir legen gleich b, so ist es Änderungen von einer auf zwei. Und dann setzen wir b gleich temp, was man ist. Und dann jetzt beenden wir dieser Funktion. Wenn Sie sich verlassen der Funktion, die Stapelrahmen wird aus dem Stapel geholt. Wir nennen es zu schieben. Sie drücken einen Stapelrahmen auf den Stapel und wenn Sie Pop vom Stapel. Und so was passiert, ist alles, was war in diesem Stack-Frame Art nur geht in Flammen auf. Und so, dass es nicht mehr. Aber was wissen wir schon? Wir haben nie die tatsächlich geändert Werte von x und y, oder? So blieb die lokale Haupt. Und indem man die Dinge in swap, wir diese Werte eigentlich nie geändert. Und was machen wir das nennen? Wir nennen diesen Wert vorbei. Also in C, wenn Sie Dinge in geben Funktionen, ihnen geht es nach Wert und eine Kopie davon für die Funktion zu bedienen. Und wir werden über so genannte lernen Übergabe als Referenz später, aber das ist ein Weg, können Sie dieses Problem lösen. Aber wir werden nicht zu befürchten dass erst später. ROB: Und tatsächlich, dieser Begriff, Weitergabe Bezug genommen wird, so ist C nicht einmal vorbei verweisen. C ausschließlich vorbei ist von Wert. Egal, was Sie tun, Sie sind immer Geben einer Kopie von etwas. Es ist nur so, dass, wie ich irgendwie erwähnt dass vor mit Zeigern und dass ein String ist wirklich nur vier Bytes, die auf irgendwo im Speicher. Nun, wenn ich diese Zeichenfolge und es ist sagen mir, das ist, wo der String - Nun, wenn ich diese Zeiger auf diese Stellen im Speicher, dann kann ich ein geben Kopie der Zeiger auf eine Funktion, und diese Funktion noch weiß, wo in Speicher ist. Also diese beiden Zeiger zeigt an der gleichen Stelle im Speicher und das ist, wie wir in der Lage sein, die Dinge über die ändern aktuellen Stapelrahmen. JOSEPH: Wollen Sie zu tun Kompilieren? ROB: Nein, es ist 05.30 Uhr. JOSEPH: OK. Es ist 05.30 Uhr. OK. So werden wir behandeln Kompilieren Ich denke, in der nächste Abschnitt, Englisch oder auf Führer wird an diesem Punkt. Und - ROB: Noch Fragen? JOSEPH: Sie haben Fragen? Ja? SPRECHER 5: Verwenden von Zeichenketten CS50, jede Funktionen, die wir nutzen wollen, um für die, das wird wie C-Funktionen sein. CS50 wurde nicht in und gegangen machte keine zusätzliche. ROB: Richtig. Jede der C wie [unverständlich], Sie würden die auf unserer Saiten verwenden. JOSEPH: Und eine letzte Sache, die ich will zu erwähnen ist, dass wir einen Styleguide für diese Klasse. ROB: Oh, ja. JOSEPH: Also, wenn Sie noch von einem kommen Hintergrund der Programmierung vor, Sie vielleicht bestimmte Konventionen haben, wenn Sie Code wie wenn man Klammern auf der gleichen Zeile oder bestimmte Möglichkeiten der Einzug oder Benennung Ihrer Variablen. In dieser Klasse zu folgen, wollen wir ein spezifische Styleguide gerade weil, Nun, wenn Sie gehen und arbeiten in Industrie, Sie gehen zu erwarten sind , um die Style-Guide der Folge Unternehmen, an denen Sie gehen, um. Wie zum Beispiel, ich glaube, Facebook hat eine besondere Art der Namensgebung Konvention. Und es gibt Unterschiede zwischen Kamel Gehäuse Variablen und wie trennt sie durch Unterstriche. Und ich glaube auch, vor allem, wie zum Beispiel, Einzug, oder? Wir beginnen dort, wo geschweifte Klammern der Zustand ist, und sie sind in der nächsten Zeile. Und wir setzen auch in geschweiften Klammern auch wenn es nur eine Linie. Und eine Menge Zeit, es gibt Möglichkeiten zu tun, es, wo man diese Zahnspange lassen aus, wenn es nur eine Linie unter der If-Anweisung. Aber in dieser Klasse zu folgen, wollen wir ein spezifischen Style Guide nur so erhalten Sie auf diese Art der Sache eingesetzt. ROB: Ja, und Style 50 wird sich Durchsetzung dieser Style-Guide, und wir sind werde Style 50 verwenden grade Code. So macht es die Dinge einfacher für uns und hoffentlich nicht Dinge machen, die viel schlimmer für Sie angesichts der standardisierten Stil sollte nicht so sein, unrealistisch. JOSEPH: Und schließlich, um den Stil zu finden zu führen, gehen Sie zu manual.cs50.net/style. Und ja. SPRECHER 4: Gehst du zu erzwingen alle Zeichen pro Zeile? ROB: Ja. JOSEPH: Sorry, Jungs. ROB: Das ist, wie einer der einzigen. An diesem Punkt bin ich mit 120 OK. Ich bin OK mit Spruch 120 Zeichen pro Zeile. Ich verstehe es als eine Grenze. Ich denke, 80 ist so klein, aber wir sie durchsetzen. JOSEPH: Ich persönlich denke, mit C, 80 Zeichen ist OK. Wenn Sie immer auf andere zu starten Sprachen wie JavaScript und PHP, nicht so vernünftig, nur begrenzen es zu 80 Zeichen. OK. Nun, das war der Super-Abschnitt. Will jemand Süßigkeiten? SPRECHER 4: Ja.