1 00:00:00,000 --> 00:00:10,920 >> [Musik spielt] 2 00:00:10,920 --> 00:00:14,680 >> DAVID J MALAN: All right, Willkommen zurück auf CS50. 3 00:00:14,680 --> 00:00:16,500 Dies ist der Beginn der zweiten Woche. 4 00:00:16,500 --> 00:00:18,940 Ein Wort von einem unserer Freunde auf dem Campus - 5 00:00:18,940 --> 00:00:22,620 wenn Sie interessiert sind, möglicherweise, entweder jetzt oder in Zukunft Begriff 6 00:00:22,620 --> 00:00:25,670 noch einmal komfortabler, Lehre Schüler der Mittelstufe ein wenig 7 00:00:25,670 --> 00:00:27,680 etwas über Informatik, tun Kopf zu dieser URL. 8 00:00:27,680 --> 00:00:32,360 Sie sind in besonderer Bedarf jetzt von Lehrer, vor allem, wenn Sie 9 00:00:32,360 --> 00:00:34,700 hatten einige der Exposition gegenüber der Informatik. 10 00:00:34,700 --> 00:00:38,060 >> So erinnern daran, dass beim letzten Mal, haben wir einige Datentypen in C, und 11 00:00:38,060 --> 00:00:40,590 Sie fing an, Ihre Hände schmutzig mit diesen bisher 12 00:00:40,590 --> 00:00:41,940 Problem in einem Set. 13 00:00:41,940 --> 00:00:43,230 Und wir hatten eine char. 14 00:00:43,230 --> 00:00:49,100 So etwas in technischer Hinsicht, was ist ein Zeichen, wie Sie sie heute kennen? 15 00:00:49,100 --> 00:00:51,050 >> So ist es ein Zeichen, aber wir genauer jetzt. 16 00:00:51,050 --> 00:00:53,735 Was verstehen wir unter Zeichen bedeuten oder einzelne char? 17 00:00:53,735 --> 00:00:56,700 18 00:00:56,700 --> 00:00:59,500 Ein nicht-numerischen Zeichen - 19 00:00:59,500 --> 00:01:00,670 so nicht unbedingt. 20 00:01:00,670 --> 00:01:04,580 Es stellt sich heraus, dass gerade Zahlen, auch Satzzeichen und Buchstaben sind 21 00:01:04,580 --> 00:01:06,980 vertreten mit diesen Daten geben bekannt als char. 22 00:01:06,980 --> 00:01:09,440 Es ist also nicht unbedingt alphabetisch. 23 00:01:09,440 --> 00:01:11,100 Ja? 24 00:01:11,100 --> 00:01:12,275 >> So ist es ein ASCII-Zeichen. 25 00:01:12,275 --> 00:01:15,510 Also, wenn Sie denken Sie zurück an Woche Null, wenn hatten wir unsere Byte von Freiwilligen 26 00:01:15,510 --> 00:01:19,150 kommen und entweder halten ihre Hände oder nicht alle, vertreten sie Bits. 27 00:01:19,150 --> 00:01:22,450 Aber gemeinsam als eine Gruppe von acht, sie repräsentiert ein Byte. 28 00:01:22,450 --> 00:01:26,030 Und haben wir die Vorstellung von ASCII zu diesem Vortrag, der ist einfach ein 29 00:01:26,030 --> 00:01:28,170 Mapping zwischen Zahlen und Buchstaben. 30 00:01:28,170 --> 00:01:32,010 Und ASCII Anwendungen, da diese Menschen implizierte, acht Bits 31 00:01:32,010 --> 00:01:33,660 zur Darstellung eines Zeichens. 32 00:01:33,660 --> 00:01:36,890 >> So Dementsprechend kann, wenn acht Bits jeweils an einer der zwei Werte annehmen - 33 00:01:36,890 --> 00:01:38,010 Null oder Eins - 34 00:01:38,010 --> 00:01:40,280 Das heißt, es gab zwei Möglichkeiten für diese Person - 35 00:01:40,280 --> 00:01:41,230 Null oder Eins - 36 00:01:41,230 --> 00:01:44,070 zwei für diese Person, zwei für diese Person, zwei für diese ein. 37 00:01:44,070 --> 00:01:47,450 Also insgesamt zwei mal zwei mal zwei mal zwei mal zwei - 38 00:01:47,450 --> 00:01:49,700 so zwei der achte insgesamt. 39 00:01:49,700 --> 00:01:54,320 So gibt es eine Gesamtzahl von Zeichen 256 möglich, dass man 40 00:01:54,320 --> 00:01:55,750 stellen mit acht Bits. 41 00:01:55,750 --> 00:01:59,210 >> Nun, diejenigen von Ihnen, sprechen Asian Sprachen vielleicht wissen, dass es mehr 42 00:01:59,210 --> 00:02:02,620 Zeichen in der ganzen Welt als nur As und Bs und Cs und Ds. 43 00:02:02,620 --> 00:02:06,130 Und in der Tat, nicht ASCII nicht ausreichen viele Sprachen der Welt. 44 00:02:06,130 --> 00:02:07,760 Aber mehr dazu ein andermal. 45 00:02:07,760 --> 00:02:11,240 Denn jetzt wissen, dass in C, wenn Sie wollen, einen Brief, ein Stück vertreten 46 00:02:11,240 --> 00:02:15,780 Zeichensetzung, oder einfach nur etwas Charakter in der Natur, verwenden wir ein Zeichen. 47 00:02:15,780 --> 00:02:18,240 Und es ist ein Byte oder acht Bits. 48 00:02:18,240 --> 00:02:19,690 >> Wie wäre es mit einem int? 49 00:02:19,690 --> 00:02:20,780 Nun, das ist eine ganze Zahl ein int. 50 00:02:20,780 --> 00:02:23,175 Wie viele Bits, wenn Sie sich erinnern, war eine ganze Zahl in der Regel? 51 00:02:23,175 --> 00:02:25,930 52 00:02:25,930 --> 00:02:27,512 Jeder Rückruf? 53 00:02:27,512 --> 00:02:29,600 So ist es in der Regel 32. 54 00:02:29,600 --> 00:02:32,120 Es hängt tatsächlich auf dem Computer dass Sie verwenden. 55 00:02:32,120 --> 00:02:35,770 Aber in dem Gerät, und in einer Menge von Computer, es ist 32 Bit oder vier 56 00:02:35,770 --> 00:02:37,140 bytes - acht Mal vier. 57 00:02:37,140 --> 00:02:39,790 Und ints sind nur für die Speicherung verwendet Zahlen, entweder negativ, 58 00:02:39,790 --> 00:02:41,610 positiv oder Null ist. 59 00:02:41,610 --> 00:02:45,250 >> Und wenn du hast 32 Bit und Sie nur kümmern positiven Zahlen können 60 00:02:45,250 --> 00:02:48,960 jemand Baseballstadion, wie viele mögliche Zahlen a Computer darstellen kann 61 00:02:48,960 --> 00:02:51,820 Null auf bis? 62 00:02:51,820 --> 00:02:56,130 Es wäre also zwei der 32, die ist rund vier Milliarden Euro. 63 00:02:56,130 --> 00:02:59,720 Also diese Potenzen von zwei sein werden wiederkehrende Themen in der Informatik. 64 00:02:59,720 --> 00:03:03,930 Wie wir sehen werden, sind sie sehr bequem mit, auch wenn es nicht ganz funktioniert 65 00:03:03,930 --> 00:03:05,790 leicht, die Mathematik im Kopf zu tun. 66 00:03:05,790 --> 00:03:07,000 >> So sagen wir etwa vier Milliarden Euro. 67 00:03:07,000 --> 00:03:08,620 Jetzt, ein langer, langer - 68 00:03:08,620 --> 00:03:09,770 Sie können Art Vermutung. 69 00:03:09,770 --> 00:03:10,480 Es ist mehr als ein int. 70 00:03:10,480 --> 00:03:12,440 Wie viele Bits? 71 00:03:12,440 --> 00:03:14,250 So 64 Bit oder acht Bytes. 72 00:03:14,250 --> 00:03:17,480 Dies bedeutet nur, Sie können sogar vertreten größere Zahlen, größere positive oder 73 00:03:17,480 --> 00:03:19,160 größere negative Zahlen. 74 00:03:19,160 --> 00:03:20,060 >> Und wie wäre es mit schwimmen? 75 00:03:20,060 --> 00:03:22,260 Das ist eine Gleitkomma Wert von 32 Bits. 76 00:03:22,260 --> 00:03:25,180 Dies ist nur eine reelle Zahl, etwas mit einem Komma. 77 00:03:25,180 --> 00:03:30,100 Aber wenn Sie stattdessen brauchen mehr Orte nach dem Komma oder Sie wollen 78 00:03:30,100 --> 00:03:33,720 stellen eine größere Anzahl mit einigen Fraktion nach, können Sie ein 79 00:03:33,720 --> 00:03:36,260 Doppel-, ist die 64 Bit. 80 00:03:36,260 --> 00:03:38,240 >> Aber es ist eine interessante Lieferservice hier. 81 00:03:38,240 --> 00:03:42,890 Also, wenn ints werden von 32 Bit und begrenzt auch lange sehnt sich auf 64 begrenzt 82 00:03:42,890 --> 00:03:46,180 Bits, diese Art der die Frage aufwirft, was ist, wenn Sie wirklich wollen, zählen 83 00:03:46,180 --> 00:03:48,790 mehr als 4 Milliarden Euro für einen int? 84 00:03:48,790 --> 00:03:50,330 Nun, verwenden Sie einfach eine lange lange. 85 00:03:50,330 --> 00:03:54,200 Aber was, wenn Sie wollen höher zählen als zwei der 64., geben oder nehmen? 86 00:03:54,200 --> 00:03:55,810 >> Nun, das ist eine riesige Anzahl. 87 00:03:55,810 --> 00:03:59,250 Aber schließlich, könnten Sie eigentlich kümmern uns um diese Arten von Werten, 88 00:03:59,250 --> 00:04:03,070 vor allem, wenn Sie eine Datenbank und beginnen, viel, viel zu sammeln 89 00:04:03,070 --> 00:04:06,190 und viele Daten und Zuweisen von eindeutigen Zahlen zu jedem Stück dieser Daten. 90 00:04:06,190 --> 00:04:07,430 Also wir irgendwie ein Problem haben. 91 00:04:07,430 --> 00:04:10,700 Und ähnlich, mit Gleitkomma Werte - Schwimmer oder Doppelzimmer - 92 00:04:10,700 --> 00:04:14,290 wenn Sie haben nur eine begrenzte Anzahl von Bits, konnte wie viele Gesamtzahlen Sie 93 00:04:14,290 --> 00:04:16,980 möglicherweise stellen? 94 00:04:16,980 --> 00:04:19,540 >> Nun, es ist weniger klar, wenn man beinhalten eine Dezimalstelle. 95 00:04:19,540 --> 00:04:20,899 Aber es ist sicherlich begrenzt. 96 00:04:20,899 --> 00:04:24,390 Wenn Sie haben eine begrenzte Anzahl von Bits, eine endliche Anzahl von Menschen, eine endliche 97 00:04:24,390 --> 00:04:27,350 Zahl der Glühbirnen, sicherlich können Sie stellen nur eine endliche Anzahl von 98 00:04:27,350 --> 00:04:28,510 Gleitkomma-Werte. 99 00:04:28,510 --> 00:04:33,170 Aber wie viele reelle Zahlen sind ihre in der Welt? 100 00:04:33,170 --> 00:04:33,680 Es gibt eine unendliche. 101 00:04:33,680 --> 00:04:37,280 So, dass ist ein bisschen ein Problem, weil wir nicht über eine unendliche Menge von 102 00:04:37,280 --> 00:04:39,970 RAM-Speicher oder in unserer Computer. 103 00:04:39,970 --> 00:04:41,780 So einige anspruchsvolle Dinge passieren können. 104 00:04:41,780 --> 00:04:43,900 >> Also lasst uns weitermachen und versuchen das hier zum Ausdruck bringen. 105 00:04:43,900 --> 00:04:46,240 Lassen Sie mich gehen Sie vor und eröffnen gedit. 106 00:04:46,240 --> 00:04:50,360 Ich werde weitermachen und Speichern einer Datei genannt "floats0.c" nur um 107 00:04:50,360 --> 00:04:54,630 in Übereinstimmung mit einem Beispiel, das ist online zur Verfügung, wenn Sie möchten. 108 00:04:54,630 --> 00:04:58,080 Und ich werde weitermachen und wie folgt definieren - 109 00:04:58,080 --> 00:05:01,540 Ich werde weitermachen und sagen, int Haupt Leere, wie wir oft tun. 110 00:05:01,540 --> 00:05:07,190 >> Und dann in diesem Programm, ich bin zu gehen erkläre mich einen Schwimmer, so dass eine 32-Bit- 111 00:05:07,190 --> 00:05:09,700 Variable namens f, willkürlich. 112 00:05:09,700 --> 00:05:13,910 Und dann werde ich es in speichern Ich weiß es nicht, ein Zehntel, also 0,1. 113 00:05:13,910 --> 00:05:16,590 So werde ich zum Ausdruck bringen, dass eine geteilt durch 10 ist die perfekt 114 00:05:16,590 --> 00:05:17,790 legitim in C. 115 00:05:17,790 --> 00:05:20,460 >> Und dann in der zweiten Zeile, habe ich einfach ausdrucken wollen diesen Wert. 116 00:05:20,460 --> 00:05:22,950 So erinnern die wir nutzen können die bekannte printf. 117 00:05:22,950 --> 00:05:25,420 Wir wollen nicht zu verwenden i% für einen int. 118 00:05:25,420 --> 00:05:28,360 Wir wollen% f für einen Schwimmer zu verwenden. 119 00:05:28,360 --> 00:05:33,080 Und dann werde ich Backslash n tun, close Zitat, Komma, f, Semikolon. 120 00:05:33,080 --> 00:05:34,400 >> Also hier ist mein Programm. 121 00:05:34,400 --> 00:05:35,820 Es gibt bereits einen Bug. 122 00:05:35,820 --> 00:05:38,640 Hat jemand für die diese angeklickt schon wollen mindestens hinweisen 123 00:05:38,640 --> 00:05:40,220 ein Fehler, den ich gemacht habe? 124 00:05:40,220 --> 00:05:42,470 Ja? 125 00:05:42,470 --> 00:05:42,800 Ja. 126 00:05:42,800 --> 00:05:47,860 Ich habe "# include" bei der top, Symptom sie davon, wenn ich versuche, 127 00:05:47,860 --> 00:05:50,490 kompilieren, das wird sein, dass die Compiler wird schreien mich an, 128 00:05:50,490 --> 00:05:52,770 sagen undefined symbol oder etwas in diesem Sinne. 129 00:05:52,770 --> 00:05:55,360 Es ist nicht zu verstehen, etwas mag printf. 130 00:05:55,360 --> 00:05:59,380 >> Also werde ich tun "# include "Speichern Sie die Datei. 131 00:05:59,380 --> 00:06:00,400 Und jetzt ist es besser in Form. 132 00:06:00,400 --> 00:06:02,690 Aber ich werde auch darauf hinweisen heraus ein neues Detail heute. 133 00:06:02,690 --> 00:06:08,620 Zusätzlich zur Angabe Ort Inhaber wie% f% i% s, können Sie 134 00:06:08,620 --> 00:06:12,320 manchmal beeinflussen das Verhalten dieser Platzhalter. 135 00:06:12,320 --> 00:06:15,540 Zum Beispiel in dem Fall einer schwimmende Punktwert, wenn ich nur will 136 00:06:15,540 --> 00:06:22,200 auf eine Dezimalstelle nach der Anzeige Zeit kann ich eigentlich tun 0.1f. 137 00:06:22,200 --> 00:06:26,830 Mit anderen Worten, die separate I f und das Prozentzeichen mit 0,1, nur 138 00:06:26,830 --> 00:06:30,200 printf erzählen, haben Sie vielleicht eine ganze Reihe von Zahlen nach dem Komma 139 00:06:30,200 --> 00:06:30,930 Punkt für mich. 140 00:06:30,930 --> 00:06:32,870 Aber ich will nur einen von ihnen zu sehen. 141 00:06:32,870 --> 00:06:36,280 >> Also werde ich jetzt nach vorne gehen und sparen Dieses Programm, das in meinem Terminal gehen 142 00:06:36,280 --> 00:06:41,870 Fenster, und ich werde weitermachen und make float 0, geben. 143 00:06:41,870 --> 00:06:44,930 Ich sehe, dass etwas kryptischen Zeile, die beginnen, mehr Sinn, als wir machen 144 00:06:44,930 --> 00:06:46,900 necken sie auseinander diese und nächste Woche. 145 00:06:46,900 --> 00:06:50,480 Jetzt werde ich weitermachen und führen float Null. 146 00:06:50,480 --> 00:06:52,020 Und, verdammt. 147 00:06:52,020 --> 00:06:54,880 >> So gibt es einen anderen Fehler hier aus irgendeinem Grund. 148 00:06:54,880 --> 00:07:02,490 Ich bin mir ziemlich sicher, dass ein Zehntel oder eine durch 10 geteilt, ist nicht 0.0. 149 00:07:02,490 --> 00:07:04,590 Vielleicht bin ich nicht auf der Suche an genügend Stellen. 150 00:07:04,590 --> 00:07:08,580 Also, warum nicht ich sagen, zwei 0,2 bis zwei sehen Dezimalstellen anstelle von nur einem. 151 00:07:08,580 --> 00:07:11,810 Lassen Sie mich zurück zu meinem Terminal-Fenster hier treffen sich ein paar Mal um 152 00:07:11,810 --> 00:07:12,840 siehe meine Geschichte. 153 00:07:12,840 --> 00:07:15,910 Sie machen schweben wieder Null, und dann wieder hoch. 154 00:07:15,910 --> 00:07:17,730 Und jetzt geben. 155 00:07:17,730 --> 00:07:20,000 >> Und jetzt bin ich ziemlich sicher, dass dies falsch ist. 156 00:07:20,000 --> 00:07:23,030 Und was ich tun konnte drei und vier, und ich bin wahrscheinlich zu halten sehen Nullen. 157 00:07:23,030 --> 00:07:24,880 Also, wo ist der Fehler? 158 00:07:24,880 --> 00:07:27,910 Eine durch 10 geteilt sollte 0,1 sein. 159 00:07:27,910 --> 00:07:30,310 Jemand will einen Stich an, was nehmen die grundlegende Frage ist? 160 00:07:30,310 --> 00:07:32,400 Ja? 161 00:07:32,400 --> 00:07:33,420 Sie sind beide Zahlen. 162 00:07:33,420 --> 00:07:33,920 So what? 163 00:07:33,920 --> 00:07:37,820 Also mit einem durch 10 geteilt, das ist was kann ich tun in der Arithmetik. 164 00:07:37,820 --> 00:07:41,185 Und ich bekomme 0.1. 165 00:07:41,185 --> 00:07:41,660 >> Ja. 166 00:07:41,660 --> 00:07:43,240 Und so ist es in der Tat, dass Problem. 167 00:07:43,240 --> 00:07:46,700 Wenn Sie nehmen eine ganze Zahl in einem Computer und teilen Sie sie durch eine andere ganze Zahl ist, 168 00:07:46,700 --> 00:07:50,430 der Computer ist standardmäßig auf los davon ausgehen, dass Sie eine ganze Zahl wollen. 169 00:07:50,430 --> 00:07:54,620 Das Problem ist aber natürlich ist dass 0,1 keine ganze Zahl ist. 170 00:07:54,620 --> 00:07:55,680 Es ist eine reelle Zahl ist. 171 00:07:55,680 --> 00:07:59,610 Und so, was der Computer tut, indem Standardmäßig ist es nur wegwirft 172 00:07:59,610 --> 00:08:01,070 alles nach dem Komma. 173 00:08:01,070 --> 00:08:03,380 Es muss nicht rund nach unten oder oben per se. 174 00:08:03,380 --> 00:08:06,480 Es ist einfach alles wegwirft nach dem Komma. 175 00:08:06,480 --> 00:08:07,430 Und nun, die Sinn macht. 176 00:08:07,430 --> 00:08:09,740 Denn jetzt sind wir deutlich links mit Null. 177 00:08:09,740 --> 00:08:10,250 >> Aber warten Sie eine Minute. 178 00:08:10,250 --> 00:08:11,840 Ich bin nicht da ein int Null. 179 00:08:11,840 --> 00:08:14,910 Ich bin eigentlich sehen 0.00. 180 00:08:14,910 --> 00:08:16,340 So wie ich das jetzt zu versöhnen? 181 00:08:16,340 --> 00:08:22,850 Wenn man durch 10 geteilt Null ist, aber ich bin Sehen 0,00 wird, wo es immer 182 00:08:22,850 --> 00:08:24,250 zurück auf eine reelle Zahl umgewandelt? 183 00:08:24,250 --> 00:08:25,500 Ja. 184 00:08:25,500 --> 00:08:29,850 185 00:08:29,850 --> 00:08:30,630 Genau. 186 00:08:30,630 --> 00:08:35,600 >> Also hier in Zeile fünf, wenn ich tatsächlich speichern, die 0,1, die dann 187 00:08:35,600 --> 00:08:39,549 abgeschnitten Null, in der ein Schwimmer, das ist effektiv äquivalent zu 188 00:08:39,549 --> 00:08:42,100 Speicherung nicht als int, sondern in der Tat, als Schwimmer. 189 00:08:42,100 --> 00:08:46,540 Darüber hinaus bin ich dann mit printf explizit drucken diese Zahl auf zwei 190 00:08:46,540 --> 00:08:49,740 Dezimalstellen obwohl vielleicht nicht eigentlich jeder sein. 191 00:08:49,740 --> 00:08:51,020 >> Also diese Art von saugt, nicht wahr? 192 00:08:51,020 --> 00:08:53,640 Anscheinend kann man nicht rechnen, zumindest auf dieser Ebene der 193 00:08:53,640 --> 00:08:55,600 Präzision in einem Computer. 194 00:08:55,600 --> 00:08:56,930 Aber sicherlich gibt es eine Lösung. 195 00:08:56,930 --> 00:09:00,410 Was ist die einfachste Lösung könnten wir vielleicht tun, auch nur hier, um intuitiv 196 00:09:00,410 --> 00:09:01,130 dieses Problem lösen? 197 00:09:01,130 --> 00:09:02,380 Ja? 198 00:09:02,380 --> 00:09:04,700 199 00:09:04,700 --> 00:09:06,574 Drehen Sie die Zahlen in - 200 00:09:06,574 --> 00:09:06,976 ja. 201 00:09:06,976 --> 00:09:10,420 Auch wenn ich mir nicht ganz sicher, was wirklich los hier, wenn es 202 00:09:10,420 --> 00:09:13,440 grundsätzlich hat mit diesen beiden zu tun Sein ints, na ja, warum nicht ich 203 00:09:13,440 --> 00:09:18,230 machen, dass 10,0, so dass diese 1.0, speichern Sie die Datei. 204 00:09:18,230 --> 00:09:20,990 Lassen Sie mich wieder nach unten gehen, um die Boden und neu kompilieren. 205 00:09:20,990 --> 00:09:23,030 Lassen Sie mich nun erneut. 206 00:09:23,030 --> 00:09:23,420 Und es gibt - 207 00:09:23,420 --> 00:09:27,690 nun, ich habe meine ein Zehntel dargestellt als 0,10. 208 00:09:27,690 --> 00:09:28,420 >> In Ordnung. 209 00:09:28,420 --> 00:09:29,220 Also das ist nicht schlecht. 210 00:09:29,220 --> 00:09:31,730 Und lassen Sie mich darauf hinweisen, einen anderen Weg konnten wir diese gelöst haben. 211 00:09:31,730 --> 00:09:35,580 Lassen Sie mich tatsächlich wieder rollen in der Zeit wann hatten wir dies als eine 212 00:09:35,580 --> 00:09:36,680 Zehntel vor einem Augenblick. 213 00:09:36,680 --> 00:09:40,800 Und lassen Sie mich gehen Sie vor und speichern Sie diese Datei als einem anderen Dateinamen, um nur 214 00:09:40,800 --> 00:09:41,750 habe ein kleines Checkpoint. 215 00:09:41,750 --> 00:09:43,450 Das war also eine Version. 216 00:09:43,450 --> 00:09:45,520 Und jetzt lassen Sie mich gehen Sie vor und Führen Sie eine weitere Version. 217 00:09:45,520 --> 00:09:48,540 Wir nennen diese Version zwei Null indiziert. 218 00:09:48,540 --> 00:09:51,280 >> Und ich werde tun, anstatt diese - wissen Sie was? 219 00:09:51,280 --> 00:09:54,400 Hinzufügen von Punkt Null arbeitet in diesem Fall. 220 00:09:54,400 --> 00:09:56,060 Aber angenommen, man waren eine Variable. 221 00:09:56,060 --> 00:09:57,680 Vermeintliche 10 waren eine Variable. 222 00:09:57,680 --> 00:10:00,680 In anderen Worten, die ich nicht annehmen konnte nur hartcodieren .0 am Ende 223 00:10:00,680 --> 00:10:02,340 dieser arithmetischen Ausdruck. 224 00:10:02,340 --> 00:10:05,820 Nun, ich kann tatsächlich etwas tun in Klammern genannt Gießen. 225 00:10:05,820 --> 00:10:11,920 Ich kann das ganze Zahl 10 mit einem Schwimmer gegossen, und ich kann diese Zahl ein, um ein gegossen 226 00:10:11,920 --> 00:10:12,800 schweben, wie gut. 227 00:10:12,800 --> 00:10:17,190 Dann ist die Mathematik, die gehen zu tun ist effektiv 1,0 dividiert durch 10,0, 228 00:10:17,190 --> 00:10:19,250 zur Folge hat, geht in f wie zuvor. 229 00:10:19,250 --> 00:10:26,130 Also, wenn ich neu kompilieren dies als Schwimmer machen 2, und nun schwebt 2, bekomme ich die gleiche 230 00:10:26,130 --> 00:10:27,020 beantworten, wie gut. 231 00:10:27,020 --> 00:10:29,640 >> Das ist also ein ziemlich konstruiertes Beispiel, Zur Lösung dieses Problems 232 00:10:29,640 --> 00:10:31,400 indem Gießen. 233 00:10:31,400 --> 00:10:34,410 Aber im Allgemeinen ist Gießen sein wird eine mächtige Sache, vor allem für 234 00:10:34,410 --> 00:10:38,180 Problem stellte zwei in einer Woche, wenn Sie wollen einen Datentyp konvertieren 235 00:10:38,180 --> 00:10:41,800 eine andere, am Ende des Tages werden in der gleichen Art und Weise dargestellt. 236 00:10:41,800 --> 00:10:44,970 Am Ende des Tages, jeder einzelne was wir gesprochen haben bisher ist 237 00:10:44,970 --> 00:10:46,710 nur ints unter der Haube. 238 00:10:46,710 --> 00:10:48,950 Oder wenn das ist zu Low-Level für Sie, sie sind nur Zahlen 239 00:10:48,950 --> 00:10:49,750 unter der Haube. 240 00:10:49,750 --> 00:10:52,850 Auch Zeichen, wieder erinnern von Woche Null, sind Zahlen 241 00:10:52,850 --> 00:10:53,990 unter der Haube. 242 00:10:53,990 --> 00:10:57,240 >> Welches ist zu sagen, wir können zwischen konvertieren verschiedene Arten von Zahlen, wenn 243 00:10:57,240 --> 00:10:58,060 sie sind nur Bits. 244 00:10:58,060 --> 00:11:01,020 Wir können zwischen Zahlen umwandeln und Briefe, wenn sie sind nur 245 00:11:01,020 --> 00:11:02,580 Bits, und umgekehrt. 246 00:11:02,580 --> 00:11:07,170 Und Gießen auf diese Weise ist ein Mechanismus in der Programmierung können Sie das zwangsweise 247 00:11:07,170 --> 00:11:10,970 ändern einem Datentyp in einen anderen. 248 00:11:10,970 --> 00:11:14,570 Leider ist dies nicht als einfach, wie ich vielleicht gewünscht hätte. 249 00:11:14,570 --> 00:11:19,220 >> Ich gehe zurück in Schwimmern 1, war das die einfachere, 250 00:11:19,220 --> 00:11:22,830 einfach eins mit .0 Hinzugefügt auf jeden. 251 00:11:22,830 --> 00:11:25,260 Und nur als kurze Auffrischung, lassen Sie mich gehen und kompilieren 252 00:11:25,260 --> 00:11:27,670 Dazu machen Schwimmern 2 - 253 00:11:27,670 --> 00:11:30,300 Leider ist der Schwimmer machen 1. 254 00:11:30,300 --> 00:11:32,050 Und nun lasst uns laufen schwimmt 1. 255 00:11:32,050 --> 00:11:34,810 Und in der unteren, bemerken dass ich tatsächlich bekommen 0,1. 256 00:11:34,810 --> 00:11:36,165 So, Problem gelöst. 257 00:11:36,165 --> 00:11:37,280 >> Aber noch nicht. 258 00:11:37,280 --> 00:11:40,000 Ich gehe jetzt, um ein wenig neugierig, und ich werde zurück in meine 259 00:11:40,000 --> 00:11:41,620 printf Anweisung und sagen, weißt du was? 260 00:11:41,620 --> 00:11:44,090 Ich möchte, dass dies zu bestätigen ist wirklich ein Zehntel. 261 00:11:44,090 --> 00:11:47,890 Und ich werde sehen wollen , sagen wir, fünf Dezimalstellen. 262 00:11:47,890 --> 00:11:48,570 Es ist nicht ein Problem. 263 00:11:48,570 --> 00:11:52,020 Ich die zwei bis fünf, Ich kompilieren mit zu machen. 264 00:11:52,020 --> 00:11:53,770 I erneut als 1 schwimmt. 265 00:11:53,770 --> 00:11:54,990 Sieht ziemlich gut aus. 266 00:11:54,990 --> 00:11:58,570 Meine Gesundheit Kontrollen könnte es beenden, aber Ich bin immer ein wenig abenteuerlicher. 267 00:11:58,570 --> 00:12:00,330 Ich werde 0,5-0,10 ändern. 268 00:12:00,330 --> 00:12:03,440 Ich will 10 Stellen nach sehen die Dezimalstelle. 269 00:12:03,440 --> 00:12:09,060 >> Und ich werde weitermachen und neu kompilieren dies und erneut schwimmt 1. 270 00:12:09,060 --> 00:12:13,060 Ich Art von Bedauern mit diesem getestet weiter, weil mein Mathe ist nicht so 271 00:12:13,060 --> 00:12:14,320 mehr korrigieren, so scheint es. 272 00:12:14,320 --> 00:12:15,630 Aber warten Sie eine Minute, vielleicht das ist nur ein Zufall. 273 00:12:15,630 --> 00:12:17,810 Vielleicht ist der Computer handelt ein wenig seltsam. 274 00:12:17,810 --> 00:12:21,810 Lassen Sie mich gehen Sie vor und machen 20 Dezimalstellen und versichern mir, dass ich weiß, 275 00:12:21,810 --> 00:12:22,540 wie Mathematik zu tun. 276 00:12:22,540 --> 00:12:23,460 Ich weiß, wie man programmiert. 277 00:12:23,460 --> 00:12:26,960 Als Schwimmer 1, neu zusammenstellen, verdammt noch mal. 278 00:12:26,960 --> 00:12:31,110 Das ist wirklich, wirklich immer weit von der Marke. 279 00:12:31,110 --> 00:12:32,490 >> Also, was ist denn hier los? 280 00:12:32,490 --> 00:12:36,050 Intuitiv auf unseren Annahmen früher über die Größe der Datentypen 281 00:12:36,050 --> 00:12:38,040 was ist hier geschehen unter der Haube? 282 00:12:38,040 --> 00:12:39,290 Ja? 283 00:12:39,290 --> 00:12:43,000 284 00:12:43,000 --> 00:12:43,590 Genau. 285 00:12:43,590 --> 00:12:46,480 Wenn Sie wollen, dass diese viel Präzision und das ist eine verdammt viel Präzision - 286 00:12:46,480 --> 00:12:48,770 20 Zahlen nach dem Komma. 287 00:12:48,770 --> 00:12:51,990 Du kannst nicht stellen ein beliebige Zahl, wenn Sie ein haben 288 00:12:51,990 --> 00:12:52,930 beliebige Anzahl von Bits. 289 00:12:52,930 --> 00:12:54,190 Aber wir tun es nicht. 290 00:12:54,190 --> 00:12:57,200 Für einen Schwimmer, wir haben nur 32 Bit. 291 00:12:57,200 --> 00:13:02,260 >> Wenn also 32 Bit nur in einem permutiert Weise - genau wie unsere Menschen auf, Bühne 292 00:13:02,260 --> 00:13:05,780 Hände nach oben oder unten - in einer endlichen Anzahl von Möglichkeiten, es gibt nur eine begrenzte Anzahl 293 00:13:05,780 --> 00:13:08,640 der reellen Zahlen Sie repräsentieren mit diesen Bits. 294 00:13:08,640 --> 00:13:10,500 Und damit der Computer schließlich wird gehen zu müssen, 295 00:13:10,500 --> 00:13:11,730 fang an zu schneiden Ecken. 296 00:13:11,730 --> 00:13:15,500 Der Computer kann diese Details verbergen von uns für ein wenig Zeit. 297 00:13:15,500 --> 00:13:18,880 Aber wenn wir anfangen Stossen auf die Zahlen und suchen weiter und weiter in die 298 00:13:18,880 --> 00:13:23,220 Hinterkante Zahlen in der ganzen Zahl, dann beginnen wir zu sehen, dass es 299 00:13:23,220 --> 00:13:26,480 tatsächlich annähernd die Idee von einem Zehntel. 300 00:13:26,480 --> 00:13:29,860 >> Und so stellt sich heraus, tragisch, es gibt eine unendliche Anzahl von Zahlen 301 00:13:29,860 --> 00:13:35,060 können wir nicht genau darstellen in eine Computer mindestens mit einer endlichen 302 00:13:35,060 --> 00:13:38,030 Anzahl von Bits, eine endliche Menge an RAM. 303 00:13:38,030 --> 00:13:41,210 Nun leider das manchmal hat reale Konsequenzen. 304 00:13:41,210 --> 00:13:45,980 Wenn die Menschen nicht recht zu schätzen oder irgendwie für selbstverständlich die Tatsache, 305 00:13:45,980 --> 00:13:48,310 dass ihre Computer einfach, was sie sagen, es zu tun und nicht 306 00:13:48,310 --> 00:13:51,430 verstehen diese zugrunde liegenden Darstellung Details - 307 00:13:51,430 --> 00:13:55,290 davon, ehrlich gesagt, in einigen Sprachen sind versteckt vom Benutzer, im Gegensatz zu C - 308 00:13:55,290 --> 00:13:56,500 einige schlechte Dinge passieren können. 309 00:13:56,500 --> 00:13:58,650 >> Und was ich dachte, wir hätten tun ist ein Schritt zurück. 310 00:13:58,650 --> 00:14:00,420 Und hier geht es um eine Acht-Minuten-Video. 311 00:14:00,420 --> 00:14:04,200 Es lüftete vor ein paar Jahren, und es gibt Einblicke in eigentlich das, was gehen kann 312 00:14:04,200 --> 00:14:09,290 falsch, wenn Sie unter-schätzen diese Arten von Informationen in der allzu sehr 313 00:14:09,290 --> 00:14:10,080 realen Welt. 314 00:14:10,080 --> 00:14:12,965 Wenn wir könnten die Beleuchtung dimmen für ein paar Minuten. 315 00:14:12,965 --> 00:14:14,360 >> Sprecher 1: Wir kommen jetzt zu Engineering zurück 316 00:14:14,360 --> 00:14:17,160 Katastrophen auf Modern Marvels. 317 00:14:17,160 --> 00:14:18,680 >> Computer - 318 00:14:18,680 --> 00:14:21,340 wir alle kommen, um das zu akzeptieren oft frustrierenden Probleme 319 00:14:21,340 --> 00:14:23,170 dass mit ihnen zu gehen. 320 00:14:23,170 --> 00:14:27,570 Bugs, Viren-und Software-Pannen sind kleine Preise, die für die zahlen 321 00:14:27,570 --> 00:14:28,960 Komfort. 322 00:14:28,960 --> 00:14:32,040 Aber in High-Tech-und High-Speed Militär-und Raumfahrt 323 00:14:32,040 --> 00:14:38,650 Anwendungen, die kleinste Problem kann in die Katastrophe vergrößert werden. 324 00:14:38,650 --> 00:14:44,480 >> Am 4. Juni 1996 vorbereitet Wissenschaftler Start einer unbemannten Rakete Ariane 5. 325 00:14:44,480 --> 00:14:48,700 Es trug wissenschaftliche Satelliten entwickelt, um genau wie zu etablieren 326 00:14:48,700 --> 00:14:53,250 das Erdmagnetfeld interagiert mit Sonnenwind. 327 00:14:53,250 --> 00:14:57,540 Die Rakete wurde von der Europäischen gebaut Weltraumorganisation und sich von seiner angehobenen 328 00:14:57,540 --> 00:14:59,906 Anlage an der Küste von Französisch-Guayana. 329 00:14:59,906 --> 00:15:03,660 >> JACK Ganssle: Bei etwa 37 Sekunden in die Flucht, sie zum ersten Mal bemerkt 330 00:15:03,660 --> 00:15:04,910 etwas schief lief. 331 00:15:04,910 --> 00:15:08,130 Die Düsen wurden in schwenkbarer ein Weg, sie sollten wirklich nicht. 332 00:15:08,130 --> 00:15:12,380 Etwa 40 Sekunden nach dem Flug deutlich das Fahrzeug war in Schwierigkeiten. 333 00:15:12,380 --> 00:15:14,400 Und das ist, wenn sie einen Entscheidung, es zu zerstören. 334 00:15:14,400 --> 00:15:18,520 Der Bereich Safety Officer, mit enormen Mut, drückte auf den Knopf, 335 00:15:18,520 --> 00:15:23,900 explodierte die Rakete, bevor es könnte zu einer Gefahr für die öffentliche Sicherheit. 336 00:15:23,900 --> 00:15:27,810 >> Sprecher 1: Das war die Jungfernfahrt der Ariane 5 und der Zerstörung 337 00:15:27,810 --> 00:15:32,020 erfolgte aufgrund eines Fehlers eingebettet in der Rakete Software. 338 00:15:32,020 --> 00:15:33,980 >> JACK Ganssle: Das Problem an der Ariane war, dass es eine Reihe 339 00:15:33,980 --> 00:15:36,390 dass erforderliche 64 Bit zu äußern. 340 00:15:36,390 --> 00:15:39,420 Und sie wollte konvertieren einem 16-Bit-Zahl. 341 00:15:39,420 --> 00:15:43,130 Sie gingen davon aus, dass die Anzahl war nie wird sehr groß, dass die meisten 342 00:15:43,130 --> 00:15:46,810 diese Stellen in der 64-Bit Zahl waren Nullen. 343 00:15:46,810 --> 00:15:48,270 Sie waren falsch. 344 00:15:48,270 --> 00:15:51,380 >> Sprecher 1: Die Unfähigkeit einer Software Programm, um die Art akzeptieren 345 00:15:51,380 --> 00:15:55,350 Zahl durch eine andere erzeugt wurde an der Wurzel des Scheiterns. 346 00:15:55,350 --> 00:15:59,970 Software-Entwicklung hatte sich zu einem sehr kostspielige Teil der neuen Technologie. 347 00:15:59,970 --> 00:16:03,980 Die Ariane-4-Rakete war sehr gewesen erfolgreich, so viel von der Software 348 00:16:03,980 --> 00:16:07,480 erstellt für sie war auch verwendet in der Ariane 5. 349 00:16:07,480 --> 00:16:11,980 >> PHILIP COYLE: Das grundlegende Problem war dass die Ariane 5 war schneller, 350 00:16:11,980 --> 00:16:13,720 beschleunigt schneller. 351 00:16:13,720 --> 00:16:17,250 Und die Software hatte nicht entfielen dafür. 352 00:16:17,250 --> 00:16:20,770 >> Sprecher 1: Die Zerstörung der Rakete war ein riesiges finanzielles Desaster, 353 00:16:20,770 --> 00:16:24,200 allem auf eine Minute Softwarefehler. 354 00:16:24,200 --> 00:16:27,820 Aber das war nicht das erste Mal Daten Konvertierung Probleme geplagt hatte modernen 355 00:16:27,820 --> 00:16:30,620 Raketentechnik. 356 00:16:30,620 --> 00:16:34,480 >> JACK Ganssle: Im Jahr 1991, mit dem Beginn des ersten Golfkriegs, der Patriot 357 00:16:34,480 --> 00:16:38,610 Rakete erlebt eine ähnliche Art einer Reihe Umwandlung Problem. 358 00:16:38,610 --> 00:16:44,910 Als Ergebnis wurden 28 amerikanische Soldaten getötet und etwa 100 weitere verletzt 359 00:16:44,910 --> 00:16:48,600 wenn der Patriot, der sollte gegen eingehende Scuds zu schützen, 360 00:16:48,600 --> 00:16:51,630 versäumt, eine Rakete abzufeuern. 361 00:16:51,630 --> 00:16:55,110 >> Sprecher 1: Als der Irak in Kuwait einmarschierte und America startete Desert Storm in 362 00:16:55,110 --> 00:17:00,570 Anfang 1991 Patriot Raketen-Batterien wurden eingesetzt, um Saudi-Arabien zu schützen 363 00:17:00,570 --> 00:17:04,760 und Israel von irakischen Scud Raketenangriffe. 364 00:17:04,760 --> 00:17:09,720 Der Patriot ist ein US-Mittelstreckenraketen Boden-Luft-System hergestellt von 365 00:17:09,720 --> 00:17:11,569 die Firma Raytheon. 366 00:17:11,569 --> 00:17:16,410 >> THEODOR postol: Die Größe des Patriot Abfangjäger selbst ist rund 367 00:17:16,410 --> 00:17:17,710 20 Meter lang. 368 00:17:17,710 --> 00:17:20,800 Und es wiegt etwa 2000 Pfund. 369 00:17:20,800 --> 00:17:22,940 Und es trägt einen Sprengkopf von etwa - 370 00:17:22,940 --> 00:17:24,905 Ich denke, es ist rund 150 Pfund. 371 00:17:24,905 --> 00:17:31,030 Und der Gefechtskopf selbst ist ein hochexplosive die hat 372 00:17:31,030 --> 00:17:33,270 Fragmente um ihn herum. 373 00:17:33,270 --> 00:17:37,490 Das Gehäuse der Gefechtskopf ausgelegt wie Schrot handeln. 374 00:17:37,490 --> 00:17:40,720 >> Sprecher 1: Die Raketen sind vier durchgeführt pro Container und transportiert werden 375 00:17:40,720 --> 00:17:43,050 von einem Sattelauflieger. 376 00:17:43,050 --> 00:17:47,490 >> PHILIP COYLE: Die Patriot-Anti-Raketen System geht zurück 377 00:17:47,490 --> 00:17:50,710 mindestens 20 Jahren. 378 00:17:50,710 --> 00:17:54,350 Es wurde ursprünglich als entworfen ein Luftabwehrflugkörper zu 379 00:17:54,350 --> 00:17:56,190 abzuschießen feindliche Flugzeuge. 380 00:17:56,190 --> 00:18:02,490 In dem ersten Golfkrieg, als dass der Krieg kam, wollte die Armee, es zu benutzen 381 00:18:02,490 --> 00:18:05,535 abzuschießen Scuds, nicht Flugzeuge. 382 00:18:05,535 --> 00:18:09,310 Die irakische Luftwaffe war nicht so sehr ein Problem. 383 00:18:09,310 --> 00:18:12,450 Aber die Armee über Scuds besorgt. 384 00:18:12,450 --> 00:18:15,950 Und so versuchten sie zu aktualisieren der Patriot. 385 00:18:15,950 --> 00:18:18,750 >> Sprecher 1: Abfangen eine feindliche Rakete Reisen mit mach fünf Jahre alt war 386 00:18:18,750 --> 00:18:20,890 gehen, um genug eine Herausforderung sein. 387 00:18:20,890 --> 00:18:25,590 Aber wenn der Patriot wurde in gehetzt Service, war die Armee nicht bewusst ein 388 00:18:25,590 --> 00:18:31,710 Irakischen Modifikation gemacht, die ihre Scuds fast unmöglich zu schlagen. 389 00:18:31,710 --> 00:18:35,240 >> THEODOR postol: Was ist passiert ist die Scuds, die waren 390 00:18:35,240 --> 00:18:36,570 kommen in waren instabil. 391 00:18:36,570 --> 00:18:37,532 Sie wurden Wackeln. 392 00:18:37,532 --> 00:18:43,220 Der Grund dafür war die Iraker, in Um 600 Kilometer raus aus ein 393 00:18:43,220 --> 00:18:47,530 300-Kilometer-range missile, nahm Gewicht aus dem vorderen Sprengkopf. 394 00:18:47,530 --> 00:18:49,290 Sie machten der Gefechtskopf leichter. 395 00:18:49,290 --> 00:18:53,110 So, jetzt die Patriot versucht an der Scud kommen. 396 00:18:53,110 --> 00:18:56,470 Und die meisten der Zeit, die überwältigende Mehrheit der Zeit, wäre es nur 397 00:18:56,470 --> 00:18:58,730 fliegen durch die Scud. 398 00:18:58,730 --> 00:19:01,760 >> Sprecher 1: Nachdem die Patriot-System Betreiber erkannte das Patriot verpasst 399 00:19:01,760 --> 00:19:06,690 ihr Ziel, sie den Patriots gezündet Sprengkopf zu vermeiden möglich 400 00:19:06,690 --> 00:19:10,300 Opfer, wenn es erlaubt wurde auf den Boden fallen. 401 00:19:10,300 --> 00:19:14,540 >> THEODOR postol: Das war, was die meisten Menschen sahen wie große Feuerbälle in den Himmel 402 00:19:14,540 --> 00:19:20,350 und wie fängt missverstanden von Scud Sprengköpfe. 403 00:19:20,350 --> 00:19:23,320 >> Sprecher 1: Obwohl in den Nachthimmel Patriots erschien, um erfolgreich zu sein 404 00:19:23,320 --> 00:19:27,530 zerstören Scuds bei Dhahran es konnte kein Fehler sein, über seine 405 00:19:27,530 --> 00:19:29,140 Leistung. 406 00:19:29,140 --> 00:19:34,180 Dort verloren die Patriots Radarsystem Spur eines eingehenden Scud und nie 407 00:19:34,180 --> 00:19:36,380 startete aufgrund eines Software-Fehlers. 408 00:19:36,380 --> 00:19:39,890 409 00:19:39,890 --> 00:19:42,700 >> Es war die Israelis, die zum ersten Mal entdeckt Je länger das System 410 00:19:42,700 --> 00:19:48,020 war, desto größer ist die Zeitabweichung wurde durch ein Taktsignal 411 00:19:48,020 --> 00:19:50,470 eingebettet in das System der Computer. 412 00:19:50,470 --> 00:19:54,640 >> JACK Ganssle: Etwa zwei Wochen vor dem Tragödie in Dhahran, die Israelis 413 00:19:54,640 --> 00:19:58,440 berichtet, das Verteidigungsministerium dass das System Zeit zu verlieren. 414 00:19:58,440 --> 00:20:01,280 Nach etwa acht Stunden läuft, sie bemerkt, dass das System 415 00:20:01,280 --> 00:20:03,530 zusehends ungenauer. 416 00:20:03,530 --> 00:20:07,710 Das Verteidigungsministerium reagierte mit sagt allen der Patriot-Batterien 417 00:20:07,710 --> 00:20:10,500 nicht zu verlassen, die Systeme für eine lange Zeit. 418 00:20:10,500 --> 00:20:12,430 Sie habe nie gesagt, was für eine lange Zeit war. 419 00:20:12,430 --> 00:20:13,330 Acht Stunden? 420 00:20:13,330 --> 00:20:13,810 10 Stunden? 421 00:20:13,810 --> 00:20:14,990 1000 Stunden? 422 00:20:14,990 --> 00:20:17,150 Niemand wusste. 423 00:20:17,150 --> 00:20:20,220 >> Sprecher 1: Die Patriot-Batterie stationiert in der Kaserne in Dhahran 424 00:20:20,220 --> 00:20:24,660 und seine interne Uhr fehlerhaft gewesen auf über 100 Stunden in der Nacht 425 00:20:24,660 --> 00:20:27,470 25. Februar. 426 00:20:27,470 --> 00:20:31,770 >> JACK Ganssle: Es verfolgt Zeit, um ein Genauigkeit von etwa einem Zehntel einer Sekunde. 427 00:20:31,770 --> 00:20:34,480 Nun ist eine Zehntelsekunde ein interessante Zahl, weil es kann nicht sein 428 00:20:34,480 --> 00:20:39,940 ausgedrückt in binäre genau, was bedeutet, es kann nicht genau ausgedrückt werden 429 00:20:39,940 --> 00:20:42,500 einem modernen digitalen Computers. 430 00:20:42,500 --> 00:20:46,920 Es ist schwer zu glauben, aber Verwenden Sie diese als Beispiel. 431 00:20:46,920 --> 00:20:49,000 Nehmen wir die Nummer eins Drittel. 432 00:20:49,000 --> 00:20:53,150 Ein Drittel kann nicht ausgedrückt werden in Nachkommastelle genau. 433 00:20:53,150 --> 00:20:57,500 Ein Drittel ist 0.333 gehen on für die Unendlichkeit. 434 00:20:57,500 --> 00:21:02,270 Es gibt keine Möglichkeit, dass mit zu tun absolute Genauigkeit in Dezimalstellen. 435 00:21:02,270 --> 00:21:05,370 Das ist genau die gleiche Art von Problem das geschah in der Patriot. 436 00:21:05,370 --> 00:21:09,880 Je länger das System lief, die Schlimmste der Zeitfehler wurde. 437 00:21:09,880 --> 00:21:13,840 >> Sprecher 1: Nach 100 Betriebsstunden, die Fehler in der Zeit nur 438 00:21:13,840 --> 00:21:16,140 etwa ein Drittel einer Sekunde. 439 00:21:16,140 --> 00:21:20,800 Aber in Bezug auf Targeting eine Rakete Reisen mit mach fünf, führte es in 440 00:21:20,800 --> 00:21:24,410 ein Tracking Error von über 600 Metern. 441 00:21:24,410 --> 00:21:27,670 Es wäre ein fataler Fehler sein die Soldaten bei Dhahran. 442 00:21:27,670 --> 00:21:33,450 >> THEODOR postol: Was passiert ist, ist ein Scud Einführung wurde von früh erkannt 443 00:21:33,450 --> 00:21:34,280 Warnung Satelliten. 444 00:21:34,280 --> 00:21:38,550 Und sie wusste, dass die Scud kam in ihrer allgemeinen Richtung. 445 00:21:38,550 --> 00:21:41,000 Sie wussten nicht, wo es kam. 446 00:21:41,000 --> 00:21:43,900 >> Sprecher 1: Es war nun an dem Radar Bestandteil des Patriot-System 447 00:21:43,900 --> 00:21:48,910 Verteidigung Dhahran zu lokalisieren und zu halten Verfolgen Sie die ankommenden feindlichen Rakete. 448 00:21:48,910 --> 00:21:50,580 >> JACK Ganssle: Das Radar war sehr smart. 449 00:21:50,580 --> 00:21:53,770 Es wäre tatsächlich verfolgen die Position des die Scud und dann vorhersagen, wo es 450 00:21:53,770 --> 00:21:57,160 wohl das nächste Mal sein das Radar schickte einen Impuls aus. 451 00:21:57,160 --> 00:21:58,870 Dass hieß der Bereich Tor. 452 00:21:58,870 --> 00:22:04,020 >> THEODOR postol: Dann, wenn der Patriot entscheidet genug Zeit verstrichen ist, um zu gehen 453 00:22:04,020 --> 00:22:09,420 zurück und überprüfen Sie die nächste Position für Diese erfassten Objekt, geht es zurück. 454 00:22:09,420 --> 00:22:14,450 Also, wenn es ging zurück in die falsche Ort, es sieht dann kein Objekt. 455 00:22:14,450 --> 00:22:18,200 Und es entscheidet, dass es keine Rolle spielt, es war eine falsche Erfassung und 456 00:22:18,200 --> 00:22:19,680 lässt den Track. 457 00:22:19,680 --> 00:22:22,970 >> Sprecher 1: Der eingehende Scud verschwunden vom Radarschirm und 458 00:22:22,970 --> 00:22:26,050 Sekunden später knallte in der Kaserne. 459 00:22:26,050 --> 00:22:31,950 Die Scud getötet und 28 war die letzte feuerte während des ersten Golfkriegs. 460 00:22:31,950 --> 00:22:37,700 Tragischerweise kam die aktualisierte Software bei Dhahran am folgenden Tag. 461 00:22:37,700 --> 00:22:41,800 Die Software Fehler festgesetzt worden war, Schließen eines Kapitels in der unruhigen 462 00:22:41,800 --> 00:22:43,690 Geschichte der Patriot Raketen. 463 00:22:43,690 --> 00:22:46,780 464 00:22:46,780 --> 00:22:50,710 >> Patriot ist eigentlich eine Abkürzung für Phased Array aufspürenden 465 00:22:50,710 --> 00:22:51,960 Fangen des Ziels. 466 00:22:51,960 --> 00:22:54,650 467 00:22:54,650 --> 00:23:00,840 >> DAVID J MALAN: All right, so ein ernüchternd Beispiel sicher zu sein. 468 00:23:00,840 --> 00:23:03,430 Und zum Glück, diese untere Ebene Bugs sind nicht etwas, dass wir 469 00:23:03,430 --> 00:23:06,220 haben in der Regel zu schätzen, sicherlich nicht mit einigen unserer 470 00:23:06,220 --> 00:23:07,360 frühesten von Programmen. 471 00:23:07,360 --> 00:23:10,450 Vielmehr sind die meisten Bugs du wirst Begegnung wird logisch in der Natur, 472 00:23:10,450 --> 00:23:12,900 syntaktische in der Natur, wobei die Code einfach nicht richtig funktionieren. 473 00:23:12,900 --> 00:23:14,140 Und Sie wissen, dass es ziemlich schnell. 474 00:23:14,140 --> 00:23:16,850 >> Aber vor allem, wenn wir bekommen, um die Ende des Semesters, es zu gehen 475 00:23:16,850 --> 00:23:20,620 werden mehr und mehr von einer Möglichkeit, wirklich schwer denken über die Gestaltung 476 00:23:20,620 --> 00:23:22,960 Ihrer Programme und der zugrunde liegenden Darstellung 477 00:23:22,960 --> 00:23:24,520 auch dort der Daten. 478 00:23:24,520 --> 00:23:28,010 Zum Beispiel werden wir Ihnen MySQL, Das ist eine beliebte Datenbank-Engine 479 00:23:28,010 --> 00:23:30,850 dass man mit Websites zu verwenden Speichern von Daten auf dem Back-End. 480 00:23:30,850 --> 00:23:34,630 Und du musst anfangen zu entscheiden, das Ende des Semesters nicht nur, was 481 00:23:34,630 --> 00:23:38,790 Arten von Daten entlang dieser Linien zu bedienen aber genau, wie viele Bits zu verwenden, 482 00:23:38,790 --> 00:23:42,740 ob Sie wollen, um Daten zu speichern wie Datums-und Zeitangaben als Zeiten, und auch 483 00:23:42,740 --> 00:23:46,890 Dinge wie, wie groß wollen Sie das eindeutige IDs für, sagen wir, die Nutzer 484 00:23:46,890 --> 00:23:47,680 in Ihrer Datenbank. 485 00:23:47,680 --> 00:23:51,210 >> In der Tat, wenn einige von euch gehabt haben Facebook-Konten seit geraumer Zeit, 486 00:23:51,210 --> 00:23:53,680 und Sie wissen, wie man Zugang zu erhalten Ihre Benutzer-ID - 487 00:23:53,680 --> 00:23:57,930 die manchmal zeigt sich in Ihrem Profil-URL sofern du gewählt 488 00:23:57,930 --> 00:24:02,070 Spitznamen für den URL, oder wenn Sie Gebraucht Facebooks Graph API, die 489 00:24:02,070 --> 00:24:05,510 öffentlich zugängliche API, mit dem Sie Facebook kann für Rohdaten fragen - 490 00:24:05,510 --> 00:24:07,580 Sie können sehen, was Ihre numerische ID ist. 491 00:24:07,580 --> 00:24:10,880 Und vor einigen Jahren, im Wesentlichen Facebook musste von der Nutzung verändern 492 00:24:10,880 --> 00:24:15,980 das Äquivalent von ints zu lange mit lange, denn im Laufe der Zeit als Nutzer kommen 493 00:24:15,980 --> 00:24:19,780 und gehen und schaffen viele Konten und Fake-Accounts, auch sie sehr leicht 494 00:24:19,780 --> 00:24:24,630 konnten so etwas wie ein 4 erschöpfen Milliarden möglichen Wert wie ein int. 495 00:24:24,630 --> 00:24:28,340 >> Also mehr auf diese Art von Fragen auf der Straße, als auch. 496 00:24:28,340 --> 00:24:30,750 Na gut, das war also Gießen. 497 00:24:30,750 --> 00:24:31,670 Das war Ungenauigkeit. 498 00:24:31,670 --> 00:24:32,730 Ein paar schnellen Ankündigungen. 499 00:24:32,730 --> 00:24:35,710 So Abschnitte beginnen offiziell am kommenden Sonntag, Montag, Dienstag. 500 00:24:35,710 --> 00:24:39,080 Sie werden per E-Mail zu hören im Laufe dieser Woche um Ihre Abschnitt Zuordnung. 501 00:24:39,080 --> 00:24:42,570 Und du wirst auch hier an dieser Stelle, wie Ihren Abschnitt ändern, wenn Ihr 502 00:24:42,570 --> 00:24:45,660 Zeitplan hat sich nun geändert oder Ihre Komfort hat sich nun geändert. 503 00:24:45,660 --> 00:24:49,380 Inzwischen P-Satz eins und eins sind Hacker wegen diesem Donnerstag mit der Option, 504 00:24:49,380 --> 00:24:52,450 Verlängerung dieser Frist die pro Spezifikationen bis Freitag 505 00:24:52,450 --> 00:24:53,830 in typischer Weise. 506 00:24:53,830 --> 00:24:57,500 >> Erkenne, dass mit dem Problem enthalten Satz Spezifikationen sind Anweisungen auf 507 00:24:57,500 --> 00:25:02,770 wie das Gerät zu benutzen ist CS50, Marke, sowie einige spezifische Instrumente CS50 508 00:25:02,770 --> 00:25:06,540 wie Stil 50, die Sie bereitstellen können mit Feedback dynamisch auf die 509 00:25:06,540 --> 00:25:10,230 Qualität Ihres Codes Stil und auch Check 50, die können Ihnen mit 510 00:25:10,230 --> 00:25:13,160 dynamische Rückmeldung bezüglich Ihrer Code des Richtigkeit. 511 00:25:13,160 --> 00:25:16,850 Verzeihen Sie, dass wir immer noch Bügeln aus ein paar Knicke mit Check 50. 512 00:25:16,850 --> 00:25:21,490 Ein paar von deinen Klassenkameraden, hat starten um 04.00 Uhr am Freitagabend, wenn 513 00:25:21,490 --> 00:25:25,130 die spec ging seitdem bemerkt haben ein paar Bugs, die wir arbeiten 514 00:25:25,130 --> 00:25:29,010 durch, und entschuldige mich für alle, die erlebt hat unnötige Frustrationen. 515 00:25:29,010 --> 00:25:30,340 Der Fehler ist meins. 516 00:25:30,340 --> 00:25:34,080 Aber wir werden im Nachgang zu der CS50 diskutieren, wenn das behoben ist. 517 00:25:34,080 --> 00:25:35,700 >> So ein Wort auf Partituren sich. 518 00:25:35,700 --> 00:25:38,990 So wird es ein oder zwei Wochen dauern, bis Sie starten, um Feedback zu bekommen Problem Sätze 519 00:25:38,990 --> 00:25:40,640 weil Sie noch nicht über eine Lehre Kerl. 520 00:25:40,640 --> 00:25:44,510 Und selbst dann werden wir anfangen zu bewerten die C Problem setzt, bevor wir 521 00:25:44,510 --> 00:25:46,970 zurück und bewerten Kratzer so dass Sie mehr relevant 522 00:25:46,970 --> 00:25:48,150 Feedback schneller. 523 00:25:48,150 --> 00:25:51,870 Aber im Allgemeinen pro Lehrplan, CS50 Problem-Sets sind entlang der ausgewertet 524 00:25:51,870 --> 00:25:53,580 nach vier Achsen - 525 00:25:53,580 --> 00:25:55,760 Umfang, Korrektheit, Design und Stil. 526 00:25:55,760 --> 00:25:59,210 >> Scope wird eine Reihe typischerweise zwischen null und fünf, dass 527 00:25:59,210 --> 00:26:01,830 erfasst, wie viel von der Stück, das Sie biss. 528 00:26:01,830 --> 00:26:03,750 Typischerweise wollen Sie dies bis fünf sein. 529 00:26:03,750 --> 00:26:05,300 Du musst mindestens alles versucht. 530 00:26:05,300 --> 00:26:09,330 Und feststellen, es ist ein Multiplikationsfaktor so dass dabei nur ein Teil der 531 00:26:09,330 --> 00:26:12,520 Problem-Set ist nicht die beste Strategie. 532 00:26:12,520 --> 00:26:15,610 >> Inzwischen mehr offensichtlich ist die Bedeutung der Richtigkeit - 533 00:26:15,610 --> 00:26:18,620 nur ist Ihr Programm korrekt mit Bezug auf die Spezifikation? 534 00:26:18,620 --> 00:26:21,510 Dies wird bewusst mehr gewichtet stark als die anderen beiden Achsen durch ein 535 00:26:21,510 --> 00:26:24,450 Faktor drei, weil wir erkennen, dass in der Regel wirst du ein verbringen 536 00:26:24,450 --> 00:26:28,600 viel mehr Zeit jagen einige Bugs, immer Ihren Code zu arbeiten, dann sind Sie 537 00:26:28,600 --> 00:26:31,540 sind es einrücken und die Wahl entsprechende Variablennamen und die 538 00:26:31,540 --> 00:26:33,800 mögen, ist die am anderen Ende des Spektrums des Stils. 539 00:26:33,800 --> 00:26:36,160 >> Das ist nicht zu sagen, Stil ist nicht wichtig, und wir predigen sie über 540 00:26:36,160 --> 00:26:37,920 Zeit sowohl in Vorträgen und in mehreren Abschnitten. 541 00:26:37,920 --> 00:26:40,520 Stil bezieht sich auf die Ästhetik Ihres Codes. 542 00:26:40,520 --> 00:26:43,980 Hast du gut gewählt genannten Variablen die kurze, aber etwas sind 543 00:26:43,980 --> 00:26:44,680 beschreibende? 544 00:26:44,680 --> 00:26:47,840 Ist Ihr Code eingerückt, wie Sie gesehen haben, in Vortrag und in einer Art und Weise 545 00:26:47,840 --> 00:26:49,070 Stil mit 50? 546 00:26:49,070 --> 00:26:51,220 >> Schließlich ist Design rechts es in der Mitte. 547 00:26:51,220 --> 00:26:54,090 Design ist das härter man eine Put- Finger auf, weil es viel mehr 548 00:26:54,090 --> 00:26:55,000 subjektiv. 549 00:26:55,000 --> 00:26:58,610 Aber es ist vielleicht die wichtigste von die drei Achsen in Bezug auf pädagogische 550 00:26:58,610 --> 00:27:02,050 Wert im Laufe der Zeit und dies wird Die Lehre Stipendiaten Gelegenheit, 551 00:27:02,050 --> 00:27:04,110 Ihnen qualitative Feedback. 552 00:27:04,110 --> 00:27:08,100 In der Tat, in CS50 obwohl wir zu tun haben diese Formeln und Partituren, am Ende 553 00:27:08,100 --> 00:27:11,350 des Tages sind diese sehr bewusst sehr kleine Eimer - Punktwerte 554 00:27:11,350 --> 00:27:13,460 von null bis drei und null und fünf. 555 00:27:13,460 --> 00:27:17,800 Wir versuchen nicht zu sehr grobe Linien zeichnen zwischen Problem-Sets oder zwischen 556 00:27:17,800 --> 00:27:21,490 Studenten, sondern so viel wie zu konzentrieren Wir können uns auf qualitative, longhand 557 00:27:21,490 --> 00:27:25,490 Feedback, entweder eingegeben oder verbal aus Ihre besondere Lehre Kerl, 558 00:27:25,490 --> 00:27:27,050 Sie bekommen ganz gut zu kennen. 559 00:27:27,050 --> 00:27:32,340 >> Aber im Allgemeinen, das sind die Gewichte dass die verschiedenen Achsen wird. 560 00:27:32,340 --> 00:27:35,480 Inzwischen zu, es lohnt halten in darauf, dass Sie sollten nicht davon ausgehen, dass ein 561 00:27:35,480 --> 00:27:38,870 drei von fünf ist ein 60% und daher grob versagt. 562 00:27:38,870 --> 00:27:41,410 Drei bewusst sein soll Art mitten auf der Straße gut. 563 00:27:41,410 --> 00:27:43,480 Wenn Sie immer zu dritt auf die Beginn des Semesters, das ist 564 00:27:43,480 --> 00:27:46,340 Tat soll ein guter sein Ort zu beginnen. 565 00:27:46,340 --> 00:27:50,510 Wenn Sie immer zu zweit, Messen sind, gibt es auf jeden Fall einiges an Arbeit, um ein wenig zu zahlen 566 00:27:50,510 --> 00:27:53,250 mehr Aufmerksamkeit, um die Vorteile Abschnitte und Bürozeiten. 567 00:27:53,250 --> 00:27:54,590 >> Wenn Sie immer Vieren und Fünfen, groß. 568 00:27:54,590 --> 00:27:57,430 Aber wirklich, hoffen wir, Flugbahnen sehen unter den Studierenden - sehr 569 00:27:57,430 --> 00:28:00,575 individualisiert pro Schüler, aber ausgehend das Semester hier in Art 570 00:28:00,575 --> 00:28:04,100 die zwei bis drei der Bereich endet jedoch hier oben in den vier vor fünf Bereich. 571 00:28:04,100 --> 00:28:05,440 Das ist, was wir wirklich suchen. 572 00:28:05,440 --> 00:28:09,590 Und wir haben im Hinterkopf behalten, dass das Delta Sie zeigen in den Wochen null und Woche 573 00:28:09,590 --> 00:28:12,170 12, wenn ich tue Noten. 574 00:28:12,170 --> 00:28:16,380 Es spielt für uns keine Rolle, wie absolut Sie fair zu Beginn, wenn Ihr 575 00:28:16,380 --> 00:28:19,330 Weise ist in der Tat nach oben und stark. 576 00:28:19,330 --> 00:28:24,000 >> Academic Ehrlichkeit - so lassen Sie mich auf meiner setzen ernster Stimme nur für einen Augenblick. 577 00:28:24,000 --> 00:28:28,510 Also dieser Kurs hat die Unterscheidung von Senden mehr Studierende als jede andere 578 00:28:28,510 --> 00:28:30,950 in der Geschichte der Anzeige Bord, glaube ich. 579 00:28:30,950 --> 00:28:34,220 Wir haben irgendwie nicht mehr zählen bei dieser Punkt, wie oft dies geschieht. 580 00:28:34,220 --> 00:28:37,090 Und das ist nicht, weil die Studenten in 50 sind mehr als ihre unehrlich 581 00:28:37,090 --> 00:28:38,690 Klassenkameraden anderswo. 582 00:28:38,690 --> 00:28:42,800 Aber erkennen Sie auch, dass wir sehr gut sind bei der Erkennung dieser Art von Dingen. 583 00:28:42,800 --> 00:28:45,920 >> Und das ist der Vorteil, dass ein Informatik Klasse hat, dass wir 584 00:28:45,920 --> 00:28:49,110 können und wir vergleichen alle Schüler Problem stellt paarweise gegen jeden 585 00:28:49,110 --> 00:28:51,470 andere, nicht nur in diesem Jahr aber alle Vorjahre. 586 00:28:51,470 --> 00:28:55,080 Wir haben die Fähigkeit, wie Studenten in die Klasse, um Google zu finden und Code 587 00:28:55,080 --> 00:28:57,440 auf Seiten wie github und Diskussionsforen. 588 00:28:57,440 --> 00:29:00,840 Es gibt absolut Lösungen für die CS50 p-Sets im Umlauf gibt. 589 00:29:00,840 --> 00:29:02,710 Aber wenn Sie sie finden können, können wir sie finden. 590 00:29:02,710 --> 00:29:07,130 Und all dies ist sehr viel automatisiert und einfach traurig für uns zu finden. 591 00:29:07,130 --> 00:29:10,990 >> Aber ich möchte betonen auch, dass die Natürlich akademischen Ehrlichkeit Politik 592 00:29:10,990 --> 00:29:13,960 sehr sein soll sehr das Gegenteil von diesem Geist. 593 00:29:13,960 --> 00:29:17,506 In der Tat, in diesem Jahr haben wir die Dinge neu formuliert in den Lehrplan, dies zu sein, Punkt 594 00:29:17,506 --> 00:29:19,790 dot dot, mit mehr Details in den Lehrplan. 595 00:29:19,790 --> 00:29:22,860 Aber das übergreifende Thema im Verlauf ist wirklich vernünftig zu sein. 596 00:29:22,860 --> 00:29:26,160 Wir wissen, dass es einen signifikanten Menge der pädagogischen 597 00:29:26,160 --> 00:29:30,550 Wert in der Zusammenarbeit, zu einem gewissen Grad, mit Klassenkameraden, wobei Sie 598 00:29:30,550 --> 00:29:33,700 zwei oder drei oder Sie Ihnen mehr sind Stehen an einer weißen Tafel 599 00:29:33,700 --> 00:29:35,670 Whiteboards, so zu sprechen, Ihre Ideen - 600 00:29:35,670 --> 00:29:39,480 Schreiben Sie Pseudocode in Bildern, Diagramme, was sollte Mario, wenn sein 601 00:29:39,480 --> 00:29:41,350 Sie waren zu schreiben, es zuerst in Pseudocode. 602 00:29:41,350 --> 00:29:43,240 Was sollte der Greedy-Algorithmus - 603 00:29:43,240 --> 00:29:46,100 wie sollte es pro verhalten Problem setzt man? 604 00:29:46,100 --> 00:29:50,440 >> Und so zu realisieren, dass das Verhalten dass wir zu fördern, ist sehr 605 00:29:50,440 --> 00:29:51,470 viel in diese Richtung. 606 00:29:51,470 --> 00:29:53,890 Und in den Lehrplan, sehen Sie ein ganze Reihe von Kugeln unter a 607 00:29:53,890 --> 00:29:57,740 angemessene Kategorie und ein nicht zumutbar Kategorie hilft, die uns helfen 608 00:29:57,740 --> 00:30:00,740 Sie wickeln Ihre Meinung um, wo wir ziehen diese Zeile. 609 00:30:00,740 --> 00:30:04,340 Und im Allgemeinen, eine anständige Faustregel ist, dass, wenn Sie kämpfen, um zu lösen 610 00:30:04,340 --> 00:30:07,990 einige Fehler und Ihr Freund oder Mitschüler ist neben Ihnen sitzt, ist es 611 00:30:07,990 --> 00:30:11,530 für Sie zumutbar, ihm zu zeigen oder ihre Ihr Code und sagen, hey, können Sie helfen 612 00:30:11,530 --> 00:30:13,700 mir herauszufinden, was los ist hier falsch? 613 00:30:13,700 --> 00:30:17,110 >> Wir in der Regel nicht umarmen die gegenüberliegende Seite. 614 00:30:17,110 --> 00:30:20,730 Es ist nicht die richtige Antwort für Ihre Freund oder Mitschüler hier um zu sagen, oh, 615 00:30:20,730 --> 00:30:22,510 nur bei mir und Abbildung aussehen es aus, dass. 616 00:30:22,510 --> 00:30:24,400 Das ist eine Art unvernünftig. 617 00:30:24,400 --> 00:30:27,750 Aber jemand anderes, ein anderes Gehirn, ein weiteres Paar Augen betrachten 618 00:30:27,750 --> 00:30:31,620 Ihrem Bildschirm oder schauen Sie auf Ihren Code und sagen: Du bist sicher, dass du 619 00:30:31,620 --> 00:30:32,760 um eine Schleife hier? 620 00:30:32,760 --> 00:30:34,800 Oder sind Sie sicher, dass Sie dass Semikolon hier? 621 00:30:34,800 --> 00:30:37,090 Oder oh, bedeutet, dass diese Fehlermeldung. 622 00:30:37,090 --> 00:30:39,580 Das sind sehr vernünftig und ermutigt Verhaltensweisen. 623 00:30:39,580 --> 00:30:44,010 >> Die Fälle, auf die ich in Anspielung wurde früher laufen auf, wenn die Schüler sind 624 00:30:44,010 --> 00:30:47,350 spät in der Nacht, dass schlechte Urteil Entscheidungen und E-Mail ihren Code zu 625 00:30:47,350 --> 00:30:50,130 jemand anderes oder einfach nur sagen, hier ist es in Dropbox oder 626 00:30:50,130 --> 00:30:51,610 Googeln spät in die Nacht. 627 00:30:51,610 --> 00:30:54,880 Und so würde ich ermutigen und bitte Sie, Wenn Sie über solche unvermeidlich 628 00:30:54,880 --> 00:30:58,450 Momente von Stress, Sie stoßen bis gegen die Frist, haben Sie keine späten 629 00:30:58,450 --> 00:31:01,490 Tag da es bereits Freitag an, dass Punkt-Mail an den Kurs die Köpfe oder 630 00:31:01,490 --> 00:31:02,330 mich direkt. 631 00:31:02,330 --> 00:31:04,790 Sagen Sie, hören Sie, ich bin an meinem Knackpunkt hier. 632 00:31:04,790 --> 00:31:06,660 Lassen Sie uns ein Gespräch und es herausfinden. 633 00:31:06,660 --> 00:31:10,400 Das Zurückgreifen auf die Bahn oder eine andere nicht vernünftiges Verhalten ist nie die 634 00:31:10,400 --> 00:31:13,070 Lösung, und zu viele von Ihren Klassenkameraden sind nicht mehr hier auf 635 00:31:13,070 --> 00:31:15,150 Campus wegen dieser schlechten Beurteilung. 636 00:31:15,150 --> 00:31:17,840 Aber es ist sehr einfach, diese Linie Rock. 637 00:31:17,840 --> 00:31:22,950 >> Und hier ist ein kleines Bild zu jubeln Sie von Reddit, so dass jetzt 638 00:31:22,950 --> 00:31:25,720 alles wird in Ordnung sein. 639 00:31:25,720 --> 00:31:30,210 >> So eine kurze Zusammenfassung, dann , wo wir aufgehört haben. 640 00:31:30,210 --> 00:31:33,690 So letzte Woche daran erinnern, dass wir die Einführung Bedingungen, nicht im Scratch 641 00:31:33,690 --> 00:31:34,880 aber in C diesmal. 642 00:31:34,880 --> 00:31:38,300 Und es gab einige neue Syntax, aber wirklich keine neuen Ideen per se. 643 00:31:38,300 --> 00:31:42,630 Wir hatten booleschen Ausdrücken, dass wir konnten oder zusammen mit zwei vertikalen 644 00:31:42,630 --> 00:31:46,490 Stangen oder zusammen mit zwei kaufmännische und sagte, dass sowohl die linke 645 00:31:46,490 --> 00:31:49,990 und das Recht muss wahr sein Damit dies auszuführen. 646 00:31:49,990 --> 00:31:53,150 Dann mussten wir Schalter, die wir sahen bei kurz, aber ich schlage es wirklich 647 00:31:53,150 --> 00:31:56,830 nur andere Syntax für die Erreichung der gleiche Art von Ziel, wenn Sie wissen, in 648 00:31:56,830 --> 00:31:59,270 voranzubringen, was Ihre Fälle sein werden. 649 00:31:59,270 --> 00:32:00,160 >> Wir sahen uns an Loops. 650 00:32:00,160 --> 00:32:03,340 Eine for-Schleife ist vielleicht die häufigste, oder zumindest die eine, die Menschen 651 00:32:03,340 --> 00:32:05,330 erreichen typischerweise für instinktiv. 652 00:32:05,330 --> 00:32:08,240 Obwohl es sieht ein wenig kryptisch, Sie werden sehen, viele, viele Beispiele dafür 653 00:32:08,240 --> 00:32:11,590 es dauerte nicht lange, da haben Sie bereits Ende der vergangenen Woche. 654 00:32:11,590 --> 00:32:14,280 While-Schleifen können ähnlich erreichen die gleiche Sache. 655 00:32:14,280 --> 00:32:17,550 Aber wenn Sie wollen, um jede Inkrementierung tun oder Aktualisierung 656 00:32:17,550 --> 00:32:20,230 Variable Werte, müssen Sie tun es mehr als die manuell 657 00:32:20,230 --> 00:32:22,440 for-Schleife vor erlaubt. 658 00:32:22,440 --> 00:32:25,310 Und dann gibt es die do-while-Schleife die uns erlaubt, etwas zu tun 659 00:32:25,310 --> 00:32:28,460 mindestens einmal während etwas sonst ist wahr. 660 00:32:28,460 --> 00:32:31,550 Und das ist besonders gut für Programme oder für Spiele, wo Sie wollen 661 00:32:31,550 --> 00:32:33,810 um den Benutzer für etwas auffordern mindestens einmal. 662 00:32:33,810 --> 00:32:37,110 Und dann, wenn er oder sie nicht kooperieren, möchten Sie vielleicht, es zu tun 663 00:32:37,110 --> 00:32:38,420 wieder und wieder. 664 00:32:38,420 --> 00:32:41,270 >> Mit Variablen, inzwischen hatten wir Linien von Code wie diesen, das könnte 665 00:32:41,270 --> 00:32:41,950 werden zwei Zeilen. 666 00:32:41,950 --> 00:32:44,830 Sie könnten deklarieren int genannt Zähler, Semikolon. 667 00:32:44,830 --> 00:32:47,660 Oder Sie können einfach zu erklären und definieren, so zu sprechen. 668 00:32:47,660 --> 00:32:49,950 Geben Sie ihm einen Wert in der gleichen Zeit. 669 00:32:49,950 --> 00:32:51,890 >> Und dann schließlich, sprachen wir über Funktionen. 670 00:32:51,890 --> 00:32:54,270 Und das war ein schönes Beispiel in das Gefühl, dass es zeigt, 671 00:32:54,270 --> 00:32:55,840 zwei Arten von Funktionen. 672 00:32:55,840 --> 00:32:59,030 Eines ist GetString (), die wiederum Ruft eine Zeichenfolge vom Benutzer. 673 00:32:59,030 --> 00:33:02,040 Aber GetString () ist irgendwie interessant, Soweit haben wir es verwendet wird, 674 00:33:02,040 --> 00:33:05,620 weil wir schon immer so verwendet mit etwas auf der linken Seite ein 675 00:33:05,620 --> 00:33:06,600 Gleichheitszeichen. 676 00:33:06,600 --> 00:33:09,830 Das heißt, dass GetString (sagen wir) einen Wert zurückgibt. 677 00:33:09,830 --> 00:33:11,970 Es gibt natürlich einen String. 678 00:33:11,970 --> 00:33:15,130 Und dann auf der linken Seite, sind wir einfach sparen diese Zeichenfolge innerhalb eines 679 00:33:15,130 --> 00:33:16,580 Variable namens name. 680 00:33:16,580 --> 00:33:21,100 >> Dies unterscheidet, in einer Richtung, aus printf printf da, zumindest in unserem 681 00:33:21,100 --> 00:33:23,540 Nutzung hier nichts zurück. 682 00:33:23,540 --> 00:33:24,960 Nebenbei, es Gegenzug etwas. 683 00:33:24,960 --> 00:33:26,380 Wir haben einfach nicht egal, was es ist. 684 00:33:26,380 --> 00:33:29,090 Aber es hat was rief ein Nebeneffekt. 685 00:33:29,090 --> 00:33:31,840 Und was ist, dass in jeder Nebenwirkung Fall haben wir bisher gesehen? 686 00:33:31,840 --> 00:33:34,720 Was bedeutet printf tun? 687 00:33:34,720 --> 00:33:37,780 Er druckt etwas auf den Bildschirm, Anzeigen von Text oder Zahlen oder etwas 688 00:33:37,780 --> 00:33:38,380 auf dem Bildschirm. 689 00:33:38,380 --> 00:33:41,170 Und das ist nur als ein Nebeneffekt weil es nicht wirklich Übergabe 690 00:33:41,170 --> 00:33:41,900 es mir zurück. 691 00:33:41,900 --> 00:33:44,770 Es ist nicht eine Antwort innerhalb von eine schwarze Box, die kann ich dann 692 00:33:44,770 --> 00:33:46,130 erreichen in und greifen. 693 00:33:46,130 --> 00:33:49,160 Es ist einfach, es zu tun auf seine eigene, viel wie Colton wurde in diese eingesteckt 694 00:33:49,160 --> 00:33:52,560 black box letzte Woche, und er irgendwie magisch war auf dem Brett Zeichnung 695 00:33:52,560 --> 00:33:54,500 ohne mich tatsächlich beteiligt. 696 00:33:54,500 --> 00:33:55,560 Das wäre ein Nebeneffekt sein. 697 00:33:55,560 --> 00:33:59,100 Aber wenn ich tatsächlich musste reichen zurück in hier und sage, oh, hier ist der String 698 00:33:59,100 --> 00:34:02,040 von dem Benutzer, das wäre sein ein Rückgabewert. 699 00:34:02,040 --> 00:34:05,650 >> Und so weit wir nur Funktionen verwendet dass andere Leute geschrieben haben. 700 00:34:05,650 --> 00:34:09,219 Aber wir tatsächlich tun können diese Arten von Dingen uns. 701 00:34:09,219 --> 00:34:12,730 Also werde ich in unterwegs CS50 Gerät wieder. 702 00:34:12,730 --> 00:34:16,020 Lassen Sie mich die Registerkarte zu schließen, dass wir hatte vor einem Augenblick öffnen. 703 00:34:16,020 --> 00:34:18,530 Und lassen Sie mich gehen Sie vor und eine neue Datei erstellen. 704 00:34:18,530 --> 00:34:22,400 Und ich werde weitermachen und nenne dieses positive.c. 705 00:34:22,400 --> 00:34:24,770 Deshalb möchte ich etwas mit zu tun positive Zahlen hier. 706 00:34:24,770 --> 00:34:27,219 Also werde ich weitermachen und tun int - 707 00:34:27,219 --> 00:34:28,000 Entschuldigung - 708 00:34:28,000 --> 00:34:31,840 # Include. 709 00:34:31,840 --> 00:34:34,280 Lassen Sie uns nicht machen, dass gleichzeitig Fehler wie zuvor. 710 00:34:34,280 --> 00:34:40,020 Int main (void), offene lockig Klammer, geschlossen geschweiften Klammer. 711 00:34:40,020 --> 00:34:41,639 >> Und jetzt möchte ich folgendes tun. 712 00:34:41,639 --> 00:34:44,600 Ich möchte ein Programm schreiben, dass besteht darauf, dass der Benutzer gibt 713 00:34:44,600 --> 00:34:46,770 mich eine positive ganze Zahl. 714 00:34:46,770 --> 00:34:50,969 So gibt es keine Funktion GetPositiveInt in der CS50-Bibliothek. 715 00:34:50,969 --> 00:34:52,610 Es gibt nur GetInt (). 716 00:34:52,610 --> 00:34:55,790 Aber das ist OK, weil ich die haben Konstrukte, mit denen ich eine verhängen können 717 00:34:55,790 --> 00:34:59,360 wenig mehr Zwang auf diesen Wert. 718 00:34:59,360 --> 00:35:00,990 Ich könnte so etwas tun. 719 00:35:00,990 --> 00:35:02,780 >> So int n - 720 00:35:02,780 --> 00:35:04,920 und wenn Sie mit der Eingabe zusammen sind, nur zu realisieren Ich gehe zurück zu gehen und 721 00:35:04,920 --> 00:35:06,430 einige Dinge ändern in einem Moment - 722 00:35:06,430 --> 00:35:09,960 so int n gleich GetInt (). 723 00:35:09,960 --> 00:35:11,780 Und das geht zu setzen ein int Innenseite n. 724 00:35:11,780 --> 00:35:13,830 Und lassen Sie mich ein mehr beschreibend. 725 00:35:13,830 --> 00:35:23,270 Lassen Sie mich sagen, dass ich so etwas wie verlangen Sie geben mir ein positives Integer. 726 00:35:23,270 --> 00:35:23,550 >> In Ordnung. 727 00:35:23,550 --> 00:35:25,250 Also nur ein kleines bisschen von Anweisungen. 728 00:35:25,250 --> 00:35:26,270 Und nun, was kann ich tun? 729 00:35:26,270 --> 00:35:29,840 Nun, ich weiß schon, aus meinem einfachen Bedingungen oder Zweige, genau wie ich 730 00:35:29,840 --> 00:35:36,100 hatte in Scratch, könnte ich etwas sagen wie wenn n kleiner als oder gleich 731 00:35:36,100 --> 00:35:44,460 Null ist, dann will ich etwas tun gefallen, das ist nicht positiv. 732 00:35:44,460 --> 00:35:45,560 Und dann könnte ich tun - 733 00:35:45,560 --> 00:35:47,310 OK, aber ich möchte wirklich, dass int bekommen. 734 00:35:47,310 --> 00:35:52,020 So könnte ich hier und ich konnte Art Kopie dieses und Gedankenstrich dieser. 735 00:35:52,020 --> 00:35:52,570 Und dann OK. 736 00:35:52,570 --> 00:35:56,990 Also, wenn n kleiner als oder gleich Null tun. 737 00:35:56,990 --> 00:35:58,900 >> Nun, was ist, wenn der Benutzer nicht zusammenarbeiten? 738 00:35:58,900 --> 00:36:01,560 Nun, dann werde ich leihen diese hier. 739 00:36:01,560 --> 00:36:03,130 Und dann habe ich in hier gehen und hier und hier. 740 00:36:03,130 --> 00:36:06,420 Also das ist eindeutig nicht die Lösung, nicht wahr? 741 00:36:06,420 --> 00:36:07,810 Denn es ist kein Ende in Sicht. 742 00:36:07,810 --> 00:36:13,100 Wenn ich will, zu verlangen, dass der Benutzer gibt mich eine positive ganze Zahl, ich kann 743 00:36:13,100 --> 00:36:14,150 wirklich die int. 744 00:36:14,150 --> 00:36:15,620 Ich kann dann für diese int überprüfen. 745 00:36:15,620 --> 00:36:18,570 Aber dann will ich es noch einmal zu überprüfen und Prüfen Sie es wieder ein und überprüfen Sie es erneut. 746 00:36:18,570 --> 00:36:21,680 So offensichtlich, was ist besser zu konstruieren, um hier verwenden? 747 00:36:21,680 --> 00:36:22,840 Alles klar, so eine Art Schleife. 748 00:36:22,840 --> 00:36:25,430 >> Also werde ich loswerden von fast allen davon. 749 00:36:25,430 --> 00:36:27,320 Und ich möchte, um dieses zu erhalten int mindestens einmal. 750 00:36:27,320 --> 00:36:28,890 Also werde ich sagen und tun - 751 00:36:28,890 --> 00:36:32,110 und ich werde wieder kommen, um die während in nur einem Augenblick - 752 00:36:32,110 --> 00:36:33,050 nun, was tun? 753 00:36:33,050 --> 00:36:35,860 Ich werde int n bekommt GetInt () zu tun. 754 00:36:35,860 --> 00:36:36,080 OK. 755 00:36:36,080 --> 00:36:37,250 Also das ist ziemlich gut. 756 00:36:37,250 --> 00:36:39,750 Und jetzt, wie oft Ich möchte dies zu tun? 757 00:36:39,750 --> 00:36:45,770 >> Lassen Sie mich die printf Innenseite der Schleife so kann ich immer und immer wieder fordern, 758 00:36:45,770 --> 00:36:46,740 wenn es sein muss. 759 00:36:46,740 --> 00:36:49,720 Und was will ich diese während Zustand zu tun? 760 00:36:49,720 --> 00:36:53,870 Ich will weiter machen während das, was der Fall ist? 761 00:36:53,870 --> 00:36:54,125 Ja. 762 00:36:54,125 --> 00:36:55,390 N kleiner oder gleich Null ist. 763 00:36:55,390 --> 00:36:58,180 Also schon, haben wir deutlich gereinigt diesen Code auf. 764 00:36:58,180 --> 00:37:00,700 Wir haben ein sehr einfaches geliehen konstruieren - die do-while-Schleife. 765 00:37:00,700 --> 00:37:04,690 Ich habe gerade die wichtigen Linien gestohlen der Code, den ich kopiert und gestartet 766 00:37:04,690 --> 00:37:05,960 Einfügen, war das nicht klug. 767 00:37:05,960 --> 00:37:09,790 Und jetzt werde ich tatsächlich fügen es in hier und tun Sie es einfach einmal. 768 00:37:09,790 --> 00:37:12,990 >> Und nun, was will ich tun, um ganz am Ende dieses Programms? 769 00:37:12,990 --> 00:37:16,810 Ich werde einfach sagen, etwas einfach gefallen, vielen Dank für die - und 770 00:37:16,810 --> 00:37:18,980 Ich werde tun,% i für int - 771 00:37:18,980 --> 00:37:23,270 Backslash n, Komma, und dann Stecker in n, Semikolon. 772 00:37:23,270 --> 00:37:23,910 >> In Ordnung. 773 00:37:23,910 --> 00:37:27,290 Also mal sehen, was jetzt passiert wenn ich dieses Programm ausführen. 774 00:37:27,290 --> 00:37:30,600 Ich werde weitermachen und Sie sind positiv. 775 00:37:30,600 --> 00:37:30,880 Verdammt. 776 00:37:30,880 --> 00:37:31,600 Ein paar Fehler. 777 00:37:31,600 --> 00:37:32,960 Also lassen Sie mich zurück blättern bis zum ersten. 778 00:37:32,960 --> 00:37:34,020 Nicht durch sie rückwärts arbeiten. 779 00:37:34,020 --> 00:37:37,000 Arbeiten Sie sich durch sie von oben nach unten damit sie Kaskade und nur 780 00:37:37,000 --> 00:37:38,630 eine Sache falsch sein. 781 00:37:38,630 --> 00:37:42,532 Implizite Deklaration Funktion GetInt (). 782 00:37:42,532 --> 00:37:43,020 Ja. 783 00:37:43,020 --> 00:37:44,420 So war es nicht genug. 784 00:37:44,420 --> 00:37:46,760 Ich Art von den gleichen Fehler gemacht, aber ein wenig anders diesmal. 785 00:37:46,760 --> 00:37:51,940 Ich muss nicht nur die stdio.h aber auch cs50.h, die das beinhaltet 786 00:37:51,940 --> 00:37:56,770 sogenannte Erklärungen bekommen int, der lehren die Appliance oder lehrt 787 00:37:56,770 --> 00:37:58,760 C, was GetInt () ist. 788 00:37:58,760 --> 00:37:59,550 >> Also lassen Sie mich erneut speichern. 789 00:37:59,550 --> 00:38:02,040 Ich werde die anderen Fehler zu ignorieren weil ich werde hoffen, dass sie sind 790 00:38:02,040 --> 00:38:05,210 irgendwie mit dem Fehler im Zusammenhang Ich habe bereits fixiert. 791 00:38:05,210 --> 00:38:08,710 Also lass mich gehen und kompilieren mit machen positive, Enter. 792 00:38:08,710 --> 00:38:09,020 Verdammt. 793 00:38:09,020 --> 00:38:09,985 Drei Fehler, immer noch. 794 00:38:09,985 --> 00:38:12,650 Lassen Sie mich nach oben auf die erste. 795 00:38:12,650 --> 00:38:14,320 Nicht verwendete Variable n. 796 00:38:14,320 --> 00:38:15,850 Wir haben das nicht gesehen. 797 00:38:15,850 --> 00:38:17,200 Und auch dies ist ein wenig kryptisch. 798 00:38:17,200 --> 00:38:18,850 Dies ist die Ausgabe des Compilers. 799 00:38:18,850 --> 00:38:23,610 Und was das hervorgehobene Zeile gibt - positive.c :9:13 - 800 00:38:23,610 --> 00:38:28,960 sagt, es ist on line neun zu sagen positive.c, auf der 13. Charakter, 801 00:38:28,960 --> 00:38:31,510 13. Spalte, Sie haben diesen Fehler. 802 00:38:31,510 --> 00:38:34,230 >> Und vor allem, es zu sagen mir verwendete Variable n. 803 00:38:34,230 --> 00:38:35,790 Also mal sehen - 804 00:38:35,790 --> 00:38:37,150 Linie neun. 805 00:38:37,150 --> 00:38:40,430 Ich bin mit n in dem Sinne, dass Ich gebe ihm einen Wert. 806 00:38:40,430 --> 00:38:44,200 Aber was der Compiler nicht gefällt, ist dass ich nicht scheinbar benutzen. 807 00:38:44,200 --> 00:38:45,560 Aber warten Sie eine Minute, ich bin es zu benutzen. 808 00:38:45,560 --> 00:38:48,170 In Zeile 11, ich bin mit ihm hier. 809 00:38:48,170 --> 00:38:52,430 Aber wenn ich weiter nach unten scrollen bei positive.c :11 - 810 00:38:52,430 --> 00:38:56,230 so auf der Leitung 11, Figur 12, die Compiler sagt mir, die Verwendung von 811 00:38:56,230 --> 00:38:58,670 deklarierter Bezeichner n. 812 00:38:58,670 --> 00:39:02,760 >> So Schwarzarbeit bedeutet, dass ich keine Angabe es als ein 813 00:39:02,760 --> 00:39:04,970 Variable mit einem Datentyp. 814 00:39:04,970 --> 00:39:05,500 Aber warten Sie eine Minute. 815 00:39:05,500 --> 00:39:09,150 Ich tat genau das, dass in Zeile neun. 816 00:39:09,150 --> 00:39:11,100 So jemand ist wirklich verwirrt hier. 817 00:39:11,100 --> 00:39:14,900 Es ist entweder mir oder der Compiler, weil in Zeile neun wieder, ich erklärte ein 818 00:39:14,900 --> 00:39:18,650 int n, und ich bin Zuweisung der Rückgabewert GetInt (). 819 00:39:18,650 --> 00:39:22,930 Dann bin ich mit dieser Variable n in Zeile 11 und prüft, ob der Wert kleiner ist 820 00:39:22,930 --> 00:39:24,050 als oder gleich Null ist. 821 00:39:24,050 --> 00:39:27,430 Aber das ist offenbar schlecht und gebrochenen warum? 822 00:39:27,430 --> 00:39:30,630 823 00:39:30,630 --> 00:39:32,490 Sagen Sie es wieder? 824 00:39:32,490 --> 00:39:35,690 >> Ah, ich muss n vor deklarieren Eintritt in die Schleife. 825 00:39:35,690 --> 00:39:36,370 Aber warum? 826 00:39:36,370 --> 00:39:39,830 Ich meine, wir haben nur vorgeschlagen, ein bisschen her, dass es ist in Ordnung, um Variablen zu deklarieren 827 00:39:39,830 --> 00:39:43,600 alle auf einer Linie und dann ordnen sie einen gewissen Wert. 828 00:39:43,600 --> 00:39:46,790 Eine globale Variable - wir kommen wieder zu dieser Idee in nur einem Augenblick. 829 00:39:46,790 --> 00:39:48,690 Warum willst du mich zu setzen es außerhalb der Schleife? 830 00:39:48,690 --> 00:40:03,170 831 00:40:03,170 --> 00:40:03,830 Es ist. 832 00:40:03,830 --> 00:40:06,780 Genau. 833 00:40:06,780 --> 00:40:09,610 >> Also, wenn auch etwas eingängig, Lassen Sie mich zusammenfassen. 834 00:40:09,610 --> 00:40:13,510 Wenn Sie erklären n innen der do-Block gibt - 835 00:40:13,510 --> 00:40:16,320 speziell in der diese geschweiften Klammern - 836 00:40:16,320 --> 00:40:19,210 die Variable n hat, was genannt Geltungsbereich - 837 00:40:19,210 --> 00:40:23,210 nichts mit unserem Scoring-System in die Natürlich - aber einen Rahmen, das ist 838 00:40:23,210 --> 00:40:25,190 beschränkt auf den geschweiften Klammern. 839 00:40:25,190 --> 00:40:28,460 Mit anderen Worten, in der Regel, wenn Sie erklären, eine Variable in einer Reihe von 840 00:40:28,460 --> 00:40:33,370 geschweiften Klammern, dass variable existiert nur innerhalb dieser geschweiften Klammern. 841 00:40:33,370 --> 00:40:37,320 So von dieser Logik allein, obwohl Ich habe n in Zeile neun erklärte, es 842 00:40:37,320 --> 00:40:41,910 Wesentlichen verschwindet Umfang, verschwindet aus dem Gedächtnis, so zu sprechen, 843 00:40:41,910 --> 00:40:43,370 durch die Zeit, die ich getroffen line 11. 844 00:40:43,370 --> 00:40:47,370 Weil Linie 11, leider ist außerhalb dieser geschweiften Klammern. 845 00:40:47,370 --> 00:40:51,540 >> So kann ich leider nicht beheben, indem geht zurück auf das, was ich tat es vor. 846 00:40:51,540 --> 00:40:53,370 Man könnte auf den ersten tun. 847 00:40:53,370 --> 00:40:56,370 Aber was bist du jetzt nicht dabei zyklisch? 848 00:40:56,370 --> 00:40:58,260 Sie sind offensichtlich nicht immer die int zyklisch. 849 00:40:58,260 --> 00:41:01,320 So können wir verlassen die GetInt (), und wir sollte die GetInt () innerhalb der verlassen 850 00:41:01,320 --> 00:41:04,420 Schleife, weil das ist, was wir wollen belästigen die Benutzer immer und immer wieder. 851 00:41:04,420 --> 00:41:08,660 Aber es genügt, um zu gehen bis zu Linie, sagen wir, sechs. 852 00:41:08,660 --> 00:41:10,150 Int n, Semikolon. 853 00:41:10,150 --> 00:41:12,990 Geben Sie es nicht noch einen Wert, weil Sie müssen nicht nur noch brauchen. 854 00:41:12,990 --> 00:41:16,220 >> Aber jetzt hier unten, Hinweise - diese wäre eine sehr einfache Fehler. 855 00:41:16,220 --> 00:41:19,440 Ich möchte nicht zu meinem vorherigen Schatten Erklärung der n. 856 00:41:19,440 --> 00:41:22,830 Ich möchte das n verwenden, tatsächlich existiert. 857 00:41:22,830 --> 00:41:25,780 Und jetzt in der Zeile 10, I n einen Wert zuzuweisen. 858 00:41:25,780 --> 00:41:28,580 Aber in Reihensechszylinder erkläre ich n. 859 00:41:28,580 --> 00:41:32,940 Und so kann ich oder kann ich nicht verwenden Sie es in Zeile 12 jetzt? 860 00:41:32,940 --> 00:41:37,120 Ich kann, weil zwischen dem lockigen Klammern ist n erklärte jetzt? 861 00:41:37,120 --> 00:41:38,770 Die hier oben auf Linie fünf. 862 00:41:38,770 --> 00:41:40,330 Um eines hier on line 14. 863 00:41:40,330 --> 00:41:49,770 Also, wenn ich nun vergrößern, speichern Sie diese Datei, gehen Sie zurück ins Laufen zu bringen und positiv, es 864 00:41:49,770 --> 00:41:50,820 kompiliert diese Zeit. 865 00:41:50,820 --> 00:41:51,940 Also das ist schon Fortschritte. 866 00:41:51,940 --> 00:41:53,640 Slash. . / Positiv, Enter. 867 00:41:53,640 --> 00:41:56,060 >> Ich verlange, dass Sie mir eine positive ganze Zahl ist. 868 00:41:56,060 --> 00:41:57,750 Negative 1. 869 00:41:57,750 --> 00:41:59,020 Negative 2. 870 00:41:59,020 --> 00:42:00,680 Negative 3. 871 00:42:00,680 --> 00:42:01,760 Null. 872 00:42:01,760 --> 00:42:03,000 One. 873 00:42:03,000 --> 00:42:05,130 Und vielen Dank für einen ist was jetzt gedruckt. 874 00:42:05,130 --> 00:42:07,400 >> Lassen Sie mich versuchen, etwas anderes, aus Neugier. 875 00:42:07,400 --> 00:42:09,600 Ich bin an Eingang eine ganze Zahl gesagt. 876 00:42:09,600 --> 00:42:12,870 Aber was, wenn ich stattdessen in Lamm geben? 877 00:42:12,870 --> 00:42:14,460 So sehen Sie nun eine andere Eingabeaufforderung - 878 00:42:14,460 --> 00:42:15,350 wiederholen. 879 00:42:15,350 --> 00:42:17,670 Aber nirgendwo in meinem Code schrieb ich erneut zu versuchen. 880 00:42:17,670 --> 00:42:22,320 Also, wo, vermutlich ist dies wiederholen prompt aus, würden Sie sagen? 881 00:42:22,320 --> 00:42:23,540 Ja, von GetInt () selber. 882 00:42:23,540 --> 00:42:26,650 So eines der Dinge, CS50-Mitarbeiter tut für Sie, zumindest in diesen ersten paar 883 00:42:26,650 --> 00:42:30,400 Wochen wird haben wir eine gewisse Menge geschrieben der Fehlerprüfung, um sicherzustellen, dass, wenn 884 00:42:30,400 --> 00:42:34,260 Sie rufen GetInt (), werden Sie mindestens wieder einen int vom Benutzer. 885 00:42:34,260 --> 00:42:35,460 Sie erhalten einen String. 886 00:42:35,460 --> 00:42:36,440 Sie erhalten einen char. 887 00:42:36,440 --> 00:42:39,660 Sie erhalten etwas ganz anderes. 888 00:42:39,660 --> 00:42:40,510 Sie erhalten eine int. 889 00:42:40,510 --> 00:42:41,890 >> Nun ist es vielleicht nicht positiv sein. 890 00:42:41,890 --> 00:42:42,770 Es ist vielleicht nicht negativ sein. 891 00:42:42,770 --> 00:42:44,550 Wir machen keine Garantien, dass rund. 892 00:42:44,550 --> 00:42:48,960 Aber wir werden belästigen die Benutzer den Vorgang zu wiederholen, wiederholen, wiederholen, bis er oder sie tatsächlich 893 00:42:48,960 --> 00:42:49,810 zusammenwirkt. 894 00:42:49,810 --> 00:42:53,085 Ebenso wenn ich 1.23, Ist das nicht eine int. 895 00:42:53,085 --> 00:42:58,400 Aber wenn ich in, sagen wir, 50 geben, dass gibt mir einen Wert, den ich wollte. 896 00:42:58,400 --> 00:42:59,050 >> In Ordnung. 897 00:42:59,050 --> 00:43:01,380 Also nicht schlecht. 898 00:43:01,380 --> 00:43:04,780 Haben Sie Fragen, was wir gerade getan haben? 899 00:43:04,780 --> 00:43:07,930 Der Schlüssel zum Mitnehmen ist, klar zu sein, nicht so sehr die Schleife, die wir gesehen haben, 900 00:43:07,930 --> 00:43:10,880 vor, obwohl wir nicht wirklich verwendet, aber die Frage der Umfang, in dem 901 00:43:10,880 --> 00:43:17,045 Variablen können nur kann nur verwendet werden, innerhalb einiger angegebenen Bereich. 902 00:43:17,045 --> 00:43:19,830 >> Na gut, lassen Sie mich den Vorschlag Sie vorhin sagten, dass einer 903 00:43:19,830 --> 00:43:20,860 globale Variable. 904 00:43:20,860 --> 00:43:24,880 Nebenbei stellt sich heraus, dass ein anderer Lösung für dieses Problem, aber 905 00:43:24,880 --> 00:43:28,880 typischerweise eine falsche Lösung oder eine schlecht konzipierte Lösung ist es, 906 00:43:28,880 --> 00:43:31,670 erklären Sie Variable als was rief eine globale Variable. 907 00:43:31,670 --> 00:43:34,610 Jetzt bin ich Art von Verletzung meiner Definition von Rahmen, weil es 908 00:43:34,610 --> 00:43:37,680 keine geschweiften Klammern an der Spitze und die ganz unten auf einer Datei. 909 00:43:37,680 --> 00:43:40,190 Aber die Implikation, dass ist, dass jetzt in der vierten Zeile, 910 00:43:40,190 --> 00:43:41,710 n ist eine globale Variable. 911 00:43:41,710 --> 00:43:44,460 Und wie der Name schon sagt, ist es nur überall zugänglich. 912 00:43:44,460 --> 00:43:45,790 >> Scratch hat eigentlich diese. 913 00:43:45,790 --> 00:43:48,650 Wenn Sie eine Variable verwendet wird, könnten Sie sich erinnern Sie hatte zu entscheiden, ob es für ist 914 00:43:48,650 --> 00:43:50,780 diese Sprite oder für alle Sprites. 915 00:43:50,780 --> 00:43:54,270 Nun, alle Sprites nur umso deutlicher Art zu sagen, global. 916 00:43:54,270 --> 00:43:55,520 Ja? 917 00:43:55,520 --> 00:44:09,690 918 00:44:09,690 --> 00:44:10,990 Ah, wirklich gute Frage. 919 00:44:10,990 --> 00:44:14,310 >> So erinnern, dass in der ersten Version von meinem Code, wenn ich falsch 920 00:44:14,310 --> 00:44:17,700 deklariert und definiert n in Zeile neun - 921 00:44:17,700 --> 00:44:19,980 Ich erklärte es als eine Variable und ich gab ihm einen Wert mit 922 00:44:19,980 --> 00:44:21,160 der Zuweisungsoperator - 923 00:44:21,160 --> 00:44:22,520 das gab mir zwei Fehler. 924 00:44:22,520 --> 00:44:26,560 Eine, die Tatsache, dass n nicht verwendet wurde, und zwei, dass in Zeile 11 925 00:44:26,560 --> 00:44:27,770 es war einfach nicht erklärt. 926 00:44:27,770 --> 00:44:31,120 Also das erste, das ich nicht Adresse zu der Zeit. 927 00:44:31,120 --> 00:44:35,130 Es ist nicht unbedingt ein Fehler zu erklären eine Variable aber nicht verwenden. 928 00:44:35,130 --> 00:44:38,540 Aber eines der Dinge, die wir getan haben, in die CS50 Gerät, bewusst, 929 00:44:38,540 --> 00:44:43,340 pädagogisch wird haben wir bis der gekröpfte Erwartungen des Compilers zu machen 930 00:44:43,340 --> 00:44:46,970 sicher, dass Sie die Dinge nicht nur richtig, aber wirklich richtig. 931 00:44:46,970 --> 00:44:51,520 >> Denn wenn Sie eine Variable deklarieren wie n-und nie über sie oder ihn 932 00:44:51,520 --> 00:44:53,700 richtig, was dann ist es da? 933 00:44:53,700 --> 00:44:55,650 Es ist wirklich keinen Zweck. 934 00:44:55,650 --> 00:44:58,980 Und es ist sehr einfach im Laufe der Zeit, wenn Sie nicht konfigurieren Ihrem eigenen Computer in 935 00:44:58,980 --> 00:45:01,960 auf diese Weise, um nur einen Code, hat kleine Reste hier Reste gibt. 936 00:45:01,960 --> 00:45:04,390 Und dann Monate später zurück zu blicken und du bist wie, warum ist diese Linie der 937 00:45:04,390 --> 00:45:05,060 Code da? 938 00:45:05,060 --> 00:45:07,940 Und wenn es keinen guten Grund, es nicht profitieren Sie oder Ihre Kollegen 939 00:45:07,940 --> 00:45:10,650 auf der Straße zu haben, um stolpert dann. 940 00:45:10,650 --> 00:45:12,540 >> Nebenbei, wo ist dass aus? 941 00:45:12,540 --> 00:45:16,410 Nun, daran erinnern, dass wir jedes Mal kompilieren Programm, ist all dieses Zeug 942 00:45:16,410 --> 00:45:17,380 gedruckt wird. 943 00:45:17,380 --> 00:45:18,350 So kommen wir zurück zu diesem. 944 00:45:18,350 --> 00:45:22,230 Aber wieder ist ein Dienstprogramm, das machen automatisiert den Prozess der Erstellung von 945 00:45:22,230 --> 00:45:24,830 läuft die eigentliche Compiler genannt Klang. 946 00:45:24,830 --> 00:45:27,650 Dieses Ding, wir schließlich sehen, hat mit Debugging mit einem speziellen zu tun 947 00:45:27,650 --> 00:45:29,060 Programm namens den Debugger. 948 00:45:29,060 --> 00:45:32,150 Das hat damit zu tun, die Optimierung code - mehr dazu in Zukunft. 949 00:45:32,150 --> 00:45:33,620 Std = c99 - 950 00:45:33,620 --> 00:45:37,870 bedeutet dies einfach, verwenden Sie die Fassung von 1999 C. C ist um noch länger als seit 951 00:45:37,870 --> 00:45:40,830 , aber sie machten ein paar schöne Änderungen zzgl. 10 Jahren. 952 00:45:40,830 --> 00:45:42,690 >> Und hier ist die relevantesten. 953 00:45:42,690 --> 00:45:45,880 Wir sagen, machen alles, was zuvor hätte eine Warnung haben 954 00:45:45,880 --> 00:45:48,560 ein Fehler verhindert den Schüler von der Erstellung. 955 00:45:48,560 --> 00:45:51,400 Und Wandmittel tun, dass für eine ganze Reihe von Dingen, nicht 956 00:45:51,400 --> 00:45:53,060 nur um Variablen in Zusammenhang stehen. 957 00:45:53,060 --> 00:45:54,700 Und dann lassen Sie mich zu blättern das Ende dieser Linie. 958 00:45:54,700 --> 00:45:56,430 Und auch dies werden wir schließlich komm zurück zu. 959 00:45:56,430 --> 00:45:59,040 Dies ist offensichtlich der Name die Datei Ich bin Kompilieren. 960 00:45:59,040 --> 00:46:02,160 Das erinnert an die Namen der Datei Ich bin wie der Name Ausgeben 961 00:46:02,160 --> 00:46:04,070 meiner lauffähigen Programm. 962 00:46:04,070 --> 00:46:08,970 This-LCS50 bedeutet nur, verwenden Sie den CS50 Bibliothek, und alle Nullen und Einsen, dass 963 00:46:08,970 --> 00:46:12,390 das Personal geschrieben und kompiliert früher in diesem Jahr, zu integrieren 964 00:46:12,390 --> 00:46:13,490 sie in mein Programm. 965 00:46:13,490 --> 00:46:16,130 >> Und wer weiß, was-lm ist? 966 00:46:16,130 --> 00:46:18,150 Es ist die Mathematik-Bibliothek, das ist nur dort, auch wenn Sie 967 00:46:18,150 --> 00:46:19,320 nicht irgendeine math. 968 00:46:19,320 --> 00:46:22,620 Es ist einfach automatisch bereitgestellt die uns zu machen. 969 00:46:22,620 --> 00:46:26,540 >> Nun, lassen Sie mich ein anderes Beispiel hier durch die Eröffnung einer neuen Datei. 970 00:46:26,540 --> 00:46:30,560 Und lassen Sie mich zu retten diese ein als string.c. 971 00:46:30,560 --> 00:46:37,980 Es stellt sich heraus, dass wir reden über Daten Typen heute, es gibt noch mehr 972 00:46:37,980 --> 00:46:40,630 los unter der Haube als wir bisher gesehen. 973 00:46:40,630 --> 00:46:42,290 Also lassen Sie mich schnell tun, eine schnelle Programm. 974 00:46:42,290 --> 00:46:44,510 Include stdio.h. 975 00:46:44,510 --> 00:46:45,730 Und ich werde sparen, dass. 976 00:46:45,730 --> 00:46:48,110 Und wissen Sie, lassen Sie mich nicht die gleichen Fehler wieder und wieder. 977 00:46:48,110 --> 00:46:50,540 Fügen cs50.h. 978 00:46:50,540 --> 00:46:54,870 Und lassen Sie mich gehen jetzt und tun int main (void). 979 00:46:54,870 --> 00:46:58,790 >> Und jetzt habe ich einfach nur, um ein Programm zu tun , das dies tut - erklären einen String 980 00:46:58,790 --> 00:47:03,610 genannt s und erhalten einen String von dem Benutzer. 981 00:47:03,610 --> 00:47:05,820 Und lassen Sie mich ein wenig Anweisungen hier - 982 00:47:05,820 --> 00:47:09,960 bitte geben Sie mir einen String - so der Benutzer weiß, was zu tun ist. 983 00:47:09,960 --> 00:47:13,190 Und dann hier unten darunter, Ich möchte folgendes tun - 984 00:47:13,190 --> 00:47:16,060 für int i bekommt Null. 985 00:47:16,060 --> 00:47:18,580 Wieder typisch Informatiker Zählen beginnen bei Null, aber wir konnten 986 00:47:18,580 --> 00:47:20,340 machen, dass man, wenn man wirklich wollte. 987 00:47:20,340 --> 00:47:27,240 Jetzt werde ich tun werde ich weniger als die Länge der Zeichenfolge s. 988 00:47:27,240 --> 00:47:28,430 So strlen - 989 00:47:28,430 --> 00:47:29,510 S-T-R-L-E-N - 990 00:47:29,510 --> 00:47:31,650 wieder, es ist übersichtlich, weil es einfacher ist, zu geben, auch wenn es ein 991 00:47:31,650 --> 00:47:32,590 wenig kryptisch. 992 00:47:32,590 --> 00:47:35,290 >> Das ist eine Funktion, die wir nicht genutzt haben vor, sondern buchstäblich tut, dass - 993 00:47:35,290 --> 00:47:37,810 kehrt zu mir eine Zahl, die für die Länge der Zeichenfolge, 994 00:47:37,810 --> 00:47:38,690 dass der Benutzer eingegeben. 995 00:47:38,690 --> 00:47:41,740 Wenn sie eingetippt hallo, würde es zurückgeben fünf, weil es fünf 996 00:47:41,740 --> 00:47:42,890 Briefe in hallo. 997 00:47:42,890 --> 00:47:45,390 Dann, bei jeder Iteration diese Schleife, i plus plus. 998 00:47:45,390 --> 00:47:49,170 Also noch einmal, ein Standard, auch wenn konstruieren du bist nicht ganz zu bequem oder 999 00:47:49,170 --> 00:47:50,420 kennen es noch nicht. 1000 00:47:50,420 --> 00:47:53,220 >> Aber jetzt bei jeder Iteration dieser Schleife, bemerken, was ich tun werde. 1001 00:47:53,220 --> 00:47:56,690 Ich will weitermachen und ausdrucken aus einem einzigen Zeichen - 1002 00:47:56,690 --> 00:47:59,940 so% c Backslash n in eine neue Zeile. 1003 00:47:59,940 --> 00:48:00,990 Und dann wissen Sie, was ich tun will? 1004 00:48:00,990 --> 00:48:05,090 Was auch immer das Wort ist, die der Benutzer in wie hallo, ich möchte ausdrucken 1005 00:48:05,090 --> 00:48:09,530 H-E-L-L-O, ein Zeichen pro Zeile. 1006 00:48:09,530 --> 00:48:13,080 Mit anderen Worten, ich möchte an der get einzelne Zeichen in einem String, 1007 00:48:13,080 --> 00:48:16,770 wobei bis jetzt hat nur eine Zeichenfolge eine Folge von Zeichen. 1008 00:48:16,770 --> 00:48:21,690 >> Und es stellt sich heraus, dass ich s, Halter tun können, i, Klammer zu schließen 1009 00:48:21,690 --> 00:48:23,580 Klammern, Semikolon. 1010 00:48:23,580 --> 00:48:25,640 Und ich habe noch eine Sache zu tun. 1011 00:48:25,640 --> 00:48:30,570 Es ist in einer Datei namens string.h dass strlen deklariert ist. 1012 00:48:30,570 --> 00:48:33,190 Also, wenn ich will, um diese Funktion zu nutzen, Ich muss dem Compiler mitzuteilen, 1013 00:48:33,190 --> 00:48:34,450 erwarten, es zu benutzen. 1014 00:48:34,450 --> 00:48:37,040 Nun lassen Sie mich gehen Sie vor und machen das Programm namens String. 1015 00:48:37,040 --> 00:48:39,150 Dot, Slash, String. 1016 00:48:39,150 --> 00:48:40,130 >> Bitte geben Sie mir einen String. 1017 00:48:40,130 --> 00:48:40,900 Ich werde weitermachen und geben Sie es. 1018 00:48:40,900 --> 00:48:43,040 Hallo, in Großbuchstaben, die Eingabetaste. 1019 00:48:43,040 --> 00:48:47,390 Und jetzt merke ich, habe dies gedruckt ein Zeichen nach dem anderen. 1020 00:48:47,390 --> 00:48:51,450 So das neue Detail dabei ist, dass ein String ist, Am Ende des Tages kann 1021 00:48:51,450 --> 00:48:54,810 Zugriff über seinen individuellen Zeichen, indem das Quadrat 1022 00:48:54,810 --> 00:48:55,840 Klammer-Notation. 1023 00:48:55,840 --> 00:48:59,090 Und das ist, weil ein String unter die Haube ist in der Tat eine Folge von 1024 00:48:59,090 --> 00:48:59,810 Zeichen. 1025 00:48:59,810 --> 00:49:02,010 Aber was ist ordentlich an ihnen ist, in den Arbeitsspeicher des Computers - 1026 00:49:02,010 --> 00:49:05,300 Mac, PC, was immer es ist - sie sind buchstäblich Rücken an Rücken an Rücken - 1027 00:49:05,300 --> 00:49:06,225 H-E-L-L-O - 1028 00:49:06,225 --> 00:49:09,920 an einzelnen, benachbarten Bytes im Speicher. 1029 00:49:09,920 --> 00:49:13,210 >> Also, wenn Sie wollen, zu achten, wie sich Byte, das in dieser Schleife wäre 1030 00:49:13,210 --> 00:49:16,900 Klammer Null, eine Halterung, Halterung zwei, Halterung drei, vier Bügel - 1031 00:49:16,900 --> 00:49:18,890 Das ist null bis fünf indiziert - 1032 00:49:18,890 --> 00:49:23,330 das wird auszudrucken H-E-L-L-O in einer eigenen Zeile. 1033 00:49:23,330 --> 00:49:26,320 >> Jetzt, als Teaser, lassen Sie mich Ihnen zeigen, die allerlei Dinge, die Sie schließlich sein 1034 00:49:26,320 --> 00:49:31,950 zu verstehen, zumindest mit einigen in der Nähe suchen. 1035 00:49:31,950 --> 00:49:35,610 Zum einen, was wir aufgenommen in der heutigen Beispiele, wenn Sie möchten, ist eigentlich 1036 00:49:35,610 --> 00:49:38,300 einer der ersten Jailbreaks für das iPhone. 1037 00:49:38,300 --> 00:49:40,800 Jailbreaking bedeutet Knacken des Telefons so können Sie tatsächlich nutzen es auf eine 1038 00:49:40,800 --> 00:49:43,380 verschiedene Träger oder install Ihre eigene Software. 1039 00:49:43,380 --> 00:49:45,660 Und Sie werden feststellen, das sieht ganz kryptisch, am wahrscheinlichsten. 1040 00:49:45,660 --> 00:49:46,520 Aber sieh dir das an. 1041 00:49:46,520 --> 00:49:50,420 Das iPhone wurde anscheinend mit gekracht eine for-Schleife, wenn ein Zustand, ein anderes 1042 00:49:50,420 --> 00:49:52,580 Zustand, ein Bündel von Funktionen haben wir nicht gesehen. 1043 00:49:52,580 --> 00:49:54,230 >> Und wieder, werden Sie nicht auf den ersten Blick wahrscheinlich 1044 00:49:54,230 --> 00:49:55,620 zu verstehen, wie dies funktioniert. 1045 00:49:55,620 --> 00:49:58,940 Aber alles, was wir irgendwie nehmen selbstverständlich in unserem modernen Leben 1046 00:49:58,940 --> 00:50:02,040 tatsächlich tendenziell sogar zu reduzieren, um einige dieser Grundlagen wir waren 1047 00:50:02,040 --> 00:50:02,820 Blick auf. 1048 00:50:02,820 --> 00:50:06,680 Lassen Sie mich gehen, und öffnen Sie eine andere Programm, holloway.c. 1049 00:50:06,680 --> 00:50:08,970 Also das ist auch etwas, das Sie sollte es wirklich nicht. 1050 00:50:08,970 --> 00:50:12,440 Auch keiner der Angestellten oder ich konnte wahrscheinlich dieses heraus, indem du 1051 00:50:12,440 --> 00:50:15,450 es, weil das war jemand Code das war, was ist eingereicht 1052 00:50:15,450 --> 00:50:19,630 historisch als eine verschleierte C bekannt Wettbewerb, bei dem Sie ein Programm schreiben, 1053 00:50:19,630 --> 00:50:24,670 , die kompiliert und ausgeführt wird, ist aber so verdammt kryptischen kein Mensch kann verstehen, was 1054 00:50:24,670 --> 00:50:27,530 es geht zu tun, bis sie tatsächlich ausführen. 1055 00:50:27,530 --> 00:50:29,940 >> Also in der Tat, wenn man sich diese Code, sehe ich einen Schalter. 1056 00:50:29,940 --> 00:50:30,870 Ich sehe main. 1057 00:50:30,870 --> 00:50:33,800 Ich sehe diese eckigen Klammern impliziert eine Art von einem Array. 1058 00:50:33,800 --> 00:50:35,970 Will jemand raten, was dieses Programm tatsächlich 1059 00:50:35,970 --> 00:50:37,220 tut, wenn ich Holloway laufen? 1060 00:50:37,220 --> 00:50:39,940 1061 00:50:39,940 --> 00:50:40,750 Ja. 1062 00:50:40,750 --> 00:50:43,050 OK. 1063 00:50:43,050 --> 00:50:44,690 Gut gemacht. 1064 00:50:44,690 --> 00:50:48,090 Also nur das Personal und ich kann nicht herausfinden heraus, was diese Dinge zu tun. 1065 00:50:48,090 --> 00:50:51,670 >> Und nun endlich, lass mich gehen und eröffnen ein anderes Programm. 1066 00:50:51,670 --> 00:50:53,440 Dieser - 1067 00:50:53,440 --> 00:50:55,550 wieder, wir machen den Quellcode online zur Verfügung - diese ist nur 1068 00:50:55,550 --> 00:50:57,480 Art hübsch anzusehen. 1069 00:50:57,480 --> 00:50:59,750 Alles, was sie tat getroffen wird die Leertaste ziemlich viel. 1070 00:50:59,750 --> 00:51:01,320 Aber das ist echt Code. 1071 00:51:01,320 --> 00:51:04,790 Also, wenn Sie denken, das ist hübsch, wenn wir tatsächlich laufen diese an der Eingabeaufforderung 1072 00:51:04,790 --> 00:51:08,970 schließlich werden Sie sehen, wie wir vielleicht Dinge wie diese zu tun. 1073 00:51:08,970 --> 00:51:14,008 >> Also werden wir Sie in diesem Sinne verlassen und wir sehen uns am Mittwoch. 1074 00:51:14,008 --> 00:51:18,440 >> [Musik spielt] 1075 00:51:18,440 --> 00:51:23,380 >> Sprecher 2: An der nächsten CS50, Das TFS inszenieren eine Meuterei. 1076 00:51:23,380 --> 00:51:24,112 >> SPEAKER 3: Da ist er. 1077 00:51:24,112 --> 00:51:25,362 Holen Sie ihn! 1078 00:51:25,362 --> 00:51:29,912 1079 00:51:29,912 --> 00:51:32,074 >> [Musik spielt]