1 00:00:00,000 --> 00:00:10,550 2 00:00:10,550 --> 00:00:14,050 >> David J. MALAN: Dies ist CS50 und Dies ist der Beginn der vierten Woche. 3 00:00:14,050 --> 00:00:18,630 Und, Junge, ist Volkswagen in Probleme alles wegen der Software. 4 00:00:18,630 --> 00:00:20,264 Lassen Sie uns einen Blick. 5 00:00:20,264 --> 00:00:20,930 [VIDEO PLAYBACK] 6 00:00:20,930 --> 00:00:25,560 -Cars, Die intelligentesten Charaktere in den Fast and Furious Filme. 7 00:00:25,560 --> 00:00:29,100 Diese Woche deutsche Auto Volkswagen fand sich 8 00:00:29,100 --> 00:00:32,490 in der Mitte von einem Skandal potentiell kriminellen Proportionen. 9 00:00:32,490 --> 00:00:36,060 >> -Volkswagen Wird Verstrebungen für Milliarden Geldstrafen, möglichen Strafanzeigen 10 00:00:36,060 --> 00:00:38,560 für seine Führungskräfte, wie das Unternehmen entschuldigt sich 11 00:00:38,560 --> 00:00:41,840 Rigging 11 Millionen Autos an helfen, sie zu schlagen Emissionsprüfungen. 12 00:00:41,840 --> 00:00:44,950 >> -Bestimmte Dieselmodelle waren mit anspruchsvollen Software entwickelt, 13 00:00:44,950 --> 00:00:48,440 dass benutzte Informationen, einschließlich der Position des Lenk- und Fahrzeug 14 00:00:48,440 --> 00:00:51,870 Beschleunigung zu bestimmen, war das Auto unterziehen Abgasuntersuchung. 15 00:00:51,870 --> 00:00:55,650 Unter diesen Umständen ist der Motor würden toxische Emissionen zu reduzieren. 16 00:00:55,650 --> 00:00:59,070 Aber das Auto war in den Bypass-rigged dass, wenn es angetrieben wird. 17 00:00:59,070 --> 00:01:03,320 Emissionen erhöht 10 bis 40 fach über akzeptable EPA Ebenen. 18 00:01:03,320 --> 00:01:04,280 >> [END PLAYBACK] 19 00:01:04,280 --> 00:01:05,220 >> David J. MALAN: Also lassen Sie uns Schau dir das an 20 00:01:05,220 --> 00:01:07,250 und sehen Sie genau, wie diese umgesetzt werden könnten, 21 00:01:07,250 --> 00:01:09,680 und wie könnte dies Auswirkungen auf so viele Autos wie diese. 22 00:01:09,680 --> 00:01:12,840 Also in meiner Hand sind hier die Presse Mitteilung, wurde von der EPA-- ausgestellt 23 00:01:12,840 --> 00:01:14,620 die Umwelt Schutzbehörde die 24 00:01:14,620 --> 00:01:18,032 ist die Regulierungsbehörde uns, dass Griffe Umweltbedenken 25 00:01:18,032 --> 00:01:19,740 und dann wird die tatsächliche Rechtlicher Hinweis, die war 26 00:01:19,740 --> 00:01:22,420 Nachricht an die Volkswagen vor wenigen Tagen. 27 00:01:22,420 --> 00:01:26,530 >> Also das EPA schreibt, und offenbart sich jetzt öffentlich, eine hoch entwickelte Software 28 00:01:26,530 --> 00:01:29,390 Algorithmus zu bestimmten Volkswagen-Fahrzeuge erfasst 29 00:01:29,390 --> 00:01:32,630 wenn das Auto unterziehen offizielle Abgasuntersuchung 30 00:01:32,630 --> 00:01:36,505 und wendet sich voller Emissionen steuert nur während des Tests. 31 00:01:36,505 --> 00:01:38,380 Die Wirksamkeit Diese Fahrzeuge Verschmutzung 32 00:01:38,380 --> 00:01:43,260 Emissionssteuereinrichtungen ist deutlich während den normalen Fahrbetrieb reduziert 33 00:01:43,260 --> 00:01:44,320 Situationen. 34 00:01:44,320 --> 00:01:48,190 Dies führt zu Autos, die das erfüllen Standards im Labor oder Test 35 00:01:48,190 --> 00:01:52,790 Station, aber im Normalbetrieb emittieren Stickstoff oxides-- oder NOx-- 36 00:01:52,790 --> 00:01:54,950 bis zu 40-fache der Standard. 37 00:01:54,950 --> 00:01:58,220 Das von Volkswagen entwickelte Software ist ein Zitat unquote, Abschalteinrichtung, 38 00:01:58,220 --> 00:02:00,650 wie von der Clean definiert Air Act in den USA. 39 00:02:00,650 --> 00:02:03,410 >> Sie gehen zu sagen, dass die EPA und eine andere Agentur 40 00:02:03,410 --> 00:02:07,020 deckt die Abschalteinrichtung Software nach der unabhängige Analyse 41 00:02:07,020 --> 00:02:09,660 von Forschern an der West- Virginia University. 42 00:02:09,660 --> 00:02:14,160 NOx Verschmutzung trägt zur Stickstoffdioxid, Ozon in Bodennähe, 43 00:02:14,160 --> 00:02:15,700 und Feinstaub. 44 00:02:15,700 --> 00:02:18,090 Exposition gegenüber diesen Schadstoffe verknüpft wurde 45 00:02:18,090 --> 00:02:20,870 mit einem breiten Spektrum von schwerwiegende Auswirkungen auf die Gesundheit, 46 00:02:20,870 --> 00:02:23,637 einschließlich der erhöhten Asthma- Angriffe und andere Atemwegs 47 00:02:23,637 --> 00:02:26,470 Krankheiten, die schwerwiegend genug sein kann, um Menschen ins Krankenhaus zu schicken. 48 00:02:26,470 --> 00:02:28,660 Die Exposition gegenüber Ozon und Feinstaub hat auch 49 00:02:28,660 --> 00:02:31,960 wurde mit vorzeitiger zugeordnet Tod durch Atem verwandten 50 00:02:31,960 --> 00:02:35,690 oder Herz-Kreislauf verbundenen Auswirkungen. 51 00:02:35,690 --> 00:02:38,940 Kinder, ältere Menschen, Menschen mit vorbestehenden Atemwegserkrankungen 52 00:02:38,940 --> 00:02:42,840 Besonders gefährdet sind für gesundheitlichen Auswirkungen dieser Schadstoffe. 53 00:02:42,840 --> 00:02:45,056 >> Es genügt also, es ist ziemlich ernst. 54 00:02:45,056 --> 00:02:46,930 Und lassen Sie uns weiter gehen zu lesen nur ein weiterer Auszug 55 00:02:46,930 --> 00:02:49,370 und dann werden wir ein Blick in die zugrunde liegenden Auswirkungen 56 00:02:49,370 --> 00:02:50,920 Dies im Zusammenhang mit einem Auto. 57 00:02:50,920 --> 00:02:53,730 Insbesondere Volkswagen hergestellt und installiert 58 00:02:53,730 --> 00:02:56,210 Software in der sogenannten elektronische Steuerung 59 00:02:56,210 --> 00:02:59,320 module-- oder ECM-- von Diese Fahrzeuge, die spürte, 60 00:02:59,320 --> 00:03:03,580 wenn das Fahrzeug wurde getestet Einhaltung der EPA-Emissionsstandards. 61 00:03:03,580 --> 00:03:07,510 Basierend auf verschiedenen Eingaben einschließlich der Position des Lenkrads, Fahrzeug 62 00:03:07,510 --> 00:03:11,280 Geschwindigkeit, die Dauer des Motors Betrieb und Luftdruck, 63 00:03:11,280 --> 00:03:13,720 Diese Eingänge gerade verfolgt die Parameter 64 00:03:13,720 --> 00:03:17,600 der für verwendet Federal Test Procedure Emissionsprüfung für EPA certification 65 00:03:17,600 --> 00:03:18,400 Zwecke. 66 00:03:18,400 --> 00:03:21,850 >> Während der Emissionsprüfung EPA, die Fahrzeuge ECM-Software 67 00:03:21,850 --> 00:03:25,060 lief Software, die hergestellt konformen Emissionsergebnisse. 68 00:03:25,060 --> 00:03:28,340 Zu allen anderen Zeiten, die Fahrzeug ECM-Software 69 00:03:28,340 --> 00:03:31,090 lief eine separate Straße Kalibrierung, die reduziert 70 00:03:31,090 --> 00:03:34,360 Die Wirksamkeit der Gesamtabgasreinigungsanlage, 71 00:03:34,360 --> 00:03:37,864 insbesondere die selektive katalytische Reduzierung der Lean NOx trap-- 72 00:03:37,864 --> 00:03:39,280 was wir über gleich sehen. 73 00:03:39,280 --> 00:03:43,040 Als Ergebnis der NOx-Emissionen um einen Faktor von 10 bis 40-fache 74 00:03:43,040 --> 00:03:47,450 über den EPA-konform Ebenen abhängig von der Art des Fahrzyklus. 75 00:03:47,450 --> 00:03:50,800 >> Also, was das wirklich bedeutet, und die Quellcode der Software Lauf 76 00:03:50,800 --> 00:03:53,190 auf den Volkswagen hat nicht noch öffentlich bekannt war, 77 00:03:53,190 --> 00:03:56,460 das heißt, effektiv, diese Äquivalent ist irgendwo im Inneren 78 00:03:56,460 --> 00:03:57,830 der Volkswagen-Code. 79 00:03:57,830 --> 00:04:02,200 Wenn Sie werden derzeit getestet, und wenn das Auto erkennt bestimmte Umweltfaktoren 80 00:04:02,200 --> 00:04:04,330 wie der Lenkrad Position oder der Bewegung 81 00:04:04,330 --> 00:04:06,710 oder deren Fehlen des Autos oder eine beliebige Anzahl von anderen Faktoren, 82 00:04:06,710 --> 00:04:09,940 die derzeit die Hypothese aufgestellt werden Teil dieser Formel, 83 00:04:09,940 --> 00:04:12,370 wenden sie sich einfach an Voll Emissionen zu kontrollieren. 84 00:04:12,370 --> 00:04:15,670 Mit anderen Worten, beginnen sie emittierende weniger der Schadstoffe. 85 00:04:15,670 --> 00:04:18,769 >> Else, in jeder anderen Situation, wenn es nicht als nachgewiesen 86 00:04:18,769 --> 00:04:20,790 im Labor, sie einfach nicht. 87 00:04:20,790 --> 00:04:24,320 Und so können Sie dies in mehr vereinfachen Betonpseudocode mit etwas, 88 00:04:24,320 --> 00:04:24,820 so was. 89 00:04:24,820 --> 00:04:27,810 Wenn die Räder drehen, aber die Lenkrad nicht, suggestive 90 00:04:27,810 --> 00:04:30,060 dass der Wagen auf einigen Art von rotierenden Zylinder 91 00:04:30,060 --> 00:04:32,550 aber in einer Art Lager getestet wird, 92 00:04:32,550 --> 00:04:36,070 dann als verhalten EPA möchte, dass Sie. 93 00:04:36,070 --> 00:04:37,960 Sonst nicht. 94 00:04:37,960 --> 00:04:40,420 Werfen wir also einen Blick in einem kurzen Video, 95 00:04:40,420 --> 00:04:45,391 wirft einen Blick auf das, was die Auswirkungen sind dies tatsächlich mechanisch. 96 00:04:45,391 --> 00:04:48,620 >> [VIDEO PLAYBACK] 97 00:04:48,620 --> 00:04:52,800 >> -In Den letzten Freitag das EPA angekündigt, dass einige Volkswagen Audi Autos zwischen 2009 gemacht 98 00:04:52,800 --> 00:04:55,840 und in diesem Jahr wurden unter Verwendung von eine sogenannte Abschalteinrichtung 99 00:04:55,840 --> 00:04:59,060 zu umgehen Emissionsgesetze entworfen, um die Luft sauber zu halten. 100 00:04:59,060 --> 00:05:01,700 Aber was bedeutet das genau? 101 00:05:01,700 --> 00:05:04,666 >> Nun, moderne Autos haben Dutzende von Computern in ihnen. 102 00:05:04,666 --> 00:05:07,040 Und einige von diesen Computern zur Koordinierung der Funktionen 103 00:05:07,040 --> 00:05:09,590 des Motors für eine optimale Leistung gleichzeitig dafür, 104 00:05:09,590 --> 00:05:12,340 daß es nicht zu viel Müll die aus dem Abgasrohr. 105 00:05:12,340 --> 00:05:15,170 Sie haben tatsächlich gearbeitet auf diese Weise seit Jahrzehnten. 106 00:05:15,170 --> 00:05:17,380 Grundsätzlich jeder Teil eines modernen Automotor 107 00:05:17,380 --> 00:05:20,080 einen Sensor oder Controller auf sie, und diese Computer 108 00:05:20,080 --> 00:05:23,460 werden im Daten tausende Lesen mal pro Sekunde Anpassungen 109 00:05:23,460 --> 00:05:26,220 wie das Verhältnis von Brennstoff zu Luft das wird in die Zylinder. 110 00:05:26,220 --> 00:05:28,730 >> Diese betrügen Volkswagen und Audi-Modelle sind Diesel, 111 00:05:28,730 --> 00:05:30,890 und Dieselmotoren noch eine weitere wirklich wichtigen Computer 112 00:05:30,890 --> 00:05:34,030 gesteuerten Parameter, das ist die Menge an unverbranntem Kraftstoff gehen 113 00:05:34,030 --> 00:05:35,200 in dem Abgas. 114 00:05:35,200 --> 00:05:36,310 Nun, das klingt schlecht. 115 00:05:36,310 --> 00:05:39,642 Klingt nicht wie Sie wollen unverbrannter Kraftstoff in den Auspuff gehen. 116 00:05:39,642 --> 00:05:41,600 Aber im Fall von a Diesel, etwas, müssen Sie 117 00:05:41,600 --> 00:05:46,110 genannt NOx-Falle, die ein Gerät ist, dass absorbiert und Fallen für Stickoxide 118 00:05:46,110 --> 00:05:48,880 dass Schadstoffe Das wäre ansonsten in die Atmosphäre gehen. 119 00:05:48,880 --> 00:05:53,040 Und die Wirkung des NOx-Fallen mit unverbrannten Kraftstoffs verbessert. 120 00:05:53,040 --> 00:05:56,650 So Abschalteinrichtung ist ein spezielles Programm innerhalb dieser Computer, die es schaffen kann 121 00:05:56,650 --> 00:05:59,527 schauen, wie das Auto trifft Emissions Standards, auch wenn es nicht tut. 122 00:05:59,527 --> 00:06:01,110 Volkswagen hatte ein Problem auf seinen Händen. 123 00:06:01,110 --> 00:06:04,050 Sein Dieselmotoren bekannt waren für immer große Kraftstoffverbrauch, 124 00:06:04,050 --> 00:06:07,510 aber die NOx-Falle funktioniert nur gut wenn mehr Kraftstoff verwendet wird. 125 00:06:07,510 --> 00:06:10,460 So würde das Auto zu erfassen, mit diesen Abschalteinrichtung, 126 00:06:10,460 --> 00:06:13,870 wenn es wurde ein Emissions Test, wäre es mehr Kraftstoff zu verwenden, 127 00:06:13,870 --> 00:06:16,830 gut machen den NOx-Speicher-Arbeit, Emissionen wäre in Ordnung. 128 00:06:16,830 --> 00:06:21,130 Aber dann sind Sie auf dem Weg zu bekommen, das Gerät erlischt, bist du brenn weniger Kraftstoff 129 00:06:21,130 --> 00:06:24,256 aber du bist so viel wie 40-mal setzen mehr Schadstoffe in die Atmosphäre. 130 00:06:24,256 --> 00:06:26,130 Aber wie zum Teufel tat das Fahrzeug, dass es 131 00:06:26,130 --> 00:06:27,720 wobei für die Einhaltung der Emissionsgrenzwerte untersucht? 132 00:06:27,720 --> 00:06:30,590 Die EPA sagt, es war ein ausgeklügeltes System, das die Dinge überprüft 133 00:06:30,590 --> 00:06:34,090 wie Lenkradstellung, Geschwindigkeit, wie lange der Motor eingeschaltet war, 134 00:06:34,090 --> 00:06:35,507 und auch der Atmosphärendruck. 135 00:06:35,507 --> 00:06:37,673 In anderen Worten, es war keine Möglichkeit, dies war ein versehentliches 136 00:06:37,673 --> 00:06:40,260 weil die Software war sehr sorgfältig konzipiert, um zu erfassen 137 00:06:40,260 --> 00:06:41,630 eine offizielle Abgasuntersuchung. 138 00:06:41,630 --> 00:06:43,588 Das ist einige ziemlich ernst Täuschung und das ist, 139 00:06:43,588 --> 00:06:45,420 warum Volkswagen ist in wie ernsthaften Schwierigkeiten. 140 00:06:45,420 --> 00:06:48,600 In der Tat, deren CEO, Martin Winterkorn, nur trat. 141 00:06:48,600 --> 00:06:49,820 >> Also, was passiert als nächstes? 142 00:06:49,820 --> 00:06:53,900 Nun, wenn Sie eine der halbe Million sind Diesel Jettas, Beatles, spielt Golf, Passat, 143 00:06:53,900 --> 00:06:56,220 oder Audi A3s erfolgt, die gute Nachricht ist, ist 144 00:06:56,220 --> 00:06:57,886 dass Ihr Auto ist immer noch sicher zu fahren. 145 00:06:57,886 --> 00:07:00,510 Sie müssen nicht, sie wegräumen bis Volkswagen gibt einen Rückruf. 146 00:07:00,510 --> 00:07:02,509 Aber irgendwann sind sie wahrscheinlich gehen zu müssen, 147 00:07:02,509 --> 00:07:04,230 um die Software in Ihrem Auto zu aktualisieren. 148 00:07:04,230 --> 00:07:06,927 Wenn das passiert, die Dir vielleicht erhalten weniger Meilen pro Tank. 149 00:07:06,927 --> 00:07:09,260 Rechtsanwälte sind bereits Getriebe für Sammelklagen 150 00:07:09,260 --> 00:07:12,500 so Besitzer könnten ausgeglichen bekommen irgendwann einmal. 151 00:07:12,500 --> 00:07:15,832 Aber das ist nicht zu gehen jederzeit geschehen bald. 152 00:07:15,832 --> 00:07:16,711 >> [END PLAYBACK] 153 00:07:16,711 --> 00:07:19,960 David J. MALAN: Also eigentlich wirft ein interessantes Gesamtbild Frage 154 00:07:19,960 --> 00:07:20,660 als zu vertrauen. 155 00:07:20,660 --> 00:07:21,160 Recht? 156 00:07:21,160 --> 00:07:24,300 Alle von uns haben iPhones oder Androids oder etwas in der Tasche am ehesten 157 00:07:24,300 --> 00:07:26,500 in diesen Tagen, oder Laptops auf den Schoß, die sind 158 00:07:26,500 --> 00:07:28,510 Ausführen von Software gemacht von Apple und Microsoft 159 00:07:28,510 --> 00:07:30,710 und Trauben von anderen Unternehmen. 160 00:07:30,710 --> 00:07:34,240 Aber wie wir wissen, dass das tun, was Diese Softwareprodukte tun 161 00:07:34,240 --> 00:07:37,680 ist eigentlich, was diese Unternehmen sagen, sie tun? 162 00:07:37,680 --> 00:07:39,610 >> Zum Beispiel, wer ist zu sagen, dass jedes Mal, wenn Sie 163 00:07:39,610 --> 00:07:42,200 einen Anruf tätigen auf Ihrem iPhone oder Android-Handy oder dergleichen, 164 00:07:42,200 --> 00:07:45,650 dass diese Telefonnummer ist auch nicht an Server irgendeines Unternehmens hochgeladen 165 00:07:45,650 --> 00:07:48,399 weil einige Programm, das Sie haben geschrieben, ob es sich um das Betriebs 166 00:07:48,399 --> 00:07:51,070 System selbst wie iOS oder Android, oder weil Sie heruntergeladen haben 167 00:07:51,070 --> 00:07:53,880 einige Dritten App dass irgendwie hört 168 00:07:53,880 --> 00:07:57,120 für alles, was Sie mit der Eingabe in bist, oder alles, was Sie eigentlich sagen. 169 00:07:57,120 --> 00:07:59,500 Woher wissen Sie, dass, wenn Sie Kerle laufen Clang 170 00:07:59,500 --> 00:08:02,590 Oder zum Kompilieren Ihrer eigene Software in CS50, wie 171 00:08:02,590 --> 00:08:06,080 Sie arbeiten Mitarbeiter, die CS50 ist, über die CS50-Bibliothek, 172 00:08:06,080 --> 00:08:08,690 war nicht die Protokollierung jedes Zeichenfolge, die Sie je bekommen habe 173 00:08:08,690 --> 00:08:10,276 oder jeder Zoll Sie je bekommen haben? 174 00:08:10,276 --> 00:08:12,900 Nun, man könnte sicherlich freuen auf den Quellcode für etwas 175 00:08:12,900 --> 00:08:15,233 wie der CS50-Bibliothek, die Sie könnte auf den Quellcode schauen 176 00:08:15,233 --> 00:08:18,170 für Linux-Betriebssystem am CS50 IDE ausgeführt. 177 00:08:18,170 --> 00:08:23,090 Aber eine erstaunliche Präsentation wurde im Jahr 1984 gegeben 178 00:08:23,090 --> 00:08:26,730 Der Erhalt eines Turing Award durch eine sehr berühmter Informatiker bekannt 179 00:08:26,730 --> 00:08:29,750 as-- namens Ken Thompson, die erhielt den Turing Award die 180 00:08:29,750 --> 00:08:33,500 ist eine Art von Computer-Wissenschaft Nobelpreis, wenn man so will, 181 00:08:33,500 --> 00:08:35,309 für seine Arbeiten über eine Betriebssystem aufgerufen 182 00:08:35,309 --> 00:08:39,039 Unix, die sehr ähnlich ist Geist, was wir verwenden, was Linux. 183 00:08:39,039 --> 00:08:41,960 Und die Frage im fragte er seine Dankesrede im wesentlichen 184 00:08:41,960 --> 00:08:44,910 zur Festlegung des Rahmens für die Jahre und Jahre der Diskussion 185 00:08:44,910 --> 00:08:46,970 um Vertrauen und Sicherheit, das war. 186 00:08:46,970 --> 00:08:50,410 In welchem ​​Umfang sollte man Vertrauen ein Aussage, dass eine program-- ein Stück 187 00:08:50,410 --> 00:08:53,010 von software-- frei von Trojanern? 188 00:08:53,010 --> 00:08:56,500 Vielleicht ist es wichtiger, zu vertrauen die Menschen, die die Software schrieb. 189 00:08:56,500 --> 00:08:58,650 >> Und in der Tat, wir verknüpft haben um dem Gerede, dass er 190 00:08:58,650 --> 00:09:02,400 hat bei der Annahme dieser Auszeichnung in den 80er Jahren am CS50-Website 191 00:09:02,400 --> 00:09:04,030 unter der Seite Vorlesungen für heute. 192 00:09:04,030 --> 00:09:06,071 Denn das, was Sie sehen, ist, dass er tatsächlich gibt 193 00:09:06,071 --> 00:09:09,430 ein relativ einfaches Beispiel, wie auch ein Compiler Clang wie oder was auch immer 194 00:09:09,430 --> 00:09:13,950 Compiler andere haben in Vergangenheit, was ist, wenn in den Compiler wir eingebettet 195 00:09:13,950 --> 00:09:18,190 uns verwenden ist ein wenig, wenn Bedingung, die im wesentlichen sagt, 196 00:09:18,190 --> 00:09:22,360 wenn Sie feststellen, dass dieser Code wird mit die GetString-Funktion oder die getint 197 00:09:22,360 --> 00:09:26,600 Funktion, gehen Sie vor und stecken eine Hintertür oder ein Trojaner 198 00:09:26,600 --> 00:09:29,340 derart, dass das Programm Jetzt hat ein paar Nullen 199 00:09:29,340 --> 00:09:30,930 und diejenigen, die etwas bösartiges zu tun. 200 00:09:30,930 --> 00:09:33,080 Anmeldung alle Ihre Tastatureingaben, das Hochladen, dass Daten 201 00:09:33,080 --> 00:09:35,100 bis zu einem gewissen Server oder wirklich etwas. 202 00:09:35,100 --> 00:09:37,290 >> Und was Ken Thompson fährt fort, in seinem Vortrag zu tun 203 00:09:37,290 --> 00:09:40,580 ist es, dass zu demonstrieren, auch wenn Sie Zugriff auf die Quelle haben 204 00:09:40,580 --> 00:09:43,794 Code eines Compiler, böswillig sein könnte, dies zu tun, 205 00:09:43,794 --> 00:09:46,210 es nicht, weil Rolle spielt gibt es dieses Huhn und das Ei 206 00:09:46,210 --> 00:09:49,500 Realität der Vergangenheit viele Jahre, wobei Compilern 207 00:09:49,500 --> 00:09:51,960 werden verwendet, um sich selbst zu kompilieren. 208 00:09:51,960 --> 00:09:55,440 Mit anderen Worten, Weg zurück, wenn jemand hatte, und der erste Compiler geschrieben. 209 00:09:55,440 --> 00:09:59,060 Und danach jedes Mal, wenn sie aktualisiert haben ein Compiler durch eine Änderung seiner Source-Code, 210 00:09:59,060 --> 00:10:02,020 Hinzufügen von Funktionen und neu zu kompilieren für Leute wie uns zu bedienen, gut, 211 00:10:02,020 --> 00:10:04,270 sie sind mit den alten Compilerversion 212 00:10:04,270 --> 00:10:06,370 die neue zu kompilieren Compilerversion. 213 00:10:06,370 --> 00:10:08,370 Und wenn Sie einen Blick zu nehmen im Gespräch, das er gab, 214 00:10:08,370 --> 00:10:10,970 Sie, denn da zu sehen dieser Zirkularität 215 00:10:10,970 --> 00:10:14,330 können Sie sogar Bugs oder Trojanische Pferde in der Software eingebettet 216 00:10:14,330 --> 00:10:14,990 wir verwenden. 217 00:10:14,990 --> 00:10:18,010 Und selbst wenn Sie bei der Suche Quellcode für die Programme, 218 00:10:18,010 --> 00:10:21,550 es vielleicht nicht einmal klar sein, weil der Betrug ist eigentlich 219 00:10:21,550 --> 00:10:24,710 in einigen älteren Version eines Compiler, der seitdem gewesen 220 00:10:24,710 --> 00:10:27,340 Einspritzen der Bedrohung in unsere Software. 221 00:10:27,340 --> 00:10:29,740 >> Das ist nur zu sagen, wir kann es wirklich nicht und sollte nicht 222 00:10:29,740 --> 00:10:32,939 Vertrauen Software auf unseren Laptops mit oder Telefone oder eine beliebige Anzahl von Stellen. 223 00:10:32,939 --> 00:10:36,230 Und in der Tat, später in diesem Semester, wenn wir anfangen, über Web-Programmierung im Gespräch 224 00:10:36,230 --> 00:10:38,521 und tatsächlich mit dem Bau Web-Anwendungen selbst, 225 00:10:38,521 --> 00:10:40,285 wir werden über diese zu sprechen Bedrohungen und andere. 226 00:10:40,285 --> 00:10:43,410 Jetzt könnten Sie fragte mich, und bemerkt, , dass es einen kleinen kleinen Darth 227 00:10:43,410 --> 00:10:45,842 Vader in die Clips, die The Verge war es, die 228 00:10:45,842 --> 00:10:47,550 über Volkswagen. Wenn Sie noch nie gesehen, ich 229 00:10:47,550 --> 00:10:49,190 dachten wir aufhellen sollte die Stimmung, denn das ist alles, 230 00:10:49,190 --> 00:10:50,780 sehr bedrückend und beängstigend. 231 00:10:50,780 --> 00:10:52,910 Ich werde zurückblicken Super Bowl 2011 232 00:10:52,910 --> 00:10:55,300 wenn ein Spot von Volkswagen-- und dies 233 00:10:55,300 --> 00:10:59,620 fast macht sie sympathisch again-- zum ersten Mal im Fernsehen ausgestrahlt. 234 00:10:59,620 --> 00:11:04,039 Es ist die 60-Sekunden-Clip dass ich denke, Sie genießen. 235 00:11:04,039 --> 00:11:04,705 [VIDEO PLAYBACK] 236 00:11:04,705 --> 00:11:08,198 [MUSIC - Thema aus "Star Wars"] 237 00:11:08,198 --> 00:11:35,643 238 00:11:35,643 --> 00:11:38,138 [Hund bellt] 239 00:11:38,138 --> 00:11:50,114 240 00:11:50,114 --> 00:11:53,607 [Auto beginnt] 241 00:11:53,607 --> 00:12:04,086 242 00:12:04,086 --> 00:12:05,955 [END PLAYBACK] 243 00:12:05,955 --> 00:12:06,830 David J. MALAN: Ja. 244 00:12:06,830 --> 00:12:07,663 Ich war nur die Überprüfung. 245 00:12:07,663 --> 00:12:11,360 Das Auto ist auf der Liste der Verstöße. 246 00:12:11,360 --> 00:12:12,000 Gut. 247 00:12:12,000 --> 00:12:14,040 Also schauen wir uns einige Pseudocode einen Moment vor. 248 00:12:14,040 --> 00:12:15,380 Und hier ist ein größeres Ausschnitt aus Pseudocode 249 00:12:15,380 --> 00:12:16,921 dass wir ein paar Mal bisher gesehen. 250 00:12:16,921 --> 00:12:19,970 Und lassen Sie verwenden dies ist eine Gelegenheit nun auf eine neue Programmiersprache vorstellen 251 00:12:19,970 --> 00:12:23,776 Technik, die wir getan haben siehe algorithmisch 252 00:12:23,776 --> 00:12:25,400 letzte Woche, als wir blickte merge sort. 253 00:12:25,400 --> 00:12:28,270 Aber lassen Sie uns zu formalisieren und sehen, wie wir sie im eigentlichen Code verwenden könnte, 254 00:12:28,270 --> 00:12:30,350 und dann werden wir diese verwenden Technik auf dem Weg die meisten 255 00:12:30,350 --> 00:12:32,000 wahrscheinlich einige andere Probleme zu lösen. 256 00:12:32,000 --> 00:12:35,790 >> So war eines der ersten Programme wir je geschrieben hat, wenn auch in Pseudocode. 257 00:12:35,790 --> 00:12:37,790 Und was dieses Programm konnten wir natürlich tun 258 00:12:37,790 --> 00:12:41,510 war es Mike Smith in einem Telefonbuch zu finden. 259 00:12:41,510 --> 00:12:46,216 Insbesondere Linien acht merken und 11, die diese Sprunganweisung hatten. 260 00:12:46,216 --> 00:12:48,090 Und in der Tat gewisse Sprachen, darunter C, 261 00:12:48,090 --> 00:12:50,006 tatsächlich haben ein Anweisung, die buchstäblich ist 262 00:12:50,006 --> 00:12:52,710 gehen Sie zu, dass ermöglicht es Ihnen, Sprung zu einer bestimmten Zeile. 263 00:12:52,710 --> 00:12:55,470 Es ist in der Regel auf, weil runzelte die Stirn es sehr leicht missbraucht werden können 264 00:12:55,470 --> 00:12:58,490 und schon können Sie Ihre springen Programm ganz über dem Platz, im Gegensatz 265 00:12:58,490 --> 00:13:00,690 unter Verwendung der Art von Logik und der Steuerfluss 266 00:13:00,690 --> 00:13:04,000 dass wir bisher mit nur verwendet, Schleifen und Bedingungen und dergleichen. 267 00:13:04,000 --> 00:13:08,660 >> Aber wir können diesen Algorithmus zu vereinfachen in Pseudocode wie folgt. 268 00:13:08,660 --> 00:13:11,250 Anstelle dieses iterative oder Looping Ansatz 269 00:13:11,250 --> 00:13:14,160 wo wir immer wieder zurück und hin und zurück in die Linie drei, 270 00:13:14,160 --> 00:13:18,300 warum machen wir nicht nur irgendwie Punt und mehr in der Regel sagen, im Einklang sieben und 10, 271 00:13:18,300 --> 00:13:20,570 nur diese beiden zu ersetzen Leitungspaare mit, 272 00:13:20,570 --> 00:13:22,810 else if Smith früher in dem Buch wir werden 273 00:13:22,810 --> 00:13:25,110 Suche nach Mike in der linke Hälfte des Buches. 274 00:13:25,110 --> 00:13:28,560 Else, wenn Smith wird später im Buch, suchen Sie nach Mike in die richtige 275 00:13:28,560 --> 00:13:29,540 die Hälfte des Buches. 276 00:13:29,540 --> 00:13:31,180 Und bemerken bereits die Rundheit. 277 00:13:31,180 --> 00:13:31,680 Recht? 278 00:13:31,680 --> 00:13:34,250 Ich suche Mike in das Telefonbuch und dann 279 00:13:34,250 --> 00:13:37,090 Ich schließlich traf vielleicht Linie sieben oder vielleicht Linie 10 280 00:13:37,090 --> 00:13:41,089 und meine Anweisung, mich ist Suche Mike in die Hälfte des Telefonbuchs. 281 00:13:41,089 --> 00:13:42,380 Nun, wie kann ich für Mike zu suchen? 282 00:13:42,380 --> 00:13:44,213 Ich bin in der Mitte Suche nach Mike, warum 283 00:13:44,213 --> 00:13:45,860 Sie Art von Zusendung im Kreis? 284 00:13:45,860 --> 00:13:49,590 Aber das ist in Ordnung, denn was ist geschieht auf die Größe des Problems 285 00:13:49,590 --> 00:13:52,630 wie in Zeile 7 und 10 geschrieben? 286 00:13:52,630 --> 00:13:54,989 Wir sind nicht einfach nur sagen Suche Mike, suchen Sie nach Mike. 287 00:13:54,989 --> 00:13:56,280 Wir sagen, was gesagt? 288 00:13:56,280 --> 00:13:58,694 289 00:13:58,694 --> 00:14:01,610 Suchen Sie nach ihm in der linken Hälfte des die rechte Hälfte, die wirksam ist, 290 00:14:01,610 --> 00:14:03,440 die Hälfte der Größe des Problems. 291 00:14:03,440 --> 00:14:07,170 So ist es OK, dass wir Art sind ihre Beteiligung an dieser Rund, 292 00:14:07,170 --> 00:14:09,180 Diese Zirkelschluss, weil zumindest sind wir 293 00:14:09,180 --> 00:14:11,090 wodurch das Problem geringer. 294 00:14:11,090 --> 00:14:14,220 Und schließlich werden wir zu erreichen dass so genannte Basis Fall, 295 00:14:14,220 --> 00:14:16,780 wir müssen nur eine Seite left-- wie unsere freiwilligen letzte Woche 296 00:14:16,780 --> 00:14:18,684 did-- wir hatten eine Seite nach links und dann tun wir nicht 297 00:14:18,684 --> 00:14:21,600 muss sich immer auf der Suche nach Mike Smith weil er entweder auf dieser Seite 298 00:14:21,600 --> 00:14:23,080 oder ist er nicht. 299 00:14:23,080 --> 00:14:27,480 >> Wie können wir diese Idee umzusetzen, die diese Art von Rundheit im eigentlichen Code? 300 00:14:27,480 --> 00:14:31,030 Nun, wir können eine Technik nutzen das ist in der Regel als Rekursion bekannt. 301 00:14:31,030 --> 00:14:33,960 Und wir dies in die gesehen haben Pseudocode für Mergesort letzte Woche. 302 00:14:33,960 --> 00:14:37,190 Daran erinnert, daß dies das Pseudocode für merge sort. 303 00:14:37,190 --> 00:14:40,560 Es ist wohl noch einfacher als Blase oder Auswahl oder Insertion Sort 304 00:14:40,560 --> 00:14:43,310 nur in Bezug auf die Einfachheit mit dem man es ausdrücken. 305 00:14:43,310 --> 00:14:46,750 >> Aber das ist, weil wir sind eine Art kreis 306 00:14:46,750 --> 00:14:51,350 sagen, die Suche nach etwas, bei der Suche nach es wieder. 307 00:14:51,350 --> 00:14:53,960 Aber wir sind auf der Suche entweder die linke Hälfte und die rechte Hälfte 308 00:14:53,960 --> 00:14:56,070 und dann schließlich sind wir Zusammenführen in diesem Fall. 309 00:14:56,070 --> 00:14:58,520 Aber auch hier, mit diese beiden Sortierlinien, 310 00:14:58,520 --> 00:15:01,320 haben wir wieder diese Idee der Rekursion. 311 00:15:01,320 --> 00:15:05,350 Und konkret, was das bedeutet, im Zusammenhang mit einem Algorithmus, 312 00:15:05,350 --> 00:15:10,880 ist, dass ein Algorithmus ist rekursiv wenn es verwendet oder nennt sich. 313 00:15:10,880 --> 00:15:14,330 >> Oder in Form von C, ist eine Funktion, recursive-- eine Funktion namens 314 00:15:14,330 --> 00:15:18,510 foo ist rekursiv, wenn foo, irgendwo in den Quellcode, 315 00:15:18,510 --> 00:15:21,250 ruft die Funktion foo selber. 316 00:15:21,250 --> 00:15:25,790 Und das ist schlimm, wenn alle foo immer tut ist nennen sich immer wieder. 317 00:15:25,790 --> 00:15:30,600 Es ist in Ordnung, wenn foo schließlich nicht mehr, ebenso wie merge sort, indem er sagte, warten Sie eine Minute, 318 00:15:30,600 --> 00:15:32,980 wenn dieses Problem ist super klein ist, zum Beispiel, 319 00:15:32,980 --> 00:15:35,840 oder fand ich, den ich Suche nur zurück. 320 00:15:35,840 --> 00:15:41,000 Nicht rekursiv, nicht selbst zyklisch erneut aufrufen. 321 00:15:41,000 --> 00:15:44,200 >> Und so lassen Sie uns einen Blick auf wie dies funktionieren könnte tatsächlich funktionieren. 322 00:15:44,200 --> 00:15:48,430 Also werde ich nach vorne und öffnen gehen zwei Quellcode-Beispiele hier. 323 00:15:48,430 --> 00:15:50,321 Einer davon wird als Sigma-0. 324 00:15:50,321 --> 00:15:52,320 Und dies ist nicht überhaupt rekursiv, aber lassen Sie uns 325 00:15:52,320 --> 00:15:53,694 einen Blick auf, was das Programm macht. 326 00:15:53,694 --> 00:15:55,737 Ich habe alle abgestreift Kommentare von ihm aber alle 327 00:15:55,737 --> 00:15:58,070 des Quellcodes auf der CS50 Webseite Kommentare, wenn Sie 328 00:15:58,070 --> 00:15:59,570 möchte es später noch einmal durchlesen. 329 00:15:59,570 --> 00:16:02,010 Und lassen Sie uns ein paar der Vernunft prüft hier. 330 00:16:02,010 --> 00:16:06,640 >> So dass am Anfang der Code, haben wir gehören CS50.h. 331 00:16:06,640 --> 00:16:07,650 Was bedeutet dies? 332 00:16:07,650 --> 00:16:08,990 Warum ist es hier? 333 00:16:08,990 --> 00:16:11,740 In Bezug auf die angemessene Laien. 334 00:16:11,740 --> 00:16:12,424 Was tut es? 335 00:16:12,424 --> 00:16:12,858 Ja. 336 00:16:12,858 --> 00:16:14,160 >> ZIELGRUPPE: Damit getint Funktion arbeitet. 337 00:16:14,160 --> 00:16:16,243 >> David J. MALAN: Damit die getint Funktion arbeitet. 338 00:16:16,243 --> 00:16:18,115 Weil Innere dieser Datei CS50.h, die 339 00:16:18,115 --> 00:16:20,950 wir werden schon bald in zu sehen Bezug auf den Quellcode, 340 00:16:20,950 --> 00:16:23,270 hat eine Reihe von Funktionen declared-- getint, GetString, 341 00:16:23,270 --> 00:16:26,950 und eine Reihe von Andere-- und es sei denn, haben wir eigentlich, dass Zeile enthalten, 342 00:16:26,950 --> 00:16:29,320 der Compiler Clang nicht geht, zu wissen, daß es existiert. 343 00:16:29,320 --> 00:16:32,400 Und Gleiches gilt für Linie zwei, wo int definiert 344 00:16:32,400 --> 00:16:35,101 printf, die eine Funktion ist Wir halten mit ziemlich viel. 345 00:16:35,101 --> 00:16:37,850 Nun Reihenvier scheint ein wenig flippig denn es ist nur ein Motto. 346 00:16:37,850 --> 00:16:41,570 Es hat ein Semikolon, keine geschweiften Hosenträger, kein Code darin. 347 00:16:41,570 --> 00:16:44,640 Aber was haben wir als dieses Ding in Wochen Vergangenheit? 348 00:16:44,640 --> 00:16:45,140 Ja. 349 00:16:45,140 --> 00:16:46,060 So ein Prototyp. 350 00:16:46,060 --> 00:16:48,390 Und warum haben wir ein Prototyp, der scheint, 351 00:16:48,390 --> 00:16:51,050 ein wenig redundant in der Regel, weil wir in der Regel 352 00:16:51,050 --> 00:16:53,474 siehe die Funktion erneut später in der Datei, nicht wahr? 353 00:16:53,474 --> 00:16:56,390 Also, warum wir have-- Sie gerade sind Kopf kratzen, aber ich nehme es. 354 00:16:56,390 --> 00:16:57,302 Ja. 355 00:16:57,302 --> 00:17:00,000 >> ZIELGRUPPE: [unverständlich] Funktion nach der Haupt. 356 00:17:00,000 --> 00:17:01,000 David J. MALAN: Genau. 357 00:17:01,000 --> 00:17:04,089 Damit der Compiler weiß, dass Sie wird schließlich zu definieren oder zu implementieren 358 00:17:04,089 --> 00:17:06,579 dass nach der Hauptfunktion, vermutlich. 359 00:17:06,579 --> 00:17:08,462 So Clang und die meisten Compiler sind Art von dumm 360 00:17:08,462 --> 00:17:10,510 und sie werden nur wissen, was Sie ihnen sagen. 361 00:17:10,510 --> 00:17:12,569 Und wenn Sie verwenden möchten, eine Funktion namens Sigma, 362 00:17:12,569 --> 00:17:15,710 Sie den Compiler besser lehren dass es existiert im Voraus. 363 00:17:15,710 --> 00:17:17,970 >> Jetzt, Haupt selbst, auch obwohl es eine Reihe von Linien, 364 00:17:17,970 --> 00:17:19,839 ist ziemlich hoffentlich kennen mittlerweile. 365 00:17:19,839 --> 00:17:21,942 Es ist ein Do While-Schleife bekam , deren Zweck im Leben 366 00:17:21,942 --> 00:17:24,400 hier offenbar um eine zu bekommen positive ganze Zahl von dem Benutzer. 367 00:17:24,400 --> 00:17:27,349 Und nur halten ihn belästigen oder sie, bis sie zusammenarbeiten. 368 00:17:27,349 --> 00:17:30,670 Dann in Zeile 16 Ich habe eine interessante Anruf. 369 00:17:30,670 --> 00:17:31,570 IntAnswer. 370 00:17:31,570 --> 00:17:33,710 Die auf der linken Seiten gibt mir eine Int 371 00:17:33,710 --> 00:17:36,650 genannt store-- können Answer-- die gehen, um zu speichern ist, offenbar, 372 00:17:36,650 --> 00:17:39,090 der Rückgabewert von Sigma. 373 00:17:39,090 --> 00:17:41,840 So Sigma ist nur ein beliebige, aber aussagekräftigen Namen 374 00:17:41,840 --> 00:17:44,500 dass ich auf eine Funktion gegeben , deren Zweck im Leben 375 00:17:44,500 --> 00:17:47,680 ist es, einen argument-- nehmen wir werden es in diesem Fall-- nennen N 376 00:17:47,680 --> 00:17:52,280 und nur um den Betrag dieser Zahl zu nehmen Plus jede positive Zahl, das ist 377 00:17:52,280 --> 00:17:53,200 kleiner, als es. 378 00:17:53,200 --> 00:17:58,140 >> Also, wenn ich übergeben Sie die Nummer 2 auf sigma, möchte ich hinzufügen 2 plus 1 379 00:17:58,140 --> 00:18:00,240 zzgl 0-- nicht 0--, so dass gibt mir 3. 380 00:18:00,240 --> 00:18:05,320 Wenn ich pass in 3 bis sigma, Ich möchte haben 3 plus 2 plus 1, das gibt mir 6. 381 00:18:05,320 --> 00:18:05,900 Und so weiter. 382 00:18:05,900 --> 00:18:09,750 So fügt es gerade alle Zahlen, die kleiner als oder gleich ist. 383 00:18:09,750 --> 00:18:12,040 >> Nun, hier unten Ich werde einfach zum Ausdrucken die Antwort. 384 00:18:12,040 --> 00:18:17,330 So als eine schnelle Plausibilitätsprüfung, lassen Sie uns machen Sigma 0-- dot Strich Sigma 0-- 385 00:18:17,330 --> 00:18:18,690 und lassen Sie mich in 2 geben. 386 00:18:18,690 --> 00:18:19,960 Und ich in der Tat erhalten 3. 387 00:18:19,960 --> 00:18:21,240 Lassen Sie mich geben 3. 388 00:18:21,240 --> 00:18:22,860 Ich in der Tat erhalten 6. 389 00:18:22,860 --> 00:18:27,636 Und wenn jemand die Mathematik schnell tun können, wenn ich 50 was soll ich bekommen? 390 00:18:27,636 --> 00:18:29,839 >> ZIELGRUPPE: [unverständlich]. 391 00:18:29,839 --> 00:18:30,880 David J. MALAN: Nun, nein. 392 00:18:30,880 --> 00:18:33,340 Aber 1275, das ist ziemlich nahe. 393 00:18:33,340 --> 00:18:38,850 Also das ist das Ergebnis von 50 zu tun Plus 49 Plus 48 sowie 47 und 46 394 00:18:38,850 --> 00:18:40,349 bis hinunter auf 1. 395 00:18:40,349 --> 00:18:41,390 Also das ist alles, Sigma tut. 396 00:18:41,390 --> 00:18:43,350 Aber mal sehen, wie wir implementiert es jetzt. 397 00:18:43,350 --> 00:18:45,790 So ist hier unten die Funktion selbst. 398 00:18:45,790 --> 00:18:49,000 Und dies scheint nicht zu haben etwas mit Rekursion noch zu tun. 399 00:18:49,000 --> 00:18:51,070 In der Tat, verwenden wir ein alte Schule-Technik. 400 00:18:51,070 --> 00:18:56,680 Ich Initialisierung einer Variable Summe Null ist, dann habe ich eine foreloop hier, 401 00:18:56,680 --> 00:19:00,790 und ich erklärte ein Int genannt I, Gleichsetzen 1-- 402 00:19:00,790 --> 00:19:04,080 aber ich konnte es gleich eingestellt Null, aber da ich tue hinaus 403 00:19:04,080 --> 00:19:05,340 wen kümmert das, wenn es null oder eins. 404 00:19:05,340 --> 00:19:06,660 Es wird keine Wirkung haben. 405 00:19:06,660 --> 00:19:10,110 >> So bin ich, so lange ich es Iteration weniger als oder gleich m, die 406 00:19:10,110 --> 00:19:11,671 ist das Argument, die übergeben wurde. 407 00:19:11,671 --> 00:19:13,670 Und dann habe ich einfach weiter Erhöhen I. und Einsicht 408 00:19:13,670 --> 00:19:20,010 der Schleife alles, was ich tue, ist Summe tut zzgl gleich I. Und das ist Absicht. 409 00:19:20,010 --> 00:19:22,326 Ich will nicht zu tun, in diesem Fall wie Summe plus plus. 410 00:19:22,326 --> 00:19:24,790 Ich möchte eigentlich hinzuzufügen der aktuelle Wert des I 411 00:19:24,790 --> 00:19:28,190 die wird immer größer und größer und größer auf die Lauf tally. 412 00:19:28,190 --> 00:19:30,210 >> Und dann habe ich Summe zurück. 413 00:19:30,210 --> 00:19:33,850 Und so Antwort bekommt die Wertsumme. 414 00:19:33,850 --> 00:19:35,282 Und dann habe ich auch ausdrucken. 415 00:19:35,282 --> 00:19:37,740 So gibt es eine Gelegenheit, hier, obwohl, um Art zu vereinfachen 416 00:19:37,740 --> 00:19:41,260 dieser Code konzeptionell und die Art der Schlag einer ist 417 00:19:41,260 --> 00:19:43,250 dagegen in Bezug auf die Einfachheit, auch wenn es 418 00:19:43,250 --> 00:19:45,700 dauert eine Weile, um zu sortieren der zu schätzen wissen, warum dies 419 00:19:45,700 --> 00:19:47,330 ist mächtig in diesen kleinen Beispielen. 420 00:19:47,330 --> 00:19:50,380 Hier ist sigma one-- so der zweite Version dieses Codes. 421 00:19:50,380 --> 00:19:55,290 Alles bis oben ist identisch, so dass gleiche Geschichte gilt nach wie vor. 422 00:19:55,290 --> 00:19:59,220 Aber jetzt einen Blick auf die lassen Umsetzung der Sigma die 423 00:19:59,220 --> 00:20:05,040 Ich habe auf nur diese schnitzte lines-- vier Zeilen Code, wirklich, 424 00:20:05,040 --> 00:20:06,980 plus einige geschweiften Klammern und Leerzeichen. 425 00:20:06,980 --> 00:20:07,930 >> Aber was mache ich? 426 00:20:07,930 --> 00:20:11,050 Wenn m kleiner als oder gleich ist Null, muss ich Art von hand 427 00:20:11,050 --> 00:20:12,490 dass Super einfachen Fall. 428 00:20:12,490 --> 00:20:15,450 Und wenn du mich übergeben null oder nichts Negativ, das nur komisch ist, 429 00:20:15,450 --> 00:20:17,909 Ich werde einfach beliebig aber beständig zurück Null. 430 00:20:17,909 --> 00:20:20,200 Ich will nicht, diese Sache zu erhalten in einige seltsame unendlichen 431 00:20:20,200 --> 00:20:21,810 Schleife aufgrund eines negativen Wert. 432 00:20:21,810 --> 00:20:25,070 Also ich bin einfach nur sagen, wenn Sie mir geben Null oder weniger, ich bin der Rückkehr Null. 433 00:20:25,070 --> 00:20:28,220 >> Aber das ist gut so, denn das ist, dass einzelne Seite des Telefonbuchs 434 00:20:28,220 --> 00:20:28,790 , was übrig bleibt. 435 00:20:28,790 --> 00:20:32,660 Ich Abbeißen ein sehr spezifisches Problem und nicht etwas, rekursiv aufrufen. 436 00:20:32,660 --> 00:20:36,580 Aber in der Leitung 31, was ich scheinen zu tun? 437 00:20:36,580 --> 00:20:39,780 Die Klammern sind nur halten Dinge hoffentlich ein wenig klarer. 438 00:20:39,780 --> 00:20:42,110 Aber alles, was ich tue, ist, ich bin Rückkehr M-- unabhängig 439 00:20:42,110 --> 00:20:45,790 Sie mich- und der Hand Wert M-- sorry, 440 00:20:45,790 --> 00:20:49,052 plus dem Wert der Sigma-m minus 1. 441 00:20:49,052 --> 00:20:50,010 Also, was bedeutet das? 442 00:20:50,010 --> 00:20:53,965 Wenn Sie mir die Nummer 3 als Eingang zu geben, die Antwort Ich möchte schließlich erhalten 443 00:20:53,965 --> 00:20:57,307 6, weil 3 plus 2 plus 1 gibt mir 6. 444 00:20:57,307 --> 00:20:59,390 Aber wie kann ich darüber nachdenken, wie dieser Code ausgeführt wird? 445 00:20:59,390 --> 00:21:03,070 Das erste Mal, ich nenne Sigma und ich übergeben Sie den Wert 3, 446 00:21:03,070 --> 00:21:07,960 das ist, wie gesagt, auf einem Stück Papier, hier ist der Wert 3 447 00:21:07,960 --> 00:21:09,920 und ich habe dies als sigma verabschiedet. 448 00:21:09,920 --> 00:21:13,090 3 ist natürlich nicht kleiner als 0, so die IF-Bedingung gilt nicht. 449 00:21:13,090 --> 00:21:14,020 Die anderen nicht. 450 00:21:14,020 --> 00:21:14,990 Also, was soll ich tun? 451 00:21:14,990 --> 00:21:19,902 Ich möchte m zurück, das ist, 3 plus Sigma von m minus 1. 452 00:21:19,902 --> 00:21:21,110 Also lassen Sie mich verfolgen, diese zu halten. 453 00:21:21,110 --> 00:21:22,710 Ich werde diese setzen Stück Papier nach unten. 454 00:21:22,710 --> 00:21:24,668 Und welchen Wert, zu sein klar, werde ich weitergeben 455 00:21:24,668 --> 00:21:26,540 in Sigma an diesem Punkt in der Geschichte? 456 00:21:26,540 --> 00:21:28,080 Welche Nummer? 457 00:21:28,080 --> 00:21:28,610 2, oder? 458 00:21:28,610 --> 00:21:29,670 3 minus 1 ist 2. 459 00:21:29,670 --> 00:21:32,000 Also brauche ich nur ein wenig Zettel hier. 460 00:21:32,000 --> 00:21:33,931 So, jetzt Sigma wird immer wieder genannt. 461 00:21:33,931 --> 00:21:35,930 Und ich absichtlich gesetzt haben Diese nach unten, weil es 462 00:21:35,930 --> 00:21:38,070 eine Art, wie Pausieren dass Version der Geschichte 463 00:21:38,070 --> 00:21:40,720 denn jetzt bin ich fokussierten auf Signal m minus 1. 464 00:21:40,720 --> 00:21:42,660 So war m 3, m minus 1 ist 2. 465 00:21:42,660 --> 00:21:45,110 So, hier ist 2, die ich geführt worden. 466 00:21:45,110 --> 00:21:48,510 2 ist offensichtlich nicht weniger als 0, so daß Fall keine Anwendung findet. 467 00:21:48,510 --> 00:21:53,445 Else Ich kehre m, was das ist Sache, zzgl Sigma von welchen Wert? 468 00:21:53,445 --> 00:21:56,160 469 00:21:56,160 --> 00:21:59,650 Also, wenn der Sigma-1--, weil m jetzt 2 so 2 minus 1 ist 1. 470 00:21:59,650 --> 00:22:01,950 So, jetzt muss ich nur den Wert 1. 471 00:22:01,950 --> 00:22:04,810 Ich bin vorbei nur die Anzahl 1 an den Funktions sigma-- 472 00:22:04,810 --> 00:22:09,120 oder mich hier-- so 1 ist natürlich nicht kleiner als Null ist, noch nicht anwendbar ist. 473 00:22:09,120 --> 00:22:12,970 >> Else Rückkehr 1 plus Sigma von was? 474 00:22:12,970 --> 00:22:13,470 0. 475 00:22:13,470 --> 00:22:14,678 Also lassen Sie mich nur daran erinnern, dass. 476 00:22:14,678 --> 00:22:15,920 Ich komme, um zu bekommen, dass später. 477 00:22:15,920 --> 00:22:18,060 Jetzt werde ich voran und jot gehen unten die Nummer 0, weil das ist, 478 00:22:18,060 --> 00:22:19,470 mein Argument bzw. Parameter. 479 00:22:19,470 --> 00:22:22,400 Ich bin die Nummer 0 übergeben und schließlich dieser Prozess 480 00:22:22,400 --> 00:22:25,760 der gerade wiederhole mich ad nauseum nicht aufhören, weil das, was 481 00:22:25,760 --> 00:22:28,820 ich sofort tun, wenn ich sehe, dieses 0? 482 00:22:28,820 --> 00:22:29,790 Ich kehre Null. 483 00:22:29,790 --> 00:22:31,790 So, jetzt haben Sie, um die Geschichte zurückzuspulen. 484 00:22:31,790 --> 00:22:34,430 >> Wenn ich nun rückwärts in der Zeit, was war die letzte Sache, 485 00:22:34,430 --> 00:22:36,670 Ich tat, wenn Sie buchstäblich waren Zurückspulen eines Videos? 486 00:22:36,670 --> 00:22:41,630 Ich werde zu holen die jüngsten 1 und das gibt mir 1 plus 0 1. 487 00:22:41,630 --> 00:22:44,100 Wenn ich halten das Zurückspulen Geschichte, das wird mir zu geben 488 00:22:44,100 --> 00:22:46,880 2 plus das Laufwert, der 1 ist. 489 00:22:46,880 --> 00:22:47,789 Also das ist, 3. 490 00:22:47,789 --> 00:22:49,330 Und dann werde ich Zurückspulen halten. 491 00:22:49,330 --> 00:22:54,220 Als ich das erste legte die Zahl 3-- so 3 plus 3 gibt mir 6. 492 00:22:54,220 --> 00:22:57,272 >> Und jetzt, wenn Sie zurückgespult habe das Video bis zu diesem Zeitpunkt, 493 00:22:57,272 --> 00:22:58,980 Das war die sehr erste Frage, fragte ich. 494 00:22:58,980 --> 00:23:01,450 Wenn verfehlt 3, was Sigma von 3? 495 00:23:01,450 --> 00:23:04,204 Es ist in der Tat 6, die Summe aus Alle diese Zettel. 496 00:23:04,204 --> 00:23:07,120 Also, wenn das dauert eine Weile, um Wendet euer Gehirn um, das ist in Ordnung. 497 00:23:07,120 --> 00:23:10,700 Aber bedenken Sie, es war ein little-- es war sehr bewusste, dass ich gestapelt 498 00:23:10,700 --> 00:23:12,990 diese Zahlen auf der jeweils anderen Seite. 499 00:23:12,990 --> 00:23:17,440 Es ist ein bisschen wie mit einem memory-- einen Rekord in der Zeit, 500 00:23:17,440 --> 00:23:19,940 wie ein Gaswäscher in einem Video, dass ich in der Tat in zurückspulen. 501 00:23:19,940 --> 00:23:24,350 Und wir werden zurückkommen daß Metapher in nur ein wenig. 502 00:23:24,350 --> 00:23:28,240 >> Zunächst aber es stellt sich heraus, dass es eine Menge von Geeks und lustigen Menschen, 503 00:23:28,240 --> 00:23:29,614 Ich schätze, bei Google. 504 00:23:29,614 --> 00:23:31,530 Würde jemand, der sehr ist gut googeln Geist 505 00:23:31,530 --> 00:23:34,270 kommen nur für einen Augenblick und mir helfen, etwas zu suchen? 506 00:23:34,270 --> 00:23:35,650 Sehr, sehr zurückhaltend. 507 00:23:35,650 --> 00:23:37,870 Jemand, der noch nie ist kommen vor, vielleicht. 508 00:23:37,870 --> 00:23:38,370 OK. 509 00:23:38,370 --> 00:23:39,030 Ja? 510 00:23:39,030 --> 00:23:39,530 Komm schon. 511 00:23:39,530 --> 00:23:41,410 Komm runter. 512 00:23:41,410 --> 00:23:42,183 Wie heißen Sie? 513 00:23:42,183 --> 00:23:42,870 >> SAM: Sam. 514 00:23:42,870 --> 00:23:44,290 >> David J. MALAN: Sam, komm nach unten. 515 00:23:44,290 --> 00:23:45,320 Dies ist Same. 516 00:23:45,320 --> 00:23:46,280 Nett, dich zu treffen. 517 00:23:46,280 --> 00:23:46,780 Hallo. 518 00:23:46,780 --> 00:23:47,580 Komm rüber. 519 00:23:47,580 --> 00:23:51,290 Also alles, was ich brauche, was Sie tun, wenn Sie könnte, Sam, hier ist Google. 520 00:23:51,290 --> 00:23:53,240 Können Sie nach dem Begriff Rekursion zu suchen? 521 00:23:53,240 --> 00:23:55,770 522 00:23:55,770 --> 00:23:56,270 Verderben Sie nicht. 523 00:23:56,270 --> 00:23:59,940 524 00:23:59,940 --> 00:24:00,970 >> Und jetzt let's-- ja. 525 00:24:00,970 --> 00:24:03,380 OK Klicken Sie auf, dass. 526 00:24:03,380 --> 00:24:04,315 Bessere klicken, dass. 527 00:24:04,315 --> 00:24:07,020 528 00:24:07,020 --> 00:24:08,020 Ahh, get it. 529 00:24:08,020 --> 00:24:08,520 Nein? 530 00:24:08,520 --> 00:24:09,050 OK. 531 00:24:09,050 --> 00:24:10,430 Lassen Sie uns so tun, ein paar andere. 532 00:24:10,430 --> 00:24:12,830 Nicht so sehr damit verbundenen akademisch hier aus haben Sie aber 533 00:24:12,830 --> 00:24:14,520 immer gesucht Google für Anagramm? 534 00:24:14,520 --> 00:24:15,280 >> SAM: Nein 535 00:24:15,280 --> 00:24:15,520 >> David J. MALAN: OK. 536 00:24:15,520 --> 00:24:17,186 Suchen Sie nach Anagramm statt Rekursion. 537 00:24:17,186 --> 00:24:22,540 538 00:24:22,540 --> 00:24:23,790 Wie wäre es schief. 539 00:24:23,790 --> 00:24:25,515 Sie jemals schief gesucht? 540 00:24:25,515 --> 00:24:29,260 541 00:24:29,260 --> 00:24:32,692 Jetzt ist dieses ein wenig schwer zu sehen aber hoffentlich everything's-- OK. 542 00:24:32,692 --> 00:24:34,150 Es ist nur du und ich genießen dieses. 543 00:24:34,150 --> 00:24:34,690 OK. 544 00:24:34,690 --> 00:24:38,950 >> So endlich, diese one's-- es ist ein wenig schief. 545 00:24:38,950 --> 00:24:40,810 Jetzt tun Sie eine Fass-Rolle. 546 00:24:40,810 --> 00:24:44,460 547 00:24:44,460 --> 00:24:45,310 Wunderbar. 548 00:24:45,310 --> 00:24:45,910 Gut. 549 00:24:45,910 --> 00:24:47,110 Großes Dankeschön an Sam. 550 00:24:47,110 --> 00:24:49,416 Bitte schön. 551 00:24:49,416 --> 00:24:50,400 Vielen Dank. 552 00:24:50,400 --> 00:24:52,807 >> Also, was los ist in allen dieser dumme Beispiele? 553 00:24:52,807 --> 00:24:55,640 Also wirklich, unter der Haube des Millionen von Zeilen Code von Google 554 00:24:55,640 --> 00:24:58,860 anscheinend ein paar dumme IF Bedingungen, die im wesentlichen 555 00:24:58,860 --> 00:25:01,160 Überprüfen, ob der Benutzer in diesem Ausdruck eingegeben haben, 556 00:25:01,160 --> 00:25:03,760 tun etwas, das fand wahrscheinlich eine nichttriviale Menge an Zeit 557 00:25:03,760 --> 00:25:06,080 um nur zu implementieren amüsant auf diese Weise. 558 00:25:06,080 --> 00:25:08,430 Aber das ist alles, es kocht bis auf unter der Haube. 559 00:25:08,430 --> 00:25:11,570 Aber natürlich Rekursion ist der geekier 560 00:25:11,570 --> 00:25:13,880 B. unter den besonderen Tricks. 561 00:25:13,880 --> 00:25:16,880 Und sicherlich gibt es andere gibt, als auch, dass wir vielleicht noch nicht einmal 562 00:25:16,880 --> 00:25:18,230 nur noch nicht entdeckt. 563 00:25:18,230 --> 00:25:22,830 >> Also werfen Sie einen Blick, oder zu prüfen, jetzt das folgende Programm, 564 00:25:22,830 --> 00:25:24,830 und sicherlich packen jede von diesen auf dem Weg nach draußen. 565 00:25:24,830 --> 00:25:28,820 Ich werde weitermachen und öffnen, ein Programm, das ist 566 00:25:28,820 --> 00:25:30,920 werde versuchen, zwei Werte zu tauschen. 567 00:25:30,920 --> 00:25:33,210 Aber bevor wir dorthin gehen, lassen Sie uns dies tun. 568 00:25:33,210 --> 00:25:38,500 Könnten wir bekommen einen weiteren Ehrenamtliche Arbeit, ich denke? 569 00:25:38,500 --> 00:25:40,480 Möchten Sie freiwillig? 570 00:25:40,480 --> 00:25:40,980 Nein? 571 00:25:40,980 --> 00:25:41,890 Komm auf. 572 00:25:41,890 --> 00:25:42,390 Komm auf. 573 00:25:42,390 --> 00:25:42,890 Gut. 574 00:25:42,890 --> 00:25:44,136 Also Ihr Name ist was? 575 00:25:44,136 --> 00:25:44,810 >> LAUREN: Lauren. 576 00:25:44,810 --> 00:25:45,768 >> David J. MALAN: Lauren. 577 00:25:45,768 --> 00:25:46,890 Kommen Sie auf, Lauren. 578 00:25:46,890 --> 00:25:50,140 So Lauren wird wie folgt hier in Frage gestellt. 579 00:25:50,140 --> 00:25:52,310 Nett, dich zu treffen. 580 00:25:52,310 --> 00:25:55,730 So Lauren hat sich hier vor ihre beiden leeren Becher. 581 00:25:55,730 --> 00:25:57,570 Und wir haben einige Orangen Saft und etwas Milch 582 00:25:57,570 --> 00:26:00,301 und wir werden zu gehen die folgende voran und tun. 583 00:26:00,301 --> 00:26:01,550 Wir sind gerade dabei, diese zu füllen. 584 00:26:01,550 --> 00:26:07,840 Ein paar Unzen Milch her und lassen Sie uns füllen Sie ein wenig Orangensaft hier. 585 00:26:07,840 --> 00:26:11,475 >> Und vor allem der diese Zuschauer, 586 00:26:11,475 --> 00:26:13,550 tauschen Sie die beiden Werte dieser Becher. 587 00:26:13,550 --> 00:26:16,970 Setzen Sie den O-Saft in der Milchschale und die Milch in der Tasse Orangensaft. 588 00:26:16,970 --> 00:26:22,380 589 00:26:22,380 --> 00:26:26,150 Wie würden Sie das tun, wenn man sich gab Haus und hatte Zugang zu anderen Lieferungen? 590 00:26:26,150 --> 00:26:27,400 LAUREN: Legen Sie es in eine Tasse. 591 00:26:27,400 --> 00:26:28,191 David J. MALAN: OK. 592 00:26:28,191 --> 00:26:31,940 Lassen Sie uns also eine temporäre Variable, wenn wir wollen. 593 00:26:31,940 --> 00:26:35,871 Und gehen Sie jetzt und umzusetzen Diese gleichen Swapping Verfahren. 594 00:26:35,871 --> 00:26:36,370 So gut. 595 00:26:36,370 --> 00:26:41,490 Wir haben OJ in den temporären setzen variable, Milch in die ABl variable, 596 00:26:41,490 --> 00:26:44,481 und nun der temporären Variablen in den Milch variabel. 597 00:26:44,481 --> 00:26:44,980 OK. 598 00:26:44,980 --> 00:26:48,740 Also sehr gut bisher. 599 00:26:48,740 --> 00:26:50,990 So stellt sich out-- halten, dass dachte für einen Moment. 600 00:26:50,990 --> 00:26:54,479 Hier, um nur Aussenseiter es ein wenig, diese würde die entsprechende C-Code sein 601 00:26:54,479 --> 00:26:55,520 dass wir einfach implementiert. 602 00:26:55,520 --> 00:26:58,650 Wir hatten zwei Eingänge a und b, die beide welche wir einfach sagen, der Einfachheit halber sind 603 00:26:58,650 --> 00:26:59,260 int ist. 604 00:26:59,260 --> 00:27:02,780 Und hier bemerken, wenn ich will, um zu tauschen die Werte von zwei Variablen a und b, 605 00:27:02,780 --> 00:27:06,890 wir in der Tat brauchen einen Mittelsmann, ein Zwischenvariable, eine temporäre Tasse, 606 00:27:06,890 --> 00:27:10,830 in die das Gießen einer der Werte so dass wir einen Platzhalter für sie. 607 00:27:10,830 --> 00:27:13,480 Aber der Code ist genau das, wie Lauren hier implementiert. 608 00:27:13,480 --> 00:27:15,500 >> Nun, nur um einen zu bekommen wenig verrückter, stellt sich heraus, 609 00:27:15,500 --> 00:27:20,930 dass Sie dies tun, ohne eine temporäre Variable ist. 610 00:27:20,930 --> 00:27:24,870 Um dies richtig zu machen, aber wir gehen zu haben, um mit einigen der Chemie zu betrügen. 611 00:27:24,870 --> 00:27:26,380 Wir haben einige Extrabecher hier. 612 00:27:26,380 --> 00:27:29,600 So ist die nächste Sache, die aussieht wie Milch und Wasser perhaps-- 613 00:27:29,600 --> 00:27:34,090 oder Milch und OJ-- ist, wir haben einige Wasser, so dass wir diesen einen tanken 614 00:27:34,090 --> 00:27:36,486 mit ein paar Unzen klares Wasser. 615 00:27:36,486 --> 00:27:38,332 Das ist wahrscheinlich zu viel. 616 00:27:38,332 --> 00:27:38,832 Ja. 617 00:27:38,832 --> 00:27:39,934 Das ist definitiv zu viel. 618 00:27:39,934 --> 00:27:40,600 Warte eine Sekunde. 619 00:27:40,600 --> 00:27:43,520 620 00:27:43,520 --> 00:27:48,420 >> Und jetzt haben wir Öl, das, soweit ich mich erinnere von der Mittelschule der Chemie-Klasse, 621 00:27:48,420 --> 00:27:49,990 hoffentlich ist es nicht mit Wasser mischen. 622 00:27:49,990 --> 00:27:53,650 Aber es ist irgendwie eine Art sieht aus wie Milch und ABl. 623 00:27:53,650 --> 00:27:55,760 So, jetzt, ohne Verwendung eine temporäre Variable ist, 624 00:27:55,760 --> 00:27:59,260 können Sie diese zwei Werte zu tauschen? 625 00:27:59,260 --> 00:28:03,884 So Öle geht in die Wasserschale, Wasser geht in die Ölschale. 626 00:28:03,884 --> 00:28:04,800 LAUREN: Keine anderen Cups? 627 00:28:04,800 --> 00:28:05,940 David J. MALAN: Keine anderen Cups. 628 00:28:05,940 --> 00:28:07,860 Und ich habe nicht wirklich getestet bevor dieses Jahres 629 00:28:07,860 --> 00:28:10,110 so dass ich weiß nicht, ob dies tatsächlich funktionieren chemisch. 630 00:28:10,110 --> 00:28:16,130 631 00:28:16,130 --> 00:28:18,650 Das sollte eigentlich nicht passieren. 632 00:28:18,650 --> 00:28:19,761 Funktioniert es? 633 00:28:19,761 --> 00:28:20,260 Gut. 634 00:28:20,260 --> 00:28:20,990 So trennen? 635 00:28:20,990 --> 00:28:21,490 Gut. 636 00:28:21,490 --> 00:28:24,714 Jetzt haben wir, um das zu bekommen Wasser in den anderen Becher. 637 00:28:24,714 --> 00:28:27,630 Smarter Chemie Konzentratoren könnten wahrscheinlich tun dies besser als ich. 638 00:28:27,630 --> 00:28:28,510 >> LAUREN: Das Wasser ist auf der Unterseite. 639 00:28:28,510 --> 00:28:31,910 >> David J. MALAN: Die water--, das war was ist Schlüssel wir das letzte Mal tat dies. 640 00:28:31,910 --> 00:28:33,950 Sie haben es in der richtigen Reihenfolge zu tun. 641 00:28:33,950 --> 00:28:34,450 Ja. 642 00:28:34,450 --> 00:28:35,270 Das ist ok. 643 00:28:35,270 --> 00:28:37,290 Jetzt haben wir also zwei Tassen Öl. 644 00:28:37,290 --> 00:28:37,790 OK. 645 00:28:37,790 --> 00:28:38,510 Das ist ok. 646 00:28:38,510 --> 00:28:40,110 Aber wenn diese chemisch bearbeitet als I-- 647 00:28:40,110 --> 00:28:41,200 >> LAUREN: Dies ist Wasser. 648 00:28:41,200 --> 00:28:41,930 >> David J. MALAN: Das ist vor allem Wasser. 649 00:28:41,930 --> 00:28:42,430 Gut. 650 00:28:42,430 --> 00:28:44,210 Aber das ist immer noch die gleiche Tasse wie zuvor. 651 00:28:44,210 --> 00:28:47,570 So gießen es-- probieren Sie es dort. 652 00:28:47,570 --> 00:28:49,300 OK. 653 00:28:49,300 --> 00:28:51,010 Dies ist eine gute Nutzung der Unterrichtszeit heute. 654 00:28:51,010 --> 00:28:51,510 OK. 655 00:28:51,510 --> 00:28:53,890 So wir-- jetzt schön. 656 00:28:53,890 --> 00:28:55,460 Art. 657 00:28:55,460 --> 00:28:55,960 Gut. 658 00:28:55,960 --> 00:28:56,690 Also sehr gut. 659 00:28:56,690 --> 00:29:00,006 Vielen Dank an Lauren. 660 00:29:00,006 --> 00:29:01,950 Sehr gut gemacht. 661 00:29:01,950 --> 00:29:04,570 >> Also, nur um deinen Verstand zu blasen, und das ist vielleicht etwas 662 00:29:04,570 --> 00:29:08,660 mit, wenn Sie in CS50 ID gerne spielen, Sie können in der Tat, tauschen zwei Variablen 663 00:29:08,660 --> 00:29:11,470 ohne Verwendung eines temporären Integer. 664 00:29:11,470 --> 00:29:13,060 Und das ist das entsprechende C-Code. 665 00:29:13,060 --> 00:29:16,110 Und wenn Sie von den letzten erinnern Mittwoch, haben wir, wenn auch nur kurz, 666 00:29:16,110 --> 00:29:19,720 einige neue Operatoren in C. Und tut jemand daran erinnern, was die kleine Karotte 667 00:29:19,720 --> 00:29:23,660 Symbol ist, das kleine dreieckige Symbol auf der Tastatur darstellt? 668 00:29:23,660 --> 00:29:26,003 Was bitweisen Operator? 669 00:29:26,003 --> 00:29:26,770 >> ZIELGRUPPE: EXOR. 670 00:29:26,770 --> 00:29:27,645 >> David J. MALAN: EXOR. 671 00:29:27,645 --> 00:29:28,560 Exclusive Or. 672 00:29:28,560 --> 00:29:32,920 Also, wenn Sie wollen, nur so zum Spaß an zu Hause, um eine und b zwei beliebige geben 673 00:29:32,920 --> 00:29:36,072 Werte wie jede eight-- und ich würde ein Acht-Bit-Wert zu wählen. 674 00:29:36,072 --> 00:29:38,530 Wenn Sie dies mit 32 Bit zu tun, Sie werden sehr schnell langweilen. 675 00:29:38,530 --> 00:29:42,150 Aber gerade geben ein ein Acht-Bit Wert, der ist, was auch immer, ein oder zwei, 676 00:29:42,150 --> 00:29:43,790 und geben Sie b einen ähnlichen Wert. 677 00:29:43,790 --> 00:29:46,810 Und dann unter Verwendung der Definition von XOR vom vergangenen Mittwoch, 678 00:29:46,810 --> 00:29:52,560 anzuwenden, die Stück für Stück, jede diese acht Bits in jedem der a und b, 679 00:29:52,560 --> 00:29:54,980 und dann tun Sie es genau pro diesem Code. 680 00:29:54,980 --> 00:29:58,170 Und es ist nicht eine falsche welche Sie sehen, hier auf dem Bildschirm. 681 00:29:58,170 --> 00:30:02,100 Es läuft darauf hinaus tatsächlich nach unten zu drei XOR-Operationen 682 00:30:02,100 --> 00:30:05,910 und irgendwie magisch ein und b werden Positionen austauschen 683 00:30:05,910 --> 00:30:08,010 ohne Informationen zu verlieren. 684 00:30:08,010 --> 00:30:11,580 >> Also das Öl und Wasser Trick ist, die am nächsten realen Inkarnation 685 00:30:11,580 --> 00:30:12,980 I zu imitieren denken konnte. 686 00:30:12,980 --> 00:30:15,950 Aber es ist sicherlich einfacher, eine temporäre Variable, 687 00:30:15,950 --> 00:30:16,920 wie in diesem Fall hier. 688 00:30:16,920 --> 00:30:21,190 Und auch dies ist eine Gelegenheit, zu sagen, Auch diese Art von Mikro Optimierung, 689 00:30:21,190 --> 00:30:23,590 als Informatiker sagen würde, während Art von Spaß 690 00:30:23,590 --> 00:30:27,060 darüber nachdenken, wie Sie tat dies, ohne zu prahlen wie das Makeln mit einem zusätzlichen variablen, 691 00:30:27,060 --> 00:30:28,640 es ist gar nicht so überzeugend. 692 00:30:28,640 --> 00:30:31,619 Weil auf 32 Bit, wie zu sparen im Fall eines tatsächlichen int, 693 00:30:31,619 --> 00:30:33,410 ist gar nicht so überzeugend auf einem System 694 00:30:33,410 --> 00:30:36,722 Sie könnten mit zig Megabyte oder noch mehr solcher Speicher in diesen Tagen. 695 00:30:36,722 --> 00:30:38,680 Und in der Tat, wenn wir zu einem späteren Problem Set 696 00:30:38,680 --> 00:30:41,010 und Sie Rechtschreib umsetzen checker und du wirst 697 00:30:41,010 --> 00:30:43,550 fordert, dies mit zu tun Diese so wenig RAM und so wenig 698 00:30:43,550 --> 00:30:46,820 Zeit wie möglich auf die computer-- Sie noch 699 00:30:46,820 --> 00:30:50,160 haben eine Woche zu implementieren es-- Du have-- werden Sie sein 700 00:30:50,160 --> 00:30:51,799 herausgefordert, diese Ressourcen zu minimieren. 701 00:30:51,799 --> 00:30:53,840 Und das ist wirklich das einzige veran diesem Semester 702 00:30:53,840 --> 00:30:57,940 wo Sie aufgefordert werden, sich zu rasieren off sogar die beste Leistung 703 00:30:57,940 --> 00:30:59,340 kostet nichts anderes. 704 00:30:59,340 --> 00:31:02,200 >> So what-- wie können wir Dies in eigentlichen Code? 705 00:31:02,200 --> 00:31:04,530 Lassen Sie mich gehen Sie jetzt und öffnen Sie ein Beispiel 706 00:31:04,530 --> 00:31:07,700 dass gezielt aufgerufen Kein Tausch, weil es nicht der Fall ist 707 00:31:07,700 --> 00:31:10,670 Tatsächlich tauschen die Variablen wie Sie eigentlich erwarten könnte. 708 00:31:10,670 --> 00:31:12,260 Werfen wir also einen Blick. 709 00:31:12,260 --> 00:31:17,050 Hier ist ein Programm, das keine CS50 hat Bibliothek los, nur Standard-I / O. 710 00:31:17,050 --> 00:31:19,560 Jetzt haben wir einen Prototyp für Swap-up top, die gerade 711 00:31:19,560 --> 00:31:21,540 bedeutet, es muss später festgelegt werden. 712 00:31:21,540 --> 00:31:22,550 Und hier ist Haupt. 713 00:31:22,550 --> 00:31:26,000 >> I willkürlich zugeordnet x und y, jeweils die Werte eins und zwei 714 00:31:26,000 --> 00:31:28,590 nur weil sie klein sind und einfach zu denken. 715 00:31:28,590 --> 00:31:32,280 Und dann habe ich nur ein paar printfs wo ich eine Plausibilitätsprüfung. x gleich 1 ist 716 00:31:32,280 --> 00:31:35,110 und y 2 ist vermutlich was diese printfs werden sagen. 717 00:31:35,110 --> 00:31:36,530 Also keine magische bisher. 718 00:31:36,530 --> 00:31:40,100 >> Dann werde ich mit Anspruch drucken def, Swapping dot dot dot. 719 00:31:40,100 --> 00:31:43,730 Ich werde die Swap nennen Funktion, vorbei in x und y. 720 00:31:43,730 --> 00:31:47,350 Und lassen Sie uns für jetzt davon ausgehen, dass Swap exakt umgesetzt 721 00:31:47,350 --> 00:31:49,930 wie es war vor einem Augenblick mit einer temporären Variablen. 722 00:31:49,930 --> 00:31:52,670 Und so behaupte ich kühn, getauscht. 723 00:31:52,670 --> 00:31:55,429 x ist jetzt dies und y ist jetzt, dass. 724 00:31:55,429 --> 00:31:57,220 Aber die Datei natürlich heißt ohne Swap. 725 00:31:57,220 --> 00:31:58,678 Lassen Sie uns also tatsächlich sehen, was passiert. 726 00:31:58,678 --> 00:32:04,450 Wenn ich keine Swap und kompilieren do ./noswap, x 1 ist, y 2. 727 00:32:04,450 --> 00:32:05,770 Dem Wechsel getauscht. 728 00:32:05,770 --> 00:32:07,200 x 1 ist, y 2 ist. 729 00:32:07,200 --> 00:32:11,980 So dass es scheint tatsächlich sogar fehlerhaft sein obwohl swap-- die nach unten scrollen now-- lassen 730 00:32:11,980 --> 00:32:16,542 ist genau das umgesetzt pro Code, den ich vorgeschlagen, vor einem Augenblick. 731 00:32:16,542 --> 00:32:19,000 So werden wir nicht hübsch machen mit der XOR-Sachen für jetzt. 732 00:32:19,000 --> 00:32:21,890 Auch dies sollte nur Arbeit wie mit der Milch und Orangensaft, 733 00:32:21,890 --> 00:32:25,820 aber es scheint nicht zu funktionieren. 734 00:32:25,820 --> 00:32:27,180 >> Lassen Sie uns also wieder tun. 735 00:32:27,180 --> 00:32:29,310 Vielleicht nur ich war nicht richtig auszuführen. 736 00:32:29,310 --> 00:32:32,010 Also lassen Sie laufen keine Swap erneut. 737 00:32:32,010 --> 00:32:32,900 Vielleicht I-- nicht. 738 00:32:32,900 --> 00:32:34,400 So ist es einfach nicht funktioniert. 739 00:32:34,400 --> 00:32:36,060 Lassen Sie uns also ein wenig Plausibilitätsprüfung. 740 00:32:36,060 --> 00:32:39,690 Lassen Sie mich gehen Sie hier in Swap und fügen Sie einfach, warten Sie eine Minute, 741 00:32:39,690 --> 00:32:43,856 a ist% i / n und lassen Sie uns Plug-in den Wert a. 742 00:32:43,856 --> 00:32:45,730 Weil ich wirklich wollen, um zu sehen, was los ist. 743 00:32:45,730 --> 00:32:47,570 Und in der Tat ist dies ein Debugging-Technik 744 00:32:47,570 --> 00:32:50,028 dass Sie verwenden möglicherweise in Öffnungszeiten oder an schon nach Hause, 745 00:32:50,028 --> 00:32:53,560 ähnlich der ersten Hälfte des Dan Armendariz Video in PSET3 746 00:32:53,560 --> 00:32:56,870 wobei wir uns vorgestellt Druck def als eine empfohlene Technik zumindest 747 00:32:56,870 --> 00:32:58,080 für einfache Fälle. 748 00:32:58,080 --> 00:33:01,720 Lassen Sie mich gehen Sie vor und laufen zu lassen kein Swap wieder ./noswap. 749 00:33:01,720 --> 00:33:04,370 750 00:33:04,370 --> 00:33:05,840 >> Interessante. 751 00:33:05,840 --> 00:33:11,670 So bemerken, was scheint, um wahr zu sein. x 1 ist, y 2, sondern eine 2 ist, wenn b 1 ist. 752 00:33:11,670 --> 00:33:16,790 Also die beiden irgendwie bekam getauscht aber x und y sind nicht immer vertauscht. 753 00:33:16,790 --> 00:33:21,090 So klar zu sein, was passiert, ist, hier oben habe ich x und y 754 00:33:21,090 --> 00:33:25,380 und das sind lokale Variablen in der Umfang der wichtigsten, ich bin in x- und y-Weitergabe 755 00:33:25,380 --> 00:33:26,170 vertauschen. 756 00:33:26,170 --> 00:33:29,080 Nun, tauschen, als separate Funktion, ist frei, um ihre Argumente nennen 757 00:33:29,080 --> 00:33:30,590 oder seine Parameter alles, was es will. 758 00:33:30,590 --> 00:33:33,280 Foo oder Bar oder x oder y oder a oder b. 759 00:33:33,280 --> 00:33:36,870 Nur um klar zu machen, dass sie nicht identisch mit X und Y per se, 760 00:33:36,870 --> 00:33:38,020 Ich sagte, a und b haben. 761 00:33:38,020 --> 00:33:40,040 Aber wir konnten sie alles, was wir wollen, rufen. 762 00:33:40,040 --> 00:33:43,960 >> Und so sieht es aus wie Swap übergeben wird 763 00:33:43,960 --> 00:33:48,980 x-- Alias ​​a-- und es ist übergeben Y- Alias ​​b. 764 00:33:48,980 --> 00:33:51,900 Irgendwie diese drei Linien Swapping diese Werte genau 765 00:33:51,900 --> 00:33:53,510 wie Lauren tat mit der Milch und ABl. 766 00:33:53,510 --> 00:33:56,010 Aber wenn wir ausdrucken Die Werte a und b 767 00:33:56,010 --> 00:34:01,340 sind in der Tat zu tauschen, aber x und y keine Änderung zu ihnen. 768 00:34:01,340 --> 00:34:03,150 Daran erinnern, dass x und y sind hier oben. 769 00:34:03,150 --> 00:34:05,320 >> So können wir dies über sehen Eine andere Technik auch. 770 00:34:05,320 --> 00:34:08,110 Und auch dies ist eine Technik, in Problem eingebetteten Satz drei. 771 00:34:08,110 --> 00:34:10,780 Lassen Sie uns weitermachen und tun dies in CS50-ID, wenn Sie nicht bereits haben. 772 00:34:10,780 --> 00:34:13,730 Auf der rechten Seite haben wir haben diese Debugger Registerkarte. 773 00:34:13,730 --> 00:34:16,159 Und wenn Sie diese öffnen, es gibt einige arkane Informationen 774 00:34:16,159 --> 00:34:17,530 das ist bei Ihnen zunächst geworfen. 775 00:34:17,530 --> 00:34:19,310 Aber lassen Sie uns necken dieses Apart wirklich schnell. 776 00:34:19,310 --> 00:34:21,620 >> Eines finden Sie lokale Variablen. 777 00:34:21,620 --> 00:34:26,230 Es stellte sich heraus, dass in CS50 IDE zu bauen, und eine Menge von Programmierumgebungen mehr 778 00:34:26,230 --> 00:34:28,060 Im Allgemeinen wird ein Debugger. 779 00:34:28,060 --> 00:34:31,340 Ein Werkzeug, das Ihnen, zu sehen, ermöglicht was los ist im Inneren Ihres Programms 780 00:34:31,340 --> 00:34:34,380 ohne auf Hinzufügen greifen printfs und Kompilieren und Ausführen 781 00:34:34,380 --> 00:34:37,588 und das Hinzufügen von printf und die Zusammenstellung und läuft, die bereits in der Bürozeiten 782 00:34:37,588 --> 00:34:40,070 oder zu Hause, ist wahrscheinlich immer ziemlich langweilig. 783 00:34:40,070 --> 00:34:43,090 >> So, hier, in nur einem Augenblick sind wir gehen, um in Echtzeit zu sehen, 784 00:34:43,090 --> 00:34:44,760 die Werte unserer lokalen Variablen. 785 00:34:44,760 --> 00:34:47,880 Wir werden auch in der Lage sein festgelegt sein, was sind Haltepunkte aufgerufen, 786 00:34:47,880 --> 00:34:52,570 es Möglichkeiten in meinem Programm zu pausieren Bearbeitung an bestimmter Codezeile 787 00:34:52,570 --> 00:34:53,710 dass ich bin neugierig. 788 00:34:53,710 --> 00:34:54,210 Recht? 789 00:34:54,210 --> 00:34:55,969 Diese Programme laufen in Sekundenbruchteilen. 790 00:34:55,969 --> 00:35:00,450 Es ist ganz nett für uns langsameren Menschen in der Lage sein anzuhalten, einen Moment Zeit nehmen, siehe 791 00:35:00,450 --> 00:35:02,380 was los ist in der Umgebung eine bestimmte Codezeile 792 00:35:02,380 --> 00:35:05,050 ohne das Programm Pflügen durch ihn und Finishing ganz. 793 00:35:05,050 --> 00:35:08,510 So ein Haltepunkte wird uns, damit brechen und Pause an einem bestimmten Punkt. 794 00:35:08,510 --> 00:35:12,990 >> Call-Stack ist eine andere Art zu sagen, was Funktionen sind derzeit 795 00:35:12,990 --> 00:35:14,140 im Moment bezeichnet. 796 00:35:14,140 --> 00:35:15,370 Haupt wird immer zuerst genannt. 797 00:35:15,370 --> 00:35:17,230 Aber wenn Haupt ruft ein Swap-Funktion aufgerufen, 798 00:35:17,230 --> 00:35:20,470 wir eigentlich vor sich geht, das zu sehen Turm von Funktionen, die gewesen sein 799 00:35:20,470 --> 00:35:22,400 in umgekehrter chronologischer Reihenfolge aufgerufen. 800 00:35:22,400 --> 00:35:23,310 Also mal sehen, dass. 801 00:35:23,310 --> 00:35:24,327 >> Ich werde zu verkleinern. 802 00:35:24,327 --> 00:35:25,660 Ich werde wieder in meinem Code zu gehen. 803 00:35:25,660 --> 00:35:27,540 Und gerade weil ich will, hier pedantisch zu sein, 804 00:35:27,540 --> 00:35:31,100 Ich werde weitermachen und klicken Sie auf nur links von der Linie fünf. 805 00:35:31,100 --> 00:35:32,830 Und das schafft einen roten Punkt. 806 00:35:32,830 --> 00:35:36,200 Und auf der rechten Seite merken dass der Debugger weiß, hey, 807 00:35:36,200 --> 00:35:41,020 Ich sagte nur ein Haltepunkt an noswap.c Linie fünf, und zwar 808 00:35:41,020 --> 00:35:42,480 bei dieser Codezeile. 809 00:35:42,480 --> 00:35:45,090 So dass der Debugger weiß, daß ich , dass das nächste Mal, wenn die angeforderte 810 00:35:45,090 --> 00:35:48,530 Ich betreibe mein Programm ist Pause Ausführung gibt und nicht nur 811 00:35:48,530 --> 00:35:50,390 läuft die ganze Sache super schnell. 812 00:35:50,390 --> 00:35:53,889 >> So, jetzt werde ich die Debug klicken Taste an der Spitze der IDE 813 00:35:53,889 --> 00:35:55,430 und das wird die folgende zu tun. 814 00:35:55,430 --> 00:36:00,680 Es wird ein zunächst etwas öffnen unheimlich aussehende zweiten Anschluss window-- 815 00:36:00,680 --> 00:36:02,679 Remote-Debugging von Wirt, und such-- 816 00:36:02,679 --> 00:36:04,970 und wir werden zurückkommen, was alles, was bedeutet, es dauerte nicht lange. 817 00:36:04,970 --> 00:36:09,020 Aber was wichtig ist für jetzt ist, dass die red dot getroffen wurde, 818 00:36:09,020 --> 00:36:11,735 Der Debugger hat absichtlich Pause execution-- 819 00:36:11,735 --> 00:36:15,560 nicht auf dieser Linie an sich, sondern in der ersten Linie der eigentliche Code in dieser Funktion. 820 00:36:15,560 --> 00:36:18,040 Und deshalb Linie sieben ist nun gelb markiert. 821 00:36:18,040 --> 00:36:20,550 >> Und jetzt wir einen Blick lassen an der rechten Seite. 822 00:36:20,550 --> 00:36:27,300 Es sieht aus wie in der Standardeinstellung schön genug ist, hat x, was Wert? 823 00:36:27,300 --> 00:36:27,860 0. 824 00:36:27,860 --> 00:36:29,750 Und y, was Wert? 825 00:36:29,750 --> 00:36:30,410 Null. 826 00:36:30,410 --> 00:36:35,540 Und das ist in dem Sinne zu erwarten daß x und Y-, dass gelbe line-- hat 827 00:36:35,540 --> 00:36:36,770 noch nicht ausgeführt. 828 00:36:36,770 --> 00:36:38,510 So x sollten nicht den Wert 1 haben. 829 00:36:38,510 --> 00:36:41,470 Es könnte einen anderen Wert haben, eine so genannte Garbage-Wert. 830 00:36:41,470 --> 00:36:44,320 Und wir haben das Glück, dass es Null an dieser Stelle, im Wesentlichen. 831 00:36:44,320 --> 00:36:46,400 >> So, jetzt gibt es nur noch wenige Tasten wir brauchen, um Pflege 832 00:36:46,400 --> 00:36:48,100 etwa bei der Fehlersuche in dieser Weise. 833 00:36:48,100 --> 00:36:49,970 Beachten Sie, hier haben wir eine Play-Taste. 834 00:36:49,970 --> 00:36:51,877 Und wenn wir spielen, oder drücken wieder aufzunehmen, das ist nur 835 00:36:51,877 --> 00:36:53,710 gehen zu durchlaufen der Rest des Programms 836 00:36:53,710 --> 00:36:55,300 oder bis er auf einen weiteren Haltepunkt. 837 00:36:55,300 --> 00:36:56,910 Aber ich habe keine andere gesetzt Haltepunkte so ist es nur 838 00:36:56,910 --> 00:36:58,118 gehen, um bis zum Ende ausgeführt. 839 00:36:58,118 --> 00:37:00,280 Diese Art von Niederlagen der Zweck stochern. 840 00:37:00,280 --> 00:37:03,290 >> Anstatt also, sorge ich mich über Diese Symbole auf der rechten Seite. 841 00:37:03,290 --> 00:37:05,360 Und wenn ich den Mauszeiger über ihnen, wie Sie sollten auch 842 00:37:05,360 --> 00:37:07,450 Du kleine tips-- Tooltips angezeigt. 843 00:37:07,450 --> 00:37:09,020 Dieser ist Schritt über. 844 00:37:09,020 --> 00:37:11,290 Nun bedeutet das nicht, skip Die folgende Codezeile. 845 00:37:11,290 --> 00:37:14,840 Das bedeutet nur, ausführen und zum nächsten, um zum nächsten, 846 00:37:14,840 --> 00:37:15,580 zum nächsten. 847 00:37:15,580 --> 00:37:17,610 Mit anderen Worten, über dass Taste kann ich zu Fuß 848 00:37:17,610 --> 00:37:20,390 durch meinen Code einen Schritt zu einer Zeit. 849 00:37:20,390 --> 00:37:21,914 Zeile für Zeile, buchstäblich. 850 00:37:21,914 --> 00:37:23,830 Nun auf der rechten daß, da liegt noch eine 851 00:37:23,830 --> 00:37:25,163 dass wir in nur einem Augenblick zu sehen. 852 00:37:25,163 --> 00:37:27,820 Dies ist die sogenannte Step Into Symbol, das ist 853 00:37:27,820 --> 00:37:30,300 werde mir gestatten Tauch in einer anderen Funktion. 854 00:37:30,300 --> 00:37:31,800 Aber lassen Sie uns das sehen in nur einem Augenblick. 855 00:37:31,800 --> 00:37:33,280 So werde ich Sie auf Schritt über. 856 00:37:33,280 --> 00:37:35,820 Und jetzt bemerken, wie ich klicken diese Taste oben rechts, 857 00:37:35,820 --> 00:37:41,260 halten Sie die Augen etwa unter Local Variablen und sehen, was passiert, um x. 858 00:37:41,260 --> 00:37:44,115 x 1 ist jetzt, da die gelbe Linie ist nun durchgeführt 859 00:37:44,115 --> 00:37:45,840 und wir sind auf die Linie 8 verschoben haben. 860 00:37:45,840 --> 00:37:49,840 Und in nur einem Augenblick y Machen hoffentlich 2. 861 00:37:49,840 --> 00:37:52,330 >> Nun, nichts, was interessant passiert, für ein bisschen. 862 00:37:52,330 --> 00:37:53,390 All dies ist printf. 863 00:37:53,390 --> 00:37:58,010 Und beachten Sie, in meinem sekundären Anschluss Fenster, sehe ich die Ausgabe des Druck def. 864 00:37:58,010 --> 00:38:01,080 Und jetzt habe ich eine machen Entscheidung, den Programmierer. 865 00:38:01,080 --> 00:38:04,360 Ich kann über diese Leitung der Schritt Code, führt es aber nicht 866 00:38:04,360 --> 00:38:06,220 immer neugierig, was drin ist. 867 00:38:06,220 --> 00:38:11,130 Oder ich kann tatsächlich in sie Schritt und im Inneren des Swap selbst zu gehen. 868 00:38:11,130 --> 00:38:12,340 Lassen Sie uns so tun, das letztere. 869 00:38:12,340 --> 00:38:15,550 >> Lassen Sie mich gehen Sie vor und klicken Sie auf nicht vorbei, aber Schritt Step Into. 870 00:38:15,550 --> 00:38:17,300 Unsere, auf einmal die Fensteränderungen 871 00:38:17,300 --> 00:38:19,330 um die erste markieren Codezeile im Swap. 872 00:38:19,330 --> 00:38:20,710 Das ist die Leitung 21. 873 00:38:20,710 --> 00:38:25,220 Und nun, was ist eine Art von funky ist, dass, wenn Sie sich hier über Aussehen, wie erwartet, 874 00:38:25,220 --> 00:38:29,720 ein Komma b 1 bzw. 2. 875 00:38:29,720 --> 00:38:33,840 Warum ist Temp 32.767? 876 00:38:33,840 --> 00:38:36,560 Hinweis darauf, dass Temperatur, ähnlich wie die leere Tasse vor einem Augenblick, 877 00:38:36,560 --> 00:38:38,980 Hier wird in Zeile 21 deklariert. 878 00:38:38,980 --> 00:38:43,390 Warum 32,000- Ich meine, warum ist es ist nur einige seltsame Wert? 879 00:38:43,390 --> 00:38:43,890 Ja? 880 00:38:43,890 --> 00:38:45,190 >> ZIELGRUPPE: Es ist nicht initialisiert. 881 00:38:45,190 --> 00:38:46,940 >> David J. MALAN: Es ist nicht initialisiert. 882 00:38:46,940 --> 00:38:49,370 Also unsere Computer immer hat physischen Speicher. 883 00:38:49,370 --> 00:38:50,544 Es hat immer physischen RAM. 884 00:38:50,544 --> 00:38:52,710 Und es gibt immer Nullen und man ist da drin, oder? 885 00:38:52,710 --> 00:38:54,626 Weil wir mit unseren Computer den ganzen Tag lang, 886 00:38:54,626 --> 00:38:57,210 Sie mit dem CS50 IDE sind oder die Server, den ganzen Tag lang. 887 00:38:57,210 --> 00:39:01,159 So dass RAM entweder hat einige Nullen oder jemand oder einige Nullen und Einsen. 888 00:39:01,159 --> 00:39:02,950 Egal, ob nicht Sie mit ihnen. 889 00:39:02,950 --> 00:39:05,270 Sie können nicht nur blank Räume, in denen Sie Bits möchten. 890 00:39:05,270 --> 00:39:06,850 Sie sind entweder Nullen und Einsen. 891 00:39:06,850 --> 00:39:09,610 >> So stellt sich heraus, dass die Temperatur, weil wir haben es noch nicht initialisiert, 892 00:39:09,610 --> 00:39:14,580 Wir haben diese 32 Bit aber nicht haben beliebigen bekannten Werten initialisiert. 893 00:39:14,580 --> 00:39:18,110 So was auch immer sie waren die meisten kürzlich for-- jene 32 bits-- verwendet 894 00:39:18,110 --> 00:39:23,000 wir sind nur zu sehen, die Artefakte von einigen vorherige Verwendung von diesen besonderen 32 895 00:39:23,000 --> 00:39:23,500 Bit. 896 00:39:23,500 --> 00:39:27,780 Sobald ich auf Step Over obwohl, Puh, wird Temp gehen, um den Wert 1 zu bekommen. 897 00:39:27,780 --> 00:39:31,600 Und wenn ich es wieder tun, a gehen, um den Wert 2 gegeben werden 898 00:39:31,600 --> 00:39:33,830 und dann b Nahmen den Wert 1 angegeben werden. 899 00:39:33,830 --> 00:39:36,390 >> Und was ist schön, jetzt an dieser Punkt in der Geschichte 900 00:39:36,390 --> 00:39:39,750 ist, dass der Debugger zeigt mir, super langsam 901 00:39:39,750 --> 00:39:42,640 in meinem eigenen Tempo, was der Zustand der Swap ist. 902 00:39:42,640 --> 00:39:47,490 Aber beachten Sie an der Spitze hier, Ankündigung dass der Aufruf-Liste tatsächlich 903 00:39:47,490 --> 00:39:49,180 zwei Schichten darauf. 904 00:39:49,180 --> 00:39:53,240 Jetzt ist die eine, die so markiert ist Swap, wenn ich auf der Main klicken Sie stattdessen, 905 00:39:53,240 --> 00:39:57,100 beachten Sie, wie die lokalen Variablen ändern da der Entwickler nur Hop kann 906 00:39:57,100 --> 00:39:59,740 um und in jedem anderen Bereich zu gehen. 907 00:39:59,740 --> 00:40:04,070 Also auch wenn wir tun, all dies arbeiten und richtig Swapping a und b, 908 00:40:04,070 --> 00:40:09,080 wenn ich gehe hin und her zwischen Swap wobei a 2 ist und b 1 und Main, 909 00:40:09,080 --> 00:40:11,851 hat Haupthaupt betroffen? 910 00:40:11,851 --> 00:40:12,350 Nein. 911 00:40:12,350 --> 00:40:13,930 Also, was ist das Mitnehmen hier? 912 00:40:13,930 --> 00:40:18,200 Nun stellt sich heraus, dass jederzeit Aufruf einer Funktion wie Swap, 913 00:40:18,200 --> 00:40:21,600 und Sie Argumente übergeben, was Sie an den Swap-Funktion vorbei sind 914 00:40:21,600 --> 00:40:24,730 in diesem Fall ist eine Kopie dieser Argumente. 915 00:40:24,730 --> 00:40:28,620 So dass, wenn x und y sind jeweils 32 Bits, welche Swap bekommen wird 916 00:40:28,620 --> 00:40:30,760 zwei neue lokale Variablen oder Argumente, 917 00:40:30,760 --> 00:40:34,380 genannt und b-- aber die willkürlich sind Namen colliders-- aber das Muster von Nullen 918 00:40:34,380 --> 00:40:39,520 und Einsen Innenseite a und b aufgereiht identisch mit x und y zu sein 919 00:40:39,520 --> 00:40:42,610 aber sie nicht das sind, Gleiche wie x und y. 920 00:40:42,610 --> 00:40:46,880 >> Es ist, als ob Main hat auf seiner Stück Papier für die Zahl 1 und 2 für X und Y, 921 00:40:46,880 --> 00:40:49,260 und dann, wenn es reicht, dass Stück Papier zu tauschen, 922 00:40:49,260 --> 00:40:51,970 Swap sehr schnell bekommt seine eigene Feder, schreibt 923 00:40:51,970 --> 00:40:56,240 1 und 2 auf einem eigenen Blatt Papier, Hände wieder die ursprüngliche xy zum Haupt 924 00:40:56,240 --> 00:40:58,790 und dann macht seinen eigenen Sache mit a und b. 925 00:40:58,790 --> 00:41:01,940 Und das ist jetzt super wichtig, weil dies hat Auswirkungen nicht-triviale 926 00:41:01,940 --> 00:41:06,260 zum eigentlichen Schreiben richtigen Code weil es scheint, wir nicht tauschen können 927 00:41:06,260 --> 00:41:07,500 zwei Variablen. 928 00:41:07,500 --> 00:41:09,150 >> Ich habe eine richtige Swap Funktion geschrieben. 929 00:41:09,150 --> 00:41:12,770 Wir haben es mit Lauren implementiert eine korrekte Swap-Funktion in der Realität, 930 00:41:12,770 --> 00:41:16,700 aber anscheinend nichts davon Fragen, wenn Sie können nicht wirklich 931 00:41:16,700 --> 00:41:19,530 Swap zwei Werte dauerhaft. 932 00:41:19,530 --> 00:41:21,970 Also müssen wir einen anderen Weg um tatsächlich an dieses zu erhalten, 933 00:41:21,970 --> 00:41:24,472 und wir müssen in der Lage zu sein, tatsächlich dieses Problem zu lösen. 934 00:41:24,472 --> 00:41:27,180 Und es stellt sich out-- und wir kommen zurück zu diesem Bild 935 00:41:27,180 --> 00:41:30,500 vor long-- dies ist eine Art und Weise, Sie können den Arbeitsspeicher Ihres Computers ziehen. 936 00:41:30,500 --> 00:41:31,460 Es ist nur ein Rechteck. 937 00:41:31,460 --> 00:41:32,960 Sie konnten es nicht ziehen Anzahl von Wegen, aber es ist 938 00:41:32,960 --> 00:41:35,740 bequem, es als ein Unentschieden Rechteck aus dem folgenden Grund. 939 00:41:35,740 --> 00:41:40,040 >> Wir werden heute beginnen und darüber hinaus reden über die sogenannten Stack. 940 00:41:40,040 --> 00:41:43,870 Und der Stapel ist nur ein Stück von RAM-- ein Stück memory-- 941 00:41:43,870 --> 00:41:47,100 dass die Funktionen zugreifen um, wenn sie genannt werden. 942 00:41:47,100 --> 00:41:49,800 Und so stellt sich heraus, dass bei Ganz unten in diesem Stapel 943 00:41:49,800 --> 00:41:53,590 ist, wo alle Haupt die lokalen Variablen und org C org V und all das Zeug 944 00:41:53,590 --> 00:41:56,950 gehen, um standardmäßig zu gehen. Und wenn Haupt ruft eine andere Funktion wie Swap, 945 00:41:56,950 --> 00:42:00,330 Nun, das ist Swap gehen zum anderen zu gelangen Schicht der Speicher bis darüber. 946 00:42:00,330 --> 00:42:04,490 >> Und so, nur um Ihnen eine schnelle oberflächliche geben Bild von diesem, wenn ich über hier-- 947 00:42:04,490 --> 00:42:09,450 und lassen Sie mich spiegeln dies auf die Overhead als well-- was wirklich ich habe, 948 00:42:09,450 --> 00:42:12,100 wenn wir uns nur für die unten von diesem Bild für den Moment, 949 00:42:12,100 --> 00:42:15,070 ist, dass, wenn ich ein Programm und Main aufgerufen wird, 950 00:42:15,070 --> 00:42:18,330 Main liegt ein Stück gegeben RAM in meinen Computer, der ist 951 00:42:18,330 --> 00:42:20,060 am Ende der sogenannten Stack. 952 00:42:20,060 --> 00:42:22,143 Und ich werde, es zu zeichnen bewusst als Quadrat. 953 00:42:22,143 --> 00:42:24,540 So ist es wie 32 Bits oder vier Bytes. 954 00:42:24,540 --> 00:42:28,790 Und wenn dieser Hauptfunktion eine Variable x mit einem Wert von 1 955 00:42:28,790 --> 00:42:32,626 und es eine Variable namens hat y den Wert von 2, das ist 956 00:42:32,626 --> 00:42:35,750 wie wenn man diese Splitter der Erinnerung, die Haupt wurde von dem Betriebs gegeben 957 00:42:35,750 --> 00:42:38,850 System und Dividieren es so einrichten, dass die erste lokale Variable geht hier, 958 00:42:38,850 --> 00:42:40,930 die zweite geht man hier, und das ist es. 959 00:42:40,930 --> 00:42:45,590 >> Als Haupt ruft Swap, Swap erhält eine eigene Scheibe Speicher 960 00:42:45,590 --> 00:42:48,280 dass wir wie folgt zu zeichnen von dem Betriebssystem, 961 00:42:48,280 --> 00:42:50,820 und es ist zu haben, ihre eigenen lokalen Variablen auf der Grundlage 962 00:42:50,820 --> 00:42:53,825 auf unserer Umsetzung früher mit lokalen Variablen ein 963 00:42:53,825 --> 00:42:58,010 und b, die ursprünglich erhalten Sie die Werte 1 und 2. 964 00:42:58,010 --> 00:43:00,450 Aber dann, sobald der Swap-Code ausführt, 965 00:43:00,450 --> 00:43:03,760 und Lauren tatsächlich vertauscht die Orangensaft und Milch, was passiert? 966 00:43:03,760 --> 00:43:09,030 Nun, dieses 2 wird zu einem 1, dieses 1 wird zu einem 2 und, nebenbei bemerkt, 967 00:43:09,030 --> 00:43:13,360 gibt es eine temporäre Variable, die Befinden verwendet diese ganze Zeit, die schließlich 968 00:43:13,360 --> 00:43:14,470 geht weg. 969 00:43:14,470 --> 00:43:16,720 Aber es spielt keine Rolle, wie viel Arbeit Sie tun, 970 00:43:16,720 --> 00:43:22,160 In dieser Zeile von-- in diesem Speicherraum, x und y sind völlig unberührt. 971 00:43:22,160 --> 00:43:26,320 >> Also müssen wir einen Weg geben Swap und Funktionen, wie es 972 00:43:26,320 --> 00:43:32,640 Geheimzugang, wenn Sie so wollen, um Funktionen like-- zum Gedächtnis wie x und y. 973 00:43:32,640 --> 00:43:35,110 Werfen wir also einen Blick auf ein Beispiel, das hilft, 974 00:43:35,110 --> 00:43:38,220 wir sehen, genau das, was ist schon geht dieser ganzen Zeit. 975 00:43:38,220 --> 00:43:40,284 Ich werde weitermachen und eröffnen Vergleichen Null. 976 00:43:40,284 --> 00:43:42,200 Und ich werde, um zu schließen unsere Debugger, ich werde 977 00:43:42,200 --> 00:43:44,360 , diese unheimlich aussehende Meldung zu schließen der sagt nur, warten Sie eine Minute, 978 00:43:44,360 --> 00:43:45,800 du bist in der Mitte Debugging. 979 00:43:45,800 --> 00:43:48,383 Ich werde diese Registerkarte, hier verstecken nur um wieder zur Einfachheit zu gehen. 980 00:43:48,383 --> 00:43:50,160 Also keine Sorge, wenn GDB wird getötet. 981 00:43:50,160 --> 00:43:53,910 Das bedeutet nur, dass das Programm wurden zu verlassen, gezielt in diesem Fall, 982 00:43:53,910 --> 00:43:54,820 von mir. 983 00:43:54,820 --> 00:43:57,700 >> Und jetzt vergleichen Null tut dies. 984 00:43:57,700 --> 00:44:00,110 Ich bin mit dem CS50 Bibliothek im Standard-I / O. 985 00:44:00,110 --> 00:44:04,319 Ich habe eine Hauptfunktion, die zum ersten Mal sagt, etwas sagen, und bekommt einen String. 986 00:44:04,319 --> 00:44:06,110 Sagt, dass es dann wieder und bekommt eine andere Zeichenfolge. 987 00:44:06,110 --> 00:44:09,910 Und beachten Sie, dass diese beiden Saiten werden als S und T verbunden. 988 00:44:09,910 --> 00:44:12,910 Und jetzt das Programm vergleichen Zero, ihren Zweck im Leben, 989 00:44:12,910 --> 00:44:15,470 es soll mir sagen, habe ich die gleiche Sache geben? 990 00:44:15,470 --> 00:44:16,910 Und so bin ich zurück gehen, um eine Woche. 991 00:44:16,910 --> 00:44:19,950 Ich bin mit meiner equal equal Betreiber was die Qualität des Bedieners. 992 00:44:19,950 --> 00:44:22,220 Nicht der Zuweisungsoperator, der Gleichheitsoperator. 993 00:44:22,220 --> 00:44:23,890 Ich bin einfach nur den Vergleich s und t. 994 00:44:23,890 --> 00:44:27,470 >> Lassen Sie uns also tatsächlich gehen Sie vor und tun dies. 995 00:44:27,470 --> 00:44:32,680 Und ich werde weitermachen und stellen Sie die Vergleichs Null. 996 00:44:32,680 --> 00:44:35,110 Ich werde ./comparezero zu tun. 997 00:44:35,110 --> 00:44:37,150 Und ich werde gehen voraus und etwas sagen 998 00:44:37,150 --> 00:44:43,450 wie, machen wir mom in Kleinbuchstaben und wie über mom in Großbuchstaben. 999 00:44:43,450 --> 00:44:45,034 Und natürlich habe ich geben verschiedene Dinge. 1000 00:44:45,034 --> 00:44:45,533 Gut. 1001 00:44:45,533 --> 00:44:46,570 Das ist zu erwarten. 1002 00:44:46,570 --> 00:44:47,640 >> Lassen Sie führen Sie es erneut. 1003 00:44:47,640 --> 00:44:49,740 Beide Male tun, Kleinbuchstaben, Kleinbuchstaben. 1004 00:44:49,740 --> 00:44:51,490 Das sieht super gleich zu mir. 1005 00:44:51,490 --> 00:44:52,930 Enter. 1006 00:44:52,930 --> 00:44:53,430 OK. 1007 00:44:53,430 --> 00:44:55,804 Vielleicht ist es nur komisch, weil es ist nicht zu mögen meine Grammatik. 1008 00:44:55,804 --> 00:44:59,930 Also lassen Sie uns einen Kapital MOM, Kapital MOM, identisch. 1009 00:44:59,930 --> 00:45:01,490 Verschiedene Dinge. 1010 00:45:01,490 --> 00:45:03,907 >> Also, warum ist das so? 1011 00:45:03,907 --> 00:45:06,240 Na ja, was eigentlich vor sich geht auf unter der Haube hier? 1012 00:45:06,240 --> 00:45:08,180 Also lassen Sie uns gehen Sie zurück über hier für einen Moment 1013 00:45:08,180 --> 00:45:10,910 und überlegen, was GetString ist tatsächlich tun. 1014 00:45:10,910 --> 00:45:13,385 Wenn Sie GetString aufrufen, das ist eine Funktion, die wir 1015 00:45:13,385 --> 00:45:16,510 selbst geschrieben und es irgendwie bekommt ein Folge von Zeichen von dem Benutzer. 1016 00:45:16,510 --> 00:45:20,280 Und lassen Sie uns davon ausgehen, dass die erste Zeit, die ich nennen GetString, gibt mir, dass 1017 00:45:20,280 --> 00:45:21,930 ein Teil des Speichers, der so aussieht. 1018 00:45:21,930 --> 00:45:26,990 Und wenn ich in Kleinbuchstaben eingegeben m-o-M- und was danach geht es? 1019 00:45:26,990 --> 00:45:28,840 Nur eine schnelle Plausibilitätsprüfung. 1020 00:45:28,840 --> 00:45:29,780 >> Backslash Null. 1021 00:45:29,780 --> 00:45:30,510 Wir wissen das. 1022 00:45:30,510 --> 00:45:32,784 Und daran erinnern, dass wir spielten rund mit Zamila Name 1023 00:45:32,784 --> 00:45:34,950 und ein paar andere Namen Wenn Rob war hier auf der Suche 1024 00:45:34,950 --> 00:45:36,280 auf, was los ist in der Erinnerung. 1025 00:45:36,280 --> 00:45:37,780 Also diese Geschichte ist genau das gleiche. 1026 00:45:37,780 --> 00:45:40,160 Dies ist, was GetString ist zu mir zurückkehren. 1027 00:45:40,160 --> 00:45:44,780 Nun, mein Code vor einem Augenblick gespeichert der Rückgabewert der GetString 1028 00:45:44,780 --> 00:45:47,510 in einer Variablen namens s. 1029 00:45:47,510 --> 00:45:51,390 Und dann das zweite Mal, dass ich es nannte, es in einer Variablen namens t gespeichert. 1030 00:45:51,390 --> 00:45:55,070 >> Also, wenn ich hier übergehen, ich brauche um diese lokalen'variable zeichnen 1031 00:45:55,070 --> 00:45:59,610 und ich bin in der Regel werde zeichnen Sie eine Zeichenfolge als just-- wir werden 1032 00:45:59,610 --> 00:46:02,360 nennen es S- als kleinen Platz hier. 1033 00:46:02,360 --> 00:46:09,760 Und nun, somehow-- wie funktioniert mom gehen innerhalb dieser Variable s? 1034 00:46:09,760 --> 00:46:12,010 Nun, wir müssen zurück zu gehen In den ersten Prinzipien hier. 1035 00:46:12,010 --> 00:46:15,660 Was GetString tatsächlich zurückkehrt? 1036 00:46:15,660 --> 00:46:19,030 >> So stellt sich heraus, dass M-O-M Backslash Null, und eine beliebige Anzahl 1037 00:46:19,030 --> 00:46:22,364 von anderen Saiten im Gedächtnis wie Zamila und Rob oder Andy oder irgendwelche andere, 1038 00:46:22,364 --> 00:46:24,280 Natürlich sind in unserer RAM oder Speicher Computers. 1039 00:46:24,280 --> 00:46:27,760 Und Ihre RAM verfügt like-- Sie ein Gig RAM, zwei GB RAM, 1040 00:46:27,760 --> 00:46:30,860 oder eine Milliarde oder zwei Milliarde Byte, oder vielleicht noch mehr in diesen Tagen. 1041 00:46:30,860 --> 00:46:34,070 Nehmen wir also an, für die heutigen Zwecke, , dass es keine Rolle spielt, wie wir die Nummer 1042 00:46:34,070 --> 00:46:36,640 sie, aber wir können jede Nummer von denen Milliarden oder zwei Milliarden 1043 00:46:36,640 --> 00:46:37,880 oder vier Milliarde Byte. 1044 00:46:37,880 --> 00:46:42,240 >> Und lassen Sie uns einfach sagen, dass beliebig dies ist der erste Biss, zweiten Bissen, 1045 00:46:42,240 --> 00:46:43,380 dritte, vierte. 1046 00:46:43,380 --> 00:46:46,570 Ich bin bewusst nicht mit Null heute aber wir werden darauf zurückkommen. 1047 00:46:46,570 --> 00:46:49,570 Also mit anderen Worten, wenn dies der allererste Mal, dass ich mit dem Programm, 1048 00:46:49,570 --> 00:46:52,715 Ich bin gerade erst das Glück und die erste Biss ist an der Stelle ein, dann zwei 1049 00:46:52,715 --> 00:46:53,590 dann drei als vier. 1050 00:46:53,590 --> 00:46:57,430 Und wenn ich immer zeichnen, Box-Nummer zwei Milliarden würde Weg hierher sein. 1051 00:46:57,430 --> 00:47:02,200 >> So was denken Sie dann, GetString tatsächlich zurückkehrt? 1052 00:47:02,200 --> 00:47:06,010 Es ist nicht der Rückkehr M-O-M umgekehrten Schrägstrich Null an sich, weil das deutlich 1053 00:47:06,010 --> 00:47:08,180 passen nicht in die Box, die ich gezogen habe. 1054 00:47:08,180 --> 00:47:11,210 So was könnte tatsächlich GetString zurückkehren all diese Wochen? 1055 00:47:11,210 --> 00:47:14,410 1056 00:47:14,410 --> 00:47:16,820 Die Antwort ist auf die Pension hier irgendwo. 1057 00:47:16,820 --> 00:47:20,390 Sie können nicht passt M-O-M umgekehrten Schrägstrich Null, so was könnte sinnvoll, anstatt zu machen? 1058 00:47:20,390 --> 00:47:23,424 Wenn Sie musste super klug, setzen auf der sogenannten Ingenieur Hut, 1059 00:47:23,424 --> 00:47:24,340 was können Sie zurückkehren? 1060 00:47:24,340 --> 00:47:27,340 Was ist die geringste Menge an Informationen Sie konnte das immer noch zurückkehren würde 1061 00:47:27,340 --> 00:47:30,610 Lassen Sie M-O-M im Speicher? 1062 00:47:30,610 --> 00:47:31,270 Ja? 1063 00:47:31,270 --> 00:47:31,950 >> ZIELGRUPPE: One. 1064 00:47:31,950 --> 00:47:32,200 >> David J. MALAN: One. 1065 00:47:32,200 --> 00:47:33,021 Und warum man? 1066 00:47:33,021 --> 00:47:35,520 ZIELGRUPPE: Weil es würde sagen, Sie, wo zu gehen [unverständlich]. 1067 00:47:35,520 --> 00:47:38,391 1068 00:47:38,391 --> 00:47:39,390 David J. MALAN: Genau. 1069 00:47:39,390 --> 00:47:44,300 Ich bin gerade dabei, die Adresse zurück der Saite, die ich bekommen. 1070 00:47:44,300 --> 00:47:46,570 Die Adresse in diesem Fall ist die Lage ein. 1071 00:47:46,570 --> 00:47:51,280 Also, was wirklich wird in S- gespeichert und jeder String-Variable so far-- 1072 00:47:51,280 --> 00:47:53,430 hat gerade die Adresse dieser Zeichenfolge. 1073 00:47:53,430 --> 00:47:57,840 >> Inzwischen, wenn ich rufe GetString ein zweites Mal und ich 1074 00:47:57,840 --> 00:48:03,300 Geben Sie in wahrsten Sinne des Wortes die gleiche thing-- M-O-M mit lowercase-- M-O-M 1075 00:48:03,300 --> 00:48:06,200 und ein weiterer umgekehrter Schrägstrich Null, und jetzt vielleicht meine Programms 1076 00:48:06,200 --> 00:48:09,820 seit einiger Zeit läuft so vielleicht dieses 10 ist, ist diese Position 11, 12 ist, 1077 00:48:09,820 --> 00:48:10,700 das ist 13. 1078 00:48:10,700 --> 00:48:13,590 Die Computer mit einer anderen Speicher welchem ​​Grund auch immer. 1079 00:48:13,590 --> 00:48:18,172 Was geht jetzt in meinem zweiten Variable in meinem Programm t? 1080 00:48:18,172 --> 00:48:19,390 10. 1081 00:48:19,390 --> 00:48:20,050 Genau. 1082 00:48:20,050 --> 00:48:23,910 >> Und so, wenn wir auf die Source-Code des Programms 1083 00:48:23,910 --> 00:48:26,550 wo ich einfach versuchen, um die beiden Werte zu vergleichen, 1084 00:48:26,550 --> 00:48:32,180 ist s gleich gleich t, ​​was ist die offensichtliche Menschen Antwort? 1085 00:48:32,180 --> 00:48:34,890 Nur weil kein 1 nicht gleich 10. 1086 00:48:34,890 --> 00:48:36,861 Und so liegt hierin ein Gelegenheit für uns, wirklich 1087 00:48:36,861 --> 00:48:39,610 um nur wieder auf, gehen Sie wieder zuerst Prinzipien und darüber nachdenken, nun ja, 1088 00:48:39,610 --> 00:48:41,110 was los ist unter der Haube? 1089 00:48:41,110 --> 00:48:43,240 Wir haben darüber gesprochen, Bits und Bytes und Gedächtnis, 1090 00:48:43,240 --> 00:48:46,820 aber es ist wirklich nützlich, um zu verstehen, denn wenn man GetString aufrufen, 1091 00:48:46,820 --> 00:48:50,280 auch wenn wir denken, es ist von Rückkehr M-O-M oder String mom 1092 00:48:50,280 --> 00:48:53,120 oder Andy oder Zamila oder dergleichen, technisch 1093 00:48:53,120 --> 00:48:55,510 es ist nur die Adresse der Rückkehr dieser Teil des Speichers. 1094 00:48:55,510 --> 00:48:56,910 >> Aber das ist OK. 1095 00:48:56,910 --> 00:49:00,570 Denn wie weiß ich, wo der String endet? 1096 00:49:00,570 --> 00:49:03,840 Wenn ich nur den Anfang gegeben? 1097 00:49:03,840 --> 00:49:05,380 Nun, der Backslash Null, oder? 1098 00:49:05,380 --> 00:49:08,800 Nur in linearer Zeit, ich kann Drucken Sie mit Print def M-O-M. 1099 00:49:08,800 --> 00:49:11,820 Und sobald ich umgekehrten Schrägstrich Null ist, ist mir egal, wo ich angefangen habe, 1100 00:49:11,820 --> 00:49:14,950 Ich weiß schon implizit wo ich brauche, um zu beenden. 1101 00:49:14,950 --> 00:49:18,700 >> Und so markiert heute die beginning-- und lassen Sie mich dies dramatisch, weil wir 1102 00:49:18,700 --> 00:49:21,800 ging durch eine Menge Ärger zu Holen Sie sich diese hier trainiert wheels-- 1103 00:49:21,800 --> 00:49:29,840 so heute die Stützräder beginnen sich lösen und wir enthüllen least-- 1104 00:49:29,840 --> 00:49:31,373 >> [Applaus] 1105 00:49:31,373 --> 00:49:33,220 1106 00:49:33,220 --> 00:49:36,160 >> Das war auch eine Reise wert heute morgen Ziel, ja? 1107 00:49:36,160 --> 00:49:39,600 So now-- ist, stellt sich aus, nicht so etwas wie String. 1108 00:49:39,600 --> 00:49:41,140 String ist nicht vorhanden. 1109 00:49:41,140 --> 00:49:43,760 Es ist ein Synonym, das wir je hatten Innenseite der CS50-Bibliothek. 1110 00:49:43,760 --> 00:49:48,660 Von nun an werden wir lostelefonieren s und t nicht Strings aber char Sternen. 1111 00:49:48,660 --> 00:49:51,180 Und die char star wir werden necken neben dauerte nicht lange. 1112 00:49:51,180 --> 00:49:53,510 Aber dies bedeutet, dass, selbst wenn wir auch weiterhin 1113 00:49:53,510 --> 00:49:56,180 mit GetString für jetzt, technisch, ich sollte 1114 00:49:56,180 --> 00:49:59,010 sagen char Sterne und Saibling Sterne. 1115 00:49:59,010 --> 00:50:01,720 >> Und es stellt sich heraus, was den Stern wird zu bezeichnen ist etwas, 1116 00:50:01,720 --> 00:50:04,340 genannt ein Zeiger oder eine Adresse. 1117 00:50:04,340 --> 00:50:06,110 Und in der Tat eine teaser für das, was vor uns liegt, 1118 00:50:06,110 --> 00:50:09,760 ist dies 20 Sekunden Clip aus unserem Freund Nick Parlante in Stanford 1119 00:50:09,760 --> 00:50:12,927 , die, vor einiger Zeit, verbringen eine lächerliche Menge an Zeit, 1120 00:50:12,927 --> 00:50:15,010 so gut ich kann sagen, sein Küche oder seinem Keller, 1121 00:50:15,010 --> 00:50:17,140 machen claymation Einführung in die Welt 1122 00:50:17,140 --> 00:50:20,010 ein Charakter namens Binky mit denen wir 1123 00:50:20,010 --> 00:50:22,010 beim nächsten Mal, um Zeiger eingeführt werden. 1124 00:50:22,010 --> 00:50:24,588 So, hier ist eine Vorschau von dem, was noch kommen wird. 1125 00:50:24,588 --> 00:50:26,370 >> [VIDEO PLAYBACK] 1126 00:50:26,370 --> 00:50:27,510 >> -Hey, Binky. 1127 00:50:27,510 --> 00:50:28,260 Aufwachen. 1128 00:50:28,260 --> 00:50:30,672 Es ist Zeit für Zeiger Spaß. 1129 00:50:30,672 --> 00:50:31,616 >> -Was ist das? 1130 00:50:31,616 --> 00:50:33,032 Erfahren Sie mehr über Zeiger? 1131 00:50:33,032 --> 00:50:34,450 Oh, gute sachen. 1132 00:50:34,450 --> 00:50:35,431 >> [END PLAYBACK] 1133 00:50:35,431 --> 00:50:38,055 David J. MALAN: Und in diesem Sinne, werden wir Sie am Mittwoch zu sehen. 1134 00:50:38,055 --> 00:50:47,590 1135 00:50:47,590 --> 00:50:48,090 Gut. 1136 00:50:48,090 --> 00:50:48,740 Wer ist Tanz? 1137 00:50:48,740 --> 00:50:49,240 Komm schon. 1138 00:50:49,240 --> 00:50:50,330 Wer ist Tanz? 1139 00:50:50,330 --> 00:50:51,820 Soll ich es angefangen? 1140 00:50:51,820 --> 00:50:53,770 Ich werde es begann. 1141 00:50:53,770 --> 00:50:54,270 Woooo! 1142 00:50:54,270 --> 00:51:04,070 1143 00:51:04,070 --> 00:51:07,580 >> LAUREN: süß fancy Moses.