[Powered by Google Translate] DAVID J. MALAN: All right, dies CS50 und das ist das Ende der Woche 1, sind so Karten in Studie und die Gesamtzahl der Klassenkameraden, dass Sie in diesem Jahr haben, ist 745. Und wir sind so begeistert, dass so viele von euch in der natürlich in diesem Semester, aber auch wenn dies natürlich ist so groß, erkennen, dass es diese Dinge ist wie Freitag Mittag, wie Bürozeiten, 15-köpfiges Abschnitte, und so weiter, sind wirklich bedeutete, diese intime erstellen Umwelt. Also auch wenn wir vielleicht einmal oder zweimal pro Woche versammeln sich hier in Sanders, wissen, dass viel von Ihrer Erfahrung in diesem Kurs wird sehr hands-on sein, auf der Seite von deinen Klassenkameraden und das Lehrpersonal. So hier gehen wir, Herbst 2012. So erinnern daran, dass wir das letzte Mal auf einem Zettel der beendeten Ungenauigkeit, reden über die Darstellung von Zahlen. Und wir sahen uns an der Ausfälle, was passiert ist, in der realen Welt, wenn es zu Missverständnissen kam wie Computer funktionieren. Nun, heute werden wir ein weiteres jener Ideen überdenken sowie weiterhin unsere Diskussion des CS50-Client und C und was es bedeutet, wirklich Programm. Aber zuerst, nur ein paar Wirbelwind Ankündigungen. Abschnitte beginnen an diesem Sonntag, und die erste Woche ist immer ein bisschen einen schnellen Start, denn wir haben nur in Ihrer Sektion Formen. Wir tun das gleiche, jetzt, mit den Lehr-Stipendiaten, jetzt dass sie ihre Pläne wissen, so dass wir mit dem Ziel, durch Samstag Morgen, um sich mit Ihnen mit Ihrem Abschnitt Zuordnung und TF. Erkennen, dass sie beginnen den nächsten Tag, Sonntag oder Montag oder Dienstag. Und dann werden wir aufnehmen Abschnitt Veränderungen, wie sie entstehen in den kommenden Tagen. Sprechzeiten sind unterdessen wieder heute Abend, 08.00 Uhr bis 11, Annenberg sowie morgen Abend. Auch wenn das Problem Sets sind in der Regel aufgrund donnerstags mittags, merkt man bis zu fünf späten Tage zu verbringen, damit die Verfügbarkeit der Bürozeiten donnerstags, wenn Sie Bargeld in einem dieser späten Tage und damit einreichen etwas auf Freitag. Lassen Sie mich darauf hin, dass Scratch unter den mehr Spaß macht, unter den mehr low key Problem Sets. Und ich würde auf diesen späten Tagen hängen, strategisch, nur zur späteren Verwendung in den Semesterferien, wenn das Leben beginnt, sich in die Quere kommen mit Mittelklausuren und andere Klassen. Problem Set 1, mittlerweile würde auf den Verlauf der geschrieben werden Website am Freitag, als an der Strecke zu Fuß sein durch Video, Willen, um 2:30 Uhr am Freitag gefilmt werden und dann online veröffentlicht am nächsten Tag. So landeten wir am Montag. Ich will - eigentlich beachten Sie hier. Da die Klassen - weil Sanders nicht genau zu verleihen sich lässig Q & A hin und her furchtbar gut, wir sind gehen, um etwas versuchen, ein wenig neu in diesem Jahr, wobei wenn Sie sich nicht wohl erhöhen Ihre Hand oder einfach nur lieber nicht heben Sie Ihre Hand in einem Raum wie diesem, werden wir einige der Lehre Stipendiaten und CAs haben Besatzung cs50.net/discuss während der Vorlesungszeit. Also, wenn Sie haben eine Frage, weil ich war völlig Unklar über etwas, oder du bist neugierig einige Thema, versuchen Entsendung es dort. Kennzeichnen Sie es mit einem Etikett der Vorlesung, und wir werden unser Bestes tun, heute und nächste Woche - wir werden versuchen, diese aus - zum Bereich IT entweder elektronisch, online, oder wenn es sich anfühlt, sollten wir wirklich auf sie en masse, einer der Lehre Stipendiaten oder CAs ihre Hand heben und fragen anonym in Ihrem Namen. So geben wir dies eine ausprobieren und sehen, wie gut das funktioniert. Aber, mit allen Mitteln, auch weiterhin an den Händen, wie Sie möchten zu erhöhen. So wir das letzte Mal gezeigt, dass 10% oder ein Zehntel nicht, in Tatsächlich 0,1, wie du vor vielen Jahren unterrichtet wurden. Es ist in der Tat ein Wert wie dieser. Aber das ist nicht ganz wahr, nicht wahr? Wir müssen nur diese Einschränkung in Computern, wodurch, wenn Sie nur eine begrenzte Menge an Speicher, RAM oder mehr speziell Bits, gut, es gibt nur eine endliche Anzahl Dinge, die Sie darstellen kann. Zum Beispiel, wenn wir die Zahl Null, und wir wollen stellen in binärer, unter Verwendung von acht Bits, wobei ein Bit, wieder ist eine Null oder eine Eins ist, könnten wir stellen sie als 00000000. Und das ist ein wenig unnötig wortreich. Just in dem Dezimalsystem in der realen Welt, in der Regel, wenn Sie die Nummer 123 schreiben wollen, müssen wir Menschen wahrscheinlich nicht schreiben 00000123, obwohl, funktional, das ist genau die gleiche Nummer. Wir haben gerade Drop führenden Nullen, so zu sprechen. In binären, können wir das gleiche tun. Binär-und Null, Null-und Binär ist nur Null. Sie brauchen nur ein einzelnes Bit. Aber noch einmal, die häufigste Maßeinheit in der Welt des Computing ist Byte acht Bit. Nur weil ein bisschen, ziemlich nutzlos. Acht Bits, nicht sehr nützlich, aber zumindest ist es mehr nützlich als eine einzelne Maßeinheit. Also mit acht Bits, wir stellen in der Regel binär. Also hier haben wir die Zahlen Null, eins, zwei, und dann, als Nate hat in unserem Video am vergangenen Mittwoch, können wir weiterhin Zählen bis zu sieben, acht ist. Und dann, wenn wir mehr und mehr Bits, wir zählen kann bis ins Unendliche. Aber wenn Sie nur eine begrenzte Anzahl dieser Bits, wie es der Fall in einem Computersystem oder sogar Flugkörpers System, gut, ja Sie haben nur einen endliche Menge an Präzision. Also, wenn Sie die Zahl wie 0,1 vertreten, auch wollen, die Computer auszuwählen und zu wählen. Und wenn es nur eine endliche Anzahl von Zahlen es kann darstellen, kann es in der Nähe 0,1 für dich kommen, aber es kann nicht zwangsläufig Ihnen genau den Wert, den Sie wollen. Und dies ist nur eine der Herausforderungen von Computern, unter der Haube, zum Glück. Als wir uns weiter bewegen, in dem Semester, diese untere Ebene Details werden viel weniger interessant, aber sicherlich die Anwendung dieser Ideen kann etwas sehr reale Welt Verzweigungen. Einer ist ein bisschen Spaß. Wie viele von euch haben die erstaunlichen Film Office Space gesehen? Wenn Sie nicht haben, das ist Ihre inoffizielle Hausaufgaben für die Woche. Aber in Office Space, nehmen die Stipendiaten in diesem Film Vorteil eben dieser Idee, aber sie tatsächlich gestohlen es aus einem anderen Film, den Sie haben könnten gesehen, sogar Jahre vor. Also lassen Sie mich Ihnen ein paar Sekunden dieser Trailer von diese erstaunliche Film und das ist sehr viel akademisch relevant. [SPIELT MOVIE] Eigentlich bin ich gefördert. Ich kann programmieren einen Virus, wird rippen, dass platzieren off big time. Nun, wie funktioniert es? Jedes Mal gibt es eine Bank Transaktion, bei Interesse ist Computertomographie, gibt es Tausende ein Tag, so endet der Computer mit diesen Fraktionen einen Cent. Aber ich werde nicht etwas Illegales zu tun. Illegal? Samir ist dies Amerika. Sie haben zu Gott schwören. Wenn niemand weiß, über dieses aber uns, alles in Ordnung? Keine Familie, keine Freundinnen, niemand. [Unverständlich]. Mach dir keine Sorgen, Mann, ich werde es niemandem sagen nicht. [Film endet] Alles klar, vielleicht fand ich diesen Film besser als die meisten Menschen hier, aber in jedem Fall, daß das Virus waren versuchen, zu erstellen - und in den Filmen, wann immer sie nennen würde etwas ein Virus, es ist generell nicht wirklich ein Virus. Es ist nur ein Programm, dass jemand etwas zu tun schrieb. Und in diesem Fall wurden die Jungs versuchen, ein Programm zu schreiben das nutzten ihre Firma namens Innotech der Rechensystem, wobei Computern auch, selbst wenn es um Geld geht, kann nicht unbedingt stellen Geld genau. So, obwohl Sie vielleicht $ 0,10 in Ihrem Bankkonto haben, 0,10, gut, könnte der Computer tatsächlich denken, dass Sie diese vielen Cent in Ihrem Bankkonto. Und was diese Jungs wurden streben zu tun - und sie stahlen die Idee, schaltet es aus Superman III, wo Richard Pryor taten das gleiche - sie waren im Wesentlichen Schreiben von Programmen, die für alle der Hinterkante nehmen streben Zahlen, alle der winzigen, kleinen, kleinen Fraktionen Pfennige und Absaugen denen ab, so dass die Menschen nur Gedanken, oh, es ist nur $ 0,10 gibt, aber all jene Zahlen am Ende schließlich summieren. So eine wunderbare Idee und es ging nach hinten los urkomisch, dass bestimmten Film. Aber in der realen Welt auch gibt es viel mehr zu Auswirkungen dieser Art von Dingen. Und einer der Gründe für die in den Bereich der Tauchcomputer Wissenschaft ist wiederum ihre Anwendbarkeit nicht auf die Ingenieurwissenschaften allein, sondern nur um anderen Bereichen. Das ist also eine weniger unbeschwerte Blick auf, was schief gehen kann, aber Es ist auch recht Augenöffnung, denke ich, wenn es darum geht genau zu verstehen, wie allgegenwärtig Technologien wie Computer und Programmierung oder in diesen Tagen, in Form von Software. Also das nächste Clip ist nur etwa sechs Minuten, fährt wo wir aufgehört haben letztes Mal, aber erlaubt es uns, ein wenig aussehen mehr in die Tiefe an einem solchen zu diesen Fragen. Lassen Sie mich fahren Sie wo wir aufgehört haben, das war genau hier. Und wir haben Teil zwei von zwei, für etwa sechs Minuten hier. [PLAY MOVIE] Geplagt modernen Raketentechnik. Im Jahr 1991, mit dem Beginn des ersten Golfkriegs, der Patriot Raketen erlebt eine ähnliche Art von Anzahl Umstellung Problem. Und als Ergebnis wurden 20 Personen, 20 amerikanische Soldaten getötet und etwa 100 weitere verletzt, als der Patriot, der sollte gegen eingehende Scuds schützen, versäumt, eine Rakete abzufeuern. Als der Irak in Kuwait einmarschierte und Amerika startete eine Wüste Sturm Anfang 1991 waren Patriot Raketen-Batterien eingesetzt, um Saudi-Arabien und Israel aus den irakischen schützen Scud Raketenangriffen. Der Patriot ist ein US-Mittelstreckenraketen Oberfläche-zu-Luft-System, hergestellt von der Raytheon Company. Die Größe des Patriot Interzeptor selbst geht es darum, rund 20 Meter lang und wiegt etwa 2.000 Pfund. Und sie trägt einen Sprengkopf von ungefähr - ich denke, es ist etwa 150 Pfund. Und der Gefechtskopf selbst ist eine hochexplosive die hat Fragmente drumherum. Die Hülle des Gefechtskopfes ist dafür ausgelegt, wie Schrot handeln. Die Raketen sind vier pro Behälter durchgeführt und sind transportiert von einem Sattelauflieger. Die Patriot-Raketenabwehrsystem geht mindestens bis 20 Jahren. Es wurde ursprünglich als Luftabwehrflugkörper zu gestalten schießen Sie feindliche Flugzeuge, im ersten Golfkrieg. Wenn der Krieg entlang kam, wollte die Armee, es zu benutzen, um zu schießen unten Scuds, keine Flugzeuge. Die Air irakischen Force war nicht so sehr ein Problem, aber die Armee wurde über Scuds besorgt. Und so versuchten sie, den Patriot aktualisieren. Abfangen ein Feind Rakete reist am MACH 5 ging genug Herausforderung sein. Aber wenn der Patriot in Dienst gehetzt wurde, die Armee hatte keine Kenntnis von einem irakischen Modifikation, die ihre aus Scuds fast unmöglich zu schlagen. Was passiert ist, die Scuds, die waren kommen in instabil waren. Sie wurden Wackeln. Der Grund dafür war die Iraker, um 600 zu erhalten Kilometer von einem 300 km range missile, nahm Gewicht aus dem vorderen Gefechtskopf und machte der Gefechtskopf leichter. So, jetzt die Patriot versucht, an der Scud kommen, und die meisten die Zeit, die überwältigende Mehrheit der Zeit, wäre es nur durch die Scud fliegen. Nachdem die Patriot-System Betreiber erkannte die Patriot verfehlte ihr Ziel, sie den Patriot Sprengkopf detoniert. Um mögliche Verluste zu vermeiden, wurde es erlaubt auf den Boden fallen. Das war, was die meisten Leute sah, so groß Feuerbälle in den Himmel, und als Abschnitte von Scud Sprengköpfen missverstanden. Obwohl in den Nachthimmel erschien Patriots zu sein erfolgreich zerstört Scuds bei Dhahran, könnte es keine sein Fehler über seine Leistung. Dort verlor der Patriot Radarsystem Spur eines eingehende Scud und nie gestartet durch zu einem Software-Fehler. Es war die Israelis, die zum ersten Mal entdeckt, dass je länger das System eingeschaltet war, desto größer ist die Zeit Diskrepanz wurde, aufgrund einer Uhr im System-Computer eingebettet ist. Etwa zwei Wochen vor der Tragödie in Dhahran, der Israelis berichtet, das Verteidigungsministerium, dass die System wurde Zeit zu verlieren. Nach etwa acht Stunden läuft, bemerkt sie, dass die System wurde zusehends weniger genau. Das Verteidigungsministerium reagierte, indem er alle die Patriot-Batterien nicht zu verlassen, die Systeme für eine lange Zeit. Sie haben nie gesagt, was eine lange Zeit war - 8 Stunden, 10 Stunden, 1.000 Stunden. Niemand wusste. Die Patriot-Batterie in der Kaserne am Dhahran stationiert und seine mangelhafte interne Uhr hatte über 100 Stunden auf bereits in der Nacht vom 25. Februar. Es nachgeführt Zeit mit einer Genauigkeit von ungefähr einem Zehntel einer Sekunde. Jetzt ein Zehntel der zweiten ist eine interessante Zahl, weil es kann nicht in binärer ausgedrückt werden, genau, was bedeutet, kann es nicht genau in einem ausgedrückt werden modernen digitalen Computers. Es ist schwer zu glauben. Aber nutzen dies als ein Beispiel. Lassen Sie uns die Nummer ein Drittel. Ein Drittel kann nicht dezimal ausgedrückt werden, genau. Ein Drittel wird 0,333 los für die Unendlichkeit. Es gibt keine Möglichkeit, dass mit absoluter Genauigkeit in dezimaler tun. Das ist genau die gleiche Art von Problem, das in passiert der Patriot. Je länger das System lief, desto schlechter ist die Zeitfehler wurde. Nach 100 Betriebsstunden war die Fehler in der Zeit nur etwa ein Drittel einer Sekunde. Aber in Bezug auf Targeting eine Rakete reist am MACH 5, es führte zu einem Tracking Error von über 600 Metern. Es wäre ein fataler Fehler für die Soldaten an Dhahran sein. Was passiert ist, eine Scud Einführung wurde von Frühwarnsystemen erkannt Satelliten und sie wussten, dass die Scud wurde ihr Kommen allgemeine Richtung. Sie wussten nicht, wo sie kam. Es war nun an der Radar-Komponente des Patriot System verteidigen Dhahran, zu lokalisieren und zu verfolgen die ankommenden feindlichen Rakete. Das Radar war sehr smart. Sie würden tatsächlich verfolgen die Position des Scud und dann vorherzusagen, wo es wäre wohl das nächste Mal die radar schickte einen Impuls aus. Das wurde als der Bereich Tor. Dann, wenn der Patriot entscheidet genug Zeit vergangen zu gehen zurück und überprüfen den nächsten Standort für diese ermittelten Objekt, geht es zurück. Also, wenn es wieder an die falsche Stelle ging es dann sieht keinen Objekt, und es entscheidet, dass es kein Objekt. Es war ein falscher Erkennung und lässt die Spur. Die eingehende Scud verschwand aus dem Radarschirm. Und Sekunden später schlug sie in die Kaserne. Die Scud getötet 28 und war der letzte feuerte während der erste Golfkrieg. Tragischerweise kam die aktualisierte Software Dhahran am folgenden Tag. Und die Software Fehler war behoben, schließen ein Kapitel in Die bewegte Geschichte des Patriot. PATRIOT ist eigentlich eine Abkürzung für "Phased Array Tracking- Abfangen von Target. " Alles klar, also ein viel traurige Ergebnis nicht ganz Verständnis dieser Welt. Und die Gerichte zum Mitnehmen, wirklich, aus dem Film ist, dass die Lösung es wurde neu starten Raketenabwehr jeder einmal in eine Weile. Und so wieder, eines der Ziele dieses Kurses, sicherlich auf einer bescheidenen Umfang als diesen Anwendungen besteht darin, wirklich offen jedermanns Augen zu genau, wie Sie gehen über Maschinen zum Herstellen tun, was Sie wollen, dass sie tun und wie Sie gehen zu tun, dass korrekt, während auf dem Weg, es zu tun gut, elegant, und so weiter. Und auch heute, lasst uns tauchen Sie ein in ein wenig mehr, aber so dass wir nicht zu schnell, vor allem für diejenigen, die weniger komfortabel, sondern auch so, dass wir halten das Interesse der die mehr Komfort, lass uns einfach schnell beginnen mit ein bisschen der Rückblick auf einige dieser Ideen. Und wieder weg fragen, sowohl in Person oder online, wenn Sie Fragen, so können wir halten alle auf der gleichen Seite. Also das CS50 Appliance, schnellen Schritt zurück, ist was, in Ihren eigenen Worten? Es ist OK, wenn Sie keine Ahnung, was diese Worte vielleicht noch haben. [Unverständlich] Okay, so eine universelle Schnittstelle für - dass wir alle teilen. Absolut. So konnten wir zum Beispiel sagen Sie zu einige gehen Website, laden Sie diese Software für Mac OS. Laden Sie diese Software für Windows, konfigurieren hin und her. Aber die Realität ist dann laufen wir in unzählige technische unterstützt Fragen. Und auch in diesen Tagen viel von dem, was ist Server-Seite getan, in der Welt der Computer, vor allem wenn es darum geht, Web-Entwicklung und Web-basierte Anwendungen, ist eigentlich häufig auf Unix-oder Linux-Computern durchgeführt, im Gegensatz zu Macs oder Windows PCs. So unter den upsides, dann der Verwendung dieses Ding namens CS50 Appliance ist, werden wir alle die gleiche Umgebung. Also jeder ist auf der gleichen Seite, egal welche Hardware Sie kam Campus mit, sondern wird auch in genau sein Dilettantismus die gleiche Umgebung, dass Sie in Richtung verwenden Semester Ende sowie für Web-Entwicklung, sowie in der Zukunft für reale Anwendungen davon. So konkret ist der CS50 Appliance ein freies Stück Software, die Ihnen ein anderes Betriebssystem laufen zu lassen, Linux, in diesem Fall auf dem eigenen Rechner, in einem Fenster. Jetzt können Sie nicht nur downloaden Sie das Gerät. Sie benötigen ein Programm, mit dem zu spielen oder lassen Sie das Gerät. Und das Stück Software wird im Allgemeinen als eine bekannte Hypervisor. Hypervisors kommen in Form von Produkten wie VMware, Virtual Box, Parallels. Alle Arten von Unternehmen machen Software, sowohl kostenlose als auch Gewerbe gleichermaßen. Was Sie in Problem finden Sie unter Set 1 sind Anleitungen zum erhalten kostenlose Software, mit der die Führen Sie den CS50 Appliance. Und wenn Sie das tun, haben Sie in einem Fenster auf Ihrem Mac oder PC, eine Desktop-Umgebung, die ganz so aussieht, wo es hat einen Startmenü-like, was in der linken unteren Ecke. Es verfügt über einen Home-Ordner, oder Home-Verzeichnis, in der linken oberen es kann ein Papierkorb, und so weiter. Also werden wir necken neben den notwendigen Angaben, wie wir gehen. Aber jetzt fangen wir in C. tauchen So C ist diese Programmiersprache, im Geiste Scratch, aber weit weniger grafische Oberfläche, sondern ironischerweise weit stärker, wenn Sie versierte mit ihm zu bekommen. So in C schreiben wir Programme, die von Schreiben von Quellcode, was Diese Englisch-ähnliche Syntax, ähnlich den Socken Beweis dafür, dass wir das letzte Mal, dass Sie ermöglicht haben express yourself ziemlich genau, wenn arcanely, an den Computer. Also, welche Art von Produkt-Software haben Sie tatsächlich benötigen Programme in einer Sprache wie C zu schreiben, auf der Grundlage unserer Gespräch am Montag? [Unverständlich] OK, Sie brauchen nur einen Texteditor. Sie benötigen keine spezielle Software per se zu schreiben Programme. Sie brauchen nur einen Texteditor wie Notepad, auf Windows, TextEdit auf dem Mac oder etwas namens gedit, in der Welt der Linux, die wir hier verwenden werden. Und das ist es, um die Programme zu schreiben. Aber Schreiben ist nur die Hälfte der Gleichung. Sie müssen dann, um sie auszuführen. Aber um das Ausführen von Programmen - Sie können nicht ausgeführt Quellcode. Sie haben stattdessen auf das, was sie als erstes tun? Yeah. DAVID J. MALAN: Sie müssen kompilieren. Und jemand anderes, Kompilieren des Quellcodes bedeutet - [Unverständlich] DAVID J. MALAN: Genau. Translating es Nullen und Einsen. Da alle von uns, in diesen Tagen haben Computer, die CPUs haben, fast die alle von der Firma Intel hergestellt und Intel Inside, bedeutet, dass es ist das Gehirn in Ihrer Computer, wie der CPU bekannt. Und eines der Dinge, dass Gehirn tut, ist, sie weiß, wie man Muster von Nullen und Einsen verstehen. Er weiß, was Bitmuster Zusätzlich stellt, was Muster stellt Subtraktionen, welches Muster der Bits repräsentieren Druck, und die Schaffung eines hörbaren Ton. So kurz, die CPU, die mit dem Betriebssystem gekoppelt ist, welches ein Stück Software, die auf der Oberseite der CPU ausgeführt wird, so zu sprechen. Gemeinsam wissen, diese beiden Stücke, wie man Programme, die ausgeführt werden wir Menschen zu schreiben. Also, wenn ich in den CS50 Appliance hier gehen, ich brauche zu öffnen bis einem Texteditor, und ich kann darauf zugreifen in einer Reihe von Möglichkeiten. Ich kann entweder gehen Sie zu Menü, Programmierung, und dann kann ich wählen - Nö, nicht das Menü. Ich kann auf Zubehör go / gedit hier zu öffnen mein kleiner Texteditor. Oder einfacher, kann ich auf dieses kleine Symbol in der unteren linken Ecke. Und jetzt bekomme ich diese Umgebung hier. Es ist ziemlich erinnert an einen einfachen Text-Editor, mit nur ein oder zwei Unterschiede. In der Spitze, wo der Cursor blinkt jetzt, das ist, wo Ich kann mit dem Schreiben beginnen meinem Code. Im Boden ist dieses Ding namens das Terminal-Fenster. Und welche Arten von Dingen kann ich dies tun sogenannte Terminal-Fenster? [Unverständlich] Okay, also werde ich Befehle ausführen. Und einige der Befehle, die wir am Montag lief waren ein wenig kryptisch auf den ersten, aber ls für die Liste, cd change directory, rm, für zu entfernen. Es ist also eine Art der alten Schule Art der Navigation Ihrer Computer, nur mit Ihrer Tastatur und textuelle Kommandos, und nicht, im Allgemeinen unter Verwendung einer Maus. Aber wir werden sehen, es dauerte nicht lange, dies tatsächlich gibt uns ein wenig mehr Leistung und ein wenig mehr Präzision, mit der die uns ausdrücken. Und dann hier auf der linken Seite, sind wir nur gehen, um zu sehen, wie wir mit dem Schreiben beginnen Software, eine kleine Zusammenfassung der Programm, das wir oben links geschrieben. Aber wir werden das noch einmal vor langer sehen. Also lasst uns etwas ziemlich einfach hier tun. Lassen Sie mich zunächst voran gehen und gehen Sie auf Datei, Speichern, und ich bin einfach gehen auf jharvard hier klicken, über links, und jharvard ist wieder der Name für mein Home-Ordner, meine persönliche Dateien, mir, jetzt ist John Harvard, wie Sie alle bald John Harvard in diesem Umfeld. Er hat diese Home-Verzeichnis haben, Eigene Dateien und so weiter, dass ich zu retten, wollen nun diese Datei in. Also werde ich es nennen hello.c. Dann werde ich gehen vor und klicken Sie auf Speichern, und jetzt, was ich hier habe, ist ein Register genannt hello.c, so viel wie eine andere Art von Editor. So, jetzt lass mich weitermachen und ein Programm schreiben. int main (void). Und dann habe ich nur beim letzten Mal, printf, für den Druck formatiert, ("Hallo Welt!" );. Fast abzuschließen. Aber ich vermisse ein paar Details. Was ist aus diesem Programm, dass ich wirklich brauchen für fehlende es tatsächlich zu kompilieren? Yeah. [Unverständlich]? DAVID J. MALAN: Ja, so brauche ich, um die Standard-Include I / O-Bibliothek. So muss dies über Haupt gehen, so bin ich gerade dabei, machen etwas Platz für sie gibt. Und ich werde tun, # include. Und beachten Sie die eckigen Klammern gibt. Und als beiseite, ist gedit ein wenig benutzerfreundlich, wenn manchmal ein wenig verwirrend, dass sie versucht, zu helfen, Ihre Augen bemerken, welche Zeilen mit dem, was. So die Tatsache, dass mein Cursor rechts neben diesem abgewinkelt ist Halter bemerken, wie es Hervorhebung der anderen abgewinkelten Halterung mit dieser. Und das ist nur meine Aufmerksamkeit auf die Tatsache lenken, dass ich eine Symmetrie. Und Symmetrie in der Programmierung ist generell eine gute Sache. Ebenso, wenn ich meinen Cursor an das Ende zu bewegen, bemerken, wie die geschweiften Klammern Line-Up zu zeigen, dass, ja, ich ein offenes eine haben und ein geschlossenes, sozusagen. Alles klar, und ich kann eine andere Sache. Es ist nicht unbedingt notwendig, aber gute Praxis, zu sagen, 0 zurück. Und return 0 tut, was für uns hier? Oder bedeutet was? [Unverständlich] DAVID J. MALAN: Aber nichts ist falsch. Und ehrlich gesagt ist es für viel schief gehen in eine harte programmieren diese kurz. Also bin ich einfach nur Super ausdrücklich, dass alles gut ist. Ich, der Mensch, wenn ich dieses Programm ausführen, wird wahrscheinlich nie sehen, dass 0. Im Allgemeinen sind diese Zahlen, die von der Hauptstraße zurück nur hinten ihre Köpfe, um den Menschen bei der etwas schief geht. Und Sie bekommen ein kleines Pop-up sagen Systemfehler, ein, zwei, drei, oder was auch immer die Zahl war, dass tatsächlich zurückgegeben. So etwas anderes falsch? [Unverständlich] DAVID J. MALAN: Also das ist nicht so sehr eine funktionelle Fehler sondern eine ästhetische ein. Ich sollte wohl in einem Zeilenumbruch es legte an der Ende dieser Zeichenfolge, so dass wir tatsächlich bewegen Sie den Cursor auf die nächste Zeile, und das Programm sieht nur ein wenig schöner. So, jetzt lass mich gehen hinunter zu meinem Terminal-Fenster und Zoom-back in. Und dieses Ding hier ist es die Aufforderung genannt. Es ist nur daran erinnern, wer ich bin, jharvard @ Appliance, wo Gerät ist der Name des Computers, ich bin auf. In Klammern ist Tilde, die squiggle Symbol, das stellt dar, was? PUBLIKUM: Home-Verzeichnis. DAVID J. MALAN: Home-Verzeichnis. So das ist nur eine Abkürzung zu sagen du bist in Ihren persönlichen Ordner, wo alle Ihre Dateien gehen standardmäßig. So, jetzt hier, kann ich ls für die Liste eingeben. Und das einzige, was ich hier sehe, ist im Moment hello.c. Und das ist gut so, denn ich schrieb genau dies. Also lass mich gehen Sie vor und nicht machen hallo. Und ich merke, ich nicht den Befehl make hello.c. Stattdessen werde ich nur die Eingabe der Basis-Name der Datei, hallo. Und machen, wie wir am Montag gesehen haben, wird nur folgern, was ich will die. c-Datei. So jetzt habe ich getippt machen hallo. Jetzt sehe ich diese ziemlich langen Befehl und wird auch weiterhin sehen dies wieder und wieder. Aber klar, Klang, das Wort, das gerade erschienen ist, das ist die eigentliche Compiler. Machen, ist nur ein Build-Dienstprogramm. Es ist nur eine benutzerfreundliche Programm, das mir erspart, in der Langfristig, von zu tippen unglaublich mühsam lange Befehle wie dieser ein. So könnte man Clang manuell ausführen. Du könntest geben all das manuell. Just gets sehr mühsam. Und so machen, ist nur ein Programm, das unser Leben vereinfacht und läuft komplexere Befehle für uns. Alles klar, also jetzt, was Datei sollte ich in meinem aktuellen Verzeichnis? Nicht nur hello.c, sondern auch hallo. Also, wenn ich zu laufen hallo wollen, daran erinnern, dass ich dot slash sagen, wo dot Mittel in den aktuellen Ordner, wohin Sie gehen sind, und führen Sie dann das Programm namens hallo, und zwar jetzt, Ich habe Hallo Welt. Alles klar, alle Fragen auf dem Workflow oder die Syntax der was wir gerade getan? Alles klar, also nehmen wir Sachen herauf eine Kerbe wieder. Also das war nicht berauschend, nur ein Programm schreiben, dass nur immer sagt hallo, Welt. Also änderten wir es am Montag, zu sagen, hallo, David. Es ist ein wenig mehr persönliche, aber genauso hart wie die codierte erste Version. So gar nicht so überzeugend. Aber es gibt in C, Funktionen sicherlich neben print, Funktionen, die Sie Benutzereingaben lassen. Und die Art, wie wir dies tat, den anderen Tag, war wie folgt. Vor drucke ich tatsächlich etwas, das ich zum ersten Mal etwas von dem Benutzer. Also lassen Sie mich wieder tun. Kette s, wobei s ist nur eine zufällige Namen, hier für eine String entspricht GetString. So was GetString? Offensichtlich bekommt einen String, basierend auf seinen Namen. Aber was ist es, technisch? Es ist eine Funktion. Es ist also eine Funktion, die nicht mit C per se nicht kommen. CS50 Mitarbeiter schrieb. Und so dazu verwenden, können Sie nicht nur schließen stdio.h, Sie müssen auch was gehört? Yeah. So cs50.h, das ist nur eine Datei schrieben wir vor einigen Jahren. Wir installierten sie auf dem Gerät für Sie neben alle Standard-Dateien. Und so in diesen ersten Wochen der Klasse, verwenden wir dies nur zur Vereinfachung der Prozess des Tuns sehr grundlegende Dinge wie immer Benutzereingaben. Denn wie wir in ein paar Wochen sehen, bekommen Benutzereingaben in einem Sprache wie C ist eigentlich überraschend komplex, vor allem weil man nicht im Voraus wissen, in der Regel, wie viel Zeug der Benutzer wird geben in. Und wenn Sie nicht wissen, wie viele Daten zu erwarten ist, müssen Sie nicht wissen, wie viel Speicher zuweisen. Und wenn Sie tatsächlich eine kontradiktorische Benutzer, versucht in Ihr System zu hacken, Ihr Computer abstürzt, gut, Regel die erste Methode des Angriffs ist, wie ich auf habe Montag, geben Sie eine ganze lange Folge von zufälligen Zeichen, Enter und sehen, was bricht. Da in der Regel, wenn ein Programm bricht, deutet an, dass bei eine Sicherheitslücke, die möglicherweise. Es ist sicherlich deutet an Ihnen, dem Programmierer, gemacht a Fehler, aber gefährlich, könnten Sie gemacht haben a sicherheitsrelevanten Fehler, und in der Regel werden wir sehen, dass das ist wie Maschinen bis heute gefährdet sind, sowohl in der Welt des Web und Programme auf die Befehlszeile wie diese. Gut. So string s entspricht GetString. So konkret jetzt, was macht Linie 6 hier tun? So ist die Funktion auf der rechten erhält string, dauert, wie viele Argumente? Okay. So keine. Ein wenig Plausibilitätsprüfung. Ein Argument wiederum ist nur ein Eingang mit einer Funktion zum verändern sein normales Verhalten in gewisser Weise. Aber in diesem Fall, ich will nicht zu verändern das Verhalten GetString. Ich wollte nur einen String zu erhalten. Also habe ich nichts in den Klammern, und dann habe ich ein Semikolon Demarkieren das Ende der Zeile des Codes. Nun, das Gleichheitszeichen bedeutet nicht gleich, per se. Es bedeutet, Zuordnung, was bedeutet, setzen, was kommt ausgegeben am rechten Innenseite, was auf der linken Seite. Also auf der linken Seite, wir sagen, wir haben erklärt, ein String namens s. Genauer gesagt, haben wir Speicher innerhalb der zugeteilten wir stellen, welche die Bits, die eine Sequenz von repräsentiert Zeichen. Aber heute haben wir zugeteilt oder erklärt einen String zurück. Gut. So, jetzt, nachdem ich dies getan haben, möchte ich im Wert von stecken s, nicht der Wert des David. So, das ist falsch, warum? Das ist also nur buchstäblich die hartcodierte s. Es ist zu sagen, "Hallo, s", das ist nicht das, was ich will. So kann ich dies tun. Das Prozentzeichen ist ein Platzhalter, aber jetzt muss ich gehen in Druck ein zweites Argument. Daran erinnern, dass Argumente für Funktionen getrennt sind Kommas, so dass die nächsten Komma hier habe ich nach diesem das Schreiben s. Und in diesem Zusammenhang jetzt ist s die Variable, und printf, bei Empfang dieser beiden Eingängen - die Zeichenfolge auf der linken und der Variablennamen s auf der rechten - es stecken diese in die ehemalige für uns, und einfach ausdrucken einen schönen schönen String was auch immer es ist, dass wir eingetippt Also lasst uns versuchen. Werde weitermachen und Verkleinern, Rücken meine Terminal-Fenster. Zoom in auf der Unterseite hier. Erneut eingeben zu machen hallo. Clang scheint wurden erneut ausführen. Ich werde geben. / Hallo, Enter. Nichts scheint noch geschehen, aber es ist an dieser Eingabeaufforderung dass ich so etwas wie Nate eingeben, Enter, und jetzt haben wir Hallo, Nate. Und ich kann es wieder tun mit Rob, und so weiter. So jetzt hoffentlich dieses Programm verhält, wie ich will. Nun, nicht alles, was benutzerfreundlich. Ich habe keine Ahnung, was gerade von mir erwartet. So können wir sicher reinigen diese bis ein wenig. Lassen Sie mich gehen wieder hier, und statt nur Tauchen in und fragt den Benutzer nach einer Zeichenkette, lass mich ausdrücklich sagen, die Benutzer, was ich erwarte. So printf ("Geben Sie eine Zeichenfolge:" ); Also keine Variablen hier. Keine Prozentzeichen. Gerade die einfache englische Redewendung. Lassen Sie mich nun auf den Boden hier gehen und erneut mein Programm. Aber nichts scheint sich geändert zu haben. Warum? Ich muss es neu kompilieren. So einfach Fehler zu machen. Aber Sie müssen nicht nur die Datei speichern, sondern kompilieren Sie das Programm. Und so, wenn ich wieder zum Laufen zu bringen hallo, jetzt Clang läuft. Jetzt kann ich laufen. / Hallo. Und jetzt sehe ich "Geben Sie eine Zeichenfolge:". Okay. Jetzt ist es ein wenig mehr benutzerfreundlich. Nate, Geben, hallo, Nate. Nun, lassen wir noch einmal versuchen und denken über Eck Fällen. Also einfach in Scratch mögen, werden Sie aufgefordert oder werden gefördert im spec zu Art über das, was gehen könnte denken, falsch, wenn Sie nicht erwarten, alles, was der Benutzer tun könnte. Bugs, daher ergeben können. So geben Sie einen String - was ist eine Ecke Fall hier? Was ist ein Szenario, dass ich, der Programmierer, die möglicherweise nicht über erwartet? Yeah. Okay. So was, wenn ich in einer Reihe wie diese geben? Gut. So ist es immer noch funktioniert. Grammatisch macht keinen Sinn. Aber zumindest das Programm funktioniert. Was ist eine andere Ecke Fall? Etwas, das ich nicht erwartet hatte. Yeah? Okay. So könnten wir so etwas wie eine wirklich große Nummer. Also lasst uns dies tun hier. Lassen Sie mich den Zoomfaktor für eine Sekunde, lassen Sie mich hervorheben. Kann nicht kopieren und einfügen hier unten. Gut. So kann ich nicht kopieren und fügen Sie in diesem Terminal-Fenster, so dass wir nur simulieren. Lassen Sie mich zu verkleinern, gehen zu wickeln. Ich werde mich nicht dazu zu lange tun, denn es wird nicht tatsächlich in diesem Programm zu brechen. Aber es könnte. Enter. Aber es kam nicht. Gut. Aber es ist eine echte Ecke Fall. Und der einzige Grund, der korrekt verhalten, so sprechen, weil die CS50-Funktion GetString ist eigentlich entwickelt unter der Haube, wie wir in ein paar Wochen sehen, automatisch dafür mehr und mehr RAM, mehr und mehr Speicher aus dem Betriebssystem, wenn es erkennt, wow, Sie haben wirklich etwas ganz lange getippt. Nun, dies ist ein bisschen wie ein Notlüge. Wenn wir tatsächlich hielt eine ganze Weile und ich eingetippt so etwas wie 5 Milliarden Zeichen auf der Tastatur hier, oder wirklich getroffen copy-paste ein bisschen, wir womöglich konnte das Programm zum Absturz bringen. Nur ein wenig schwerer zu, dass mit einer endlichen simulieren Zeitdauer. Was ist eine andere Ecke Fall werden wir versuchen könnte? Yeah? Yeah. Also, warum nicht beantworten wir nichts? So haben wir eigentlich eine bestimmte Aktion durchführen, weil sonst das Programm geht, um dort zu blinken sitzen den ganzen Tag. Aber wenn ich einfach Enter drücken - OK, jetzt sieht immer noch falsch. Haben Sie nicht abstürzen, aber vielleicht gibt es jetzt die Möglichkeit, Beginn der Umsetzung einer strengeren Programm das tatsächlich überprüft. Und wenn die Zeichenfolge, der Satz, das Wort, das ich eingetippt hat die Länge 0, na ja, vielleicht sollte ich an der anschreien Benutzer oder sagen Sie ihm oder ihr einen String erneut eingeben, so dass wir eigentlich, was aussieht wie das richtige Verhalten und nicht nur komplette Kontrolle auf meiner Seite. Frage im Rücken? Dezimalzahl. So könnten wir versuchen das auch. 1,10000005. Scheint, wie das wird nur funktionieren eigentlich okay. Und dem tatsächlich zu erwarten ist. Auch wenn wir vielleicht vertippt haben diese Zahl gibt, oder eine größere Anzahl früher erkennen, dass, wenn wir die Eingabe Benutzer Eingang und wir verwenden die GetString Funktion nicht Ob das, was ich eingeben sieht aus wie eine Nummer. Daran erinnern, dass nach ASCII, alles auf Ihrem Tastatur hat einen Wert, der einen zugeordnet werden können Charakter, ein char. Also in diesem Fall, auch wenn ich vielleicht eine Zahl, die Computer wird, daran zu denken, so zu sprechen, als String - etwas, das aussieht wie eine Reihe, ist aber nicht tatsächlich eine Zahl ist. Aber das ist eigentlich eine perfekte segue, denn jetzt können wir tatsächlich Übergang zum Schreiben von Programmen, die auch andere Datentypen. So neben der Verwendung von Zeichen, oder vielmehr, neben der Verwendung von Strings, erkennen, dass wir andere Datentypen in C besitzen sowie in anderen Sprachen. Ein char, wie der Name schon vermuten lässt, ist nur ein einzelnes Zeichen. Ein Schwimmer ist ein Gleitkommawert, und das ist nur ein schicker Art zu sagen, eine reelle Zahl - etwas, das eine Dezimalstelle hat Punkt es mit einigen Zahlen links und / oder rechts. Ein int ist eine ganze Zahl, die nur eine Zahl wie 123. Und nun noch interessanter sind Dinge wie double. Was haben wir gesagt eine doppelte war beim letzten Mal? Es ist 64, rechts. Während also in der Regel ein Schwimmer 32-bit - so dass es so lange im Speicher ist, verwendet es 32 Nullen und Einsen zu Werte darstellen - ein doppelter ist buchstäblich doppelt so, die bedeutet, dass Sie stellen entweder größere Zahlen oder Sie repräsentieren mehr genauen Zahlen. So können Sie noch mehr Zahlen nach dem Komma haben, aber Als der Bursche sagte in dem Video, sogar etwas einfacher konzeptionell wie 1/3 nicht exakt durch einen vertreten sein Computer, denn schließlich Sie laufen aus Bits und daher kann man nur .33333333 so viele Male auf welcher Stelle Sie müssen nur sagen, ich bin aus der Darstellung Raum, habe ich nur nennen es einen Tag und stellen es etwas unpräzise so. Und ein langer, langer - blöder Name, aber es ist, weil es einen Datentyp wie eine bekannte lange in C, die zufälligerweise ist oft 32 Bit, wie ein int ist 32 Bit, aber eine lange lange Regel 64 Bits. So ist es nur bedeutet, dass Sie größer darstellen Zahlen als diese. Gut. Also, wenn wir tatsächlich beginnen wollen repräsentieren Dinge, wir vielleicht kompliziertere Typen brauchen, und deshalb haben wir String haben. So in der CS50-Bibliothek, wird die Datei cs50.h genannt, haben wir tatsächlich erklärte ein Datentyp, so zu sprechen, als String, aber String nicht wirklich existieren. Dies ist wiederum eine dieser Schichten werden wir peel wieder in ein oder zwei Wochen und werfen es weg, und tatsächlich Blick unter die Haube an, was ein String tatsächlich ist, und wie es dargestellt wird. Wir werden auch auf boolesche Werte aussehen. Also, was war ein bool im Rahmen der Scratch? Es ist wahr oder falsch. So ist es nur ein Wert, der wahr oder falsch ist, ein-oder ausschalten, 1 oder 0, wie Sie wollen, um die Welt zu sehen. So in C, dank der CS50-Bibliothek, die wiederum enthält eine andere Bibliothek unter der Haube haben wir Zugang zu einem Datentyp, der als bool ist, was wird wahrsten Sinne des Wortes können wir ordnen die Werte true oder false Dinge in einem Programm. So lassen Sie uns gehen hier und ein kleines Programm schreiben, dass tut etwas mit Zahlen statt. Also lassen Sie mich zurück zu dem CS50 Appliance gehen, lass mich gehen Sie vor und Erstellen einer neuen Datei hier genannt - lasst uns einfach sagen etwas Einfaches, wie math.c. Gut. Und jetzt gehen bis an die Spitze von meinem Programm, ich bin werde die üblichen zu tun - # Include, so dass ich verwenden können printf, int main (void) - wir kommen zurück, um schließlich, was int bedeutet, hier, was Leere bedeutet hier, aber jetzt weiß nur, dass Sie müssen Programme wie dieses zu starten. Jetzt werde ich nach vorne gehen und sagen, etwas ein wenig anders - printf ("Gib mir eine Zahl ein:" );. Dann werde ich int n = GetInt tun, weil es entpuppt GetInt ist eine weitere Funktion in der CS50-Bibliothek Neben GetString. Und jetzt werde ich etwas Dummes zu tun, wie "dank für die% d "für dezimal integer, und dann Komma n und dann 0 zurück. Also noch einmal, 0 zurück, hat nichts mit der Anzahl Ich bin zu tun die Benutzer zu fragen. Nur bedeutet am Ende, dass alle, vermutlich, ist gut. Also lass mich gehen, um meine Terminal-Fenster hier. Lassen Sie mich ein make Mathematik geben. Und noch etwas ist falsch. Machen Mathematik hat nicht funktioniert. Hier ist der erste unserer Fehlermeldungen. Warum? Ein wenig kryptisch, aber - Yeah. So cs50.h. Also noch einmal, besonders früh auf, dann schreiben Sie Ihre erste Programm für pset 1 in den Abschnitten, in Sprechstunden und ehrlich gesagt, es wird überwältigend sein manchmal, was diese Dinge wirklich sagen. Aber du wirst sehr schnell erkennen, dass sie beginnen zu fallen in Eimern wobei diese ein bedeutet, dass du off ein links der # enthält am Anfang der Datei. Und Clang, der Compiler wird informiert Sie über dies durch sagen, sondern fantasievoll, implizite Deklaration der Funktion GetInt ist ungültig. Gut. Also, was bedeutet das? Es bedeutet nur, Sie haben implizit deklariert GetInt in das Gefühl, dass Sie nicht explizit erklärt. Explizit deklarieren int, müssen Sie lehren Clang dass es existiert. Und die sehr einfache Lösung dafür ist es zu lehren, indem einschließlich dieser anderen Datei, cs50.h an der Anfang der Datei. Da buchstäblich, was # include tut, ist es sagt Clang ziemlich zu gehen finden Sie die Datei cs50.h, Kopieren, fügen Sie ihn automatisch in die Spitze von meinem Programm für mich, konvertieren und dann den Quellcode, um Nullen und Einsen. Aber das wäre natürlich sehr mühsam, wenn wir Menschen mussten zu gehen Kopieren und Einfügen diese großen Dateien die ganze Zeit, so # include tut einfach alles, was automatisch und ohne trüben meinen Code mit jemandem der Bibliothek. Und eine Bibliothek ist nur eine weitere Datei mit Funktionen und andere Dinge, die jemand anderes geschrieben hat, dass wir Nutzung um unserer selbst willen. Gut. Lassen Sie uns noch einmal versuchen. Machen math. Enter. Gut. So das scheint funktioniert zu haben. Also lassen Sie mich jetzt laufen Mathematik;. / Math. Geben Sie gibt mir eine Zahl, 123. Danke für die 123. Nun wollen wir versuchen, eine andere Ecke Fall. Ein String ist ziemlich großzügig, weil ein String kann alles sein. Kann wie Zahlen aussehen, aussehen Zeichen, wie Wörter zu suchen. Aber ein int ist ein int. So jetzt, wenn ich die schwierige Benutzer, und es sagt: "Gib mir eine Zahl, "was ist, wenn ich so etwas wie 0,1 zu tun versuchen? Nun, das ist eine Zahl, und es ist im Einklang mit der Grammatik habe ich hier, aber unter der Haube, ich bin der Natürlich mit der Funktion GetInt. Also mal sehen, was passiert. Geben Sie, erneut zu versuchen. Gut. Lassen Sie mich schwierig sein und einfach Enter drücken erneut. Enter, Enter. So, jetzt scheint es, dass GetInt ist ein wenig mehr mächtiger als GetString. Wir, die Mitarbeiter, so dass, wenn wir bemerken, umgesetzt Sie haben uns nicht gegeben eine int - und ein int ist eine Dezimalzahl mit Nullen, Einsen, Zweien, Dreien, Vieren, Fünfen, Sechsen, Siebener, Achter oder Neuner. Und das ist es. Keine Dezimalstellen, keine Zeichen, keine Satzzeichen. Es scheint, dass wir zusammenarbeiten müssen. So lassen Sie mich versuchen vier, fünf, sechs, und das bringt mich durch. Also wirklich, zu anal hier sollte ich wohl sagen: "Gib mir eine ganze Zahl ", um dem Benutzer zu vermitteln genau das, was ich vorhabe. Nun lassen Sie uns über unter der Haube zu denken. Wir gehen nicht auf, wie cs50.h umgesetzt wird heute aussehen, dass die Bibliothek. Aber wenn es sagt immer wiederholen, wiederholen, wiederholen, was die Programmierung Bau ich vermutlich mit unter der Haube, um implementieren, dass? Also nur eine Schleife, nicht wahr? Einer der einfachsten Ideen, dass wir auf Scratch sah. The Forever konstruieren, die Repeat konstruieren. Vermutlich in diesem Programm unter der Haube, auch obwohl es in C geschrieben ist und nicht verkratzt, es zu tun etwas namens entspricht immer, wenn der Benutzer nicht eingegeben in einem Integer, sagen wiederholen, wiederholen, wiederholen, wiederholen, so schließlich, wenn wir tun, um eine ganze Zahl, dann Ausbruch aus dieser Schleife. Also, was andere Funktionen können wir hier verwenden, CS50-Bibliothek? Nun, Art der offensichtlichen, zumindest auf der Grundlage der Datentypen, die wir jetzt wissen gibt. Wir implementierten GetString, GetInt, sondern in der gesamten ersten Wochen der Laufzeit können Sie auch GetFloat und GetDouble und GetLongLong um genau das zu bekommen Datentypen, die Sie wollen. Da der Schlüssel Detail dabei ist, dass im Gegensatz zu einigen Sprachen, wie Python und Ruby, wo man nicht unbedingt auf erklären, den Datentyp einer Variable - Sie müssen nicht den Computer sagen, welche Art von Zeug Sie gehen in die Variable setzen - in C, muss man immer so genau. Also, wenn Sie eine Variable namens n, ein Stück Speicher daß in diesem Fall geschieht mit 32 Bits werden vereinbarungsgemäß Sie müssen Sie den Computer zu sagen, dass diese Bits werde eine Nummer zu speichern - kein Zeichen, kein String, nicht ein Schwimmer. Und dies behebt das Problem, wir effektiv lief in der vergangenen Woche. Wenn wir mit Nullen und Einsen Zahlen repräsentieren nicht nur Zahlen, sondern As und Bs und Cs, wie in der Welt ist ein Computer gehen zu wissen, dass dieses Muster von Bits tatsächlich die Zahl 65, wie zu vertreten die entgegengesetzte Buchstaben A, die zufällig nach ASCII, erinnere, war gleichbedeutend mit 65? So dass diese Datentypen bereitzustellen Kontext zu dem Computer, so dass dass sie weiß, wenn diese Bits als interpretiert werden sollte INT oder als String zurück. Haben Sie Fragen, dann auf das? Yeah? DAVID J. MALAN: Gute Frage. Wenn wir nehmen stdio.h, speichern wir die Datei - Lassen Sie mich gehen, um das Terminal-Fenster und führen Sie make Mathematik, zoom an und geben Sie - jetzt bekomme ich einen anderen Fehler, weil ich implizit bin erklärt, was funktionieren jetzt? Printf. So jetzt habe ich ein neues Problem, dessen Lösung geschaffen im Wesentlichen gleich. Ich muss das zurück setzen. PUBLIKUM: [unverständlich] DAVID J. MALAN: Oh. Also, wenn ich out - Okay, yeah. Also, wenn ich entfernen Sie die Standard-I / O-Bibliothek die Aufnahme bis hier, und dann sagst du, wenn ich los printf erhalten, erhalten Befreien Sie sich von printf? Ja. Das sollte funktionieren, weil ich nicht mehr mit einem bin - hoppla. Habe ich nur liegen? Oh, okay. Dies wird nicht wegen eines neuen Fehler, den wir soeben vorgestellten arbeiten. Und dieses ist ein wenig mehr selbsterklärend. Was ist das Problem? Unbenutzte Variable n. So dieser Fehler ist das Ergebnis unserer nachdem die konfigurierte Gerät besonders pedantisch, um wirklich zu schreien Sie für jeden möglichen Fehler, auch wenn es irgendwie eine nicht-fataler Fehler wie diese - ist es wirklich so eine große umgehen, dass ich ein int zugeordnet, legte eine Reihe drin, und dann habe gerade nichts mit ihm? So funktional, nein. Das ist nicht, um das Programm zu brechen. Es ist nur irgendwie dumm, nicht wahr? Es gibt keinen Wert zu haben für diese Nummer gebeten, gespeichert in einer Variablen, wenn Sie nie etwas zu tun mit ihm, ob es drucken oder speichern. So dass in diesem Fall wird so viel Clang anzuerkennen, und es sagt nicht verwendete Variable n. So können wir dieses Problem beheben, wenn wir wirklich wollen. Aber auch dies ist kein guter Programmierstil jetzt. So konnte ich nur tun dies - gehen Sie hier, lassen Sie mich klar auf den Bildschirm, machen math. Das funktioniert. Jetzt kann ich betreibe meine Mathematik-Programm, nimmt Eingang - gut, das war schlecht. Nimmt die Eingabe, und das ist alles so ist, in diesem Fall. Also eigentlich wollen wir versuchen eine andere Ecke Fall, dass wir nicht früherer denken. In diesem Fall - hier gehen wir zurück auf die eine, die eine ist etwas mehr benutzerfreundlich. Lassen Sie mich gehen wieder hier und laufen zu lassen math wieder. Whoops, was habe ich falsch gemacht? Got to weiter zurück rollen. Okay. Jetzt sind wir wieder in den ursprünglichen Zustand, in dem alle ist hoffentlich gut. Und jetzt, wenn ich Mathematik laufen, scheint 123 zu arbeiten. Aber das ist nicht wirklich eine effektive Beweis, nur sagen okay, das funktioniert. 789, das funktioniert. Zeit zu unterbreiten. Denn es gibt andere Ecke Fälle hier. Ein String nicht wirklich geben uns viel Mühe, indem Sie einen ganze Menge von Zeichen. Aber was, wenn ich in dieser Art? Schlagen die Zahl 1 eine ganze Menge, viel hier - Alles in Ordnung, es wird ein wenig langweilig, so dass ich zu gehen halten hier, und ich werde Enter drücken. Was zum Teufel ist passiert? So kann dies tatsächlich erklärt werden. So hat es gedauert, es als Binary? Ein guter Gedanke, aber nein, es ist nicht die Tatsache, dass es dauerte als binäre, weil ja, das war nur eine Art Zufall. Wir können dies wieder zu tun. Es gibt also keine 2 im binären System, das ist wahrscheinlich genug sowieso. Enter. Das war also nicht das Problem. Was sonst noch? Genau. So denken Sie zurück an, was für ein int eigentlich ist. Es ist 32 Bit, die zusammen interpretiert als Nummer. Wenn Sie 32 Bit haben, bedeutet dies, dass jedes der Bits kann eine 0 oder eine 1, 0 oder eine 1 ist. Das heißt also, es gibt zwei Möglichkeiten, dieses Bit zwei Möglichkeiten dafür, zwei Möglichkeiten hierfür bit - das ist also 2 mal 2 mal - das ist also 2 bis 32 der Leistung ist die Gesamtzahl der Permutationen von Nullen und Einsen, wenn Sie 32 haben Platzhalter, Nullen oder Einsen, vor Ihnen. Also, wenn ich 2 haben die 32, mathematisch, was ist? Es ist also eine ganze Menge. Es ist 4 Milliarden, geben oder nehmen. Und 4 Milliarden scheint nicht zu sein, was wurde hier gedruckt. In der Tat sieht das näher bei 2 Milliarden Euro. Aber dies ist kein Zufall. Die Tatsache, dass der Computer hat meine große Anzahl falsch interpretiert, meine große Folge von Einsen und dann meine riesige Abfolge von Zweien, wie etwa 2 Milliarden wird erläutert, wie? Es gibt eine Kappe auf dem int. Es gibt eine sicherlich eine maximale Wert, den Sie darstellen kann. Aber es ist in der Regel 4 Milliarden, nicht wahr? Wenn 2 der 32 ist rund 4 Milliarden, das scheint, wie das ist die größte Anzahl. Also nicht ein Rest, aber ein guter Gedanke. Negative Zahlen. Also, wenn Sie haben 4 Milliarden mögliche Dinge, die Sie stellen mit diesen verschiedenen Permutationen von 32 0 und 1s, na ja, liegt es nahe, dass wir Menschen vielleicht wollen stellen nicht nur positive ganze Zahlen aber negative Zahlen. Und in der Tat, das ist die Annahme, dass C macht. So mit 32 Bit, können Sie repräsentieren etwa minus 2 Milliarden den ganzen Weg bis zum positiven 2 Milliarden. Und so in diesem Fall, was wir wirklich sehen, ist nur Rande der Kapazität unserer integer, und wir haben, so zu sprechen, zum Überlauf einer Integer. Wir haben versucht, mehr Bits hinein stopfen, als tatsächlich passen. So das Ergebnis ist, dass wir im Wesentlichen haben alle 1-Bits. Wir haben umgedreht alle unsere Bits auf, haben wir versucht zu repräsentieren die größte Zahl möglich, aber es ist eindeutig nicht annähernd groß genug, um die beiden Dinge, die ich gerade geschrieben habe in. stellen Yeah? PUBLIKUM: [unverständlich] DAVID J. MALAN: Gute Frage. Warum können wir nicht einfach darzustellen, dass negative Anmeldung als nur ein Zeichen? Also haben wir absolut konnte, und wir könnten dann speichern ein zusätzliches Bit. Aber du bist immer noch zu müssen, dass dash darstellen, und das wird, kostet Sie zumindest etwas, vermutlich ein bisschen. Also ja, könnten wir 32 Bit für unsere Nummer, aber jetzt Wir brauchen ein neues etwas für unsere Bindestrich Symbol, das Minuszeichen. So, jetzt haben wir 33-Bit-Werte, die wir tun könnten, aber es ist einfach nicht so, wie es gemacht wird. Wir haben ein Urteil Anruf Jahren, ist 32 Bit Art der Maßeinheit hier. So werden wir zu einem dieser Bits effektiv zu nutzen, um stellen Negativität, und 31 Bits, um die Zahl darzustellen. Weitere Fragen? Gut. Das ist eine Menge. Warum gehen wir nicht voran gehen und nehmen unsere fünf Minuten Pause hier? Gut. Also noch einmal, um nicht überbetonen die mathematischen Anwendungen der Programmierung, lass uns einfach abzupfen dieses ein Beispiel bevor wir in anderen Konstrukten zu verschieben, nur weil es wird ein paar gemeinsame Stolperstein Punkte auf einige zeigen die Grundlagen, wenn es um das Schreiben von Programmen kommt. In diesem Fall tut arithmetische Ausdrücke, die einige haben Interessant Relevanz für die Syntax. So ist dies nur eine Formel, mit denen wir wandeln Temperaturen von Fahrenheit in Celsius. Wenn Sie nicht erinnere, das ist nur die Formel. Also, wenn wir stecken in Fahrenheit Wert von 32 Grad, das ist Einfrieren, das wird zu 32 minus 32 gleich 0 ist, und in der Tat, 0 in Celsius ist auch dem Gefrierpunkt. So schnell sanity es zu überprüfen - das ist die bekannte Formel. Laß mich hinübergehen, um das Gerät, obwohl, und beginnen Schreiben Sie ein Programm namens, wie, f2c, "Fahrenheit Celsius dot c ". Und an der Spitze hier, ich werde beginnen mit # include stdio.h, und ich werde int main (void) zu tun, und wieder, wir kommen zurück in die Zukunft, was bedeutet, int gibt und was void bedeutet es. Und jetzt lassen Sie mich gehen Sie vor und Umsetzung eines Programms, dass Wesentlichen funktioniert diese Umwandlung für uns. So printf, sagen wir mal, Temperatur in Fahrenheit. Und dann lassen Sie mich weiter zu machen und den Wert des Benutzers. Welche Art von Wert sollte ich von dem Benutzer zu bekommen, wenn ich will sie geben mir eine Temperatur in Fahrenheit? Yeah? Was würden Sie vorschlagen? Yeah. So float fühlt sich ziemlich vernünftig. Wir haben wieder nur ein paar Optionen, die Wir haben bisher gesehen. Wir haben Dinge wie char, double, float, int, long long, bool, string. So davon, fühlt float ziemlich vernünftig. Wir könnten eine doppelte, rechts, denn wenn wir wirklich wollen, stellen eines Menschen Temperatur - 98,60000 - konnten wir mit 64 Bit zu tun, aber es fühlt sich an wie Overkill für die Temperatur. Also lass uns einfach gehen mit Schwimmer. Jetzt brauche ich eine Variable. Nur um die Dinge einfach halten, werde ich es nennen f, aber ich könnte genauso richtig nennen es Temperatur, aber entweder ist in Ordnung. So schweben f = GetFloat. Sobald ich jetzt beschlossen haben, GetFloat verwenden, obwohl ich müssen ein Korrektur vorzunehmen. Yeah. Also müssen wir # include müssen, da sonst die Compiler gehen, um uns zu schreien. Jetzt, da ich einen Schwimmer haben, lassen Sie mich gehen Sie vor und tun das Konvertierung. So lassen Sie mich zunächst auch in die Gewohnheit zu bekommen hier kommentierte mein Code. Also noch einmal, ist ein Kommentar nur eine Notation für das menschliche, das ist nicht Teil des Programms per se, aber es ein, hilft Ihnen verstehen, was Sie am nächsten Morgen tat, oder die nächste Monat, hilft es, Ihren Unterricht Kollegen verstehen, was du getan hast oder was Sie zu tun gedenke, so ist es in der Regel sehr gute Praxis. Alle paar Zeilen Code, schreiben Sie einen Kommentar zu Sie oder Ihre Kollegen. Also hier, ich werde sagen: "Benutzer fragen, für die Temperatur." Muss nicht ein vollständiger Satz, nur eine kurze Phrase sein. Aber die Idee, die hinter kommentieren in C ist, dass jede Ihrer Kommentare sollten befähigen Sie - oder, sagen wir, ein TF oder einen Kollegen - Ihr Programm überfliegen und wissen genau, was sie tut, indem sie nicht so viel Lesen des Codes, sondern durch das Lesen der Kommentare, die sollte prägnant und klar. Alles klar, also lassen Sie mich jetzt voran gehen und sagen, "Konvertieren Fahrenheit in Celsius. "Also werde ich weitermachen und tun, sagen wir mal, float c. Wir halten Celsius als Fließkommazahl. Und lassen Sie mich einen Stich an diese. Die Formel ist wiederum hier oben. Als 5/9 mal F minus 32. Also lasst uns dies tun. So 5 von 9 geteilt, minus - hoppla, durcheinander ich es schon. Times. So 5/9 mal F minus 32. So F minus 32, Semikolon. Und jetzt, hier unten, ich werde weitermachen und sagen, drucken Ergebnis. Und dieser Teil ist einfach. Printf. Wie kann ich über das Drucken dies gehen? Nun, ich könnte sagen: "Diese Zahl in Celsius% f \ n", nur für einige Ästhetik. Und dann, welchen Wert will ich hier als printf den Stecker zweite Argument? Okay. Also einfach c. Also werden wir mit diesem zu starten und dann nur 0 zurück. Auch hier hat es nichts mit der Mathematik zu tun. Es bedeutet nur, alles ist gut. Nun, dies ist richtig, dieses Programm? Gut. So habe ich einige Fehler gemacht. Selbst wenn Sie keine Ahnung, was die Programmierung haben, können Sie sortieren des folgern zurück zur Grundschule, was die Fehler hier sein könnte. Was ist einer der ersten? PUBLIKUM: [unverständlich] DAVID J. MALAN: Yeah. Daher freuen wir uns fehlenden Klammern. Es war vorsätzliche, dass ich Klammern haben in der Keynote schieben hier, weil es ist eigentlich dieser Begriff von Ordnung von Operationen oder Vorrang, wobei bestimmte Operationen - Multiplikation - haben eine höhere Bindung, haben eine höhere Priorität, als die Dinge wie Addition oder Subtraktion. So haben wir seit Jahren gemacht, nur um klare genau machen was mathematische Operation zuerst getan werden sollte. Also sollte ich wohl genau diese zu imitieren. Andernfalls wird der Computer vermutlich werde versuchen zu tun so etwas wie divide 5 von 9, dann multiplizieren F, dann subtrahieren 32 von der ganzen Sache. Was ist in der Tat nicht, was wir tun wollen. Also lasst uns klammern. Lasst meinen Klammern hier, Klammern hier. Setzen wir dies hier. Hier habe ich gerade bemerkt, andere Fehler, den ich auf dem Weg gemacht. Yeah? PUBLIKUM: [unverständlich] DAVID J. MALAN: Ah. Gut. So haben wir eigentlich die gleiche Zahl Geschäftsbereich Thema von vorhin. Ich das korrigieren, mal sehen, was das Symptom. Aber wir gehen zu müssen, eine richtige andere Fehler hier. Yeah? PUBLIKUM: [unverständlich] DAVID J. MALAN: Ja. Also, dummer Fehler ich gemacht habe, aber unglaublich wichtig. Der Computer ist nicht einfach nur ein Auge zudrücken und lassen me nutzen Kapital F, als ich erklärte, tatsächlich die Variable als Kleinbuchstaben f hier in Zeile 8. Also muss ich in Zeile 11 meine Aktivierung korrigieren, die ein vorhin war eine Hauptstadt F aus Versehen. Was ist hier? Sollte dies Kleinbuchstaben als auch? Es sollte, aber das ist ein Zufall. Das% f hat nichts mit der Variablen zu tun. Also einfach sein super hier klar, lass mich gehen Sie vor und Benennen Sie diese kurz, "Temperatur". Lassen Sie mich umbenennen Diese "Temperatur". Lassen Sie mich nicht umzubenennen. Denn wieder,% f global bedeutet, "floating point Wert." Hat nichts mit meiner variable tun. Aber "Temperatur" überall ist nur ein wenig wortreich, so werde ich zurück zu meinem kleinen "f" s. Nun, lassen Sie mich gehen Sie vor bis zu meinem Fenster hier. Machen f2c - das war wieder die beliebigen Namen I gaben auf diese Datei. Scheint zusammengestellt. Lassen Sie mich laufen f2c. Enter. Temperatur in Fahrenheit - lasst uns ein einfaches ein. 32. OK, zu korrigieren. Aber, wenn ich jetzt tun 212 zum Kochen - damn. Gut. Also, offensichtlich nicht korrigieren, wenn Ihr TF versucht mindestens zwei Werten. Also, was ist das Problem? Nun, haben Sie bereits mit dem Finger auf das, was das Problem ist. Aber warum ist das so? Hier oben, wenn ich tue, die Mathematik von 5 von 9 unterteilt. So konzeptionell, das ist vollkommen richtig. Völlig im Einklang mit der Formel. Aber Computer nur tun genau das, was Sie ihnen sagen, zu tun. Und was wir tatsächlich sagen, der Computer ist hier teilen die Zahl 5 durch die Zahl 9 und gib mir das Ergebnis. Das Problem ist aber, wenn Sie eine Division mit keine Daten Typen, ist die Ausgabe die gleichen Datentyp wie der Eingänge. Und dann, wenn die beiden Eingänge beide ints sind, ist der Ausgang gehen ein int sein. Und so 5 von 9 unterteilt ist Punkt etwas. Aber was ist die nächste ganze Zahl auf etwas hinweisen? Also, es ist eigentlich 0. So wie wir am Montag diskutiert, alles nach dem Komma Punkt wird abgeschnitten. Es wird nur weggeworfen. Dies ist also eine vollständige Fehler, denn ich könnte genauso gut multiplizieren alles von 0 hier. Jetzt kann ich dies in ein paar Möglichkeiten zu beheben. Ich konnte dies tun. 5,0 von 9,0 geteilt. Technisch kann ich nicht einmal das zu tun. Es genügt, um nur noch eine der Zahlen a float - oder Doppel - indem Sie den Dezimalpunkt hier. Weil das, was jetzt passiert ist, wenn Sie eine ganze Zahl von spalten ein Schwimmer oder ein Doppelbett, ist der Computer gehen zu realisieren oh, ist einer von denen genauer. Lassen Sie mich irren auf der Seite der Ihnen mehr Präzision als Sie bestimmt. So wird es konvertieren Sie das Ergebnis - es wird das Ergebnis als Gleitkommazahl sowie zurückzukehren. So das funktionieren würde. Das würde funktionieren. Und es gibt einen weiteren Mechanismus, den wir in Stilen näher nächste Woche. Sie können tatsächlich als Programmierer, sagen dem Computer tatsächlich behandeln ein Datentyp wie wäre sie eine andere. So konnte ich tatsächlich tun dies. In Klammern kann ich sagen, so etwas wie (float), offene paren, in der Nähe paren. Und das ist, was heißt "Casting". Wiederum weitere auf dieser nächste Woche. Doch dies ist nur die programmatische Möglichkeit zu sagen, der Computer, ja, ich weiß, 9 ist eine ganze oder eine lang. Ich weiß, es ist nicht eine Fließkommazahl. Sondern behandeln sie als solche sowieso. So ein Datentyp umgewandelt bedeutet zu konvertieren von einem zum anderen. Ehrlich gesagt, das nur ein wenig hässlich ist, so würde ich vorschlagen, wir gehen wieder auf den ursprünglichen Vorschlag nur das Umwandeln diese Dinge Gleitkommawerte manuell. Denn jetzt ist es einfach super klar, was los ist, und es ist nicht alles, was ablenken. Also lasst uns jetzt gehen zurück in mein Terminal-Fenster. Machen f2c. Lassen Sie mich gehen Sie vor und führen Sie dieses. Und als beiseite, lassen Sie sich langweilen Eingabe dieser Befehle wieder und wieder, zu realisieren, dass die Computer, wie Linux hier, sind in der Regel ziemlich schlau. Und wenn ich oben schlagen, können wir durch meinen ganzen Geschichte gehen Kommandos, Up and Down. Also in diesem Fall hier, kann ich einfach hingehen Bis zu make f2c. Ich werde angeschrien, weil ich genau das tat vor einer Sekunde. Es ist bereits up to date. So, jetzt kann ich laufen f2c wieder. Lassen Sie uns versuchen 32 Fahrenheit. Nun wollen wir versuchen, 212 Fahrenheit. Puh. Scheint zu funktionieren. Nun, dies ist gut, aber es fühlt sich ein wenig willkürlich, dass Ich zeige sechs Zahlen nach den Dezimalstellen. Right? Wenn Sie das Wetter Person TV, bist du eine Art doofus wenn du liest die Temperatur auf Dieses Maß an Präzision. Also lasst uns erleichtern dies. Lassen Sie uns also tatsächlich gehen hier, um meine printf. Und ja, ich will zu schweben. Aber ich will jetzt angeben, die Präzision. Und ich werde ein wenig prägnante sein. Ich werde sagen, gib mir ein Punkt nach der Dezimalstelle. Also anstatt zu sagen% f, werde ich sagen,% .1 f. Und dies bedeutet nur, mir eine Position nach dem Komma. Gut. Lassen Sie uns noch einmal versuchen. Lassen Sie mich erneut ausführen, nachdem kompilieren. Und jetzt tippe ich in 32, und ich bekomme wieder eine prägnanter Wert. Und ich kann in geben, jetzt, 212, und wieder eine knappere Wert als gut. Und es gibt andere Dinge, die Sie mit printf tun können. Sie können tatsächlich geben, wie weit die Zahl sein sollte. Wenn Sie Polsterung auf sie haben wollen, so können Sie mit der rechten Maustaste ausrichten oder linksbündig alle Ihre Zahlen oder versuchen Zentrum Dinge. So erkennen, gibt es kleine Tricks, die Sie dort tun kann. Aber sie gerade laufen auf Format-Codes, wie wir dort haben. So im Sinne dieser Ausgabe von Vorrang. Dies ist eine sehr langweilige Tabelle zu durchlaufen methodisch. Aber klar, dass die Autoren von C haben sich mit dem zu kommen Regeln geben, die die Betreiber höher haben Vorrang, mehr Bindekraft, als andere. Während also in der Grundschule, wir in der Regel wusste, dass es Multiplikation und Division, dann Addition und Subtraktion, dann einige andere Sachen. In einer Welt der Programmierung, gibt es eine viel längere Liste von Dingen. Und das ist nicht etwas wert Auswendiglernen jetzt. Du wirst es vor langer gewöhnen. Aber genau wie in der Grundschule, Klammern in der Regel lösen die Themen Vorrang, indem sie super klar die Computer und Mensch gleichermaßen, was beabsichtigt ist. So halten diese nur ein wenig Spickzettel gibt. Aber die meisten dieser Details, die wir nicht zu bekommen für einige Zeit. Gut. Jetzt wollen wir aufbauen und weg von dieser dummen, kleinen mathematische Beispiele. Immer noch die gleichen Grundlagen, sondern beginnen uns auszudrücken ein wenig mehr wie Scratch. So in Scratch, hatten wir diese Boolesche Ausdrücke. Und in Englisch, ist ein boolescher Ausdruck, was? Wahr oder falsch. Es ist etwas, das wahr oder falsch bewertet. 1 oder 0 ist. Oder ausschalten. Was auch immer Sie es nennen wollen. Jetzt in Scratch, sah die Puzzleteile so. Und das ist die Kombination, auf der Unterseite befindet, von drei Puzzleteile. Eine Verbindung - etwas, das leer und blank ist. Und dann zwei boolesche Ausdrücke darin. So kann man Nest Boolesche Ausdrücke mehr zu bekommen kompliziert Boolesche Ausdrücke. Zum Beispiel, wenn es ist Samstag, und es ist schön Wetter, dann nach draußen gehen. Oder etwas Willkürliches so. So können Sie an boolesche Ausdrücke zu kommen mit einer größeren Wahrheitsgehalt, deren Beantwortung basiert auf den kleineren. Jetzt, in C, zum Glück, ist diese Zuordnung eigentlich ziemlich einfach. Klammern dazu beitragen, dass die Dinge hier zu löschen. && Ist, was bedeutet, "und." Damit ist, wie wir werden diese Blöcke from Scratch zu C. konvertieren Und für die Bedingungen, die wir sahen in Scratch, auf der linken Seite gibt, kann ich sie ähnlich in der Hierarchie C. Wenn x kleiner als y, dann tun Sie dies. Sonst wenn x größer als y ist, dann dies tun. Else sie logischerweise gleich sein, so sagen dass sie gleich sind. So können wir jetzt damit beginnen, diese Dinge aufzubauen. So lasst uns ein Beispiel. Lassen Sie mich öffnen eine Datei, die auf dem Kurs der Website, dass es Ich schrieb im Voraus. Das nennt man nonswitch.c. Und wir werden sehen, warum in nur einem Augenblick. So in dieser Datei - nonswitch.c-- zuerst erkennen, dass es eine ganze Reihe von Kommentare am Anfang. Das ist nur Erläuterung der Name der Datei, was es tut, und so weiter. Und es offenbar demonstriert die Verwendung von Boolean AND-ing - conjoining zwei Ausdrücke. Also mal sehen, wie dieses Programm funktioniert. Ich schließe meine beiden Dateien, cs50.h und stdio.h. Wenn ich nach unten scrollen, jetzt, um das Programm, ist es ein wenig länger als wir vorher geschrieben, aber ziemlich lesbar. Also habe ich zuerst auf die Benutzer drucken, on line 18, "Gib mir eine ganze Zahl zwischen 1 und 10". So das ist recht. Jetzt bekomme ich die integer. Aber erkennen, dass GetInt - ziemlich einfach. Ist es nur geht, um einen int zu bekommen. Es wird, um sicherzustellen, dass es ein int zu bekommen und nicht ein String oder ein Schwimmer. Aber es wird nicht jede Art von Grenze Kontrolle zu tun. Es wird nicht zu filtern die Zahlen zwischen a sein bestimmten Bereichs. Also müssen wir, dass wir uns zu implementieren. Also einfach in Scratch gefallen, wo ich eine Konjunktion von do zwei Ausdrücke, kann ich das in C wie folgt. Wenn n größer als oder gleich 1 ist, und n kleiner als und oder gleich 3, ich bin sehr willkürlich Dekret gehen, dass Nummer eine kleine Zahl sein. Nur aus Gründen einer Anweisung. Else if n zwischen 4 und 6, print "Sie haben eine mittlere Nummer. "Else, wenn n liegt zwischen 7 und 10, print" Sie nahm ein große Nummer. "Else print" Sie holen eine ungültige Nummer. " Da logischerweise folgt, dass, wenn wir habe erschöpft unserem Sortiment. So klar, dass das nicht ganz, wie wir mehr als Schreib-oder gleich in einer Mathe-Unterricht. Right? In der Regel ziehen sie wie diese, mit der Linie darunter. Aber es gibt keine solche Taste auf meiner Tastatur. So das Zeichen nach C zur Expression von größer oder gleich ist zwei Zeichen, und das Symbol für weniger als oder gleich ist zwei Zeichen sowie. Gut. Also, wenn ich dieses Programm ausführen, können Sie wahrscheinlich erraten, was es ist tun werde. Wenn ich voran gehen und machen nonswitch, Enter. Und dann laufen nonswitch. Gib mir eine Zahl zwischen 1 und 10. Ich werde ihm 11. Ich nahm eine ungültige Nummer. Lassen Sie mich versuchen, die Nummer 3. Ich nahm eine kleine Anzahl. So ziemlich einfach da. Was ist, wenn ich will, um das Verhalten dieses Programm zu ändern und etwas ein wenig anders statt? Lassen Sie mich gehen Sie vor und sagen. Lassen Sie mich loswerden all dies. Und lassen Sie mich sagen, wenn (n == 42). Und dann werde ich nach vorne gehen und sagen print "Du hast dir das richtige Antwort. "Else wir gehen voran gehen und sagen, printf ("Sie haben die falsche Antwort ");. Okay. Nur weil. Jetzt, ein paar Punkte, die wir hier machen. Eines habe ich nicht geben Sie das Symbol, dass Sie denken, ist die vernünftigste. Wenn ich auf Gleichheit prüfen wollen, stellt sich heraus, die Sie nicht verwenden die Gleichheitszeichen. Sie verwenden stattdessen die gleiche Gleichheitszeichen. Und warum könnte das sein, nur intuitiv? Yeah. PUBLIKUM: [unverständlich] DAVID J. MALAN: Richtig. Das Gleichheitszeichen ist bereits für die Zuordnung verwendet. Jemand habe nicht wirklich glaube, das durch. Und jetzt, wenn es um die Gleichstellung Prüfung kommt, müssen wir expliziter sein, und sagen gleich entspricht. Ein sehr häufiger Fehler ist es, dies zu tun. Und wenn in der Bürozeiten oder irgendwann nächste Woche oder in der nächsten zwei Wochen werden Sie etwas tun und dann kämpfen mit ihm für 10, 20 Minuten, um herauszufinden, was das verdammte Bug ist, erkennen, dass Sie einer von denen sind Menschen, die diese Fehler gemacht. So, super einfach zu machen. Aber das Ziel ist jetzt abzuwehren diesen Fehler. Dies könnte zu bewerten, weil das, was ist das wirklich sagen? Wenn n erhält 42. So das Verb Menschen nutzen, mündlich, die zum Ausdruck bringen Begriff der Zuordnung "bekommt." Also, wenn n erhält 42. Das heißt also, weisen 42 bis n. Jetzt habe ich ein Boolean Ausdruck in Klammern, Innere dieser Bedingung ist, deren Wert 42. Right? Denn wenn Sie es beurteilen von innen heraus, die insgesamt Antwort, jetzt ist 42. Also, wenn ich Ihnen die Frage gestellt, "wenn (42)," was ist das wirklich sagen? Nun, man kann Boolean Ausdrücke nur wahr oder falsch sein. 1 oder 0 ist. Oder ausschalten. So scheinen wir eine Ecke Fall hier zu haben, wobei alle a Plötzlich, ich sage ", wenn (42)". Das ist nicht ein boolescher Wert. Also, was Computern zu tun, ist es aber im wesentlichen entspricht alles, was nicht 0 interpretiert wird um wahr zu sein. Ein. On. Sie sind alle funktionell gleichwertig. Nur der Wert 0 oder das Schlüsselwort falsch, wie wir schließlich sehen, ist eigentlich falsch. So ", wenn (42)" tatsächlich wahr sein, weil es nicht null ist. So um genauer zu sein hier ist ein boolescher Wert wirklich nicht so viel wahr oder falsch, aber für diese Fall, wenn die Zahl 0 oder ungleich Null ist. So falsch oder nicht falsch. Und das ermöglicht es uns, umso mehr umfassen Möglichkeiten in der Klammerausdruck. Also müssen wir, noch so sorgfältig, sagen - if (n == 42). Ganz einfach, weil wir brauchen, um einen Test der Gleichheit geben, nicht eine Zuweisung eines Wertes. Was ist erwähnenswert, hier? Diese geschweiften Klammern sind eigentlich nicht notwendig. Ich mache sie einfach zu sein nit-wählerisch hier. Aber wenn Sie eine Bedingung, die nur eine Zeile Code, als Bequemlichkeit, müssen Programmierer nicht verwenden müssen, die geschweiften Klammern. Es genügt, nur Gedankenstrich aus ästhetischen Gründen und dann schreiben Sie Ihre Code-Zeile. Nur wenn Sie zwei Zeilen Code zu schreiben - für So else printf ("Bye!"). Wenn Sie wollen, , dass wird diese unterbrochen. Sie können Gedankenstrich alles, was Sie wollen, aber die Tatsache, dass Sie getippt zwei Zeilen Code, ohne mit geschweiften Klammern bedeutet, dass dieses Programm nicht richtig oder vielleicht laufen würde nicht einmal richtig zu kompilieren. So jetzt, um ehrlich zu sein, ich denke, die beste Gewohnheit ist nur Verwenden Sie die geschweiften Klammern, und Sie werden feststellen, dass sie machen super klar, was los ist. Auch als beiseite - besonders wenn Sie zu denen, die verwendet die empfohlenen Bücher oder Online-Ressourcen - erkennen, dass es diese Vorstellung von Stil Programmierung. Und manche Leute eigentlich lieber um die geschweiften Klammern gesetzt hier auf einer Linie. Einige Leute ziehen es lächerlich, Dinge zu tun, wie steckte sie hier. Es gibt keine falsche Antwort, wenn es darum geht, Stil, aber das ist falsch. Aber manche Leute es tun. [Gelächter] DAVID J. MALAN: So erwähne ich das jetzt, weil so Sie lesen auf Dinge in Bücher oder online, wirst du bekommen verschiedene Meldungen von verschiedenen Lehrern und verschiedenen Autoren. Und genau erkennen, dass, funktionell, sind sie allgemein äquivalent, aber einheitlich sein. Also in diesem Fall, werden wir auf dem lockigen standardisieren Zahnspangen Schlange hier auf der linken Seite. Gut. So lassen Sie uns jetzt gehen und laufen das, und sehen, was passiert mit diesem Programm. Machen nonswitch. Dann laufen nonswitch. Gib mir eine Zahl zwischen 0 und - so ist das nicht relevant mehr, aber ich werde einfach willkürlich sagen 42. Und ich nahm die richtige Antwort. Nun, lasst uns tatsächlich nehmen diese in eine andere Richtung. Es stellt sich heraus, es gibt einige andere Syntax haben wir können in einem Programm verwenden. Hier ist ein neues Stück Syntax, die funktional ist die gleiche, aber nur stellt eine weitere Möglichkeit, uns auszudrücken. Also das ist eine so genannte "Switch-Anweisung." Und ein Switch-Anweisung arbeitet wie folgt. Es dauert in Klammern einen Wert, den Sie "Schalter" auf. Sie wollen sich anders zu verhalten basierend auf ihren Wert. Dies bedeutet also Schalter auf dem Wert von n ist. Und was bedeutet das? Nun, wenn n = 1 oder 2 oder 3, gehen Sie vor und ausdrucken "Du nahm eine große Anzahl "und dann brechen. Der Grund für den Bruch ist, daß der Weg C arbeitet wie sobald es einen Fall, dass übereinstimmt feststellt, startet es die Ausführung der gesamte Code darunter. Also, wenn ich eine Zeile Code haben, wie ich hier auf der Leitung 27 zu tun, es ausgeführt. Wenn ich eine andere Linie hier hinzufügen, wird es ausgeführt. Eine andere Linie hier, wird es ausgeführt. Das Programm stoppt die Ausführung, was unter dem anwendbaren case-Anweisung, wenn ich explizit sagen "zu brechen." So falsch. Rechts, in diesem Fall als Ergebnis. Fall 4 oder 5 oder 6, ähnlich, wird drucken Sie eine Nachricht. In diesem Fall mittlere Anzahl. Brechen. Fall 7, 8, 9, 10, es geht um auszudrucken "Du hast einen großen Nummer. "Break. Und dann gibt es buchstäblich ein Schlüsselwort heißt "default" Das ist effektiv wie der "else" zu konstruieren. So eine neue Syntax, aber intellektuell, überhaupt nichts Neues. Es ist genau wie der Scratch. Wenn else if, else if, eine Art Block. Damit ist das Einschalten Version dieses Programms. Aber beachten Sie, dass wir es getan haben mit Zahlen hier. Lassen Sie mich eröffnen eine zweite Version, nur um zu zeigen etwas mehr Beton. Also hier haben wir Klassen statt. Stellt sich heraus, Sie Schalter nicht nur auf ganze Zahlen verwendet werden können, sondern auf Zeichen. Nicht in allen Datentypen, aber zumindest auf Zeichen. Also hier konnten wir etwas tun, wenn der Wert von C, dass der Benutzer eingegeben wird, in der Leitung 19 unter Verwendung der Funktion GetChar, ist das Kapital A-oder Kleinbuchstaben a, lasst interpretieren als Klasse, und sagen, sie nahm eine ausgezeichnete Qualität. Und entlang der Switch-Anweisung, wir haben andere Fällen für "B"-Werte und "C" s, und so weiter. Aber lassen Sie uns nun runden eine andere Sache. Und wieder, Art des Fliegens durch einige dieser Beispiele. Aber es ist wirklich so, dass wir sie anwenden, jetzt - oder wirklich nur übersetzen sie nun - bis C. Also lass mich gehen Sie vor und tun dies. Ich werde zu öffnen eine neue Datei. Und ich werde tun include. Und dann werde ich int main (void) zu tun. Lassen Sie mich diese Datei speichern als loop.c. Nur als Beispiel. Und ich werde weitermachen und gehen Sie folgendermaßen vor. Ich möchte eine sehr mühsame Programm zu schreiben. So 10. Lassen Sie uns dies tun. 9. Gut. Sobald Sie tun dies in der Programmierung beginnen, sind Sie wahrscheinlich etwas falsch. Aber wir werden es trotzdem starten. Oops. Das ist eigentlich falsch. 7. 6. 5. 4. Nichts wird passieren, wenn wir auf 0 zu bekommen. 3. 2. Ein. Okay. 0. Löschen. Gut. So 0 zurück. So dieses Programm ist offensichtlich werde, was es sehr zu tun mühsam sagt, es tun werde. Es wird all jene drucken Werte, von oben nach unten. So lass mich machen Schleife. Und dann - hoppla. Machen Schleife. Ich war im falschen Verzeichnis. Und nun lassen Sie mich laufen Schleife. Enter. Woohoo. Very nice. Nice, langes Programm. Alles klar, aber jetzt machen wir das besser. Just in Scratch möchten, wenn Sie einen Looping begonnen Konstrukt, anstatt nur das Kopieren und Einfügen alle der Puzzleteile, lassen Sie mich dieses Ding. Also in C, gibt es verschiedene Schleifenkonstrukte, von denen sieht wie folgt aus. A "für" Schleife hat drei Dinge, die durch zwei Semikolons getrennt. Und dann, im Inneren des Körpers der Schleife, sozusagen - die Zeug in der geschweiften Klammern - wir können etwas wieder und wieder zu tun. Also, was ich hier habe auf dem Bildschirm, ist dies buchstäblich nur ein Kommentar. Die / / bedeutet, hier kommt ein Kommentar. Dies ist kein Code. Dies ist nur auf Englisch, für mich, der Mensch. So Initialisierungen, Bedingungen und Updates. Nun, lassen Sie, wie das funktioniert. Dies ermöglicht es mir, dieses Programm wie folgt umschreiben. For - so hier kommt meine Schleife - int i - Hier kommt eine Variable namens "i" - bekommt initialisiert bis 10 ist. So gibt es meiner Initialisierung. Ich möchte diese Schleife so lange "i" ist größer als oder tun gleich 0 ist. Und bei jeder Iteration dieser Schleife, möchte ich bis i tun -. So sahen wir + + am Montag. - Ist das Gegenteil. Es vermindert den Wert um 1 erhöht. Innerhalb dieser Schleife, möchte ich etwas zu tun. Also werde ich so etwas wie printf sagen. Ich will nicht bis 10 jetzt sagen, da dies offensichtlich nur gehen auf den gleichen Wert zu drucken. Was will ich stattdessen, wahrscheinlich drucken? Yeah. So "i". So% d, i. So werde ich eine dieser Ideen aus früheren stehlen - diese Substitution für Format-Codes - und dann hier unten, am Boden, ich 0 zurück, nur für eine gute Maßnahme. Aber jetzt habe ich eine prägnante Programm. Es ist nur ein paar Zeilen, und nicht etwa 10 oder 11 Zeilen. Lassen Sie mich zu meinem Eingabeaufforderung hier unten gehen. Remake Schleife. Führen Schleife. Und es wird die gleiche sein. Jetzt ist das Programm nicht mehr interessant. Aber jetzt kann ich geben etwas wie dieses. Ich kann dies auf 100 ändern. Ich kann dann neu kompilieren meinem Programm. Und dann kann ich wieder mein Programm. Und jetzt geht es super-schnell auf den heutigen Computern. Aber da habe ich - und tatsächlich, hat mein scrollback Puffer nicht sogar so weit gehen. Dort gehen wir. So, da haben wir alle 100. Aber es ist leicht zu Fehler machen. Was wird das erwartete Verhalten, wenn ich versehentlich tun? So fühlt es sich wie unendlich. Also lasst uns sehen, ob der Computer verhält. Also lassen Sie mich voran gehen und Schleife. Und lassen Sie mich laufen Schleife. Also lasst uns kommen zurück zu, dass in nur einem Augenblick. Wir lassen diesen Lauf. Denn was sollten wir zählen bis minimal? Wahrscheinlich mindestens 2 Milliarden, wenn wir, dass viele Bits und verwenden wir positive Werte. Also lasst uns springen wieder hier. Neben diesen Arten von Schleifen, haben wir sogenannte, während Schleifen. So, wie in Scratch, musste man immer Blöcke, und man musste Repeat Blöcke. Auch in C, man muss nur andere Wege sich auszudrücken. So haben Sie diese Vorstellung von einer while-Schleife, die Ihnen erlaubt, äußern Sie sich ein wenig anders. Und dann haben Sie etwas namens eine do-while-Schleife, die arbeitet etwas anders als gut. Und wir werden diese auseinander zu necken im Laufe der Zeit. Aber lassen Sie uns einen Blick auf diese letzte hier. Wenn wir in - noch läuft. Es ist ziemlich unendlich. Also lass mich in positive zu gehen, und zeigen, wie wir tatsächlich regeln Benutzereingaben ein wenig mehr effektiv. Es ist ein ziemlich kurzes Programm. Und hier haben wir, in Haupt-, ein int n Erklärung. Also gib mir eine Variable namens n. Nun, ich buchstäblich sagen, "Tun." Und dann habe ich noch offenen geschweiften Klammer, in der Nähe geschweiften Klammer. Und dann bemerken, gleich danach, sagt sie, während n kleiner als 1 ist. So bemerken, dass diese Zeilen - 19 bis 24 - komponieren gemeinsam eine do-while-Schleife. Und wieder eine neue Syntax, keine neue Idee. Es ist nur eine andere Art Looping, syntaktisch. Was bedeutet dies tun? Gehen Sie folgendermaßen vor, während n kleiner als 1 ist. So was will ich tun? Ich verlange, dass Sie mir eine positive ganze Zahl ist. Dann habe ich tatsächlich versuchen, eine ganze Zahl von Benutzer zu erhalten. Aber in Bezug auf die Reihenfolge der Operationen hier, weil das während Bedingung ist hier unten, ich bin dann gehen, um zu überprüfen, ist n weniger als 1? So nehme an, dass der Benutzer - Nachdem auf diese Weise verlangt - Typen im Wert 0. Diese Bedingung wird wahr oder falsch sein? Nun, es ist eigentlich los, um wahr zu sein. Wegen n = 0, und 0 kleiner als 1 ist. Also, was bedeutet das? Es wieder tun. Es wieder tun. Es wieder tun. Nur einmal, dass diese Bedingung als falsch ausgewertet. Wenn ich schreibe in 42. Nun nein, ist 42 nicht weniger als 1 ist. Deshalb ist diese Schleife getan ausgeführt wird. Und so an diesem Punkt wird das Programm sagen, vielen Dank für die 42, in diesem Fall. Jetzt haben Sie auf diese Weise, sich auszudrücken - Wir sollten nicht darauf warten zu beenden. Es wird einige Zeit dauern. Fortgesetzt werden beim nächsten Mal vielleicht. Aber jetzt haben Sie die Möglichkeit, um hoffentlich ein Verständnis bisschen Geek Humor. Entschuldigungen. Dies ist nicht repräsentativ für Humor in der Informatik Welt, aber es ist süß. [Lacht] Lassen Sie uns Ende dieser Bemerkung. Und wir werden uns am Montag sehen. [Applaus]