[Musikwiedergabe] DAVID MALAN: Hallo, alle zusammen. Dies ist der CS50 supersection. Zugeordnet Abschnitte werden nicht Start für eine weitere Woche. Und so heute, ich bin hier mit-- Maria: Maria. DAVID MALAN: --to tatsächlich einen Blick auf Problem set one, den Kurs der ersten Wochen des Materials, erhalten Sie mit CS50 IDE orientierten, ein bisschen von Linux, das Betriebssystem, ist auf IDE ausgeführt wird, sowie Blick auf einige der Übergangs von Grund auf neu zu C führender bis zu einem Problem eingestellt. So ohne weiteres, in einem Problem eingestellt, wirst du sein wirst In den CS50 IDE, eingeführt, ist diese web-basierte Programmierung Umwelt, die wir benutzen, um , Programme zu schreiben. Es ist so konzipiert, dass sehr freuen erinnert eines typischen Computer System ein Betriebs System namens Linux. Aber es ist in der sogenannten Cloud, die jeder in der Klasse bedeutet, kann tatsächlich seine eigene Rechnung und verwenden Sie es, wie gut. So dass die meisten von Ihnen wahrscheinlich noch nie benutzt eine Linux-Umgebung vor oder vielleicht auch ein Kommandozeilen-Umgebung. Und ein Befehlszeilen- Umgebung unterschiedlich ist. Es ist alles textlichen. Es ist alle Tastaturbefehle. Und es ist kein mousing, keine Symbole, keine Dialog-Fenster, keine Menüs. Es ist rein text. So auf den ersten, es Art der fühlt sich wie ein Schritt rückwärts in Bezug auf die Raffinesse. Aber es endet als eine Menge leistungsfähiger, natürlich, für Informatiker, letztendlich. Werfen wir also einen Blick. Hier bin ich am CS50.io, über die Sie in CS50 IDE anmelden können. Und ähnlich wie in Scratch, gibt es drei Hauptbereiche zu diesem Bildschirm. Also auf der linken Seite haben wir was wird die Datei-Browser. Und da ist dieser Ordner an Spitze, die jetzt leer da wurde ich von allen meinen befreien Dateien vor supersection. Und das ist, wo wir speichern C-Dateien, die wir schreiben. In der oberen rechten, haben wir einen Ort, an dem alle unsere Code geht um geschrieben zu werden. Und in der Tat, wenn ich auf dieses Plus, diese geht, mich zu wählen Sie Neue Datei. Und hier kann ich das Schreiben von C-Code oder zu starten, wirklich, eine beliebige Anzahl von anderen Sprachen. Und dann an der Unterseite, wo sie sagt jharvard @ ide50-- und verkaufen wird sagen, etwas ein wenig different-- was so genannt? Terminal-Fenster. Ja. So kann das Terminalfenster ist die so genannte Befehlszeile Schnittstelle, über die Sie interagieren können mit dem darunterliegenden Betriebssystem. Und für jetzt, wir sind zu gehen machen sehr wenig Gebrauch von this-- nur um zu kompilieren, zu betrachten Fehlermeldungen, die wir sehen, und unsere Programme auszuführen. Aber letztlich werden wir um so viel mehr zu tun, als gut. Und Sie können auch Software installieren und verwalten Sie Ihren Arbeitsbereich innerhalb CS50 IDE, wie gut. Aber dazu ein anderes Mal. Also lassen Sie uns fortfahren und schreiben ein sehr einfaches Programm gerade durch ein Aufwärmen gehen hello.c, das ist vielleicht das einfachste Programm können wir schreiben. Ich habe schon einen neuen Tab geöffnet. Ich werde weitermachen und sagen, umfassen Standard io.h Dann int main (void). Und dann printf ("Hallo, Welt" Backslash-n, in der Nähe Zitat, close Klammern und Strichpunkt. Gut. So, jetzt feststellen, mein Fenster ist unberechtigt. Also ich bin sehr schnell gehen hinauf auf Datei, Speichern. Und es ist wichtig, dass Ich nenne das nicht "Hallo." Also ein sehr häufiger Fehler, vor allem in Problem eingestellten, ist es, versehentlich rufen Sie einfach Ihre Programm "Wasser" oder "gierig" oder "Mario" oder "Kredit" oder dergleichen. Aber Sie wirklich wollen, um sicher, dass Sie die Dateierweiterung haben denn dies ist die einzige Möglichkeit, dass der Compiler und auch der Code-Editor weiß, dass Sie tatsächlich das Schreiben von C-Code. Also lassen Sie mich gehen Sie vor und klicken Sie auf Speichern. Und jetzt, auch, was CS50 IDE für uns getan wird, ist es auch Syntax-Hervorhebungen alles. So ist es machte alles sehr bunt. Und der ganze Zweck der das ist nicht funktionsfähig. Es ist nur meine Augen, um das Zeichnen konzeptionell unterschiedliche Stücke dieses Programms. Also lassen Sie uns fortfahren und übersetzen diese. Und ich kann dies zu kompilieren in einer Reihe von Möglichkeiten. Und in der ersten Woche, die Old-School-Art, wie wir taten es war buchstäblich in Befehls line-- "Klappern hello.c." Und dann traf ich ein. Und nichts scheint zu geschehen im Terminalfenster. Aber was tat Änderung in der IDE? Wo wiederum IDE bedeutet nur, Integrierte Entwicklungsumgebung. Es ist eine andere Art zu sagen Diese integrierte Entwicklung Umgebung für die Entwicklung von Software. Also, was haben in der Benutzeroberfläche ändern? Was fällt Ihnen auf das ist etwas anderes, Maria? Maria: Ich bemerkte etwas unter der IDE50 Ordner hier oben. DAVID MALAN: Ja. Also hier oben, nicht nur wir haben "hello.c." Wir haben auch "a.out", das ist, Art von einem stummen Namen für ein Programm. Aber in der Tat, es ist der Standardname für ein Programm, wenn Sie einfach Ihren Code zu kompilieren und der Compiler nicht sagen welche Datei ausgegeben. Also, wenn ich dies ausführen, I müssen die compiler-- sagen oder besser gesagt, ich brauche, um sagen Sie den Arbeitsbereich, den ich wollen das Programm die Ausführung von "a.out". Eintreten. Und es gibt "Hallo, Welt. "Jetzt ist die" ./ ". ist eigentlich wichtig. Auch wenn in der Regel nur wir schreiben die Namen von Befehlen, wenn es ein Programm, das Sie haben geschrieben, Sie wollen, um "./" sagen, weil das Linux explizit sagt, dass Sie ein Programm namens ausführen möchten "a.out", die in diesem, wo dot bedeutet dieses Verzeichnis, dass ich derzeit in, der zufällig genannte Arbeitsbereich "a.out. Denn wenn ich sagte nur "a.out" eingeben, Ich werde a.out Befehl nicht bekommen " gefunden ", weil der computer-- weil ich erfunden "a.out"; es hat nicht mit der computer-- kommen weiß nicht, wo es zu suchen, auch wenn es richtig ist unter die Nase, so zu sprechen. OK. So konnten wir dies ändern "Klang -o hallo hello.c" sein. Und wenn ich drücken Sie die Eingabetaste, welches Programm das wird ausgegeben für mich? Was ist der Name der Datei? Ja, auf der Rückseite. Stimmt. "Hallo." So "Hallo" sein wird, der Name des Programms, eine so genannte, weil wir verwendet haben Befehlszeilenargument, das nur beinhalten eine Veränderung des Verhaltens der Compiler tatsächlich ausgegeben einen bestimmten Dateinamen. Und in der Tat, wenn ich heran heraus und schauen Sie sich hier ein, jetzt habe ich nicht nur "a.out" und "hello.c", sondern auch "Hallo", als auch. So, jetzt kann ich tun "./hello," Enter. Und es gibt "Hallo, Welt." Aber lastly-- und dies wird nun die Konvention sein wir während der Verwendung Semester typically-- ist, können Sie auch einfach sagen, "zu machen hallo." Und in der Tat, es sagen, es ist bis auf dem neuesten Stand, da sie bereits vorhanden ist. Lassen Sie mich gehen Sie vor und nehmen Sie mit Die RM-Befehl, sowohl "a.out" - und sagen Sie "entfernen reguläre Datei a.out?" Das bedeutet nur, Sie sind sicher, dass Sie es wirklich löschen? Ich werde ja zu sagen. Und dann werde ich entfernen "Hallo", aber nicht "hello.c." Ich werde ausdrücklich auf "Ja" sagen, aber "y" ist ausreichend, wie gut. Und nun merken, wenn ich Geben ls-- die, Rückruf, bedeutet list-- alles listet der Dateien in meinem Ordner. Und in der Tat, wenn ich heran out und links oben schauen, sie bestätigt, dass was ist in diesem Ordner selbst obwohl es als IDE50 hier markiert und nicht die Arbeitsfläche, es ist nur "hello.c." So, jetzt hier unten, wenn ich weiß "machen hallo," Enter, jetzt sehe ich eine viel längere Befehl, sondern ein mehr anspruchsvolle Befehl, die gehen die in den kommenden Wochen zu sein. Und jetzt kann ich sagen "./hello." Werfen wir also einen kurzen Rundgang eine andere Linux-Befehle. Dann, warum nicht wir einen Schritt Rücken und tatsächlich an C aussehen in der Regel, den Übergang von Scratch nach C und dann mit einem Blick zu schließen beim ersten Problem in C eingestellt Ordnung. So werde ich voran und nur sauber gehen mein Arbeitsbereich mit gedrückter Ctrl-L nur um den Bildschirm ordentlich zu halten. Aber das hat keine funktionelle Auswirkungen auf andere Weise. Daran erinnern, dass wir gesehen haben, ein paar Befehle jetzt. Also haben wir clang gesehen, die in der Regel Sie müssen nicht mehr manuell durchführen. Wir werden stattdessen make. Aber wir sahen auch ls, was eine zeigt Liste der Dateien in meinem Verzeichnis. Und nun, was ist sind-- Es gibt zwei Dateien jetzt "Hallo" und "hello.c." Warum gibt es einen Stern oder ein Sternchen nach "Hallo"? Was hatte das zu bedeuten, der Basis auf das, was wir in der ersten Woche sah? Was denken Sie? Was bedeutet die Sterne bedeuten? MARIA: For-- dem Programm "Hallo"? DAVID MALAN: "Hallo *". Ja. Oh ja? Oh, ausführbare Datei. Stimmt. So bedeutet das, dass "Hallo" ausführbar ist. So in der Tat, das ist, warum Was ich tun kann "./hello." Gut. Also, was kann ich sonst noch hier? Nun stellt sich heraus, ich kann auch Verzeichnisse erstellen. Also lassen Sie mich gehen Sie vor und erstellen, zum Beispiel ein Verzeichnis "pset1". Und das Problem gesetzt Spezifikation haben Sie genau dies zu tun, so müssen Sie nicht heute zu erinnern. Aber "mkdir pset1" scheint, um keine Auswirkungen. Aber noch einmal, keine Fehlermeldung ist in der Regel eine gute Sache. Also, wenn ich schreibe "ls" now-- ah, jetzt Ich habe eine ausführbare Datei mit dem Namen "Hallo", eine C-Datei namens "hello.c." Und dann der Schrägstrich, so zu sprechen, bedeutet, dass dies ein Verzeichnis. Also ja, jetzt will ich es zu öffnen. Und ich weiß nicht Doppelklick auf sie wie in einer GUI, grafische Umgebung. Ich stattdessen sagen: "cd pset1." Eintreten. Nichts Interessantes zu haben scheint, passiert, außer meinem kleinen Aufforderung hier-- dies Linux Weise der Erinnerung mir, wo ich bin, so was Ordner geöffnet ist. Es hat mir gerade erzählt explizit im Gegensatz zu graphisch. Und wenn ich "ls", warum muss ich ein weiteres zu sehen prompt sofort, denken Sie, wenn ich mich auch den Inhalt des pset1? MARIA: Sie haben wahrscheinlich nicht haben nichts drin. DAVID MALAN: Ja. Also haben wir nicht offensichtlich dort geschaffen nichts weil ich einfach das Verzeichnis erstellt. Nun, wenn ich wollte eine file-- für erstellen So konnte ich eine neue Datei erstellen. Und dann konnte ich zu gehen Speichern und speichern Sie sie als, wie, "mario.c", wenn Sie tun, die Standard-Ausgabe von einem pset. Und dann, wie jeden Mac oder PC, nur wählen Sie den Ordner "pset1, Speichern. Und nun die Datei leer ist. Aber lassen Sie uns heran wieder für eine Sekunde. Lass uns ls hier. Jetzt sehen wir, "mario.c". Also gibt es ein paar andere Befehle, sind es wert, wenn man bedenkt, über Zeit-- klar, oder Strg-L ist, was ich gewesen schlagen; mkdir wir gesehen haben; rm wir gesehen haben, als auch, was ist zum Entfernen oder Löschen einer Datei. Hüten Sie sich vor Sie also-- können, und wenn Sie schauen bei Online-Lernprogramme, werden Sie rm -rf ist eine sehr häufige Art zu sagen, löschen Sie einen Ordner, der Sachen in sich hat. Seien Sie einfach super, super vorsichtig. -rf bedeutet rekursiv löschen Sie, was es ist Sie versuchen, zu löschen sind und zwangsweise zu löschen. So rekursive Mittel, wenn es ein Verzeichnis mit ein Ordner mit einem Ordner mit einem Ordner, löschen Sie alle von ihnen. Und zwangsweise bedeutet, noch nicht einmal fragen mich, ja oder nein, ich bin sicher? Also ist es ein super gefährlichen Weg Löschen viele Sachen schnell. Aber beware-- zu oft tut ein unerschrockener Schüler versehentlich löschen, sagen wir, pset ein, zum Beispiel. MARIA: Und wenn sie nur -r zu tun, werden sie um sie über jede einzelne Datei zu fragen. DAVID MALAN: Welches ist mäßig ärgerlich. Maria: Ja. DAVID MALAN: Also das ist, warum so viele von uns, inklusive Selbst, bin in der Gewohnheit, mit -rf. Aber es ist gefährlich. So Käufer Vorsicht. Und dann ist mv Art interessanter benannt. Das ist also der Bewegungsbefehl, das fühlt sich ein bisschen komisch denn man kann in der Tat es verwenden, um Verschieben von Dateien von einem Ort zum anderen. Zum Beispiel: Angenommen, dass ich durcheinander. Nehmen wir an, dass ich erstellt eine neue Datei für die pset. Und ich sie gespeichert als "greedy.c." Aber angenommen, ich versehentlich speichern in IDE50-- so in meinem Arbeitsbereich selbst und nicht in pset1. Sie können so viel links oben zu sehen. Es gibt "greedy.c." Und es gibt ein paar Lösungen. Eines kann ich das verwenden Superbenutzerfreundlich nur Drag & Drop. Und das wäre wirklich dieses Problem zu beheben. Aber heute, wir versuchen, zu betrachten desto mehr obskure, aber leistungsstarke Möglichkeiten dies zu tun. Also lassen Sie mich nehmen "ls" in pset1. Und ich sehe nur "mario.c." Lassen Sie mich gehen Sie vor und tun "cd ..". Also CD wieder Verzeichnis wechseln. "..", Was bedeutet, obwohl? Zuletzt sagte ich "cd pset1 "in pset1 gehen. Also, wenn ich sage "cd ..", was bin ich? Rückwärts. Ja. So ist es mit dem so genannten Mutter gehen. Gehen Sie eine Ebene nach oben, wie Austritt aus einem Ordner. So ein. Und in der Tat, schauen, was es getan hat. Es hat mich einfach in Arbeitsbereich statt der in pset1, die im Arbeitsbereich ist. Und jetzt, wenn ich schreibe "ls", es gibt eine ganze Menge Zeug. In gibt es "greedy.c". So, jetzt lassen Sie mich mv wörtlich bewegen "greedy.c" in pset1. Und so viele Linux-Befehle arbeiten genau so. Sie nehmen keine Argumente, oder sie nehmen ein Argument, oder sie zwei Kommandozeile übernehmen Argumente und so weiter. Und in diesem Fall ist es wahrsten Sinne des Wortes zu tun, was es sagt, wenn auch succinctly-- bewegen greedy.c in pset1. Eintreten. Nichts scheint zu geschehen. Aber wenn ich wieder tun ein ls, gierig ist weg. Und wenn ich "cd pset1", ein, und klicken ls wieder, jetzt ist es an der richtigen Stelle. Nebenbei bemerkt, wenn beispiels einige reason-- insbesondere wenn Sie intermittierende Netzwerkkonnektivität oder du bist herum Campus mit Ihrem Laptop-Deckel geschlossen und öffnen Sie es bis immer Ihren Arbeitsbereich scheint etwas aus dem Takt, keine große Sache. Einfach laden Sie Ihre Browser Fenster, und es sollte Resync so daß die linken Datei-Browser sieht genau wie das Terminalfenster. Keine Sorgen machen. Im Zweifelsfall laden Sie die Seite, so dass solange Sie die Dateien bereits gespeichert haben. OK. So mv kann auch verwendet werden, um Dateien umzubenennen. Und lassen Sie uns einen Blick auf dieser letzte Befehl hier. So suppose-- und dies ist Super gemeinsamen, auch, frühzeitig zu erkennen. Einige Schüler eine Datei gelegentlich zu erstellen genannt, lassen Sie uns sagen--, was ein anderer? Wie "WATER.C." Also werde ich nur schreien, für keinen Grund, in Großbuchstaben. Aber dies ist nicht der richtigen Namen für die Datei wenn auch nur, weil unser Problem eingestellt Spezifikation nicht sagen um die Datei als Großbuchstaben speichern "WATER.C." Stattdessen erwarten wir "water.c" in Kleinbuchstaben. Und in der Tat ist dies problematisch, weil check50, ein Programm, du gehst um bei der Problem treffen Set eines, das automatisch prüft die Richtigkeit der Code wird sich auf Sie schreien, wenn es nicht kann finden "water.c" in Kleinbuchstaben. Also muss ich dieses Problem beheben. So viele verschiedene Möglichkeiten, dies zu tun, von denen die erste wäre die Strg- oder Rechtsklick- den Dateinamen und ändern Sie einfach umbenennen. Völlig in Ordnung, das zu tun. Aber noch einmal, heute, lassen Sie uns tun Sie es ein wenig schicker. Lassen Sie uns mv ändern "WATER.C" auf "water.c." So können Sie auch das erste Argument verwenden, um es in die zweite Argument umbenennen wenn das zweite Argument ist nicht, in der Tat, ein Ordner oder ein Verzeichnisname. Gut. Und schließlich, so bin ich ein wenig in trick-- Mein Arbeitsbereich-Verzeichnis im Moment. Wenn ich in pset eins zu bekommen, Ich kann auf jeden Fall geben Sie "cd pset1." Aber es ist so langweilig "pset1" eingeben oder längere Dateinamen oder Verzeichnisnamen immer noch. So sehr oft in Linux, was Sie tun können, ist die ersten Buchstaben "pse" und einfach nur langweilig wird, drücken Sie Tab, und lassen Sie der Computer figure it out für Sie. Super hilfsbereit, in diese Gewohnheit zu bekommen. Der einzige Haken ist, wenn Sie mehrere Dateien oder Ordner ab mit dem Buchstaben "P" oder "ps", haben Sie vielleicht ein paar mehr, bevor Sie den Typ Computer weiß, was zu tun ist. MARIA: Wir mögen Verknüpfungen. DAVID MALAN: Dieser Wille sparen Sie so viel Zeit. Und auch, wie gesagt in der Vorlesung, die Sie kann in der Geschichte blättern, nach oben und unten, zuletzt ausgeführten zu finden Befehle, wie gut. Gut. So, jetzt wollen wir unsere Aufmerksamkeit wieder um ein einfaches Programm, hallo Welt. So dass wir das genau kompiliert haben. Und nun, warum nehmen wir nicht ein Blick auf die Datentypen und dann den Übergang von einigen entsprechende Scratch Blöcke C MARIA: Awesome. Also jetzt, dass Sie begonnen haben Programme in C schreiben, werden wir zu sprechen beginnen zu den Datentypen und Variablen. So manche Datentypen, die Sie würde wissen wollen, ab sofort sind diejenigen, die sind blau markiert. So haben wir int ersten, das steht für Ganzzahl. Und das hält ganzen Zahlen, wie Sie Möglicherweise müssen guessed-- so 1, 2, 3, und beliebige andere ganze Zahlen dass Sie sich vorstellen können. DAVID MALAN: Und auch negativ. MARIA: Und auch negativen, yep. Und 0. Dann haben wir Schwimmern, die sind Gleitkommazahlen. Also das ist, alle reellen Zahlen dass haben Dezimalstellen. So 5.0, 5.2, und noch mehr Ziffern nach dem Komma, als auch, und auch negative. Dann haben wir char der ein Zeichen. Also ich denke, über die wir gesprochen Dieses in der Vorlesung heute. Aber wir haben Briefe, für example-- A, B, C-, die als char gespeichert werden können. Aber dann haben wir viel mehr Symbole dass als char gespeichert werden. Und diejenigen, werden als ASCII gespeichert. Und dann haben wir bool, die Booleans sind. Und diejenigen zu bewerten, um Richtig oder Falsche oder 1 bzw. 0 sind. DAVID MALAN: Und daran erinnern, dass bool kommt von der CS50-Bibliothek. So dass es nicht in die gebaut C, aber es ist super nützlich die Vorstellung von wahr und falsch haben. Und auch wenn Sie könnte Spaß Tatsache think--. Ein bool technisch braucht, wie viele Bits, wirklich, zu vertreten Wahre gegen falsch? Wie viele Bits glauben Sie, Sie müssten, maximal? Ja, nur eine. So stellt sich heraus, dass C kann Ihnen nicht nur ein bisschen. Die kleinste Maßeinheit Sie bekommen, ist acht. So ist es ein wenig verschwenderisch sie bist du Verwendung eines ganzen Byte oder acht Bits, Vertretungs Wahr oder Falsch. Aber das ist nur die Art, wie es ist in C von der CS50-Bibliothek implementiert. MARIA: Und dann die, die wir sind nicht darüber, wie umfangreich sprechen Recht now-- Doppel, das ist für größere schwimmt. Lang lang und kurz sind auch für ganze Zahlen sind. DAVID MALAN: In der Tat. In Hacker-Ausgabe von einem pset, wir tatsächlich nutzen long long. Aber für die Standard Edition, es sollte nicht notwendig sein. MARIA: Kühle. OK. So operators-- Sie sein sollte vermutlich vertraut mit den meisten von diesen. Außerdem +; Subtraktion, -. Zur Multiplikation, haben wir die *. Also nicht das X, die wir verwenden in der Regel. Abteilung, haben wir die umgekehrten Schrägstrich. Und Modulo ist unsere letzte Operator, werden wir zu jetzt zu sprechen. Es ist ein Operator, der uns erlaubt nehmen Sie den Rest einer Division. Wenn wir also 4% 2, 4 unterteilt von 2 2 mit einem Rest von 0. So 4% 2 0. 4% 3 1 ist. 4% 5 4 ist, wie Sie konnte ahnen,. Und denken Sie daran, wenn Sie alle diese Betreiber, die PEMDAS Regeln verwenden. DAVID MALAN: So klar zu sein, wenn Sie tun 4% 2, warum ist das 0, genau? MARIA: Weil 4 geteilt durch 2 2 mit einem Rest von 0. So Modulo gibt uns diesen Rest als zu dem Ergebnis der Teilung gegenüberliegt. DAVID MALAN: Und in der Tat, was wir diese hilfreich finden für die ist, dass in einigen Problemen das ist nicht unbedingt eine, Wenn Sie das haben wollen eine Beschränkung selbst auf einen Bereich von Zahlen, wie 0 durch etwas, Sie Modulo verwenden, um zu wickeln früher als wie die 2 Mrd. oder der 4 Milliarden Wert, wir in Vorlesung gesprochen. Maria: Ja. Und selbst in "gierigen" Wir könnten. DAVID MALAN: Ja, in Problem Set ein, wie gut. Maria: Ja, schön. DAVID MALAN: Guter Hinweis. MARIA: Es tut uns leid. Boolean expressions-- so für Boolesche Operatoren, werden wir über alle sprechen von diesen, die Sie hier sehen. So jetzt, zwei müssen wir Gleichheitszeichen für equals aufgeführt. So sind zum Vergleich. Bisher haben wir nur gesehen habe ein Gleichheitszeichen. Das ist, wenn wir ordnen ein Wert einer Variablen zu. Also, wenn wir gesehen haben, int n = 5, dann Wir haben 5 der Variablen n zugeordnet. Aber wenn wir == für verwenden möchten Vergleich, können wir, wenn n == 5 zu überprüfen. Und wenn n == 5, dann ist das wahr. So Boolesche Operatoren ermöglichen es uns, im Grunde, Boolesche bewerten Ausdrücke auf True oder False. Also nicht equals-- haben wir die Ausrufezeichen und Gleichen. So konnten wir auch prüfen, ob n nicht gleich 5-- so n! = 5. Kleiner als, kleiner als oder gleich, größer als, größer als oder gleich, und dann haben wir die logische UND und das logische ODER. Und diejenigen, ermöglichen es uns, zu bewerten mehreren Booleschen Ausdrücken zusammen im Grunde zusammen als kommen einen ganzen Boolean Ausdruck. Also, wenn wir wollen, um eine Reihe zu finden, sagen, die größer ist als 5, aber weniger als 15 zur gleichen Zeit, möchten wir den Einsatz logischer AND-Operator, um zu sehen, wenn n größer als 5 && n weniger als 15. DAVID MALAN: Und hier, Auch ist es wirklich einfach früh versehentlich Verwenden Sie einfach ein einzelnes und-Zeichen oder eine einzelne vertikale Leiste. Und hoffentlich wird der Compiler schreien Sie, weil sie tatsächlich haben eine ganz andere Bedeutung. Für diejenigen, die neugierig, sie sind für bitweise Operationen verwendet wird, die auf einzelne Bits. Aber Sie wollen das Paar von ihnen hier. Und super wichtig ist, dass erste, das Gleichheitszeichen, dem die Gleichheitsoperator wie zu dem Zuweisungsoperator gegenüber. MARIA: Und der senkrechte Strich ist zwischen dem zu löschen und entfernt. DAVID MALAN: Ja. An einem typischen US-Tastatur. Maria: Ja. Lassen Sie uns also rechts in springen bedingte Anweisungen. In Scratch, haben Sie bereits gesehen, wahrscheinlich, if-Anweisungen, mit denen Sie überprüfen Sie, ob etwas wahr ist, dann etwas anderes tun. So können Sie gesucht haben könnte zu überprüfen, ob Ihre Sprite berührt einen anderen Sprite oder der Rand des Bildschirms. Und dann könnten Sie wollte haben beendet das Spiel oder etwas anderes tun. So der Syntax für die ist "if (Bedingung)." Also, wenn Ihr Sprite etwas zu berühren, dann tun, ist in geschweiften Klammern. Dann haben wir if-else-Anweisungen. Else ermöglicht es uns, etwas zu tun, wenn die Bedingung, dass wir überprüfen Sie in der Anfang ist nicht wahr. Also, wenn der Sprite Berühren der Grenz dies tun, sonst noch etwas anderes. So sonst etwas anderes zu tun. Dann haben wir ein kurzes Beispiel. Also, wenn (military_time <12), die wir wollen printf "Guten Morgen!" Sonst sind wir zu gehen printf "Guten Abend!" Basic-Beispiel. DAVID MALAN: Good. MARIA: Kühle. Jetzt haben wir also switch-Anweisungen. Schalten Aussagen können im Allgemeinen ermöglichen es uns, eine Menge von der gleichen Sache zu tun dass wir gerade sprachen etwa mit if-Anweisungen. Zum Beispiel, jetzt haben wir die allgemeine Form der switch-Anweisung dass ermöglicht es uns, nehmen eine Variable namens n und vergleichen Sie sie mit viel verschiedene Werte, die wir hier haben Constant1, constant2 genannt. Vielleicht müssen wir noch viel mehr. Und das sind Fälle genannt. Wenn wir also ein Schalter statement-- und das funktioniert nur für integers-- haben wir eine Variable in diesem Fall, dass n ist. Wenn die Variable n gleich wir constant1 wird einige Code-Snippet ausführen oder etwas, das wir tun wollen. Und dann würden wir brechen. So ist die Pause bedeutet, dass die switch-Anweisung stoppt die Ausführung, wenn n gleich constant1, und dann das Programm wird fortgesetzt. Es wird von der Ausfahrt aus switch-Anweisung und es wird weiterhin etwas anderes zu tun. Wenn jedoch nicht gleich n Constant1, dann Fall für constant2 wird geprüft. Also, wenn n gleich constant2, dass andere Code-Snippet wird ausgeführt. Und dann werden sie zu brechen wenn das gleich zu. Und dann können wir also-- nicht unbedingt, though-- einen Standardfall, was passiert, wenn n nicht gleich jedem der Fälle, die Sie aufgeführt haben. Und im Standardfall haben wir auch müssen nicht unbedingt eine Pause da der Switch-Anweisung wird wissen, dass es nach dem Standard enden muss Fall, wenn das der Fall ist. DAVID MALAN: Aber stilistisch, wir es immer drin. Maria: Ja. DAVID MALAN: Ja. So vor allem beim Start aus, vor allem, wenn unter den weniger komfortabel, würde ich persönlich nur empfehlen, mit den IFS-Stick und IFS-elses und if-else-if-elses usw., wenn nur weil sie ein wenig einfacher. Dies ist ein nettes Optimierung oder manchmal sogar ästhetisch es macht den Code besser lesbar. Und in der Tat wahrscheinlich Mitte des Semesters werden wir ein Problem zu sehen gesetzt, wo es sieht einfach besser aus und leichter für den Menschen gelesen durch Verwendung einer Switch-Anweisung. Aber keine Sorge zu zu früh, klammerte sich an diese. Maria: Ja. Wenn Sie haben eine Menge von if-Anweisungen, es könnte nur nicht sehr lesbar. Es ist vielleicht nicht sehr schnell sein für Sie, um durch sie zu gehen. So schalten Aussagen sehr nützlich sein, wie gut. Und auch nicht remember-- nicht vergessen, die Pausen in es gesetzt. DAVID MALAN: Kann mich nicht erinnern diese. MARIA: Denn dann könnten Sie fallen, durch von Fall zu Fall. Also lassen Sie uns sagen, dass bei Constant1 nicht über eine break-Anweisung in ihm. Dann könnten wir durchfallen Innengehäuse constant2. Und wir wollen nicht, dass, wenn zu tun wir haben bereits bei Constant1 erreicht und es ist gleich n ist. So, zum Beispiel, wenn wir eine Variable haben n, die eine Klassennummer enthält, und wir sehen, was die wollen, Klasse ist--, wenn n gleich 50, wir gehen zu drucken "CS50 ist Einführung in die Informatik I " Dann werden wir zu brechen. Das ist schon alles. Wenn jedoch gleich n bis 51, werden wir drucken "CS51 ist Einleitung in die Informatik II. " Dann wieder, wir werden zu brechen. Allerdings, wenn dann setzen wir 124, 61, jeder andere Zahl, die Sie vielleicht denken, oder das Programm wird nicht zu erkennen, dass. Also, es wird sagen: "Sorry, ich bin nicht vertraut mit dieser Klasse. " Und es geht um zu brechen. DAVID MALAN: Damit Sie wirklich sehen können, Die if, else if, else Idee hier. Es ist nur eine andere Syntax für genau die gleiche Idee zum Ausdruck bringen. MARIA: Genau. Jetzt haben wir unsere ternäre Operatoren. So ternäre Operatoren drei parts-- eine Bedingung, etwas zu tun, wenn die Bedingung wahr ist, und dann etwas zu tun wenn dieser Bedingung falsch ist. Sie sehen also, im Grunde, die Syntax, das hier. Wir haben die Fragezeichen, und dann the-- Wie nennen wir das? DAVID MALAN: Der Doppelpunkt. MARIA: Colon. Vielen Dank. Es tut uns leid. Also schauen wir uns an unserem Beispiel zu sehen, ob wir Sinn this-- machen class_num == 50. So, hier sehen wir unsere Boolean operator == dass die Variable class_num vergleicht bis 50. So class_num speichert eine ganze Zahl ist. Und wenn das ganze Zahl gleich 50, dann sind wir gehen zu speichern "David Malan" innerhalb des String-Professor. Wenn Klassennummer nicht gleich 50 ", nicht David Malan" wird sich der Professor sein. DAVID MALAN: Vielen Dank. Und so scheint dies entspricht Was, würden Sie sagen, auf den ersten Blick? MARIA: Mir scheint es, wie if-else-Anweisungen. DAVID MALAN: Ja. Und in der Tat ist diese Art einer hübschen Motto, sozusagen für die Umsetzung genau die Logik der if-else aber alles auf einmal zu tun. MARIA: Genau. Ja. So if-else-Anweisungen könnte nehmen eine Menge Platz. Sie könnten zu lang sein, etwas so einfaches wie diese. Also das kann sehr sein prägnant und sehr nett. So, jetzt sind wir in der Suche zu gehen etwas wieder und wieder ausgeführt wird, so das Prüfen auf das mehrfach konditionieren und dann weiter, etwas zu tun wobei die Bedingung wahr ist. So bringt uns diese schön in while-Schleifen. Auf der linken Seite haben wir unsere erste while-Schleife. So, während etwas wahr ist, etwas zu tun, wieder und wieder. So stellen Sie sicher zu bemerken, dass unsere Voraussetzung hier ist an der Spitze validiert. Während bei unserem zweiten loop-- wir nennen dass eine do-while loop-- wir etwas tun, dann überprüfen wir für einen Zustand. Und wenn dieser Bedingung weiterhin um wahr zu sein, wir zurückgehen und die Sache erneut. Der Hauptunterschied ist, wo die Bedingung für die überprüft. Und der Code kann nicht sein, ausgeführt, wenn die Bedingung nicht wahr mit der while-Schleife. Während bei der do-while- Loop, den Code müssen wir Das ist immer mindestens einmal ausgeführt wird. Und dann, während die Bedingung weiterhin um wahr zu sein, wir zurück zu gehen und durchlaufen wieder nach innen. Also, warum Sie denken, wir würden eine do-while-Schleife über eine while-Schleife? Recht. Wenn wir also die Eingabeaufforderung möchten Benutzer für irgendeine Art von Eingabe, wenn wir sie fragen wollen , ihren Namen geben, wir wollen wenigstens einmal fragen. Und wenn sie geben dass Namen, wir sind nicht gehen, um sie erneut zu fragen weil wir bereits wissen. Aber wenn sie nicht eingeben ihren Namen, oder wenn sie geben Sie etwas, das ist offensichtlich nicht ein Name, wollen wir noch weiter fragen sie über die für ihren Namen. DAVID MALAN: Und in der Vorlesung wir eines hatten wie dies mit dem zu bekommen positive int Beispielsweise, wo es nichts zu überprüfen Sie zuerst, weil Sie nicht einmal bekommen einen int. So zu tun, wollen wir this-- erhalten eine int vom user-- dann überprüfen Sie es, vielleicht, wieder und wieder und wieder. MARIA: Genau. Für loops-- OK. Für Schleifen können es uns ermöglichen, fast zu tun genau dasselbe, wie gut. Es ist eigentlich genau dasselbe. Also es gibt nichts, Sie for-Schleifen tun können dass Sie nicht in der Lage sein, mit while-Schleifen zu tun. Aber für Schleifen mag ein wenig etwas mehr syntaktisch kompliziert weil sie drei Teile im Inneren, was vorher war nur die Zustand mit While-Schleifen. So ist der erste Teil, den Sie Meer, die links-die meisten, haben wir "int Zwerge = 0." Also das ist, wo wir initialisieren unseren variabel. Dann haben wir ein Semikolon und "Zwerge <7." Also das ist, wo sich Zustand tatsächlich ist. Also das ist, was wir hätten legen sich lediglich in der während loop-- ", während Zwerge <7." Hier, das geht in die Mitte unseres for-Schleife. So "dwaves <7." Und dann unsere letzte Teil ist "Zwerge ++" Das ist, wo wir unsere Variable aktualisieren. Also das Wichtigste zu erkennen, ist, dass diese wird sich durch diese for-Schleife gehen sieben Mal und führen siebenmal. So haben wir sieben Zwerge, und sie sind alle gehen zu sagen: "Ich bin hier, um Ihnen zu helfen, Snow White " weil sie bereit sind Schneewittchen helfen. Mit While-Schleifen, die wir getan haben würde die Initialisierung und Aktualisierung nicht im Zustand wieder, aber entweder vor oder innerhalb der while-Schleife um sicherzustellen, dass wir-- da Wir müssen immer die Teile. Also, um sicherzustellen, dass wir sie wären wir noch immer haben sie hinzugefügt auf, nur nicht in den Klammern. DAVID MALAN: Und so sieht es aus like-- in der Vorlesung, zum Beispiel, Ich fast immer, wie, i und n und ziemlich langweilig Variablen. Es sieht aus wie können Sie mehr verwenden schlaue Namen Variablen, auch. Maria: Ja, es ist eigentlich sehr schön um ein bisschen mehr beschreibenden Variablen verwenden weil vor allem, wenn jemand anders ist Lesen Ihres code-- vielleicht sind Sie Grader oder wenn Sie zusammen sind mit jemandem-- Sie sicherstellen, dass sie wollen zu verstehen, was du tust. OK. Das ist also etwas sehr funky-- for-Schleife innerhalb einer for-Schleife. Ich weiß nicht, ob wir das schon gesehen habe. Wahrscheinlich nicht. Aber wir können tatsächlich this-- so Schleifen statt Schleifen. So hat jemand wollen vielleicht zu Fuß mich durch, was ist denn hier los? DAVID MALAN: Ich werde einen Stich zu nehmen. MARIA: Kühle. DAVID MALAN: OK. Also, spoiler-- wir das Zeug drucken möchten das ist in der unteren rechten Ecke Dort. MARIA: Richtig. Ja ja. Nur so haben wir: DAVID MALAN bringe diese Beispielausgabe gibt. So kann ich aus dem ableiten, obersten Schleife, die Sie Iteration über die Zeilen äußersten Schleife, so zu sprechen. Und du bist Laufen Spalten mit der innersten Schleife. Und intuitiv, diese hoffentlich sinnvoll weil von der Natur der jedes Programm, das wir gesehen haben, vor, printf, die der ist Funktion verwenden wir letztlich hat die Fähigkeit, Dinge zu drucken aus im wesentlichen Zeile für Zeile. Wie, wenn Sie ausgegeben haben eine neue Linie, gibt es kein verdoppelt zurück und Druck etwas höher in dem Bildschirm zumindest nicht mit printf wie diese. Und so in diesem Zusammenhang macht es Sinne, dass die äußerste Schleife sollte an die Zeilen gemeint sein weil für jede gegebene Zeile, Sie gehen zu wollen, um gerade ausdrucken XXXXX, und dann gehen Sie in die nächste Zeile, XXXXX. So Reihen kommen zuerst. Und dann innerhalb jedes Reihe, Sie Spalten zu drucken. Wenn Sie versucht haben, es zu tun, die gegenüber, wäre es wahrscheinlich nicht kommen, wie Sie wollen. Maria: Ja. Wir konnten einfach nicht mehr zurück zu gehen die vorhergehende Zeile mit printf. DAVID MALAN: Und was ist interessant pro heutigen Chat über Umfang, eigentlich ist diese Zeile ist ein int das ist in der obersten Schleife deklariert. Aber beachten Sie, dass es noch Innenseite, sozusagen die geschweiften Klammern, dass unmittelbar folgen, auch wenn es technisch nicht innerhalb dieser geschweiften Klammern. So Zeile in Spielraum für die Gesamtheit der Code-Snippet, sowohl innerhalb des äußeren for-Schleife und Innenseite des inneren for-Schleife. Aber im Gegensatz dazu, wo ist Spalte im Umfang? Die Variable Spalte? Ja, nur in der Innenlooping. Und das ist in Ordnung, weil wir nicht zugreifen es außerhalb seiner geschweiften Klammern. Alles, was wir tun, ist Ausdruck einer neuen Linie ganz am Ende gibt. So dass in der Tat ist OK. So hat dies die Wirkung, sieht es so, tun drei Reihen und vier Spalten. MARIA: Richtig. So dass wir zuerst gehen durch unseren ersten Reihe. Und gerade in unserer ersten Reihe, wir tun das vier Spalten in der ersten Zeile. Also haben wir ausdrucken vier X. Und dann können wir das für die Schleife zu verlassen, da Wir haben bereits vier X gedruckt. Und wir drucken Sie eine neue Zeile. Und dann durch die wir gehen gleichen Prozess für zwei weitere Zeilen auf insgesamt drei machen. DAVID MALAN: Und es ist bemerkenswert, es ist nur ein Artefakt der Schriftart, die Tatsache, , dass der Beispielausgabe scheinen so viel größer, als ob es gibt noch mehr Zeilen als Spalten. Aber es ist nur, weil die X ist höher als breit ist. Das ist alles, was dort passiert ist, plus dem Leerraum zwischen den Zeilen. MARIA: Richtig. Cool. DAVID MALAN: Alles klar. So ein kurzer Blick auf Problem eingestellten, nehmen Sie alle mögliche Fragen, und dann vertagen? Gut. So in einem Problem eingestellt, gibt es drei Primär Herausforderungen letztlich. Aber zuerst, finden Sie dass das Problem eingestellt Spezifikation, wie bei vielen der psets diesem Herbst, wird Sie zu Fuß durch ein paar Aufwärmübungen, zeigen Sie ein paar Ressourcen dass Sie möglicherweise noch nicht gesehen haben. Beispielsweise CS50 hat eine Reihe von Kurzschlüssen, die Kurzvideos sind, nicht unähnlich, aber daß sind sehr Thema specific-- vielleicht fünf Minuten 10 Minuten lang auf Schleifen oder auf Bedingungen oder auf Algorithmen oder höher auf mehr fortgeschrittene Themen, wie gut. Und wir in der Regel einbetten diejenigen in den problematischen Sätze so dass die Schüler eine Ressource mit dem Material, die möglicherweise zu überprüfen schon kommen in Vorlesung oder Abschnitt. Aber auf diese Weise ist es mehr konzentriert und mehr an ihren Fingerspitzen. Wir neigen auch dazu, in Problem einbetten setzt Dinge genannt Komplettlösungen. Also fast alle Beispiele, die ich tun, im Vortrag auf der Bühne hier haben wir auch haben vor der Kamera in Schuss voran eine langsamere, eine intime Komplettlösung von mir auf mein Laptop von diesem Code Zeile für Zeile so dass in der Klasse, werden wir oft überfliegen etwas oder jemand wird ein einzuwerfen Antwort auf eine Frage. Aber es muss nicht unbedingt sinken in für alle im Publikum. So werden Sie Code Komplettlösungen zu finden für die meisten Beispiele dass wir hier in der Vorlesung, so dass Sie durch sie in Ihrem eigenen Tempo zu gehen und Rücklauf oder der schnelle Vor- oder überspringen haupt, wenn Sie möchten. Oft gibt es ein paar Warm-up-Fragen, bitten Sie, Art verstärken diese Material und stellen Sie sicher, dass Sie vor der bequemen sind Sie fahren Sie mit dem Rest der pset. Und dann natürlich gibt es die pset sich. Und eines der Dinge, wir ganz bewusst do in CS50 ist fast jeder uninteressant oder intellektuell uninteressant mechanischer Schritt, haben Sie vielleicht zu tun ist fast immer sehr gut dokumentiert. Im Laufe des Begriffs, werden wir beginnen, mehr rhetorische Fragen zu stellen, wie erinnern, wie man dieses oder jenes zu tun? Aber im Allgemeinen, werden Sie feststellen dass das Problem Sets erhalten Sie durch die Mechanik von etwas, so dass die interessanten, intellektuellen Herausforderungen letztlich, Sie verließ die Schüler. Mit dieser sagte, Zamyla, dem wir gehalten Bezugnahme heute in Vortrag, ist einer unserer langjährigen Mitarbeiter Mitglied, hält auch Komplettlösungen auf bestimmte pset Probleme wie mario und gierig, wenn auch nicht in diesem Jahr zu wässern. Und es ist in jenen Komplettlösungen, dass sie oft bietet einige Tipps und Tricks für wie es weitergehen, nie sagen Sie genau das, was zu tun, aber rather-- wie ein Zustand, wenn Sie will-- geben Sie mindestens einen paar Ideen, so dass es bis zu Ihnen, letztlich zu entscheiden wie sich ihnen zu nähern. MARIA: eine hochrangige Art wie Verständnis der Logik, was wir fragen, was Sie tun. DAVID MALAN: Genau. Und in der Tat ist Zamyla Komplettlösungen gemeint sind häufig beantworten die fragte Frage, wo Ich begann zu tun, vor allem, wenn diese langen Spezifikationen sind etwas abschreckend gegebenen gesamten Text und Bilder, die sie haben in ihnen. So water.c, finden Sie nachdem Sie sie abgeschlossen haben, tatsächlich relativ unkompliziert. Absolut sind ein Haufen der Sie gehen zu schlagen Ihren Kopf gegen die Wand zu versuchen um herauszufinden, warum es nicht kompilieren oder warum es nicht ordnungsgemäß ausgeführt. Aber, sobald Sie fertig sind mit ihm und wenn man einmal verbrachte einige Zeit Ringen mit jeder der Probleme, die Sie haben konnten, Sie werden feststellen, dass es ein sehr kurzes Programm. Es kann in nur wenigen getan werden Codezeilen, von denen die meisten wir hier in der Vorlesung schon gesehen, wenn Sie montieren die richtigen Bausteine. Und wie wir vorschlagen hier, es geht zu fragen, Sie, wie viele Minuten angeben jemand unter der Dusche auf dem Campus. Wir geben Sie in das Problem stellen Sie die Geschwindigkeit der Strömung des Wassers in, wie, ein Low-Flow-Dusch Kopf, ähnlich wie die Seinfeld-Clip wir gestern gesehen oder das Gegenteil davon. Und dann müssen Sie nur noch um ein wenig Mathematik zu tun, really-- Arithmetik unter Verwendung von C zu sagen, uns, wie viele, etwa, Flaschen Wasser ist, dass gleich, wenn wir wobei eine n-Minuten-Dusche. Jetzt, im mario.c, das wird auf eine etwas längere Programm sein. Es ist immer noch nicht gehen, um diese lang sein. Nur ein paar Zeilen länger als water.c. Aber es wird Gelegenheit die alte Schule Mario neu Pyramide aus Super Mario Brüder oder ein Follow-on. Es wird nicht als hübscher aussehen oder so bunt wie, dass man dort. Wir sind gerade dabei, etwas Hashtags verwenden wie wir hier auf dem Bildschirm Verwendung von ASCII-Text. Aber es wird die gleiche Idee nähern. Und es wird eine sein, Übung, die auf den ersten Blick scheint ziemlich simple-- gerade drucken Sie eine einfache Pyramide. Aber es gibt ein paar Eigenschaften hier, die interessant sind. Beachten Sie, dass der äußerst rechten Rand die Pyramide hat eigentlich zwei Breite. Es gibt also zwei gleiche Höhe Säulen, die macht es erfordern ein wenig wenig Überlegung zu machen sicher, dass Sie genau das richtige, da um nur ein perfekt abgewinkelten gegen Leitung. Also das ist ein bisschen wie eine Ecke Fall aber passt das eigentliche Spiel. Und es ist auch auf den ersten nicht-offensichtliche Blick, wie man den Leerraum zu drucken. Also wenn ich mir die Beispielausgabe hier-- und es ist auch in der spec-- es Art sieht aus wie ein Rechteck, sondern eine Diagonale des Rechteck wurde abgehackt, und es ist nur Leerzeichen, so zu sprechen. Und so eine häufig gestellte Frage ist immer, gut, Wie kann ich die Hashtags bewegen nach rechts? Oder wie kann ich die Leerstellen zu drucken? Und es ist tatsächlich einfacher als die meisten Studenten denken. Recht? Sie können es visuell anzunähern, indem Sie gerade Drücken der Leertaste oder zweimal oder dreimal. Und so, obwohl wir fast mit printf immer ausdrucken, einen String oder ein int oder ein Wort wie "Hallo, Welt "oder eine Reihe von Wörtern, Sie auch einfach ausdrucken können Zitat, Raum, unquote. Und das wird tatsächlich geben Sie ein Leerzeichen gibt. So sollte man das im Hinterkopf und nicht overthink dies. Sie haben wirklich zu entscheiden, Zeile für Zeile für Zeile, nicht unähnlich Ihrem Beispiel ein Moment vor, wie viele von denen Spalten Leerzeichen und wie viele von ihnen sollten Hashtags werden. Es wird ein wenig Zeit zu nehmen, aber es ist letztlich ein Logik-Puzzle der Arten. Maria: Ja. Aber die Logik geht Zeile für Zeile wird sich hier sehr nützlich sein. DAVID MALAN: Ja. Ich denke, dass der Beispielcode Sie sogar gave-- obwohl es nicht ein komplettes Programm. Sie müssen noch int und Haupt und nichtig und # include stdio.h, eine Menge von dem Zeug, vom Vortrag. Aber die Bausteine scheint da zu sein. Und dann endlich ist etwas, ein wenig mehr algorithmischen. So stellt sich heraus, dass jederzeit gehen Sie in CVS oder einem Convenience-Store und jemand gibt dir bei der Kassierer Scheine oder Münzen als Wechselgeld, es stellt sich heraus, dass sie, die Menschen, ob sie es wissen oder nicht, Wahrscheinlich verwenden, was ist genannt Greedy-Algorithmus, wobei, wenn Sie schuldig sind, sagen, $ 21 in ändern, weil aus irgendeinem Grund Sie etwas sehr preiswert gekauft mit einem sehr großen Rechnung am CVS, es wäre wirklich ärgerlich, wenn die Kassiererin gab Ihnen 21 Einzel- oder, schlimmer noch doch, eine ganze Menge Münzen. Vielmehr, was eine vernünftige Person ist wahrscheinlich zu tun ist, sie gehen, zu schnappen Sie sich einen $ 20 und dann ein $ 1-Rechnung, und Hand, die Sie nur zwei Rechnungen in diesem Fall. MARIA: Und sie versuchen, zu minimieren, sind die Änderung, die sie geben zurück zu Ihnen. DAVID MALAN: Genau. Und gleichen Deal mit Münzen, wie gut. Wenn Sie schuldig sind, sagen, $ 0,50, hoffentlich haben Sie nicht wollen, 50 Pfennige. Sie möchten zwei statt Viertel, zum Beispiel. Nun bedeutet dies übernehmen dass die Kassiererin hat genug von jeder Konfession, dass er oder sie will, um Sie zu geben. Aber wir können Sie davon ausgehen, so weit in das Problem. Und das Ziel ist es letztendlich, um Implementierung in C-Code ein Greedy-Algorithmus. So dass der Benutzer berechtigt ist, zu geben, wie viel ändern er oder sie mit US-Dollar zu verdanken ist und Cent, eine Art von Gleitkomma- Wert wahrscheinlich. Und dann haben Sie die Mathematik zu tun zu haben und herauszufinden, algorithmisch, na ja, wie viele Münzen kann ich geben, Sie minimal, um Ihnen genau das Ausmaß der Veränderung. Aber es geht um eine sein paar knifflige Teile hier, nicht wahr? Als gäbe es das ganze Ungenauigkeit Thema. MARIA: Genau. So Floating-Point- Werte Ungenauigkeit. Haben wir darüber heute sprechen in Vorlesung? DAVID MALAN: Wir haben die zuletzt im Vortrag. Wir sprachen über Ungenauigkeit. Und Sie wollen nicht, um den Benutzer zu betrügen wie viel Veränderung, die er oder sie ist zu verdanken. Und so ist die Komplettlösung, in das Problem gesetzt Spezifikation darüber nachdenken, letztlich um wie Sie diese Ungenauigkeit abzuschwächen Fehler, die möglicherweise. Es ist vermeidbar, natürlich, für die Eingänge wir reden. Und in der Tat pennies-- vielleicht werden wir den Zamyla aufzuschieben, Ich denke, für die Tricks gibt. Also letztendlich, Sie finden werden Fortschreiten der Probleme in dieser Woche, von denen die erste ist ziemlich klein, dann mittel, dann ein wenig größer. Aber alle von ihnen nutzen das Gebäude Bausteine ​​aus der vergangenen Woche, von diesem supersection, Problem Set Spezifikation bringt Sie in unzähligen Ressourcen. Aber immer noch, wenn überhaupt zu kämpfen, besonders unter denen weniger komfortabel ohne vorherige Hintergrund, kommen zu Bürozeiten am Montag und Dienstag und Mittwoch und Donnerstag. Zum CS50 Diskutieren über der Kurs-Website, über die Sie unterhalten können mit Mitarbeitern und Klassenkameraden. Aber letztlich, ich denke, die beste Rat ist nur früh zu beginnen. Es ist nicht die Art von Klasse, die Sie sollte beginnen psets am Mittwoch, Nacht, oder noch schlimmer Donnerstag Abend. Maria: Meine beste Rat ist, bis Montag begonnen haben. DAVID MALAN: Montag. Also, wenn Sie nicht bereits-- nicht begonnen haben. Aber selbst wenn nicht Montag, dann am Dienstag. Je früher desto besser. Und das ist der Grund, warum die Natürlich hat so viele späten Tagen Sie ein bisschen ein zu geben psychologischen Druck um früher zu starten, aber immer noch lassen Dinge rutschen, wenn die Dinge länger dauern als Sie erwarten. MARIA: Und Sie, Gebrauch machen wollen, Bürozeiten so viel wie Sie können, auch. DAVID MALAN: Haben Sie Fragen? Gut. Nun, warum nicht wir hier zu vertagen?