1 00:00:00,000 --> 00:00:10,940 2 00:00:10,940 --> 00:00:13,060 >> DAVID J MALAN: Alle Recht, das ist so CS50. 3 00:00:13,060 --> 00:00:15,040 Und dies ist eindeutig ein Freitag. 4 00:00:15,040 --> 00:00:16,850 Und das ist das Ende der Woche ein. 5 00:00:16,850 --> 00:00:21,020 So können Sie sich erinnern, dass wir aufgehört haben, letzten Mal, mit einem Cliffhanger der Arten. 6 00:00:21,020 --> 00:00:25,020 Wobei wir diese Lüge entlarven, dass kein Egal, was Sie gelehrt wurde wachsenden 7 00:00:25,020 --> 00:00:31,610 up, 1 geteilt durch 10 ist, in Tatsächlich 0,1 oder 0,100 oder 0,10000. 8 00:00:31,610 --> 00:00:35,270 In der Tat, wenn wir diese zu kompilieren Programm, wie wir gestern getan hat, mit, 9 00:00:35,270 --> 00:00:39,770 machen Ungenauigkeit, und dann tun dot, Schrägstrich, Ungenauigkeit, 10 00:00:39,770 --> 00:00:43,600 erfuhren wir, dass das ist, was ist 1 geteilt durch 10 tatsächlich ist. 11 00:00:43,600 --> 00:00:46,140 Also das ist wirklich nicht ganz der Fall. 12 00:00:46,140 --> 00:00:49,014 Aber das tut Hinweis auf einige grundlegende Einschränkung von Computern. 13 00:00:49,014 --> 00:00:50,930 Und in der Tat, unter den Dinge, die wir tun werden 14 00:00:50,930 --> 00:00:55,130 heute einen Blick auf, warum diese hat passiert, welche Auswirkungen dies hat, 15 00:00:55,130 --> 00:00:58,430 wie die Menschheit ist fehlgeschlagen , dies in einigen sehr erfassen 16 00:00:58,430 --> 00:01:00,410 ernste situations-- das Ergebnis der dem 17 00:01:00,410 --> 00:01:03,141 hat ziemlich tragisch gewesen und expensive-- auch 18 00:01:03,141 --> 00:01:04,849 werfen Sie einen Blick an, wie wir kann tatsächlich zu verteidigen 19 00:01:04,849 --> 00:01:06,530 gegen diese Art von Einschränkungen. 20 00:01:06,530 --> 00:01:10,940 So intuitiv vielleicht, Deshalb wird 1 geteilt durch 10, 21 00:01:10,940 --> 00:01:15,480 nach meinem Computer hier, nicht nur 1/10, 0.10? 22 00:01:15,480 --> 00:01:15,980 Ja. 23 00:01:15,980 --> 00:01:16,530 Was denken Sie? 24 00:01:16,530 --> 00:01:17,860 >> Zuschauer: Die Wurzel ist anders? 25 00:01:17,860 --> 00:01:18,550 >> DAVID J MALAN: Das ist was? 26 00:01:18,550 --> 00:01:19,730 Oh, ist das radix anders? 27 00:01:19,730 --> 00:01:20,720 Also nicht ganz. 28 00:01:20,720 --> 00:01:23,200 Es ist eigentlich mehr wesentlich für die Hardware. 29 00:01:23,200 --> 00:01:23,980 Andere Gedanken? 30 00:01:23,980 --> 00:01:24,584 Ja. 31 00:01:24,584 --> 00:01:26,750 Zuschauer: Sie Zahlen dar, anders? 32 00:01:26,750 --> 00:01:27,880 DAVID J MALAN: So they-- Rechts. 33 00:01:27,880 --> 00:01:29,338 Sie repräsentieren Zahlen unterschiedlich. 34 00:01:29,338 --> 00:01:30,700 Ungenau, anscheinend. 35 00:01:30,700 --> 00:01:33,190 So dass ist-- Nun, anders als das, was? 36 00:01:33,190 --> 00:01:34,490 Oder von wem? 37 00:01:34,490 --> 00:01:35,050 Von uns? 38 00:01:35,050 --> 00:01:35,966 Zuschauer: Ja. 39 00:01:35,966 --> 00:01:38,930 Sie verwenden nicht das Dezimalsystem System [unverständlich]. 40 00:01:38,930 --> 00:01:39,680 DAVID J MALAN: OK. 41 00:01:39,680 --> 00:01:41,560 In einem gewissen Sinn, sie nicht verwenden Sie das Dezimalsystem. 42 00:01:41,560 --> 00:01:43,720 Unter der Haube, alles ist in der Tat, binär, 43 00:01:43,720 --> 00:01:45,510 und das ist, damit verbundene, in der Tat. 44 00:01:45,510 --> 00:01:48,135 Aber es ist auch eine einfachere Erklärung als das. 45 00:01:48,135 --> 00:01:48,635 Ja. 46 00:01:48,635 --> 00:01:49,970 >> Zuschauer: Sie nur so viele Bits. 47 00:01:49,970 --> 00:01:52,370 Sie können nur bis zu einem gewissen Maße, wie bei den Dezimalstellen. 48 00:01:52,370 --> 00:01:52,780 >> DAVID J MALAN: Ja. 49 00:01:52,780 --> 00:01:54,420 Dies ist, was wirklich immer auf sie. 50 00:01:54,420 --> 00:01:57,180 Es stellt sich heraus, dass die Computer Typischerweise wird immer nur 51 00:01:57,180 --> 00:01:59,690 verwenden eine begrenzte Menge von Informationen um etwas darzustellen. 52 00:01:59,690 --> 00:01:59,870 Recht? 53 00:01:59,870 --> 00:02:02,110 Schließlich haben wir nur eine feste Menge an Festplattenspeicher. 54 00:02:02,110 --> 00:02:04,210 Wir haben nur einen festen Betrag RAM, oder Computer-Speicher. 55 00:02:04,210 --> 00:02:06,251 Und wenn Sie nur einen Anzahlung in Höhe von etwas, 56 00:02:06,251 --> 00:02:09,611 sicher können Sie nicht wirklich zählen bis bis unendlich oder eine beliebige Anzahl Sie wollen. 57 00:02:09,611 --> 00:02:11,610 Sie, Art, müssen wählen, was Bereich 58 00:02:11,610 --> 00:02:13,220 Werte Sie gehen zu unterstützen. 59 00:02:13,220 --> 00:02:18,100 >> Und so zum Beispiel eine Woche oder zwei vor, wenn wir über ASCII sprach, 60 00:02:18,100 --> 00:02:21,610 und wir sprachen über 8 Bit, oder ein Byte, sozusagen 61 00:02:21,610 --> 00:02:26,360 die größte Zahl konnten wir stellen mit 8 Bit war, was? 62 00:02:26,360 --> 00:02:28,350 255. 63 00:02:28,350 --> 00:02:31,850 Und wir können 256 Gesamtwerte stellen aber nicht, wenn wir verbringen eine von ihnen 64 00:02:31,850 --> 00:02:34,190 auf 0-- Naja, aber wenn wir verbringen, einer von ihnen auf 0, 65 00:02:34,190 --> 00:02:36,830 dann ist die größte Zahl Selbstverständlich ist, 255. 66 00:02:36,830 --> 00:02:39,410 >> So stellt sich heraus, dass es sich um Auch der Fall, in diesem Kontext. 67 00:02:39,410 --> 00:02:42,350 Wir kamen ins Gespräch, das letzte Mal, über Gleitkommazahlen, die 68 00:02:42,350 --> 00:02:44,640 verschieden sind aus ganzen Zahlen, in dass sie eine Dezimalstelle haben 69 00:02:44,640 --> 00:02:47,056 und hoffentlich auch ein paar Zahlen Danach, aber sie sind auch. 70 00:02:47,056 --> 00:02:51,730 Ein Computer ist nur in der Regel gehen auf 32 Bit, vielleicht 64 Bits zu verwenden 71 00:02:51,730 --> 00:02:53,497 einen Floating-Point-Wert darzustellen. 72 00:02:53,497 --> 00:02:56,080 Also auch wenn wir erwachsen geworden Lernen von Mathematik und zu wissen, 73 00:02:56,080 --> 00:02:58,750 dass Sie unbedingt können eine unendliche Anzahl von Nummern 74 00:02:58,750 --> 00:03:01,650 nach dem Komma, nicht wenn Sie endlichen Speicher. 75 00:03:01,650 --> 00:03:03,930 Sie, Art, haben zu runden, oder auswählen, welche 76 00:03:03,930 --> 00:03:05,346 Zahlen Sie gehen zu repräsentieren. 77 00:03:05,346 --> 00:03:08,710 Und so können Sie denken, in gewissem Sinne, dies ist der Computer am nächsten 78 00:03:08,710 --> 00:03:14,050 Annäherung an den Wert 1/10 es bekommen kann, mit nur 32 oder so-Bits. 79 00:03:14,050 --> 00:03:15,300 Und es ist nicht nur ein Zehntel. 80 00:03:15,300 --> 00:03:19,820 >> Zum Beispiel, wenn ich dies ändern 1/3, was wir denken, ist noch einfacher. 81 00:03:19,820 --> 00:03:21,300 Also 1 geteilt durch 3. 82 00:03:21,300 --> 00:03:22,355 Lassen Sie mich die Datei zu speichern. 83 00:03:22,355 --> 00:03:24,680 Lassen Sie mich gehen Sie vor und neu kompilieren. 84 00:03:24,680 --> 00:03:25,820 Und lassen Sie mich wieder ausführen. 85 00:03:25,820 --> 00:03:30,000 Auch hier offenbar, 1/3 ist nicht 0,3 und eine unendliche Zahl von 3'S 86 00:03:30,000 --> 00:03:30,770 danach. 87 00:03:30,770 --> 00:03:32,540 Sie haben diese Ungenauigkeit am Ende. 88 00:03:32,540 --> 00:03:35,544 So sind wir Menschen sind richtig, und was Sie gelernt haben, ist in der Tat richtig, 89 00:03:35,544 --> 00:03:37,460 aber wir stoßen up gegen einige Einschränkungen. 90 00:03:37,460 --> 00:03:39,420 >> Und was ich dachte, wir heute tun möchten, ist zu beginnen 91 00:03:39,420 --> 00:03:42,190 Dazu suchen Sie in, ehrlich gesagt, die tragischen Folgen dieser 92 00:03:42,190 --> 00:03:45,490 manchmal, wenn die Menschheit nicht ganz umzusetzen 93 00:03:45,490 --> 00:03:48,460 für diese Realität und dieser Einschränkungen. 94 00:03:48,460 --> 00:03:52,360 Und wir werden eine Reihe von Vignetten sehen aus dem History Channel, die statt 95 00:03:52,360 --> 00:03:53,950 ein Blick auf, wie die Dinge schief gelaufen ist. 96 00:03:53,950 --> 00:03:56,340 Es ist ca. 8 Minuten lang, und wir werden danach zurückkommen 97 00:03:56,340 --> 00:03:59,439 und werfen Sie einen Blick auf genau was kann schief gehen. 98 00:03:59,439 --> 00:04:00,605 Wenn wir die lights-- dimmen konnte 99 00:04:00,605 --> 00:04:02,350 >> [VIDEO PLAYBACK] 100 00:04:02,350 --> 00:04:06,310 >> -Computer, Wir alle kommen, um zu akzeptieren die oft frustrierenden Probleme, 101 00:04:06,310 --> 00:04:07,750 gehen mit ihnen. 102 00:04:07,750 --> 00:04:11,370 Bugs, Viren und Software Pannen sind kleine Preise 103 00:04:11,370 --> 00:04:13,230 um für die Bequemlichkeit zu zahlen. 104 00:04:13,230 --> 00:04:17,519 Aber in der High-Tech-und High-Speed- Militär und Raumfahrt-Anwendungen, 105 00:04:17,519 --> 00:04:22,130 das kleinste Problem kann in die Katastrophe vergrößert werden. 106 00:04:22,130 --> 00:04:27,750 Am 4. Juni 1996 vorbereitet Wissenschaftler um eine unbemannte Rakete Ariane 5 zu starten. 107 00:04:27,750 --> 00:04:29,890 Es wurde die Durchführung wissenschaftlicher Satelliten ausgelegt 108 00:04:29,890 --> 00:04:33,030 genau, wie das zu schaffen Magnetfeld wechselwirkt Erde 109 00:04:33,030 --> 00:04:35,600 mit Sonnenwinde. 110 00:04:35,600 --> 00:04:37,930 Die Rakete wurde gebaut der Europäischen Weltraumorganisation 111 00:04:37,930 --> 00:04:41,620 und Ausschalten von seiner Anlage gehoben an der Küste von Französisch-Guayana. 112 00:04:41,620 --> 00:04:44,924 >> -und Etwa 30 Sekunden in die Flucht, sie zum ersten Mal 113 00:04:44,924 --> 00:04:46,340 bemerkte etwas falsch lief. 114 00:04:46,340 --> 00:04:49,280 Daß die Düsen schwenkbar in einer Art, wie sie sollten wirklich nicht. 115 00:04:49,280 --> 00:04:53,042 Rund 40 Sekunden in die Flucht, klar das Fahrzeug war in Schwierigkeiten, 116 00:04:53,042 --> 00:04:55,250 und das ist, wenn sie gemacht die Entscheidung, es zu zerstören. 117 00:04:55,250 --> 00:04:58,970 Ein Range Safety Officer mit enormen Mut drückte auf den Knopf, 118 00:04:58,970 --> 00:05:03,940 explodierte die Rakete, bevor es sich zu einer Gefahr für die öffentliche Sicherheit. 119 00:05:03,940 --> 00:05:06,600 >> Dies war das Mädchen Fahrt der Ariane 5, 120 00:05:06,600 --> 00:05:09,270 und seine Zerstörung nahm Stellen aufgrund eines Fehlers 121 00:05:09,270 --> 00:05:10,992 in der Software der Rakete eingebettet. 122 00:05:10,992 --> 00:05:12,700 -die Problem auf dem Ariane war, dass es 123 00:05:12,700 --> 00:05:15,370 war eine Zahl, die erforderlich ist 64 Bit, um auszudrücken, 124 00:05:15,370 --> 00:05:18,150 und er wollte zu konvertieren Einem 16-Bit-Zahl. 125 00:05:18,150 --> 00:05:21,160 Sie gingen davon aus, dass die Anzahl war nie sehr groß sein, 126 00:05:21,160 --> 00:05:25,020 dass die meisten dieser Stellen in die 64-Bit-Zahl waren 0s. 127 00:05:25,020 --> 00:05:26,310 Sie waren falsch. 128 00:05:26,310 --> 00:05:28,680 >> -Die Unfähigkeit eines Softwareprogramm zu akzeptieren, 129 00:05:28,680 --> 00:05:32,820 die Art der Zahl, erzeugt durch ein anderer war die Ursache für den Ausfall. 130 00:05:32,820 --> 00:05:37,190 Software-Entwicklung hatte sich zu einem sehr kostspielig Teil der neuen Technologie. 131 00:05:37,190 --> 00:05:40,760 Die Ariane-4-Rakete war sehr gewesen erfolgreich, so viel von der Software 132 00:05:40,760 --> 00:05:43,990 geschaffen, denn es war auch auf der Ariane-5 verwendet. 133 00:05:43,990 --> 00:05:49,750 >> -Das Grundproblem war, dass die Ariane 5 war schneller, beschleunigt schneller. 134 00:05:49,750 --> 00:05:53,000 Und die Software musste nicht dafür bilanziert. 135 00:05:53,000 --> 00:05:56,330 >> -Die Zerstörung der Rakete war eine riesige finanzielle Katastrophe, 136 00:05:56,330 --> 00:05:59,670 alles wegen einer Minute Softwarefehler. 137 00:05:59,670 --> 00:06:01,990 Aber dies war nicht der erste Zeitdatenkonvertierungsprobleme 138 00:06:01,990 --> 00:06:05,310 hatte modernen Raketentechnik geplagt. 139 00:06:05,310 --> 00:06:08,300 >> -Im Jahr 1991 mit dem Start des ersten Golfkrieg, 140 00:06:08,300 --> 00:06:10,650 der Patriot Raketen erlebt eine ähnliche Art 141 00:06:10,650 --> 00:06:12,650 der Anzahl Umwandlung Problem. 142 00:06:12,650 --> 00:06:15,620 Als Folge 28 Personen, 28 amerikanische Soldaten 143 00:06:15,620 --> 00:06:18,440 wurden getötet und über 100 weitere verletzt, 144 00:06:18,440 --> 00:06:21,900 wenn der Patriot, die angeblich gegen eingehende scuds zu schützen, 145 00:06:21,900 --> 00:06:24,630 versagt, eine Rakete abzufeuern. 146 00:06:24,630 --> 00:06:29,440 >> -Wenn Der Irak in Kuwait einmarschierte und Amerika ins Leben gerufen Desert Storm Anfang 1991, 147 00:06:29,440 --> 00:06:33,800 Patriot Raketen-Batterien eingesetzt wurden zum Schutz Saudi-Arabien und Israel 148 00:06:33,800 --> 00:06:37,000 von irakischen Scud-Raketenangriffe. 149 00:06:37,000 --> 00:06:40,610 Der Patriot ist ein US, Mittelstrecken- Boden-Luft-System 150 00:06:40,610 --> 00:06:43,010 von der Raytheon Company. 151 00:06:43,010 --> 00:06:49,080 >> -Die Größe des Patriot Abfangjäger, selbst, ist zu rund 20 Meter lang. 152 00:06:49,080 --> 00:06:51,250 Und wiegt etwa 2000 Pfund. 153 00:06:51,250 --> 00:06:55,195 Und es hat einen Sprengkopf von about-- trägt Ich denke, es ist rund 150 Pfund. 154 00:06:55,195 --> 00:06:59,500 Und der Gefechtskopf, selbst, ist eine hochexplosive, 155 00:06:59,500 --> 00:07:02,570 was sich Fragmente um ihn herum. 156 00:07:02,570 --> 00:07:06,890 Die Hülle des Gefechtskopfes ist entworfen, um wie Schrot zu handeln. 157 00:07:06,890 --> 00:07:09,130 >> -Die Raketen sind durchgeführt, 4 pro Container, 158 00:07:09,130 --> 00:07:12,080 und werden durch einen Sattelanhänger transportiert. 159 00:07:12,080 --> 00:07:19,100 >> -Die Patriot Anti-Raketen-System geht mindestens 20 Jahren. 160 00:07:19,100 --> 00:07:22,320 Es wurde ursprünglich entwickelt, als Luftabwehrrakete 161 00:07:22,320 --> 00:07:24,180 abzuschießen feindliche Flugzeuge. 162 00:07:24,180 --> 00:07:27,860 In dem ersten Golfkrieg, wenn, dass der Krieg kam, 163 00:07:27,860 --> 00:07:32,745 die Armee wollte es zu benutzen abzuschießen scuds, keine Flugzeuge. 164 00:07:32,745 --> 00:07:36,150 Die irakische Waffen nicht so sehr ein Problem, 165 00:07:36,150 --> 00:07:39,110 aber die Armee zu scuds besorgt. 166 00:07:39,110 --> 00:07:42,340 Und so versuchten sie, Upgrade der Patriot. 167 00:07:42,340 --> 00:07:44,760 >> -Intercepting Einen Feind Rakete reist am mach fünf 168 00:07:44,760 --> 00:07:47,250 sein würde genug Herausforderung. 169 00:07:47,250 --> 00:07:50,000 Aber als der Patriot in Dienst stürzte, 170 00:07:50,000 --> 00:07:54,030 die Armee war nicht bekannt, ein Irakische Änderung, die vorgenommen 171 00:07:54,030 --> 00:07:56,840 ihre scuds fast unmöglich zu schlagen. 172 00:07:56,840 --> 00:08:01,020 >> -Was Passiert, ist, dass die scuds kamen in, waren instabil, 173 00:08:01,020 --> 00:08:02,310 sie wackeln. 174 00:08:02,310 --> 00:08:05,140 Der Grund dafür, war die Iraker, um 175 00:08:05,140 --> 00:08:09,450 zu 600 Kilometer raus eine 300 Kilometer lange Streckenrakete, 176 00:08:09,450 --> 00:08:12,930 nahm Gewicht aus dem vorderen Gefechtskopf und aus der Gefechtskopf leichter. 177 00:08:12,930 --> 00:08:17,710 So, jetzt, das Patriot versuchen zu kommen am scud und die meiste Zeit, 178 00:08:17,710 --> 00:08:21,700 die überwiegende Mehrheit der Zeit, wäre es einfach zu fliegen durch die Scud. 179 00:08:21,700 --> 00:08:25,700 >> -Wenn Die Patriot Netzbetreiber realisiert der Patriot sein Ziel verfehlt, 180 00:08:25,700 --> 00:08:29,790 sie detonierte der Patriot Gefechtskopf, um mögliche Verluste zu vermeiden, wenn es 181 00:08:29,790 --> 00:08:32,380 wurde auf den Boden fallen. 182 00:08:32,380 --> 00:08:36,340 >> -Das War das, was die meisten Menschen sah, diese großen Feuerbälle in den Himmel, 183 00:08:36,340 --> 00:08:41,289 und so missverstanden Abschnitte mit Scud Sprengköpfe. 184 00:08:41,289 --> 00:08:43,590 Obwohl in der Nacht Himmel erschien Patriots 185 00:08:43,590 --> 00:08:47,020 erfolgreich zu sein, Zerstörung scuds, bei Dhahran, 186 00:08:47,020 --> 00:08:49,730 es könne keine Fehler über seine Leistung. 187 00:08:49,730 --> 00:08:53,990 Dort wird der Patriot-Radarsystem verlor eines eingehenden Scud, 188 00:08:53,990 --> 00:08:56,650 und nie ins Leben gerufen, aufgrund eines Software-Fehler. 189 00:08:56,650 --> 00:08:59,650 190 00:08:59,650 --> 00:09:04,100 Es waren die Israelis, die zum ersten Mal entdeckt dass je länger das System eingeschaltet war, 191 00:09:04,100 --> 00:09:07,510 je größer die Zeitabweichung geworden ist, aufgrund eines Takt eingebettet 192 00:09:07,510 --> 00:09:09,490 in dem Computer des Systems. 193 00:09:09,490 --> 00:09:12,670 >> -Über 2 Wochen vor die Tragödie in Dhahran, 194 00:09:12,670 --> 00:09:15,010 die Israelis berichtet, das Verteidigungsministerium, 195 00:09:15,010 --> 00:09:17,940 dass das System Zeit zu verlieren, dass nach etwa 8 Stunden des Laufens, 196 00:09:17,940 --> 00:09:21,410 sie bemerkten, dass das System zusehends weniger genau. 197 00:09:21,410 --> 00:09:25,290 Das Verteidigungsministerium reagierte mit sagen alle der Patriot-Batterien 198 00:09:25,290 --> 00:09:28,070 um die Systeme nicht verlassen, für eine lange Zeit. 199 00:09:28,070 --> 00:09:29,960 Sie sagten nie, was eine lange Zeit war. 200 00:09:29,960 --> 00:09:30,460 8 Stunden? 201 00:09:30,460 --> 00:09:30,960 10 Stunden? 202 00:09:30,960 --> 00:09:31,870 1000 Stunden? 203 00:09:31,870 --> 00:09:33,734 Niemand wusste. 204 00:09:33,734 --> 00:09:35,650 -Die Patriot-Batterie in der Kaserne stationiert 205 00:09:35,650 --> 00:09:40,410 bei Dhahran, und seine fehlerhaften internen Uhr, war auf über 100 Stunden gewesen 206 00:09:40,410 --> 00:09:43,041 in der Nacht des 25. Februar. 207 00:09:43,041 --> 00:09:47,416 >> -it Raupenzeit mit einer Genauigkeit von etwa 1/10 Sekunde. 208 00:09:47,416 --> 00:09:49,290 Jetzt 1/10 Sekunde ist eine interessante Zahl 209 00:09:49,290 --> 00:09:52,700 weil es nicht sein kann in binärer Ausdruck gebracht, genau. 210 00:09:52,700 --> 00:09:54,820 Das bedeutet, es kann nicht ausgedrückt werden kann, exakt, 211 00:09:54,820 --> 00:09:57,420 in jedem modernen digitalen Computers. 212 00:09:57,420 --> 00:10:01,460 Es ist schwer zu glauben, aber dies als ein Beispiel. 213 00:10:01,460 --> 00:10:03,520 Lassen Sie uns die Zahl, 1/3. 214 00:10:03,520 --> 00:10:07,110 1/3 kann nicht ausgedrückt werden in Dezimal genau. 215 00:10:07,110 --> 00:10:11,490 1/3 ist 0.333 geht für Unendlichkeit. 216 00:10:11,490 --> 00:10:15,486 Es gibt keine Möglichkeit, das zu tun, mit absolute Genauigkeit, in Dezimal. 217 00:10:15,486 --> 00:10:18,360 Das ist genau die gleiche Art von Problem, das in der Patriot passiert. 218 00:10:18,360 --> 00:10:22,510 Je länger das System lief, die schlechter die Zeitfehler wurde. 219 00:10:22,510 --> 00:10:28,420 >> -nach 100 Betriebsstunden, die Fehler in der Zeit war nur ungefähr 1/3 Sekunde. 220 00:10:28,420 --> 00:10:31,830 Aber in Bezug auf ein Ziel Raketen Reisen bei Mach 5, 221 00:10:31,830 --> 00:10:35,890 es ergab sich ein Verfolgungs Fehler von über 600 Metern. 222 00:10:35,890 --> 00:10:38,970 Es wäre ein fataler Fehler sein für die Soldaten in Dhahran. 223 00:10:38,970 --> 00:10:45,035 >> -Was Passiert, ist eine Scud Start war von Frühwarnsatelliten erkannt, 224 00:10:45,035 --> 00:10:48,930 und sie neu, dass die Scud war kommen in ihrer allgemeinen Richtung. 225 00:10:48,930 --> 00:10:51,170 Sie wussten nicht, wo sie kommen würde. 226 00:10:51,170 --> 00:10:53,990 >> -Es War nun an der Radar Bestandteil des Patriot-System, 227 00:10:53,990 --> 00:10:58,520 verteidigen Dhahran, zu finden und zu halten, Spur des ankommenden feindlichen Rakete. 228 00:10:58,520 --> 00:10:59,690 >> -Die Radar war sehr smart. 229 00:10:59,690 --> 00:11:01,710 Es wäre tatsächlich verfolgen die Position der Scud 230 00:11:01,710 --> 00:11:04,040 und dann vorhersagen, wo es wohl sein würde, 231 00:11:04,040 --> 00:11:06,140 das nächste Mal, das Radar schickte einen Impuls aus. 232 00:11:06,140 --> 00:11:07,660 Das war der Range-Gate bezeichnet. 233 00:11:07,660 --> 00:11:11,870 >> -Dann, Einst der Patriot entscheidet genug Zeit hat 234 00:11:11,870 --> 00:11:16,280 übergeben, zurück und überprüfen Sie die nächsten Standort für diese erkannte Objekt, 235 00:11:16,280 --> 00:11:17,280 es geht zurück. 236 00:11:17,280 --> 00:11:21,690 Also, wenn es ging zurück in die falsche Ort, dann sieht keinen Objekt 237 00:11:21,690 --> 00:11:25,230 und es entscheidet, dass es keinen Aufgabe war es eine falsche Erfassung, 238 00:11:25,230 --> 00:11:26,650 und lässt den Track. 239 00:11:26,650 --> 00:11:29,690 Der eingehende Scud verschwunden von dem Radarschirm, 240 00:11:29,690 --> 00:11:32,670 und Sekunden später ist es schlug in der Kaserne. 241 00:11:32,670 --> 00:11:38,100 Die Scud getötet 28 und war der letzte eine während des ersten Golfkrieges gebrannt. 242 00:11:38,100 --> 00:11:43,460 Tragischerweise die aktualisierte Software kamen in Dhahran am folgenden Tag. 243 00:11:43,460 --> 00:11:46,150 Das Software-Fehler hatte behoben, Schließ 244 00:11:46,150 --> 00:11:48,940 ein Kapitel in der unruhigen Geschichte des Patriot-Rakete. 245 00:11:48,940 --> 00:11:50,220 >> [END PLAYBACK] 246 00:11:50,220 --> 00:11:54,340 >> DAVID J MALAN: Also werden wir ein Blick in einige ähnliche Beschränkungen in der nur ein bisschen. 247 00:11:54,340 --> 00:11:58,470 Aber zuerst, lassen Sie uns Übergang zu einer weniger FYI ist. 248 00:11:58,470 --> 00:12:01,575 So one-- diesem Wochenende gibt wird Superschnitte sein, 249 00:12:01,575 --> 00:12:04,200 die dazu bestimmt sind, zu ersetzen regelmäßige Abschnitte, die 250 00:12:04,200 --> 00:12:05,460 wird somit starten pro Woche. 251 00:12:05,460 --> 00:12:08,204 Werfen Sie einen Blick auf die CS50-Website für weitere Informationen über diese. 252 00:12:08,204 --> 00:12:11,120 Sie werden auch gefilmt und gestreamt werden Leben für die, nicht teilnehmen. 253 00:12:11,120 --> 00:12:12,980 Problem Set 1 ist auf der Natürlich Webseite bereits, 254 00:12:12,980 --> 00:12:15,105 und wir werden ein Blick in dass in nur ein wenig. 255 00:12:15,105 --> 00:12:18,350 Und Sprechzeiten auch dauern wird Stellen Sie das von Montag bis Donnerstag. 256 00:12:18,350 --> 00:12:20,960 >> Das war also die meisten kanonischen Programm haben wir uns beim letzten Mal. 257 00:12:20,960 --> 00:12:23,590 Es ist wie der einfachste Programm können Sie in C schreiben, 258 00:12:23,590 --> 00:12:25,250 und auch das ist ein bisschen wie eine kühne Behauptung. 259 00:12:25,250 --> 00:12:25,750 Recht? 260 00:12:25,750 --> 00:12:28,070 Da gibt es eine Menge von scheinbaren Komplexität zu diesem. 261 00:12:28,070 --> 00:12:30,445 Werfen wir also einen Blick auf was einige dieser Elemente 262 00:12:30,445 --> 00:12:33,080 waren und versuchen Sie es dann zur Verfügung zu stellen eine mentale Modell dafür, wie 263 00:12:33,080 --> 00:12:35,710 diese einfachsten Programmen arbeiten, und dann werden wir beginnen 264 00:12:35,710 --> 00:12:38,050 die Dinge zu betrachten immer komplexer. 265 00:12:38,050 --> 00:12:41,280 Also diese Linie hier, markiert nun, in gelb, was haben wir gesagt, das letzte Mal, 266 00:12:41,280 --> 00:12:43,200 dass dies für uns tut? 267 00:12:43,200 --> 00:12:45,220 Was ist der Zweck dient? 268 00:12:45,220 --> 00:12:46,984 Alle Bewerber aus weiter zurück? 269 00:12:46,984 --> 00:12:47,483 Ja. 270 00:12:47,483 --> 00:12:48,649 >> Zuschauer: [unverständlich] 271 00:12:48,649 --> 00:12:50,871 272 00:12:50,871 --> 00:12:51,704 DAVID J MALAN: Good. 273 00:12:51,704 --> 00:12:53,537 Also es gibt Ihnen Zugriff Befehle, oder lassen Sie uns 274 00:12:53,537 --> 00:12:56,750 nennen sie Funktionen, dass jemand sonst schrieb, dass deklariert sind, 275 00:12:56,750 --> 00:12:58,350 sozusagen in einer anderen Datei. 276 00:12:58,350 --> 00:13:02,370 Also werden wir genau das, was eine h-Datei zu sehen ist im Vergleich zu einer C-Datei, eventuell. 277 00:13:02,370 --> 00:13:04,710 Aber jetzt weiß nur, printf dass, zum Beispiel, 278 00:13:04,710 --> 00:13:08,370 ist eine der Funktionen, die gewesen sein erklärte in einer anderen Datei, irgendwo 279 00:13:08,370 --> 00:13:12,930 sonst auf der Festplatte des Cloud ist das ermöglicht es uns printf den Zugriff auf und verwenden Sie es 280 00:13:12,930 --> 00:13:15,240 ohne neu zu erfinden , die uns Rades. 281 00:13:15,240 --> 00:13:16,930 Inzwischen Haupt. 282 00:13:16,930 --> 00:13:19,690 Was war der analoge Haupt, letzte Woche? 283 00:13:19,690 --> 00:13:20,190 Ja. 284 00:13:20,190 --> 00:13:21,460 >> Zuschauer: Grüne Flagge geklickt wird. 285 00:13:21,460 --> 00:13:21,740 >> DAVID J MALAN: Ja. 286 00:13:21,740 --> 00:13:23,490 Scratch ist, wenn grüne Flagge geklickt. 287 00:13:23,490 --> 00:13:25,560 Es ist wie das Puzzlestück dass Kicks off Dinge. 288 00:13:25,560 --> 00:13:28,306 Und so ähnlich, hat die Welt vor einigen Jahren, dass beschlossen, in C, 289 00:13:28,306 --> 00:13:30,930 und eine Reihe von anderen Sprachen, Wenn Sie ein Programm schreiben wollen, 290 00:13:30,930 --> 00:13:33,410 Ihre erste Funktion hat zu nennen, Haupt. 291 00:13:33,410 --> 00:13:34,641 Und es muss so aussehen. 292 00:13:34,641 --> 00:13:36,640 Aber wir werden wieder kommen, Ein anderes Mal, was, int, 293 00:13:36,640 --> 00:13:38,690 und, nichtig bedeutet in diesem Zusammenhang. 294 00:13:38,690 --> 00:13:42,860 Denn jetzt sind die geschweiften Klammern Art der wie Puzzleteil Form Scratch 295 00:13:42,860 --> 00:13:45,080 daß kapselt einer Anzahl Zeilen. 296 00:13:45,080 --> 00:13:47,070 Und zwischen den Linien Hier, das ist hier. 297 00:13:47,070 --> 00:13:51,610 printf ist eine Funktion, deren Zweck in Leben ist, um eine formatierte Zeichenfolge zu drucken. 298 00:13:51,610 --> 00:13:55,010 Und formatiert, ich meine, Sie kann in Platzhalterwerte stecken, 299 00:13:55,010 --> 00:13:58,360 und Sie können, wie viele Nachkommastellen angeben Punkte, wie viele Zahlen zu drucken 300 00:13:58,360 --> 00:14:00,040 nach einer Dezimalstelle und dergleichen. 301 00:14:00,040 --> 00:14:05,040 Und printf, natürlich, nimmt ein oder mehrere Argumente oder Parameter, 302 00:14:05,040 --> 00:14:06,770 ansonsten bekannter, einfacher, als Eingänge. 303 00:14:06,770 --> 00:14:09,230 >> So printf, wie eine Menge von Funktionen, nimmt Eingänge. 304 00:14:09,230 --> 00:14:12,730 Und diese Eingänge umarmt werden von den beiden Klammern hier. 305 00:14:12,730 --> 00:14:15,180 Und innerhalb von denen ist ein Eingang. 306 00:14:15,180 --> 00:14:18,600 Es ist eine Schnur, wie wir es nannten habe, Das ist nur eine Folge von Zeichen, 307 00:14:18,600 --> 00:14:22,310 wie ein Wort oder eine Phrase oder eine ganze Essay selbst, zwischen Anführungszeichen. 308 00:14:22,310 --> 00:14:25,712 Und das ist, was los ist, um den Einfluss Verhalten printf weil natürlich 309 00:14:25,712 --> 00:14:27,170 es ist nur eine generische Druckfunktion. 310 00:14:27,170 --> 00:14:29,600 Es wird nicht zu wissen, was zu drucken, sofern Sie es nicht zu erzählen. 311 00:14:29,600 --> 00:14:31,000 Und dann, einige Kleinigkeiten. 312 00:14:31,000 --> 00:14:34,056 Was haben wir sagen, diese seltsame Folge von Symbolen ist? 313 00:14:34,056 --> 00:14:34,556 Ja. 314 00:14:34,556 --> 00:14:35,410 >> Zuschauer: New Line. 315 00:14:35,410 --> 00:14:35,990 >> DAVID J MALAN: New Line. 316 00:14:35,990 --> 00:14:39,340 So stellt sich heraus, die Sie nicht nur schlagen können, Geben Sie, wenn Sie das Schreiben des Programms sind. 317 00:14:39,340 --> 00:14:42,590 Im allgemeinen wird der Compiler sein wollen ein wenig verwirrt, was du meinst. 318 00:14:42,590 --> 00:14:45,340 Vielmehr muss man buchstäblich sagen, gib mir eine neue Linie hier. 319 00:14:45,340 --> 00:14:49,506 Und so / n ist, was wir in der Regel rufen Sie ein Escape-Zeichen. 320 00:14:49,506 --> 00:14:50,870 So n, für die neue Linie. 321 00:14:50,870 --> 00:14:53,810 Und der Compiler weiß, dass, wenn es sieht / n, 322 00:14:53,810 --> 00:14:57,420 sollte es eigentlich zu induzieren den Computer, Letztlich oder printf, in diesem Fall, 323 00:14:57,420 --> 00:15:00,260 zum Ausdrucken eine tatsächliche neue Linie, wie das Schlagen der, geben, 324 00:15:00,260 --> 00:15:01,480 Taste auf Ihrer Tastatur. 325 00:15:01,480 --> 00:15:05,620 Und schließlich, was haben wir sagen, dieses Stück Syntax ist für? 326 00:15:05,620 --> 00:15:06,591 Was stellt es dar? 327 00:15:06,591 --> 00:15:07,090 Ja. 328 00:15:07,090 --> 00:15:07,490 >> Zuschauer: [unverständlich] 329 00:15:07,490 --> 00:15:08,660 >> DAVID J MALAN: Es ist nur, das Ende der Leitung. 330 00:15:08,660 --> 00:15:09,909 Es ist das Ende der Anweisung. 331 00:15:09,909 --> 00:15:11,890 Und erkennen, dass wir es nicht tun legte sie überall. 332 00:15:11,890 --> 00:15:13,900 Wir sicherlich legen Sie sie nicht an den Enden jeder Zeile. 333 00:15:13,900 --> 00:15:16,680 Zum Beispiel gibt es keine auf dem erste Zeile, gibt es keine auf der Linie 334 00:15:16,680 --> 00:15:18,680 mit, Haupt, gibt es keine nach den geschweiften Klammern, 335 00:15:18,680 --> 00:15:21,740 aber Sie werden beginnen, um zu sehen und zu erhalten vertraut mit, wo es gefragt. 336 00:15:21,740 --> 00:15:26,014 Und es ist fast immer nach einer Funktion anrufen oder eine Aussage, eine Aktion 337 00:15:26,014 --> 00:15:27,180 dass Sie tatsächlich nehmen. 338 00:15:27,180 --> 00:15:29,520 >> Und jetzt weiß, vor allem, wenn unter denen, weniger komfortabel, 339 00:15:29,520 --> 00:15:32,540 Dies sind die Arten von Dummheiten dass Sie am Ende versehentlich hämmern 340 00:15:32,540 --> 00:15:33,873 Ihren Kopf gegen die Wand über. 341 00:15:33,873 --> 00:15:36,107 Weil Sie logisch zuversichtlich, in einigen Problem 342 00:15:36,107 --> 00:15:38,440 Sie für ein Problem gelöst haben Set, und das verdammte Ding einfach 343 00:15:38,440 --> 00:15:40,187 wird nicht kompiliert oder sogar laufen. 344 00:15:40,187 --> 00:15:43,270 Und so oft, schon früh, es ist zu gehen sein, weil Sie eine Klammer verpasst, 345 00:15:43,270 --> 00:15:44,455 oder Sie ein Semikolon verpasst. 346 00:15:44,455 --> 00:15:46,547 Und so einfach bewusst sein, Diese Arten von Dingen, 347 00:15:46,547 --> 00:15:49,380 und versuchen, nicht durch frustriert sie, weil sehr schnell funktioniert das 348 00:15:49,380 --> 00:15:50,640 werden ein alter Hut. 349 00:15:50,640 --> 00:15:53,910 Aber es ist sehr leicht zu bekommen frustriert frühzeitig, als Ergebnis. 350 00:15:53,910 --> 00:15:57,020 >> So, jetzt lassen Sie uns einen Blick darauf, wie diese Linie ist tatsächlich arbeiten 351 00:15:57,020 --> 00:15:59,170 und anschließend bei einer etwas aussehen mehr kompliziert. 352 00:15:59,170 --> 00:16:02,017 Also haben wir hier, die haben über Fähigkeit, auf diesem Bildschirm zu zeichnen. 353 00:16:02,017 --> 00:16:04,100 Und lassen Sie uns annehmen, dass dies ist mein Computer-Bildschirm, 354 00:16:04,100 --> 00:16:08,589 aber ich schreibe das, hallo-Programm, und ich habe nicht realisiert, printf. 355 00:16:08,589 --> 00:16:10,130 Jemand anders hat umgesetzt, printf. 356 00:16:10,130 --> 00:16:12,420 Wer möchte Anspruch umgesetzt haben, printf? 357 00:16:12,420 --> 00:16:12,920 Wenn wir? 358 00:16:12,920 --> 00:16:13,830 Also gut, was ist Ihr Name? 359 00:16:13,830 --> 00:16:14,155 >> STUDENT 1: [? Copal. ?] 360 00:16:14,155 --> 00:16:15,529 >> DAVID J MALAN: Copal, komm herauf. 361 00:16:15,529 --> 00:16:16,430 Komm auf. 362 00:16:16,430 --> 00:16:17,070 Gut. 363 00:16:17,070 --> 00:16:22,260 So haben wir hier einige Namensschilder, Da wir ein kleines Spiel daraus machen. 364 00:16:22,260 --> 00:16:26,270 Und wir werden Sie anrufen, printf. 365 00:16:26,270 --> 00:16:30,170 Und wenn Sie hierher kommen wollen, was ich gerade auf dem Bildschirm gezeichnet, 366 00:16:30,170 --> 00:16:32,340 es ist ganz einfach, es gibt mir diese. 367 00:16:32,340 --> 00:16:35,550 >> Also gut, ja, hallo mein name ist, printf, wenn Sie möchten, dass anziehen. 368 00:16:35,550 --> 00:16:35,740 Gut. 369 00:16:35,740 --> 00:16:37,360 Und wenn Sie Stand gehen von dem Computer-Bildschirm 370 00:16:37,360 --> 00:16:39,730 als ob Sie die Funktion ist, dass kam mit diesem Computersystem. 371 00:16:39,730 --> 00:16:42,063 Und Ihr Ziel im Leben ist um tatsächlich etwas zu drucken. 372 00:16:42,063 --> 00:16:44,560 Aber ähnlich wie das Programm, das wir hatte gerade auf dem Bildschirm, hier, 373 00:16:44,560 --> 00:16:47,060 wir werden zu müssen tatsächlich geben Ihnen eine Eingabe. 374 00:16:47,060 --> 00:16:51,810 >> Und so, wenn meine Eingang, hier ist offenbar, was vergangen printf, 375 00:16:51,810 --> 00:16:53,730 lassen Sie uns Art verspotten es so. 376 00:16:53,730 --> 00:16:58,720 Ich werde buchstäblich auf zu schreiben ein Stück Papier: "Hallo, Welt" 377 00:16:58,720 --> 00:17:03,020 Backslash N. Und klar zu sein, was Ich habe gerade auf diesem Stück Papier gezeichnet, 378 00:17:03,020 --> 00:17:04,020 sieht wie folgt aus. 379 00:17:04,020 --> 00:17:08,730 Also, wenn ich dieses Programm, und dieses gelbe Zeile Code wird ausgeführt, 380 00:17:08,730 --> 00:17:12,970 es ist, als ob ich, der hallo-Programm, ich reichte eine Eingabe aus, um eine Funktion 381 00:17:12,970 --> 00:17:13,970 dass jemand anderes geschrieben hat. 382 00:17:13,970 --> 00:17:16,595 >> Und wenn Sie, mit Ihrem Finger, könnte tatsächlich, mit dem Finger, 383 00:17:16,595 --> 00:17:21,520 Zeichnen auf dem Bildschirm unabhängig es Sie überliefert wurden, 384 00:17:21,520 --> 00:17:27,465 der Effekt ist letztlich auf genau sehen, dass auf dem Bildschirm. 385 00:17:27,465 --> 00:17:29,140 Und eine kleine Ecke Fall. 386 00:17:29,140 --> 00:17:31,540 Und gut, die wir nicht sehen sollte die, neue Linie, an dieser Stelle. 387 00:17:31,540 --> 00:17:33,900 Es wäre falsch für Sie explizit ziehen den Zeilenumbruch. 388 00:17:33,900 --> 00:17:36,810 Aber wenn wir gehalten Schreiben von Wörtern auf der Bildschirm, würde sie am Ende darunter. 389 00:17:36,810 --> 00:17:39,560 >> Also vielen Dank, aber Stick hier in der Gegend für nur einen Moment. 390 00:17:39,560 --> 00:17:42,860 Wir brauchen jetzt eine weitere Ehrenamtliche Arbeit, wenn wir könnten, 391 00:17:42,860 --> 00:17:46,830 das geht zu müssen, um die Rolle zu spielen von-- Es ist nur die Menschen im Orchester 392 00:17:46,830 --> 00:17:47,355 jetzt. 393 00:17:47,355 --> 00:17:47,980 Wie about-- OK. 394 00:17:47,980 --> 00:17:48,480 Genau hier. 395 00:17:48,480 --> 00:17:49,180 Komm auf. 396 00:17:49,180 --> 00:17:49,955 Wie heißen Sie? 397 00:17:49,955 --> 00:17:50,922 >> STUDENT 2: [? Ivay. ?] 398 00:17:50,922 --> 00:17:51,796 DAVID J MALAN: Es tut uns leid? 399 00:17:51,796 --> 00:17:52,990 STUDENT 2: [? Ivay. ?] 400 00:17:52,990 --> 00:17:55,320 DAVID J MALAN: Ethan, komm herauf. 401 00:17:55,320 --> 00:17:55,820 Nein? 402 00:17:55,820 --> 00:17:58,390 Habe ich das falsch, auch nachdem Sie es zweimal gesagt? 403 00:17:58,390 --> 00:17:58,890 Komm auf. 404 00:17:58,890 --> 00:18:00,030 Es ist schwer, hier zu hören auf. 405 00:18:00,030 --> 00:18:05,240 406 00:18:05,240 --> 00:18:05,740 OK. 407 00:18:05,740 --> 00:18:07,190 Und es tut mir leid, was ist Ihr Name? 408 00:18:07,190 --> 00:18:07,680 >> STUDENT 2: [? Ivay. ?] 409 00:18:07,680 --> 00:18:08,790 >> [? DAVID J MALAN: Ivay. ?] OK. 410 00:18:08,790 --> 00:18:10,430 Denn jetzt, wenn Sie nicht Geist, Sie sind GetString. 411 00:18:10,430 --> 00:18:11,013 >> STUDENT 2: OK. 412 00:18:11,013 --> 00:18:11,797 Cool. 413 00:18:11,797 --> 00:18:14,630 DAVID J MALAN: Also, wenn würden Sie gerne hier stehen nur für einen Augenblick, 414 00:18:14,630 --> 00:18:17,100 Werfen wir einen Blick auf eine etwas komplexeres Programm, daß 415 00:18:17,100 --> 00:18:18,670 hat jetzt drei Zeilen Code. 416 00:18:18,670 --> 00:18:24,080 So haben wir, ein, geben Sie Ihren Namen mit printf; zwei, ein Aufruf an GetString, 417 00:18:24,080 --> 00:18:28,060 gefolgt von einer Zuordnung zu einer Variable, String s oder s genannt; 418 00:18:28,060 --> 00:18:31,260 und dann ein weiterer Anruf an, printf, diesmal jedoch mit zwei Eingängen. 419 00:18:31,260 --> 00:18:33,646 >> So haben wir bereits getan Zustand Ihren Namen, oder besser gesagt, wir haben 420 00:18:33,646 --> 00:18:34,770 bereits eine printf getan. 421 00:18:34,770 --> 00:18:38,960 Also werde ich zu schreiben, geben Sie Ihren Namen. 422 00:18:38,960 --> 00:18:42,089 Und so, was ich zu gehen übergeben, printf, in nur einem Augenblick, 423 00:18:42,089 --> 00:18:43,005 ist schlicht und einfach, dies. 424 00:18:43,005 --> 00:18:47,760 Also, wenn Sie voran gehen und ziehen diese wollen auf dem Bildschirm, das ist jetzt Ihre Eingabe. 425 00:18:47,760 --> 00:18:48,260 Gut. 426 00:18:48,260 --> 00:18:51,160 Und vergessen Zeichenfolge, die wir jetzt haben unsere eigene Codezeile hier. 427 00:18:51,160 --> 00:18:54,470 Also, GetString, müssen wir tatsächlich zu nennen, GetString. 428 00:18:54,470 --> 00:18:57,920 Also Ihr Ziel im Leben ist es, nur zu Fuß in die Orchester, wenn du könntest, 429 00:18:57,920 --> 00:18:58,980 und erhalten Sie jemandes Namen. 430 00:18:58,980 --> 00:19:00,860 Aber lassen Sie uns Ihnen etwas, es anzuziehen. 431 00:19:00,860 --> 00:19:02,908 Wenn Sie möchten, gehen Sie voran und erhalten Sie eine Zeichenfolge, 432 00:19:02,908 --> 00:19:05,241 jemanden Namen auf, dass Stück Papier, wenn du könntest. 433 00:19:05,241 --> 00:19:12,940 434 00:19:12,940 --> 00:19:13,530 >> Gut. 435 00:19:13,530 --> 00:19:15,250 Und wir werden sehen, in nur einem Augenblick, dessen Namen wir bekommen. 436 00:19:15,250 --> 00:19:17,630 In der Zwischenzeit, was ich zu gehen müssen bereit sein, ein leeres Blatt 437 00:19:17,630 --> 00:19:21,340 Papier, bei dem werde ich zu speichern, was es Wert 438 00:19:21,340 --> 00:19:25,752 ist, dass GetString ist zu mir zurückkehrt, Ich, ein String-Variable genannt, s. 439 00:19:25,752 --> 00:19:26,252 Gut. 440 00:19:26,252 --> 00:19:27,293 So was tun Sie hier? 441 00:19:27,293 --> 00:19:27,950 Nik. 442 00:19:27,950 --> 00:19:28,450 Gut. 443 00:19:28,450 --> 00:19:30,910 So Niks Namen haben wir hier. 444 00:19:30,910 --> 00:19:33,750 Also das ist, was wörtlich zurückgeführt wurde 445 00:19:33,750 --> 00:19:35,810 zu mir, so zu sprechen, von GetString. 446 00:19:35,810 --> 00:19:38,720 >> Ich, jetzt werde führen Sie die linke Seite 447 00:19:38,720 --> 00:19:43,440 dieses Ausdrucks, wo ich einfach notieren, für heutige Zwecke, Nik. 448 00:19:43,440 --> 00:19:46,470 So, jetzt habe ich eine variable genannt, s, Nik Namen speichern. 449 00:19:46,470 --> 00:19:49,520 Ich habe bereits übergeben printf, eine vorherige Argument. 450 00:19:49,520 --> 00:19:52,800 Aber in unserem dritten und letzten Zeile des Code, habe ich eigentlich auf der Hand printf haben 451 00:19:52,800 --> 00:19:58,500 etwas ein wenig different-- "Hallo,% s" Backslash n. 452 00:19:58,500 --> 00:20:01,510 >> Und so ist die letzte Zeile Ich werde um das letzte, was ich bin send-- 453 00:20:01,510 --> 00:20:03,060 denn jetzt notieren, ist dies. 454 00:20:03,060 --> 00:20:06,310 So sind die beiden Codezeilen oder vielmehr die letzte Codezeile, 455 00:20:06,310 --> 00:20:10,690 Anrufe für zwei inputs-- eins, das, und zwei dieser. 456 00:20:10,690 --> 00:20:13,330 Also, wenn Sie unsere Funktion printf können nun diese als Eingabe, 457 00:20:13,330 --> 00:20:16,000 Lassen Sie mich klar den Bildschirm für Sie. 458 00:20:16,000 --> 00:20:17,250 Eigentlich nicht, können Sie weitermachen. 459 00:20:17,250 --> 00:20:19,333 Wir überlasse es, da es ist auf dem gleichen Programm. 460 00:20:19,333 --> 00:20:21,760 461 00:20:21,760 --> 00:20:27,380 Wir sollten sehen, hallo, Nik. 462 00:20:27,380 --> 00:20:27,880 Gut. 463 00:20:27,880 --> 00:20:29,670 Das war also eine ganze Reihe Reifen zu kurz springen, 464 00:20:29,670 --> 00:20:31,620 zu schreiben, geben Sie Ihre zu nennen, und, hallo, Nik. 465 00:20:31,620 --> 00:20:37,210 Aber diese einfache Idee des Message Passing, Eingangsübergang und Ausgangsempfangs, 466 00:20:37,210 --> 00:20:40,430 ist genau das Modell, das wir gehen zu müssen selbst für die komplexesten Funktionen. 467 00:20:40,430 --> 00:20:41,804 Also vielen Dank an euch beide. 468 00:20:41,804 --> 00:20:43,730 Wir haben einen schönen Stress Ball für Sie da. 469 00:20:43,730 --> 00:20:48,890 Und ich danke Ihnen für unsere GetString printf und Freiwillige gleichermaßen. 470 00:20:48,890 --> 00:20:49,551 Danke. 471 00:20:49,551 --> 00:20:50,050 Gut. 472 00:20:50,050 --> 00:20:50,966 Vielen Dank an euch beide. 473 00:20:50,966 --> 00:20:56,640 474 00:20:56,640 --> 00:21:00,430 >> Also haben wir gesprochen haben bisher, vor allem über Saiten. 475 00:21:00,430 --> 00:21:06,550 Und es stellt sich heraus, dass C tatsächlich verstehen, ein paar verschiedene Datentypen. 476 00:21:06,550 --> 00:21:08,860 In der Tat, lassen Sie uns eine an diese hier. 477 00:21:08,860 --> 00:21:12,490 So C, und eine Menge von Sprachen, verstehen, Dinge genannt chars. 478 00:21:12,490 --> 00:21:16,852 Ein Zeichen ist im Allgemeinen ein Single-Byte oder acht Bits. 479 00:21:16,852 --> 00:21:19,810 Und es steht für ein einzelnes Zeichen, wie der Buchstabe A, oder die Hauptstadt 480 00:21:19,810 --> 00:21:21,990 Buchstabe A, oder der Kleinbuchstabe A, oder einem Ausrufezeichen, 481 00:21:21,990 --> 00:21:25,440 oder ein beliebiges Zeichen, die Sie eingeben können Ihrer Tastatur, und manchmal sogar mehr. 482 00:21:25,440 --> 00:21:26,795 Wir zufällig auch Schwimmer zu sehen. 483 00:21:26,795 --> 00:21:31,160 Ein Schwimmer ist im Allgemeinen ein 32-Bit-Wert oder vier Bytes 484 00:21:31,160 --> 00:21:33,660 denn einmal ist ein Byte acht Bits. 485 00:21:33,660 --> 00:21:36,675 >> So ein Schwimmer ist ein Fließkommawert, etwas mit einem Komma. 486 00:21:36,675 --> 00:21:38,550 Und in der Tat, das ist was der Film wurde im Gespräch 487 00:21:38,550 --> 00:21:42,240 etwa wenn sie über schwimm sprachen Punktwerte, einige feste Anzahl von Bits 488 00:21:42,240 --> 00:21:43,940 verwendet wird, um eine reelle Zahl zu repräsentieren. 489 00:21:43,940 --> 00:21:45,740 Aber es gibt auch Dinge genannt Doppelzimmer. 490 00:21:45,740 --> 00:21:47,860 Diese gibt es in Java, wenn Sie APCS genommen haben, 491 00:21:47,860 --> 00:21:51,540 und eine doppelte, wie der Name zum Glück sagt, ist doppelt so groß wie einen Schwimmer. 492 00:21:51,540 --> 00:21:54,540 Es ist immer noch eine reelle Zahl, es muss nur mehr Bits 493 00:21:54,540 --> 00:21:58,390 mit denen jemals genauer oder auch größere Zahlen zu speichern. 494 00:21:58,390 --> 00:21:58,890 int ist einfach. 495 00:21:58,890 --> 00:22:00,181 Wir haben darüber gesprochen, dass das letzte Mal. 496 00:22:00,181 --> 00:22:01,160 Es ist nur eine Zahl. 497 00:22:01,160 --> 00:22:03,980 Und es ist in der Regel 32 Bits oder vier Bytes. 498 00:22:03,980 --> 00:22:07,850 >> Und so, wenn Sie haben, lassen Sie uns nun sehen, 32 bits-- und wir haben dies in Woche 0, 499 00:22:07,850 --> 00:22:10,820 noch so briefly-- wenn Sie 32 Bit, was ist der größte 500 00:22:10,820 --> 00:22:13,580 Nummer, die Sie als ganze Zahl darstellen kann? 501 00:22:13,580 --> 00:22:16,080 Geben oder nehmen? 502 00:22:16,080 --> 00:22:18,380 Es ist wie 4 Milliarden, und das ist nur, wenn wir 503 00:22:18,380 --> 00:22:20,690 was nur positive Zahlen. 504 00:22:20,690 --> 00:22:23,930 Wenn Sie 32 Bit, und Sie möchten repräsentieren negative Zahlen als gut, 505 00:22:23,930 --> 00:22:27,100 Ihren Bereich ist, im wesentlichen, negativen 2 Milliarden zu positiven 2 Milliarden. 506 00:22:27,100 --> 00:22:29,250 Aber im Allgemeinen, wir starten bei 0 gehen bis zu 4 Milliarden. 507 00:22:29,250 --> 00:22:32,400 >> Sie müssen nicht genau wissen, aber Wir können dies zu sehen, in der Tat, wenn ich nur 508 00:22:32,400 --> 00:22:36,400 eröffnen ein kleines Taschenrechner, hier. 509 00:22:36,400 --> 00:22:41,070 I 2 der 32 tun können, und das ist genau, wie groß, 510 00:22:41,070 --> 00:22:43,190 wie viele Werte möglich darstellen, mit 32 Bit. 511 00:22:43,190 --> 00:22:44,442 Und es ist ungefähr 4 Milliarden. 512 00:22:44,442 --> 00:22:46,900 Also werden wir sehen immer diese Zahl in einigen verschiedenen Orten. 513 00:22:46,900 --> 00:22:48,890 Aber wenn Sie mehr benötigen, Zahlen als das, 514 00:22:48,890 --> 00:22:51,670 es stellt sich heraus, es gibt so etwas wie eine lange, lange. 515 00:22:51,670 --> 00:22:54,005 Und ein langer, langer ist Regel 64 Bit, die 516 00:22:54,005 --> 00:22:56,380 bedeutet, es ist eine Größenordnung sogar größer als ein int. 517 00:22:56,380 --> 00:22:59,510 >> So kann ich nicht einmal das größte ausspricht Nummer, die Sie stellen können, 518 00:22:59,510 --> 00:23:01,340 aber es ist deutlich größer. 519 00:23:01,340 --> 00:23:05,190 Jetzt nebenbei, historisch, wenn ein int ist 32 Bit, 520 00:23:05,190 --> 00:23:12,780 und ein langer, langer 64 Bits, wie Big ist ein langer, nicht eine lange lange? 521 00:23:12,780 --> 00:23:16,500 522 00:23:16,500 --> 00:23:20,330 Sie würden denken, es ist mehr als ein int aber vielleicht weniger lang als ein langer, langer, 523 00:23:20,330 --> 00:23:21,400 aber es hängt wirklich. 524 00:23:21,400 --> 00:23:23,400 >> Und so stellt sich heraus, ein von den Frustrationen zu, 525 00:23:23,400 --> 00:23:26,830 mit dem Schreiben von Code auf bestimmten Systemen, ist, dass nicht alle diese Datentypen 526 00:23:26,830 --> 00:23:28,440 haben vor, eine ermittelten Werte. 527 00:23:28,440 --> 00:23:29,771 Manchmal ist es so viele Bits. 528 00:23:29,771 --> 00:23:31,020 Manchmal ist es, dass viele Bits. 529 00:23:31,020 --> 00:23:32,750 So haben Sie eigentlich wissen, manchmal, welche Hardware 530 00:23:32,750 --> 00:23:34,083 Sie laufen Ihre Software auf. 531 00:23:34,083 --> 00:23:36,960 Gott sei Dank, andere Sprachen und andere Datentypen, die heute existieren, 532 00:23:36,960 --> 00:23:38,400 können Sie um genauer zu sein. 533 00:23:38,400 --> 00:23:41,220 Nun haben wir gesehen, string, und wir sahen, bool, auch, 534 00:23:41,220 --> 00:23:43,960 aber es stellt sich heraus, denen kommen nur mit der CS50-Bibliothek. 535 00:23:43,960 --> 00:23:46,240 Das sind also nicht gebaut in C. Diejenigen, statt, 536 00:23:46,240 --> 00:23:49,340 kommen in dieser Datei mit dem Namen CS50.h, dass wir irgendwann 537 00:23:49,340 --> 00:23:51,831 Ziehen Sie die Schichten. 538 00:23:51,831 --> 00:23:53,830 Aber für jetzt, nur sind sie zusätzliche Datentypen. 539 00:23:53,830 --> 00:23:57,060 Ein bool ist ein wahr oder falsch ist, und eine String ist eine Folge von Zeichen, 540 00:23:57,060 --> 00:23:57,970 wie ein Wort. 541 00:23:57,970 --> 00:24:01,690 Jetzt printf, die wir gesehen haben, hat Platzhalter ist% s ein. 542 00:24:01,690 --> 00:24:05,430 Und Sie könnten in der Lage, zu sein, jetzt, folgern aus diesen anderen Beispielen, wie 543 00:24:05,430 --> 00:24:07,720 Sie könnten einen Platzhalter haben für unterschiedliche Datentypen. 544 00:24:07,720 --> 00:24:11,150 Nehmen Sie zum Beispiel eine Vermutung, wenn Sie wollte zum Ausdrucken eines einzelnen char mit 545 00:24:11,150 --> 00:24:15,270 printf, ist der Platzhalter wahrscheinlich% c. 546 00:24:15,270 --> 00:24:19,650 Und wenn Sie ausdrucken wollen ein ganze Zahl mit dem Platzhalter% i. 547 00:24:19,650 --> 00:24:25,150 % LLD ist ein langer, langer Dezimalwert, aber lange, lange, so dass Karten dazu. 548 00:24:25,150 --> 00:24:28,640 Und dann% f für schwimm Punktwert oder für ein Doppelzimmer, 549 00:24:28,640 --> 00:24:31,270 so dass manchmal sie wiederverwendet in unterschiedlichen Kontexten. 550 00:24:31,270 --> 00:24:33,350 Also werden wir sehen und benutzen einige von denen im Laufe der Zeit. 551 00:24:33,350 --> 00:24:36,420 Und printf und andere Funktionen auch Unterstützung anderer Escape-Sequenzen, 552 00:24:36,420 --> 00:24:38,080 und manchmal sind dies notwendig ist. 553 00:24:38,080 --> 00:24:39,770 So Backslash-n ist eine neue Linie. 554 00:24:39,770 --> 00:24:42,886 Backslash t, hat jemand wollen einen Stich zu nehmen? 555 00:24:42,886 --> 00:24:43,760 Zuschauer: Tab. 556 00:24:43,760 --> 00:24:44,551 DAVID J MALAN: Tab. 557 00:24:44,551 --> 00:24:46,810 Also, wenn Sie wirklich wollen, , drucken Sie eine Registerkarte, nicht 558 00:24:46,810 --> 00:24:49,940 eine feste Anzahl von Räumen, aber ein tatsächlicher Tab-Zeichen, Sie schlagen Sie nicht Ihre, 559 00:24:49,940 --> 00:24:53,490 Tab-Taste auf der Tastatur, in der Regel, Sie tatsächlich umgekehrten Schrägstrich t. 560 00:24:53,490 --> 00:24:57,750 Backslash doppelte Anführungszeichen, warum sollte ich überhaupt, dass? 561 00:24:57,750 --> 00:24:58,250 Recht? 562 00:24:58,250 --> 00:25:00,417 Warum kann ich nicht geben Sie nur ein Anführungszeichen auf meiner Tastatur? 563 00:25:00,417 --> 00:25:02,124 Zuschauer: Denn sonst ist es 564 00:25:02,124 --> 00:25:04,830 gehen zu denken, es ist das Ende der gerne Ihre Druck [? Text. ?] 565 00:25:04,830 --> 00:25:05,420 >> DAVID J MALAN: Genau. 566 00:25:05,420 --> 00:25:07,211 Denken Sie daran, mit unseren printf Beispielen als wir 567 00:25:07,211 --> 00:25:10,075 passierten im Eingangs printf, Links von diesem Eingabestring 568 00:25:10,075 --> 00:25:12,950 und auf der rechten Seite dieses Eingangs Frühling, natürlich, war ein doppeltes Anführungszeichen. 569 00:25:12,950 --> 00:25:16,270 Wenn Sie Ihre eigenen Eingang verfügt über ein Doppel Angebot in der Mitte, dass, 570 00:25:16,270 --> 00:25:18,920 der Computer möglicherweise potenziell verwirrt, um, 571 00:25:18,920 --> 00:25:20,760 funktioniert das doppelte Anführungszeichen gehören in der Mitte? 572 00:25:20,760 --> 00:25:22,150 Hat es mit der linken einen gehören? 573 00:25:22,150 --> 00:25:23,566 Hat es mit dem rechten gehören? 574 00:25:23,566 --> 00:25:26,780 Und so, wenn Sie es super machen wollen klare, Backslash doppelte Anführungszeichen sind Sie, 575 00:25:26,780 --> 00:25:30,480 so dass es entgangen, so zu sprechen, und es ist nicht für etwas anderes verschmolzen. 576 00:25:30,480 --> 00:25:34,400 Und es gibt noch ein paar andere hier, Backslash r, einfache Anführungszeichen, 0, 577 00:25:34,400 --> 00:25:36,510 dass wir im Laufe der Zeit zu sehen, wie gut. 578 00:25:36,510 --> 00:25:37,760 Und nun, was funktioniert? 579 00:25:37,760 --> 00:25:41,630 >> So Aktionen, die wir bisher zu nehmen in dieser Sprache, C, na ja, die wir gesehen haben, 580 00:25:41,630 --> 00:25:44,320 printf natürlich und alles von den anderen auf dem Bildschirm, 581 00:25:44,320 --> 00:25:47,140 hier, dass wir für den Gebrauch finden Nur ersten Wochen Kurs ist, 582 00:25:47,140 --> 00:25:48,485 kommen, wenn der CS50-Bibliothek. 583 00:25:48,485 --> 00:25:51,850 Und sie machen es viel leichter, in C, um tatsächlich eine Benutzereingabe. 584 00:25:51,850 --> 00:25:54,200 Es stellt sich heraus, dass in C, und ehrlich gesagt in wenigen Sprachen, 585 00:25:54,200 --> 00:25:57,450 es ist eine echte Schmerzen im Nacken zu tun etwas einfach, wie Aufforderung Benutzer 586 00:25:57,450 --> 00:26:01,310 für Tastatur, für seine oder ihre Eingabe. 587 00:26:01,310 --> 00:26:03,240 Und so sind diese Funktionen erleichtern. 588 00:26:03,240 --> 00:26:05,472 >> Und es hat auch Fehler Überprüfung im gesamten, 589 00:26:05,472 --> 00:26:07,180 so daß, wenn man erinnern, am Mittwoch, den wir 590 00:26:07,180 --> 00:26:09,740 sah das, versuchen, Warnung, wenn ich nicht kooperieren, 591 00:26:09,740 --> 00:26:11,700 und ich tippte ein Wort, statt eine Zahl? 592 00:26:11,700 --> 00:26:15,402 Wir haben die schwere Arbeit getan früh auf, um sicherzustellen, dass der Benutzer arbeitet. 593 00:26:15,402 --> 00:26:17,860 Aber das sind nur Ausbildungs Räder, dass wir irgendwann, 594 00:26:17,860 --> 00:26:19,640 und zwar schnell, ausziehen. 595 00:26:19,640 --> 00:26:22,630 >> So zu rekapitulieren, dann, lassen Sie uns einen kurzen Blick, 596 00:26:22,630 --> 00:26:26,620 ähnlich wie wir mit Scratch, bei did einige kanonische Konstrukte in C 597 00:26:26,620 --> 00:26:28,580 Dies soll, sortieren von weise eine rasante Tour, 598 00:26:28,580 --> 00:26:30,990 gerade so, dass Sie eine Referenz haben und dass Sie die Dinge auf den ersten gesehen habe. 599 00:26:30,990 --> 00:26:34,100 Aber dann werden wir zu Ist-Codierung zu suchen verwenden einige dieser Bausteine. 600 00:26:34,100 --> 00:26:36,710 So viel wie in Scratch, als wir Aussagen wie: 601 00:26:36,710 --> 00:26:41,570 sagen oder, zu warten, in C, haben wir Funktionen sowie, wie printf. 602 00:26:41,570 --> 00:26:45,350 >> Wenn wir, um eine Bedingung zum Ausdruck bringen wollen, in C, es ist ähnlich, im Geist, 603 00:26:45,350 --> 00:26:47,840 in diesem Puzzle-Stück, sah wie folgt in Scratch. 604 00:26:47,840 --> 00:26:49,850 Sondern wir buchstäblich nur schreiben, wenn. 605 00:26:49,850 --> 00:26:51,830 Und dann in Klammern wir einen Zustand, 606 00:26:51,830 --> 00:26:54,807 wobei diese Voraussetzung, was wir rufen, wieder ein boolscher Ausdruck ist. 607 00:26:54,807 --> 00:26:56,390 Und wieder ist diese Art von Pseudocode. 608 00:26:56,390 --> 00:26:58,830 Und in der Tat, ist die // ein Kommentar. 609 00:26:58,830 --> 00:27:00,550 Es ist nur englische Wörter, um mich. 610 00:27:00,550 --> 00:27:03,000 Aber dies ist die allgemeine Struktur eines Falls, Zustand. 611 00:27:03,000 --> 00:27:05,220 Aber wir werden sehen, Beton Beispiele in nur einem Augenblick. 612 00:27:05,220 --> 00:27:07,960 >> Wenn Sie eine haben wollen Zwei-Wege-Gabel in der Straße, 613 00:27:07,960 --> 00:27:11,740 ähnlich wie wir mit unseren Freiwilligen auf tat Mittwoch, können Sie eine haben, sonst, wenn. 614 00:27:11,740 --> 00:27:16,020 Und wenn Sie einen dritten haben wollen und Endzustand, oder Standard-Situation, 615 00:27:16,020 --> 00:27:19,006 können Sie einfach ein anderes Block haben, gibt. 616 00:27:19,006 --> 00:27:21,880 Und in ähnlicher Weise mit Booleschen Ausdrücken, Sie können, und, sie zusammen. 617 00:27:21,880 --> 00:27:24,296 Und wir sahen am Mittwoch, dass es ist nicht ein einzelnes und-Zeichen, 618 00:27:24,296 --> 00:27:28,220 es ist zwei, aus Gründen, auf niedrigerer Ebene, dass wir werden irgendwann zu sehen und spielen mit. 619 00:27:28,220 --> 00:27:30,410 Oder-ing Dinge zusammen 2 vertikale Balken. 620 00:27:30,410 --> 00:27:32,240 Auf US-Tastatur, diese ist im Allgemeinen ein Tasten 621 00:27:32,240 --> 00:27:35,730 mit der Shift-Taste oben Ihre Eingabe oder Return-Taste. 622 00:27:35,730 --> 00:27:38,620 >> Dann ist da noch diese Dinge, werden wir vielleicht einmal oder zweimal zu verwenden. 623 00:27:38,620 --> 00:27:42,570 Sie sind funktionell gleichwertig was man mit einem zu tun, wenn else if, 624 00:27:42,570 --> 00:27:44,950 else if anderes, konstruieren, aber sie sind auch als Schalter. 625 00:27:44,950 --> 00:27:48,020 Sie sehen sehr unterschiedlich, aber wir werden zu sehen in einigen unserer Vertriebscode, 626 00:27:48,020 --> 00:27:51,890 für eine zukünftige Problemsatz, wahrscheinlich, dass es manchmal nur ein hübscher 627 00:27:51,890 --> 00:27:54,060 über eine ganze exprimierenden Bündel von Bedingungen, 628 00:27:54,060 --> 00:27:57,590 ohne dass eine Menge von geschweiften Klammern und eine Menge von Klammern und Einrückungen. 629 00:27:57,590 --> 00:28:01,910 Sie haben uns aber geben Sie nicht mehr Leistung als wir bereits haben. 630 00:28:01,910 --> 00:28:02,550 Und jetzt Schleifen. 631 00:28:02,550 --> 00:28:05,020 Und dieses, wir freuen an einer etwas langsamer. 632 00:28:05,020 --> 00:28:08,470 Aber dann werden wir beginnen, diese zu verwenden, vor allem für diejenigen bereits vertraut. 633 00:28:08,470 --> 00:28:13,830 Dies ist der übliche Weg, wenn unglaublich Arkane Weg, um eine Schleife in C schreiben 634 00:28:13,830 --> 00:28:15,896 >> Jetzt war eine Schleife in Scratch ziemlich einfach. 635 00:28:15,896 --> 00:28:17,020 Sie haben eine, für immer, Block. 636 00:28:17,020 --> 00:28:19,760 Sie haben eine, wiederholen, Block mit nur eine Nummer, müssen Sie eintippen. 637 00:28:19,760 --> 00:28:22,220 Und mit dem, for-Schleife, können Sie implementieren diese beiden Ideen, 638 00:28:22,220 --> 00:28:23,595 aber es ist ein wenig technisch. 639 00:28:23,595 --> 00:28:25,994 Aber ehrlich gesagt, ist es auch relativ einfach. 640 00:28:25,994 --> 00:28:28,160 Wenn Sie die Reihenfolge der weiß, Operationen, Sie buchstäblich 641 00:28:28,160 --> 00:28:30,910 sind gerade dabei, in Werte stecken und sagen dem Computer, was zu tun ist. 642 00:28:30,910 --> 00:28:32,800 Also hier ist ein Beispiel. 643 00:28:32,800 --> 00:28:38,040 Dies ist eine Schleife, die ganz einfach, zählt von einer Zahl up 644 00:28:38,040 --> 00:28:40,187 durch eine andere. 645 00:28:40,187 --> 00:28:42,020 Und nur durch einen Blick auf sie, auch wenn Sie 646 00:28:42,020 --> 00:28:44,660 keine vorherige Erfahrung mit Diese Sprache, welche Nummer 647 00:28:44,660 --> 00:28:46,920 ist es wahrscheinlich anfangen zu zählen an? 648 00:28:46,920 --> 00:28:47,730 OK, 0. 649 00:28:47,730 --> 00:28:50,240 Und ich vermute, dass ist, weil Sie sehen, dass es ein int und ein i, 650 00:28:50,240 --> 00:28:51,073 Das ist eine Variable. 651 00:28:51,073 --> 00:28:52,390 Es wird auf 0 initialisiert. 652 00:28:52,390 --> 00:28:55,670 >> Und dann später, sieht es wie wir vorbei printf, Wert. 653 00:28:55,670 --> 00:28:58,000 Und in der Tat, ich habe ein wenig Tippfehler hier. 654 00:28:58,000 --> 00:28:59,850 Aber das ist leicht zu beheben. 655 00:28:59,850 --> 00:29:02,390 Lassen Sie mich hier hinzufügen in, i. 656 00:29:02,390 --> 00:29:06,150 Wir haben jetzt printf Befinden bestanden, dass die Platzhalterwert. 657 00:29:06,150 --> 00:29:08,299 Und, was los ist, um durch Hochzählen? 658 00:29:08,299 --> 00:29:08,840 ZIELGRUPPE: 50. 659 00:29:08,840 --> 00:29:09,340 50. 660 00:29:09,340 --> 00:29:10,160 49. 661 00:29:10,160 --> 00:29:10,910 DAVID J MALAN: 49. 662 00:29:10,910 --> 00:29:13,340 So 50, auf den ersten Blick scheint recht. 663 00:29:13,340 --> 00:29:16,990 Aber das, es stellt sich heraus, sein wird, unsere Bedingung, dass wir immer mal. 664 00:29:16,990 --> 00:29:21,740 Und wir werden noch einmal zu stoppen i nicht mehr kleiner als 50. 665 00:29:21,740 --> 00:29:24,920 Also diese Schleife, Umgekehrt sollten auszuführen, solange i kleiner als 50 ist. 666 00:29:24,920 --> 00:29:28,891 Aber sobald es wird 50 oder 51, oder noch schlimmer, sollte es automatisch gestoppt. 667 00:29:28,891 --> 00:29:29,390 Gut. 668 00:29:29,390 --> 00:29:31,200 >> Also, was passiert eigentlich hier? 669 00:29:31,200 --> 00:29:33,160 Das ist also die Reihenfolge der Operationen für eine Schleife. 670 00:29:33,160 --> 00:29:35,440 Einer, müssen Sie die sogenannte Initialisierung. 671 00:29:35,440 --> 00:29:38,264 Diese gelb markiert chunk Code zuerst ausgeführt wird, 672 00:29:38,264 --> 00:29:40,930 und es wird bewirkt, dass, je besitzt Mittwoch, den Sie sich wahrscheinlich vorstellen. 673 00:29:40,930 --> 00:29:45,500 Es erstellt eine Variable namens i und es Filialen in diese Variable den Wert 0. 674 00:29:45,500 --> 00:29:47,560 Also ist i 0 an diesem Punkt in der Geschichte. 675 00:29:47,560 --> 00:29:49,680 >> Das nächste, was geschieht in diesem Konstrukt, 676 00:29:49,680 --> 00:29:51,540 ist, dass die Bedingung geprüft wird. 677 00:29:51,540 --> 00:29:54,325 So lese ich sofort, i ist kleiner als 50? 678 00:29:54,325 --> 00:29:57,700 Und natürlich die Antwort denn nun ist, sicher, ja. 679 00:29:57,700 --> 00:30:00,710 Ja, weil ich gleich 0 ist, und das ist sicherlich weniger als 50. 680 00:30:00,710 --> 00:30:03,866 Was dann der Fall ist, ist, dass diese Zeile Code wird ausgeführt. 681 00:30:03,866 --> 00:30:06,740 Und in der Tat, wenn es mehrfache Codezeilen in diesen geschweiften Klammern, 682 00:30:06,740 --> 00:30:09,020 sie alle nacheinander ausgeführt zu werden. 683 00:30:09,020 --> 00:30:11,450 >> Und in der Wirkung hier ist offenbar, zum Ausdrucken 684 00:30:11,450 --> 00:30:15,365 die Zahl i, die zu gehen ist, 0, und dann 1, dann 2. 685 00:30:15,365 --> 00:30:15,865 Aber warum? 686 00:30:15,865 --> 00:30:17,410 Warum dauert es erhöht werden? 687 00:30:17,410 --> 00:30:20,680 Nun, die vierte Sache, passiert ist, dass diese Syntax 688 00:30:20,680 --> 00:30:22,610 wird ausgeführt, nach dem Semikolon. 689 00:30:22,610 --> 00:30:27,506 i ++ ist eine Kurz Art zu sagen; nehmen Sie den Wert von i, und fügen Sie 1, um sie; 690 00:30:27,506 --> 00:30:30,380 und dann wird das nächste Mal, fügen Sie 1, um sie; und das nächste Mal, 691 00:30:30,380 --> 00:30:31,330 Hinzufügen 1, um sie. 692 00:30:31,330 --> 00:30:33,640 >> Also, wenn wir weiter gehen, was passieren wird 693 00:30:33,640 --> 00:30:35,890 nächste ist Ich bin nicht zu gehen initialisieren i nie wieder. 694 00:30:35,890 --> 00:30:38,290 Wenn ich hielt Initialisierung i auf 0, dieses Beispiel 695 00:30:38,290 --> 00:30:41,110 würde nie enden, weil Ich würde bei 0 geklebt werden. 696 00:30:41,110 --> 00:30:43,870 Aber was wird geschehen ist dass der Zustand überprüft wird, 697 00:30:43,870 --> 00:30:54,280 die Codezeile ausgeführt zu werden, die i inkrementiert, 698 00:30:54,280 --> 00:30:56,970 Zustand wird überprüft, Code ausgeführt zu werden. 699 00:30:56,970 --> 00:30:59,790 Und es hielt Radfahren wieder, und wieder und wieder 700 00:30:59,790 --> 00:31:03,340 bis i ++ induziert einen Wert von 50. 701 00:31:03,340 --> 00:31:05,870 >> Die Bedingung sagt dann: 50 weniger als 50? 702 00:31:05,870 --> 00:31:09,360 Die Antwort natürlich NEIN und so dass die ganze Code stoppt die Ausführung. 703 00:31:09,360 --> 00:31:13,020 Und wenn Sie mehr Code auf dem Bildschirm haben, unten ist das, was als nächstes passiert. 704 00:31:13,020 --> 00:31:17,530 Sie herausspringt dieser geschweiften Klammern und weiterhin mehr danach zu drucken. 705 00:31:17,530 --> 00:31:20,470 >> So ein Witz jetzt, von Foxtrott, dass Sie werden jetzt vielleicht verstehen. 706 00:31:20,470 --> 00:31:30,810 707 00:31:30,810 --> 00:31:31,560 Es ist immer lustig. 708 00:31:31,560 --> 00:31:34,110 Es ist wie die kichert Art versickern, 709 00:31:34,110 --> 00:31:38,370 und dann können Sie feststellen, dass Sie sollten nicht zumin Humor so lachen. 710 00:31:38,370 --> 00:31:41,160 Aber es gibt einige Lieferservice hier, pädagogisch, auch. 711 00:31:41,160 --> 00:31:43,577 So stellt sich heraus, dass ich fehlt ein Stück der Syntax, 712 00:31:43,577 --> 00:31:45,410 oder FoxTrot die fehlenden ein Stück Syntax hier. 713 00:31:45,410 --> 00:31:48,076 Was fehlt, dass wir je hatten in jedem anderen Beispiel bisher? 714 00:31:48,076 --> 00:31:51,599 715 00:31:51,599 --> 00:31:53,390 Dafür gibt es, so das ist etwas anderes, 716 00:31:53,390 --> 00:31:54,440 dass wir zurück in Kürze kommen. 717 00:31:54,440 --> 00:31:55,398 Was noch fehlt, obwohl? 718 00:31:55,398 --> 00:31:55,908 Ja. 719 00:31:55,908 --> 00:31:58,150 >> Zuschauer: Die Initialisierung [unverständlich]. 720 00:31:58,150 --> 00:31:58,470 >> DAVID J MALAN: OK. 721 00:31:58,470 --> 00:31:58,980 Also ja. 722 00:31:58,980 --> 00:32:03,210 Also eigentlich, diese ist-- Nun, und Zählung initialisiert 723 00:32:03,210 --> 00:32:05,470 oben, oder besser gesagt, erklärt oben. 724 00:32:05,470 --> 00:32:06,960 Also das ist ein weiterer Weg, es zu tun. 725 00:32:06,960 --> 00:32:08,685 Aber nicht in einer Linie ist es gültig, wenn. 726 00:32:08,685 --> 00:32:09,310 Wie wäre es hier? 727 00:32:09,310 --> 00:32:10,196 >> Zuschauer: Ist es die geschweiften Klammern? 728 00:32:10,196 --> 00:32:10,640 >> DAVID J MALAN: Ja. 729 00:32:10,640 --> 00:32:12,080 So sind die geschweiften Klammern fehlen. 730 00:32:12,080 --> 00:32:15,495 Aber dieser Code, ich meine, um ihre Kredit, ist eigentlich, syntaktisch gültig. 731 00:32:15,495 --> 00:32:17,610 Es stellt sich heraus, Sie dies nicht tun müssen die geschweiften Klammern 732 00:32:17,610 --> 00:32:21,691 wenn Sie nur eine Zeile Code, Sie Innenseite der Schleife ausgeführt werden soll. 733 00:32:21,691 --> 00:32:24,190 Jetzt sind wir immer in der Klasse und in alle unsere Vertriebscode, 734 00:32:24,190 --> 00:32:26,730 sind die geschweiften Klammern wie auch immer, nur aus Gründen der Übersichtlichkeit. 735 00:32:26,730 --> 00:32:29,010 Aber klar, dass in den Lehrbüchern und Online-Beispiele 736 00:32:29,010 --> 00:32:31,300 können Sie sehr gut sehen, lockig Hosenträger fehlt irgendwann. 737 00:32:31,300 --> 00:32:34,850 Und das ist in Ordnung, wenn, was Sie haben eingerückt und bestimmt 738 00:32:34,850 --> 00:32:38,650 ist nur eine einzige Zeile Code, und nicht mehrere Zeilen Code, die möglicherweise. 739 00:32:38,650 --> 00:32:39,150 Gut. 740 00:32:39,150 --> 00:32:44,500 So im Zusammenhang mit der Ausgabe von Ungenauigkeit, ist eine Frage der Überlauf, 741 00:32:44,500 --> 00:32:48,560 in dem Sinne, dass, ähnlich, Sie Zahlen haben Grenzen, um sie 742 00:32:48,560 --> 00:32:49,970 wie Fließkommazahlen? 743 00:32:49,970 --> 00:32:53,120 In der Welt, eine Gleitkomma- Werte, können wir nur so genau zu sein, 744 00:32:53,120 --> 00:32:55,710 worauf manchmal schlechte Dinge passieren können, 745 00:32:55,710 --> 00:32:57,760 und unsere Programme können fehlerhaft und Irrtum. 746 00:32:57,760 --> 00:33:00,050 Jetzt noch mit ganzen Zahlen, können Sie auf Probleme stoßen. 747 00:33:00,050 --> 00:33:03,820 Jetzt eine ganze Zahl nicht über eine Komma oder Zahlen, nachdem es. 748 00:33:03,820 --> 00:33:07,130 Es ist nur eine natürliche Zahl ist, in der Regel. 749 00:33:07,130 --> 00:33:09,430 Also, was mit einem int gehen könnte? 750 00:33:09,430 --> 00:33:12,210 Wenn ich mit einem int zu zählen, was schief gehen könnte? 751 00:33:12,210 --> 00:33:13,230 Scheint viel einfacher. 752 00:33:13,230 --> 00:33:13,873 Ja. 753 00:33:13,873 --> 00:33:16,240 >> Zuschauer: Wenn die Nummer bekommt [unverständlich] 754 00:33:16,240 --> 00:33:17,073 >> DAVID J MALAN: Ja. 755 00:33:17,073 --> 00:33:20,820 Was, wenn Sie so hoch zu zählen, dass Sie kann gar nicht ausdrücken, dass wirklich große Nummer. 756 00:33:20,820 --> 00:33:21,320 Recht? 757 00:33:21,320 --> 00:33:23,910 An einem gewissen Punkt, Sie gehen die Grenzen überschreiten, 758 00:33:23,910 --> 00:33:27,077 einer 32-Bit-Wert oder einen 64-Bit-Wert. 759 00:33:27,077 --> 00:33:29,410 Jetzt noch einmal, ich bin nicht sicher, wie um eine 64-Bit-Wert ausspricht, 760 00:33:29,410 --> 00:33:32,230 aber ich weiß, mit einem 32-Bit-Ganzzahl, der größte Wert es sein kann, 761 00:33:32,230 --> 00:33:35,490 wenn es nur positive Werte, ist in etwa 4 Milliarden. 762 00:33:35,490 --> 00:33:39,000 Also, wenn ich versuche, auf 5 Milliarden zählen, etwas passieren wird. 763 00:33:39,000 --> 00:33:41,050 Aber mal sehen, was in der Tat, kann passieren. 764 00:33:41,050 --> 00:33:44,570 In der Welt der ganzzahligen Überlauf, in dem Sie, in gewissem Sinne, 765 00:33:44,570 --> 00:33:48,270 Überlauf der Kapazität eines integer, was passieren könnte,? 766 00:33:48,270 --> 00:33:51,190 >> Also hier ist eine binäre Zahl, es ist ein Rückschritt zu 0. 767 00:33:51,190 --> 00:33:54,630 Es ist alle 1 ist, und die Platzhalter es sind Potenzen von 2, 768 00:33:54,630 --> 00:33:55,980 so ist dies binär. 769 00:33:55,980 --> 00:33:59,416 Das sind also 8, 1-Bits auf dem Bildschirm. 770 00:33:59,416 --> 00:34:01,290 Und wenn Sie sich daran erinnern, oder Sie schnell die Mathematik, 771 00:34:01,290 --> 00:34:06,074 welchen Wert der sich vertreten lässt hier mit diesen acht 1 Bit? 772 00:34:06,074 --> 00:34:06,950 255. 773 00:34:06,950 --> 00:34:09,260 Und selbst wenn Sie nicht ganz sicher, der Mathematik, können Sie es tun könnte. 774 00:34:09,260 --> 00:34:10,550 Oder Sie könnten nur solche der Vernunft durch sie, 775 00:34:10,550 --> 00:34:12,633 warten Sie eine Minute, wenn ich was einem 8-Bit-Wert, 776 00:34:12,633 --> 00:34:17,750 und ich habe 256 mögliche Werte hat, aber von denen die erste gleich 0 ist, 777 00:34:17,750 --> 00:34:19,909 Ich weiß nur, dass die größten wird zu 255 sein, 778 00:34:19,909 --> 00:34:21,510 und das ist, was dieses sein könnte. 779 00:34:21,510 --> 00:34:26,060 >> Also nehme ich versuche, ein auf diesen Wert hinzuzufügen. 780 00:34:26,060 --> 00:34:28,750 Was würden Sie tun, in die Besoldungsgruppe Schule beim Hinzufügen eines 1, und es 781 00:34:28,750 --> 00:34:31,139 nicht wirklich passen, weil müssen Sie die 1 zu tragen? 782 00:34:31,139 --> 00:34:34,380 Was ist diese Zahl gehen zu werden, wenn Sie 1 hinzufügen? 783 00:34:34,380 --> 00:34:37,030 Es wird auf 0 zu werden. 784 00:34:37,030 --> 00:34:37,530 Recht? 785 00:34:37,530 --> 00:34:41,139 Denn wenn Sie hatte mehr bits-- und ich werde versuchen Sie, eine Art, geben Sie es aus hier-- 786 00:34:41,139 --> 00:34:44,710 wenn wir mehr Bits, was wir könnte hier zu tun ist, fügen Sie die 1, 787 00:34:44,710 --> 00:34:47,370 und dann würden wir diese. 788 00:34:47,370 --> 00:34:48,739 Whoops. 789 00:34:48,739 --> 00:34:52,250 Wir würden ein 1-Bit den ganzen Weg hier zu haben. 790 00:34:52,250 --> 00:34:55,530 >> Sollte dies jedoch eine endliche Wert, es ist nur 8 Bit, 791 00:34:55,530 --> 00:34:57,480 und das ist, vorher festgelegten durch den Computer, 792 00:34:57,480 --> 00:34:59,370 dass 1 ist effektiv nicht da. 793 00:34:59,370 --> 00:35:00,980 Es fällt nur eine Art von einer Klippe. 794 00:35:00,980 --> 00:35:05,480 Und so, wenn Sie 1 bis 255 addieren, was Wert haben Sie offenbar zu bekommen? 795 00:35:05,480 --> 00:35:06,180 0. 796 00:35:06,180 --> 00:35:09,700 Und so Nummern versehentlich, und vielleicht unabsichtlich 797 00:35:09,700 --> 00:35:12,040 Ende Umwickeln wie diese. 798 00:35:12,040 --> 00:35:14,079 Also, was können die Implikation dieses sein? 799 00:35:14,079 --> 00:35:15,620 Nun, es gibt ein paar andere Dinge. 800 00:35:15,620 --> 00:35:18,751 So eins, es ist am Ende der Suche wie 0, unabsichtlich, 801 00:35:18,751 --> 00:35:20,750 aber Sie können Art zu sehen, auch in der realen Welt, 802 00:35:20,750 --> 00:35:23,416 zum Guten oder zum Schlechten, Erscheinungsformen dieser Idee einer Begrenzung. 803 00:35:23,416 --> 00:35:26,630 Zum Beispiel jeder von Ihnen, je gespielt habe Lego Star Wars, 804 00:35:26,630 --> 00:35:28,880 Hat jemand zufällig weiß die maximale Anzahl von Münzen, 805 00:35:28,880 --> 00:35:32,032 Sie in Lego Star Wars sammeln können? 806 00:35:32,032 --> 00:35:35,640 Nehmen Sie eine Vermutung auf der Grundlage heute zu den führenden Fragen. 807 00:35:35,640 --> 00:35:39,140 Es ist größer als 256 oder 255. 808 00:35:39,140 --> 00:35:40,330 Es ist 4 Milliarden. 809 00:35:40,330 --> 00:35:42,080 So stellt sich heraus, und es gibt einige people-- 810 00:35:42,080 --> 00:35:46,080 einige googeln bestätigt letzten night-- haben 4 Milliarden Goldmünzen bekommen, 811 00:35:46,080 --> 00:35:47,730 oder Dingsbums, in Lego Star Wars. 812 00:35:47,730 --> 00:35:49,860 Obwohl es scheint, gibt es ein Weg, um das Spiel zu überlisten, 813 00:35:49,860 --> 00:35:53,222 es gibt einen Bug oder Feature, Sie können, dass gerade erwachsen viele, viele Punkte. 814 00:35:53,222 --> 00:35:54,930 Aber die größtmögliche Wert nach 815 00:35:54,930 --> 00:35:58,360 zu diesem Screenshot von jemandem, den ich online zu finden, ist in der Tat, 4 Milliarden. 816 00:35:58,360 --> 00:35:59,240 >> Nun, warum ist das so? 817 00:35:59,240 --> 00:36:03,040 Es ist genau 4 Milliarden, wahrscheinlich, weil jemand beschlossen, 818 00:36:03,040 --> 00:36:05,500 , die Schrift war dieses Spiel, dass sie 4 Mrd. tun konnte, 819 00:36:05,500 --> 00:36:07,340 etwas, etwas, etwas, wie der Wert I Aufmachungen 820 00:36:07,340 --> 00:36:10,256 mit dem Rechner früher, aber es ist nur ein wenig sauberer für den Menschen 821 00:36:10,256 --> 00:36:12,610 die maximale Anzahl sagen von coins-- oder Bolzen, 822 00:36:12,610 --> 00:36:14,860 wie sie es nennen them--, dass Sie können sammeln 4 Milliarden. 823 00:36:14,860 --> 00:36:16,290 Und so, warum ist das? 824 00:36:16,290 --> 00:36:20,310 Wie ist die LEGO-Spiel Umsetzung des Zählers 825 00:36:20,310 --> 00:36:23,420 das ist die Verfolgung der Anzahl der Münzen Sie haben? 826 00:36:23,420 --> 00:36:24,266 Sie benutzen, was? 827 00:36:24,266 --> 00:36:26,390 Zuschauer: Es stoppt Zählen nach dem 4 Milliarden. 828 00:36:26,390 --> 00:36:27,720 DAVID J MALAN: Es stoppt Zählen nach dem 4 Milliarden, 829 00:36:27,720 --> 00:36:29,525 das heißt, Sie können folgern, als Programmierer, 830 00:36:29,525 --> 00:36:31,960 dass sie wahrscheinlich mit einem 32-Bit-Ganzzahl. 831 00:36:31,960 --> 00:36:35,380 Wie der Programmierer buchstäblich nur typisierte, int, in seinem Code, 832 00:36:35,380 --> 00:36:39,620 und das ist die Art der Variable, sie verwenden, um jemandes Code zu speichern. 833 00:36:39,620 --> 00:36:42,230 Es gibt also andere Erscheinungen dieser Art von Grenzen. 834 00:36:42,230 --> 00:36:45,063 >> So habe ich nicht dieses game-- gespielt und ich über die Geschichte liest up wurde 835 00:36:45,063 --> 00:36:48,470 als much-- aber in der Bestätigung original Version von Civilization, wo 836 00:36:48,470 --> 00:36:53,240 Sie scheint die Interaktion mit jedem anderen und Krieg zu führen oder Frieden, 837 00:36:53,240 --> 00:36:56,590 Gandhi sollte einer sein, ruhigsten Zeichen, wie ich 838 00:36:56,590 --> 00:36:59,280 verstehen, in der ersten Version von Civilization. 839 00:36:59,280 --> 00:37:03,250 Und in der Tat, auf einer Skala von 1 bis 10, seine Aggressivität war nur ein 1. 840 00:37:03,250 --> 00:37:05,620 Also noch so mild aggressiv, offenbar. 841 00:37:05,620 --> 00:37:11,590 >> Aber irgendwann, kannst du anscheinend Installieren der Demokratie in Ihrem Geographie. 842 00:37:11,590 --> 00:37:14,900 Und wenn man die Demokratie zu installieren in Ihre Version des Spiels, 843 00:37:14,900 --> 00:37:17,320 dann geht Ihre Aggression Ebene tiefer. 844 00:37:17,320 --> 00:37:18,460 Es ist eine gute Sache. 845 00:37:18,460 --> 00:37:20,890 Die Menschen sind eher still offenbar in dieser Situation. 846 00:37:20,890 --> 00:37:23,190 Aber anscheinend hat jemand nicht eine, wenn, Zustand 847 00:37:23,190 --> 00:37:24,780 in der ursprünglichen Version des Codes. 848 00:37:24,780 --> 00:37:30,650 >> So Gandhis Aggressionspegel ging positiv 1, minus 2, um negative 1, 849 00:37:30,650 --> 00:37:33,840 aber das Spiel nicht verstehen, negative Zahlen. 850 00:37:33,840 --> 00:37:38,680 Also, was passiert war Gandhis Aggression Ebene ging von 1, 0, 1, negative, 851 00:37:38,680 --> 00:37:40,900 was den Effekt hatten Umwickeln zum Sein 852 00:37:40,900 --> 00:37:44,690 die aggressiven Charakter im Spiel, bei einem Wert von 255, 853 00:37:44,690 --> 00:37:46,630 auf einer Skala von 1 bis 10. 854 00:37:46,630 --> 00:37:49,887 Und seitdem es ist schon mehr Inkarnationen von diesem Spiel 855 00:37:49,887 --> 00:37:51,720 und sie es als gehalten habe eine Art Osterei, 856 00:37:51,720 --> 00:37:53,870 daß Gandhi offenbar so furchtbar aggressiv. 857 00:37:53,870 --> 00:37:56,740 Aber es war das Ergebnis ein sehr einfache Programmierfehler 858 00:37:56,740 --> 00:37:58,630 in dieser sehr frühen Version des Spiels. 859 00:37:58,630 --> 00:38:02,860 >> Jetzt noch beunruhigender ist, mehr Vor kurzem hat die Boeing 787 860 00:38:02,860 --> 00:38:05,720 wurde mit einer dokumentierten Fehler, nicht die Art von Gerät 861 00:38:05,720 --> 00:38:07,340 Sie möchte vor allem einen Fehler haben. 862 00:38:07,340 --> 00:38:10,130 Und die Symptome, dass ich lesen hier, aus einem Artikel online, 863 00:38:10,130 --> 00:38:13,840 war dies ein Modell 787 Flug dass wurde ständig mit Energie versorgt 864 00:38:13,840 --> 00:38:18,030 für 248 Tage alle verlieren können Wechselstrom, AC, 865 00:38:18,030 --> 00:38:20,850 Strom, aufgrund die Generatorsteuereinheiten, 866 00:38:20,850 --> 00:38:23,330 GCUs gleichzeitig gehen in fehlersicheren Betrieb. 867 00:38:23,330 --> 00:38:26,790 Das war also eine Warnung ausgegeben Wenn dieses Problem entdeckt. 868 00:38:26,790 --> 00:38:28,750 Dieser Zustand wird verursacht, durch ein Software-Zähler, 869 00:38:28,750 --> 00:38:32,230 innerhalb des GCUs, so eine ganze Zahl oder eine Variable, 870 00:38:32,230 --> 00:38:36,850 das wird nach dem Überlauf 248 Tage der Dauerleistung. 871 00:38:36,850 --> 00:38:40,350 Boeing ist in dem Verfahren der Entwicklung einer Software-Upgrade, das AVV- 872 00:38:40,350 --> 00:38:42,350 den unsicheren Zustand zu beheben. 873 00:38:42,350 --> 00:38:44,226 >> So viel wie die Raketen Szenario, bei dem 874 00:38:44,226 --> 00:38:46,850 sie irgendeine Art von variablen hatten das war zu zählen, und das Zählen, 875 00:38:46,850 --> 00:38:50,720 und Zählen, aber allmählich überfüllt die Grenzen ihrer Leistungsfähigkeit, 876 00:38:50,720 --> 00:38:54,890 ähnlich war das verdammte Flugzeug eine variable Überlauf 877 00:38:54,890 --> 00:38:56,410 Nach genügend Zeit des Laufens. 878 00:38:56,410 --> 00:38:59,240 Und so ist die tongue-in-cheek Weg arbeiten, um dieses Problem 879 00:38:59,240 --> 00:39:04,400 ist es wirklich, Neustart, Ihr Flugzeug jeden 247 Tage, so daß der Speicher wird abgewischt 880 00:39:04,400 --> 00:39:06,100 und die Variable geht zurück auf 0. 881 00:39:06,100 --> 00:39:09,410 Aber erkennen, ist dies eine sehr große Inkarnation von Software, 882 00:39:09,410 --> 00:39:14,070 vor allem aber, wie wir über Apples hören Betriebssysteme gehen in Autos, 883 00:39:14,070 --> 00:39:18,030 und selbstfahrenden Autos von Google, und eine beliebige Anzahl von Inkarnationen von Software- 884 00:39:18,030 --> 00:39:21,000 in unserem täglichen Leben, TV und Uhren, und mehr, 885 00:39:21,000 --> 00:39:24,950 erkennen, wurden von Software umgeben, All das wird von uns Menschen geschrieben. 886 00:39:24,950 --> 00:39:28,150 >> Und so werden wir alle bald entdecken, es ist sehr einfach und sehr typisch 887 00:39:28,150 --> 00:39:30,250 , Fehler zu machen, wenn das Schreiben von Software. 888 00:39:30,250 --> 00:39:32,745 Und wenn Sie nicht fangen sie, einige schlechte Dinge passieren können. 889 00:39:32,745 --> 00:39:35,400 Jetzt manchmal, einige lustige Dinge passieren können, 890 00:39:35,400 --> 00:39:38,280 oder zumindest manchmal haben wir weiß, einige Schlechtigkeit erwartet. 891 00:39:38,280 --> 00:39:41,550 So 0 geteilt durch 0, ab Klasse Schule, ist in der Regel eine schlechte Sache. 892 00:39:41,550 --> 00:39:43,050 Es ist nicht definiert. 893 00:39:43,050 --> 00:39:46,440 Und es stellt sich out-- und lassen Sie uns sehen, wenn mein Mikrofon kann diese abholen up-- dass Apple 894 00:39:46,440 --> 00:39:47,790 hatte etwas Spaß mit diesem vor kurzem. 895 00:39:47,790 --> 00:39:48,850 Also ich habe ein iPhone hier. 896 00:39:48,850 --> 00:39:54,160 Ich werde zu Siri sprechen und sie fragen mir die Antwort auf 0 geteilt durch 0 zu geben. 897 00:39:54,160 --> 00:39:55,850 Was ist 0 geteilt durch 0? 898 00:39:55,850 --> 00:39:59,350 899 00:39:59,350 --> 00:40:02,230 >> SIRI: Stellen Sie sich vor, dass Sie 0 haben Cookies, und Sie sie gleichmäßig aufgeteilt 900 00:40:02,230 --> 00:40:03,540 unter 0 Freunde. 901 00:40:03,540 --> 00:40:05,810 Wie viele Cookies ist jede Person zu bekommen? 902 00:40:05,810 --> 00:40:06,350 Sehen? 903 00:40:06,350 --> 00:40:07,660 Es ist nicht sinnvoll. 904 00:40:07,660 --> 00:40:10,540 Und Cookie Monster ist traurig dass es keine Cookies. 905 00:40:10,540 --> 00:40:13,987 Und du traurig, dass es Sie haben noch keine Freunde. 906 00:40:13,987 --> 00:40:15,570 DAVID J MALAN: Es ist irgendwie widerlich. 907 00:40:15,570 --> 00:40:17,550 Also das ist, was gerade gesagt gibt. 908 00:40:17,550 --> 00:40:21,380 Es ist unbestimmt, es ist nicht festgelegt, und in der Tat, viele Programmiersprachen 909 00:40:21,380 --> 00:40:24,950 oder, wirklich, wird Compilern zu erkennen, wenn Sie in einem Programm, 910 00:40:24,950 --> 00:40:27,050 versuchen, 0 durch 0 zu teilen. 911 00:40:27,050 --> 00:40:29,830 Mehr Spaß als dieses ist jedoch, , dass es scheint, Cookie Monster 912 00:40:29,830 --> 00:40:31,270 auf Twitter diesen Tagen. 913 00:40:31,270 --> 00:40:37,610 Und er antwortete, dies zu, mit diesem, Das ist absolut entzückend. 914 00:40:37,610 --> 00:40:40,110 Aber lassen Sie uns einen kurzen Blick auf ein paar andere Konstrukte, 915 00:40:40,110 --> 00:40:43,459 und setzen Sie dann etwas von diesem Code zu verwenden, in gutem Wege. 916 00:40:43,459 --> 00:40:45,250 So stellt sich heraus, außerdem for-Schleifen, da ist 917 00:40:45,250 --> 00:40:49,174 so etwas wie eine while-Schleife, dass anders aussieht und ausgebildet ist, 918 00:40:49,174 --> 00:40:51,590 ein wenig differently-- und wir schließlich sehen examples-- 919 00:40:51,590 --> 00:40:53,500 aber in einem gewissen Sinn, ist es einfacher, weil es 920 00:40:53,500 --> 00:40:56,670 ermöglicht es Ihnen nicht zu initialisieren und zu Aktualisieren innerhalb der Grenze der Schleife. 921 00:40:56,670 --> 00:40:57,794 Sie können immer noch umzusetzen. 922 00:40:57,794 --> 00:41:01,219 So können Sie genau die gleichen Dinge tun mit einer while-Schleife, wie bei einer for-Schleife, 923 00:41:01,219 --> 00:41:03,260 aber Ihre Syntax ultimately-- Wie wir schließlich 924 00:41:03,260 --> 00:41:04,551 see-- wird anders sein. 925 00:41:04,551 --> 00:41:07,450 Es gibt sogar eine do while-Schleife, die ist eigentlich ein wenig anders, 926 00:41:07,450 --> 00:41:09,640 in der Erwägung, dass dieser eine for-Schleife und eine while-Schleife immer 927 00:41:09,640 --> 00:41:13,005 überprüfen Sie ihren Zustand zuerst, wenn Sie lesen diese Sache oben nach unten, 928 00:41:13,005 --> 00:41:16,440 es sieht wie es zu gehen überprüfen Sie den Zustand zuletzt, weil es 929 00:41:16,440 --> 00:41:17,910 wirklich die letzte Codezeile. 930 00:41:17,910 --> 00:41:20,580 Und in der Tat, das wird, nützlich zu sein in bestimmten Programmen, die wir schreiben, 931 00:41:20,580 --> 00:41:23,746 ob Sie nur blind etwas tun wollen und schließlich den Zustand. 932 00:41:23,746 --> 00:41:25,205 Das ist nicht unbedingt eine schlechte Sache. 933 00:41:25,205 --> 00:41:27,912 Wenn wir Variablen möchten, was wir tun können es in einer Reihe von verschiedenen Wegen. 934 00:41:27,912 --> 00:41:30,290 Und wir in der FoxTrot sah cartoon, einen Weg, es zu tun, 935 00:41:30,290 --> 00:41:33,400 wo Sie Ihre Variable zu deklarieren, wie int Zähler Semikolon, 936 00:41:33,400 --> 00:41:36,570 und dann later-- vielleicht die nächste Linie, vielleicht 10 Zeilen later-- 937 00:41:36,570 --> 00:41:37,800 Sie tatsächlich initialisieren. 938 00:41:37,800 --> 00:41:42,230 Also diese 2 Zeilen Code deklarieren Sie eine Variable vom Typ int 939 00:41:42,230 --> 00:41:44,930 und nennen es Zähler, so dass es gibt mir genügend Bits, um einen int zu halten. 940 00:41:44,930 --> 00:41:48,230 Und dann schließlich, bringt es der Wert 0 in diese Variable. 941 00:41:48,230 --> 00:41:51,250 Es ordnet die 0 und 1 in a Muster, dass wir wissen, aus der vergangenen Woche, 942 00:41:51,250 --> 00:41:53,260 steht für die Anzahl die wir kennen als 0. 943 00:41:53,260 --> 00:41:56,920 Oder ehrlich gesagt, Sie so viel tun können, kurz und bündig, einfach so. 944 00:41:56,920 --> 00:41:59,390 >> Jetzt haben wir auch die Fähigkeit, Funktionen aufrufen. 945 00:41:59,390 --> 00:42:03,070 Und in der Tat, hier ist ein 2-zeiliges Programm oder einen Auszug davon, 946 00:42:03,070 --> 00:42:06,157 dass ermöglicht es uns, tatsächlich schreiben einige Code, 947 00:42:06,157 --> 00:42:08,990 Ruft eine Zeichenfolge aus dem user-- viel wie unsere Freiwilligen ein Moment ago-- 948 00:42:08,990 --> 00:42:11,320 Speichern des Ergebnisses in eine Variable namens name, 949 00:42:11,320 --> 00:42:15,470 und then-- ähnlich wie mit unseren Freiwilligen mit printf-- druckt diesen Werten 950 00:42:15,470 --> 00:42:19,180 indem man in zwei Argumente, die Schnur, gefolgt von dem variablen 951 00:42:19,180 --> 00:42:20,781 genannt, Name, selber. 952 00:42:20,781 --> 00:42:23,155 Werfen wir also einen Blick, bevor wir zurück zu Mario kommt es, 953 00:42:23,155 --> 00:42:26,010 auf ein paar nun Beispiele. 954 00:42:26,010 --> 00:42:30,537 >> Ich werde weiter und offener gehen bis, sagen wir mal, funktions 0.c. 955 00:42:30,537 --> 00:42:33,120 Und wie immer, ist dieser Code auf der Website der Kurs verfügbar ist, 956 00:42:33,120 --> 00:42:35,660 so können Sie zusammen zu spielen Hause und schauen Sie es später. 957 00:42:35,660 --> 00:42:40,400 Aber hier ist das Programm in seiner Wesentlichen von der Linie 17-22. 958 00:42:40,400 --> 00:42:43,270 Das Hauptprogramm ist in dem die Programm wird immer starten. 959 00:42:43,270 --> 00:42:46,980 Dieses Programm offenbar wird zum Ausdrucken Ihren Namen, Ihre Doppelpunkt. 960 00:42:46,980 --> 00:42:50,320 Es ist dann werde GetString aufrufen, gerade so wie wir mit unseren Freiwilligen. 961 00:42:50,320 --> 00:42:53,365 Und dann, das ist interessant, es geht um Printname aufrufen. 962 00:42:53,365 --> 00:42:56,490 Es stellt sich heraus, die ganze Zeit, es scheint eine Funktion namens Printname sein. 963 00:42:56,490 --> 00:42:57,614 Dass Drucke jemand den Namen. 964 00:42:57,614 --> 00:43:01,210 Wir brauchten nicht zu printf aus verwenden gestern, gibt es Printname. 965 00:43:01,210 --> 00:43:03,500 >> Doch das ist irreführend weil Printname nicht 966 00:43:03,500 --> 00:43:06,760 sind mit C Leute nicht erfinden sie vor 40 oder 50 Jahren, 967 00:43:06,760 --> 00:43:07,990 Ich tat, statt. 968 00:43:07,990 --> 00:43:10,330 Und in der Tat, wenn ich blättern weiter nach unten, Hinweis 969 00:43:10,330 --> 00:43:14,200 wie kann ich meine eigene zu schreiben Funktionen in C. Wir werden irgendwann 970 00:43:14,200 --> 00:43:16,319 erklären, warum wir sagen immer, Leere, an einigen Stellen, 971 00:43:16,319 --> 00:43:18,110 aber für heute, lassen Sie uns Schauen Sie sich den Namen. 972 00:43:18,110 --> 00:43:20,905 >> In Zeile 24, wenn Sie wollen erstellen Sie Ihre eigene Funktion, 973 00:43:20,905 --> 00:43:22,780 Sie buchstäblich schreiben die Name der Funktion. 974 00:43:22,780 --> 00:43:24,340 Ich entschied mich für Printname. 975 00:43:24,340 --> 00:43:26,159 In den Klammern, die Sie dann festlegen, welche Arten 976 00:43:26,159 --> 00:43:28,450 von Eingängen, und wieviele Sie möchten diese Funktion zu übernehmen. 977 00:43:28,450 --> 00:43:31,906 In diesem Fall möchte ich nehmen 1 Variable namens, name, 978 00:43:31,906 --> 00:43:34,030 und es wird der sein, Typ, ein String, also wird es 979 00:43:34,030 --> 00:43:35,780 einige Folge von Zeichen sein. 980 00:43:35,780 --> 00:43:39,170 Und dann diese program-- ähnlich wie in Scratch, 981 00:43:39,170 --> 00:43:42,590 können Sie benutzerdefinierte Puzzles haben pieces-- wird diesen benutzerdefinierten Verhalten haben. 982 00:43:42,590 --> 00:43:46,760 Es wird printf nennen Weitergabe in, hallo, Platzhalter, 983 00:43:46,760 --> 00:43:49,110 und dann, es wird Stecker in welcher der Benutzer aufgerufen. 984 00:43:49,110 --> 00:43:51,450 >> Das ist also ein Beispiel dafür, was Informatiker würden 985 00:43:51,450 --> 00:43:55,090 Call Abstraktion oder Funktions Zersetzung, das gerade sind 986 00:43:55,090 --> 00:43:58,110 Lust Weisen saying-- ist, wenn Sie möchten dieses hohe Niveau Idee, 987 00:43:58,110 --> 00:44:01,569 wie ich will Funktionalität, druckt jemand Name, absolut Sie 988 00:44:01,569 --> 00:44:04,360 kann buchstäblich schreiben printf und dann Pass in den Argumenten, die Sie möchten, 989 00:44:04,360 --> 00:44:07,340 und das Programm wird funktionieren, da es seit Mittwoch. 990 00:44:07,340 --> 00:44:10,510 Aber Sie können zu abstrahieren starten der Begriff Drucken eines Namens. 991 00:44:10,510 --> 00:44:13,270 Sie können ihm einen Namen zu geben, wie Printname, und dies 992 00:44:13,270 --> 00:44:15,280 ist diese Idee der Schichtung von Woche 0. 993 00:44:15,280 --> 00:44:19,910 >> Von nun an, ich und Sie nicht wissen, oder egal, wie Printname implementiert ist. 994 00:44:19,910 --> 00:44:22,470 Ja, es nutzt printf, vielleicht ist es nicht, wer weiß, was nutzt? 995 00:44:22,470 --> 00:44:23,410 Wen interessiert das? 996 00:44:23,410 --> 00:44:26,034 Jetzt bin ich hier reden up, anstelle von hier unten. 997 00:44:26,034 --> 00:44:28,700 Und in der Tat, wie unsere Programme erhalten weiter fortgeschritten und anspruchsvoll, 998 00:44:28,700 --> 00:44:32,550 werden wir unternehmen, um für selbstverständlich halten, daß unteren Ebene Puzzleteile existieren. 999 00:44:32,550 --> 00:44:34,780 Weil wir sie geschrieben oder jemand anderes getan hat, so 1000 00:44:34,780 --> 00:44:36,910 dass wir dann über ihnen aufzubauen. 1001 00:44:36,910 --> 00:44:39,430 Werfen wir einen Blick auf diese Variante funktioniert ein. 1002 00:44:39,430 --> 00:44:41,780 >> Also das hier ist ein wenig mehr Fortgeschrittene, aber es stellt sich heraus, 1003 00:44:41,780 --> 00:44:44,570 dass in CS50 Bibliothek, es gibt nur ein getint Funktion. 1004 00:44:44,570 --> 00:44:47,720 Wir hätten nicht gedacht, vor Jahren, um Umsetzung einer GetPositiveInt Funktion. 1005 00:44:47,720 --> 00:44:50,970 Und das ist ein wenig ärgerlich, denn wenn Sie Kerle sind ein Programm schreiben, wobei 1006 00:44:50,970 --> 00:44:53,325 Ihnen ein positives erhalten möchten Zahl vom Benutzer, 1007 00:44:53,325 --> 00:44:55,010 Sie absolut verwenden getint. 1008 00:44:55,010 --> 00:44:57,840 Und Sie können absolut überprüfen Sie mit der Zustand und vielleicht eine Schleife 1009 00:44:57,840 --> 00:45:00,320 wenn das int größer als 0 und schreien den Benutzer 1010 00:45:00,320 --> 00:45:02,699 wenn er oder sie nicht geben Sie eine positive Zahl. 1011 00:45:02,699 --> 00:45:04,740 Aber lasst uns bauen diese Baustein selbst, a, 1012 00:45:04,740 --> 00:45:06,555 benutzerdefinierte Scratch Stück, wenn man so will. 1013 00:45:06,555 --> 00:45:08,680 Ich werde ein Programm haben, hier, die letztlich, I 1014 00:45:08,680 --> 00:45:11,780 wollen in der Lage zu nennen GetPositiveInt, und ich möchte sein 1015 00:45:11,780 --> 00:45:14,200 in der Lage, drucken Sie, was auch immer, dass int ist. 1016 00:45:14,200 --> 00:45:16,240 Aber das ist jetzt weg abstrahiert. 1017 00:45:16,240 --> 00:45:19,050 Es ist nur ein hohes Maß gegeben worden Namen, die sagt, was sie tut, 1018 00:45:19,050 --> 00:45:21,780 das ist wunderbar, weil es sehr intuitiv jetzt zu lesen. 1019 00:45:21,780 --> 00:45:24,710 Und wenn ich zu tun pflegen, was darunter die Haube, lassen Sie mich nach unten zu scrollen. 1020 00:45:24,710 --> 00:45:27,140 Und es ist ein wenig einschüchternd auf den ersten, besonders 1021 00:45:27,140 --> 00:45:29,470 wenn dies Ihre erste Programm, aber lassen Sie uns einen Blick. 1022 00:45:29,470 --> 00:45:32,860 >> Ich bin nicht mehr sagen, Leere, denn es stellt sich heraus, Funktionen, 1023 00:45:32,860 --> 00:45:34,777 ähnlich wie GetString können liefern einen Wert für mich. 1024 00:45:34,777 --> 00:45:36,610 Sie haben nicht nur um auf den Bildschirm zu drucken, 1025 00:45:36,610 --> 00:45:38,410 sie tatsächlich übergeben können mir etwas zurück. 1026 00:45:38,410 --> 00:45:41,535 Und während vor Printname, Ich habe nichts müssen zurück. 1027 00:45:41,535 --> 00:45:44,160 Ich brauchte den Nebeneffekt, etwas, das auf dem Bildschirm, 1028 00:45:44,160 --> 00:45:46,570 aber ich habe einen Menschen nicht brauchen mir etwas zurückgeben. 1029 00:45:46,570 --> 00:45:48,840 Hier mit GetPositiveInt, wie mit getint, 1030 00:45:48,840 --> 00:45:50,640 Ich möchte etwas zurückreicht werden. 1031 00:45:50,640 --> 00:45:53,220 Also ich sage nicht, ungültig auf der Leitung 23, aber int, 1032 00:45:53,220 --> 00:45:55,570 in dem es heißt, diese Funktion daß ich schreibe, 1033 00:45:55,570 --> 00:45:58,860 genannt GetPositiveInt Nahmen gib mir wieder eine ganze Zahl, das nicht nichts, 1034 00:45:58,860 --> 00:45:59,890 nicht nichtig. 1035 00:45:59,890 --> 00:46:03,280 >> In der Zwischenzeit, es wird nicht zu nehmen Eingänge, also habe ich, irgendwie, es umgekehrt. 1036 00:46:03,280 --> 00:46:08,280 Ich gebe keine GetPositiveInt Eingang, ich will es mir seinen Ausgang zu geben. 1037 00:46:08,280 --> 00:46:09,800 Und was passiert jetzt? 1038 00:46:09,800 --> 00:46:11,640 Also hier ist, wie kann ich eine Variable deklarieren. 1039 00:46:11,640 --> 00:46:15,090 Ich habe es außerhalb der Schleife durchgeführt, Gründen wir schließlich sehen 1040 00:46:15,090 --> 00:46:17,700 aber dies nur gibt me 32 Bits genannt, n, 1041 00:46:17,700 --> 00:46:20,952 und ich habe vor der Bestimmung sie ganze Zahl zu speichern. 1042 00:46:20,952 --> 00:46:23,660 Und hier ist, dass zu tun, während Konstrukt, und aus diesem Grund ist es sinnvoll. 1043 00:46:23,660 --> 00:46:26,700 Buchstäblich dies tun, wobei n kleiner als 1 ist. 1044 00:46:26,700 --> 00:46:28,030 Also mal sehen, was passiert. 1045 00:46:28,030 --> 00:46:30,760 Ich ausdrucken, bitte geben Sie mir eine positive int. 1046 00:46:30,760 --> 00:46:34,300 Ich bekomme dann einen int mit der CS50 Funktion und in N gespeichert. 1047 00:46:34,300 --> 00:46:38,990 >> Und dann, was Codezeile wahrscheinlich wird als nächstes ausgeführt, logisch? 1048 00:46:38,990 --> 00:46:41,890 Die Zeilennummer? 1049 00:46:41,890 --> 00:46:42,571 Ja, also 31. 1050 00:46:42,571 --> 00:46:45,320 Sie würden nicht wissen, bis Sie haben wurde gesagt, oder Art folgern sie, 1051 00:46:45,320 --> 00:46:45,986 aber das ist wahr. 1052 00:46:45,986 --> 00:46:48,280 Es versteht sich von oben nach unten und dann wieder auftreten. 1053 00:46:48,280 --> 00:46:55,840 Also, wenn ich in etwa der Zahl eingegeben negativen 1 ist n weniger als minus 1? 1054 00:46:55,840 --> 00:46:56,340 Ja. 1055 00:46:56,340 --> 00:46:58,470 Weil Negativ 1 geringer als 1 ist. 1056 00:46:58,470 --> 00:46:59,510 Also, was soll geschehen? 1057 00:46:59,510 --> 00:47:03,260 Ich werde dies tun wobei n kleiner als 1 ist, 1058 00:47:03,260 --> 00:47:05,760 so werde ich wieder auf der Leitung 28 zu gehen. 1059 00:47:05,760 --> 00:47:09,530 >> Und jeder Zeit-- und lasst uns laufen this-- Schliesser 1, um es zu kompilieren, 1060 00:47:09,530 --> 00:47:11,340 und jetzt dot Slash Funktion 1. 1061 00:47:11,340 --> 00:47:14,280 Wenn ich schreibe negativen 1, ist es gehen, um mich anzuschreien zu halten 1062 00:47:14,280 --> 00:47:17,530 bis ich zusammenarbeiten, weil jeder meiner Eingänge kleiner als 1 ist 1063 00:47:17,530 --> 00:47:20,070 und wenn es während weniger als 1 ist, Ich werde weiter machen. 1064 00:47:20,070 --> 00:47:24,240 Wenn ich es endlich eine Zahl wie 50, Gott sei Dank, heißt es, danke für den 50. 1065 00:47:24,240 --> 00:47:24,970 Warum? 1066 00:47:24,970 --> 00:47:30,640 Denn sobald n nicht weniger als 1, ich aufhören, in dieser Schleife stecken, 1067 00:47:30,640 --> 00:47:33,840 und dieses neue Schlüsselwort heute Rück, wörtlich das tut. 1068 00:47:33,840 --> 00:47:36,800 Also ich habe gerade realisiert, in ein Gefühl, das Äquivalent von GetString, 1069 00:47:36,800 --> 00:47:40,590 wo ich Gabe zurück zu Wer wird mit mir, einen gewissen Wert. 1070 00:47:40,590 --> 00:47:42,820 Es muss nicht zu sein, ein String, es ist ein int. 1071 00:47:42,820 --> 00:47:44,990 So eine einfache, schnelle Beispiel, aber wir bald 1072 00:47:44,990 --> 00:47:47,930 sehen Sie einige anspruchsvollere Versionen noch. 1073 00:47:47,930 --> 00:47:53,882 In der Tat, werfen wir einen Blick auf ein Zahlen ein, die als return.c wird. 1074 00:47:53,882 --> 00:47:55,590 Und dieser ist eigentlich ein wenig einfacher. 1075 00:47:55,590 --> 00:47:59,010 So Zweck dieses Programms in life-- wir kompilieren und ausführen, 1076 00:47:59,010 --> 00:48:03,090 so stellen Gegenzug dot Schrägstrich, return-- Ankündigung 1077 00:48:03,090 --> 00:48:05,530 das Programm Würfel einfach den Wert 2. 1078 00:48:05,530 --> 00:48:08,410 Es ist ziemlich dumm, es ist schwer Code, dauert es nicht alle Eingänge, 1079 00:48:08,410 --> 00:48:12,220 aber es hat eine andere zu demonstrieren Funktion, die ich selbst geschrieben. 1080 00:48:12,220 --> 00:48:15,760 So, hier, ich erklärt habe ein Variable namens x, vom Typ int, 1081 00:48:15,760 --> 00:48:17,840 gleich der Zahl 2, völlig willkürlich. 1082 00:48:17,840 --> 00:48:19,530 Dies ist nur ein paar flauschige Druck. 1083 00:48:19,530 --> 00:48:23,070 Er sagt, x ist jetzt, wie und wie, Cubing dot dot dot. 1084 00:48:23,070 --> 00:48:26,390 Und die Magie ist offenbar in Zeile 21. 1085 00:48:26,390 --> 00:48:30,120 Ich rufe eine Funktion namens, Würfel, Ich reichte sie ein Blatt Papier 1086 00:48:30,120 --> 00:48:32,890 mit der Nummer 2 auf der es geschrieben, und welchen Wert, mathematisch, 1087 00:48:32,890 --> 00:48:34,860 will ich aus ihm heraus? 1088 00:48:34,860 --> 00:48:36,570 So wie eine Plausibilitätsprüfung? 1089 00:48:36,570 --> 00:48:37,070 8. 1090 00:48:37,070 --> 00:48:37,570 Recht? 1091 00:48:37,570 --> 00:48:40,160 Ich möchte 2 gewürfelt Rücken, 2 bis die Leistung von 3, also 8 zurück. 1092 00:48:40,160 --> 00:48:42,570 >> Also, wo ist cube umgesetzt? 1093 00:48:42,570 --> 00:48:44,349 Nun, bemerken, dass es sich hier implementiert. 1094 00:48:44,349 --> 00:48:47,140 Und genau wie zuvor, logisch, obwohl die Syntax ist wahrscheinlich 1095 00:48:47,140 --> 00:48:49,320 sehr neu für viele von Ihnen, Ich möchte diese Funktion 1096 00:48:49,320 --> 00:48:51,780 zu mir zurückzugeben ein Blatt Papier mit einem int auf sie. 1097 00:48:51,780 --> 00:48:53,990 So habe ich einen int, die Name ist beliebig, 1098 00:48:53,990 --> 00:48:55,530 sondern bequem Cube genannt. 1099 00:48:55,530 --> 00:48:58,430 Der Eingang dazu, ist n von Typ Integer, also ist das 1100 00:48:58,430 --> 00:49:00,800 wie kann ich in der Zahl übergeben 2 auf einem Blatt Papier. 1101 00:49:00,800 --> 00:49:03,910 Und dann stellt sich heraus, C Stützen Mathematik, so dass Sie nicht haben, x für Zeiten, 1102 00:49:03,910 --> 00:49:06,680 verwenden Sie einfach das Sternchen zur Multiplikation. 1103 00:49:06,680 --> 00:49:11,070 Und das gibt n mal n mal n, die einfach eine gewürfelten Wert. 1104 00:49:11,070 --> 00:49:12,840 >> Also wohin gehen wir mit all dem? 1105 00:49:12,840 --> 00:49:14,570 Dies ist definitiv ein rasante Tour, seien Sie versichert, 1106 00:49:14,570 --> 00:49:16,410 dass in den Superschnitte und in Problem-Set 1, 1107 00:49:16,410 --> 00:49:18,368 Sie werden durch begehbar all dies umso mehr. 1108 00:49:18,368 --> 00:49:22,490 Und in Problem-Set 1, werden wir den Übergang von der grafischen Welt der Scratch 1109 00:49:22,490 --> 00:49:25,640 etwas mehr Befehlszeile in C. Aber wir werden inspirieren 1110 00:49:25,640 --> 00:49:27,680 von diesem Spiel hier vom vergangenen Jahr, wobei 1111 00:49:27,680 --> 00:49:31,591 Verwendung von C und die Standard-Ausgabe des p-Set Sie Mario-Pyramide zu implementieren. 1112 00:49:31,591 --> 00:49:34,340 Und in der Hacker-Ausgabe der p-Set, wenn Sie dies wünschen, zu wählen, 1113 00:49:34,340 --> 00:49:38,280 Sie werden ein bisschen mehr zu implementieren herausfordernde Pyramide mit zwei Spitzen. 1114 00:49:38,280 --> 00:49:41,239 Sie werden auch zu implementieren ein Algorithmus, ein Greedy-Algorithmus. 1115 00:49:41,239 --> 00:49:43,030 Es stellt sich heraus, es gibt einige interessante Logik 1116 00:49:43,030 --> 00:49:45,640 hinter dem Verfahren Laufwerk ein Banks 1117 00:49:45,640 --> 00:49:47,410 und tatsächlich Gabe jemand zurück zu ändern. 1118 00:49:47,410 --> 00:49:50,410 Es ist ein Algorithmus, ist ziemlich einfach, dass Sie vielleicht sogar 1119 00:49:50,410 --> 00:49:53,576 erfassen intuitiv, wenn Sie zuerst lesen es-- zu realisieren, dass ist, was ich immer 1120 00:49:53,576 --> 00:49:57,110 keine Zeit habe ich jemand etwas gegeben getan Geld back--, die Sie immer erlaubt 1121 00:49:57,110 --> 00:50:00,679 die Anzahl der zu minimieren Notizen auf Papier und Metall-Münzen 1122 00:50:00,679 --> 00:50:02,220 dass Sie zurück an den Benutzer übergeben sind. 1123 00:50:02,220 --> 00:50:04,610 Und dies, natürlich, ist überzeugend weil, wenn Sie CVS oder Dingsbums zu gehen, 1124 00:50:04,610 --> 00:50:06,430 Sie wollen nicht übergeben werden eine ganze Reihe von Einsen 1125 00:50:06,430 --> 00:50:07,596 oder eine ganze Reihe von ein paar Cent. 1126 00:50:07,596 --> 00:50:10,120 Sie wollen die wenigsten Münzen, wahrscheinlich, möglich. 1127 00:50:10,120 --> 00:50:13,070 >> Schließlich werden Sie auch in Frage gestellt werden um in der Welt des Wasserplantschen 1128 00:50:13,070 --> 00:50:17,220 und tatsächlich bekommen eine Wertschätzung für eine Zuordnung zwischen Strömungsgeschwindigkeiten, 1129 00:50:17,220 --> 00:50:19,890 der mag, Wasser in einer Dusche, wie viel Wasser verwendet. 1130 00:50:19,890 --> 00:50:22,640 Und die Anspielung darin, wird für diesen Clip hier zu sein, 1131 00:50:22,640 --> 00:50:24,840 was wir für die am Ende auf nur 60 Sekunden, dass 1132 00:50:24,840 --> 00:50:29,070 malt ein Bild von Low-Flow-Duschköpfe. 1133 00:50:29,070 --> 00:50:30,886 >> [VIDEO PLAYBACK] 1134 00:50:30,886 --> 00:50:31,385 -Gut. 1135 00:50:31,385 --> 00:50:32,774 Ich habe alles hier. 1136 00:50:32,774 --> 00:50:35,800 Ich habe die Cyclone F-Serie, Hydra, Jetflow, Stockholm 1137 00:50:35,800 --> 00:50:37,660 Supers, you name it. 1138 00:50:37,660 --> 00:50:39,265 >> -Und Was empfehlen Sie? 1139 00:50:39,265 --> 00:50:40,460 >> -Was suchen Sie? 1140 00:50:40,460 --> 00:50:41,300 >> -Power Mann. 1141 00:50:41,300 --> 00:50:42,285 Power. 1142 00:50:42,285 --> 00:50:42,910 -ähnliche Silkwood. 1143 00:50:42,910 --> 00:50:44,520 -Das Ist für Strahlung. 1144 00:50:44,520 --> 00:50:46,335 -Das ist richtig. 1145 00:50:46,335 --> 00:50:48,275 -Nun Was ist das? 1146 00:50:48,275 --> 00:50:49,704 -Das Ist das Commando 450. 1147 00:50:49,704 --> 00:50:50,620 Ich verkaufe nicht, dass man. 1148 00:50:50,620 --> 00:50:51,700 >> -Aber Das ist, was wir wollen. 1149 00:50:51,700 --> 00:50:52,680 Es ist ein Kommando 450. 1150 00:50:52,680 --> 00:50:53,882 >> -Keine Glauben Sie mir. 1151 00:50:53,882 --> 00:50:55,090 Es ist nur im Zirkus verwendet. 1152 00:50:55,090 --> 00:50:56,512 Es ist für Elefanten. 1153 00:50:56,512 --> 00:50:59,356 >> -Ich Werde nichts bezahlen. 1154 00:50:59,356 --> 00:51:01,252 >> -Was Ist Jerry? 1155 00:51:01,252 --> 00:51:02,760 >> -Er Konnte nicht damit umgehen, dass. 1156 00:51:02,760 --> 00:51:04,910 Er ist empfindlich. 1157 00:51:04,910 --> 00:51:05,750 Oh ja. 1158 00:51:05,750 --> 00:51:36,737 1159 00:51:36,737 --> 00:51:37,320 [END PLAYBACK] 1160 00:51:37,320 --> 00:51:37,700 DAVID J MALAN: Alles klar. 1161 00:51:37,700 --> 00:51:38,820 Das ist, wenn für CS50. 1162 00:51:38,820 --> 00:51:40,050 Wir sehen uns nächste Woche. 1163 00:51:40,050 --> 00:51:45,910 1164 00:51:45,910 --> 00:51:49,029 >> Sprecher 1: [? Scully?], [? Ian,?] soweit dieses Outro Projekt, 1165 00:51:49,029 --> 00:51:50,362 was hast du Jungs kommen mit? 1166 00:51:50,362 --> 00:51:51,990 >> Sprecher 2: Nun, wir gegeben haben es eine Vielzahl von Gedanken, 1167 00:51:51,990 --> 00:51:53,250 und wir denken, dass der beste Weg zu-- 1168 00:51:53,250 --> 00:51:53,660 >> SPEAKER 3: Darf ich? 1169 00:51:53,660 --> 00:51:54,326 >> Sprecher 2: Ja. 1170 00:51:54,326 --> 00:51:56,360 Mit allen Mitteln, tatsächlich. 1171 00:51:56,360 --> 00:51:59,425 >> SPEAKER 3: Ich denke also, Wir können zusammenfassen unsere Idee 1172 00:51:59,425 --> 00:52:05,450 für die outros mit einem word-- nichts. 1173 00:52:05,450 --> 00:52:08,950 1174 00:52:08,950 --> 00:52:10,409 >> DAVID J MALAN: Nichts? 1175 00:52:10,409 --> 00:52:11,200 SPEAKER 3: Nichts. 1176 00:52:11,200 --> 00:52:12,990 DAVID J MALAN: Was bedeutet das? 1177 00:52:12,990 --> 00:52:16,260 SPEAKER 3: Die Outros sind um nichts. 1178 00:52:16,260 --> 00:52:21,720 Sprecher 2: Nun, ich meine, in der Philosophie, Ich meine, nichts ist immer etwas. 1179 00:52:21,720 --> 00:52:24,200 Sprecher 1: So what's-- was ist die Prämisse? 1180 00:52:24,200 --> 00:52:25,720 SPEAKER 3: So ist es wie das Leben. 1181 00:52:25,720 --> 00:52:26,680 OK. 1182 00:52:26,680 --> 00:52:28,294 Was hast du heute gemacht? 1183 00:52:28,294 --> 00:52:31,811 >> DAVID J MALAN: Ich stand auf, hatten Frühstück, und kam zu arbeiten. 1184 00:52:31,811 --> 00:52:34,056 >> SPEAKER 3: Das ist ein Outro. 1185 00:52:34,056 --> 00:52:36,806 Sprecher 2: Aber, ich meine, sollte nicht etwas mit ihm geschehen auf the-- 1186 00:52:36,806 --> 00:52:37,889 SPEAKER 3: Nein, nein, nein, nein. 1187 00:52:37,889 --> 00:52:40,220 Nichts passiert. 1188 00:52:40,220 --> 00:52:42,910 >> Sprecher 1: Warum beobachten wir? 1189 00:52:42,910 --> 00:52:46,956 >> SPEAKER 3: Weil es ist ein Outro für CS50. 1190 00:52:46,956 --> 00:52:48,652 >> DAVID J MALAN: Noch nicht. 1191 00:52:48,652 --> 00:52:49,151