1 00:00:08,119 --> 00:00:11,630 [Powered by Google Translate] DAVID J. MALAN: All right, dies CS50, und dies ist der 2 00:00:11,630 --> 00:00:14,790 Beginn der zweiten Woche. 3 00:00:14,790 --> 00:00:16,300 Danke. 4 00:00:16,300 --> 00:00:19,000 Lassen Sie uns hier beginnen mit einem Telefonanruf. 5 00:00:19,000 --> 00:00:30,005 Ich bin über 617-BUG-CS50-Wahlrad auf. 6 00:00:30,005 --> 00:00:31,230 CS50: Dies ist CS50. 7 00:00:31,230 --> 00:00:33,930 Für Shuttle Boy, 1 drücken. 8 00:00:33,930 --> 00:00:36,660 Um neu zu starten, drücken Sie 9. 9 00:00:36,660 --> 00:00:38,180 DAVID J. MALAN: So sagte er zum Shuttle Boy, 1 drücken. 10 00:00:38,180 --> 00:00:41,560 Also werden wir Sie 1 drücken. 11 00:00:41,560 --> 00:00:43,230 CS50: Was ist Ihre Herkunft? 12 00:00:43,230 --> 00:00:45,340 Für Quad, 1 drücken. 13 00:00:45,340 --> 00:00:47,080 Mather, drücken Sie 2. 14 00:00:47,080 --> 00:00:49,240 Boylston, drücken Sie 3. 15 00:00:49,240 --> 00:00:51,280 Lamont, drücken Sie 4. 16 00:00:51,280 --> 00:00:53,210 Mem Hall, Taste 5 drücken. 17 00:00:53,210 --> 00:00:55,660 Um neu zu starten, drücken Sie 0. 18 00:00:55,660 --> 00:00:59,590 DAVID J. MALAN: Wir werden ein für Quad drücken. 19 00:00:59,590 --> 00:01:03,610 CS50: Next Shuttle fährt in dieser Minute um 1:10 Uhr und 20 00:01:03,610 --> 00:01:09,820 dann um 1:20 Uhr, 13.30 Uhr, 01.40 Uhr. 21 00:01:09,820 --> 00:01:12,030 Dies ist CS50. 22 00:01:12,030 --> 00:01:15,570 >> DAVID J. MALAN: Also das ist CS50 Stimme. 23 00:01:15,570 --> 00:01:18,030 Und es ist ein Beispiel für die Art der endgültigen Projekte, 24 00:01:18,030 --> 00:01:19,500 So können Sie beispielsweise abbeißen Richtung 25 00:01:19,500 --> 00:01:20,600 das Ende des Semesters. 26 00:01:20,600 --> 00:01:23,840 Zum Beispiel besteht, dass shuttleboy.cs50.net - 27 00:01:23,840 --> 00:01:28,200 eigentlich ein Projekt, dass ich zum ersten Mal schrieb nach der Einnahme von CS51 28 00:01:28,200 --> 00:01:29,740 zurück, wenn ich ein grundständiges war. 29 00:01:29,740 --> 00:01:32,250 Und die Inspiration war hier damals war alles, was sie hatten 30 00:01:32,250 --> 00:01:34,320 die gedruckten Shuttle-Bus Zeitpläne, und es gab keine 31 00:01:34,320 --> 00:01:35,970 Begriff suchen Dinge online. 32 00:01:35,970 --> 00:01:38,730 Und so habe ich eine Art Taube in ein Wochenende, strömte durch die 33 00:01:38,730 --> 00:01:41,460 gedruckten Zeitplan, und es ein Computerprogramm portiert. 34 00:01:41,460 --> 00:01:43,790 Zu dieser Zeit passiert das Computerprogramm geschrieben werden 35 00:01:43,790 --> 00:01:47,110 in C. Und Sie tatsächlich lief es, indem Shuttle Boy at a 36 00:01:47,110 --> 00:01:48,600 Blinken aufgefordert, wie wir wurden bisher habe tun. 37 00:01:48,600 --> 00:01:50,450 Aber im Laufe der Jahre hat sie in einem Augenblick entwickelt 38 00:01:50,450 --> 00:01:51,390 Messaging bot. 39 00:01:51,390 --> 00:01:53,970 Es ist vor kurzem in diese Website entwickelt, in eine 40 00:01:53,970 --> 00:01:57,720 SMS-basiertes Tool, sowie in dieser Stimme-basiertes Tool. 41 00:01:57,720 --> 00:02:00,170 Und das ist an den möglichen Dinge anzudeuten, dass man 42 00:02:00,170 --> 00:02:02,380 für sich selbst tut, indem Semester Ende. 43 00:02:02,380 --> 00:02:05,490 >> Zum Beispiel gibt, geschieht das SMS-Version von Shuttle Boy 44 00:02:05,490 --> 00:02:06,510 wie folgt zu arbeiten. 45 00:02:06,510 --> 00:02:10,880 Wenn auf Ihrem Handy, senden Sie eine SMS an 41411 und 46 00:02:10,880 --> 00:02:14,300 senden Sie dann die Sonderzeichen sboy für Shuttle Boy, 47 00:02:14,300 --> 00:02:18,350 gefolgt von A und B, wobei A ein Ursprung und B ein 48 00:02:18,350 --> 00:02:19,070 Ziel - 49 00:02:19,070 --> 00:02:21,030 zum Beispiel Boylston Raum Quad - 50 00:02:21,030 --> 00:02:23,330 was sollte man wieder innerhalb von wenigen Sekunden ist ein Text 51 00:02:23,330 --> 00:02:25,820 Nachricht von Shuttle Boy sagen Ihnen genau, wenn die 52 00:02:25,820 --> 00:02:28,990 nächsten Shuttles sind, von diesem Punkt A werde, dass 53 00:02:28,990 --> 00:02:29,640 Punkt B. 54 00:02:29,640 --> 00:02:32,510 Und dies ist ein allgemeineres Beispiel von dem, was bekannt als 55 00:02:32,510 --> 00:02:33,920 Verwendung einer API. 56 00:02:33,920 --> 00:02:36,930 >> So zum Beispiel, ist dies hier nur shuttleboy.cs50.net, die 57 00:02:36,930 --> 00:02:39,300 tatsächliche Web-basierte Inkarnation dies. 58 00:02:39,300 --> 00:02:42,480 Aber die Daten, die diese und andere Anwendungen unterstreicht, dass CS50 59 00:02:42,480 --> 00:02:45,560 entwickelt werden alle an alle hier in Form ausgesetzt 60 00:02:45,560 --> 00:02:49,340 von APIs, Application Programming Interfaces. 61 00:02:49,340 --> 00:02:52,220 Und das ist nur eine andere Art zu sagen, dass Leute wie wir 62 00:02:52,220 --> 00:02:56,010 das Internet und andere haben einige Zeit damit verbracht, 63 00:02:56,010 --> 00:02:59,970 Software, die Sie verwenden können, um Daten von uns zu packen und 64 00:02:59,970 --> 00:03:02,510 Dann bauen Sie Ihre eigenen Anwendungen auf 65 00:03:02,510 --> 00:03:03,840 dieses Datensatzes. 66 00:03:03,840 --> 00:03:06,610 So zum Beispiel, diese Shuttle Boy API-Seite hier, die 67 00:03:06,610 --> 00:03:09,390 zufällig in der CS50 Bedienungsanleitung, im wesentlichen Dokumente werden 68 00:03:09,390 --> 00:03:13,080 wie Sie zu fragen CS50-Server für die Daten gehen. 69 00:03:13,080 --> 00:03:16,240 Zum Beispiel, wenn Sie sich mit CSV-Dateien, Komma 70 00:03:16,240 --> 00:03:18,940 getrennte Werte, das sind nur eine Art quick and dirty 71 00:03:18,940 --> 00:03:20,310 Excel-ähnliche Dateien. 72 00:03:20,310 --> 00:03:23,110 So können Sie Shuttle Boy für alle Daten auf allen der Fragen 73 00:03:23,110 --> 00:03:25,090 Häuser und ihre GPS-Koordinaten, und Sie erhalten 74 00:03:25,090 --> 00:03:27,300 Zurück im Wesentlichen eine Tabellenkalkulation so, dass 75 00:03:27,300 --> 00:03:30,820 Sie können dann in einem Programm Ihrer eigenen zu lesen und dann 76 00:03:30,820 --> 00:03:33,250 generieren Ergebnisse, wie Shuttle Boy selbst 77 00:03:33,250 --> 00:03:34,160 passiert zu tun. 78 00:03:34,160 --> 00:03:37,030 Für die mehr vertraut, moderner Datendarstellungen 79 00:03:37,030 --> 00:03:39,420 gehören JSON, JavaScript Object Notation. 80 00:03:39,420 --> 00:03:40,620 Etwas wird sich dann mit Ihnen in Richtung 81 00:03:40,620 --> 00:03:41,720 das Ende des Semesters. 82 00:03:41,720 --> 00:03:45,440 >> Aber noch einmal, dies ist nur eine von mehreren eigenen APIs CS50 ist. 83 00:03:45,440 --> 00:03:48,320 Und die aufregendste Sache ist jetzt, in diesen Tagen, Facebook und 84 00:03:48,320 --> 00:03:51,110 Twitter und Google und so ziemlich jede populäre Website aus 85 00:03:51,110 --> 00:03:54,130 muss es irgendeine Art von API, die, wenn Sie die ausgelesenen 86 00:03:54,130 --> 00:03:56,620 Dokumentation auf ihrer Website, melden Sie sich für eine 87 00:03:56,620 --> 00:03:59,980 Account haben, können Sie mit dem Schreiben beginnen Software auf der Oberseite 88 00:03:59,980 --> 00:04:03,680 welche Werkzeuge oder Daten, die Unternehmen dort zur Verfügung stellt. 89 00:04:03,680 --> 00:04:06,210 Und so ein eigener Lehre Stipendiaten vor ein paar Jahren 90 00:04:06,210 --> 00:04:07,620 schrieb eine Mac-Version davon. 91 00:04:07,620 --> 00:04:10,990 So auf den Link mit dem Titel Mac hier links oben, können Sie tatsächlich 92 00:04:10,990 --> 00:04:13,940 laden Sie ein Mac OS Widget, das auf dem eigenen Mac läuft die tun 93 00:04:13,940 --> 00:04:15,040 gleiche Art von Dingen. 94 00:04:15,040 --> 00:04:17,970 So geht es um den Bau auf der Oberseite von Datensätzen wie diese. 95 00:04:17,970 --> 00:04:21,839 Aber mehr auf, daß gegen Ende des Semesters. 96 00:04:21,839 --> 00:04:25,780 >> Lassen Sie uns also in Echtzeit schnell einen Fehler tauchen, nur um eine Art, an 97 00:04:25,780 --> 00:04:27,990 Dinge, erwärmt sich noch heute, und denke zurück auf einige der 98 00:04:27,990 --> 00:04:29,660 Dinge, die wir sahen in der vergangenen Woche. 99 00:04:29,660 --> 00:04:32,840 Insbesondere, lass mich gehen Sie vor und nach oben ziehen, sagen wir, 100 00:04:32,840 --> 00:04:34,080 Dieses Beispiel hier. 101 00:04:34,080 --> 00:04:37,500 Buggy1.c, ist dies auf den Verlauf der Website verfügbar, wenn Sie würde 102 00:04:37,500 --> 00:04:40,250 es gerne herunterladen und herumzustochern sich. 103 00:04:40,250 --> 00:04:43,520 Aber lasst uns hier vergrößern zu diesem relativ kurzen Programm, und nur 104 00:04:43,520 --> 00:04:46,550 a super-schnelle Rekapitulation der einige der grundlegenden Bausteine, die 105 00:04:46,550 --> 00:04:48,880 wir wirklich gehen, um nur anfangen, für selbstverständlich. 106 00:04:48,880 --> 00:04:51,860 >> So das blaue Zeug, in den Zeilen 1 bis 9 sind nur 107 00:04:51,860 --> 00:04:53,670 Softball Fragen. 108 00:04:53,670 --> 00:04:54,590 So sind nur Kommentare. 109 00:04:54,590 --> 00:04:56,230 Sie haben keine funktionelle Bedeutung. 110 00:04:56,230 --> 00:04:58,460 Aber sie sind Kommentare in dem Sinne, dass sie Hinweise sind, dass 111 00:04:58,460 --> 00:05:02,010 Ich, der Mensch, machte mich so, dass in der Vorlesung und nach 112 00:05:02,010 --> 00:05:04,340 Vortrag, kann ich eigentlich daran erinnern, was dieses Programm 113 00:05:04,340 --> 00:05:07,120 macht, ohne sich durch sie Zeile für Zeile lesen und 114 00:05:07,120 --> 00:05:08,990 Neuerstellung Geschichte in meinem Kopf. 115 00:05:08,990 --> 00:05:11,000 Außerdem, wenn ich die Hand dieses Programm, um jemand anderes, wie 116 00:05:11,000 --> 00:05:14,420 Sie ist es viel klarer zu Ihnen, weil von Kommentaren wie diesem, 117 00:05:14,420 --> 00:05:16,680 was das Programm ist eigentlich zu tun, oder zumindest, was die 118 00:05:16,680 --> 00:05:18,210 Programm tun soll. 119 00:05:18,210 --> 00:05:20,760 Ob es richtig ist eine ganz andere Sache. 120 00:05:20,760 --> 00:05:25,040 Jetzt, in C, mit mehrzeiligen Kommentaren, daran erinnern, dass on line 121 00:05:25,040 --> 00:05:27,880 hier ist die Magie Symbol / *. 122 00:05:27,880 --> 00:05:30,380 Es bedeutet, hier kommt der Beginn eines Kommentars. 123 00:05:30,380 --> 00:05:34,560 Und nichts anderes zählt, bis Sie das Ende Terminator erreichen, 124 00:05:34,560 --> 00:05:36,700 das ist * /, das Gegenteil. 125 00:05:36,700 --> 00:05:39,120 So ist die Tatsache, dass ich 80-einige seltsame Sterne haben hier 126 00:05:39,120 --> 00:05:41,550 von links nach rechts ist wirklich nur ein ästhetisches Detail. 127 00:05:41,550 --> 00:05:43,370 Es hat keine funktionale Bedeutung. 128 00:05:43,370 --> 00:05:44,490 >> Nun, wie etwa Zeile 11? 129 00:05:44,490 --> 00:05:46,940 Was bedeutet das in juristischer Hinsicht zu tun? 130 00:05:51,560 --> 00:05:52,540 Was ist das? 131 00:05:52,540 --> 00:05:54,280 PUBLIKUM: Beinhaltet die Norm. 132 00:05:54,280 --> 00:05:54,740 DAVID J. MALAN: OK, gut. 133 00:05:54,740 --> 00:05:57,500 So umfasst die stdio.h Bibliothek. 134 00:05:57,500 --> 00:05:58,230 Also, was bedeutet das? 135 00:05:58,230 --> 00:06:01,570 Nun, in diesen Dateien, stdio.h, sind eine ganze Reihe von 136 00:06:01,570 --> 00:06:03,320 Funktion Erklärungen - 137 00:06:03,320 --> 00:06:05,290 das ist, Code, dass jemand anderes geschrieben hat. 138 00:06:05,290 --> 00:06:08,160 Und ein perfektes Beispiel für eine Funktion, die in deklariert ist 139 00:06:08,160 --> 00:06:10,250 stdio.h ist - 140 00:06:10,250 --> 00:06:11,980 die beliebtesten inzwischen? 141 00:06:11,980 --> 00:06:14,300 So printf, zu einem der gebräuchlichsten verwenden, sicher 142 00:06:14,300 --> 00:06:15,840 früh, aus dieser Bibliothek ist da. 143 00:06:15,840 --> 00:06:19,290 Wenn ich diese Zeile Code auszuschließen, wird Clang gehen zu schreien 144 00:06:19,290 --> 00:06:22,550 bei mir etwas über einen unerklärten Symbol. 145 00:06:22,550 --> 00:06:24,930 Etwas Schwarzarbeit ist wohl das Schlüsselwort, denn 146 00:06:24,930 --> 00:06:27,770 wir haben nicht den Compiler, was printf sieht informiert 147 00:06:27,770 --> 00:06:29,230 wie wenn wir diese Linie gehören. 148 00:06:29,230 --> 00:06:31,830 Und mehr auf die Erde, wirklich, was diese Zeile sagt, ist 149 00:06:31,830 --> 00:06:34,890 öffnen Sie die Datei, stdio.h, wo sie auf dem Server ist 150 00:06:34,890 --> 00:06:38,200 Festplatte oder das Gerät auf die Festplatte, und copy-paste es 151 00:06:38,200 --> 00:06:40,240 Recht dort in meine Akte, ohne meine 152 00:06:40,240 --> 00:06:41,730 dass Sie dies manuell tun. 153 00:06:41,730 --> 00:06:44,420 >> Nun, wenn wir hier unten, um Haupt-, bald fangen wir 154 00:06:44,420 --> 00:06:46,900 Hänseleien auseinander, was int und was nichtig ist. 155 00:06:46,900 --> 00:06:48,430 Aber jetzt, lasst uns an den drei Zeilen sehen 156 00:06:48,430 --> 00:06:50,350 innerhalb von 15 bis 17. 157 00:06:50,350 --> 00:06:52,250 Diese hier habe ich Anspruch als buggy. 158 00:06:52,250 --> 00:06:54,900 Linie 7 in meinen Kommentaren sagt: "Sollte 10 ausgeben 159 00:06:54,900 --> 00:06:59,410 Sternchen aber nicht. "Warum funktioniert das nicht drucken, in der Tat, 160 00:06:59,410 --> 00:07:01,097 10 solcher Sterne? 161 00:07:01,097 --> 00:07:02,347 PUBLIKUM: [unverständlich]. 162 00:07:05,210 --> 00:07:05,800 DAVID J. MALAN: Genau. 163 00:07:05,800 --> 00:07:08,720 So bemerken, dass wir beginnen, um von 0 zu zählen. 164 00:07:08,720 --> 00:07:10,780 Und das ist eigentlich eine Konvention in der Programmierung und 165 00:07:10,780 --> 00:07:13,230 Informatik allgemein, beginnend zu zählen 166 00:07:13,230 --> 00:07:14,610 von 0 statt 1. 167 00:07:14,610 --> 00:07:16,690 Und das wirklich nur aus der Tatsache, dass für 168 00:07:16,690 --> 00:07:18,940 Beispiel, wenn wir acht Leute hatten auf der Bühne, wenn 169 00:07:18,940 --> 00:07:20,680 Niemand hob ihre Hand, sie waren 170 00:07:20,680 --> 00:07:22,340 alle effektiv Nullen. 171 00:07:22,340 --> 00:07:24,260 Und so ist es nur eine Art Computer-Konvention so, 172 00:07:24,260 --> 00:07:26,030 daher beginnt bei 0.. 173 00:07:26,030 --> 00:07:29,130 Wenn es das ist die niedrigste Zahl können Sie in binärer darstellen. 174 00:07:29,130 --> 00:07:32,270 >> Also hier haben wir begonnen Initialisierung i auf 0 gesetzt. 175 00:07:32,270 --> 00:07:34,230 Wir haben festgelegt i gleich 0 ist. 176 00:07:34,230 --> 00:07:37,780 Aber dann habe ich diesen Fehler gemacht hier zu sagen i kleiner oder 177 00:07:37,780 --> 00:07:38,820 gleich 10 ist. 178 00:07:38,820 --> 00:07:41,700 Aber wenn Sie denken, dass durch, wenn ich bei 0 und starten Sie dann gehe ich 179 00:07:41,700 --> 00:07:46,410 bis zu 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ich bin eigentlich los 180 00:07:46,410 --> 00:07:49,980 drucken Sie 11 Sterne auf dem Bildschirm, weil ich oben gegangen waren 181 00:07:49,980 --> 00:07:52,410 zu und gleich 10 ist. 182 00:07:52,410 --> 00:07:55,090 So ist die einfache Lösung hier dann ist was? 183 00:07:55,090 --> 00:07:56,070 PUBLIKUM: [unverständlich]. 184 00:07:56,070 --> 00:07:57,350 DAVID J. MALAN: Ändern Sie einfach auf weniger als. 185 00:07:57,350 --> 00:07:59,700 Wenn Sie wirklich wollen, können Sie dies tun. 186 00:07:59,700 --> 00:08:01,370 Aber im Allgemeinen ist das verpönt. 187 00:08:01,370 --> 00:08:04,020 Und so beginnen, von 0 zu zählen ist nur etwas, sollten Sie 188 00:08:04,020 --> 00:08:05,510 Regel gewöhnen. 189 00:08:05,510 --> 00:08:07,810 Nun, was dieses ganze Konstrukt in sich selbst? 190 00:08:07,810 --> 00:08:10,640 Diese Zeile 15 renzeichen eine for-Schleife. 191 00:08:10,640 --> 00:08:12,510 Also für keine Funktion. 192 00:08:12,510 --> 00:08:13,640 Es ist nur eine Feststellung. 193 00:08:13,640 --> 00:08:16,180 Es ist ein Looping Konstrukt, wie wir in Scratch sah. 194 00:08:16,180 --> 00:08:17,600 Und es besteht aus drei Teilen. 195 00:08:17,600 --> 00:08:19,740 Feststellen, dass es das erste Teil um 196 00:08:19,740 --> 00:08:21,350 links von der Strichpunkt. 197 00:08:21,350 --> 00:08:24,200 Es ist der mittlere Teil zwischen den beiden Semikola. 198 00:08:24,200 --> 00:08:26,250 Und dann gibt es noch die rechte Hand auf der rechten Seite 199 00:08:26,250 --> 00:08:27,640 des zweiten Semikolon. 200 00:08:27,640 --> 00:08:31,822 Nun hat der erste davon und? 201 00:08:31,822 --> 00:08:33,679 PUBLIKUM: [unverständlich]. 202 00:08:33,679 --> 00:08:34,270 DAVID J. MALAN: Zurück da? 203 00:08:34,270 --> 00:08:34,816 Yeah? 204 00:08:34,816 --> 00:08:35,980 PUBLIKUM: Initialisierung. 205 00:08:35,980 --> 00:08:36,850 >> DAVID J. MALAN: Initialisierung. 206 00:08:36,850 --> 00:08:37,840 Also, was bedeutet das? 207 00:08:37,840 --> 00:08:40,690 Wir haben eine Variable namens i deklariert. 208 00:08:40,690 --> 00:08:43,840 Es ist vom Typ int, weil ich int i angegeben haben. 209 00:08:43,840 --> 00:08:46,470 Und ich bin der Initialisierung i auf den Wert von 0 auf. 210 00:08:46,470 --> 00:08:47,730 Also, was ist das wirklich sagen? 211 00:08:47,730 --> 00:08:50,680 Es ist tatsächlich sagen dem Computer hey, gib mir genug 212 00:08:50,680 --> 00:08:53,660 Speicher, genug RAM, um eine Reihe passen, und setzen Sie dann die 213 00:08:53,660 --> 00:08:56,130 Nummer 0 in diesem Stück RAM. 214 00:08:56,130 --> 00:08:59,100 Und nebenbei, wie groß ist ein int in der Regel, zumindest innerhalb 215 00:08:59,100 --> 00:09:00,280 des Gerätes? 216 00:09:00,280 --> 00:09:01,000 PUBLIKUM: 32 bit. 217 00:09:01,000 --> 00:09:01,670 DAVID J. MALAN: 32 Bit. 218 00:09:01,670 --> 00:09:04,890 Das heißt also, gib mir 32 Bit, sonst als 4 Bytes bekannt, 219 00:09:04,890 --> 00:09:07,250 und setzen Sie den Wert 0 in ihm, das ist ziemlich einfach, weil 220 00:09:07,250 --> 00:09:09,110 Es bedeutet nur, alle Bits auf 0 gesetzt. 221 00:09:09,110 --> 00:09:11,690 >> So, jetzt ist der zweite Teil hier die Bedingung. 222 00:09:11,690 --> 00:09:14,590 Und der Zustand, wie der Name schon vermuten lässt, ist das, was wird geprüft 223 00:09:14,590 --> 00:09:18,100 wieder und wieder und wieder, ob es wahr oder falsch ist. 224 00:09:18,100 --> 00:09:21,410 Das ist also nur sagen, führen Sie die folgenden Zeilen Code - 225 00:09:21,410 --> 00:09:23,950 nämlich Linie 16, weil das die einzige eingerückt ist 226 00:09:23,950 --> 00:09:24,820 darunter - 227 00:09:24,820 --> 00:09:26,980 solange i kleiner als 10 ist. 228 00:09:26,980 --> 00:09:30,520 Und nach jedem Durchlauf dieser Schleife, gehen Sie 229 00:09:30,520 --> 00:09:33,840 Inkrementierung, die in diesem Fall ist i + +. 230 00:09:33,840 --> 00:09:35,580 Nun hat es nicht bis i + + sein. 231 00:09:35,580 --> 00:09:37,610 Es könnte i sein -. 232 00:09:37,610 --> 00:09:39,860 Aber wenn ich das tat, was ist das Verhalten gehen 233 00:09:39,860 --> 00:09:41,370 um dieses Programms sein? 234 00:09:41,370 --> 00:09:42,290 PUBLIKUM: Es wird eine Endlosschleife. 235 00:09:42,290 --> 00:09:44,060 DAVID J. MALAN: Es wird eine Art Endlosschleife, 236 00:09:44,060 --> 00:09:47,720 es sei denn, wir bekommen nach negativer 2 Milliarden oder so viel Glück. 237 00:09:47,720 --> 00:09:51,320 Vielleicht Dinge herum wickeln, nur von der Natur der endlichen 238 00:09:51,320 --> 00:09:53,930 Anzahl der Bits, die wir für eine int zugewiesen. 239 00:09:53,930 --> 00:09:56,270 Aber es ist sicherlich noch weit mehr als 10 durchlaufen und 240 00:09:56,270 --> 00:09:58,630 sicherlich mehr als 11 Mal hier. 241 00:09:58,630 --> 00:10:02,240 >> Und jetzt, nur so nebenbei, erkennen, dass i + + und i - 242 00:10:02,240 --> 00:10:04,420 sind wirklich nur syntaktischer Zucker. 243 00:10:04,420 --> 00:10:07,210 Es ist nur Kurzschreibweise für das, was ein wenig mehr 244 00:10:07,210 --> 00:10:08,720 explizit wie folgt geschrieben: 245 00:10:08,720 --> 00:10:11,200 i = i + 1. 246 00:10:11,200 --> 00:10:13,460 Das heißt identisch i + +. 247 00:10:13,460 --> 00:10:15,860 Es nur irgendwie sieht schöner zu sagen i + +. 248 00:10:15,860 --> 00:10:17,490 Es ist mehr prägnant, besser lesbar. 249 00:10:17,490 --> 00:10:19,030 Und so die meisten Menschen tun, statt. 250 00:10:19,030 --> 00:10:21,840 Dies ist aber funktionell identisch 251 00:10:21,840 --> 00:10:22,900 was wir gerade gesehen haben. 252 00:10:22,900 --> 00:10:27,770 Also kurz gesagt, ist die schnelle Lösung hier nur zu sagen, iterieren i 253 00:10:27,770 --> 00:10:30,690 von 0 bis hinauf zu weniger als 10 ist. 254 00:10:30,690 --> 00:10:32,700 Und dann werden wir in der Tat erhalten 10 Sterne. 255 00:10:32,700 --> 00:10:33,430 >> Also lasst uns versuchen. 256 00:10:33,430 --> 00:10:35,310 Lassen Sie mich öffnen Sie das Terminal an der Unterseite. 257 00:10:35,310 --> 00:10:37,420 Lassen Sie mich in das Verzeichnis zu gehen, dass diese ist in. 258 00:10:37,420 --> 00:10:40,030 Und ich werde es manuell kompilieren mit Clang für jetzt. 259 00:10:40,030 --> 00:10:44,880 Und ich werde dies als buggy1.c kompilieren Sie die Eingabetaste. 260 00:10:44,880 --> 00:10:50,280 Und jetzt buggy1, warum gibt es keine solche Datei oder das Verzeichnis 261 00:10:50,280 --> 00:10:52,026 genannt buggy1? 262 00:10:52,026 --> 00:10:53,850 PUBLIKUM: [unverständlich]. 263 00:10:53,850 --> 00:10:54,240 DAVID J. MALAN: Yeah. 264 00:10:54,240 --> 00:10:55,420 Also ist es eigentlich als a.out. 265 00:10:55,420 --> 00:10:57,480 So erinnern, wenn Sie laufen nur Clang, wo Clang ist die 266 00:10:57,480 --> 00:11:00,420 Compiler, und Sie nicht den Namen Sie 267 00:11:00,420 --> 00:11:03,550 geben, um Ihr Programm, es geht um standardmäßig auf a.out. 268 00:11:03,550 --> 00:11:05,030 So in der Tat, wenn ich ls - 269 00:11:05,030 --> 00:11:05,510 oops. 270 00:11:05,510 --> 00:11:07,680 Und ich didn't - die Schwarz-Weiß-Thema einige 271 00:11:07,680 --> 00:11:08,840 Sie konfrontiert wurde behoben. 272 00:11:08,840 --> 00:11:10,670 Aber lassen Sie mich dies tun. 273 00:11:10,670 --> 00:11:14,570 Dort haben wir a.out auf der linken Seite befindet. 274 00:11:14,570 --> 00:11:17,360 Also müssen wir a.out statt buggy1 laufen. 275 00:11:17,360 --> 00:11:19,140 >> Also lass mich gehen Sie vor und tun dies. 276 00:11:19,140 --> 00:11:22,840 . / A.out, Enter. 277 00:11:22,840 --> 00:11:26,160 Und ich anscheinend nicht was tun? 278 00:11:26,160 --> 00:11:26,620 PUBLIKUM: Speichern. 279 00:11:26,620 --> 00:11:27,390 DAVID J. MALAN: Speichern meiner Datei. 280 00:11:27,390 --> 00:11:31,520 Also das ist einfach durch Drücken Control S, oder gehen zu lösen 281 00:11:31,520 --> 00:11:33,450 Datei, Speichern, wie in den meisten Programmen. 282 00:11:33,450 --> 00:11:36,360 Lassen Sie mich gehen hier unten, löschen Sie den Bildschirm, führen Sie es erneut. 283 00:11:36,360 --> 00:11:37,960 Und es gibt noch ein Bug. 284 00:11:37,960 --> 00:11:41,618 So, was los ist - 285 00:11:41,618 --> 00:11:42,980 PUBLIKUM: Sie haben nicht kompilieren. 286 00:11:42,980 --> 00:11:44,040 DAVID J. MALAN: Ah, gut. 287 00:11:44,040 --> 00:11:45,010 Ich wusste nicht kompilieren. 288 00:11:45,010 --> 00:11:47,250 Wie ein Idiot, ich bin auf den Code schauen, um zu sehen, was los ist. 289 00:11:47,250 --> 00:11:51,275 So clang buggy1.c, jetzt a.out. 290 00:11:51,275 --> 00:11:52,640 Und puh, gespeichert. 291 00:11:52,640 --> 00:11:55,090 >> So sieht es ein wenig hässlich, weil es keine neue Linie 292 00:11:55,090 --> 00:11:55,970 überall im Programm. 293 00:11:55,970 --> 00:11:57,390 Aber noch einmal, das ist nur ein ästhetisches Detail. 294 00:11:57,390 --> 00:11:59,430 Und zumindest, wenn wir diejenigen zähle, sollten wir 295 00:11:59,430 --> 00:12:01,160 nun 10 solcher Sterne. 296 00:12:01,160 --> 00:12:03,260 Nun, was ist mit diesem zweiten Warm-up Beispiel? 297 00:12:03,260 --> 00:12:07,750 So in buggy2, behaupte ich, dass diese Version auch gedruckt werden 298 00:12:07,750 --> 00:12:10,110 10 Sterne, eine pro Zeile. 299 00:12:10,110 --> 00:12:12,340 Also dieser Zeit habe ich einen Zeilenumbruch, nur um 300 00:12:12,340 --> 00:12:13,520 Dinge ein wenig schöner. 301 00:12:13,520 --> 00:12:15,410 Aber anstatt, was ich bekomme ist. 302 00:12:15,410 --> 00:12:19,590 So lass mich tun clang buggy2.c, Enter. 303 00:12:19,590 --> 00:12:21,790 Jetzt ist es wieder aufgerufen a.out. 304 00:12:21,790 --> 00:12:23,130 Enter. 305 00:12:23,130 --> 00:12:26,900 Ich sehe nur eine neue Linie, nur das letzte neue Zeile, 306 00:12:26,900 --> 00:12:29,370 bewegt meine Aufforderung, die nächste Zeile. 307 00:12:29,370 --> 00:12:32,660 Und doch klar ich habe Druck *, dann eine neue Zeile, 308 00:12:32,660 --> 00:12:33,990 *, Dann eine neue Zeile. 309 00:12:33,990 --> 00:12:35,490 Aber was ist der Fehler hier? 310 00:12:35,490 --> 00:12:35,974 Yeah? 311 00:12:35,974 --> 00:12:37,224 PUBLIKUM: [unverständlich]. 312 00:12:39,850 --> 00:12:40,470 >> DAVID J. MALAN: Genau. 313 00:12:40,470 --> 00:12:44,110 Ganz im Gegensatz zu einigen Sprachen wie Python, wo Einkerbung 314 00:12:44,110 --> 00:12:46,030 tatsächlich funktionelle Bedeutung, in 315 00:12:46,030 --> 00:12:47,150 Sprache wie C - 316 00:12:47,150 --> 00:12:49,140 wie wir sehen werden, PHP, JavaScript - 317 00:12:49,140 --> 00:12:51,940 die Vertiefung ist wirklich nur für den Menschen 'profitieren. 318 00:12:51,940 --> 00:12:55,690 So ist die Tatsache, dass ich 16 und 17 eingerückt sieht toll aus, 319 00:12:55,690 --> 00:12:57,530 aber es hat keine funktionale Bedeutung hier. 320 00:12:57,530 --> 00:13:00,700 Wenn ich beide Leitungen als Teil der für die Ausführung 321 00:13:00,700 --> 00:13:05,140 Schleife, dann muss ich sie in geschweiften Klammern umschließen indem Sie diese. 322 00:13:05,140 --> 00:13:08,540 Sie können nur schneiden diese Ecke und lassen Sie die geschweiften Klammern ein, wenn 323 00:13:08,540 --> 00:13:10,036 Was ist der Fall? 324 00:13:10,036 --> 00:13:10,410 PUBLIKUM: Nur eine Zeile. 325 00:13:10,410 --> 00:13:11,130 DAVID J. MALAN: Nur eine Zeile. 326 00:13:11,130 --> 00:13:15,280 Also das ist einfach irgendwie eine nette Art von Syntax Detail, so dass 327 00:13:15,280 --> 00:13:17,900 Sie verschwenden keine Zeit mit dem Schreiben drei Linien, von denen zwei 328 00:13:17,900 --> 00:13:20,040 geschweiften Klammern, nur zu schreiben eine einzige Zeile Code. 329 00:13:20,040 --> 00:13:21,650 Aber wenn Sie zwei oder mehr Zeilen, wir 330 00:13:21,650 --> 00:13:22,860 Tat brauchen, dies zu tun. 331 00:13:22,860 --> 00:13:24,210 >> So, jetzt lass mich speichern Sie diese. 332 00:13:24,210 --> 00:13:27,140 Lassen Sie mich gehen Sie vor und erneut ausführen Clang. 333 00:13:27,140 --> 00:13:31,375 Dann lass mich erneut a.out, und jetzt bekomme ich sie eine pro Zeile. 334 00:13:31,375 --> 00:13:33,670 Nun, a.out ist wieder eine Art stummen Namen für ein Programm. 335 00:13:33,670 --> 00:13:37,500 Wie kann ich feststellen Clang tatsächlich geben mir einen Dateinamen 336 00:13:37,500 --> 00:13:39,820 das ist mehr benutzerfreundlich, wie buggy2 selbst? 337 00:13:43,200 --> 00:13:44,466 Ein wenig mehr klar? 338 00:13:44,466 --> 00:13:45,220 PUBLIKUM: [unverständlich]. 339 00:13:45,220 --> 00:13:47,810 DAVID J. MALAN: OK, ich kann also tatsächlich die sehr 340 00:13:47,810 --> 00:13:51,000 benutzerfreundliche Verknüpfung und schreiben Sie einfach machen buggy2. 341 00:13:51,000 --> 00:13:53,840 Ich weiß nicht angeben. C in diesem Fall, und drücken Sie Enter. 342 00:13:53,840 --> 00:13:58,530 Und was machen tut, ist es kompiliert buggy2.c für mich durch 343 00:13:58,530 --> 00:14:00,260 fragen Clang es zu tun. 344 00:14:00,260 --> 00:14:05,100 Insbesondere ist es Clang nennt, läuft es Clang mit viel mehr 345 00:14:05,100 --> 00:14:08,540 Kommandozeilen-Argumente oder Schalter, als ich tatsächlich benötigen. 346 00:14:08,540 --> 00:14:11,270 In der Zeit werden wir wieder zu dem, was alle diese verschiedenen 347 00:14:11,270 --> 00:14:13,810 kryptischen Bindestrich Ausdrücken bedeutet. 348 00:14:13,810 --> 00:14:16,910 Aber jetzt ist das nur sparen mir die Mühe 349 00:14:16,910 --> 00:14:19,600 mit sich zu erinnern und zu tippen all jene 350 00:14:19,600 --> 00:14:21,150 verschiedenen Bindestrich Ausdrücke. 351 00:14:21,150 --> 00:14:23,240 Und der Kopf der es letztlich 352 00:14:23,240 --> 00:14:25,900 dass ich jetzt haben buggy2. 353 00:14:25,900 --> 00:14:27,480 Wenn ich dies tun manuell will, obwohl ich 354 00:14:27,480 --> 00:14:28,775 kann stattdessen tun - 355 00:14:28,775 --> 00:14:34,110 Klang-o buggy2 und dann buggy2.c. 356 00:14:34,110 --> 00:14:37,980 Und das wird ähnlich wie mir eine Datei namens buggy2. 357 00:14:37,980 --> 00:14:39,710 >> Also kurz gesagt, ist Clang der Compiler. 358 00:14:39,710 --> 00:14:43,080 Stellen Sie nur ein benutzerfreundliches Tool, das werden wir mit mehr 359 00:14:43,080 --> 00:14:44,420 und mehr, weil es nur beginnt, 360 00:14:44,420 --> 00:14:47,330 Dinge zu vereinfachen für uns. 361 00:14:47,330 --> 00:14:49,430 Und wir geben 0 schließlich. 362 00:14:49,430 --> 00:14:51,890 Denn jetzt, nur weil, aber wir beginnen Hänseleien, dass ein Teil 363 00:14:51,890 --> 00:14:52,930 heute und am Mittwoch. 364 00:14:52,930 --> 00:14:55,560 Haben Sie Fragen zu irgendwas davon? 365 00:14:55,560 --> 00:14:56,450 Yeah? 366 00:14:56,450 --> 00:14:58,234 PUBLIKUM: [unverständlich] 367 00:14:58,234 --> 00:15:00,020 ls in Anführungszeichen da? 368 00:15:00,020 --> 00:15:01,710 DAVID J. MALAN: OK. 369 00:15:01,710 --> 00:15:05,880 Wenn ich typisierte ls in Anführungszeichen, die mich tat etwas Magie 370 00:15:05,880 --> 00:15:07,160 hinter den Kulissen einen Fehler beheben. 371 00:15:07,160 --> 00:15:09,370 Ich habe vergessen, wie wir erzählt haben viele von Ihnen auf der 372 00:15:09,370 --> 00:15:11,600 Diskussionsrunden zu tun - 373 00:15:11,600 --> 00:15:17,220 wir tun dies jetzt - sudo yum-y update appliance50. 374 00:15:17,220 --> 00:15:19,790 Whoops, dass das stimmt geschrieben. 375 00:15:19,790 --> 00:15:23,240 So ist das Gerät wie ein Betriebssystem. 376 00:15:23,240 --> 00:15:25,650 Es läuft dieses Betriebssystem namens Fedora. 377 00:15:25,650 --> 00:15:27,450 Und jetzt wegen meiner langsamen Internet-Verbindung, ich habe 378 00:15:27,450 --> 00:15:28,260 wirklich abgespritzt es. 379 00:15:28,260 --> 00:15:31,620 So läuft sudo yum update, wie wir Sie in der tun soll 380 00:15:31,620 --> 00:15:34,080 Problem gesetzt, wird im wesentlichen wie läuft automatische Updates 381 00:15:34,080 --> 00:15:35,420 in Mac OS oder Windows. 382 00:15:35,420 --> 00:15:37,280 Und der Grund für das Funktionieren dieser ganz am Anfang der 383 00:15:37,280 --> 00:15:39,640 Problem-Set ist, denn wenn wir das Gerät geschaffen, I 384 00:15:39,640 --> 00:15:42,480 up, versaut und ich versehentlich alle Ihre Programme suchen 385 00:15:42,480 --> 00:15:45,210 schwarz auf einem schwarzen Bildschirm, weshalb Sie nicht sehen, sind sie 386 00:15:45,210 --> 00:15:45,860 standardmäßig aktiviert. 387 00:15:45,860 --> 00:15:48,020 Aber die neueste Version des Gerätes behebt dieses. 388 00:15:48,020 --> 00:15:50,500 Und das werde ich in der Pause fix, sobald ich Internet haben 389 00:15:50,500 --> 00:15:51,280 Konnektivität. 390 00:15:51,280 --> 00:15:54,630 >> So die Anführungszeichen nur versteckt mein Fehler, sehr diskret, 391 00:15:54,630 --> 00:15:55,730 anscheinend. 392 00:15:55,730 --> 00:15:56,980 Weitere Fragen? 393 00:15:59,750 --> 00:16:00,668 Ja? 394 00:16:00,668 --> 00:16:02,012 PUBLIKUM: Woher kommen aus machen? 395 00:16:02,012 --> 00:16:03,810 [Unverständlich] 396 00:16:03,810 --> 00:16:04,280 DAVID J. MALAN: Gute Frage. 397 00:16:04,280 --> 00:16:05,460 Woher stammen aus machen? 398 00:16:05,460 --> 00:16:09,390 Es ist ein Linux-Programm, das für viele Jahre bestanden hat, lange 399 00:16:09,390 --> 00:16:10,570 vor CS50. 400 00:16:10,570 --> 00:16:12,930 Und es kommt mit einem Betriebssystem wie Fedora. 401 00:16:12,930 --> 00:16:14,830 Es ist nicht von der CS50-Bibliothek. 402 00:16:14,830 --> 00:16:17,560 In der Tat, das einzige, was von der CS50-Bibliothek gekommen 403 00:16:17,560 --> 00:16:20,470 so weit, dass wir gesehen haben, sind GetString, GetInt, die alle 404 00:16:20,470 --> 00:16:25,550 die Hole-Funktionen, und das Wort string, und einige 405 00:16:25,550 --> 00:16:26,575 Soweit das Wort bool. 406 00:16:26,575 --> 00:16:29,180 Aber wir, dass neben necken, wenn wir tauchen in den CS50 407 00:16:29,180 --> 00:16:30,580 Gerät selbst. 408 00:16:30,580 --> 00:16:32,820 >> Also ja, eine weitere Frage hier. 409 00:16:32,820 --> 00:16:36,636 PUBLIKUM: Als Sie sagten zu machen und dann fehlerhaft, wie funktioniert das 410 00:16:36,636 --> 00:16:39,980 Computer wissen [unverständlich]? 411 00:16:39,980 --> 00:16:40,520 DAVID J. MALAN: Gute Frage. 412 00:16:40,520 --> 00:16:43,830 Also, wenn Sie gerade laufen zu lassen buggy1 oder machen buggy2, wie 413 00:16:43,830 --> 00:16:45,220 nicht zu wissen? 414 00:16:45,220 --> 00:16:49,900 So standardmäßig, wenn Sie buggy1 geben, machen sucht nach einem 415 00:16:49,900 --> 00:16:52,330 Datei namens buggy1.c. 416 00:16:52,330 --> 00:16:55,570 Und dann führt die entsprechenden Clang Befehle 417 00:16:55,570 --> 00:17:00,380 wodurch das Überschreiben der Standard-Ausgabe-Datei namens a.out. 418 00:17:00,380 --> 00:17:03,670 In der Tat, wenn wir was machen schauen, was - 419 00:17:03,670 --> 00:17:04,839 Beenden wir diese. 420 00:17:04,839 --> 00:17:09,530 Wenn wir was machen wirklich tat schauen, machen buggy2, 421 00:17:09,530 --> 00:17:10,470 es ist bereits up to date. 422 00:17:10,470 --> 00:17:13,020 Also lassen Sie mich entfernen rm-Befehl, der 423 00:17:13,020 --> 00:17:14,319 Programm, das ich schrieb vor. 424 00:17:14,319 --> 00:17:17,319 Eingabe Y-E-S, um zu bestätigen, dass ich es entfernen wollen. 425 00:17:17,319 --> 00:17:20,480 Wenn ich jetzt tun zu machen, feststellen, dass in dieser sehr langen Linie, 426 00:17:20,480 --> 00:17:22,980 es ist das letzte, was hier-o buggy2. 427 00:17:22,980 --> 00:17:26,959 Alle machen tut vergeht dieses Argument, so zu sprechen, 428 00:17:26,959 --> 00:17:29,665 Clang, so dass ich nicht haben geben Sie es mir. 429 00:17:29,665 --> 00:17:32,660 >> Alles klar, so dass eine schnelle paar administrative 430 00:17:32,660 --> 00:17:33,470 Ankündigungen. 431 00:17:33,470 --> 00:17:36,940 So für Abschnitte, die offiziell begann kommenden 432 00:17:36,940 --> 00:17:38,970 Sonntag, werden Sie wollen immer bringen, wenn 433 00:17:38,970 --> 00:17:40,120 Sie haben ein, ein Laptop. 434 00:17:40,120 --> 00:17:42,570 Wenn Sie nicht über einen Laptop, nicht erreichen, um mich 435 00:17:42,570 --> 00:17:43,580 fallen mir eine E-Mail. 436 00:17:43,580 --> 00:17:44,810 Und wir werden herausfinden, einen Workflow. 437 00:17:44,810 --> 00:17:47,100 Was in der Regel werden Sie im Abschnitt zu finden, ist, dass sie Teil sind 438 00:17:47,100 --> 00:17:48,770 konzeptionellen Teil hands-on. 439 00:17:48,770 --> 00:17:52,190 Wir gezielt einsetzen Abschnitt von Fragen, Teil 440 00:17:52,190 --> 00:17:54,110 der Woche gestellten Aufgabe, durch einige der Fuß 441 00:17:54,110 --> 00:17:55,820 Das konzeptionelle Material aus der Vorlesung. 442 00:17:55,820 --> 00:17:57,480 Und das ist alles im aktuellen Problem-Set. 443 00:17:57,480 --> 00:18:00,010 Und wir werden auch in einigen Mitmach-Aktionen tauchen, manchmal 444 00:18:00,010 --> 00:18:02,190 von denen wird benötigt, um eingereicht werden, manchmal 445 00:18:02,190 --> 00:18:02,830 welche nicht. 446 00:18:02,830 --> 00:18:04,630 Zum Beispiel, diese erste Woche, sind sie nur als gedacht 447 00:18:04,630 --> 00:18:05,780 Aufwärmübung. 448 00:18:05,780 --> 00:18:07,800 Und Sie werden feststellen, dass diese Probleme wirklich nur, dass. 449 00:18:07,800 --> 00:18:10,220 Sie soll eher klein, aber nicht notwendigerweise 450 00:18:10,220 --> 00:18:13,100 triviale Programme zu schreiben, die nicht unbedingt 451 00:18:13,100 --> 00:18:16,230 spannende an und für sich, sind aber gute Chancen, 452 00:18:16,230 --> 00:18:19,620 üben mit Syntax, mit neuen Funktionen, in den Komfort eines 453 00:18:19,620 --> 00:18:21,900 wo Sie ein paar von deinen Klassenkameraden vorstellen, wie 454 00:18:21,900 --> 00:18:22,870 sowie Ihre TF. 455 00:18:22,870 --> 00:18:26,210 >> Und was wir im Laufe der Zeit tun kann, ist ein Tool namens CS50 Spaces, 456 00:18:26,210 --> 00:18:28,940 wobei anstelle der nur mit dem CS50 Appliance, werden Sie 457 00:18:28,940 --> 00:18:32,450 Statt auf eine Webseite gehen, in einem Browser, wo Sie in der Lage 458 00:18:32,450 --> 00:18:35,610 Code in einem Browser-Fenster während der Abschnitt zu schreiben. 459 00:18:35,610 --> 00:18:38,240 Und dann, wenn Sie in entscheiden, können Sie Ihre Lehre Kollegen dann zeigen 460 00:18:38,240 --> 00:18:40,980 was auch immer es ist, Sie auf Ihrem Bildschirm Eingabe in Ihrem Browser 461 00:18:40,980 --> 00:18:43,930 Fenster an der Vorderseite der Klasse, ob anonym oder 462 00:18:43,930 --> 00:18:47,250 öffentlich, so dass er oder sie kann dann durch mit Fuß 463 00:18:47,250 --> 00:18:50,080 Ihre Klassenkameraden, was Sie gut gemacht, was du nicht auch tun. 464 00:18:50,080 --> 00:18:52,750 Und wieder, versicherte Rest alles schön können anonymisiert werden. 465 00:18:52,750 --> 00:18:54,410 Aber es wird eine schöne Gelegenheit für viel mehr 466 00:18:54,410 --> 00:18:56,810 Interaktivität als so etwas wie Vortrag ermöglicht. 467 00:18:56,810 --> 00:18:58,910 >> In der Zwischenzeit müssen wir diese Dinge als Super 468 00:18:58,910 --> 00:19:01,610 Abschnitte, die optional sind, aber offen für alle in 469 00:19:01,610 --> 00:19:04,030 die Klasse, so dass man dies mehr gemeinsam tun für 470 00:19:04,030 --> 00:19:05,190 Aufgabe gestellt ein. 471 00:19:05,190 --> 00:19:06,010 Hier ist der Zeitplan. 472 00:19:06,010 --> 00:19:08,870 Dies ist auch auf der Homepage cs50.net geschrieben. 473 00:19:08,870 --> 00:19:10,850 Beachten Sie, dass es dann ein Hacker-spezifisch sein 474 00:19:10,850 --> 00:19:12,430 ein morgen Nachmittag. 475 00:19:12,430 --> 00:19:15,460 Und wir werden filmen ein heute und morgen einen und veröffentlichen die 476 00:19:15,460 --> 00:19:16,720 online innerhalb von 24 Stunden. 477 00:19:16,720 --> 00:19:19,370 Also, wenn Sie nicht können jede dieser Zeiten keine Sorgen machen. 478 00:19:19,370 --> 00:19:22,720 Und wieder ist der Zeitplan jetzt online unter cs50.net. 479 00:19:22,720 --> 00:19:25,350 >> In Bezug auf die Schnitte selbst, sollten Sie einen bekommen haben 480 00:19:25,350 --> 00:19:28,520 E-Mail, die Sie auffordert, den Kurs der homepage zu finden 481 00:19:28,520 --> 00:19:29,610 Ihre Sektion. 482 00:19:29,610 --> 00:19:32,890 Wenn das Leben hat sich verändert, und Sie müssen Ihren Bereich zu ändern, 483 00:19:32,890 --> 00:19:33,560 kein Problem. 484 00:19:33,560 --> 00:19:37,900 Gehen Sie zurück zu der gleichen URL, cs50.net/section, Singular, 485 00:19:37,900 --> 00:19:40,090 und du wirst füllen ähnlicher Form, so dass Sie 486 00:19:40,090 --> 00:19:41,260 dann geben Sie uns Ihre Wünsche. 487 00:19:41,260 --> 00:19:43,360 Und wir werden Follow-up durch Ende der Woche, was wir können 488 00:19:43,360 --> 00:19:44,240 unterzubringen. 489 00:19:44,240 --> 00:19:49,530 Letzte Woche erinnern, dass wir mit CS50 Discuss vorgeschlagen, 490 00:19:49,530 --> 00:19:51,370 des Kurses Diskussionsplattform, in der Vorlesung. 491 00:19:51,370 --> 00:19:53,680 Also mussten wir 40 Fragen, die gestellt und wurden 492 00:19:53,680 --> 00:19:54,720 antwortete während der Vorlesungszeit. 493 00:19:54,720 --> 00:19:56,280 So schien es gut zu funktionieren, so dass wir weiterhin 494 00:19:56,280 --> 00:19:57,180 versuchen, dies zu tun. 495 00:19:57,180 --> 00:19:59,600 Wenn während der Vorlesungszeit, müssen Sie nicht nur wohl fühlen Anhebung 496 00:19:59,600 --> 00:20:00,780 Ihre Hand, kein Problem. 497 00:20:00,780 --> 00:20:04,640 Zum cs50.net/discuss, dort posten, und einer unserer Lehre 498 00:20:04,640 --> 00:20:07,270 Fellows werden entweder beantworten elektronisch oder heben ihre 499 00:20:07,270 --> 00:20:10,620 Hand auf Ihrem Namen anonym zu fragen, abhängig 500 00:20:10,620 --> 00:20:12,470 auf der Art der Frage. 501 00:20:12,470 --> 00:20:15,000 Und in Bezug auf Feedback, werden in der Regel pset sein 502 00:20:15,000 --> 00:20:16,760 wieder innerhalb einer Woche. 503 00:20:16,760 --> 00:20:19,080 Weil es dauert eine Weile für die Abschnitte zu erreichen 504 00:20:19,080 --> 00:20:22,430 Gleichgewichtslage wird die erste pset, 0 und 1, ein wenig sein 505 00:20:22,430 --> 00:20:24,130 verzögert wie die Dinge beruhigen. 506 00:20:24,130 --> 00:20:27,130 Aber dafür in den nächsten Wochen dran bleiben, um zu kommen. 507 00:20:27,130 --> 00:20:29,750 >> Alles klar, also lassen Sie mich auf meinem schweren gestellt 508 00:20:29,750 --> 00:20:31,040 Stimme für einen Moment. 509 00:20:31,040 --> 00:20:32,690 Also das ist eigentlich eine interessante Klima zu sein 510 00:20:32,690 --> 00:20:35,210 diese Diskussion, was mit all den anderen Dingen, 511 00:20:35,210 --> 00:20:37,310 los auf dem Campus verwandten dazu. 512 00:20:37,310 --> 00:20:40,220 Aber CS50 hat sicherlich hatte seine Geschichte dieser besonderen 513 00:20:40,220 --> 00:20:43,360 Thema in so viel wie in jedem Jahr, dieser Kurs ist für viele 514 00:20:43,360 --> 00:20:46,910 Jahr, Ad-Boards rund 3% der Klasse. 515 00:20:46,910 --> 00:20:51,620 Das letzte Jahr, 2011, CS50 Ad-Boarded 35 Studenten. 516 00:20:51,620 --> 00:20:54,120 Dies ist nicht, denke ich, wegen des Mangels an Klarheit. 517 00:20:54,120 --> 00:20:56,760 Erkenne, dass im Laufe der Lehrplan, gibt es eine Seite der 518 00:20:56,760 --> 00:20:59,020 Erklärung, wo die Linien sind. 519 00:20:59,020 --> 00:21:01,350 Das gleiche Aussage auf jedem der wiederholten 520 00:21:01,350 --> 00:21:03,070 Problem setzt auf Seite eins. 521 00:21:03,070 --> 00:21:05,760 >> Also habe ich erwähne dies heute wirklich nur um 522 00:21:05,760 --> 00:21:07,030 Leute von diesem aufmerksam. 523 00:21:07,030 --> 00:21:08,080 Und wir haben verschiedene Dinge ausprobiert. 524 00:21:08,080 --> 00:21:10,630 Und was ich dachte, wir würden heute gerade einen Moment Zeit nehmen, um 525 00:21:10,630 --> 00:21:13,830 tatsächlich einige der jüngsten Fälle, die kommen haben aussehen. 526 00:21:13,830 --> 00:21:16,160 Anstatt sollten Sie diese als schmutzigen kleinen Geheimnisse, eigentlich 527 00:21:16,160 --> 00:21:19,170 weisen darauf hin, was die Schüler gemacht haben und wie wir festgestellt 528 00:21:19,170 --> 00:21:21,630 es und wirklich das, was das übergeordnete Motivation ist für 529 00:21:21,630 --> 00:21:23,950 auch dieses Gespräch. 530 00:21:23,950 --> 00:21:27,060 Also mit dieser sagte, die Linie im wesentlichen ist dies - 531 00:21:27,060 --> 00:21:29,200 gemäß dem Lehrplan, sind Sie willkommen, Sie werden aufgefordert, die 532 00:21:29,200 --> 00:21:30,210 sprechen Sie mit Klassenkameraden. 533 00:21:30,210 --> 00:21:31,910 Das ist der ganze Zweck der mit diese kollaborative 534 00:21:31,910 --> 00:21:34,470 Sprechstunden in Annenberg und die Menschen ermutigen für die 535 00:21:34,470 --> 00:21:35,755 endgültige Projekt zusammen zu arbeiten. 536 00:21:35,755 --> 00:21:38,590 Aber die Linie wird gezeichnet, wenn es Zeit kommt, um tatsächlich zu schreiben 537 00:21:38,590 --> 00:21:39,790 Ihre endgültige Lösung. 538 00:21:39,790 --> 00:21:42,590 Speaking in Englisch, völlig in Ordnung, spricht in Pseudo-Code, 539 00:21:42,590 --> 00:21:43,400 völlig in Ordnung. 540 00:21:43,400 --> 00:21:46,340 E-Mail ein Klassenkamerad Ihrer pset, ließ sie schauen über 541 00:21:46,340 --> 00:21:48,610 der Bildschirm wie die Hände der Eingabe fortfahren, 542 00:21:48,610 --> 00:21:50,110 über die Leitung als auch. 543 00:21:50,110 --> 00:21:52,250 Sie auf dem Lehrplan für die besonderen Linien. 544 00:21:52,250 --> 00:21:55,850 >> Aber nur um ein Bild zu malen, wie diese ist leider ein 545 00:21:55,850 --> 00:21:58,370 Wirklichkeit erkennen, dass es Websites gibt, 546 00:21:58,370 --> 00:22:01,490 Lösungen haben von dieser Klasse und viele andere Klassen. 547 00:22:01,490 --> 00:22:04,940 Die Tatsache, dass Sie oder rund 3% von euch wissen, dass diese existiert 548 00:22:04,940 --> 00:22:07,240 bedeutet, dass wir wissen, dass diese existiert. 549 00:22:07,240 --> 00:22:09,340 Die Tatsache, dass es Websites wie dieses, wo Sie 550 00:22:09,340 --> 00:22:11,540 kann jemand zahlen, um tatsächlich das Problem Sätze - das war 551 00:22:11,540 --> 00:22:13,450 eine tatsächliche Fall, kam im letzten Jahr. 552 00:22:13,450 --> 00:22:15,790 Dies ist eine Website namens odesk.com. 553 00:22:15,790 --> 00:22:20,090 Und Tim war der Name der Person hier, die über die Entsendung wurde 554 00:22:20,090 --> 00:22:24,580 diese Website und fragte jemand seine pset 7 in zu tun 555 00:22:24,580 --> 00:22:25,570 diesem besonderen Fall. 556 00:22:25,570 --> 00:22:28,350 Nun, das ist odesk.com sehr Google-Lage, und auch wir sind 557 00:22:28,350 --> 00:22:30,310 sehr gut googeln. 558 00:22:30,310 --> 00:22:32,360 Auch hier gibt es Seiten - und das ist eher ein 559 00:22:32,360 --> 00:22:34,234 grauenhaft, ehrlich gesagt. 560 00:22:34,234 --> 00:22:38,050 [Gelächter] 561 00:22:38,050 --> 00:22:39,610 DAVID J. MALAN: Die lustige Sache über diese Seite ist, wenn 562 00:22:39,610 --> 00:22:41,970 lesen Sie die Info-Seite, reden sie über ihre Corporate 563 00:22:41,970 --> 00:22:44,390 Kultur und wie Kunden-Service ist die Nummer eins 564 00:22:44,390 --> 00:22:46,190 Priorität, um sicherzustellen, dass Ihre Aufträge zu bekommen 565 00:22:46,190 --> 00:22:47,890 wandte sich in der Zeit. 566 00:22:47,890 --> 00:22:50,580 >> Aber im Ernst, wieder die Tatsache, dass diese Seiten 567 00:22:50,580 --> 00:22:52,910 existieren, erkennen wir auch, sind bewusst 568 00:22:52,910 --> 00:22:53,730 diese Art von Websites. 569 00:22:53,730 --> 00:22:55,890 Und um Ihnen ein Gefühl von dem, was bildet dies in der Regel 570 00:22:55,890 --> 00:22:58,570 dauert, wir in der Regel keine großen Skandale, wo Menschen 571 00:22:58,570 --> 00:23:01,080 sind auf jede Art von massiven zusammen, sondern 572 00:23:01,080 --> 00:23:04,540 Es ist diese Late-Night-Momente der Schwäche, in dem Sie haben, so 573 00:23:04,540 --> 00:23:07,550 viel zu tun, es 04.00 Uhr ist, du bist erschöpft, und Sie 574 00:23:07,550 --> 00:23:09,770 denken sich, na ja, lassen Sie mich nur einen Blick auf meine 575 00:23:09,770 --> 00:23:11,770 Mitbewohnerin oder mein Freund den Code oder dergleichen. 576 00:23:11,770 --> 00:23:14,800 Und die Manifestationen dies leider beinhalten Studenten 577 00:23:14,800 --> 00:23:17,640 Eine Vorlage etwas und Schüler B submitting 578 00:23:17,640 --> 00:23:20,370 etwas, was sicherlich in einem Computer 579 00:23:20,370 --> 00:23:23,830 Wissenschaft Klasse, ist bemerkenswert einfach für Informatiker 580 00:23:23,830 --> 00:23:25,690 mit Software zu erkennen. 581 00:23:25,690 --> 00:23:28,410 Dies ist ein weiteres gemeinsames Paradigma, wo Sie Art habe 582 00:23:28,410 --> 00:23:31,010 wurde neben der jemand arbeitet, vielleicht reden in 583 00:23:31,010 --> 00:23:32,360 Englisch, just fine, Pseudocode. 584 00:23:32,360 --> 00:23:35,080 Aber dann ist es an der Zeit, um tatsächlich zu unterwerfen und die pset 585 00:23:35,080 --> 00:23:37,910 nur über E-Mail oder Dropbox oder dergleichen ausgetauscht zu werden. 586 00:23:37,910 --> 00:23:41,120 Aber in einem Versuch, um es weniger offensichtlich, dass dies 587 00:23:41,120 --> 00:23:44,830 was passiert ist, dann ist dies, was eingereicht werden. 588 00:23:44,830 --> 00:23:47,880 Auch dies nicht stolpern gut geschriebenen Stücke 589 00:23:47,880 --> 00:23:50,360 Software wie wir tatsächlich erkennen 590 00:23:50,360 --> 00:23:51,280 diese Art von Dingen. 591 00:23:51,280 --> 00:23:53,760 Und in der Tat, was wir tun müssen, ist Software benutzt, die vergleicht alle 592 00:23:53,760 --> 00:23:55,540 diesjährigen Einreichungen gegen alle vergangenen Jahres 593 00:23:55,540 --> 00:23:57,380 Einreichungen, gegen alles, was wir gefunden auf der 594 00:23:57,380 --> 00:24:00,060 Internet, gegen jede Job-Website gibt. 595 00:24:00,060 --> 00:24:01,710 Es ist alles sehr automatisiert. 596 00:24:01,710 --> 00:24:05,665 Und so machen wir das wirklich in großer Fairness gegenüber den 97%, die 597 00:24:05,665 --> 00:24:07,760 arbeiten wirklich ihre Ärsche off in diesem und in anderen 598 00:24:07,760 --> 00:24:11,530 Klassen und setzen in all dieser Bemühungen, so dass die Arbeit 599 00:24:11,530 --> 00:24:13,030 sie letztlich einzureichen ist ihre eigene. 600 00:24:13,030 --> 00:24:14,220 Und ich kann gehen für Alters. 601 00:24:14,220 --> 00:24:16,030 >> Dies sind nur eine Handvoll der letztjährigen Fälle. 602 00:24:16,030 --> 00:24:19,350 Ein paar Studenten eingereichten diese Dateien identisch für pset 2, 603 00:24:19,350 --> 00:24:22,460 pset 3, pset 4, pset 5, pset 6, pset 9. 604 00:24:22,460 --> 00:24:26,360 In diesem Fall war das Quiz 0 und im letzten Jahr, wo zwei 605 00:24:26,360 --> 00:24:29,570 Studenten eingereicht identisch Satz unter vielen 606 00:24:29,570 --> 00:24:32,210 andere, "Die Anforderung des Typs -" Punkt, Punkt, Punkt. 607 00:24:32,210 --> 00:24:34,530 So auch in einer Klasse von 600 haben wir dies erkennen 608 00:24:34,530 --> 00:24:36,310 vorgelegt am Quiz. 609 00:24:36,310 --> 00:24:39,080 Also kurz gesagt, das - ehrlich gesagt, ich hasse mit dieser Art von 610 00:24:39,080 --> 00:24:41,300 Gespräch - aber das ist wirklich eine bewusste Anstrengung 611 00:24:41,300 --> 00:24:43,540 in diesem Jahr versuchen, zur Senkung dieser Nummer. 612 00:24:43,540 --> 00:24:45,650 Denn obwohl wir sagen, diese Art von Dingen alle 613 00:24:45,650 --> 00:24:48,100 Jahr, denke ich, die Realität wobei an wohnte für ein paar 614 00:24:48,100 --> 00:24:50,800 mehr Sekunden als üblich und eigentlich nur darauf hinweisen, 615 00:24:50,800 --> 00:24:53,600 dass das, was könnte wie, äh, nicht so eine große Sache scheint, zumindest 616 00:24:53,600 --> 00:24:56,390 denken Sie zurück an diesem besonderen Augenblick, sowohl in Fairness 617 00:24:56,390 --> 00:25:00,100 Sie und Ihre Mitschüler hier. 618 00:25:00,100 --> 00:25:02,480 Also, wenn Sie irgendwelche Fragen haben, wo die Linie 619 00:25:02,480 --> 00:25:04,290 ist, bitte einfach erreichen, um mich persönlich. 620 00:25:04,290 --> 00:25:07,190 Aber die Antwort ist immer, völlig betonte bei der 621 00:25:07,190 --> 00:25:09,090 last minute, Bargeld in einem späten Tage. 622 00:25:09,090 --> 00:25:11,080 Oder wenn es eine Frage der nicht mit einer späten Tagen, 623 00:25:11,080 --> 00:25:12,900 ehrlich, mailen Sie mir persönlich. 624 00:25:12,900 --> 00:25:14,110 Wir werden herausfinden etwas heraus. 625 00:25:14,110 --> 00:25:17,480 Bitte nicht Ihre Zeit hier an der Harvard in Gefahr. 626 00:25:17,480 --> 00:25:18,570 >> Nun, ich dachte, wir sollten die Stimmung aufzuhellen, so dass ich 627 00:25:18,570 --> 00:25:20,264 enthalten diese als die nächste Folie. 628 00:25:20,264 --> 00:25:22,770 [Gelächter] 629 00:25:22,770 --> 00:25:23,630 DAVID J. MALAN: Diese Website war großartig. 630 00:25:23,630 --> 00:25:24,820 Ich habe tatsächlich ein wenig abgelenkt. 631 00:25:24,820 --> 00:25:26,330 Es gibt diese ein. 632 00:25:26,330 --> 00:25:29,590 Und dann dieses war erstaunlich. 633 00:25:29,590 --> 00:25:35,190 Okay, so dieser kitten späten denke nachts, wenn so 634 00:25:35,190 --> 00:25:36,040 diese Entscheidungen. 635 00:25:36,040 --> 00:25:40,110 Alles klar, also zurück zu mehr Spaß und weniger ernste Sachen, wie 636 00:25:40,110 --> 00:25:40,780 Bedingungen. 637 00:25:40,780 --> 00:25:43,900 >> Alles klar, also unterhielten wir uns kurz über diese. 638 00:25:43,900 --> 00:25:46,080 Dies ist etwas, das wahrscheinlich sehr vertraut aus 639 00:25:46,080 --> 00:25:47,260 die Welt der Scratch. 640 00:25:47,260 --> 00:25:49,860 Und in der Welt der Scratch, haben wir dieses Bedürfnis manchmal 641 00:25:49,860 --> 00:25:51,110 hinausgehen Gabel in der Straße. 642 00:25:51,110 --> 00:25:54,840 Entweder dies oder jenes tun oder diese andere Sache hier. 643 00:25:54,840 --> 00:25:58,990 Und wenn wir dies tun wollen, können wir, in C jetzt dies, wenn 644 00:25:58,990 --> 00:26:00,860 else-Konstrukt. 645 00:26:00,860 --> 00:26:06,420 Und dann haben wir hier boolesche Ausdrücke. 646 00:26:06,420 --> 00:26:09,260 Zum Beispiel, Boolesche Ausdrücke Hier können wir OR 647 00:26:09,260 --> 00:26:12,260 sie zusammen, in dem Sinne, dass wir diesen Zustand haben oder 648 00:26:12,260 --> 00:26:13,200 Diese Bedingung. 649 00:26:13,200 --> 00:26:15,100 Wir können und sie zusammen, in dem Sinne, dass wir wollen 650 00:26:15,100 --> 00:26:17,710 check this Zustand und Zustand. 651 00:26:17,710 --> 00:26:22,440 Und hier haben wir eine Switch-Anweisung jetzt, das ist nicht so 652 00:26:22,440 --> 00:26:26,040 ähnliche syntaktisch zu diesen Arten von Bedingungen, aber es 653 00:26:26,040 --> 00:26:30,160 ermöglicht es uns, den Gegenwert von if, else if, else if, else do 654 00:26:30,160 --> 00:26:34,990 wenn und dergleichen durch einfaches aufzuzählen fallweise 655 00:26:34,990 --> 00:26:36,670 von Fall zu Fall. 656 00:26:36,670 --> 00:26:38,370 So sahen wir diese letzten Zeit. 657 00:26:38,370 --> 00:26:40,430 Und dann begannen wir zu berühren, auf Dinge wie Schleifen. 658 00:26:40,430 --> 00:26:42,070 Wir sahen eine von diesen einen Moment vor. 659 00:26:42,070 --> 00:26:44,180 Aber es gibt diese anderen looping Konstrukte. 660 00:26:44,180 --> 00:26:46,370 >> Zum Beispiel werden diese hier. 661 00:26:46,370 --> 00:26:50,140 So while (Bedingung), tun diese Sache wieder und wieder. 662 00:26:50,140 --> 00:26:53,070 So grundlegend, scheint, was anders zu sein zwischen diesem 663 00:26:53,070 --> 00:26:55,760 for-Schleife und dieser while-Schleife hier? 664 00:27:00,810 --> 00:27:05,045 Diese for-Schleife und diese while-Schleife. 665 00:27:05,045 --> 00:27:07,840 Yeah? 666 00:27:07,840 --> 00:27:08,800 Was ist das? 667 00:27:08,800 --> 00:27:10,050 PUBLIKUM: [unverständlich]. 668 00:27:14,632 --> 00:27:15,120 DAVID J. MALAN: Gut. 669 00:27:15,120 --> 00:27:17,130 Während also in der for-Schleife Zustand, es ist eindeutig 670 00:27:17,130 --> 00:27:17,940 mehr Syntax. 671 00:27:17,940 --> 00:27:20,560 Es gibt diese Initialisierung, gibt es dieses Update. 672 00:27:20,560 --> 00:27:23,820 In einer while-Schleife, es gibt nur diese Bedingung. 673 00:27:23,820 --> 00:27:26,630 So scheint es, dass es ein wenig nach unten gegenüber der for Vergleich ist 674 00:27:26,630 --> 00:27:28,770 Schleife, was bedeutet, dass, wenn wir die Variablen haben wollen, und wir wollen 675 00:27:28,770 --> 00:27:30,800 einer Inkrementierung haben, wir haben tatsächlich zu 676 00:27:30,800 --> 00:27:32,500 Tun Sie dies, was uns. 677 00:27:32,500 --> 00:27:34,420 >> Also lass mich gehen Sie vor und eröffnen gedit. 678 00:27:34,420 --> 00:27:36,320 Lassen Sie mich Umstieg auf das Gerät. 679 00:27:36,320 --> 00:27:38,110 Und lassen Sie uns einfach eine schnelle kleine Beispiel, dass 680 00:27:38,110 --> 00:27:40,550 zeichnet eine davon von der anderen. 681 00:27:40,550 --> 00:27:42,490 Und im Hinterkopf hier sollte ich sagen eine Sache. 682 00:27:42,490 --> 00:27:44,120 Ich habe ausdrücklich erwähnte den Namen Tim. 683 00:27:44,120 --> 00:27:47,740 Tim war eigentlich jemand, dass ein Schüler zu finden, zu tun versucht 684 00:27:47,740 --> 00:27:48,680 ihre Hausaufgaben für sie. 685 00:27:48,680 --> 00:27:51,280 Wir hatten keine Tim in diesem Bereich vor. 686 00:27:51,280 --> 00:27:53,690 So realisieren, damit ich einen Schüler offenbart, war es nicht ein Student. 687 00:27:53,690 --> 00:27:55,720 Es war eine zufällige Person im Internet Dinge zu tun 688 00:27:55,720 --> 00:27:57,180 durch einen Bevollmächtigten im letzten Jahr. 689 00:27:57,180 --> 00:27:58,670 So finden wir auch. 690 00:27:58,670 --> 00:28:00,630 Also in diesem Fall hier, lass mich gehen Sie vor und 691 00:28:00,630 --> 00:28:02,810 Öffnen Sie eine neue Datei. 692 00:28:02,810 --> 00:28:04,800 Datei, Neu. 693 00:28:04,800 --> 00:28:06,050 Das gibt mir eine Registerkarte hier. 694 00:28:06,050 --> 00:28:09,940 Lassen Sie mich gehen Sie vor und speichern Sie es als loop.c. 695 00:28:09,940 --> 00:28:11,810 Lassen Sie mich gehen, und klicken Sie auf Speichern. 696 00:28:11,810 --> 00:28:15,340 Und dann hier unten, lasst uns weitermachen und schriftlich 697 00:28:15,340 --> 00:28:16,605 # Include. 698 00:28:19,116 --> 00:28:20,520 Lassen Sie mich zu vergrößern in. 699 00:28:20,520 --> 00:28:23,410 Jetzt tun wir int main (void). 700 00:28:23,410 --> 00:28:30,020 Nun lassen Sie mich gehen Sie vor und tun for (int i = 0; i < 701 00:28:30,020 --> 00:28:33,480 oh, 10; i + +). 702 00:28:33,480 --> 00:28:36,620 Und jetzt werde ich weitermachen und haben den Stern zu drucken, dass ich 703 00:28:36,620 --> 00:28:37,890 habe früher. 704 00:28:37,890 --> 00:28:39,390 Und dann am Ende des Programms, wir gerade dabei, 705 00:28:39,390 --> 00:28:41,130 drucken Sie eine neue Zeile, nur so, dass meine Aufforderung 706 00:28:41,130 --> 00:28:42,470 sieht nicht alles chaotisch. 707 00:28:42,470 --> 00:28:45,170 0 zurück. 708 00:28:45,170 --> 00:28:47,610 Scheint syntaktisch korrekt? 709 00:28:47,610 --> 00:28:48,040 So weit. 710 00:28:48,040 --> 00:28:48,560 Also mal sehen. 711 00:28:48,560 --> 00:28:51,290 >> Lassen Sie mich also verkleinern, gehe in mein Terminal-Fenster. 712 00:28:51,290 --> 00:28:54,570 Und lassen Sie mich gehen Sie vor und führen Sie Schleife, weil ich dies als 713 00:28:54,570 --> 00:28:55,690 was loop.c. 714 00:28:55,690 --> 00:28:56,780 So stellen Schleife. 715 00:28:56,780 --> 00:28:57,840 Scheint OK zu kompilieren. 716 00:28:57,840 --> 00:29:00,210 Lassen Sie mich laufen Schleife, und jetzt die Eingabetaste. 717 00:29:00,210 --> 00:29:01,820 Und es scheint zu druckenden 10 Sterne haben. 718 00:29:01,820 --> 00:29:03,780 So lasst uns einfach wandeln diese in eine while-Schleife und sehen, was 719 00:29:03,780 --> 00:29:05,220 Arten von Fragen, die wir stolpern. 720 00:29:05,220 --> 00:29:11,290 Also anstatt dies, lass mich gehen hier und sagen, während i 721 00:29:11,290 --> 00:29:12,760 weniger als 10 - 722 00:29:12,760 --> 00:29:14,910 Lassen Sie mich loszuwerden der for-Schleife. 723 00:29:14,910 --> 00:29:17,170 OK, so haben wir ein paar Probleme bereits. 724 00:29:17,170 --> 00:29:21,110 So die Bedingung ist die gleiche, aber ich bin natürlich fehlen die 725 00:29:21,110 --> 00:29:21,680 Initialisierung. 726 00:29:21,680 --> 00:29:23,840 Ich vermisse die Inkrementierung. 727 00:29:23,840 --> 00:29:28,020 Also, was soll der Compiler wahrscheinlich sagen Sie mir, wenn ich es versuchen 728 00:29:28,020 --> 00:29:29,170 dieses Programm kompilieren? 729 00:29:29,170 --> 00:29:29,666 Yeah? 730 00:29:29,666 --> 00:29:31,154 PUBLIKUM: [unverständlich]. 731 00:29:31,154 --> 00:29:31,650 >> DAVID J. MALAN: Gut. 732 00:29:31,650 --> 00:29:34,180 Es wird also so etwas wie Schwarzarbeit sagen - in diesem 733 00:29:34,180 --> 00:29:35,280 Fall Variable I. 734 00:29:35,280 --> 00:29:37,980 Und in der Tat, der nicht deklarierte Bezeichner i verwenden. 735 00:29:37,980 --> 00:29:40,960 Und so ist dies im Gegensatz zu Sprachen wie PHP und 736 00:29:40,960 --> 00:29:43,120 Python und Ruby, mit denen einige von euch vielleicht bekannt sein, 737 00:29:43,120 --> 00:29:44,820 wo man nur irgendwie Beginn der Verwendung von Variablen 738 00:29:44,820 --> 00:29:47,420 nolens volens und nicht um sie zu deklarieren Sorgen 739 00:29:47,420 --> 00:29:48,560 explizit immer. 740 00:29:48,560 --> 00:29:51,770 In C und in Sprachen wie Java und C + +, muss man 741 00:29:51,770 --> 00:29:53,020 Super explizit. 742 00:29:53,020 --> 00:29:55,760 Und wenn Sie eine Variable namens i wollen, müssen Sie mir sagen, 743 00:29:55,760 --> 00:29:57,360 Welche Art von Variable es sich handelt. 744 00:29:57,360 --> 00:29:59,360 So werden wir zu haben, um dieses Problem beheben wie folgt. 745 00:29:59,360 --> 00:30:05,510 Ich werde gehen müssen hier und geben int i; daher 746 00:30:05,510 --> 00:30:07,860 Ich habe erklärt, eine Variable namens i. 747 00:30:07,860 --> 00:30:09,180 Jetzt habe ich übersprungen einem Schritt. 748 00:30:09,180 --> 00:30:11,340 Ich habe natürlich nicht sie initialisiert, aber wir sehen, ob das am 749 00:30:11,340 --> 00:30:13,650 mindestens Fabrikate Clang Stop beschweren. 750 00:30:13,650 --> 00:30:15,770 Lassen Sie mich also ein Remake dieses Programm. 751 00:30:15,770 --> 00:30:16,770 >> Alles klar, jetzt ist es nur beschweren 752 00:30:16,770 --> 00:30:17,870 aus einem anderen Grund. 753 00:30:17,870 --> 00:30:21,130 "Variable 'i' ist nicht initialisiert, wenn hier verwendet." Alle Rechte, so 754 00:30:21,130 --> 00:30:22,340 das ist ziemlich eindeutig. 755 00:30:22,340 --> 00:30:25,510 Initialisiert bedeutet nur, setzen sie gleich einem Wert. 756 00:30:25,510 --> 00:30:30,820 Und wir haben das nicht getan, so lassen Sie gleich 0 mich versuchen. 757 00:30:30,820 --> 00:30:35,030 Nun wollen wir versuchen, diese wieder und wieder laufen Clang. 758 00:30:35,030 --> 00:30:36,140 Zusammengestellt dieser Zeit. 759 00:30:36,140 --> 00:30:37,210 Und ich bin zu, um sie auszuführen. 760 00:30:37,210 --> 00:30:43,120 Aber große alte Endlosschleife, weil ich das getan 761 00:30:43,120 --> 00:30:45,530 Initialisierung, habe ich den Zustand getan, aber ich habe noch nie getan 762 00:30:45,530 --> 00:30:47,030 jede Art von Inkrementierung. 763 00:30:47,030 --> 00:30:48,780 Also, wie kann ich tun, die Inkrementierung? 764 00:30:48,780 --> 00:30:51,170 Nun, in einer while-Schleife, fühlt es sich wie ich zu haben bin 765 00:30:51,170 --> 00:30:54,180 um es im Inneren der Schleife zu tun, denn ähnlich wie die erste 766 00:30:54,180 --> 00:30:56,570 Woche Beispielen zu tun looping Konstrukte, wie bei 767 00:30:56,570 --> 00:30:59,040 die Socken und mit dem Selbst-Zählung, hatten wir zu tun 768 00:30:59,040 --> 00:31:01,550 etwas ganz am Ende, wie gehen Sie zurück auf die nächste Zeile. 769 00:31:01,550 --> 00:31:05,040 Was, wenn ich voran gehen und tun dies i + + hier? 770 00:31:05,040 --> 00:31:06,030 Lassen Sie uns nicht einmal kompilieren dies. 771 00:31:06,030 --> 00:31:06,890 Fang mich schon. 772 00:31:06,890 --> 00:31:09,704 Was ist hier falsch? 773 00:31:09,704 --> 00:31:10,690 PUBLIKUM: [unverständlich]. 774 00:31:10,690 --> 00:31:11,770 >> DAVID J. MALAN: Also ist es definitiv nicht int. 775 00:31:11,770 --> 00:31:13,080 Es ist i. 776 00:31:13,080 --> 00:31:15,110 Und die geschweiften Klammern, wie zuvor, 777 00:31:15,110 --> 00:31:16,800 Einrückung ist nicht genug. 778 00:31:16,800 --> 00:31:18,410 So, jetzt habe ich dieses Konstrukt. 779 00:31:18,410 --> 00:31:21,780 So, während ich weniger als 10 ist, drucken Sie einen Stern, 780 00:31:21,780 --> 00:31:23,220 dann erhöhen i. 781 00:31:23,220 --> 00:31:25,680 Und die Art und Weise eine while-Schleife funktioniert ist, dass, sobald Sie traf die 782 00:31:25,680 --> 00:31:29,630 Ende der Schleife, die in diesem Fall sieht die Leitung 10, 783 00:31:29,630 --> 00:31:32,880 es geht zurück in die Linie 6, an welcher Stelle die 784 00:31:32,880 --> 00:31:34,400 Bedingung wird erneut geprüft werden. 785 00:31:34,400 --> 00:31:37,500 Und wenn ich noch weniger als 10, werden wir tun Linien 8 und 786 00:31:37,500 --> 00:31:41,250 dann 9, dann werden wir treffen 10, und gehen Sie zurück bis 6, wieder und 787 00:31:41,250 --> 00:31:45,580 wieder und wieder und wieder, so lange, wie ich weniger als 10 ist. 788 00:31:45,580 --> 00:31:47,860 So lasst uns wieder laufen hier zu machen. 789 00:31:47,860 --> 00:31:48,940 >> Okay, haben wir zusammengestellt okay. 790 00:31:48,940 --> 00:31:50,300 Lassen Sie mich re-run-Schleife. 791 00:31:50,300 --> 00:31:52,620 Und jetzt scheint es tatsächlich zu funktionieren. 792 00:31:52,620 --> 00:31:55,100 So Vor-und Nachteile hier? 793 00:31:55,100 --> 00:31:58,910 Nun, so weit es ist eigentlich nicht ganz plo - 794 00:31:58,910 --> 00:31:59,420 so cute. 795 00:31:59,420 --> 00:32:01,870 Alles klar, das war ein - ah, das war ein Unfall. 796 00:32:01,870 --> 00:32:05,200 Alles klar, also gehen wir zurück in die for-Schleife. 797 00:32:05,200 --> 00:32:07,530 So for-Schleifen sind nett, weil sie super ausdrückliche sind. 798 00:32:07,530 --> 00:32:09,720 Und obwohl sie ein wenig klobig zu schreiben sind, ist es 799 00:32:09,720 --> 00:32:11,500 sehr mächtig und erlaubt es Ihnen zu tun 800 00:32:11,500 --> 00:32:12,980 mehrere Dinge auf einmal. 801 00:32:12,980 --> 00:32:16,240 While-Schleifen nicht scheinen, um eine riesige Menge an Wert haben nur 802 00:32:16,240 --> 00:32:18,500 noch nicht, weil es sich anfühlt, wir müssen nur mehr Arbeit zu tun. 803 00:32:18,500 --> 00:32:20,670 Wir haben, um die Initialisierung hier aufgestellt, die 804 00:32:20,670 --> 00:32:23,480 Update hier unten, und wir müssen uns daran erinnern, um all das zu tun. 805 00:32:23,480 --> 00:32:26,260 Also werden wir in der Zeit sehen, dass while-Schleifen tatsächlich verleihen 806 00:32:26,260 --> 00:32:29,380 sich nahezu verschiedenen Kontexten unterschiedliche Daten 807 00:32:29,380 --> 00:32:33,900 Strukturen wie Listen und Hash-Tabellen, die Dinge werden wir um 808 00:32:33,900 --> 00:32:34,970 Mitte Semester. 809 00:32:34,970 --> 00:32:37,900 Aber jetzt wissen, dass es diese dritte Art bekannt als do- 810 00:32:37,900 --> 00:32:38,480 while-Schleife. 811 00:32:38,480 --> 00:32:39,540 Und wir haben das kurz gesehen. 812 00:32:39,540 --> 00:32:41,830 Und dies könnte super hilfsbereit mit pset 1. 813 00:32:41,830 --> 00:32:45,570 Jedes Mal, wenn Sie wollen, etwas zu tun, und dann prüfen, ob 814 00:32:45,570 --> 00:32:48,940 der Benutzer zusammen, und wenn sie es nicht tat, es wieder tun, eine do- 815 00:32:48,940 --> 00:32:51,460 while-Schleife eignet sich für diese Art von Logik. 816 00:32:51,460 --> 00:32:55,640 Denn als der Besteller von oben nach unten hier andeutet, 817 00:32:55,640 --> 00:32:57,750 Sie bedeutet wörtlich tun. 818 00:32:57,750 --> 00:32:59,830 Und tun dies immer und immer wieder, was könnte das sein? 819 00:32:59,830 --> 00:33:03,000 Vielleicht bedeutet es ruft GetInt oder GetString und dann 820 00:33:03,000 --> 00:33:05,830 Überprüfen Sie den Wert GetInt oder GetString und dann schreien 821 00:33:05,830 --> 00:33:08,260 an den Benutzer, wenn sie nicht, indem man sie zusammen 822 00:33:08,260 --> 00:33:10,100 wieder und wieder und wieder. 823 00:33:10,100 --> 00:33:11,730 Wo möchten Sie einmal etwas zu tun, 824 00:33:11,730 --> 00:33:13,210 dann prüfen eine Bedingung. 825 00:33:13,210 --> 00:33:14,110 >> Also lasst uns versuchen. 826 00:33:14,110 --> 00:33:17,130 Lassen Sie mich tatsächlich ändern dies nun zu einem do-while-Schleife. 827 00:33:17,130 --> 00:33:18,830 Und ich werde weitermachen und gehen Sie folgendermaßen vor. 828 00:33:18,830 --> 00:33:21,830 So gehen Sie folgendermaßen vor. 829 00:33:21,830 --> 00:33:26,870 Lasst uns int i = GetInt (), aber lassen Sie uns zuerst sagen, der Benutzer 830 00:33:26,870 --> 00:33:27,410 was zu tun ist. 831 00:33:27,410 --> 00:33:29,050 So ein wenig anders diesmal. 832 00:33:29,050 --> 00:33:31,270 "Gib mir ein int". 833 00:33:31,270 --> 00:33:32,910 Also werde ich printf dafür. 834 00:33:32,910 --> 00:33:35,740 Und jetzt werde ich nach unten gehen hier, und ich werde dies tun, 835 00:33:35,740 --> 00:33:41,520 während ich es, sagen wir, mehr als - 836 00:33:41,520 --> 00:33:47,540 Lassen Sie uns sehen, ist i, sagen wir, weniger als 0, oder i 837 00:33:47,540 --> 00:33:48,730 größer als 10 ist. 838 00:33:48,730 --> 00:33:51,810 In anderen Worten, ich möchte eine Zahl von 1 bis 9, nur 839 00:33:51,810 --> 00:33:52,720 willkürlich. 840 00:33:52,720 --> 00:33:55,290 Also bin ich mit einem kombinierten booleschen Ausdruck hier 841 00:33:55,290 --> 00:33:59,930 sicherstellen, dass i kleiner als 0 oder größer als 10 ist, in dem 842 00:33:59,930 --> 00:34:02,530 Fall werde ich diese Schleife hier wieder tun. 843 00:34:02,530 --> 00:34:04,400 Also noch einmal, dies zu tun - 844 00:34:04,400 --> 00:34:08,480 solange i kleiner als 0 oder i größer als 10 ist. 845 00:34:08,480 --> 00:34:11,440 >> So, jetzt lass uns weitermachen und tun dies, wenn wir das getan haben. 846 00:34:11,440 --> 00:34:13,270 Lass uns einfach tun, eine schnelle Plausibilitätsprüfung. 847 00:34:13,270 --> 00:34:18,929 printf ("Thanks, i% d", i). 848 00:34:18,929 --> 00:34:21,350 Also das einfache Programm fragt den Benutzer nach einem int, 849 00:34:21,350 --> 00:34:24,000 sorgt dafür, dass es innerhalb eines gewissen Bereich, 1 bis 9, 850 00:34:24,000 --> 00:34:26,280 und dann dankt dem Benutzer durch sie daran erinnern, was sie gerade 851 00:34:26,280 --> 00:34:27,940 eingetippt, nur als kleine Plausibilitätsprüfung. 852 00:34:27,940 --> 00:34:30,659 Aber mal sehen, ob das funktioniert wie vorgesehen. 853 00:34:30,659 --> 00:34:34,533 Lassen Sie mich gehen Kopf runter und wieder zum Laufen zu bringen Schleife. 854 00:34:34,533 --> 00:34:35,350 Hmm. 855 00:34:35,350 --> 00:34:38,600 "Schwarzarbeit Kennung 'i' verwenden". Das ist merkwürdig. 856 00:34:38,600 --> 00:34:41,509 Ich dachte, wir beschlossen, dass. 857 00:34:45,489 --> 00:34:47,560 Gleiche Symptom, aber unterschiedliche Codes. 858 00:34:47,560 --> 00:34:47,899 Yeah? 859 00:34:47,899 --> 00:34:50,191 PUBLIKUM: [unverständlich] innerhalb der beiden, müssen wir 860 00:34:50,191 --> 00:34:52,639 [Unverständlich]. 861 00:34:52,639 --> 00:34:53,260 >> DAVID J. MALAN: Genau. 862 00:34:53,260 --> 00:34:55,989 So dies tatsächlich führt uns zu einem Thema wie Umfang bekannt. 863 00:34:55,989 --> 00:34:59,350 Es stellt sich heraus, dass C wieder, es wirklich braucht man buchstäblich. 864 00:34:59,350 --> 00:35:02,970 Und wenn Sie etwas tun, wo Sie deklarieren int 865 00:35:02,970 --> 00:35:06,120 und ordnen sie dann einen Wert, aber Sie tun, der in einer 866 00:35:06,120 --> 00:35:09,840 Paar von geschweiften Klammern, was C tut, ist es davon ausgegangen, dass 867 00:35:09,840 --> 00:35:14,800 wollen nur die 32 Bit bekannt als i existieren, um innerhalb der 868 00:35:14,800 --> 00:35:18,200 Rahmen dieser geschweiften Klammern, die im Rahmen von Linien 869 00:35:18,200 --> 00:35:22,420 6 bis 9. So i erklärt wird, und es wird eine zugewiesene 870 00:35:22,420 --> 00:35:26,530 Wert in Zeile 8, aber sobald man außerhalb zu bekommen 871 00:35:26,530 --> 00:35:30,270 Linie 9 unterhalb der geschweiften Klammer ist i nicht mehr in 872 00:35:30,270 --> 00:35:31,910 Umfang, so zu sprechen. 873 00:35:31,910 --> 00:35:35,030 S-C-O-P-E. Es ist nicht mehr im richtigen Kontext. 874 00:35:35,030 --> 00:35:37,940 So, jetzt gibt es kein i, so ist es, als ob wir noch nicht einmal 875 00:35:37,940 --> 00:35:38,770 erklärt es überhaupt nicht. 876 00:35:38,770 --> 00:35:41,520 >> Also, was ist ein Update dann für so etwas, wenn die 877 00:35:41,520 --> 00:35:44,300 Grund ist, dass ich innerhalb der geschweiften Klammern deklariert ist, die 878 00:35:44,300 --> 00:35:45,120 ist offenbar schlecht? 879 00:35:45,120 --> 00:35:45,410 Hier? 880 00:35:45,410 --> 00:35:46,820 PUBLIKUM: [unverständlich]. 881 00:35:46,820 --> 00:35:47,150 DAVID J. MALAN: Yeah. 882 00:35:47,150 --> 00:35:48,710 So können wir initialisieren außen. 883 00:35:48,710 --> 00:35:53,530 Also lass mich gehen Sie vor und löschen Sie die Erklärung Teilen, wobei 884 00:35:53,530 --> 00:35:55,820 I die Art und lass es mich tun hier oben. 885 00:35:55,820 --> 00:36:00,220 So in Zeile 5, heißt es nun: "Gib mir einen int." Nennen Sie es i. 886 00:36:00,220 --> 00:36:03,400 Beachten Sie in Zeile 9, Ich will nicht, dies zu tun, weil ich 887 00:36:03,400 --> 00:36:04,830 bereits die 32 Bit. 888 00:36:04,830 --> 00:36:06,140 Ich will nicht, um den Computer für eine frage 889 00:36:06,140 --> 00:36:07,630 verschiedene 32 Bit. 890 00:36:07,630 --> 00:36:09,850 Ich möchte die gleichen 32 Bit verwenden. 891 00:36:09,850 --> 00:36:13,190 Und jetzt, weil ich in Zeile 5 deklariert ist, ist es immer noch legit 892 00:36:13,190 --> 00:36:16,550 um es in Zeile 11 und Zeile 12 zu verwenden. 893 00:36:16,550 --> 00:36:19,310 >> Also lassen Sie mich versuchen, dies zu kompilieren und zu sehen 894 00:36:19,310 --> 00:36:20,490 wenn Clang stoppt schreien. 895 00:36:20,490 --> 00:36:22,380 machen Schleife. 896 00:36:22,380 --> 00:36:25,470 So, jetzt ist es "implicit declaration of function 897 00:36:25,470 --> 00:36:29,880 'GetInt' ist ungültig in C99. "Was ist das? 898 00:36:29,880 --> 00:36:30,400 Yeah? 899 00:36:30,400 --> 00:36:32,330 PUBLIKUM: [unverständlich]. 900 00:36:32,330 --> 00:36:32,690 DAVID J. MALAN: Yeah. 901 00:36:32,690 --> 00:36:35,520 So, jetzt, dass ich tatsächlich mit GetInt, ist dies nicht etwas, 902 00:36:35,520 --> 00:36:38,190 das kommt einfach mit C. Das kommt von CS50. 903 00:36:38,190 --> 00:36:39,890 Also müssen wir das hier. 904 00:36:39,890 --> 00:36:41,450 Und lassen Sie mich zurück in die Eingabeaufforderung nach unten 905 00:36:41,450 --> 00:36:43,500 hier und wieder zum Laufen zu bringen. 906 00:36:43,500 --> 00:36:44,160 Okay, endlich. 907 00:36:44,160 --> 00:36:46,270 Jetzt haben wir das und das andere Fehler behoben. 908 00:36:46,270 --> 00:36:48,930 Lassen Sie mich jetzt laufen Schleife und sehen was passiert. 909 00:36:48,930 --> 00:36:51,740 "Gib mir ein int." Ich gebe es 11. 910 00:36:51,740 --> 00:36:53,100 Ich gebe es -1. 911 00:36:53,100 --> 00:36:54,470 Ich gebe es foo. 912 00:36:54,470 --> 00:36:56,080 Ich gebe es 5. 913 00:36:56,080 --> 00:36:57,450 Und jetzt ist es tatsächlich funktioniert. 914 00:36:57,450 --> 00:36:59,410 Aber die Aufforderung für einen Grund hier geändert. 915 00:36:59,410 --> 00:37:02,800 Warum hat es zu sagen versuchen eine dieser Zeiten, aber geben Sie mir eine 916 00:37:02,800 --> 00:37:03,920 int Die anderen drei Zeiten? 917 00:37:03,920 --> 00:37:05,500 Warum ist das Verhalten anders? 918 00:37:05,500 --> 00:37:06,980 PUBLIKUM: Gab es einen String zurück. 919 00:37:06,980 --> 00:37:07,830 DAVID J. MALAN: Sorry? 920 00:37:07,830 --> 00:37:08,570 PUBLIKUM: Sie gab ihm einen String. 921 00:37:08,570 --> 00:37:08,990 DAVID J. MALAN: Yeah. 922 00:37:08,990 --> 00:37:11,450 So haben wir es einen String in diesem dritten Versuch, 923 00:37:11,450 --> 00:37:12,490 wenn ich foo getippt. 924 00:37:12,490 --> 00:37:13,200 Foo ist ein String. 925 00:37:13,200 --> 00:37:14,340 Es ist natürlich nicht ein int. 926 00:37:14,340 --> 00:37:17,500 Und die Art und Weise, dass CS50 hat GetInt implementiert ist, dass wir 927 00:37:17,500 --> 00:37:20,330 nicht überprüfen, ob etwas ist kleiner als 0 oder größer als 10 928 00:37:20,330 --> 00:37:22,260 für Sie, denn wie wir im Voraus wissen, welche Art von 929 00:37:22,260 --> 00:37:23,130 int du? 930 00:37:23,130 --> 00:37:25,880 Aber wir können minimal für Sie zu prüfen, haben die Benutzer mindestens 931 00:37:25,880 --> 00:37:26,730 Geben Sie eine ganze Zahl? 932 00:37:26,730 --> 00:37:30,500 Und wenn sie es nicht taten, haben wir beim Anwender schreien, indem Sie "retry" auf 933 00:37:30,500 --> 00:37:31,440 der Bildschirm. 934 00:37:31,440 --> 00:37:34,210 >> So, jetzt haben wir ein Programm, das ist eine Schleife. Okay. 935 00:37:34,210 --> 00:37:37,070 Nun ist das der diese Art von besseren Konstrukt? 936 00:37:37,070 --> 00:37:39,060 Also das ist, wo die Dinge ein wenig chaotisch zu starten, wird die 937 00:37:39,060 --> 00:37:42,360 Tatsache, dass Sie daran denken, eine Variable zu deklarieren hier haben 938 00:37:42,360 --> 00:37:44,630 wenn Sie wollen, um es in einiger verwenden 939 00:37:44,630 --> 00:37:46,460 geschweiften Klammern und außen. 940 00:37:46,460 --> 00:37:48,490 Aber selbst wenn dies sieht ein wenig kryptisch auf den ersten 941 00:37:48,490 --> 00:37:50,750 Blick gerade wieder, erinnere mich an die einfachen Logik. 942 00:37:50,750 --> 00:37:54,630 Um etwas in C zu verwenden, ob sie eine Funktion ist oder 943 00:37:54,630 --> 00:37:57,680 es ist eine Variable, müssen Sie es schließen, wenn es eine Funktion ist 944 00:37:57,680 --> 00:37:59,770 in irgendeiner Bibliothek, oder Sie brauchen, um es zu erklären. 945 00:37:59,770 --> 00:38:02,405 Aber jetzt müssen Sie zusätzliche eingedenk der Tatsache, dass 946 00:38:02,405 --> 00:38:04,940 Sie erklären es im richtigen Rahmen. 947 00:38:04,940 --> 00:38:08,150 Sie sind nicht Putting es zu fest in Klammern. 948 00:38:08,150 --> 00:38:09,410 >> Lassen Sie mich also tatsächlich wieder rollen. 949 00:38:09,410 --> 00:38:12,660 Wenn wir zurück zu unserem beispielsweise von früher, und ich gehe 950 00:38:12,660 --> 00:38:19,245 zurück, um int, int i = 0; i <10; i + +, und ich 951 00:38:19,245 --> 00:38:26,370 do printf Sterne, wie diese, und schließen Sie dann paren, und jetzt 952 00:38:26,370 --> 00:38:30,410 printf i ist jetzt - 953 00:38:30,410 --> 00:38:33,500 nach der gleichen Logik, was wird passieren, wenn ich versuchen 954 00:38:33,500 --> 00:38:35,500 dieses Programm kompilieren? 955 00:38:35,500 --> 00:38:36,790 PUBLIKUM: Invalid Kennung. 956 00:38:36,790 --> 00:38:38,560 DAVID J. MALAN: So es ist eine andere ungültige Kennung, 957 00:38:38,560 --> 00:38:39,470 Schwarzarbeit Kennung. 958 00:38:39,470 --> 00:38:41,810 Nun, das ist der Grund, ein wenig anders. 959 00:38:41,810 --> 00:38:44,370 Es gibt offensichtlich keine geschweiften Klammern hier, aber die gleichen 960 00:38:44,370 --> 00:38:46,790 Idee, gilt die gleiche Geschichte des Anwendungsbereichs. 961 00:38:46,790 --> 00:38:50,340 Wenn Sie eine Variable wie i Innenseite ein erklärtes 962 00:38:50,340 --> 00:38:53,960 for-Schleife, auch wenn Sie nicht explizit die geschweiften geschrieben 963 00:38:53,960 --> 00:38:56,980 Hosenträger, der sie geistig denken, wie immer dort zu sein, in denen 964 00:38:56,980 --> 00:39:00,310 Fall i ist nur gültig innerhalb der for-Schleife. 965 00:39:00,310 --> 00:39:03,080 Es ist nicht gültig, wenn Sie in die nächste Zeile, erhalten die in 966 00:39:03,080 --> 00:39:05,090 In diesem Fall ist jetzt 10. 967 00:39:05,090 --> 00:39:09,060 Also einfach ein paar Fragen der Reichweite und dergleichen. 968 00:39:09,060 --> 00:39:12,620 Alles klar, noch Fragen? 969 00:39:12,620 --> 00:39:15,310 >> Alles klar, so ist dies eine Art trivial kleines Programm, 970 00:39:15,310 --> 00:39:17,450 Drucken gerade kleine Sterne. 971 00:39:17,450 --> 00:39:20,400 Aber mal sehen, ob du dieses Lied hier zu erinnern. 972 00:39:20,400 --> 00:39:22,530 Dies ist ein unglaublich ärgerlich Lied, das die Kinder auf zu singen würde 973 00:39:22,530 --> 00:39:23,550 der Schulbus und dergleichen. 974 00:39:23,550 --> 00:39:25,990 Aber was ist schön daran ist, dass es auf diese Zyklizität hat, 975 00:39:25,990 --> 00:39:27,910 wobei es "99 Flaschen Bier an der Wand, 976 00:39:27,910 --> 00:39:28,520 99 Flaschen Bier. 977 00:39:28,520 --> 00:39:31,030 Nehmen Sie eine unten, Pass It Around, 98 Flaschen Bier an der 978 00:39:31,030 --> 00:39:34,330 Wand. "Und dann das Lied wiederholt die 97, dann 96, dann 979 00:39:34,330 --> 00:39:38,040 95, dann 94, den ganzen Weg hinunter auf 0, wenn du eigentlich, dass 980 00:39:38,040 --> 00:39:38,920 weit auf dem Bus. 981 00:39:38,920 --> 00:39:41,960 Also das ist ein nettes Programm, von Gerät zu sortieren, weil meine 982 00:39:41,960 --> 00:39:43,650 Gott, wenn du könntest einfach implementieren diese mit ein paar 983 00:39:43,650 --> 00:39:46,660 Zeilen Code, können Sie spuckte den gesamten Texte zu diesem 984 00:39:46,660 --> 00:39:48,240 Song recht schnell. 985 00:39:48,240 --> 00:39:50,420 Aber auf dem Weg, können wir beginnen jetzt zu necken neben einigen 986 00:39:50,420 --> 00:39:52,460 dieser grundlegenden looping Konstrukte und jetzt auch 987 00:39:52,460 --> 00:39:55,830 Einführung Funktionen, die wir selbst zu schreiben, Werte zurückgeben 988 00:39:55,830 --> 00:39:57,020 dass wir umfahren. 989 00:39:57,020 --> 00:39:58,910 Aber zuerst, warum wir nicht voran gehen und nehmen unsere Fünf-Minuten- 990 00:39:58,910 --> 00:39:59,320 brechen hier? 991 00:39:59,320 --> 00:40:01,480 Und wenn wir zurück sind, werden wir dieses Lied singen. 992 00:40:05,680 --> 00:40:08,760 >> Alles klar, also sind wir zurück. 993 00:40:08,760 --> 00:40:11,850 Und wenn ich sage wir jetzt dieses Lied singen, ich meine, 994 00:40:11,850 --> 00:40:13,250 programmatisch, nicht verbal. 995 00:40:13,250 --> 00:40:19,370 Also hier haben wir beer1.c, die eine Implementierung ist 996 00:40:19,370 --> 00:40:20,580 bestimmtes Lied. 997 00:40:20,580 --> 00:40:23,110 Und nur klar zu sein, für diejenigen, die nicht vertraut mit dem, was 998 00:40:23,110 --> 00:40:24,460 dieses Ding aussieht, lassen Sie mich gehen Sie vor 999 00:40:24,460 --> 00:40:27,070 und machen beer1, Enter. 1000 00:40:27,070 --> 00:40:30,400 Nun lassen Sie mich laufen beer1, und was wir sehen - wie viele Flaschen 1001 00:40:30,400 --> 00:40:31,140 Bier wird es geben? 1002 00:40:31,140 --> 00:40:33,240 Ich werde in 99 geben, wie das Lied sagt. 1003 00:40:33,240 --> 00:40:34,040 Enter. 1004 00:40:34,040 --> 00:40:35,650 Und wenn wir jetzt blättern - 1005 00:40:35,650 --> 00:40:38,280 oops - wenn wir durch all dies zu blättern, werden wir sehen, dass 1006 00:40:38,280 --> 00:40:41,350 Diese Tat singen das ganze Lied. 1007 00:40:44,050 --> 00:40:44,540 Warten Sie eine Minute. 1008 00:40:44,540 --> 00:40:46,240 Meine Bildlaufleiste ist ein wenig durcheinander. 1009 00:40:46,240 --> 00:40:47,940 Lassen Sie uns die größeren Fenster. 1010 00:40:47,940 --> 00:40:53,500 So beer1, 99, es geht los. 1011 00:40:53,500 --> 00:40:56,420 Also hier haben wir den ganzen Song, viel schneller durch die gesungen 1012 00:40:56,420 --> 00:40:58,450 Computer als könnte es von uns gewesen. 1013 00:40:58,450 --> 00:41:00,340 So bemerken, aber die zyklische Natur hier. 1014 00:41:00,340 --> 00:41:03,380 Er sagt, 99, dann 99, dann "nehmen Sie eine unten, geben sie 1015 00:41:03,380 --> 00:41:04,740 herum ", dann 98. 1016 00:41:04,740 --> 00:41:06,640 Und jetzt ist es wiederholt immer und immer wieder. 1017 00:41:06,640 --> 00:41:08,840 >> Also das ist eigentlich eine perfekte Gelegenheit für eine Art von 1018 00:41:08,840 --> 00:41:10,400 Looping konstruieren. 1019 00:41:10,400 --> 00:41:12,950 Beachten Sie, dass ich irgendwie Schneiden einer Ecke hier bin. 1020 00:41:12,950 --> 00:41:15,960 Beachten Sie, dass ich sage "98 Flaschen Bier an der Wand, 1021 00:41:15,960 --> 00:41:19,010 97 Flaschen Bier an der Wand, "und das war nur so 1022 00:41:19,010 --> 00:41:21,640 dass, wenn wir ein Flaschen Bier zu bekommen, habe ich nicht 1023 00:41:21,640 --> 00:41:23,300 über die englische Grammatik zu kümmern. 1024 00:41:23,300 --> 00:41:25,790 Aber wir können auch dieses Problem beheben mit ein wenig einer if 1025 00:41:25,790 --> 00:41:26,910 Zustand, vielleicht. 1026 00:41:26,910 --> 00:41:30,110 Wenn diese Zahl ist einzigartig, voran gehen und sagen, "flasche", 1027 00:41:30,110 --> 00:41:31,840 ansonsten, wenn es plural ist, sagen Sie "Flaschen". 1028 00:41:31,840 --> 00:41:34,150 Aber jetzt bin ich völlig schneiden diese Ecke. 1029 00:41:34,150 --> 00:41:35,520 Also lasst uns sehen, was wir hier haben. 1030 00:41:35,520 --> 00:41:37,150 Also haben wir einige Kommentare an der Spitze. 1031 00:41:37,150 --> 00:41:39,450 Ich bin auch diese beiden Bibliotheken, wie 1032 00:41:39,450 --> 00:41:41,140 Wir haben allgemein gewesen. 1033 00:41:41,140 --> 00:41:43,610 Und jetzt lassen Sie mich unten scrollen, um die erste 1034 00:41:43,610 --> 00:41:44,990 Ist Codezeilen. 1035 00:41:44,990 --> 00:41:47,020 Zeile 17 startet main. 1036 00:41:47,020 --> 00:41:50,610 Linie 21 und 20 hat, wie viele Flaschen Bier wird es geben? 1037 00:41:50,610 --> 00:41:52,060 Und dann rufe ich GetInt. 1038 00:41:52,060 --> 00:41:53,800 Und jetzt habe ich ein bisschen eine Plausibilitätsprüfung. 1039 00:41:53,800 --> 00:41:57,030 >> Also das ist eine Konvention, dass wir jetzt beginnen die Annahme zu 1040 00:41:57,030 --> 00:41:59,620 strenger überprüfen die Eingaben des Benutzers. 1041 00:41:59,620 --> 00:42:01,710 Manchmal muss man einfach nicht wollen, um sie wieder aufgefordert 1042 00:42:01,710 --> 00:42:02,630 und immer wieder. 1043 00:42:02,630 --> 00:42:05,620 Wenn der Benutzer Schrauben und nicht kooperieren, in Ordnung. 1044 00:42:05,620 --> 00:42:07,430 Beenden und einfach nicht mit ihnen umzugehen. 1045 00:42:07,430 --> 00:42:08,990 Und damit ist das, was ich hier tue. 1046 00:42:08,990 --> 00:42:12,520 Wenn n kleiner als 1 ist, bin ich gerade dabei, beim Anwender schreien, 1047 00:42:12,520 --> 00:42:14,330 "Sorry, das macht keinen Sinn." Und dann bin ich zu gehen 1048 00:42:14,330 --> 00:42:16,650 beliebig 1 zurück. 1049 00:42:16,650 --> 00:42:18,550 Also noch einmal, dies ist nur eine Konvention zu gewöhnen. 1050 00:42:18,550 --> 00:42:19,850 Denn jetzt, nehmen Sie es auf den Glauben. 1051 00:42:19,850 --> 00:42:22,700 Aber bis jetzt haben wir immer wieder 0, da 1052 00:42:22,700 --> 00:42:25,204 wir gesagt haben wieder 0 bedeutet was? 1053 00:42:25,204 --> 00:42:26,000 PUBLIKUM: Erfolg. 1054 00:42:26,000 --> 00:42:27,320 DAVID J. MALAN: Erfolg, das ist alles. 1055 00:42:27,320 --> 00:42:29,740 So, jetzt haben wir endlich beginnen zu denken 1056 00:42:29,740 --> 00:42:31,330 Nicht-Erfolge - 1057 00:42:31,330 --> 00:42:33,760 mit anderen Worten, Grenzfälle, Fehlerbedingungen - 1058 00:42:33,760 --> 00:42:37,520 jetzt habe ich eine unendliche Versorgung, oder zumindest vier Milliarden 1059 00:42:37,520 --> 00:42:39,790 möglichen Dinge, die schief gehen können in meinen Programmen. 1060 00:42:39,790 --> 00:42:42,300 Und ich kann beginnen Zuordnung zu einzelnen Nummern. 1061 00:42:42,300 --> 00:42:44,340 Nun, in der Regel genügt es, einfach zurück 1062 00:42:44,340 --> 00:42:45,730 etwas anderes als 0 ist. 1063 00:42:45,730 --> 00:42:48,040 So werden wir einfach zurück 1 für jetzt. 1064 00:42:48,040 --> 00:42:51,440 Aber der Grund für die Rückkehr 1 ist, dass, sobald Sie wieder 1065 00:42:51,440 --> 00:42:55,110 1, erraten, was passiert mit dem Rest des Programms? 1066 00:42:55,110 --> 00:42:55,720 Es stoppt. 1067 00:42:55,720 --> 00:42:56,560 Das war's. 1068 00:42:56,560 --> 00:42:59,150 So ist die Tatsache, dass ich wieder 1 ist effektiv 1069 00:42:59,150 --> 00:43:02,950 Kurzschließen dieses Programms Ausführung, so dass 1070 00:43:02,950 --> 00:43:06,780 nichts unterhalb der Linie 27 wird weiter ausgeführt. 1071 00:43:06,780 --> 00:43:09,210 Sobald Haupt zurück, das ist es. 1072 00:43:09,210 --> 00:43:13,160 >> Alles klar, also wenn der Benutzer nicht kooperieren und wir erreichen line 30 1073 00:43:13,160 --> 00:43:15,680 weil sie in einem legitimen Zahl eingegeben haben, hier ist meine 1074 00:43:15,680 --> 00:43:16,990 Umsetzung dieses Lied. 1075 00:43:16,990 --> 00:43:19,050 Also habe ich zuerst gedruckt einen Zeilenumbruch, nur für 1076 00:43:19,050 --> 00:43:19,880 Ästhetik. 1077 00:43:19,880 --> 00:43:21,500 Ich habe jetzt eine for-Schleife. 1078 00:43:21,500 --> 00:43:22,930 Und ich merke, mache die Dinge in einem etwas 1079 00:43:22,930 --> 00:43:23,880 von einer anderen Richtung. 1080 00:43:23,880 --> 00:43:26,210 Ich habe nicht weniger als zu tun, habe ich nicht zu + + zu tun. 1081 00:43:26,210 --> 00:43:30,660 Ich kann stattdessen sagen initialisieren eine Variable i, setzen Sie sie auf 1082 00:43:30,660 --> 00:43:35,080 n, die Anzahl der Benutzer eingegeben wird, gehen Sie wie folgt, so 1083 00:43:35,080 --> 00:43:39,590 solange i größer als 0 ist, dann habe ich - 1084 00:43:39,590 --> 00:43:42,070 sobald Sie eine Iteration dieser Schleife beendet. 1085 00:43:42,070 --> 00:43:44,310 So können wir Countdown mit einer for-Schleife als gut. 1086 00:43:44,310 --> 00:43:47,520 Nun, dies ist so ziemlich Wochen ein Zeug jetzt mit printf. 1087 00:43:47,520 --> 00:43:51,770 So print "% d Flaschen Bier an der Wand." Print "% d 1088 00:43:51,770 --> 00:43:54,990 Flaschen Bier. "" Nehmen Sie ein unten, geben sie herum. "Print 1089 00:43:54,990 --> 00:43:58,880 "% D Flaschen Bier an der Wand." So ist es immer noch% d, aber 1090 00:43:58,880 --> 00:44:02,770 feststellen, dass das Argument für printf ist im Wandel. 1091 00:44:02,770 --> 00:44:05,840 Nach dem Komma, ich habe ich, weil ich bis 99 sagen wollen. 1092 00:44:05,840 --> 00:44:08,590 Nach diesem Komma, habe ich i, weil ich 99 sagen wollen. 1093 00:44:08,590 --> 00:44:14,030 Nach diesem Komma, habe ich i - 1, weil ich 98 in sagen wollen 1094 00:44:14,030 --> 00:44:16,260 diese erste Iteration, und so weiter. 1095 00:44:16,260 --> 00:44:18,520 Und jetzt hier unten, ich habe nur einige kleine dumme Bemerkung. 1096 00:44:18,520 --> 00:44:22,270 Und dann die Linie 42, zurück I 0 durch Konvention, was bedeutet, dass 1097 00:44:22,270 --> 00:44:23,650 alles ist okay. 1098 00:44:23,650 --> 00:44:24,490 >> So was, wenn ich vermasselt? 1099 00:44:24,490 --> 00:44:26,350 Was könnte ein häufiger Fehler hier zu sein? 1100 00:44:26,350 --> 00:44:29,200 Nun, was ist, wenn ich sagte versehentlich gut, will ich zu zählen 1101 00:44:29,200 --> 00:44:31,640 auf 0, ich will 0 Flaschen Bier an der Wand? 1102 00:44:31,640 --> 00:44:34,620 Also sage ich, i größer oder gleich 0 ist. 1103 00:44:34,620 --> 00:44:38,920 Was wird das Symptom, dass ich jetzt sehen, ob ich neu kompilieren zu sein 1104 00:44:38,920 --> 00:44:41,173 beer1 und führen Sie es? 1105 00:44:41,173 --> 00:44:42,120 PUBLIKUM: Negativ. 1106 00:44:42,120 --> 00:44:43,590 DAVID J. MALAN: Ja, es ist gonna go negativ. 1107 00:44:43,590 --> 00:44:45,950 Dies ist ein Off-by-one-Fehler, ein unglaublich 1108 00:44:45,950 --> 00:44:47,270 häufiger Fehler zu machen. 1109 00:44:47,270 --> 00:44:48,960 Lasst uns tatsächlich zurück zum Terminal-Fenster und tun es 1110 00:44:48,960 --> 00:44:50,620 Hier, so können wir mehr in einer Zeit zu sehen. 1111 00:44:50,620 --> 00:44:53,280 Geben, 99 Flaschen Bier. 1112 00:44:53,280 --> 00:44:56,580 Schließen, aber wir gingen immer so leicht zu weit. 1113 00:44:56,580 --> 00:45:00,500 Wir sangen das Lied zu weit nach unten, so dass wir jetzt noch den 1114 00:45:00,500 --> 00:45:01,510 negative Zahl ist. 1115 00:45:01,510 --> 00:45:03,680 So ist es nicht ganz geklappt. 1116 00:45:03,680 --> 00:45:06,450 >> Alle Rechte, so können wir leicht beheben, dass durch den Rückgriff auf die 1117 00:45:06,450 --> 00:45:07,650 wie es einmal war. 1118 00:45:07,650 --> 00:45:10,360 Aber was sind einige Möglichkeiten nun für 1119 00:45:10,360 --> 00:45:11,190 Verbesserung? 1120 00:45:11,190 --> 00:45:17,200 Nun, lassen Sie mich offen beer2.c und scrollen Sie hier und nehmen Sie eine 1121 00:45:17,200 --> 00:45:19,310 Blick auf diese Version. 1122 00:45:19,310 --> 00:45:21,370 Was ist das erste, was ins Auge springt dich an, als verschiedene 1123 00:45:21,370 --> 00:45:23,715 in dieser Version hier? 1124 00:45:23,715 --> 00:45:24,190 PUBLIKUM: [unverständlich]. 1125 00:45:24,190 --> 00:45:26,510 DAVID J. MALAN: Yeah, so nicht mehr i, weil es sich um 1126 00:45:26,510 --> 00:45:29,350 mir wissen Sie was, ich frage den Benutzer n, und dann bin ich 1127 00:45:29,350 --> 00:45:33,580 Setzen i gleich n, und dann bin ich ändern i, aber ich bin nie 1128 00:45:33,580 --> 00:45:34,590 Berühren n wieder. 1129 00:45:34,590 --> 00:45:37,390 Also, was zum Teufel war der Punkt von Ihnen Zuteilung weitere 32 1130 00:45:37,390 --> 00:45:45,210 Bits als ich gerade so, dass ich eine andere Variable haben? 1131 00:45:45,210 --> 00:45:47,960 Also in diesem Fall, ich irgendwie erkannt, dass unnötige 1132 00:45:47,960 --> 00:45:49,190 Design-Merkmal. 1133 00:45:49,190 --> 00:45:52,730 Und ich gehe jetzt zu sagen, während n größer als 0 ist, gehen 1134 00:45:52,730 --> 00:45:56,180 vor und drucken Sie das gleiche Lied, indem ein n printf die 1135 00:45:56,180 --> 00:46:00,210 zweite Argument, n - 1 als zweites Argument hier unten. 1136 00:46:00,210 --> 00:46:02,930 Und dann bei jeder Iteration dieser Schleife vor und gehen Sie einfach 1137 00:46:02,930 --> 00:46:05,080 dekrementieren n sich. 1138 00:46:05,080 --> 00:46:06,960 Jetzt, funktional, dieses Programm 1139 00:46:06,960 --> 00:46:08,010 wird identisch sein. 1140 00:46:08,010 --> 00:46:10,730 Wenn ich in 99 geben, startet n bei 99. 1141 00:46:10,730 --> 00:46:12,890 Ich Dekrement, Dekrement, Dekrement, Dekrement. 1142 00:46:12,890 --> 00:46:15,875 Ich werde den ganzen Weg runter auf "Eine Flasche Bier auf 1143 00:46:15,875 --> 00:46:16,740 die Wand, eine Flasche Bier. 1144 00:46:16,740 --> 00:46:18,020 Nehmen Sie eine unten, geben sie herum. 1145 00:46:18,020 --> 00:46:21,480 0 Flaschen Bier an der Wand. "Das Ende, denn ich habe 1146 00:46:21,480 --> 00:46:23,200 erhalten die Bedingung richtig. 1147 00:46:23,200 --> 00:46:24,280 Es ist größer als 0. 1148 00:46:24,280 --> 00:46:26,220 Ich habe diesen Fehler nicht machen. 1149 00:46:26,220 --> 00:46:28,470 >> Also, was ist besser, Version ein oder Version zwei? 1150 00:46:31,380 --> 00:46:33,480 So hörte ich einen Haufen Murren für zwei Personen. 1151 00:46:33,480 --> 00:46:34,730 Warum zwei? 1152 00:46:37,210 --> 00:46:38,225 Was ist das? 1153 00:46:38,225 --> 00:46:39,215 PUBLIKUM: [unverständlich]. 1154 00:46:39,215 --> 00:46:40,070 DAVID J. MALAN: Oh, okay. 1155 00:46:40,070 --> 00:46:42,870 So wird es nicht unter 0 gehen, aber denken Sie daran, in der Version ein, die 1156 00:46:42,870 --> 00:46:45,870 Original richtige Version nicht unter 0 entweder gehen. 1157 00:46:45,870 --> 00:46:48,340 Also denken Sie daran, dass dies die richtige Version ist. 1158 00:46:48,340 --> 00:46:51,630 Also lassen Sie es mindestens vergleichen die beiden richtigen Versionen. 1159 00:46:51,630 --> 00:46:53,300 Was ist ein Argument zugunsten der Version 1160 00:46:53,300 --> 00:46:55,146 zwei davon, mmm, besser? 1161 00:46:55,146 --> 00:46:55,642 Yeah? 1162 00:46:55,642 --> 00:46:57,630 Zielgruppe: IT benötigt weniger Platz. 1163 00:46:57,630 --> 00:46:59,530 DAVID J. MALAN: Okay, so dass es weniger Platz, nicht wahr? 1164 00:46:59,530 --> 00:47:02,900 Während Version ein verwendet 32 ​​Bits für n, und dann noch 1165 00:47:02,900 --> 00:47:07,680 32 Bit für i. 1166 00:47:07,680 --> 00:47:10,060 Version zwei verwendet nur 32 Bits für n, so dass 1167 00:47:10,060 --> 00:47:11,700 scheint ein Plus. 1168 00:47:11,700 --> 00:47:12,950 Andere Gedanken? 1169 00:47:18,070 --> 00:47:21,520 Möchte jemand zu Gunsten der man argumentieren? 1170 00:47:21,520 --> 00:47:22,070 Yeah? 1171 00:47:22,070 --> 00:47:25,240 PUBLIKUM: Sie müssen zusätzliche Zeile Code für n verwenden -. 1172 00:47:25,240 --> 00:47:26,090 >> DAVID J. MALAN: Okay, sicher. 1173 00:47:26,090 --> 00:47:26,960 Also das ist fair. 1174 00:47:26,960 --> 00:47:29,040 So dies nur, zumindest für mich - 1175 00:47:29,040 --> 00:47:31,940 Ich meine, das fühlt sich tatsächlich ein wenig chaotischer, die Tatsache, dass 1176 00:47:31,940 --> 00:47:35,120 Ich kann mir nicht kapseln alle meine Logik sortieren in einem 1177 00:47:35,120 --> 00:47:38,030 schöne Linie, die for-Schleife, wie die for-Schleife können. 1178 00:47:38,030 --> 00:47:40,240 Hier, ich Art zum Wenden auf dieser n - 1179 00:47:40,240 --> 00:47:41,120 am Ende der Schleife, weil 1180 00:47:41,120 --> 00:47:42,550 Es ist logisch notwendig. 1181 00:47:42,550 --> 00:47:45,190 Aber es ist irgendwie reibt mich in die falsche Richtung, nur weil es 1182 00:47:45,190 --> 00:47:48,260 scheint unabhängig von der Logik der hier oben, obwohl 1183 00:47:48,260 --> 00:47:49,430 wieder, es ist notwendig. 1184 00:47:49,430 --> 00:47:50,990 Andere Gedanken? 1185 00:47:50,990 --> 00:47:51,490 Yeah? 1186 00:47:51,490 --> 00:47:52,740 PUBLIKUM: [unverständlich]. 1187 00:47:57,990 --> 00:47:58,350 >> DAVID J. MALAN: Yeah. 1188 00:47:58,350 --> 00:48:00,730 So was, wenn Sie stattdessen am Ende des Liedes, wollte 1189 00:48:00,730 --> 00:48:02,950 drucken Sie wieder den Namen des Songs? 1190 00:48:02,950 --> 00:48:05,660 Wie "Danke fürs Mitspielen 99 Flaschen Bier", oder etwas 1191 00:48:05,660 --> 00:48:06,690 dumme wie das? 1192 00:48:06,690 --> 00:48:09,750 Aber der Punkt ist, du wolltest Zugriff auf den ursprünglichen Wert. 1193 00:48:09,750 --> 00:48:13,180 Die Tatsache, dass Sie mutiert oder n verändert auf jeder 1194 00:48:13,180 --> 00:48:16,330 Iteration und haben daher ihren ursprünglichen Wert vernichtet 1195 00:48:16,330 --> 00:48:18,650 bedeutet, dass Sie einfach nicht tun, dass am Ende. 1196 00:48:18,650 --> 00:48:20,660 Nun wohl, wir eindeutig nicht wollen 1197 00:48:20,660 --> 00:48:21,450 daß in diesem Programm. 1198 00:48:21,450 --> 00:48:22,350 So who cares? 1199 00:48:22,350 --> 00:48:23,630 Aber das ist ein sehr wichtigen Punkt. 1200 00:48:23,630 --> 00:48:25,520 Und um ehrlich zu sein, es gibt wirklich keine ein 1201 00:48:25,520 --> 00:48:26,630 Recht hier zu beantworten. 1202 00:48:26,630 --> 00:48:28,740 Sie sind beide gleich richtig. 1203 00:48:28,740 --> 00:48:30,210 Ich könnte so oder so überzeugt sein. 1204 00:48:30,210 --> 00:48:33,310 Ich werde sagen, dass im Allgemeinen, es ist ein gutes Prinzip ist, wenn Sie 1205 00:48:33,310 --> 00:48:36,030 fragte der Benutzer für einen gewissen Wert und Sie in einer Variable gespeichert 1206 00:48:36,030 --> 00:48:38,730 wie n, einfach irgendwie im Prinzip, ist es wahrscheinlich eine gute 1207 00:48:38,730 --> 00:48:40,160 zu, dass etwa halten. 1208 00:48:40,160 --> 00:48:43,400 Und alle Daten, die Sie immer und immer wieder mutieren, nur 1209 00:48:43,400 --> 00:48:46,030 geben Sie sich eine Kopie dieser Variablen, nur so, dass Sie 1210 00:48:46,030 --> 00:48:47,830 Zugriff auf das Original. 1211 00:48:47,830 --> 00:48:51,040 Sie verbringen 32 weitere Bits, aber die Realität ist dies 1212 00:48:51,040 --> 00:48:53,490 Computer, wie, zwei Gigabyte RAM in diesen Tagen, 1213 00:48:53,490 --> 00:48:55,310 und wir sind mehr als 32 Bits Wortklauberei? 1214 00:48:55,310 --> 00:48:56,320 Wirklich nicht so eine große Sache. 1215 00:48:56,320 --> 00:48:58,550 Und auch auf diesem Gerät hier, mit einem halben Gig oder ein 1216 00:48:58,550 --> 00:49:01,700 Gigabyte RAM, 32-Bit im Vergleich zu 64 Bits, 1217 00:49:01,700 --> 00:49:02,920 nicht so eine große Sache. 1218 00:49:02,920 --> 00:49:05,890 Noch heute, es geht um den Weg von der Größe überwältigt 1219 00:49:05,890 --> 00:49:08,400 des Programms selbst, die sein würde mehrere hundert 1220 00:49:08,400 --> 00:49:10,890 Kilobyte, wenn nicht ein paar Megabyte, in diesen Tagen. 1221 00:49:10,890 --> 00:49:13,550 >> So vernünftigen Bedenken, keine richtige Antwort. 1222 00:49:13,550 --> 00:49:15,490 Aber zumindest das sind die Gedanken, die beginnen, sollten 1223 00:49:15,490 --> 00:49:16,790 gehen Ihnen durch den Kopf? 1224 00:49:16,790 --> 00:49:19,600 Denn in pset 0, obwohl wir eigentlich nur zu erwarten 1225 00:49:19,600 --> 00:49:22,340 Korrektheit, oder zumindest Ablehnung diverse Bugs, dass 1226 00:49:22,340 --> 00:49:25,440 Sie könnten auftreten, haben, wie wir vorankommen, ist Design 1227 00:49:25,440 --> 00:49:27,910 werde ein weiterer wichtiger Aspekt sein, sowohl das Schreiben von Code 1228 00:49:27,910 --> 00:49:29,770 und auch unsere Auswertung Code. 1229 00:49:29,770 --> 00:49:32,310 Und so zumindest Gedanken machen, Dinge wie diese. 1230 00:49:32,310 --> 00:49:35,590 Und nur weil etwas funktioniert, bedeutet nicht, es ist gut, 1231 00:49:35,590 --> 00:49:37,130 bedeutet nicht, es ist gut entwickelt. 1232 00:49:37,130 --> 00:49:38,820 Und das ist eines der Dinge, die Lehre Stipendiaten und 1233 00:49:38,820 --> 00:49:41,990 Übungsaufgaben helfen uns zu necken Teil im Laufe der Zeit. 1234 00:49:41,990 --> 00:49:45,020 >> Nun, was ist, sagen wir, diese Version hier? 1235 00:49:45,020 --> 00:49:49,090 Lassen Sie mich etwas tun, ein wenig sexy hier in einem Augenblick. 1236 00:49:49,090 --> 00:49:50,740 Lassen Sie mich zunächst loszuwerden dies. 1237 00:49:50,740 --> 00:49:54,120 Und nun dieses Problem beheben grammatische Frage. 1238 00:49:54,120 --> 00:49:58,780 So in dieser Version möchte ich die Grammatik zu fixieren, so dass 1239 00:49:58,780 --> 00:50:02,460 anstatt nur sagen, Klammern s, wie "Flasche" 1240 00:50:02,460 --> 00:50:03,360 oder "Flaschen" - 1241 00:50:03,360 --> 00:50:04,900 Ich will nicht, dass Ecken abgeschnitten - 1242 00:50:04,900 --> 00:50:08,350 Ich möchte auch dynamisch auszudrucken das Wort "Flaschen" 1243 00:50:08,350 --> 00:50:12,820 oder "Flasche", so Mit diesen% s Platzhalter heute. 1244 00:50:12,820 --> 00:50:16,550 Also muss ich bedingt überprüfen, was ist der Wert von i. 1245 00:50:16,550 --> 00:50:19,590 Und wenn es 1 ist, möchte ich "Flasche" sagen, und wenn es etwas 1246 00:50:19,590 --> 00:50:23,115 anderes, ich will "Flaschen" zu sagen. So wollen wir versuchen, dies zu tun. 1247 00:50:23,115 --> 00:50:31,340 Also, wenn i == 1, dann lassen Sie mich gehen Sie vor und erklären - 1248 00:50:31,340 --> 00:50:34,080 Ich brauche einen String, so lass es mich tun String s1, weil es die 1249 00:50:34,080 --> 00:50:36,070 erste String Ich kümmere mich jetzt. 1250 00:50:36,070 --> 00:50:40,980 Ich werde "Flasche" sagen. Und dann wollen wir mal sehen, string 1251 00:50:40,980 --> 00:50:43,110 s2 - und ich werde erklären, wo ich in einem Moment gehe - 1252 00:50:43,110 --> 00:50:47,650 "Flaschen." So erinnern, dass in diesem Lied haben wir in der Lage sein müssen 1253 00:50:47,650 --> 00:50:50,580 Dinge, zwei verschiedene Wörter potenziell drucken. 1254 00:50:50,580 --> 00:50:53,590 Also, wenn wir wieder hier schauen, bemerken, dass, wenn wir um 1255 00:50:53,590 --> 00:50:56,440 Dieses Beispiel hier ", zwei Flaschen Bier an der Wand, 1256 00:50:56,440 --> 00:50:59,490 zwei Flaschen Bier, nehmen Sie eine unten, Pass It Around ", ich will 1257 00:50:59,490 --> 00:51:02,380 Diese vierte Zeile, jetzt zu sagen "eine Flasche Bier auf die 1258 00:51:02,380 --> 00:51:04,900 Wand ". Also habe ich zu entscheiden brauchen, möchte ich sagen:" Flaschen "oder 1259 00:51:04,900 --> 00:51:07,780 "Flasche"? Also werde ich willkürlich sagen, alles in Ordnung, 1260 00:51:07,780 --> 00:51:10,530 Ich werde jetzt eine Variable namens s1, string 1261 00:51:10,530 --> 00:51:13,830 ein, das geht eingesteckt hier und auch hier zu bekommen, 1262 00:51:13,830 --> 00:51:16,070 , weil diese Worte sind immer gleich, nur weil der 1263 00:51:16,070 --> 00:51:17,290 Natur des Songs. 1264 00:51:17,290 --> 00:51:20,100 Und ich werde zu nennen s2, was Wort ich will 1265 00:51:20,100 --> 00:51:21,560 schließlich erscheinen hier unten. 1266 00:51:21,560 --> 00:51:25,530 Jetzt, buchstäblich, 99 von 100, es geht um das zu sein 1267 00:51:25,530 --> 00:51:28,820 gleichen in diesen beiden Fällen, denn 3 ist Plural, 2 1268 00:51:28,820 --> 00:51:30,200 Plural, ist 4 Plural. 1269 00:51:30,200 --> 00:51:34,640 Aber in dieser Ecke Fall, wo wir auf 2 und dann 1 oder 1270 00:51:34,640 --> 00:51:37,250 sogar 1 und dann 0, ich brauche diese Logik. 1271 00:51:37,250 --> 00:51:41,020 So habe ich einige Zeit in meinem Code immer dieses Recht zu verbringen. 1272 00:51:41,020 --> 00:51:47,530 Also, wenn ich das tue, wenn i == 1, dann s1 gleich "flasche" 1273 00:51:47,530 --> 00:51:52,010 und s2 gleich "Flaschen", weil dies für 1 sein 1274 00:51:52,010 --> 00:51:56,340 Flasche, und dies wird für 0 Flaschen. 1275 00:51:56,340 --> 00:51:58,250 Und das hier, was soll das darstellen? 1276 00:51:58,250 --> 00:51:59,780 Nur um klar sein. 1277 00:51:59,780 --> 00:52:00,620 Dies ist nur ein Kommentar. 1278 00:52:00,620 --> 00:52:03,730 So ist die Tatsache, dass man einzeilige Kommentare haben bedeutet, dass Sie 1279 00:52:03,730 --> 00:52:06,110 kann Ihr Code wie folgt kommentieren, aber eine weitere gemeinsame 1280 00:52:06,110 --> 00:52:09,050 Paradigma ist auch, dass, wenn Sie einen super-kurzen Satz, dass 1281 00:52:09,050 --> 00:52:11,410 Sie wollen sich selbst gestellt und es ist einfach besser lesbar zu setzen 1282 00:52:11,410 --> 00:52:13,270 es richtig am Ende der Zeile Code, können Sie 1283 00:52:13,270 --> 00:52:15,230 absolut etwas tun. 1284 00:52:15,230 --> 00:52:20,150 >> Und was jetzt, wenn ich das tun? Else if i ist nicht gleich 1 ist. 1285 00:52:20,150 --> 00:52:21,620 So Paukenschlag gleich - 1286 00:52:21,620 --> 00:52:23,150 Ausrufezeichen wird als "bang" bekannt. 1287 00:52:23,150 --> 00:52:25,080 So Knall = 1. 1288 00:52:25,080 --> 00:52:28,530 Also, wenn ich nicht gleich 1 ist, was ich stattdessen tun wollen? 1289 00:52:28,530 --> 00:52:31,700 Nun, das erste Wort will ich was? 1290 00:52:34,620 --> 00:52:40,030 So String 1 sollte "Flaschen" für mehrere Flaschen sein, 1291 00:52:40,030 --> 00:52:42,440 und dann wird das Plural "Flaschen" als gut, denn jetzt. 1292 00:52:42,440 --> 00:52:43,800 Und wir werden sehen, ob dies tatsächlich bringt uns zu 1293 00:52:43,800 --> 00:52:44,870 wohin wir gehen wollen. 1294 00:52:44,870 --> 00:52:47,680 So wenn ich nun hier unten scrollen, bemerken, dass ich in dem Einstecken 1295 00:52:47,680 --> 00:52:50,170 nicht nur ich, sondern s1. 1296 00:52:50,170 --> 00:52:51,860 Ich bin in i und s1 Einstecken. 1297 00:52:51,860 --> 00:52:54,440 Und dann hier unten, ich bin minus 1, welches das gleiche wie 1298 00:52:54,440 --> 00:52:55,920 vorher, aber s2. 1299 00:52:55,920 --> 00:52:58,730 In anderen Worten, ich möchte das englische Wort, basierend ändern 1300 00:52:58,730 --> 00:52:59,930 auf dieser Logik. 1301 00:52:59,930 --> 00:53:03,310 Nun, es ist schon einige Probleme in diesem Code. 1302 00:53:03,310 --> 00:53:08,460 Was ist schon aus dem Tor durchbrochen hier? 1303 00:53:08,460 --> 00:53:10,796 Yeah? 1304 00:53:10,796 --> 00:53:13,210 PUBLIKUM: [unverständlich]. 1305 00:53:13,210 --> 00:53:13,800 >> DAVID J. MALAN: Genau. 1306 00:53:13,800 --> 00:53:16,030 So habe ich schon verletzt die Lektion des Anwendungsbereichs. 1307 00:53:16,030 --> 00:53:19,610 Also habe ich erklärt, S1 und S2, aber ich habe es innerhalb von getan 1308 00:53:19,610 --> 00:53:22,980 geschweiften Klammern, was bedeutet, yeah, dieser Code funktioniert bis 1309 00:53:22,980 --> 00:53:27,430 bis Zeile 42, aber sobald ich die Leitung 43 getroffen, erraten, was nicht 1310 00:53:27,430 --> 00:53:28,900 mehr existiert? 1311 00:53:28,900 --> 00:53:32,600 Nun, ich denke, was nicht mehr in diesem Bereich - weder S1 oder S2. 1312 00:53:32,600 --> 00:53:33,780 Also müssen wir dieses Problem beheben. 1313 00:53:33,780 --> 00:53:36,180 Also lassen Sie mich löschen Erklärungen. 1314 00:53:36,180 --> 00:53:39,320 Und ich lasse die Variablennamen und löschen diese hier 1315 00:53:39,320 --> 00:53:40,120 und löschen Sie diese hier ein. 1316 00:53:40,120 --> 00:53:43,557 Und in welchem ​​Leitungen sollte ich wirklich erklären, diese Dinge? 1317 00:53:43,557 --> 00:53:44,960 PUBLIKUM: [unverständlich]. 1318 00:53:44,960 --> 00:53:45,410 DAVID J. MALAN: Yeah, also wahrscheinlich 1319 00:53:45,410 --> 00:53:46,850 hier oben, 33-ish. 1320 00:53:46,850 --> 00:53:50,670 So String s1 und dann String s2. 1321 00:53:50,670 --> 00:53:51,950 Und es stellt sich heraus, kann ich dies tun. 1322 00:53:51,950 --> 00:53:54,260 Wenn Sie deklarieren zwei Variablen des gleichen Typs, 1323 00:53:54,260 --> 00:53:57,420 Sie können eigentlich nur ein Komma und das tun in C. Alle 1324 00:53:57,420 --> 00:53:58,970 rechts, so jetzt habe ich zwei Variablen - 1325 00:53:58,970 --> 00:53:59,860 S1 und S2. 1326 00:53:59,860 --> 00:54:02,000 Ich Zuweisung ihnen Werte in diesen 1327 00:54:02,000 --> 00:54:04,210 Bedingungen hier oder hier. 1328 00:54:04,210 --> 00:54:06,690 Und dann bin ich mit ihnen unten. 1329 00:54:06,690 --> 00:54:10,960 Wie gut ist das jetzt zur Arbeit gehen? 1330 00:54:10,960 --> 00:54:12,740 >> Nun, es ist immer noch ein wenig buggy, aber wir wenigstens sehen 1331 00:54:12,740 --> 00:54:13,730 wie weit wir gekommen. 1332 00:54:13,730 --> 00:54:16,500 Also lassen Sie mich voran gehen und beer3. 1333 00:54:16,500 --> 00:54:17,695 Ist das beer3? 1334 00:54:17,695 --> 00:54:19,410 Yep, das ist beer3. 1335 00:54:19,410 --> 00:54:21,510 Und jetzt lassen Sie mich gehen Sie vor und führen Sie beer3. 1336 00:54:21,510 --> 00:54:23,820 399 99. 1337 00:54:23,820 --> 00:54:25,840 Wir können wahrscheinlich überspringen meisten von ihnen. 1338 00:54:25,840 --> 00:54:29,100 Und hier unten, schau dir das an. 1339 00:54:29,100 --> 00:54:31,110 "Eine Flasche Bier an der Wand, eine Flasche Bier, nehmen 1340 00:54:31,110 --> 00:54:34,306 ein nach unten, Pass It Around, 0 Flaschen Bier an der Wand. " 1341 00:54:34,306 --> 00:54:37,570 Aber ich Ihre Aufmerksamkeit auf nur die Hälfte der Lösung. 1342 00:54:37,570 --> 00:54:39,620 Art von hier oben geschraubt. 1343 00:54:39,620 --> 00:54:43,030 So scheint es, dass die Ecke Fällen, wenn i gleich ergeben, was 1344 00:54:43,030 --> 00:54:44,030 zwei Werte? 1345 00:54:44,030 --> 00:54:45,020 PUBLIKUM: 2, 1. 1346 00:54:45,020 --> 00:54:46,190 DAVID J. MALAN: 2 und 1 liegt. 1347 00:54:46,190 --> 00:54:48,180 Es ist nicht 1 und nicht 1. 1348 00:54:48,180 --> 00:54:51,890 Es ist wirklich nur die letzten beiden Strophen dieses Liedes. 1349 00:54:51,890 --> 00:54:53,890 Also, was kann ich statt möchten Sie tun? 1350 00:54:53,890 --> 00:54:58,890 So scheine ich fing den Fall gewesen, wo, wenn i == 1 ist, 1351 00:54:58,890 --> 00:55:02,240 dann das erste Wort ist "flasche", aber das zweite Wort 1352 00:55:02,240 --> 00:55:07,230 ist "Flaschen". Aber hier, ich möchte dies ändern, um == 2 sein. 1353 00:55:07,230 --> 00:55:08,570 Und wenn dies der Fall ist, was ich will die 1354 00:55:08,570 --> 00:55:09,620 erste Wort sein? 1355 00:55:09,620 --> 00:55:10,430 Publikum: "Bottles". 1356 00:55:10,430 --> 00:55:12,890 DAVID J. MALAN: "Bottles", so für zwei Flaschen. 1357 00:55:12,890 --> 00:55:14,690 Und dann dieses Wort hier sein sollte - 1358 00:55:14,690 --> 00:55:15,340 Publikum: "Bottle". 1359 00:55:15,340 --> 00:55:17,316 DAVID J. MALAN: "Bottle", Singular. 1360 00:55:20,430 --> 00:55:25,160 >> Alles klar, lasst uns zu verkleinern, gehen Sie zurück hierher, re-make ausführe, 1361 00:55:25,160 --> 00:55:28,590 re-run beer3, Typ 99 wieder. 1362 00:55:28,590 --> 00:55:30,710 Okay, "Segmentation fault (core dumped)." 1363 00:55:30,710 --> 00:55:32,780 Was habe ich falsch gemacht? 1364 00:55:36,050 --> 00:55:38,722 PUBLIKUM: Sie haben noch einen Wert [unverständlich]. 1365 00:55:38,722 --> 00:55:40,480 DAVID J. MALAN: Ah, ausgezeichneter Ausgangspunkt. 1366 00:55:40,480 --> 00:55:43,310 Alles klar, so was ist hier falsch? 1367 00:55:43,310 --> 00:55:45,450 So Segmentation Fault, und wir sind eigentlich los, um zu sehen 1368 00:55:45,450 --> 00:55:49,020 dies schon ein paar Mal in der Zukunft bewusst. 1369 00:55:49,020 --> 00:55:51,030 Aber jetzt, was bedeutet das eigentlich? 1370 00:55:51,030 --> 00:55:53,620 Eine Segmentation Fault fast immer bedeutet, dass Sie 1371 00:55:53,620 --> 00:55:56,760 irgendwie versucht, Speicher, RAM in Ihrem Computer zuzugreifen, 1372 00:55:56,760 --> 00:56:00,600 dass Sie nicht selbst, dass Sie nicht wirklich fragte der 1373 00:56:00,600 --> 00:56:02,050 Betriebssystem für. 1374 00:56:02,050 --> 00:56:04,440 Also in diesem Fall, bemerken, was ich getan habe, das ist 1375 00:56:04,440 --> 00:56:05,870 fehlerhaft in meiner Logik. 1376 00:56:05,870 --> 00:56:09,500 Ich habe S1 und S2 ein Wert zugewiesen, wenn i gleich 1 ist. 1377 00:56:09,500 --> 00:56:11,590 Ich habe auch getan, wenn ich 2 gleich. 1378 00:56:11,590 --> 00:56:13,710 Aber ich habe es nicht in der unendlichen Reihe von anderen getan 1379 00:56:13,710 --> 00:56:14,690 Möglichkeiten - 1380 00:56:14,690 --> 00:56:17,940 insbesondere 3 oder 4 oder Punkt, Punkt, Punkt, 99. 1381 00:56:17,940 --> 00:56:20,100 So ein Update für dieses konnte nur lasst uns 1382 00:56:20,100 --> 00:56:22,190 haben einen anderen Zustand. 1383 00:56:22,190 --> 00:56:26,780 Und lassen Sie mich hier hingehen und sagen s1 entspricht - 1384 00:56:26,780 --> 00:56:28,180 was sollte es hier sein? 1385 00:56:28,180 --> 00:56:28,750 PUBLIKUM: [unverständlich]. 1386 00:56:28,750 --> 00:56:30,460 >> DAVID J. MALAN: "Bottles", denn in den üblichen Fall, 1387 00:56:30,460 --> 00:56:32,020 es ist nur die gleiche Sache. 1388 00:56:32,020 --> 00:56:35,580 So entspricht Zitat unquote "Flaschen." So für mehrere 1389 00:56:35,580 --> 00:56:41,010 Flaschen und dann hier für mehrere Flaschen. 1390 00:56:41,010 --> 00:56:44,580 Okay, jetzt lassen Sie mich zurück zu meinem Terminal-Fenster, 1391 00:56:44,580 --> 00:56:47,200 recompile, re-starten Sie es. 1392 00:56:47,200 --> 00:56:48,440 99. 1393 00:56:48,440 --> 00:56:49,150 Puh. 1394 00:56:49,150 --> 00:56:50,610 Und lassen Sie uns tun, eine schnelle Plausibilitätsprüfung. 1395 00:56:50,610 --> 00:56:52,400 Technisch wären wir wollen alle diese zu lesen, um sicherzustellen, dass 1396 00:56:52,400 --> 00:56:53,370 sie sind richtig, aber wir betrachten 1397 00:56:53,370 --> 00:56:54,640 zumindest die bekannten Täter. 1398 00:56:54,640 --> 00:56:57,370 3 Flaschen, 2 Flaschen, 2 Flaschen, 1 1399 00:56:57,370 --> 00:57:00,380 Flasche, 1 Flasche, 0 Flaschen. 1400 00:57:00,380 --> 00:57:03,080 Wir scheinen zumindest behoben haben es für jetzt. 1401 00:57:03,080 --> 00:57:06,010 Aber der Haken dabei ist, dass das, was ein Gott schreckliches Durcheinander ist 1402 00:57:06,010 --> 00:57:07,470 nur zu lösen eine dumme 1403 00:57:07,470 --> 00:57:09,540 ein Zeichen grammatische Details. 1404 00:57:09,540 --> 00:57:11,150 Es gibt also eine Art Grund, dass ich geschnitten diese Ecke 1405 00:57:11,150 --> 00:57:14,090 früher, weil es einfach völlig nervig müssen 1406 00:57:14,090 --> 00:57:15,020 schreibe diesen viel Code. 1407 00:57:15,020 --> 00:57:17,530 Aber es stellt sich heraus, dass es etwas eleganter Wege 1408 00:57:17,530 --> 00:57:20,110 Ausdruck der genau dasselbe. 1409 00:57:20,110 --> 00:57:22,040 Und wir können dies wie folgt tun. 1410 00:57:22,040 --> 00:57:23,890 >> Lassen Sie mich lassen Sie dieses auf dem Bildschirm für einen Moment und 1411 00:57:23,890 --> 00:57:27,320 einzuführen etwas bekannt als ternäre Operator. 1412 00:57:27,320 --> 00:57:29,600 Dies ist eine Art One-Liner, der meinte nur ist, um unsere 1413 00:57:29,600 --> 00:57:31,880 lebt ein wenig sexier, wie versprochen. 1414 00:57:31,880 --> 00:57:33,130 Und ich werde tun dies wie folgt. 1415 00:57:33,130 --> 00:57:35,810 Gib mir einen String namens s1, und lassen Sie mich 1416 00:57:35,810 --> 00:57:37,200 zuweisen wie folgt. 1417 00:57:37,200 --> 00:57:39,900 (I == 1)? 1418 00:57:39,900 --> 00:57:47,820 "Flasche", ansonsten "Flaschen". String s2 erhält (i == 2)? 1419 00:57:47,820 --> 00:57:52,670 "Flasche", ansonsten "Flaschen". 1420 00:57:52,670 --> 00:57:57,050 Also, was ist dann der Unterschied? 1421 00:57:57,050 --> 00:57:59,370 Diese beiden Zeilen Code, argumentiere ich, kann 1422 00:57:59,370 --> 00:58:02,200 ersetzen Sie diesen ganzen Schlamassel. 1423 00:58:02,200 --> 00:58:04,280 So nenne ich es ein Chaos, nur weil es eine Art reibt mir die 1424 00:58:04,280 --> 00:58:05,940 falsche Weg, dass es so viele Zeilen Code ist. 1425 00:58:05,940 --> 00:58:06,650 Nicht falsch. 1426 00:58:06,650 --> 00:58:07,700 Es ist nicht schlechtes Design. 1427 00:58:07,700 --> 00:58:10,140 Möchten, ist dies vollkommen richtig und völlig in Ordnung. 1428 00:58:10,140 --> 00:58:12,970 Aber Codierung erhält langweilig, wenn du dich so auszudrücken 1429 00:58:12,970 --> 00:58:15,530 verdammt gezielt wieder und wieder und wieder mit einer einfachen 1430 00:58:15,530 --> 00:58:16,620 Szenario wie diesem. 1431 00:58:16,620 --> 00:58:19,470 So C hat einige Shortcuts, wie diese. 1432 00:58:19,470 --> 00:58:24,270 So dies im Wesentlichen sagt erklären, einen String namens s1 und 1433 00:58:24,270 --> 00:58:32,610 weisen sie entweder diesen Wert oder der Wert, wenn i == ist - 1434 00:58:32,610 --> 00:58:35,290 sorry, sollte ich dies deutlicher zu sagen. 1435 00:58:35,290 --> 00:58:41,680 Deklarieren Sie eine Variable s1, weisen Sie diesen Wert, wenn das wahr ist. 1436 00:58:41,680 --> 00:58:44,280 Ansonsten weisen Sie diesen Wert. 1437 00:58:44,280 --> 00:58:47,220 Also mit anderen Worten, ist diese Art von einer einzeiligen Weg 1438 00:58:47,220 --> 00:58:51,490 sagen, wenn sonst aber dabei eine Zuordnung auf dem Weg. 1439 00:58:51,490 --> 00:58:55,540 Also, wenn i 1 ist, dann gehen Sie vor und nennen das "Flasche". Und 1440 00:58:55,540 --> 00:58:59,830 dann ist dies anders, nennen es "Flaschen". Unterdessen, s2, das 1441 00:58:59,830 --> 00:59:04,060 zweite Wort, dass wir definieren müssen, wenn i gleich 2 ist, schreiben wir 1442 00:59:04,060 --> 00:59:08,350 S2 auf "Flasche". Andernfalls setzen Sie ihn auf "Flaschen". Und was 1443 00:59:08,350 --> 00:59:11,460 Das bedeutet jetzt ist, kann ich durch diese gehen und löschen Sie alle 1444 00:59:11,460 --> 00:59:12,860 diese Zeilen Code. 1445 00:59:12,860 --> 00:59:17,220 Und wenn ich sage, etwas lächerlich, dass dies jetzt 1446 00:59:17,220 --> 00:59:20,060 sexier, es ist sexier in der Art von Stilgefühl. 1447 00:59:20,060 --> 00:59:22,660 Die Tatsache, dass funktionell, dieser Code tatsächlich zu 1448 00:59:22,660 --> 00:59:24,610 tun genau dasselbe. 1449 00:59:24,610 --> 00:59:26,890 Und auch wenn es vielleicht ein wenig kryptisch auf den ersten Blick 1450 00:59:26,890 --> 00:59:29,250 Blick, denn wir haben nicht dieses Konstrukt gesehen, würde ich 1451 00:59:29,250 --> 00:59:31,850 argumentieren, dass es letztendlich würde so viel mehr sein 1452 00:59:31,850 --> 00:59:34,820 lesbar und so viel einfacher für uns Menschen zu sortieren der 1453 00:59:34,820 --> 00:59:36,830 zu verstehen, denn jetzt kann man einfach lesen Sie die 1454 00:59:36,830 --> 00:59:38,830 Code alle auf einer Linie. 1455 00:59:38,830 --> 00:59:41,550 Es ist immer noch im Geiste ein, wenn, wo dieser ist die 1456 00:59:41,550 --> 00:59:44,920 Zustand und dann ist was drin ist der, wenn, und dies 1457 00:59:44,920 --> 00:59:46,480 ist, was im Inneren des anderen. 1458 00:59:46,480 --> 00:59:49,450 Aber wir können dies nur wesentlich eleganter machen. 1459 00:59:49,450 --> 00:59:52,650 >> Und wenn ich jetzt zurück zu meinem Terminal, nachdem alle gelöschten 1460 00:59:52,650 --> 00:59:55,530 dieser Zeilen und ersetzte sie mit nur diesen beiden, 1461 00:59:55,530 --> 01:00:00,150 recompile, re-run Flaschen Bier mit 99, Ankündigung, dass mein 1462 01:00:00,150 --> 01:00:03,350 Grammatik ist in der Tat noch richtig. 1463 01:00:03,350 --> 01:00:06,160 Also noch einmal, etwas zu beginnen. 1464 01:00:06,160 --> 01:00:08,840 2 Flaschen Bier, 1 Flasche Bier. 1465 01:00:08,840 --> 01:00:09,370 Sieht richtig. 1466 01:00:09,370 --> 01:00:10,100 Yeah. 1467 01:00:10,100 --> 01:00:13,900 So, da haben wir eine viel prägnante Lösung. 1468 01:00:13,900 --> 01:00:16,020 So auch dieses, wie Sie sich wohler mit C, nicht 1469 01:00:16,020 --> 01:00:18,630 unbedingt mit dem ersten pset oder sogar Sekunden, aber 1470 01:00:18,630 --> 01:00:21,170 erkennen, dass diese Konstrukte können uns erlauben, die Dinge jemals tun 1471 01:00:21,170 --> 01:00:22,810 mehr elegant. 1472 01:00:22,810 --> 01:00:25,200 Jetzt machen wir eine andere Sache hier. 1473 01:00:25,200 --> 01:00:31,460 Lassen Sie mich gehen Sie vor und eröffnen return1.c. 1474 01:00:31,460 --> 01:00:34,340 Jetzt beginnen wir ein anderes Problem in einer Weise, dass zu lösen 1475 01:00:34,340 --> 01:00:37,140 ermöglicht es uns, komplexere Code zu schreiben. 1476 01:00:37,140 --> 01:00:39,960 >> Also hier ist ein einfaches kleines Programm, dessen Zweck im Leben 1477 01:00:39,960 --> 01:00:41,870 ist, um Werte zu inkrementieren. 1478 01:00:41,870 --> 01:00:43,100 Und tatsächlich, lassen Sie uns einen Schritt zurück. 1479 01:00:43,100 --> 01:00:44,400 Lassen Sie mich dies manuell tun. 1480 01:00:44,400 --> 01:00:52,200 Lass es mich tun sind und int main (void). 1481 01:00:52,200 --> 01:00:53,450 Und lassen Sie mich nennen diese increment.c. 1482 01:00:57,150 --> 01:00:58,570 Und was will ich tun? 1483 01:00:58,570 --> 01:01:02,240 Ich werde weitermachen und so etwas sagen wie - 1484 01:01:02,240 --> 01:01:04,280 nennen wir die Zahlen gleich - 1485 01:01:04,280 --> 01:01:04,980 int x. 1486 01:01:04,980 --> 01:01:13,670 So int x erhält 2; printf x ist% d, neue Zeile, x. 1487 01:01:13,670 --> 01:01:16,780 Also ich tippe schnell, aber irgendwie vertraute Dinge jetzt. 1488 01:01:16,780 --> 01:01:18,830 Dann werde ich x + + zu tun. 1489 01:01:18,830 --> 01:01:21,710 Dann werde ich die gleiche Satz noch einmal zu drucken. 1490 01:01:21,710 --> 01:01:24,550 Und dann werde ich auf 0 zurück, nur um das Programm zu beenden. 1491 01:01:24,550 --> 01:01:25,960 Alles klar, so ist dies ein Programm, das 1492 01:01:25,960 --> 01:01:26,960 Inkremente eine Zahl ist. 1493 01:01:26,960 --> 01:01:29,830 Es ist zuerst zu etwas zu 2 zu initialisieren, und dann ist es 1494 01:01:29,830 --> 01:01:33,470 werde es erhöhen und erneut ausdrucken. 1495 01:01:33,470 --> 01:01:36,930 >> So lasst uns laufen Inkrement, unglaublich einfaches Programm. 1496 01:01:36,930 --> 01:01:40,940 Aber jetzt nehme an, dass ich cube den Wert wollen, dies zu tun 1497 01:01:40,940 --> 01:01:42,490 etwas willkürlich. 1498 01:01:42,490 --> 01:01:45,140 Und ich wirklich tun möchte, x erhält den Würfel von ihm. 1499 01:01:45,140 --> 01:01:47,570 So konnte ich nutzen, was die pow-Funktion aufgerufen, aber ich weiß nicht 1500 01:01:47,570 --> 01:01:48,650 wirklich wissen, wo das ist leer. 1501 01:01:48,650 --> 01:01:50,580 Also werde ich dies zu tun auf die altmodische Art und Weise. 1502 01:01:50,580 --> 01:01:54,550 x mal dies entspricht x mal x mal x. 1503 01:01:54,550 --> 01:01:56,880 Also ich bin Cubing den Wert, multipliziert sie von selbst wieder 1504 01:01:56,880 --> 01:02:00,440 und wieder und wieder, so dass wir die Macht 1505 01:02:00,440 --> 01:02:02,050 von 3 in diesem Fall. 1506 01:02:02,050 --> 01:02:06,000 So, jetzt die Zahlen, die ich drucken soll sein sollte, wie wir sehen, 1507 01:02:06,000 --> 01:02:08,450 hier - machen Schrittweite, so ist es eigentlich nicht wirklich erhöhen 1508 01:02:08,450 --> 01:02:10,260 mehr, aber wir werden den Namen allein zu lassen - 1509 01:02:10,260 --> 01:02:11,590 2 und dann 8. 1510 01:02:11,590 --> 01:02:17,670 Jetzt haben wir die Anfänge der Möglichkeit zur Verfeinerung 1511 01:02:17,670 --> 01:02:21,570 Hier, wobei diese Cubing Ding Multiplizieren eines Anzahl 1512 01:02:21,570 --> 01:02:24,680 selbst für sich selbst fühlt, wie diese könnte nur sein, 1513 01:02:24,680 --> 01:02:27,920 nützlich als eine Funktion haben, so wie jemand beschlossen 1514 01:02:27,920 --> 01:02:30,430 Jahren - Sie wissen, eine Art nützlich, wenn einer von uns setzt sich 1515 01:02:30,430 --> 01:02:33,120 und schreibt printf so daß der Rest der Welt benutzt werden kann, 1516 01:02:33,120 --> 01:02:36,160 warum gehen wir nicht hinsetzen und schreiben eine Funktion namens cube 1517 01:02:36,160 --> 01:02:39,250 das tut dieses Cubing für uns, so dass wir nicht mehr manuell 1518 01:02:39,250 --> 01:02:41,500 Umsetzung der Begriff der Cubing Werte hier? 1519 01:02:41,500 --> 01:02:44,040 >> So ein einfaches Beispiel, aber wir gehen Sie vor und nutzen dies als 1520 01:02:44,040 --> 01:02:46,280 Gelegenheit, unsere eigene Funktion zu schreiben. 1521 01:02:46,280 --> 01:02:49,110 So bisher haben wir nur die wichtigsten, verwendet und die wir verwendet haben andere 1522 01:02:49,110 --> 01:02:51,780 Menschen funktioniert, aber wir haben nicht unsere eigene geschrieben. 1523 01:02:51,780 --> 01:02:52,650 So here we go. 1524 01:02:52,650 --> 01:02:56,330 Ich werde weitermachen und schreibe eine Funktion namens cube. 1525 01:02:56,330 --> 01:02:58,490 Und ich bin zu haben, dauert eine Eingabe. 1526 01:02:58,490 --> 01:03:02,070 So seine Eingabe wird ein Integer sein. 1527 01:03:02,070 --> 01:03:03,570 Und wie ist es jetzt tun? 1528 01:03:03,570 --> 01:03:08,500 Es wird int Ausgang erklären = Eingang eingegebene Zeit 1529 01:03:08,500 --> 01:03:09,880 Mal-Eingang. 1530 01:03:09,880 --> 01:03:12,190 Und dann geht es los, um diesen Ausgang zurück. 1531 01:03:12,190 --> 01:03:14,500 Und dann habe ich um genau zu sein jetzt. 1532 01:03:14,500 --> 01:03:16,820 Diese Funktion wird einen int zurück. 1533 01:03:16,820 --> 01:03:19,130 Also hier ist dann, wie würden Sie Ihre eigenen Funktionen schreiben. 1534 01:03:19,130 --> 01:03:20,850 Sie zunächst entscheiden, was ist der Name Ihres 1535 01:03:20,850 --> 01:03:21,720 Funktion sein wird. 1536 01:03:21,720 --> 01:03:23,964 Und im Allgemeinen, ist etwas erläuternden gut, also werde ich 1537 01:03:23,964 --> 01:03:25,060 nennen es Würfels. 1538 01:03:25,060 --> 01:03:27,180 Dann müssen Sie angeben, was es wird zurückkehren, ist das, was 1539 01:03:27,180 --> 01:03:28,240 sein Ausgang sein wird. 1540 01:03:28,240 --> 01:03:29,595 Und wir haben nicht so viele Möglichkeiten noch. 1541 01:03:29,595 --> 01:03:32,260 Int, char, float, bool, string. 1542 01:03:32,260 --> 01:03:34,260 Denn jetzt, ich werde mit einem int bleiben, weil ich es will 1543 01:03:34,260 --> 01:03:35,880 um eine ganze Zahl zurück. 1544 01:03:35,880 --> 01:03:38,770 Dann müssen Sie angeben, welche ihre Eingaben, wenn überhaupt, sind. 1545 01:03:38,770 --> 01:03:41,570 Und wenn cube ein Argument nimmt etwas zwischen 1546 01:03:41,570 --> 01:03:44,970 Klammern, haben Sie zu geben, dass Argument einen Namen, so dass 1547 01:03:44,970 --> 01:03:47,860 Sie nennen es etwas, wie Sie durchführen oder Sie schreiben 1548 01:03:47,860 --> 01:03:50,550 diese Funktion, und Sie haben, um ihm eine Art, die in diesem 1549 01:03:50,550 --> 01:03:51,810 Fall sein wird int. 1550 01:03:51,810 --> 01:03:54,690 Also kurz gesagt, ist cube eine Funktion, die einen Integer übernimmt 1551 01:03:54,690 --> 01:03:57,560 als Eingabe und gibt eine ganze Zahl als Ausgabe. 1552 01:03:57,560 --> 01:03:59,240 >> Also, was bedeutet es mit diesem Eingang zu tun? 1553 01:03:59,240 --> 01:04:03,710 Nun, in Zeile 14, erkläre ich eine Variable namens Ausgang, und ich 1554 01:04:03,710 --> 01:04:07,410 weisen Sie ihm den Wert, Eingang eingegebene Zeit mal Eingang. 1555 01:04:07,410 --> 01:04:11,490 Und dann habe ich wieder ausgegeben. 1556 01:04:11,490 --> 01:04:14,890 So wie verwende ich das dann? 1557 01:04:14,890 --> 01:04:19,210 Was muss ich ändern, diese markierten Zeichen on line 1558 01:04:19,210 --> 01:04:21,006 7 zu werden, denken Sie? 1559 01:04:21,006 --> 01:04:21,800 PUBLIKUM: [unverständlich]. 1560 01:04:21,800 --> 01:04:25,570 DAVID J. MALAN: Yeah, so Würfel x. 1561 01:04:25,570 --> 01:04:28,290 So x eine Variable ist, die es hält einige Wert bedeutet. 1562 01:04:28,290 --> 01:04:30,190 Glücklicherweise ist es vom Typ integer. 1563 01:04:30,190 --> 01:04:34,280 Und weil x ist ein int, das heißt, ich kann es, in Würfel weitergeben. 1564 01:04:34,280 --> 01:04:39,500 Und obwohl ich das Überschreiben der Wert von x mit dem Wert 1565 01:04:39,500 --> 01:04:42,780 von cube x, als der Fall gewesen bisher, jedes Mal, wenn 1566 01:04:42,780 --> 01:04:46,150 haben die gleichen Zeichen und eine Zeile Code, das Zeug auf der rechten Seite 1567 01:04:46,150 --> 01:04:49,090 ausgeführt und dann wird die zugeordnete 1568 01:04:49,090 --> 01:04:50,150 Wert links. 1569 01:04:50,150 --> 01:04:52,950 So die Reihenfolge der Operationen ist, wie wir hoffen. 1570 01:04:52,950 --> 01:04:56,620 So funktioniert das? 1571 01:04:56,620 --> 01:04:58,410 Nun, lassen Sie mich gehen hier unten. 1572 01:04:58,410 --> 01:04:59,970 Lassen Sie mich öffne meine Terminal-Fenster. 1573 01:04:59,970 --> 01:05:03,610 Lassen Sie mich wissen Inkrement zu machen, die Eingabetaste. 1574 01:05:03,610 --> 01:05:07,140 "Implizite Deklaration der Funktion 'cube' ist ungültig 1575 01:05:07,140 --> 01:05:13,700 C99. "Nebenbei bezieht C99 auf die Sprache C, wie es war 1576 01:05:13,700 --> 01:05:16,790 definiert im Jahr 1999 war das ein Update über die Version von 1577 01:05:16,790 --> 01:05:19,360 1989, ein Update über die ursprüngliche ist. 1578 01:05:19,360 --> 01:05:21,740 So das ist alles das bedeutet. 1579 01:05:21,740 --> 01:05:24,250 >> Also, was bedeutet es, dass "implizite Deklaration der 1580 01:05:24,250 --> 01:05:26,790 Funktion 'Cube' ist ungültig? "Es ist hier genau richtig. 1581 01:05:26,790 --> 01:05:28,430 Es ist richtig, es in Zeile 12. 1582 01:05:28,430 --> 01:05:30,460 PUBLIKUM: [unverständlich]. 1583 01:05:30,460 --> 01:05:30,730 DAVID J. MALAN: Was ist das? 1584 01:05:30,730 --> 01:05:32,470 PUBLIKUM: Es ist nicht vor. 1585 01:05:32,470 --> 01:05:33,540 DAVID J. MALAN: Es ist nicht vor. 1586 01:05:33,540 --> 01:05:34,740 Also das ist die Sache. 1587 01:05:34,740 --> 01:05:38,190 C ist eine Art von dumm, oder C-Compiler sind irgendwie dumm. 1588 01:05:38,190 --> 01:05:41,060 Sie haben wirklich nur tun, was man von ihnen erzählen. 1589 01:05:41,060 --> 01:05:44,770 Und sie insbesondere nur lesen den Code von oben nach unten, 1590 01:05:44,770 --> 01:05:45,620 links nach rechts. 1591 01:05:45,620 --> 01:05:49,140 Also, wenn der Compiler, Clang, liest den Code, Linie 1, es 1592 01:05:49,140 --> 01:05:50,120 heraus, wie dies zu tun. 1593 01:05:50,120 --> 01:05:50,940 Oh, hier kommt main. 1594 01:05:50,940 --> 01:05:53,000 Okay, lass mich gehen Sie vor und deklarieren Sie eine Variable x. 1595 01:05:53,000 --> 01:05:54,160 Lassen Sie mich etwas ausdrucken. 1596 01:05:54,160 --> 01:05:55,890 Line 7, was zum Teufel ist cube? 1597 01:05:55,890 --> 01:05:58,230 Es ist nicht in stdio.h deklariert. 1598 01:05:58,230 --> 01:06:00,950 Es funktioniert nicht mit C. komme ich habe keine Ahnung, was zu tun ist. 1599 01:06:00,950 --> 01:06:03,960 Und so Clang nur bails und beendet mit dieser Fehlermeldung. 1600 01:06:03,960 --> 01:06:05,850 So können wir das in ein paar Möglichkeiten zu beheben. 1601 01:06:05,850 --> 01:06:10,530 Wir lehren kann Clang was cube durch Verschieben nur wo das ist 1602 01:06:10,530 --> 01:06:11,820 Erklärung. 1603 01:06:11,820 --> 01:06:14,640 Also habe ich ausgeschnitten und eingefügt es atop main. 1604 01:06:14,640 --> 01:06:17,770 Jetzt erkennen, dass, nur weil Haupt nicht mehr erste, ist es 1605 01:06:17,770 --> 01:06:19,150 noch standardmäßig ausgeführt. 1606 01:06:19,150 --> 01:06:20,060 Main main. 1607 01:06:20,060 --> 01:06:21,022 Es ist das Standard-Name der Funktion. 1608 01:06:21,022 --> 01:06:22,930 Es spielt keine Rolle, wo sie in einer Datei. 1609 01:06:22,930 --> 01:06:26,910 Aber zumindest jetzt Clang hat cube gesehen, bevor ich es zu benutzen. 1610 01:06:26,910 --> 01:06:28,500 Also lasst uns sehen, ob Clang ist jetzt glücklicher. 1611 01:06:28,500 --> 01:06:31,410 Machen Inkrement, kam es zu kompilieren diese Zeit. 1612 01:06:31,410 --> 01:06:33,060 >> Lassen Sie mich laufen Inkrement. 1613 01:06:33,060 --> 01:06:34,810 Und in der Tat, es scheint zu funktionieren. 1614 01:06:34,810 --> 01:06:36,810 Jetzt können Sie kommen mit Szenarien schließlich, wo 1615 01:06:36,810 --> 01:06:38,650 es ist nicht möglich, jede Funktion gesetzt 1616 01:06:38,650 --> 01:06:39,740 über jede andere Funktion. 1617 01:06:39,740 --> 01:06:42,140 Du wirst in diesem Endlosschleife in der Realität nicht weiterkommen, 1618 01:06:42,140 --> 01:06:43,480 wo dieser Kerl will hier aber dies 1619 01:06:43,480 --> 01:06:44,390 Mann muss da sein. 1620 01:06:44,390 --> 01:06:45,830 Also das funktioniert nicht immer. 1621 01:06:45,830 --> 01:06:49,020 So glücklicherweise hat C eine elegantere Lösung. 1622 01:06:49,020 --> 01:06:50,790 Ich werde diese zurück gebracht, wo es war, nur weil ich 1623 01:06:50,790 --> 01:06:53,390 bevorzugen, als grundsätzlich, dass Haupt immer 1624 01:06:53,390 --> 01:06:55,550 an der Spitze, weil es ist einfach schön zu sehen, was dieses Programm 1625 01:06:55,550 --> 01:06:56,920 hat standardmäßig. 1626 01:06:56,920 --> 01:06:58,950 Und was ich tun werde hier wird erklärt, was heißt 1627 01:06:58,950 --> 01:07:00,250 ein Prototyp. 1628 01:07:00,250 --> 01:07:05,730 Ich werde wieder erkläre mich cube-Funktion, indem sie buchstäblich 1629 01:07:05,730 --> 01:07:07,180 Kopieren und Einfügen. 1630 01:07:07,180 --> 01:07:08,290 Eigentlich ist das nicht wörtlich. 1631 01:07:08,290 --> 01:07:13,060 So wörtlich Kopieren und Einfügen line 15 1632 01:07:13,060 --> 01:07:15,160 bis oberhalb der Linie 6. 1633 01:07:15,160 --> 01:07:17,010 Es spielt keine Rolle, welche Linie diese landet auf. 1634 01:07:17,010 --> 01:07:18,380 Es passiert in Zeile 4 sein. 1635 01:07:18,380 --> 01:07:19,950 Aber es muss sein müssen, bevor main. 1636 01:07:19,950 --> 01:07:21,150 Aber den Unterschied bemerken. 1637 01:07:21,150 --> 01:07:24,100 Linie 4 endet mit einem Semikolon, was bedeutet, hey, 1638 01:07:24,100 --> 01:07:27,510 Clang, nimm mein Wort für sie, dass es existiert eine Funktion 1639 01:07:27,510 --> 01:07:31,350 als Würfel, der einen int und gibt eine int. 1640 01:07:31,350 --> 01:07:33,020 Aber ich werde nicht sagen, was es ist. 1641 01:07:33,020 --> 01:07:35,180 Genau wissen, dass ich Sie schließlich sagen versprechen. 1642 01:07:35,180 --> 01:07:38,490 Und in der Tat, jetzt ist es in Ordnung, dass diese nach unten ist unten. 1643 01:07:38,490 --> 01:07:41,275 >> So ist dies im Allgemeinen besser, da dann an der Oberseite 1644 01:07:41,275 --> 01:07:44,240 Ihre Datei können Sie einfach rattern, Schnellfeuer-, eine Zeile 1645 01:07:44,240 --> 01:07:46,470 jeder, was die Namen der Funktionen sind, was ihre 1646 01:07:46,470 --> 01:07:49,120 Eingänge sind, was ihre Ausgänge sind. 1647 01:07:49,120 --> 01:07:52,210 Und um es noch deutlicher, Eingang bedeutet in der Regel Argument oder 1648 01:07:52,210 --> 01:07:54,110 Parameter synonym. 1649 01:07:54,110 --> 01:07:56,890 Output bedeutet, Rückgabewert, was bedeutet es 1650 01:07:56,890 --> 01:07:58,700 Hand zurück zu mir. 1651 01:07:58,700 --> 01:08:03,420 Also in diesem Fall hier hat cube an der Spitze erklärt worden, aber 1652 01:08:03,420 --> 01:08:06,940 definiert, sonst bekannt als implementiert, an der Unterseite. 1653 01:08:06,940 --> 01:08:09,620 So, jetzt gehen wir wieder hier und starten Sie diese. 1654 01:08:09,620 --> 01:08:13,430 So, jetzt lass mich voran gehen und wieder zum Laufen zu bringen, erneut ausführen Inkrement. 1655 01:08:13,430 --> 01:08:16,500 Und jetzt scheint es zu funktionieren prima. 1656 01:08:16,500 --> 01:08:19,450 So können wir jetzt weitermachen und sich so etwas wie der Faktor 1657 01:08:19,450 --> 01:08:23,720 Bier Beispiel in dieser vierten Version. 1658 01:08:23,720 --> 01:08:25,590 Lassen Sie mich also nach unten scrollen hier. 1659 01:08:25,590 --> 01:08:28,149 Und feststellen, dass ich irgendwie hat diese Lektion zu Herzen gerade jetzt. 1660 01:08:28,149 --> 01:08:31,140 Die Tatsache, dass ich sang die gleiche Strophe wieder und 1661 01:08:31,140 --> 01:08:34,130 immer und immer wieder das gleiche chorus line in dem Lied, fühlte 1662 01:08:34,130 --> 01:08:36,439 wie, warum nicht ich Faktor, in eine Funktion? 1663 01:08:36,439 --> 01:08:38,470 Und in der Tat, sollte dies eine der Motivationen sein. 1664 01:08:38,470 --> 01:08:40,960 Neben der Tatsache, dass jemand anderes in der Welt Vielleicht möchten 1665 01:08:40,960 --> 01:08:42,390 einen Würfel Funktion - 1666 01:08:42,390 --> 01:08:44,560 das ist ein guter Grund, um etwas ausklammern und schreiben Sie Ihre 1667 01:08:44,560 --> 01:08:45,720 eigene benutzerdefinierte Funktion - 1668 01:08:45,720 --> 01:08:48,720 wenn es ein Stück Code in Ihrem Programm, das macht einfach 1669 01:08:48,720 --> 01:08:51,370 konzeptionellen Sinn, dass Sie Art will give it a 1670 01:08:51,370 --> 01:08:53,740 Namen - wie in diesem Fall, Chorus - 1671 01:08:53,740 --> 01:08:57,380 dann kann man ähnlich schreiben, dass als separate Funktion. 1672 01:08:57,380 --> 01:08:59,560 Sie müssen nicht alles in main schreiben, wenn es nur 1673 01:08:59,560 --> 01:09:02,609 fühlt sich sauberer zu trennen und ihm einen Namen geben. 1674 01:09:02,609 --> 01:09:05,529 >> Also in diesem Fall hier bemerken, dass ich einen Kommentar atop haben 1675 01:09:05,529 --> 01:09:06,859 Diese Funktion, die gerade singt über die 1676 01:09:06,859 --> 01:09:08,630 bestimmte Anzahl von Flaschen. 1677 01:09:08,630 --> 01:09:10,609 Beachten Sie hier, dass ich nicht brauchen, um diese aufrufen 1678 01:09:10,609 --> 01:09:12,520 Dinge Eingang und Ausgang. 1679 01:09:12,520 --> 01:09:16,090 In der Tat, dieses Mal habe ich gerade angerufen meinen Input b für Flasche. 1680 01:09:16,090 --> 01:09:19,960 Und hier bemerken, Leere schlägt was? 1681 01:09:19,960 --> 01:09:21,309 Das Chor - 1682 01:09:21,309 --> 01:09:22,660 PUBLIKUM: nicht zurückgeben. 1683 01:09:22,660 --> 01:09:23,870 DAVID J. MALAN: Hat keinen Wert zurück. 1684 01:09:23,870 --> 01:09:26,800 Und in der Tat haben Funktionen keine Werte zurück. 1685 01:09:26,800 --> 01:09:28,060 Sie können nur etwas tun. 1686 01:09:28,060 --> 01:09:30,270 Sie haben, was Nebenwirkungen genannt, welche in diesem 1687 01:09:30,270 --> 01:09:33,109 Fall ist nur eine ganze Reihe von Drucken auf dem Bildschirm. 1688 01:09:33,109 --> 01:09:36,580 So bemerken, dass dieser Code hier, ich buchstäblich nur gestohlen 1689 01:09:36,580 --> 01:09:37,680 das vorherige Beispiel. 1690 01:09:37,680 --> 01:09:39,930 Der einzige Unterschied besteht darin, anstelle der Verwendung von i als meinen 1691 01:09:39,930 --> 01:09:42,890 Variable, bin ich jetzt mit b als meine Variable. 1692 01:09:42,890 --> 01:09:45,880 So I b haben hier unten, I b haben hier unten habe ich b 1693 01:09:45,880 --> 01:09:47,109 minus 1 hier unten. 1694 01:09:47,109 --> 01:09:49,279 Aber der Code ist genau gleich. 1695 01:09:49,279 --> 01:09:52,529 Aber nur, um Sie jetzt zeigen, wie wir diese verwenden, lassen Sie mich gehen 1696 01:09:52,529 --> 01:09:56,780 voraus und tatsächlich ändern sich hierbei um ein für Schleife. 1697 01:09:56,780 --> 01:10:03,850 for (int i = n; i> n; i -). 1698 01:10:03,850 --> 01:10:06,230 >> Also habe ich, dass von unserem vorherigen Beispiel gestohlen. 1699 01:10:06,230 --> 01:10:08,970 Bisher ist es in Zeile 37, dass ich begonnen habe 1700 01:10:08,970 --> 01:10:10,640 singen dieses lästige Lied. 1701 01:10:10,640 --> 01:10:15,810 Aber anstatt, ich bin gerade dabei, jetzt rufen Chor der i. 1702 01:10:15,810 --> 01:10:16,870 Fertig. 1703 01:10:16,870 --> 01:10:20,260 So, jetzt in jeder Iteration dieser Schleife, nenne ich diese andere 1704 01:10:20,260 --> 01:10:22,220 Funktion, Chorus, die ich zufällig zu schreiben. 1705 01:10:22,220 --> 01:10:24,110 Es wurde nicht von jemand anderem Jahren geschrieben. 1706 01:10:24,110 --> 01:10:27,930 Aber Chor, inzwischen verwendet printf zu drucken 1707 01:10:27,930 --> 01:10:29,840 Ohne diese vier Zeilen. 1708 01:10:29,840 --> 01:10:32,720 Aber die Tatsache, dass ich rufe Chor wieder und wieder in ein 1709 01:10:32,720 --> 01:10:35,900 Schleife bedeutet, dass ich gehe zu bekommen, ganz am Ende, die 1710 01:10:35,900 --> 01:10:39,310 genau das gleiche Lied wie ich bisher haben. 1711 01:10:39,310 --> 01:10:42,130 Also kurz gesagt, wenn ich jetzt zurückblicke auf mein Code, obwohl 1712 01:10:42,130 --> 01:10:44,240 funktional dies entspricht, feststellen, dass es 1713 01:10:44,240 --> 01:10:46,020 Ausgangspunkt, um noch besser lesbar. 1714 01:10:46,020 --> 01:10:48,410 Ich weiß nicht genau wissen, wie GetInt 1715 01:10:48,410 --> 01:10:49,250 umgesetzt wird. 1716 01:10:49,250 --> 01:10:52,050 Ehrlich gesagt, ich weiß nicht, wie Chor umgesetzt wird. 1717 01:10:52,050 --> 01:10:52,970 Aber es macht mir nichts aus. 1718 01:10:52,970 --> 01:10:55,620 Es ist mir egal, weil ich jetzt der sortieren zu können, wie ein Mensch, lesen 1719 01:10:55,620 --> 01:10:57,050 Diese von oben nach unten. 1720 01:10:57,050 --> 01:10:59,950 Und weil die Funktionen nach, was sie mit dem Namen 1721 01:10:59,950 --> 01:11:02,910 tun, ist mein Code immer lesbar. 1722 01:11:02,910 --> 01:11:05,190 Und da unsere Programme bekommen viel komplexer - 1723 01:11:05,190 --> 01:11:07,220 durch die Semester Ende, werden Sie schriftlich Hunderte von Zeilen 1724 01:11:07,220 --> 01:11:10,970 Code, der in Sprachen wie PHP und JavaScript und dergleichen - 1725 01:11:10,970 --> 01:11:13,550 Sie finden, dass es so viel einfacher, als den Überblick zu behalten der ist 1726 01:11:13,550 --> 01:11:14,080 was du getan hast. 1727 01:11:14,080 --> 01:11:15,810 Und wenn Sie beginnen die Zusammenarbeit mit Freunden oder 1728 01:11:15,810 --> 01:11:19,010 Partnern oder Kollegen, werden Sie in der Lage sein, viel mehr schreiben 1729 01:11:19,010 --> 01:11:22,910 massiven Programme ab, um diese Grundübung 1730 01:11:22,910 --> 01:11:23,990 Bausteine. 1731 01:11:23,990 --> 01:11:25,550 >> Also mit dieser sagte, warum nicht wir nennen es einen Tag? 1732 01:11:25,550 --> 01:11:27,190 Und wir werden Sie am Mittwoch sehen. 1733 01:11:27,190 --> 01:11:33,611 [Applaus]