1 00:00:00,000 --> 00:00:00,000 2 00:00:00,000 --> 00:00:00,000 [MUSIK SPIELEN] 3 00:00:00,000 --> 00:00:13,950 4 00:00:13,950 --> 00:00:16,240 >> DAVID J. MALAN: Okay, das ist CS50. 5 00:00:16,240 --> 00:00:18,010 Und dies ist ein Woche. 6 00:00:18,010 --> 00:00:22,050 So erinnern daran, dass das letzte Mal in der Woche null, Wir konzentrierten uns auf rechnerische Denken. 7 00:00:22,050 --> 00:00:25,440 Und wir transitioned aus, dass zu Scratch, eine grafische Programmier 8 00:00:25,440 --> 00:00:27,360 Sprache von unseren Freunden bei Media Lab des MIT. 9 00:00:27,360 --> 00:00:31,730 >> Und mit Scratch, haben wir erkunden Ideen wie Funktionen und Bedingungen, 10 00:00:31,730 --> 00:00:35,210 und Schleifen und Variablen und sogar Ereignisse und Themen und vieles mehr. 11 00:00:35,210 --> 00:00:37,880 Und heute werden wir zu weiterhin diese Ideen mit, 12 00:00:37,880 --> 00:00:40,630 und unter ihnen wirklich für sie gewährt, sondern übersetzen 13 00:00:40,630 --> 00:00:44,220 in eine andere Sprache als C. Jetzt bekannt, C ist eine traditionelle Sprache. 14 00:00:44,220 --> 00:00:46,020 Es ist ein niedrigeres Niveau Sprache, wenn man so will. 15 00:00:46,020 --> 00:00:47,300 >> Es ist rein textuellen. 16 00:00:47,300 --> 00:00:49,910 Und so auf den ersten Blick, ist es gehen zu schauen alle eher kryptischen 17 00:00:49,910 --> 00:00:51,430 wenn Sie noch nie programmiert haben. 18 00:00:51,430 --> 00:00:53,530 Wir gehen zu müssen, Semikolons und Klammern, 19 00:00:53,530 --> 00:00:55,150 und geschweiften Klammern und vieles mehr. 20 00:00:55,150 --> 00:00:57,240 Aber erkennen, dass selbst wenn die Syntax 21 00:00:57,240 --> 00:01:00,600 über ein wenig ungewohnt aussehen In den meisten von Ihnen, sehen vorbei, dass. 22 00:01:00,600 --> 00:01:03,220 Und versuchen, die Ideen zu sehen das sind zwar bekannt, 23 00:01:03,220 --> 00:01:06,750 weil hier in der ersten Woche was wir beginnen zu tun zu vergleichen ist, 24 00:01:06,750 --> 00:01:08,980 zunächst, Scratch gegen C. 25 00:01:08,980 --> 00:01:12,350 >> So zum Beispiel daran erinnern, dass, wenn wir das erste unserer Programme umgesetzt 26 00:01:12,350 --> 00:01:16,220 letzte Mal hatten wir einen Block, der aussah, ein wenig so etwas wie this-- wenn 27 00:01:16,220 --> 00:01:19,990 grüne Fahne geklickt haben, und dann hatten wir ein oder mehrere Puzzleteile darunter, 28 00:01:19,990 --> 00:01:22,150 in diesem Fall sagen, hallo Welt. 29 00:01:22,150 --> 00:01:24,870 Also, in der Tat, in Scratch, wenn ich auf diese grüne Fahne 30 00:01:24,870 --> 00:01:27,390 mein Programm laufen zu lassen, so zu sprechen, das sind 31 00:01:27,390 --> 00:01:29,520 die Blöcke, die ausgeführt werden sollen, oder laufen. 32 00:01:29,520 --> 00:01:32,230 Und speziell, Scratch sagte, hallo, Welt. 33 00:01:32,230 --> 00:01:35,377 >> Nun, ich hätte angegeben verschiedene Wörter hier. 34 00:01:35,377 --> 00:01:37,960 Aber wir werden sehen, dass in der Tat viele dieser blocks-- und in der Tat, 35 00:01:37,960 --> 00:01:41,880 in C können viele functions-- sein parametrisiert oder kundenspezifische 36 00:01:41,880 --> 00:01:43,150 verschiedene Dinge zu tun. 37 00:01:43,150 --> 00:01:45,520 In der Tat, in C, wenn wir konvertieren möchten, jetzt, 38 00:01:45,520 --> 00:01:47,567 Dieses Scratch-Programm auf diese andere Sprache, 39 00:01:47,567 --> 00:01:49,650 wir gehen ein zu schreiben wenig so etwas wie dieses. 40 00:01:49,650 --> 00:01:52,540 >> Zugegeben, es ist etwas ungewohnt Syntax es höchstwahrscheinlich, int, 41 00:01:52,540 --> 00:01:54,380 und Klammern und nichtig. 42 00:01:54,380 --> 00:01:57,740 Aber printf-- obwohl Sie würde nur denke, es wäre zu drucken. 43 00:01:57,740 --> 00:02:00,120 Aber ein Druckmittel Druck formatiert, wie wir bald sehen. 44 00:02:00,120 --> 00:02:02,140 Diese buchstäblich druckt auf dem Bildschirm unabhängig 45 00:02:02,140 --> 00:02:05,990 ist innerhalb dieser Klammern, die Natürlich ist in diesem Fall, hallo Welt. 46 00:02:05,990 --> 00:02:09,290 >> Aber Sie werden einige andere bemerken Syntax, einige doppelte Anführungszeichen, 47 00:02:09,290 --> 00:02:11,890 dass die Klammern am Ende, das Semikolon und dergleichen. 48 00:02:11,890 --> 00:02:15,027 Also gibt es ein wenig Overhead, so zu sprechen, sowohl kognitiv 49 00:02:15,027 --> 00:02:17,860 und syntaktisch, dass wir gehen zu haben, bevor lange zu erinnern. 50 00:02:17,860 --> 00:02:20,720 Aber klar, dass mit der Praxis Dies beginnt bei Ihnen zu springen. 51 00:02:20,720 --> 00:02:24,920 >> In der Tat, lassen Sie uns auf, dass ein Schwerpunkt Funktion specifically-- in diesem Fall 52 00:02:24,920 --> 00:02:26,290 sagen hallo Welt. 53 00:02:26,290 --> 00:02:27,560 So heißt die Funktion. 54 00:02:27,560 --> 00:02:31,320 Hallo Welt ist seine Parameter, oder Argument, seine Anpassung. 55 00:02:31,320 --> 00:02:34,320 >> Und die Gleichwertigkeit in C ist nur sein würde diese eine Zeile hier, 56 00:02:34,320 --> 00:02:38,710 wobei printf entspricht, sagen wir, die doppelte Anführungszeichen, hallo 57 00:02:38,710 --> 00:02:41,470 Welt entspricht, natürlich, zu dem, was es in den weißen Kasten ist. 58 00:02:41,470 --> 00:02:45,680 Und der Backslash n, wenn auch ein wenig seltsam abwesend und von Grund auf neu, 59 00:02:45,680 --> 00:02:49,380 einfach wird den Effekt haben wir werden sehen in einem Computer, wie mein Mac oder einem PC, 60 00:02:49,380 --> 00:02:51,660 nur bewegt sich die Cursor in die nächste Zeile. 61 00:02:51,660 --> 00:02:53,970 Es ist wie das Schlagen Geben Sie auf der Tastatur. 62 00:02:53,970 --> 00:02:55,580 >> Also werden wir das noch einmal vor langer sehen. 63 00:02:55,580 --> 00:02:58,640 Aber zunächst wollen wir in diesem einen Blick andere Beispiel im Falle von Schleifen. 64 00:02:58,640 --> 00:03:02,830 Wir hatten diese immer Schleife beim letzten Mal, das war eine Reihe von Puzzle-Stücke 65 00:03:02,830 --> 00:03:05,490 das tat etwas buchstäblich forever-- in diesem Fall 66 00:03:05,490 --> 00:03:08,360 sagen, hallo Welt, hallo Welt, Hallo Welt, hallo Welt. 67 00:03:08,360 --> 00:03:10,350 So ist es eine Endlosschleife von Entwurf. 68 00:03:10,350 --> 00:03:14,580 >> In C, wollen, wenn wir dies umsetzen gleiche Idee, wir könnten einfach das tun. 69 00:03:14,580 --> 00:03:19,570 Dies stimmt zwar, printf hallo world-- jetzt während nur semantisch, Art der 70 00:03:19,570 --> 00:03:23,090 die Idee zaubert tun etwas wieder und wieder, und wieder, 71 00:03:23,090 --> 00:03:23,980 und für wie lange? 72 00:03:23,980 --> 00:03:27,990 Nun, true-- Daran erinnern, dass wahr ist, nur auf oder ein. 73 00:03:27,990 --> 00:03:30,660 >> Und wahr ist, natürlich immer wahr. 74 00:03:30,660 --> 00:03:33,060 Also ist es ein bisschen eine sinnlose Aussage nur zu sagen, wahr. 75 00:03:33,060 --> 00:03:36,890 Aber in der Tat ist dies absichtlich, denn wenn sie wahr ist einfach immer wahr, 76 00:03:36,890 --> 00:03:40,850 als während wahr nur impliziert, wenn auch ein wenig indirekt, 77 00:03:40,850 --> 00:03:44,070 dass die folgenden Zeilen Code zwischen diesen geschweiften Klammern 78 00:03:44,070 --> 00:03:48,320 nur ausführen sollte wieder und wieder, und wieder, und nie wirklich zu stoppen. 79 00:03:48,320 --> 00:03:50,230 >> Aber wenn Sie möchten, dass Ihre Schleife zu stoppen, wie wir 80 00:03:50,230 --> 00:03:54,500 tat das letzte Mal mit so etwas wie dies, wiederholen Sie die folgenden 50-mal, 81 00:03:54,500 --> 00:03:57,700 in C können wir das gleiche tun, was mit ein für loop-- das Stichwort genannt 82 00:03:57,700 --> 00:03:59,330 Sein nicht während, sondern auch für. 83 00:03:59,330 --> 00:04:03,290 Und dann haben wir einige neue Syntax hier, i mit int gleich 0, i weniger als 50, 84 00:04:03,290 --> 00:04:03,880 i ++. 85 00:04:03,880 --> 00:04:05,430 Und wir werden darauf zurückkommen. 86 00:04:05,430 --> 00:04:09,660 Aber das einfach ist, wie würden wir den Satz von Scratch Blöcke übersetzen 87 00:04:09,660 --> 00:04:13,079 auf einen Satz von C Codezeilen. 88 00:04:13,079 --> 00:04:14,450 >> Inzwischen betrachten Variablen. 89 00:04:14,450 --> 00:04:16,540 Und in der Tat, wir haben nur Vor sah man einen Moment. 90 00:04:16,540 --> 00:04:21,220 Und im Fall von Scratch, wenn wir wollte eine Variable zu deklarieren, i genannt 91 00:04:21,220 --> 00:04:24,590 für i ganze Zahl ist, nur eine Nummer, und wir wollen, dass es auf einen Wert zu setzen, 92 00:04:24,590 --> 00:04:28,410 wir würden dieses Orange verwenden Block hier-- gesetzt i auf 0. 93 00:04:28,410 --> 00:04:30,800 >> Und wir werden sehen, heute und darüber hinaus, wie letzte Woche, 94 00:04:30,800 --> 00:04:33,850 Programmierer tun fast immer Start von Null zu zählen, wirklich 95 00:04:33,850 --> 00:04:34,950 vereinbarungs. 96 00:04:34,950 --> 00:04:37,250 Aber auch, weil der Rückruf aus unsere Diskussion von binären, 97 00:04:37,250 --> 00:04:39,990 die kleinste Zahl, die Sie können dar mit einer beliebigen Anzahl von Bits, 98 00:04:39,990 --> 00:04:41,640 wird nur 0 selbst zu sein. 99 00:04:41,640 --> 00:04:45,190 Und so werden wir in der Regel beginnen Initialisierung auch unsere Variablen auf 0. 100 00:04:45,190 --> 00:04:47,710 >> Und in C, das gleiche zu tun, wir gehen int zu sagen 101 00:04:47,710 --> 00:04:50,110 für integer, i nur durch Konvention. 102 00:04:50,110 --> 00:04:53,390 Ich hätte diese Variable mit dem Namen was ich will, genau wie in Scratch. 103 00:04:53,390 --> 00:04:57,770 Und dann gleich 0 nur Abtretungs der Wert 0 aus dem rechten 104 00:04:57,770 --> 00:05:01,319 und legt sie in die Variable oder das Lagerbehälter gibt, auf der linken Seite. 105 00:05:01,319 --> 00:05:04,360 Und das Semikolon als wir see-- und wir haben ein paar dieser bereits-- gesehen 106 00:05:04,360 --> 00:05:06,530 nur bedeutet Ende des Denkens. 107 00:05:06,530 --> 00:05:09,430 Gehen Sie etwas anderes zu tun auf den Linien, die folgen. 108 00:05:09,430 --> 00:05:11,330 >> Nun, was ist Booleschen Ausdrücken? 109 00:05:11,330 --> 00:05:14,320 Daran erinnern, dass in Scratch, diese waren Ausdrücke 110 00:05:14,320 --> 00:05:16,740 , die entweder wahr oder false-- Fragen, 111 00:05:16,740 --> 00:05:18,910 wirklich, die entweder wahr oder falsch sind. 112 00:05:18,910 --> 00:05:21,960 So im Fall von Scratch, könnten wir stellen eine einfache Frage wie diese, 113 00:05:21,960 --> 00:05:24,586 i kleiner als 50? 114 00:05:24,586 --> 00:05:25,710 So i, wieder eine ganze Zahl ist. 115 00:05:25,710 --> 00:05:27,210 Vielleicht verwenden wir es in einem Scratch-Programm 116 00:05:27,210 --> 00:05:29,310 Spur einer Partitur zu halten oder etwas ähnliches. 117 00:05:29,310 --> 00:05:33,810 Also diese Syntax hier in Scratch bedeutet nur, i kleiner als 50? 118 00:05:33,810 --> 00:05:37,330 Nun, zum Glück, ist etwas in C. einfach und zu übersetzen, 119 00:05:37,330 --> 00:05:41,780 dies würden wir einfach sagen, dass ich weniger als 50, über den bekannten Schlüssel 120 00:05:41,780 --> 00:05:42,850 auf Ihrer Tastatur. 121 00:05:42,850 --> 00:05:45,141 >> Inzwischen wollte, wenn Sie sagen etwas allgemeiner, 122 00:05:45,141 --> 00:05:49,890 wie, na ja, ist x kleiner als y ist, wobei jeder von x und y sind Variablen selbst? 123 00:05:49,890 --> 00:05:52,280 Wir können das gleiche tun, in C, so lange, wie wir haben 124 00:05:52,280 --> 00:05:53,942 diese Variablen bereits erstellt. 125 00:05:53,942 --> 00:05:55,650 Und wir werden sehen, wie man tun, dass vor langer. 126 00:05:55,650 --> 00:05:58,590 Wir würden einfach sagen, x kleiner als y. 127 00:05:58,590 --> 00:06:00,530 >> Also Sie beginnen zu sehen einige Ähnlichkeiten. 128 00:06:00,530 --> 00:06:03,490 Und die Leute, die aus Scratch waren sicher 129 00:06:03,490 --> 00:06:05,250 von einigen dieser grundlegenden Ideen inspiriert. 130 00:06:05,250 --> 00:06:10,350 Und Sie werden sehen, diese Art von Syntax in vielen languages-- 131 00:06:10,350 --> 00:06:12,160 Kratzt nicht nur, nicht nur C, aber Python, 132 00:06:12,160 --> 00:06:14,790 und JavaScript, und andere Sprachen noch. 133 00:06:14,790 --> 00:06:18,270 >> Nehmen wir ein anderes Konstrukt betrachten von C, der Begriff einer Bedingung, 134 00:06:18,270 --> 00:06:20,370 tun bedingt etwas. 135 00:06:20,370 --> 00:06:22,720 Wenn etwas wahr ist, dies zu tun. 136 00:06:22,720 --> 00:06:24,457 Wenn etwas anderes wahr ist, tun. 137 00:06:24,457 --> 00:06:27,040 Es ist eine Art der Programmierung Äquivalent einer Gabel in der Straße. 138 00:06:27,040 --> 00:06:29,730 Vielleicht ist es ein Zwei-Wege-Gabel, ein Dreiwegegabel oder mehr. 139 00:06:29,730 --> 00:06:32,800 Und in Scratch, könnten wir haben so etwas wie dieses gesehen. 140 00:06:32,800 --> 00:06:34,010 >> So ist dieses ein großes. 141 00:06:34,010 --> 00:06:36,750 Aber betrachten Sie die relative Einfachheit der Logik. 142 00:06:36,750 --> 00:06:44,010 Wenn x kleiner als y ist, dann sagen x weniger als y, else if x größer als y ist, 143 00:06:44,010 --> 00:06:46,230 dann sagen x größer als y ist. 144 00:06:46,230 --> 00:06:48,300 Und dann logisch, wenn Sie denken Sie zurück an Scratch 145 00:06:48,300 --> 00:06:52,610 oder einfach nur deine eigene menschliche Intuition, gut, wenn x nicht größer als y, und x 146 00:06:52,610 --> 00:06:57,000 nicht kleiner ist als y, dann natürlich x wird gleich y sein. 147 00:06:57,000 --> 00:06:59,690 Also in diesem Fall, durch Verschachtelung diese Scratch Blöcke, 148 00:06:59,690 --> 00:07:02,580 können wir eine drei erreichen Weg Gabel in der Straße? 149 00:07:02,580 --> 00:07:04,980 >> Inzwischen, wenn wir wollen tun, dass in C, es wohl 150 00:07:04,980 --> 00:07:08,420 sieht ein wenig simpler-- zumindest sobald Sie mit der Syntax vertraut machen. 151 00:07:08,420 --> 00:07:12,050 Wenn x kleiner als y, printf x kleiner ist als y. 152 00:07:12,050 --> 00:07:16,140 Sonst, wenn x größer ist als y, printf x größer ist als y. 153 00:07:16,140 --> 00:07:21,210 Else printf x gleich Y- und, mit denen Backslash wieder, endet kurz 154 00:07:21,210 --> 00:07:24,160 für die neuen Linien, so dass, wenn Sie tatsächlich lief diese Art von Programm 155 00:07:24,160 --> 00:07:25,940 es wäre einfach bewegen Ihr Cursor schließlich 156 00:07:25,940 --> 00:07:28,100 in die nächste Zeile des Bildschirms. 157 00:07:28,100 --> 00:07:31,270 >> Nun, mittlerweile Scratch hatte andere nur anspruchsvollere Funktionen, 158 00:07:31,270 --> 00:07:34,320 von denen einige wir werden bewegen zunächst über die Welt von C. 159 00:07:34,320 --> 00:07:37,010 Und einer von ihnen war eine Liste in Scratch genannt. 160 00:07:37,010 --> 00:07:39,100 Und das war eine besondere Art der Variable, 161 00:07:39,100 --> 00:07:42,840 erlaubt Ihnen, mehrere Dinge zu speichern in sie Rücken an Rücken an Rücken an Rücken. 162 00:07:42,840 --> 00:07:45,540 >> In C, hat es nicht Listen, per se, sondern etwas, 163 00:07:45,540 --> 00:07:48,090 , die allgemeiner Arrays genannt, obwohl wir 164 00:07:48,090 --> 00:07:50,590 später kommen in diesem Semester wieder um den Blick auf etwas 165 00:07:50,590 --> 00:07:52,780 rief eine Liste, oder wirklich eine verknüpfte Liste. 166 00:07:52,780 --> 00:07:55,510 Aber jetzt, die nächste Äquivalent in C für uns 167 00:07:55,510 --> 00:07:57,345 wird etwas sein ein Array bezeichnet. 168 00:07:57,345 --> 00:07:59,740 Und eine Anordnung ist einfach ein spezielle Art von variablen 169 00:07:59,740 --> 00:08:03,160 das es Ihnen ermöglicht, Daten zu speichern Rücken an Rücken an Rücken, an Rücken. 170 00:08:03,160 --> 00:08:05,840 >> Und in der Tat, in Scratch, wenn wir wollten zugreifen 171 00:08:05,840 --> 00:08:09,030 das erste Element eines Arrays oder ein list-- und ich werde es nennen, 172 00:08:09,030 --> 00:08:13,600 Vereinbarungsgemäß argv, Argument Vektor, sondern mehr auf, dass vor langer. 173 00:08:13,600 --> 00:08:17,090 Wenn ich will, auf das erste Element zu erhalten von argv, in der Welt von Scratch 174 00:08:17,090 --> 00:08:20,930 Sie tun eigentlich typisch Start von 1 zu zählen. 175 00:08:20,930 --> 00:08:22,850 >> Und so könnte ich Artikel 1 von argv bekommen. 176 00:08:22,850 --> 00:08:26,310 Das ist nur, wie MIT umgesetzt der Begriff der Listen. 177 00:08:26,310 --> 00:08:29,860 Aber in C, ich werde mehr einfach nur sagen, argv, 178 00:08:29,860 --> 00:08:32,758 die wiederum ist der Name meiner list-- oder klar, ein Array sein. 179 00:08:32,758 --> 00:08:34,549 Und wenn ich will, die erste Elemente, ich werde 180 00:08:34,549 --> 00:08:37,890 eckigen Klammern zu verwenden, die Sie vielleicht nicht oft unter einer Tastatur verwendet. 181 00:08:37,890 --> 00:08:40,150 >> Aber 0 bedeutet nur, hol mich die erste. 182 00:08:40,150 --> 00:08:42,160 So gelegentlich und als Zeit vergeht, wir gehen 183 00:08:42,160 --> 00:08:44,570 zu beginnen, diese Dichotomien zu sehen zwischen Scratch und C, 184 00:08:44,570 --> 00:08:46,070 wobei Scratch verwendet ein. 185 00:08:46,070 --> 00:08:47,670 Wir in C verwenden 0 hier. 186 00:08:47,670 --> 00:08:49,420 Aber Sie werden schnell sehen, wenn Sie verstehen, 187 00:08:49,420 --> 00:08:52,920 die Fundamente jeder Sprache, dass diese Dinge beginnen umso mehr zu bekommen 188 00:08:52,920 --> 00:08:56,860 vertraut durch die Praxis und Praxis. 189 00:08:56,860 --> 00:08:59,700 >> Also schauen wir uns eigentlich jetzt in einem Programm. 190 00:08:59,700 --> 00:09:04,031 Hier ist der erste unserer C Quellcode für vollständige Programme. 191 00:09:04,031 --> 00:09:06,280 Und das Programm wir gehen zu bieten für die Prüfung 192 00:09:06,280 --> 00:09:09,340 ist derjenige, der ist gleichwertig zu diesem früheren Scratch Stück. 193 00:09:09,340 --> 00:09:13,210 >> Also hier haben wir, was wohl die einfachste C-Programm 194 00:09:13,210 --> 00:09:15,410 Sie können schreiben, dass tatsächlich etwas tut. 195 00:09:15,410 --> 00:09:18,250 Jetzt werden wir vorbei schauen, Denn jetzt hat enthalten, 196 00:09:18,250 --> 00:09:21,190 Standard io.h, und diese Winkel Klammern und int, und nichtig, 197 00:09:21,190 --> 00:09:22,840 und die geschweiften Klammern und dergleichen. 198 00:09:22,840 --> 00:09:25,390 >> Und lassen Sie uns gerade konzentrieren sich auf was zumindest intuitiv, 199 00:09:25,390 --> 00:09:26,860 könnte bereits bei Ihnen herausspringen. 200 00:09:26,860 --> 00:09:30,300 In der Tat, Haupt, das tue ich nicht wissen müssen, was das ist, 201 00:09:30,300 --> 00:09:34,580 aber ähnlich wie Scratch hatte, dass, wenn grüne Fahne geklickt Puzzleteil, 202 00:09:34,580 --> 00:09:39,070 so tut C als Programmiersprache haben einen Haupt Stück Code, 203 00:09:39,070 --> 00:09:43,380 wird standardmäßig ausgeführt. Und in der Tat, es wird buchstäblich Haupt genannt zu werden. 204 00:09:43,380 --> 00:09:44,720 >> So wichtigsten ist eine Funktion. 205 00:09:44,720 --> 00:09:48,720 Und es ist eine spezielle Funktion, die es gibt in C, dass, wenn Sie ein Programm ausführen, 206 00:09:48,720 --> 00:09:52,720 es ist Haupt, die durch laufen wird Standard. In der Welt der Scratch, 207 00:09:52,720 --> 00:09:56,970 es war in der Regel, wenn grüne Fahne geklickt haben, die standardmäßig ausgeführt wurde. 208 00:09:56,970 --> 00:10:01,130 >> Inzwischen haben wir schon gesehen, printf oder Druck formatiert, das ist 209 00:10:01,130 --> 00:10:05,620 wird eine Funktion sein, die mit kommt C, zusammen mit einer ganzen Reihe von anderen, 210 00:10:05,620 --> 00:10:10,140 dass von Zeit und Zeit um wieder zu tun, genau 211 00:10:10,140 --> 00:10:12,450 wie der Name schon sagt, drucken Sie etwas. 212 00:10:12,450 --> 00:10:13,500 Was wollen wir zu drucken? 213 00:10:13,500 --> 00:10:15,770 Nun, wir werden sehen, dass durch Einschließen Zeichen 214 00:10:15,770 --> 00:10:18,680 wie these-- Hallo Welt, Backslash n in doppelte Anführungszeichen, 215 00:10:18,680 --> 00:10:23,040 wir können printf genau sagen, was auf dem Bildschirm zu drucken. 216 00:10:23,040 --> 00:10:26,430 >> Aber um das zu tun dass wir leider 217 00:10:26,430 --> 00:10:30,010 brauchen etwas zu nehmen, die ist schon kryptisch für uns Menschen, 218 00:10:30,010 --> 00:10:34,510 aber zumindest ist es etwas readable-- scharf sind, standard io.h, int, 219 00:10:34,510 --> 00:10:39,340 Haupt, lücke, printf, die alle die magischen Beschwörungen wir sahen nur auf dem Bildschirm. 220 00:10:39,340 --> 00:10:42,470 Aber wir haben tatsächlich zu gehen noch mehr obskure. 221 00:10:42,470 --> 00:10:47,140 Wir müssen zuerst den Code zu übersetzen dass wir in den Maschinencode schreiben. 222 00:10:47,140 --> 00:10:51,370 Und erinnern aus der vergangenen Woche, dass die Maschinen, zumindest wissen die, die wir hier, 223 00:10:51,370 --> 00:10:54,450 erst am Ende des Tages verstehen Nullen und Einsen. 224 00:10:54,450 --> 00:10:58,100 >> Und mein Gott, wenn wir diese zu schreiben hatte Nullen und Einsen, um tatsächlich Programm, 225 00:10:58,100 --> 00:11:01,260 es wäre sehr, sehr schnell nehmen Sie den Spaß aus allem. 226 00:11:01,260 --> 00:11:05,150 Aber es stellt sich heraus, pro letzte Woche, daß diese Muster von Nullen und Einsen 227 00:11:05,150 --> 00:11:06,400 nur haben eine besondere Bedeutung. 228 00:11:06,400 --> 00:11:08,500 In bestimmten Zusammenhängen sie könnten Zahlen bedeuten. 229 00:11:08,500 --> 00:11:11,840 >> In einigen Kontexten könnten sie bedeuten Buchstaben oder Farben, oder eine beliebige Anzahl 230 00:11:11,840 --> 00:11:14,710 von anderen Abstraktionen dort auf. 231 00:11:14,710 --> 00:11:18,450 Aber so, wie Ihr Computer eine CPU, Central Processing Unit, 232 00:11:18,450 --> 00:11:20,390 oder das Gehirn innerhalb des Computers. 233 00:11:20,390 --> 00:11:22,240 Es ist in der Regel Intel nach innen, denn das ist, 234 00:11:22,240 --> 00:11:24,900 eines der größten Unternehmen das macht CPUs für Computer. 235 00:11:24,900 --> 00:11:28,910 >> Nun, Intel-CPUs und andere einfach im voraus entschieden 236 00:11:28,910 --> 00:11:33,970 dass bestimmte Muster von Nullen und diejenigen sind bestimmte Dinge bedeuten. 237 00:11:33,970 --> 00:11:37,040 Bestimmte Muster von Nullen und Einsen bedeuten wird, drucken Sie diese auf dem Bildschirm, 238 00:11:37,040 --> 00:11:39,710 oder fügen Sie diese beiden Zahlen, oder subtrahieren diese beiden Zahlen, 239 00:11:39,710 --> 00:11:43,310 oder dieses Stück von Daten bewegen sich von mein Speicher des Computers hier, 240 00:11:43,310 --> 00:11:47,870 oder eine beliebige Anzahl anderer sehr niedrigen Niveau, aber letztlich nützlich, Operationen. 241 00:11:47,870 --> 00:11:53,022 Aber, Gott sei Dank, wir Menschen nicht gehen brauchen diese Detailebene zu kennen. 242 00:11:53,022 --> 00:11:56,230 Tatsächlich gerade wie beim letzten Mal, wo wir abstrahiert wieder und wieder und wieder, 243 00:11:56,230 --> 00:11:58,930 Gebäude von einem sehr niedrigen Niveau Primitiven, wie Nullen und Einsen 244 00:11:58,930 --> 00:12:01,160 auf höherer Ebene Konzepte wie Zahlen und Buchstaben, 245 00:12:01,160 --> 00:12:04,330 und Farben, und vieles mehr, so können wir als Programmierer 246 00:12:04,330 --> 00:12:07,080 stehen auf den Schultern von andere, die vor uns gekommen sind, 247 00:12:07,080 --> 00:12:11,260 und Software verwenden, die andere Menschen, bevor us-- geschrieben 248 00:12:11,260 --> 00:12:14,340 nämlich Programme Compiler genannt. 249 00:12:14,340 --> 00:12:17,770 >> C ist eine Sprache, wird in der Regel kompiliert, 250 00:12:17,770 --> 00:12:22,130 was bedeutet, umgewandelt aus Quellcode in Maschinencode. 251 00:12:22,130 --> 00:12:25,230 Insbesondere, was das bedeutet wenn Sie, dass ich Ihre Quelle bekam 252 00:12:25,230 --> 00:12:29,530 Code, den Sie selbst schreiben, wie wir bald wird in nur einem Augenblick auf dem Bildschirm, 253 00:12:29,530 --> 00:12:33,140 und Sie wollen es zu konvertieren schließlich zur Maschine code-- 254 00:12:33,140 --> 00:12:37,100 diese Nullen und Einsen, dass nur Ihren Mac oder PC 255 00:12:37,100 --> 00:12:41,230 understands-- Sie haben eine erste bekam füttern diesen Quellcode in als 256 00:12:41,230 --> 00:12:46,340 Eingang mit einer speziellen Programm namens einen Compiler, 257 00:12:46,340 --> 00:12:48,974 der Ausgang von dem wir sehen werden ist Maschinencode. 258 00:12:48,974 --> 00:12:51,890 Und in der Tat, wir das letzte Mal gesprochen über, wirklich, am Ende des Tages, 259 00:12:51,890 --> 00:12:52,610 Probleme lösen. 260 00:12:52,610 --> 00:12:53,360 Sie haben Eingänge bekam. 261 00:12:53,360 --> 00:12:54,318 Und Sie haben Ausgänge bekam. 262 00:12:54,318 --> 00:12:56,560 Und Sie haben eine Art bekam der Algorithmus in der Mitte. 263 00:12:56,560 --> 00:12:59,830 >> Algorithmen können sicher sein, in Software implementiert ist, 264 00:12:59,830 --> 00:13:02,900 wie wir sahen, mit Pseudo-Code der letzten Woche und wie wir mit den tatsächlichen Code zu sehen 265 00:13:02,900 --> 00:13:03,490 diese Woche. 266 00:13:03,490 --> 00:13:06,430 Und so ein Compiler wirklich nur hat eine Reihe von Algorithmen innerhalb 267 00:13:06,430 --> 00:13:10,060 davon, die wissen, wie man die spezielle Schlüsselwörter konvertieren, 268 00:13:10,060 --> 00:13:12,180 wie Haupt- und printf, und andere, die wir gerade 269 00:13:12,180 --> 00:13:17,620 Säge in die Muster von Nullen und Diejenigen, die Intel im Inneren und anderen CPUs 270 00:13:17,620 --> 00:13:20,020 tatsächlich versteht. 271 00:13:20,020 --> 00:13:22,460 Also, wie machen wir das? 272 00:13:22,460 --> 00:13:24,470 Wo bekommen wir einen Compiler? 273 00:13:24,470 --> 00:13:26,400 >> Die meisten von uns haben hier einen Mac oder einen PC. 274 00:13:26,400 --> 00:13:29,152 Und Sie sind mit Mac OS oder Windows oder Linux oder Solaris, 275 00:13:29,152 --> 00:13:30,860 oder eine beliebige Anzahl anderer Betriebssysteme. 276 00:13:30,860 --> 00:13:32,568 Und in der Tat konnten wir gehen auf die Bahn 277 00:13:32,568 --> 00:13:35,710 und laden Sie eine Compiler für Ihren Mac oder PC 278 00:13:35,710 --> 00:13:37,360 für das jeweilige Betriebssystem. 279 00:13:37,360 --> 00:13:39,617 Aber wir würden alle auf sein verschiedene Seiten, sozusagen. 280 00:13:39,617 --> 00:13:41,450 Wir hätten leicht verschiedene Konfigurationen. 281 00:13:41,450 --> 00:13:43,210 Und es würde nicht alle die gleiche Arbeit. 282 00:13:43,210 --> 00:13:45,280 Und in der Tat, in diesen Tagen viele von uns nicht in Anspruch genommen 283 00:13:45,280 --> 00:13:47,516 Software, die nur auf unsere Laptops läuft. 284 00:13:47,516 --> 00:13:49,390 Stattdessen verwenden wir etwas wie ein Browser, 285 00:13:49,390 --> 00:13:52,930 ermöglicht es uns, für den Zugriff auf Web-basierte Anwendungen in der Cloud. 286 00:13:52,930 --> 00:13:55,630 Und noch in diesem Semester, wir werden genau das tun. 287 00:13:55,630 --> 00:13:59,660 Wir schreiben Anwendungen oder Software code-- nicht C, 288 00:13:59,660 --> 00:14:02,860 aber auch andere Sprachen wie Python und JavaScript--, die in der Cloud laufen. 289 00:14:02,860 --> 00:14:05,860 >> Und um das zu tun, werden wir uns während des Semesters 290 00:14:05,860 --> 00:14:11,890 tatsächlich eine Cloud-basierte verwenden Umwelt als CS50 IDE bekannt. 291 00:14:11,890 --> 00:14:16,030 Dies ist eine Web-basierte Programmierung Umwelt oder integrierte Entwicklungs 292 00:14:16,030 --> 00:14:20,610 Umwelt, IDE-, ist, dass oben auf einige gebaut Open-Source-Software 9 Wolke genannt. 293 00:14:20,610 --> 00:14:22,966 Und wir haben einige pädagogische gemacht Vereinfachungen es 294 00:14:22,966 --> 00:14:25,840 um bestimmte Funktionen verstecken die ersten Wochen, die wir nicht brauchen, 295 00:14:25,840 --> 00:14:27,770 nach dem Sie offenbaren sie und tun die meisten 296 00:14:27,770 --> 00:14:29,400 was Sie wollen mit der Umwelt. 297 00:14:29,400 --> 00:14:32,470 >> Und erlaubt es uns, auch zu vorinstallieren bestimmte Software. 298 00:14:32,470 --> 00:14:35,330 Dinge wie eine so genannte CS50 Bibliothek, die wir werden bald sehen, 299 00:14:35,330 --> 00:14:39,210 mit einigen bietet uns in C zusätzliche Funktionalität. 300 00:14:39,210 --> 00:14:44,392 Also, wenn Sie gehen, schließlich CS50.io, Sie werden sich einloggen gefragt, 301 00:14:44,392 --> 00:14:46,350 und wenn Sie das tun, und erstellen ein Konto kostenlos, 302 00:14:46,350 --> 00:14:52,150 Sie werden in der Lage sein, ein für den Zugriff auf Umgebung, die ganz so aussieht. 303 00:14:52,150 --> 00:14:53,760 >> Nun, dies ist im Standardmodus. 304 00:14:53,760 --> 00:14:55,650 Alles ist schön und hell auf dem Bildschirm. 305 00:14:55,650 --> 00:14:57,941 Viele von uns haben eine Gewohnheit, Arbeiten am CS50 Stück, das ist 306 00:14:57,941 --> 00:14:59,150 ziemlich spät in die Nacht. 307 00:14:59,150 --> 00:15:02,400 Und so könnten einige von Ihnen es vorziehen, schalten Sie ihn in den Nachtmodus, sozusagen. 308 00:15:02,400 --> 00:15:05,550 >> Aber letztlich, was du bist gehen, um zu sehen in CS50 IDE 309 00:15:05,550 --> 00:15:08,340 ist drei verschiedene areas-- ein Bereich auf der linken Seite, wo 310 00:15:08,340 --> 00:15:12,604 Ihre Dateien werden in der zu sein Wolke, ein Bereich auf der oberen rechten 311 00:15:12,604 --> 00:15:14,270 in dem der Code wird editierbar sein. 312 00:15:14,270 --> 00:15:16,650 Sie werden in der Lage zu öffnen einzelnen Registerkarten für jedes Programm 313 00:15:16,650 --> 00:15:19,670 dass Sie in diesem Semester schreiben innen dieser oberen rechten Ecke. 314 00:15:19,670 --> 00:15:23,070 Und dann die meisten arcanely, und doch kraftvoll, 315 00:15:23,070 --> 00:15:26,610 wird diese Sache auf die zu sein Boden als Terminal-Fenster bekannt. 316 00:15:26,610 --> 00:15:29,450 >> Dies ist eine alte Schule Command Line Interface, 317 00:15:29,450 --> 00:15:32,240 oder CLI, das erlaubt Sie solche Befehle 318 00:15:32,240 --> 00:15:35,260 auf der computer-- in diesem Fall der Computer in der cloud-- 319 00:15:35,260 --> 00:15:39,090 Dinge zu tun, wie Sie Ihren Code kompilieren von Quellcode in Maschinencode, 320 00:15:39,090 --> 00:15:43,600 laufen Ihre Programme, oder starten Sie Ihre Web-Server oder die Datenbank zugreifen zu können, 321 00:15:43,600 --> 00:15:47,454 und jede Anzahl von anderen Techniken dass wir schon bald zu verwenden beginnen. 322 00:15:47,454 --> 00:15:49,370 Aber um dorthin zu kommen, wir sind tatsächlich zu haben 323 00:15:49,370 --> 00:15:51,240 online zu gehen und zu spielen beginnen. 324 00:15:51,240 --> 00:15:54,399 Und um das zu tun, lassen Sie uns zuerst beginnen mit dem Haupt bastelt, 325 00:15:54,399 --> 00:15:55,940 und schreiben Sie den Hauptteil eines Programms. 326 00:15:55,940 --> 00:15:59,170 Und lassen Sie uns diese Funktion nutzen printf, die wir früher verwendet, 327 00:15:59,170 --> 00:16:01,050 einfach etwas zu sagen. 328 00:16:01,050 --> 00:16:04,910 >> Hier bin ich also schon innerhalb von CS50 IDE. 329 00:16:04,910 --> 00:16:05,930 Ich habe im Voraus angemeldet. 330 00:16:05,930 --> 00:16:07,360 Und ich abgeschirmt voll das Fenster. 331 00:16:07,360 --> 00:16:09,670 Und so, schließlich, Sie Auch in den kommenden Probleme 332 00:16:09,670 --> 00:16:12,960 folgen ähnliche Schritte, die liefert die Online-Dokumentation. 333 00:16:12,960 --> 00:16:16,360 So brauchen Sie nicht zu befürchten jede noch so kleine technische Schritt zu absorbieren 334 00:16:16,360 --> 00:16:17,730 dass ich heute hier. 335 00:16:17,730 --> 00:16:19,222 >> Aber Sie werden einen Bildschirm wie diese zu erhalten. 336 00:16:19,222 --> 00:16:20,430 Ich bin zufällig im Nachtmodus zu sein. 337 00:16:20,430 --> 00:16:22,944 Und Sie können alles aufhellen up in der Nacht-Modus zu deaktivieren. 338 00:16:22,944 --> 00:16:24,860 Und am Ende der Tag, Sie gehen zu sehen 339 00:16:24,860 --> 00:16:30,090 Diese drei Haupt areas-- der Datei Browser auf der linken Seite, die Code-Tabs bis oben, 340 00:16:30,090 --> 00:16:32,430 und das Terminal-Fenster am unteren Rand. 341 00:16:32,430 --> 00:16:34,890 >> Lassen Sie mich gehen Sie vor und mein erstes Programm schreiben. 342 00:16:34,890 --> 00:16:42,300 Ich werde präventiv zu gehen Sie zu Datei, Speichern und meine Datei als hello.c speichern. 343 00:16:42,300 --> 00:16:46,850 Tatsächlich durch Konvention, jedes Programm, wir schreiben, das ist in der Programmiersprache C geschrieben 344 00:16:46,850 --> 00:16:49,739 sollte etwas genannt werden Punkt c, durch Konvention. 345 00:16:49,739 --> 00:16:53,030 Also werde ich es zu nennen hello.c, weil Ich möchte nur sagen, hallo an die Welt. 346 00:16:53,030 --> 00:16:54,820 Jetzt werde ich vergrößern und klicken Sie auf Speichern. 347 00:16:54,820 --> 00:16:58,180 Und alles, was ich jetzt hier haben, ist eine Registerkarte in dem ich das Schreiben von Code beginnen. 348 00:16:58,180 --> 00:16:59,490 >> Das wird nicht kompilieren. 349 00:16:59,490 --> 00:17:00,300 Das bedeutet nichts. 350 00:17:00,300 --> 00:17:02,750 Und so, auch wenn ich umgewandelt dies zu Nullen und Einsen, 351 00:17:02,750 --> 00:17:05,390 die CPU ist zu haben, keine Idee, was los ist um. 352 00:17:05,390 --> 00:17:14,170 Aber wenn ich Zeilen schreiben, die passen mit conventions-- C Wesens C, 353 00:17:14,170 --> 00:17:20,150 wieder, language-- dies mit Syntax wie dies, printf hallo world-- und ich habe 354 00:17:20,150 --> 00:17:22,210 bekommen komfortabel mit tun dies im Laufe der Zeit. 355 00:17:22,210 --> 00:17:24,510 Also ich glaube nicht, dass ich gemacht Druckfehler. 356 00:17:24,510 --> 00:17:27,910 >> Aber immer zuerst der sehr wenn Sie dies tun, werden Sie. 357 00:17:27,910 --> 00:17:31,090 Und was ich vielleicht tun sehr auch nicht das erste Mal für Sie arbeiten. 358 00:17:31,090 --> 00:17:33,610 Und das ist völlig in Ordnung, weil Sie jetzt 359 00:17:33,610 --> 00:17:37,662 könnte nur eine ganze Menge Neuheit zu sehen, aber im Laufe der Zeit, wenn Sie vertraut 360 00:17:37,662 --> 00:17:39,870 mit diesem Umfeld und diese Sprache, und andere, 361 00:17:39,870 --> 00:17:42,370 Sie beginnen, Dinge zu sehen, dass entweder richtig oder falsch sind. 362 00:17:42,370 --> 00:17:44,369 >> Und das ist es, was die Lehre Stipendiaten und natürlich 363 00:17:44,369 --> 00:17:48,780 Assistenten bekommen im Laufe der Zeit so gut ist Fehler oder Fehler in Ihrem Code Spek. 364 00:17:48,780 --> 00:17:52,110 Aber ich behaupten, dass es in diesem Code sind keine Fehler. 365 00:17:52,110 --> 00:17:53,990 Deshalb möchte ich jetzt dieses Programm auszuführen. 366 00:17:53,990 --> 00:17:57,440 >> Jetzt auf meinem eigenen Mac oder PC, ich bin in die Gewohnheit der Doppelklick-Icons 367 00:17:57,440 --> 00:17:59,350 wenn ich will einige Programm auszuführen. 368 00:17:59,350 --> 00:18:01,080 Aber das ist nicht das Modell. 369 00:18:01,080 --> 00:18:04,570 In diesem Umfeld, das CS50 IDE ist. 370 00:18:04,570 --> 00:18:07,192 Wir verwenden ein Betriebs System namens Linux. 371 00:18:07,192 --> 00:18:09,900 Linux erinnert an eine andere Betriebssystem, das allgemein bekannt ist 372 00:18:09,900 --> 00:18:10,850 wie Unix. 373 00:18:10,850 --> 00:18:16,340 Und Linux ist vor allem bekannt für Eine Befehlszeilenumgebung, CLI mit. 374 00:18:16,340 --> 00:18:20,070 Nun, wir verwenden einen bestimmten Linux-Variante namens Ubuntu. 375 00:18:20,070 --> 00:18:22,770 Und Ubuntu ist einfach ein bestimmte Version von Linux. 376 00:18:22,770 --> 00:18:27,900 >> Aber diese in diesen Tagen Linux tatsächlich tun kommen mit grafischen Benutzeroberflächen. 377 00:18:27,900 --> 00:18:30,360 Und die, die wir passieren werden hier mit web-basiert ist. 378 00:18:30,360 --> 00:18:32,735 So könnte dies aussehen sogar ein wenig von etwas 379 00:18:32,735 --> 00:18:35,310 Sie selbst haben könnte gesehen oder in der Vergangenheit laufen. 380 00:18:35,310 --> 00:18:37,910 >> Also werde ich voran gehen jetzt und gehen Sie wie folgt. 381 00:18:37,910 --> 00:18:40,950 Ich habe diese Datei als hello.c gespeichert. 382 00:18:40,950 --> 00:18:47,350 Ich gehe voran gehen und Typ clanghello.c So Clang 383 00:18:47,350 --> 00:18:49,850 für die C-Sprache ist eine Compiler. 384 00:18:49,850 --> 00:18:51,952 Es ist vorinstalliert in CS50-IDE. 385 00:18:51,952 --> 00:18:54,910 Und Sie können absolut herunterladen und installieren diese auf Ihrem eigenen Mac oder PC. 386 00:18:54,910 --> 00:18:57,910 >> Aber noch einmal, Sie würden nicht alle haben die Vorkonfiguration für Sie erledigt. 387 00:18:57,910 --> 00:19:00,940 So jetzt bin ich nur Gehen clanghello.c zu laufen. 388 00:19:00,940 --> 00:19:03,240 Und bemerken jetzt diese Syntax hier wird schließlich 389 00:19:03,240 --> 00:19:06,930 nur erkennen, bedeutet, dass ich in ein bin Ordner oder Verzeichnis namens Workspace. 390 00:19:06,930 --> 00:19:11,030 Das Dollarzeichen ist nur Konvention nach Sinn, Ihre Befehle hier eingeben. 391 00:19:11,030 --> 00:19:14,560 >> Es ist, was eine Aufforderung genannt wird, nur durch Konvention ist Dollarzeichen. 392 00:19:14,560 --> 00:19:19,130 Und wenn ich vor jetzt gehen und klicken Sie auf Geben Sie scheint nichts passiert zu haben. 393 00:19:19,130 --> 00:19:20,930 Aber das ist eigentlich eine gute Sache. 394 00:19:20,930 --> 00:19:23,650 Je weniger das geschieht auf Ihr Bildschirm ist, desto wahrscheinlicher 395 00:19:23,650 --> 00:19:26,710 Ihr Code korrekt ist, zu sein zumindest syntaktisch. 396 00:19:26,710 --> 00:19:29,120 >> Also, wenn ich will, dies zu laufen Programm, was soll ich tun? 397 00:19:29,120 --> 00:19:33,770 Nun, es stellt sich heraus, dass die Standardnamen durch Konvention 398 00:19:33,770 --> 00:19:38,854 für Programme, wenn Sie eine nicht angeben Namen für das Programm nur a.out ist. 399 00:19:38,854 --> 00:19:41,270 Und dies zu Syntax, werden Sie erhalten mit vor langem vertraut. 400 00:19:41,270 --> 00:19:47,500 >> Dot Slash bedeutet nur, hey, CS50 IDE, führen Sie ein Programm namens a.out 401 00:19:47,500 --> 00:19:49,400 das ist in meinem aktuellen Verzeichnis. 402 00:19:49,400 --> 00:19:51,520 Das Punkt bedeutet das aktuelle Verzeichnis. 403 00:19:51,520 --> 00:19:55,040 Und wir werden sehen, was andere solche Sequenzen Zeichen bedeutet, es dauerte nicht lange. 404 00:19:55,040 --> 00:19:58,430 >> Also hier gehen wir, Enter, hallo Welt. 405 00:19:58,430 --> 00:20:00,080 Und Sie werden feststellen, dass das, was passiert ist? 406 00:20:00,080 --> 00:20:01,580 drucken Sie es hallo Nicht nur Welt. 407 00:20:01,580 --> 00:20:05,990 Es bewegte sich auch die Cursor in die nächste Zeile. 408 00:20:05,990 --> 00:20:07,160 >> Und warum war das? 409 00:20:07,160 --> 00:20:12,400 Was war der Code, den wir geschrieben haben vor dass dafür gesorgt, dass sich der Cursor würde 410 00:20:12,400 --> 00:20:14,882 gehen in der nächsten Zeile? 411 00:20:14,882 --> 00:20:16,840 Lustige Sache über ein Computer ist es nur geht 412 00:20:16,840 --> 00:20:18,570 zu tun, buchstäblich, was Sie sagen, es zu tun. 413 00:20:18,570 --> 00:20:26,050 >> Also, wenn Sie es sagen printf hallo, Komma, Leerzeichen, Welt, in der Nähe Zitat, 414 00:20:26,050 --> 00:20:29,090 Es ist buchstäblich nur gehen diese Zeichen zu drucken. 415 00:20:29,090 --> 00:20:31,980 Aber ich hatte dieses Sonderzeichen am Ende, Rückruf, Backslash n. 416 00:20:31,980 --> 00:20:34,230 Und das ist, was gewährleistet, dass der Charakter ging 417 00:20:34,230 --> 00:20:36,570 in die nächste Zeile des Bildschirms. 418 00:20:36,570 --> 00:20:38,097 >> In der Tat, lassen Sie mich gehen und zu tun. 419 00:20:38,097 --> 00:20:39,430 Lassen Sie mich gehen Sie vor und löschen diese. 420 00:20:39,430 --> 00:20:41,180 Jetzt bemerken, dass die oben auf meinem Bildschirm gibt es 421 00:20:41,180 --> 00:20:42,890 ein kleines rotes Licht in die Registerkarte anzeigt, 422 00:20:42,890 --> 00:20:45,047 hey, Sie haben sich für den nicht gespeichert. 423 00:20:45,047 --> 00:20:47,880 Also werde ich mit Kontrolle zu gehen voran S oder Befehl S, speichern Sie die Datei. 424 00:20:47,880 --> 00:20:51,130 Jetzt goes-- es ging für ein moment-- grün. 425 00:20:51,130 --> 00:20:53,760 Und jetzt ist es zurück zu wobei nur ein Schließen-Symbol. 426 00:20:53,760 --> 00:21:01,860 >> Wenn ich mich jetzt clanghello.c wieder, Geben Sie, Punkt slash, a.out, Enter, 427 00:21:01,860 --> 00:21:04,110 Sie werden sehen, dass es immer noch gearbeitet. 428 00:21:04,110 --> 00:21:06,020 Aber es ist wohl ein wenig fehlerhaft. 429 00:21:06,020 --> 00:21:08,714 Gerade jetzt, mein prompt-- Arbeitsplatz, und dann, dass Dollar-Zeichen, 430 00:21:08,714 --> 00:21:10,880 und dann meine eigentliche prompt-- ist um auf der gleichen Linie. 431 00:21:10,880 --> 00:21:14,540 So dies sicherlich eine ästhetische Fehler, auch wenn es nicht wirklich ein logischer Fehler. 432 00:21:14,540 --> 00:21:16,250 >> Also werde ich rückgängig zu machen, was ich gerade tat. 433 00:21:16,250 --> 00:21:18,560 Ich werde a.out erneut ausführen. 434 00:21:18,560 --> 00:21:22,710 Bemerke ich habe hinzugefügt, die Newline-Zeichen zurück. 435 00:21:22,710 --> 00:21:24,280 Ich habe die Datei gespeichert. 436 00:21:24,280 --> 00:21:31,630 >> So a.out erneut ausführen Ich werde, und- dammit, um einen Fehler, ein Fehler bedeutet Fehler. 437 00:21:31,630 --> 00:21:35,020 So ist der Fehler ist, dass, obwohl Ich habe den Backslash n gibt, 438 00:21:35,020 --> 00:21:41,180 Wieder gespeichert, wieder lief das Programm, Das Verhalten war das gleiche. 439 00:21:41,180 --> 00:21:42,640 Warum wäre das? 440 00:21:42,640 --> 00:21:43,910 >> Ich vermisse einen Schritt, nicht wahr? 441 00:21:43,910 --> 00:21:47,620 Das entscheidende Schritt war früher, dass Sie zu--, wenn Sie den Quellcode ändern, 442 00:21:47,620 --> 00:21:49,610 es stellt sich auch heraus laufen es durch den Compiler 443 00:21:49,610 --> 00:21:51,102 wieder, so dass Sie neue Maschinencode. 444 00:21:51,102 --> 00:21:52,810 Und der Maschinencode, die Nullen und Einsen, 445 00:21:52,810 --> 00:21:56,260 werden fast identisch sind, aber nicht perfekt, denn wir brauchen, 446 00:21:56,260 --> 00:21:57,510 natürlich, dass neue Zeile. 447 00:21:57,510 --> 00:22:02,640 >> Also, dies zu beheben, ich werde zu müssen erneut ausführen clanghello.c, geben, Punkt 448 00:22:02,640 --> 00:22:03,800 Slash, a.out. 449 00:22:03,800 --> 00:22:08,402 Und jetzt, hallo Welt ist zurück , wo ich es erwarten. 450 00:22:08,402 --> 00:22:09,610 Also das ist alles schön und gut. 451 00:22:09,610 --> 00:22:13,150 Aber a.out ist ein ziemlich dummer Name für ein Programm, obwohl es sein geschieht, 452 00:22:13,150 --> 00:22:16,530 aus historischen Gründen, die default-- Montage Ausgänge Bedeutung. 453 00:22:16,530 --> 00:22:20,780 >> Aber lassen Sie mich voran gehen hier und tun dies anders. 454 00:22:20,780 --> 00:22:24,760 Ich möchte, dass meine Hallo Welt Programm tatsächlich hallo aufgerufen werden. 455 00:22:24,760 --> 00:22:28,320 Also wenn es ein Icon auf meinem Desktop, es wäre nicht a.out werden. 456 00:22:28,320 --> 00:22:29,730 Es wäre hallo genannt werden. 457 00:22:29,730 --> 00:22:33,660 >> Also, dies zu tun, es stellt sich heraus, dass Clang, wie viele Programme, 458 00:22:33,660 --> 00:22:37,980 unterstützt die Befehlszeilenargumente, oder Fahnen oder Schalter, 459 00:22:37,980 --> 00:22:39,600 die beeinflussen einfach sein Verhalten. 460 00:22:39,600 --> 00:22:45,160 Insbesondere unterstützt Clang einen Strich o Flagge, die dann ein zweites Wort nimmt. 461 00:22:45,160 --> 00:22:48,190 In diesem Fall werde ich willkürlich, aber vernünftig, nennen Sie es hallo. 462 00:22:48,190 --> 00:22:50,710 Aber ich konnte es nennen alles Ich möchte, außer a.out, die 463 00:22:50,710 --> 00:22:52,390 eher würde neben den Punkt. 464 00:22:52,390 --> 00:22:55,640 >> Und dann geben Sie einfach den Namen der Datei will ich zu kompilieren. 465 00:22:55,640 --> 00:22:59,190 So, jetzt, auch wenn am Anfang des Befehls Ich habe noch Clang, 466 00:22:59,190 --> 00:23:01,410 am Ende des Befehls Ich habe immer noch den Dateinamen, 467 00:23:01,410 --> 00:23:05,520 Ich habe jetzt diese Befehlszeile Argumente, diese Flags, die sagen, 468 00:23:05,520 --> 00:23:11,180 oh, übrigens, Output-o, eine Datei hallo, nicht der Standard-a.out genannt. 469 00:23:11,180 --> 00:23:13,810 >> Also, wenn ich drücken Sie die Eingabetaste jetzt nichts geschehen scheint. 470 00:23:13,810 --> 00:23:17,900 Und doch jetzt kann ich hallo dot slash tun. 471 00:23:17,900 --> 00:23:19,089 So ist es das gleiche Programm. 472 00:23:19,089 --> 00:23:21,380 Die Nullen und Einsen sind am Ende des Tages identisch. 473 00:23:21,380 --> 00:23:24,210 >> Aber sie sind in zwei verschiedene files-- a.out, 474 00:23:24,210 --> 00:23:26,490 Das ist die erste Version und nur dummerweise den Namen, 475 00:23:26,490 --> 00:23:30,250 und jetzt hallo, das ist eine viel zwingender Name für ein Programm. 476 00:23:30,250 --> 00:23:33,195 Aber, ehrlich gesagt, bin ich nie geht dies zu erinnern, wieder, 477 00:23:33,195 --> 00:23:34,070 und wieder und wieder. 478 00:23:34,070 --> 00:23:36,411 Und tatsächlich, wie wir schreiben komplizierteren Programme, 479 00:23:36,411 --> 00:23:38,160 die Befehle du bist gehen zu müssen, zu schreiben 480 00:23:38,160 --> 00:23:40,920 gehen sogar zu erhalten mehr noch kompliziert. 481 00:23:40,920 --> 00:23:41,940 >> Und so keine Sorgen machen. 482 00:23:41,940 --> 00:23:46,220 Es stellt sich heraus, dass die Menschen vor uns haben sie auch realisiert 483 00:23:46,220 --> 00:23:47,530 hatte das exakt gleiche Problem. 484 00:23:47,530 --> 00:23:50,900 Auch sie nicht genießen zu haben Geben Sie ziemlich lang, obskuren Befehle, 485 00:23:50,900 --> 00:23:52,200 geschweige denn an sie erinnern. 486 00:23:52,200 --> 00:23:56,070 Und so Menschen vor uns gemacht haben andere Programme, die es einfacher machen, 487 00:23:56,070 --> 00:23:57,670 kompilieren Sie die Software. 488 00:23:57,670 --> 00:24:01,609 >> Und in der Tat, eine solche Programm Make genannt. 489 00:24:01,609 --> 00:24:03,150 Also werde ich voran gehen und das tun. 490 00:24:03,150 --> 00:24:05,691 Ich werde alles rückgängig zu machen, ich gerade tat in der folgenden Art und Weise. 491 00:24:05,691 --> 00:24:07,690 Lassen Sie mich LS eingeben. 492 00:24:07,690 --> 00:24:10,980 Und Sie werden drei bemerken things-- a.out, und ein Stern, hallo 493 00:24:10,980 --> 00:24:12,810 und ein Stern, und hello.c. 494 00:24:12,810 --> 00:24:14,730 Hoffentlich sollte dies sein ein wenig intuitiv, 495 00:24:14,730 --> 00:24:18,220 soweit früher war nichts in diesem Arbeitsbereich. 496 00:24:18,220 --> 00:24:21,240 Es gab nichts, was ich hatte erstellt, bis wir Klasse gestartet. 497 00:24:21,240 --> 00:24:22,840 >> Und ich erstellt hello.c. 498 00:24:22,840 --> 00:24:24,544 Ich kann es dann kompiliert, und nannte es a.out. 499 00:24:24,544 --> 00:24:27,460 Und dann habe ich es kompiliert wieder leicht anders und nannte es hallo. 500 00:24:27,460 --> 00:24:32,830 Also ich habe drei Dateien in diesem Verzeichnis, in diesem Ordner namens Workspace. 501 00:24:32,830 --> 00:24:35,005 Jetzt kann ich das auch sehen wenn ich vergrößern tatsächlich aus. 502 00:24:35,005 --> 00:24:37,530 >> Wenn ich hier vergrößern und Blick auf diese oben rechts 503 00:24:37,530 --> 00:24:39,940 Ecke, wie versprochen die linke Hand Seite des Bildschirms 504 00:24:39,940 --> 00:24:42,990 geht zu zeigen, wird immer Sie was in Ihrem Konto ist, was ist 505 00:24:42,990 --> 00:24:44,790 innerhalb von CS50 IDE. 506 00:24:44,790 --> 00:24:46,680 Und es gibt drei Dateien gibt. 507 00:24:46,680 --> 00:24:49,070 >> Deshalb möchte ich von a.out loszuwerden und hallo. 508 00:24:49,070 --> 00:24:51,275 Und wie Sie vielleicht vorstellen, intuitiv, Sie 509 00:24:51,275 --> 00:24:53,400 Art von Kontrolle Klick könnte oder direkt auf diese klicken. 510 00:24:53,400 --> 00:24:54,590 Und dieses kleine Menü erscheint. 511 00:24:54,590 --> 00:24:57,170 Sie können die Datei heruntergeladen haben, führen es, in der Vorschau, aktualisieren, umbenennen, 512 00:24:57,170 --> 00:24:57,700 oder was nicht. 513 00:24:57,700 --> 00:25:00,260 >> Und ich konnte es einfach zu löschen, und es würde weggehen. 514 00:25:00,260 --> 00:25:05,260 Aber lassen Sie uns Dinge tun, mit einem Befehl Linie für jetzt, um sich bequem 515 00:25:05,260 --> 00:25:07,010 mit diesem, und gehen Sie wie folgt. 516 00:25:07,010 --> 00:25:12,345 Ich gehe voran gehen und entfernen a.out durch buchstäblich rma.out eingeben. 517 00:25:12,345 --> 00:25:14,890 Es stellt sich heraus, den Befehl für Entfernen oder etwas zu löschen, 518 00:25:14,890 --> 00:25:16,280 ist zu entfernen oder zu löschen nicht. 519 00:25:16,280 --> 00:25:21,260 >> Es ist kurz und bündig RM, nur um zu sparen Sie einige Tastenanschläge, und die Eingabetaste drücken. 520 00:25:21,260 --> 00:25:24,707 Jetzt werden wir etwas zu sein, entfernen kryptisch reguläre Datei a.out. 521 00:25:24,707 --> 00:25:27,040 Ich weiß nicht wirklich, was ein unregelmäßige Datei würde noch sein. 522 00:25:27,040 --> 00:25:28,660 Aber ich will es zu entfernen. 523 00:25:28,660 --> 00:25:30,150 >> Also werde ich y für Ja zu geben. 524 00:25:30,150 --> 00:25:31,940 Oder ich könnte es geben aus, und drücken Sie die Eingabetaste. 525 00:25:31,940 --> 00:25:33,440 Und wieder scheint nichts zu passieren. 526 00:25:33,440 --> 00:25:35,840 Aber das ist im Allgemeinen eine gute Sache. 527 00:25:35,840 --> 00:25:40,490 >> Wenn ich LS dieses Mal eingeben, sehen, was sollte ich? 528 00:25:40,490 --> 00:25:44,930 Hoffentlich nur hallo und hello.c. 529 00:25:44,930 --> 00:25:47,286 Jetzt, da beiseite ein, werden Sie bemerken diesen Stern, Stern, 530 00:25:47,286 --> 00:25:48,660 das ist am Ende meiner Programme. 531 00:25:48,660 --> 00:25:50,201 Und sie zeigen auch grün. 532 00:25:50,201 --> 00:25:53,970 Das ist nur CS50 IDE Weg von Ihnen in die Tat cluing 533 00:25:53,970 --> 00:25:55,280 dass das nicht-Quellcode. 534 00:25:55,280 --> 00:25:58,880 Das ist eine ausführbare Datei, ein runnable Programm, das Sie tatsächlich ausführen können 535 00:25:58,880 --> 00:26:01,020 durch Punktstrich zu tun, und dann ist es Namen. 536 00:26:01,020 --> 00:26:05,860 >> Nun lassen Sie mich gehen Sie vor und entfernen Dazu rm hallo, eingeben, entfernen Sie regelmäßig 537 00:26:05,860 --> 00:26:08,010 Datei hallo, ja. 538 00:26:08,010 --> 00:26:11,180 Und jetzt, wenn ich Typ LS, wir sind wieder zu hello.c. 539 00:26:11,180 --> 00:26:13,917 Versuchen Sie, nicht zu löschen Sie Ihre eigentlichen Quellcode. 540 00:26:13,917 --> 00:26:16,250 Obwohl es gibt Funktionen in CS50 IDE gebaut, wo 541 00:26:16,250 --> 00:26:19,870 Sie können Ihre Revisionsgeschichte durchlaufen und Zurückspulen in der Zeit, wenn Sie versehentlich 542 00:26:19,870 --> 00:26:23,660 löschen etwas, tun bewusst sein, im Sinne dieser Aufforderungen ja oder nein, 543 00:26:23,660 --> 00:26:25,381 von dem, was Sie eigentlich tun wollen. 544 00:26:25,381 --> 00:26:27,380 Und wenn ich nach oben nach oben Handecke links hier, 545 00:26:27,380 --> 00:26:30,696 alles, was bleibt, ist hello.c. 546 00:26:30,696 --> 00:26:32,570 Es gibt also Bündel von andere Befehle, die Sie 547 00:26:32,570 --> 00:26:37,550 ausführen kann, in der Welt der Linux, einer davon ist, wieder, zu machen. 548 00:26:37,550 --> 00:26:40,180 Und wir gehen zu machen mein Programm nun wie folgt. 549 00:26:40,180 --> 00:26:43,270 >> Statt Klirren zu tun, anstatt das zu tun Klirren-o, 550 00:26:43,270 --> 00:26:45,860 Ich werde einfach zu geben, buchstäblich machen hallo. 551 00:26:45,860 --> 00:26:49,630 Und jetzt bemerken, ich bin Eingabe nicht hello.c machen. 552 00:26:49,630 --> 00:26:50,910 Ich schreibe hallo machen. 553 00:26:50,910 --> 00:26:54,840 >> Und das Programm, das kommt mit CS50 IDE und vieles mehr 554 00:26:54,840 --> 00:26:57,090 im Allgemeinen mit Linux, ist ein Programm, das ist 555 00:26:57,090 --> 00:26:59,120 werde ein Programm namens Hallo machen. 556 00:26:59,120 --> 00:27:03,680 Und es wird zu übernehmen, durch Konvention, dass, wenn dieses Programm durchgeführt werden, 557 00:27:03,680 --> 00:27:09,030 es wird von einer Quelle gemacht werden Code-Datei in Punkt c enden, hello.c. 558 00:27:09,030 --> 00:27:12,210 >> Also, wenn ich drücken Sie die Eingabetaste jetzt feststellen, dass der Befehl, der ausgeführt wird 559 00:27:12,210 --> 00:27:14,340 eigentlich sogar länger vor als zuvor. 560 00:27:14,340 --> 00:27:16,670 Und das ist, weil wir haben vorkonfigurierte CS50 IDE zu haben 561 00:27:16,670 --> 00:27:19,878 einige zusätzliche Features, dass gebaut wir brauchen nicht nur noch nicht, aber bald werden. 562 00:27:19,878 --> 00:27:23,470 Aber der Schlüssel ist daran zu erkennen, jetzt ist ich ein Hallo-Programm. 563 00:27:23,470 --> 00:27:27,080 >> Wenn ich erneut ein LS, I haben ein Hallo-Programm. 564 00:27:27,080 --> 00:27:32,070 Und ich kann es laufen mit dot slash a.out, nein, 565 00:27:32,070 --> 00:27:35,590 denn der ganze Sinn dieser Übung war dot slash hallo. 566 00:27:35,590 --> 00:27:38,089 Und jetzt habe ich meine Hallo Welt Programm. 567 00:27:38,089 --> 00:27:39,880 Also vorwärts zu bewegen, wir sind fast immer nur 568 00:27:39,880 --> 00:27:42,088 gehen unsere Programme kompilieren mit dem Befehl zu machen. 569 00:27:42,088 --> 00:27:45,300 Und dann werden wir sie laufen durch dot slash, und den Namen des Programms. 570 00:27:45,300 --> 00:27:49,610 Aber klar, was Make tut für Sie ist es selbst kein Compiler. 571 00:27:49,610 --> 00:27:53,310 Es ist nur ein Komfort-Programm dass weiß, wie man einen Compiler auslösen 572 00:27:53,310 --> 00:27:56,470 laufen kann, so dass Sie selbst verwenden. 573 00:27:56,470 --> 00:28:00,220 >> Was andere Befehle existieren in Linux und wiederum die CS50 IDE? 574 00:28:00,220 --> 00:28:03,107 Wir werden bald sehen, dass es eine CD-Befehl Change Directory. 575 00:28:03,107 --> 00:28:05,190 Auf diese Weise können Sie innerhalb Ihre Befehlszeilenschnittstelle 576 00:28:05,190 --> 00:28:07,610 um vorwärts zu bewegen, und zurück, und eröffnen verschiedene Ordner 577 00:28:07,610 --> 00:28:08,860 ohne mit der Maus. 578 00:28:08,860 --> 00:28:12,470 >> LS wir sahen, die Liste steht die Dateien im aktuellen Verzeichnis. 579 00:28:12,470 --> 00:28:14,650 Machen Sie Dir, können Sie wahrscheinlich beginnen zu schließen 580 00:28:14,650 --> 00:28:18,150 was diese bedeuten now-- Verzeichnis machen, wenn Sie möchten, um einen Ordner zu erstellen. 581 00:28:18,150 --> 00:28:21,270 RM für entfernen, RM Dir für entfernen directory-- und diese, 582 00:28:21,270 --> 00:28:24,160 Auch hier sind die Befehlszeile Äquivalenten, was Sie 583 00:28:24,160 --> 00:28:26,945 konnte mit der Maus in CS50 IDE tun. 584 00:28:26,945 --> 00:28:28,820 Aber Sie werden bald feststellen, dass manchmal ist es einfach 585 00:28:28,820 --> 00:28:30,610 viel schneller zu tun Dinge mit einer Tastatur, 586 00:28:30,610 --> 00:28:33,690 und letztlich viel stärker. 587 00:28:33,690 --> 00:28:36,440 >> Aber es ist schwer zu argumentieren, dass alles, was wir bisher getan 588 00:28:36,440 --> 00:28:39,990 , Ist alles, was mächtig, wenn alle wir haben sagen will, ist, hallo Welt. 589 00:28:39,990 --> 00:28:43,740 Und in der Tat, ich fest einprogrammiert die Worte hallo in mein Programm Welt. 590 00:28:43,740 --> 00:28:45,530 Es gibt keine Dynamik noch. 591 00:28:45,530 --> 00:28:49,320 Scratch war eine Größenordnung interessanter letzte Woche. 592 00:28:49,320 --> 00:28:51,220 >> Und so lassen Sie uns dort. 593 00:28:51,220 --> 00:28:55,310 Lassen Sie uns einen Schritt in Richtung auf das nehmen von haft einige dieser Funktionen. 594 00:28:55,310 --> 00:28:59,470 Also nicht nur C kommen mit printf, und Bündeln von anderen Funktionen 595 00:28:59,470 --> 00:29:01,850 von denen einige werden wir sehen, Im Laufe der Zeit hat es nicht 596 00:29:01,850 --> 00:29:05,760 machen es, dass alle einfach direkt aus des Gatters in eine Benutzereingabe zu bekommen. 597 00:29:05,760 --> 00:29:08,140 >> In der Tat, eine der Schwächen von Sprachen wie C, 598 00:29:08,140 --> 00:29:10,140 und auch Java und noch andere ist, dass es nicht 599 00:29:10,140 --> 00:29:15,860 machen es einfach, nur die Dinge wie ganze Zahlen von Benutzern oder Strings, Wörter, 600 00:29:15,860 --> 00:29:19,970 und Phrasen, geschweige denn Dinge wie Gleitkommazahlen oder reelle Zahlen 601 00:29:19,970 --> 00:29:23,240 mit Dezimalstellen, und wirklich lange Zahlen, wie wir bald sehen. 602 00:29:23,240 --> 00:29:27,000 Also diese Liste der Funktionen, die hier, diese sind wie andere Puzzleteile Scratch 603 00:29:27,000 --> 00:29:31,090 dass wir in CS50 vorinstalliert haben IDE, die wir für ein paar Wochen verwenden werden 604 00:29:31,090 --> 00:29:34,010 als Stützräder der Art, und schließlich nehmen sie ab, und schauen 605 00:29:34,010 --> 00:29:37,210 unter der Haube, vielleicht an wie diese Dinge umgesetzt werden. 606 00:29:37,210 --> 00:29:40,460 >> Aber um dies zu tun, lassen Sie uns tatsächlich ein Programm schreiben. 607 00:29:40,460 --> 00:29:41,770 Lassen Sie mich voraus jetzt gehen. 608 00:29:41,770 --> 00:29:44,750 Und ich werde einen neuen zu erstellen Eine Datei mit diesem kleinen Plus klicken, 609 00:29:44,750 --> 00:29:45,970 und klicken Sie auf Neue Datei. 610 00:29:45,970 --> 00:29:49,250 >> Ich werde diese neben sparen ein als, sagen wir mal, string.c, 611 00:29:49,250 --> 00:29:50,750 weil ich will, mit Streichern zu spielen. 612 00:29:50,750 --> 00:29:53,990 Und String in C ist nur eine Folge von Zeichen. 613 00:29:53,990 --> 00:29:56,090 So, jetzt gehen wir voran und gehen Sie wie folgt. 614 00:29:56,090 --> 00:30:01,204 >> Fügen Standard IO.h-- und es stellt sich heraus, Standard-IO, 615 00:30:01,204 --> 00:30:03,360 IO bedeutet nur, Eingang und Ausgang. 616 00:30:03,360 --> 00:30:05,920 So stellt sich heraus, dass Diese Linie ist hier, was 617 00:30:05,920 --> 00:30:08,140 ist das benachbarte uns printf zu verwenden. 618 00:30:08,140 --> 00:30:10,410 Printf, natürlich, erzeugt eine Ausgabe. 619 00:30:10,410 --> 00:30:15,000 Um also printf zu verwenden, es stellt sich out müssen Sie diese Zeile Code haben 620 00:30:15,000 --> 00:30:16,040 am Anfang der Datei. 621 00:30:16,040 --> 00:30:18,456 >> Und wir kommen wieder zu dem, was das bedeutet wirklich vor lang. 622 00:30:18,456 --> 00:30:20,400 Es stellt sich heraus, dass in jede C-Programm schreibe ich, 623 00:30:20,400 --> 00:30:23,640 Ich habe es für den Anfang Code, der wie folgt aussieht. 624 00:30:23,640 --> 00:30:26,860 Und Sie werden CS50 IDE bemerken und andere integrierte Entwicklungs 625 00:30:26,860 --> 00:30:30,050 Umgebungen, wie es, werden, wie am besten zu versuchen, 626 00:30:30,050 --> 00:30:31,780 sie können Ihre Gedanken zu beenden. 627 00:30:31,780 --> 00:30:35,930 In der Tat, vor einem Augenblick, wenn ich rückgängig machen was ich gerade tat, schlug ich ein. 628 00:30:35,930 --> 00:30:39,160 >> Ich traf dann offen lockig Klammer, traf wieder ein. 629 00:30:39,160 --> 00:30:40,430 Und es fertig mein Gedanke. 630 00:30:40,430 --> 00:30:45,140 Es gab mir eine neue Linie, eingekerbt nicht weniger für schöne stilistischen Gründen werden wir sehen. 631 00:30:45,140 --> 00:30:48,559 Und dann gab es mir automatisch dass geschweifte Klammer meine Gedanken zu beenden. 632 00:30:48,559 --> 00:30:50,600 Nun muss es nicht immer erraten, was Sie tun möchten. 633 00:30:50,600 --> 00:30:53,620 Jedoch zu einem großen Teil, tut Speichern Sie einige Tastenanschläge. 634 00:30:53,620 --> 00:30:59,560 Also vor einem Augenblick, liefen wir diese program-- hallo, Welt, und dann kompiliert, 635 00:30:59,560 --> 00:31:00,460 und lief es dann. 636 00:31:00,460 --> 00:31:01,867 Aber es gibt keine Dynamik hier. 637 00:31:01,867 --> 00:31:03,700 Was ist, wenn wir wollten etwas anderes zu tun? 638 00:31:03,700 --> 00:31:07,630 Nun, was ist, wenn ich wollte eigentlich eine Zeichenfolge vom Benutzer erhalten? 639 00:31:07,630 --> 00:31:11,250 Ich werde ein Puzzleteil zu verwenden, genau dass-- bekommen Zeichenfolge genannt. 640 00:31:11,250 --> 00:31:15,860 >> Es stellte sich in C aus, dass, wenn Sie nicht wollen, Eingang zu einem Puzzlestück zur Verfügung zu stellen, 641 00:31:15,860 --> 00:31:19,360 oder mehr richtig auf eine Funktion, Sie buchstäblich tun, nur offene Klammer, 642 00:31:19,360 --> 00:31:20,430 Klammer zu. 643 00:31:20,430 --> 00:31:25,540 So ist es, als ob es kein weißer Kasten zu geben in. 644 00:31:25,540 --> 00:31:27,720 Das sagen wir Block vor hatte einen kleinen weißen Kasten. 645 00:31:27,720 --> 00:31:29,660 Wir haben nicht das weiße Feld jetzt. 646 00:31:29,660 --> 00:31:33,310 >> Aber wenn ich String nennen, ich wollen das Ergebnis irgendwo zu setzen. 647 00:31:33,310 --> 00:31:37,680 Also ein sehr häufiges Paradigma in C ist rufen Sie eine Funktion, wie der String hier, 648 00:31:37,680 --> 00:31:41,070 und speichern Sie dann den Rückgabewert. 649 00:31:41,070 --> 00:31:44,450 Es ist das Ergebnis der Anstrengung in etwas. 650 00:31:44,450 --> 00:31:47,630 >> Und was ist das konstruieren in der Programmierung, 651 00:31:47,630 --> 00:31:53,450 ob in Scratch oder jetzt C, dass wir verwenden können, um tatsächlich etwas zu speichern? 652 00:31:53,450 --> 00:31:55,990 Nannte es eine Variable, nicht wahr? 653 00:31:55,990 --> 00:32:00,320 Und in Scratch, tun wir nicht wirklich egal, was in Variablen würde. 654 00:32:00,320 --> 00:32:02,170 >> Aber in diesem Fall tun wir eigentlich. 655 00:32:02,170 --> 00:32:03,719 Ich werde Zeichenfolge zu sagen. 656 00:32:03,719 --> 00:32:05,510 Und dann könnte ich nennen dies alles, was ich will. 657 00:32:05,510 --> 00:32:08,340 Ich werde es nennen Name, bekommt String zu erhalten. 658 00:32:08,340 --> 00:32:10,250 >> Und jetzt, selbst wenn du bist ein wenig neu in diesem, 659 00:32:10,250 --> 00:32:11,984 bemerken, dass ich einige Details bin fehlt. 660 00:32:11,984 --> 00:32:13,150 Ich vergesse ein Semikolon. 661 00:32:13,150 --> 00:32:14,400 Ich brauche diesen Gedanken zu beenden. 662 00:32:14,400 --> 00:32:17,480 Also werde ich mein Cursor zu bewegen, und schlug Semikolon dort. 663 00:32:17,480 --> 00:32:19,130 Und was habe ich nur getan? 664 00:32:19,130 --> 00:32:21,440 In dieser Codezeile, Nummer 5 in dem Moment, 665 00:32:21,440 --> 00:32:23,799 Ich rufe get String ohne Eingaben. 666 00:32:23,799 --> 00:32:26,090 Also gibt es keine kleinen weißen Feld wie das Speichern Block hat. 667 00:32:26,090 --> 00:32:28,590 >> Ich sage nur, hey, Computer, hol mir einen String. 668 00:32:28,590 --> 00:32:31,390 Das Gleichheitszeichen ist nicht wirklich ein Gleichheitszeichen, per se. 669 00:32:31,390 --> 00:32:33,790 Es ist die Zuordnung Betreiber, was bedeutet, 670 00:32:33,790 --> 00:32:37,860 hey, Computer, bewegen Sie den Wert von rechts nach links. 671 00:32:37,860 --> 00:32:40,480 Und in der linken Seite, habe ich folgendes. 672 00:32:40,480 --> 00:32:43,580 >> Hey, Computer, gib mir ein string-- eine Folge von Zeichen. 673 00:32:43,580 --> 00:32:45,637 Und so nennen string Name. 674 00:32:45,637 --> 00:32:47,220 Und ich muss es nicht einmal nennen Namen. 675 00:32:47,220 --> 00:32:49,970 >> Ich konnte es nennen, konventionell, so etwas wie S, 676 00:32:49,970 --> 00:32:52,900 ähnlich wie wir früher i rufen Sie die Variable i. 677 00:32:52,900 --> 00:32:54,829 Aber jetzt brauche ich etwas damit zu tun. 678 00:32:54,829 --> 00:32:57,370 Es wäre ziemlich dumm versuchen, diesen Code kompilieren, ausführen 679 00:32:57,370 --> 00:32:59,410 Dieses Programm, auch wenn Ich erhalte eine Zeichenfolge, 680 00:32:59,410 --> 00:33:01,580 noch, weil es nur gehen zu sagen, hallo Welt. 681 00:33:01,580 --> 00:33:06,140 >> Aber was, wenn ich will, dies zu ändern. 682 00:33:06,140 --> 00:33:07,940 Warum ich das nicht tun? 683 00:33:07,940 --> 00:33:11,632 Percent s, Komma s. 684 00:33:11,632 --> 00:33:13,090 Und das ist ein wenig noch kryptisch. 685 00:33:13,090 --> 00:33:15,560 >> Also lassen Sie mich meine Variablen mehr klar machen. 686 00:33:15,560 --> 00:33:17,510 Lassen Sie mich diese Variable Namen nennen. 687 00:33:17,510 --> 00:33:20,230 Und lassen Sie uns sehen, ob wir nicht ärgern auseinander, was hier passiert. 688 00:33:20,230 --> 00:33:22,770 >> Also auf der Linie fünf, ich bin immer einen String. 689 00:33:22,770 --> 00:33:25,620 Und ich bin zu speichern, die Schnur, was hat der Benutzer eingegeben 690 00:33:25,620 --> 00:33:28,430 an seinem Tastatur, in einer Variablen namens Namen. 691 00:33:28,430 --> 00:33:30,590 Und es stellt sich heraus, dass printf nicht nur 692 00:33:30,590 --> 00:33:34,220 nehmen ein Argument in Doppel Zitate, eine Eingabe in Anführungszeichen zu setzen. 693 00:33:34,220 --> 00:33:39,100 >> Es kann nehmen zwei oder drei, oder mehr, beispiels daß die zweite oder dritte oder vierte, 694 00:33:39,100 --> 00:33:42,320 sind alle Namen von Variablen, oder speziell Werte, 695 00:33:42,320 --> 00:33:48,610 dass Sie in verstopfen möchten, dynamisch, dass Zeichenfolge in Anführungszeichen. 696 00:33:48,610 --> 00:33:52,110 In anderen Worten, was würde dies falsch sein? 697 00:33:52,110 --> 00:33:57,920 Wenn ich gerade gesagt, hallo name, Backslash n, gespeichert meine Datei, mein Code kompiliert, 698 00:33:57,920 --> 00:34:01,660 und lief dies, was passieren würde? 699 00:34:01,660 --> 00:34:05,139 >> Es wird nur sagen, hallo nennen, buchstäblich N-A-M-E, 700 00:34:05,139 --> 00:34:07,900 Das ist ziemlich blöd da es ist nicht anders als Welt. 701 00:34:07,900 --> 00:34:10,400 So etwas ist in Anführungszeichen was wörtlich wird gedruckt. 702 00:34:10,400 --> 00:34:12,520 Also, wenn ich will haben ein Platzhalter dort, 703 00:34:12,520 --> 00:34:14,422 Ich brauche eigentlich zu verwenden einige spezielle Syntax. 704 00:34:14,422 --> 00:34:17,380 Und es stellt sich heraus, wenn Sie das lesen Dokumentation für die printf-Funktion, 705 00:34:17,380 --> 00:34:21,320 es wird Ihnen sagen, dass wenn Sie verwenden Prozent s, 706 00:34:21,320 --> 00:34:23,920 Sie können einen Wert ersetzen wie folgt. 707 00:34:23,920 --> 00:34:27,190 >> Nach einem Komma danach doppelte Anführungszeichen, geben Sie einfach 708 00:34:27,190 --> 00:34:29,179 schreiben Sie den Namen der Variable, die Sie wollen 709 00:34:29,179 --> 00:34:33,790 stecker in diesem Format Code oder Formatangabe, 710 00:34:33,790 --> 00:34:35,469 Prozent s für Strings. 711 00:34:35,469 --> 00:34:39,190 Und jetzt, wenn ich habe meine Datei gespeichert, Ich gehe zurück nach unten zu meinem Terminal. 712 00:34:39,190 --> 00:34:42,870 Und ich tippe Make String, Der Name dieses weil wieder 713 00:34:42,870 --> 00:34:45,510 Datei, die ich wählte vor ist string.c. 714 00:34:45,510 --> 00:34:48,510 >> Also werde ich String zu sagen, eintragen. 715 00:34:48,510 --> 00:34:51,550 Ach du meine Güte, schauen Sie sich alle die Fehler, die wir haben schon gemacht. 716 00:34:51,550 --> 00:34:55,540 Und das ist-- was, das ist wirklich wie ein sechs, sieben Zeilenprogramm? 717 00:34:55,540 --> 00:34:57,790 Also das ist, wo es kann sehr schnell überwältigend. 718 00:34:57,790 --> 00:35:00,890 >> Das Terminal-Fenster hat jetzt nur erbrochen 719 00:35:00,890 --> 00:35:03,230 eine Vielzahl von Fehlermeldungen. 720 00:35:03,230 --> 00:35:07,560 Sicherlich habe ich nicht mehr Fehler Nachrichten als ich Zeilen Code. 721 00:35:07,560 --> 00:35:08,680 Also, was ist los? 722 00:35:08,680 --> 00:35:10,920 >> Nun, die beste Strategie zu tun, Sie zu jeder Zeit 723 00:35:10,920 --> 00:35:13,710 Sie stoßen auf ein überwältigendes Liste der Fehler so, 724 00:35:13,710 --> 00:35:16,690 zurück, suchen Sie nach dem Befehl blättern Sie lief nur, was in meinem Fall 725 00:35:16,690 --> 00:35:18,020 ist String machen. 726 00:35:18,020 --> 00:35:21,630 Schauen Sie, was machte, und das ist, dass lange Clang Befehl, keine große Sache gibt. 727 00:35:21,630 --> 00:35:22,950 >> Aber die rot ist schlecht. 728 00:35:22,950 --> 00:35:24,750 Grün versucht, zu sein sanft und hilfsbereit. 729 00:35:24,750 --> 00:35:26,140 Aber es ist immer noch schlecht, in diesem Fall. 730 00:35:26,140 --> 00:35:27,510 Aber wo ist es schlecht? 731 00:35:27,510 --> 00:35:31,450 >> String.c, Zeile fünf, Charakter fünf. 732 00:35:31,450 --> 00:35:32,930 So ist dies nur allgemeine Konvention. 733 00:35:32,930 --> 00:35:36,060 Etwas Kolon etwas bedeutet Zeilennummer und Zeichennummer. 734 00:35:36,060 --> 00:35:41,080 Fehler, die Verwendung von nicht angemeldeter Bezeichnerstring. 735 00:35:41,080 --> 00:35:42,900 Meinten Sie Standard in? 736 00:35:42,900 --> 00:35:45,530 >> Also leider Clang versucht, hilfreich zu sein. 737 00:35:45,530 --> 00:35:46,850 Aber es ist falsch, in diesem Fall. 738 00:35:46,850 --> 00:35:49,350 Nein, Clang, ich wollte nicht Standard-IO. 739 00:35:49,350 --> 00:35:51,070 Ich meinte, dass auf Leitung eins, ja. 740 00:35:51,070 --> 00:35:53,420 >> Aber Linie fünf ist diese hier. 741 00:35:53,420 --> 00:35:57,040 Und Clang nicht verstehen, S-T-R-I-N-G. 742 00:35:57,040 --> 00:36:01,490 Es ist ein nicht deklarierter Bezeichner, ein Wort hat es nur noch nie gesehen. 743 00:36:01,490 --> 00:36:05,730 Und das ist, weil C, die Sprache wir schreiben Code in gerade jetzt, 744 00:36:05,730 --> 00:36:08,070 hat keine Variablen genannt Strings. 745 00:36:08,070 --> 00:36:11,380 >> Es ist nicht standardmäßig Unterstützung etwas genannt einen String. 746 00:36:11,380 --> 00:36:16,750 Das ist ein CS50 Stück Jargon, aber sehr konventionell. 747 00:36:16,750 --> 00:36:18,600 Aber ich kann dieses Problem beheben wie folgt. 748 00:36:18,600 --> 00:36:22,090 >> Wenn ich hinzufügen, eine Zeile Code an die Spitze dieses Programms, 749 00:36:22,090 --> 00:36:27,890 umfassen CS50.h, die eine andere Datei ist irgendwo in der CS50 IDE, irgendwo 750 00:36:27,890 --> 00:36:30,820 auf der Festplatte, sozusagen des Ubuntu-Betriebssystem 751 00:36:30,820 --> 00:36:33,590 dass ich laufen, dass die Datei ist, die ist 752 00:36:33,590 --> 00:36:38,740 geht das Betriebs zu lehren System, was ein String ist, nur 753 00:36:38,740 --> 00:36:41,930 wie Standard io.h ist die Datei in dem Betriebssystem, das ist 754 00:36:41,930 --> 00:36:44,430 geht es zu lehren, was printf ist. 755 00:36:44,430 --> 00:36:46,810 >> Tatsächlich hätten wir bekommen eine sehr ähnliche Meldung 756 00:36:46,810 --> 00:36:50,600 wenn IO hatte Standard zugelassen Io.h und versuchte printf zu verwenden. 757 00:36:50,600 --> 00:36:53,632 Also werde ich voran gehen und einfach Take Control L mein Bildschirm zu löschen. 758 00:36:53,632 --> 00:36:56,340 Oder Sie können klar geben, und es wird Sie einfach das Terminalfenster. 759 00:36:56,340 --> 00:36:58,020 Aber man kann immer noch in der Zeit zurückblättern. 760 00:36:58,020 --> 00:37:01,100 >> Und ich werde machen String erneut ausführen. 761 00:37:01,100 --> 00:37:03,660 Überqueren Sie meine Finger diesmal ein. 762 00:37:03,660 --> 00:37:05,380 Oh mein Gott, es hat funktioniert. 763 00:37:05,380 --> 00:37:09,280 es zeigt mir einen langen kryptischen Befehl das ist, was über Clang Stellen erzeugt, 764 00:37:09,280 --> 00:37:10,460 aber keine Fehlermeldungen. 765 00:37:10,460 --> 00:37:12,460 So realisieren, auch wenn Sie könnte bekommen vollständig 766 00:37:12,460 --> 00:37:14,480 überwältigt von der Anzahl der Fehlermeldungen, 767 00:37:14,480 --> 00:37:17,540 nur könnte es dieses lästige Kaskadierung sein Effekt, wo Clang nicht versteht 768 00:37:17,540 --> 00:37:19,620 eine Sache, die es dann bedeutet nicht das nächste Wort zu verstehen, 769 00:37:19,620 --> 00:37:20,560 oder die nächste Zeile. 770 00:37:20,560 --> 00:37:22,850 Und so würgt es nur auf Ihrem Code. 771 00:37:22,850 --> 00:37:24,440 Aber das Update könnte einfach sein. 772 00:37:24,440 --> 00:37:27,822 Und so konzentrieren sich immer auf die erste Zeile der Ausgabe. 773 00:37:27,822 --> 00:37:29,530 Und wenn Sie dies nicht tun verstehen es, schauen Sie 774 00:37:29,530 --> 00:37:32,480 für Keywords, die möglicherweise Hinweise und die Zeilennummer, 775 00:37:32,480 --> 00:37:34,650 und das Zeichen, wo dass Fehler sein könnte. 776 00:37:34,650 --> 00:37:40,328 >> Nun lassen Sie mich gehen Sie voran und geben Sie dot slash, Schnur, ein. 777 00:37:40,328 --> 00:37:44,340 Hm, es sagt nicht hallo nichts. 778 00:37:44,340 --> 00:37:46,210 Warum? 779 00:37:46,210 --> 00:37:48,170 Nun, erinnern, wo es läuft? 780 00:37:48,170 --> 00:37:53,730 >> Es ist wahrscheinlich im Moment stecken in einer Schleife, wenn man so will, auf der Linie sechs, 781 00:37:53,730 --> 00:37:56,950 weil der String von Design, geschrieben von CS50 Personal, 782 00:37:56,950 --> 00:38:00,350 wörtlich gemeint ist, einfach nur sitzen dort warten, und warten, 783 00:38:00,350 --> 00:38:01,850 und wartet auf einen String. 784 00:38:01,850 --> 00:38:03,792 Alles, was wir von String meine ist, menschliches Zutun. 785 00:38:03,792 --> 00:38:04,500 So wissen Sie was? 786 00:38:04,500 --> 00:38:05,166 Lassen Sie mich gehen Sie vor. 787 00:38:05,166 --> 00:38:08,704 Und nur aus einer Laune heraus, lassen Sie mich Geben Sie meinen Namen, David, ein. 788 00:38:08,704 --> 00:38:10,120 Jetzt habe ich ein dynamisches Programm. 789 00:38:10,120 --> 00:38:11,240 Es wird gesagt, hallo David. 790 00:38:11,240 --> 00:38:16,280 >> Wenn ich gehe voran und führen diese wieder, lassen Sie mich versuchen Zamila Namen sagen, ein. 791 00:38:16,280 --> 00:38:17,940 Und jetzt haben wir ein dynamisches Programm. 792 00:38:17,940 --> 00:38:19,380 Ich habe nicht hart Welt codiert. 793 00:38:19,380 --> 00:38:21,760 Ich habe nicht hart codiert nennen, oder David oder Zamila. 794 00:38:21,760 --> 00:38:25,350 >> Jetzt ist es viel mehr wie die Programme wir wissen, wo, wenn es Eingang nehmen, 795 00:38:25,350 --> 00:38:27,870 sie produziert etwas unterschiedlich ausfallen. 796 00:38:27,870 --> 00:38:31,020 Nun ist dies nicht die beste User Experience, oder UX. 797 00:38:31,020 --> 00:38:33,000 Ich betreibe das Programm. 798 00:38:33,000 --> 00:38:35,830 >> Ich weiß nicht, was ich soll zu tun, es sei denn, ich sehe eigentlich 799 00:38:35,830 --> 00:38:37,290 oder denken Sie daran, den Quellcode. 800 00:38:37,290 --> 00:38:39,640 Also lassen Sie uns den Benutzer machen erleben ein wenig besser 801 00:38:39,640 --> 00:38:41,240 mit einfachsten Dingen. 802 00:38:41,240 --> 00:38:44,782 Lassen Sie mich in diese zurück Programm und einfach printf sagen. 803 00:38:44,782 --> 00:38:48,870 >> Und lassen Sie mich voran gehen und sagen, Namen, Dickdarm-, und ein Raum, und dann ein Semikolon. 804 00:38:48,870 --> 00:38:51,170 Und gerade für Tritte, kein Spiel n. 805 00:38:51,170 --> 00:38:52,980 Und das ist bewusste, weil ich nicht will 806 00:38:52,980 --> 00:38:54,590 die Aufforderung zur nächsten Zeile zu bewegen. 807 00:38:54,590 --> 00:38:58,800 >> Ich möchte, dies stattdessen tun, machen Zeichenfolge mein Code in neue Maschine neu zu kompilieren 808 00:38:58,800 --> 00:39:00,980 Code dot slash String. 809 00:39:00,980 --> 00:39:02,460 Ah, das ist viel schöner. 810 00:39:02,460 --> 00:39:05,780 Jetzt weiß ich eigentlich, was der Computer will, dass ich es zu tun, einen Namen geben. 811 00:39:05,780 --> 00:39:10,020 >> Also werde ich voran gehen und geben Sie in Rob, eingeben und hallo, Rob. 812 00:39:10,020 --> 00:39:13,640 So, zu realisieren, dies ist immer noch, am Ende des Tages, nur neun Zeilenprogramm. 813 00:39:13,640 --> 00:39:15,090 Aber wir haben diese kleine Schritte gemacht. 814 00:39:15,090 --> 00:39:18,380 >> Wir schrieben eine Zeile, mit denen wir vertraut waren, printf, hallo Welt. 815 00:39:18,380 --> 00:39:19,980 Dann knöpfte wir ein wenig davon. 816 00:39:19,980 --> 00:39:21,560 Und wir bekommen String tatsächlich verwendet wird. 817 00:39:21,560 --> 00:39:23,362 Und wir warf diesen Wert in einer Variablen. 818 00:39:23,362 --> 00:39:26,070 Und dann gingen wir weiter und verbessert es weiter mit einer dritten Linie. 819 00:39:26,070 --> 00:39:29,220 Und dieser iterative Prozess der Schreiben von Software ist wirklich Schlüssel. 820 00:39:29,220 --> 00:39:33,420 In CS50, und das Leben im Allgemeinen, Sie sollten in der Regel sich nicht, 821 00:39:33,420 --> 00:39:36,800 haben ein Programm im Auge, und versuchen Sie schriftlich das ganze verdammte Ding auf einmal. 822 00:39:36,800 --> 00:39:40,810 >> Es wird zwangsläufig ergeben Weise mehr Fehler als wir uns hier gesehen haben. 823 00:39:40,810 --> 00:39:44,070 Selbst ich, bis zum heutigen Tag, ständig machen andere dumme Fehler, 824 00:39:44,070 --> 00:39:47,480 tatsächlich schwerer Fehler sind die sind schwerer zu verstehen. 825 00:39:47,480 --> 00:39:52,095 Aber Sie werden mehr Fehler zu machen, die mehr Codezeilen schreiben Sie alles auf einmal. 826 00:39:52,095 --> 00:39:54,220 Und so diese Praxis, ein wenig Code schreiben 827 00:39:54,220 --> 00:39:57,930 dass Sie mit vertraut sind, kompilieren es laufen, testen allgemeiner, 828 00:39:57,930 --> 00:40:01,370 bewegen on-- dann so wie wir gehalten Schichtung und Schichtung der letzten Woche, 829 00:40:01,370 --> 00:40:04,190 von etwas zu bauen, sehr einfach etwas komplexer, 830 00:40:04,190 --> 00:40:05,200 das Gleiche tun hier. 831 00:40:05,200 --> 00:40:08,500 Setzen Sie sich nicht nach unten, und versuchen, ein ganzes Problem zu schreiben. 832 00:40:08,500 --> 00:40:10,780 Eigentlich nehmen diese Baby-Schritte. 833 00:40:10,780 --> 00:40:15,100 >> Nun sind Strings nicht alle dass nützlich zu sich selbst. 834 00:40:15,100 --> 00:40:18,210 Wir sollten eigentlich, im Idealfall, wie zu haben etwas anderes in unserem Toolkit. 835 00:40:18,210 --> 00:40:20,990 Lassen Sie uns also genau das tun, tatsächlich so. 836 00:40:20,990 --> 00:40:24,900 >> Lassen Sie mich voran gehen jetzt und Peitsche ein etwas anderes Programm. 837 00:40:24,900 --> 00:40:28,320 Und wir werden diese Int.C nennen, für integer. 838 00:40:28,320 --> 00:40:30,870 Ich werde, ähnlich, umfassen CS550.h. 839 00:40:30,870 --> 00:40:33,060 Ich werde Standard IO aufzunehmen. 840 00:40:33,060 --> 00:40:36,630 Und das wird ziemlich häufig zu sein in diesen ersten Tagen der Klasse. 841 00:40:36,630 --> 00:40:39,050 >> Und ich werde bereit selbst mit einer Hauptfunktion. 842 00:40:39,050 --> 00:40:43,370 Und nun statt einer Zeichenfolge bekommen, Lassen Sie uns fortfahren und einen int bekommen. 843 00:40:43,370 --> 00:40:49,285 Nennen wir es i, und nennen Sie es bekommen int, in der Nähe Pars, Semikolon. 844 00:40:49,285 --> 00:40:51,410 Und jetzt wollen wir tun etwas mit ihm, printf. 845 00:40:51,410 --> 00:40:56,190 >> Lassen Sie uns sagen, so etwas wie hallo, Backslash n, Komma i. 846 00:40:56,190 --> 00:41:00,010 Also ich bin ziemlich viel imitiert was ich getan habe vorhin gerade. 847 00:41:00,010 --> 00:41:01,660 Ich habe einen Platzhalter hier. 848 00:41:01,660 --> 00:41:05,150 Ich habe ich hier Komma, weil ich will, Plug i in den Platzhalter. 849 00:41:05,150 --> 00:41:07,250 >> Lassen Sie uns so weitermachen und versuchen Erstellung dieses Programms. 850 00:41:07,250 --> 00:41:10,060 Die Datei heißt int.c. 851 00:41:10,060 --> 00:41:12,920 Also werde ich sagen, int machen, geben. 852 00:41:12,920 --> 00:41:16,420 Oh mein Gott, aber keine große Sache, nicht wahr? 853 00:41:16,420 --> 00:41:17,230 Es ist ein Fehler. 854 00:41:17,230 --> 00:41:19,810 >> Es gibt eine syntaktische Fehler hier so, dass das Programm nicht 855 00:41:19,810 --> 00:41:25,460 werden innerhalb Int.C, Zeile kompiliert sieben, Zeichen 27, Fehler Format 856 00:41:25,460 --> 00:41:28,400 gibt Typ char Star, was auch immer das ist. 857 00:41:28,400 --> 00:41:30,020 Aber das Argument Typ int. 858 00:41:30,020 --> 00:41:33,110 >> Also auch hier werden wir nicht zu-- obwohl heute eine Menge Material ist, 859 00:41:33,110 --> 00:41:35,710 wir gehen Sie zu überwältigen mit absolut jede Funktion von C, 860 00:41:35,710 --> 00:41:38,070 und Programmierung allgemeiner gerade in diesen ersten paar Wochen. 861 00:41:38,070 --> 00:41:40,400 Also, es geht oft um Jargon mit denen Sie nicht vertraut. 862 00:41:40,400 --> 00:41:43,350 Und in der Tat, char Stern ist etwas wir gehen zurück zu kommen 863 00:41:43,350 --> 00:41:44,830 in einer Woche oder zwei Zeit. 864 00:41:44,830 --> 00:41:47,530 >> Aber jetzt wollen wir mal sehen, ob wir können analysieren Wörter, die vertraut sind. 865 00:41:47,530 --> 00:41:50,750 Formats-- so hörten wir Format Bezeich, Format-Code vor. 866 00:41:50,750 --> 00:41:51,840 Das ist bekannt. 867 00:41:51,840 --> 00:41:53,840 Type-- aber das Argument vom Typ int hat. 868 00:41:53,840 --> 00:41:55,980 Warten Sie eine Minute, ich ist ein int. 869 00:41:55,980 --> 00:41:59,230 >> Vielleicht Prozent s tatsächlich hat einige definierte Bedeutung. 870 00:41:59,230 --> 00:42:00,230 Und in der Tat, es tut. 871 00:42:00,230 --> 00:42:03,101 Eine ganze Zahl, wenn Sie möchten, printf es zu ersetzen, 872 00:42:03,101 --> 00:42:05,350 Sie haben tatsächlich eine zu verwenden verschiedene Formatangabe. 873 00:42:05,350 --> 00:42:06,890 Und Sie würden nicht wissen es sei denn, jemand gesagt, 874 00:42:06,890 --> 00:42:07,973 oder Sie hatte es schon getan. 875 00:42:07,973 --> 00:42:10,490 Aber Prozent i ist, was werden häufig verwendet 876 00:42:10,490 --> 00:42:12,240 in printf in einer ganzen Zahl für die Verstopfung. 877 00:42:12,240 --> 00:42:14,920 Sie können auch Prozent verwenden d für eine ganze Dezimalzahl. 878 00:42:14,920 --> 00:42:16,490 Aber ich ist schön und einfach hier. 879 00:42:16,490 --> 00:42:17,590 Also werden wir mit, dass zu gehen. 880 00:42:17,590 --> 00:42:21,160 >> Nun lassen Sie mich gehen Sie vor und Rerun make int, eingeben. 881 00:42:21,160 --> 00:42:23,328 Das ist gut, keine Fehler. 882 00:42:23,328 --> 00:42:27,260 Dot Slash int-- OK, schlechte Benutzererfahrung, weil ich mich nicht erklärt haben, 883 00:42:27,260 --> 00:42:27,760 was ist zu tun. 884 00:42:27,760 --> 00:42:28,426 Aber das ist in Ordnung. 885 00:42:28,426 --> 00:42:29,480 Ich fange schnell auf. 886 00:42:29,480 --> 00:42:36,260 >> Und jetzt lassen Sie mich gehen Sie vor und Geben Sie in David, OK, Zamila, Rob. 887 00:42:36,260 --> 00:42:37,820 OK, so ist dies eine gute Sache. 888 00:42:37,820 --> 00:42:41,710 Dieses Mal, ich bin mit einer Funktion, ein Puzzle-Stück, get int genannt. 889 00:42:41,710 --> 00:42:44,230 Und es stellt sich out-- und wir werden sehen diese später in der term-- 890 00:42:44,230 --> 00:42:47,730 das CS50 Personal eingeführt hat erhalten Zeichenfolge so 891 00:42:47,730 --> 00:42:50,350 dass es nur körperlich für Sie ein String. 892 00:42:50,350 --> 00:42:54,340 >> Es hat int get implementiert in so dass es nur 893 00:42:54,340 --> 00:42:55,590 erhalten eine ganze Zahl für Sie. 894 00:42:55,590 --> 00:42:57,830 Und wenn Sie, der Mensch, nicht kooperieren, ist es 895 00:42:57,830 --> 00:43:00,590 buchstäblich gehen nur zu versuchen Sie es erneut sagen, wiederholen, wiederholen, 896 00:43:00,590 --> 00:43:05,200 buchstäblich sitzen Looping, bis Sie verpflichten mit etwas magische Zahl, 897 00:43:05,200 --> 00:43:07,670 wie 50, und hallo 50. 898 00:43:07,670 --> 00:43:11,440 >> Oder wenn wir laufen auch in diesem und geben Sie in 42, hallo 42. 899 00:43:11,440 --> 00:43:15,750 Und so funktionieren die get int innerhalb dieses Puzzleteil 900 00:43:15,750 --> 00:43:19,050 ist genug Logik, genug Gedanken, um herauszufinden, was ist ein Wort? 901 00:43:19,050 --> 00:43:20,330 Und was ist eine Zahl? 902 00:43:20,330 --> 00:43:23,165 Nur die Annahme letztlich Zahlen. 903 00:43:23,165 --> 00:43:25,690 904 00:43:25,690 --> 00:43:30,230 >> So stellt sich heraus, dass diese ist gar nicht so ausdrucksstark. 905 00:43:30,230 --> 00:43:30,910 bisher. 906 00:43:30,910 --> 00:43:33,690 Also, yay, letzte Mal, dass wir ging ziemlich schnell 907 00:43:33,690 --> 00:43:38,320 in der Umsetzung Spiele und Animation, und künstlerische Arbeiten in Scratch. 908 00:43:38,320 --> 00:43:42,260 Und hier sind wir zufrieden zu sein mit Hallo Welt, und hallo 50. 909 00:43:42,260 --> 00:43:43,696 >> Es ist gar nicht so inspirierend. 910 00:43:43,696 --> 00:43:46,070 Und in der Tat, diese ersten paar Beispiele wird noch einige Zeit in Anspruch nehmen 911 00:43:46,070 --> 00:43:47,510 Rampe in Aufregung auf. 912 00:43:47,510 --> 00:43:49,854 Aber wir haben so viel mehr jetzt steuern, in der Tat. 913 00:43:49,854 --> 00:43:51,770 Und wir werden sehr Start schnell Schichtung 914 00:43:51,770 --> 00:43:53,870 auf dieser grundlegenden Primitiven. 915 00:43:53,870 --> 00:43:56,370 >> Aber lassen Sie uns zuerst verstehen wo die Grenzen sind. 916 00:43:56,370 --> 00:43:58,620 In der Tat, eines der Dinge, Scratch nicht leicht 917 00:43:58,620 --> 00:44:00,990 Lassen Sie uns tun wirklich aussehen unter der Haube, 918 00:44:00,990 --> 00:44:03,740 und zu verstehen, was ein Computer ist, was es tun kann, 919 00:44:03,740 --> 00:44:05,250 und was ihre Grenzen sind. 920 00:44:05,250 --> 00:44:08,580 Und in der Tat, dass der Mangel an Verständnis, möglicherweise, langfristige 921 00:44:08,580 --> 00:44:12,520 können unseren eigenen mistakes-- Schreiben führen Bugs, unsichere Software zu schreiben, die 922 00:44:12,520 --> 00:44:13,880 wird in irgendeiner Weise gehackt. 923 00:44:13,880 --> 00:44:17,130 >> Also lassen Sie uns einige Schritte unternehmen, um zu Verständnis dieser ein wenig besser durch 924 00:44:17,130 --> 00:44:19,710 Weg von sagen wir das folgende Beispiel. 925 00:44:19,710 --> 00:44:23,550 Ich gehe voran zu gehen und zu implementieren ganz schnell ein Programm namens Adder. 926 00:44:23,550 --> 00:44:25,134 Wie, lassen Sie uns gemeinsam ein paar Zahlen addieren. 927 00:44:25,134 --> 00:44:27,800 Und ich werde ein paar Ecken zu codieren hier und Kopieren und Einfügen einfach 928 00:44:27,800 --> 00:44:30,270 wo ich vorher war, nur so können wir gehen früher zu bekommen. 929 00:44:30,270 --> 00:44:33,090 So, jetzt habe ich die grundlegenden Anfänge bekam von einem Programm namens Adder. 930 00:44:33,090 --> 00:44:34,670 >> Und lassen Sie uns gehen Sie vor und tun dies. 931 00:44:34,670 --> 00:44:38,680 Ich gehe voran gehen und sagen wir, bekommt INTX int bekommen. 932 00:44:38,680 --> 00:44:39,430 Und weisst du was? 933 00:44:39,430 --> 00:44:40,990 Lassen Sie uns eine bessere Benutzererfahrung zu machen. 934 00:44:40,990 --> 00:44:45,740 >> Also lassen Sie uns einfach sagen, x und effektiv den Benutzer auffordern, uns x zu geben. 935 00:44:45,740 --> 00:44:50,600 Und dann lassen Sie mich voran gehen und sagen, printf wie etwa y, diesmal erwartet 936 00:44:50,600 --> 00:44:53,140 zwei Werte von dem Benutzer. 937 00:44:53,140 --> 00:44:59,759 Und dann gehen wir einfach weiter und etwa printf, die Summe von x und y ist. 938 00:44:59,759 --> 00:45:01,300 Und jetzt will ich nicht Prozent s zu tun. 939 00:45:01,300 --> 00:45:09,080 Ich möchte Prozent ich tun, Backslash n, und schließen Sie dann Summenwert. 940 00:45:09,080 --> 00:45:10,620 >> Also, wie kann ich tun, um dies zu tun? 941 00:45:10,620 --> 00:45:11,270 Weißt du was? 942 00:45:11,270 --> 00:45:12,840 Ich weiß, wie Variablen zu verwenden. 943 00:45:12,840 --> 00:45:15,140 Lassen Sie mich erklären, einfach ein neues, int z. 944 00:45:15,140 --> 00:45:16,770 >> Und ich werde hier eine Vermutung zu nehmen. 945 00:45:16,770 --> 00:45:21,470 Wenn es Gleichheitszeichen in dieser Sprache, vielleicht kann ich nur tun, x plus y, 946 00:45:21,470 --> 00:45:23,660 so lange, wie ich mein Ende dachte mit einem Semikolon? 947 00:45:23,660 --> 00:45:28,170 Jetzt kann ich dann wieder hier, stecken in z, beenden diesen Gedanken mit einem Semikolon. 948 00:45:28,170 --> 00:45:33,160 Und lassen Sie uns jetzt sehen, wenn diese Sequenzen von lines-- x int erhalten. 949 00:45:33,160 --> 00:45:34,770 Y int erhalten. 950 00:45:34,770 --> 00:45:37,980 >> Add x und y, speichern Sie den Wert in z-- so wieder, denken Sie daran das Gleichheitszeichen 951 00:45:37,980 --> 00:45:38,560 ist nicht gleich. 952 00:45:38,560 --> 00:45:41,100 Es ist Zuordnung von rechts nach links. 953 00:45:41,100 --> 00:45:45,180 Und lassen Sie uns, dass die Summe auszudrucken von x und y nicht buchstäblich z, 954 00:45:45,180 --> 00:45:46,830 aber was drin ist z. 955 00:45:46,830 --> 00:45:50,090 Also lassen Sie uns Adder machen - schön, diesmal keine Fehler. 956 00:45:50,090 --> 00:45:53,030 Dot Slash Adder, geben, x wird 1 sein. 957 00:45:53,030 --> 00:45:55,380 >> Y wird 2 sein. 958 00:45:55,380 --> 00:45:58,964 Und die Summe von x und y 3 ist. 959 00:45:58,964 --> 00:46:00,130 Also das ist alles schön und gut. 960 00:46:00,130 --> 00:46:03,260 >> Also würden Sie, dass Mathematik vorstellen sollte wie folgt in einem Programm zu arbeiten. 961 00:46:03,260 --> 00:46:04,040 Aber weißt du was? 962 00:46:04,040 --> 00:46:06,904 Ist diese Variable, Linie 12, sogar notwendig? 963 00:46:06,904 --> 00:46:09,820 Sie müssen nicht in der Gewohnheit, nur die Speicherung Dinge in Variablen 964 00:46:09,820 --> 00:46:10,980 nur weil du kannst. 965 00:46:10,980 --> 00:46:13,550 Und in der Tat, es ist im Allgemeinen als schlecht Design 966 00:46:13,550 --> 00:46:18,100 Wenn Sie eine Variable erstellen, genannt z in diesem Fall, Speicherung etwas darin, 967 00:46:18,100 --> 00:46:21,390 und dann sofort mit ihm, aber nie wieder. 968 00:46:21,390 --> 00:46:24,700 Warum etwas geben Sie einen Namen wenn Sie wie z sind buchstäblich 969 00:46:24,700 --> 00:46:26,770 nicht benutzen wollen, dass Sache nur einmal, und so 970 00:46:26,770 --> 00:46:29,380 proximal zu dem Sie erstellt es in erster Linie, 971 00:46:29,380 --> 00:46:31,052 so nahe in Bezug auf die Codezeilen? 972 00:46:31,052 --> 00:46:31,760 So wissen Sie was? 973 00:46:31,760 --> 00:46:34,480 Es stellt sich heraus, dass C ziemlich flexibel ist. 974 00:46:34,480 --> 00:46:36,586 Wenn ich will, tatsächlich zu Plug-in-Werten hier, 975 00:46:36,586 --> 00:46:38,210 Ich brauche nicht eine neue Variable zu deklarieren. 976 00:46:38,210 --> 00:46:41,680 Ich konnte einfach Plug-in-x plus y, weil C versteht 977 00:46:41,680 --> 00:46:43,390 Rechnen und mathematische Operatoren. 978 00:46:43,390 --> 00:46:47,140 >> So kann ich einfach sagen, tun dies Mathe, x plus y, was diese Werte sind, 979 00:46:47,140 --> 00:46:50,780 Stecken Sie das resultierende integer in diesen String. 980 00:46:50,780 --> 00:46:53,730 Also könnte dies, obwohl nur eine Zeile kürzer, 981 00:46:53,730 --> 00:46:58,480 ein besseres Design, ein besseres Programm, weil es weniger Code, deshalb 982 00:46:58,480 --> 00:46:59,921 weniger für mich zu verstehen. 983 00:46:59,921 --> 00:47:01,920 Und es ist auch nur sauberer, soweit wir nicht 984 00:47:01,920 --> 00:47:04,620 Einführung neuer Wörter, neue Symbole, wie z, 985 00:47:04,620 --> 00:47:07,510 obwohl sie nicht wirklich dienen viel von einem Zweck. 986 00:47:07,510 --> 00:47:12,890 >> Leider Mathe ist nicht alles, was die zuverlässige manchmal. 987 00:47:12,890 --> 00:47:15,270 Fahren wir fort und tun dies. 988 00:47:15,270 --> 00:47:18,200 Ich gehe voran gehen jetzt und gehen Sie wie folgt. 989 00:47:18,200 --> 00:47:27,650 >> Lassen Sie uns tun printf Prozent i plus Prozent i, soll Prozent i, Backslash n sein. 990 00:47:27,650 --> 00:47:32,240 Und ich werde this-- xyx plus y zu tun. 991 00:47:32,240 --> 00:47:34,821 Also werde ich einfach neu zu schreiben dies etwas anders hier. 992 00:47:34,821 --> 00:47:36,320 Lassen Sie mich nur eine schnelle Plausibilitätsprüfung tun. 993 00:47:36,320 --> 00:47:37,986 Auch hier wollen wir nicht vorgreifen. 994 00:47:37,986 --> 00:47:41,420 Machen Sie Addierer, Punkt slash Addierer. 995 00:47:41,420 --> 00:47:44,950 x 1 ist, y ist 2, 1 plus 2 3 ist. 996 00:47:44,950 --> 00:47:45,870 Also das ist gut. 997 00:47:45,870 --> 00:47:49,060 Aber lassen Sie uns dies erschweren jetzt ein bisschen, und eine neue Datei erstellen. 998 00:47:49,060 --> 00:47:53,350 >> Ich werde diese Frage zu nennen, sagen, Ints, Plural für ganze Zahlen. 999 00:47:53,350 --> 00:47:55,980 Lassen Sie mich beginnen, wo ich vor einem Augenblick war. 1000 00:47:55,980 --> 00:47:57,770 Aber jetzt wollen wir mal ein paar andere Linien zu tun. 1001 00:47:57,770 --> 00:48:03,430 Lassen Sie mich gehen Sie vor und gehen Sie wie folgt, printf Prozent i, minus Prozent i, 1002 00:48:03,430 --> 00:48:08,959 ist Prozent i, Komma x, Komma yx minus y. 1003 00:48:08,959 --> 00:48:10,750 Also ich mache etwas verschiedene Mathematik gibt. 1004 00:48:10,750 --> 00:48:11,624 Lassen Sie uns ein anderes tun. 1005 00:48:11,624 --> 00:48:16,610 So Prozent i mal Prozent i Prozent i, Backslash n. 1006 00:48:16,610 --> 00:48:21,430 Lassen Sie uns Plug-in x und y, und x mal y. 1007 00:48:21,430 --> 00:48:24,530 Wir werden das Sternchen auf Ihren Computer für Zeiten. 1008 00:48:24,530 --> 00:48:26,390 >> Sie verwenden x nicht. x ist ein Variablenname hier. 1009 00:48:26,390 --> 00:48:28,270 Sie verwenden den Stern für die Multiplikation. 1010 00:48:28,270 --> 00:48:29,020 Lassen Sie uns ein mehr tun. 1011 00:48:29,020 --> 00:48:34,580 Printf Prozent I, geteilt percent i, ist Prozent i, 1012 00:48:34,580 --> 00:48:40,460 Backslash n. xy geteilt durch Y- so verwenden Sie den Schrägstrich in C 1013 00:48:40,460 --> 00:48:41,502 zu tun Division. 1014 00:48:41,502 --> 00:48:42,460 Und lassen Sie uns einen anderen tun. 1015 00:48:42,460 --> 00:48:47,920 1016 00:48:47,920 --> 00:48:55,240 Der Rest des Prozent i, geteilt percent i, ist Prozent i. 1017 00:48:55,240 --> 00:48:59,550 xy-- und jetzt Rest ist das, was übrig ist. 1018 00:48:59,550 --> 00:49:02,980 Wenn Sie versuchen, eine Teilung Nenner in einen Zähler, 1019 00:49:02,980 --> 00:49:05,570 wie viel übrig bleibt, dass Sie konnte sich nicht teilen aus? 1020 00:49:05,570 --> 00:49:07,910 >> So gibt es nicht wirklich, notwendigerweise, ein Symbol 1021 00:49:07,910 --> 00:49:09,470 wir haben für diese in der Grundschule verwendet. 1022 00:49:09,470 --> 00:49:13,830 Aber es in C können Sie sagen x modulo y, wobei 1023 00:49:13,830 --> 00:49:18,000 diese Prozentzeichen in diesem context-- verwirrender, wenn Sie im Inneren sind 1024 00:49:18,000 --> 00:49:20,170 der doppelte Anführungszeichen, innerhalb von printf, Prozent 1025 00:49:20,170 --> 00:49:21,830 wird als Formatangabe verwendet. 1026 00:49:21,830 --> 00:49:25,420 >> Wenn Sie Prozent außerhalb daß in einem mathematischen Ausdruck, 1027 00:49:25,420 --> 00:49:29,910 es ist der Modulo-Operator für modulare arithmetic-- für unsere Zwecke 1028 00:49:29,910 --> 00:49:33,650 hier bedeutet nur, was ist das Rest von x nach y geteilt? 1029 00:49:33,650 --> 00:49:36,130 So x durch y geteilt ist x Strich y. 1030 00:49:36,130 --> 00:49:38,220 Was ist der Rest von x nach y geteilt? 1031 00:49:38,220 --> 00:49:41,780 Es ist x mod y, wie ein Programmierer sagen würde. 1032 00:49:41,780 --> 00:49:48,300 >> Also, wenn ich keine Fehler gemacht hier, lassen Sie mich gehen Sie vor und machen Ints, Plural, schön, 1033 00:49:48,300 --> 00:49:50,010 und Punktstrich ints. 1034 00:49:50,010 --> 00:49:55,270 Und lassen Sie uns gehen Sie vor und tun, sagen wir mal, 1, 10. 1035 00:49:55,270 --> 00:49:58,390 In Ordnung, 1 plus 10 11, zu überprüfen. 1036 00:49:58,390 --> 00:50:01,240 1 minus 10 ist negativ 9, zu überprüfen. 1037 00:50:01,240 --> 00:50:03,420 >> 1 mal 10 10, zu überprüfen. 1038 00:50:03,420 --> 00:50:07,090 1 geteilt durch 10 ist-- OK, wir, dass man überspringen. 1039 00:50:07,090 --> 00:50:09,480 Restbestände von 1 geteilt durch 10 ist 1. 1040 00:50:09,480 --> 00:50:10,680 Das ist richtig. 1041 00:50:10,680 --> 00:50:12,630 Aber es ist ein Fehler in hier. 1042 00:50:12,630 --> 00:50:15,390 >> Also das eine habe ich meine übergeben, nicht korrekt. 1043 00:50:15,390 --> 00:50:16,670 Ich meine, es ist nahe 0. 1044 00:50:16,670 --> 00:50:20,670 1 durch 10 geteilt, wissen Sie, wenn wir einige Ecken schneiden, sicher, es ist null. 1045 00:50:20,670 --> 00:50:28,050 Aber es sollte wirklich 1/10 sein, 0,1 oder 0,10, 0,1000, oder so weiter. 1046 00:50:28,050 --> 00:50:30,600 >> Es sollte wirklich nicht Null sein. 1047 00:50:30,600 --> 00:50:35,990 Nun, es stellt sich heraus, dass der Computer tun buchstäblich, was wir gesagt, es zu tun. 1048 00:50:35,990 --> 00:50:39,460 Wir tun Mathe wie x durch y geteilt. 1049 00:50:39,460 --> 00:50:44,680 Und beide x und y, pro die Leitungen früher von Code, ganze Zahlen sind. 1050 00:50:44,680 --> 00:50:50,440 >> Außerdem auf der Linie 15, wir sind erzählt printf, hey, printf-Plug-in 1051 00:50:50,440 --> 00:50:54,230 eine ganze Zahl, Plug-in eine ganze Zahl, Plug-in-einem integer-- speziell 1052 00:50:54,230 --> 00:50:57,580 x, y, und dann, und dann x geteilt durch y. x und y Ganzzahlen. 1053 00:50:57,580 --> 00:50:59,060 Wir sind da gut. 1054 00:50:59,060 --> 00:51:01,250 >> Aber was ist x durch x geteilt? 1055 00:51:01,250 --> 00:51:06,790 x geteilt durch y sein sollte, mathematisch, 1/10 oder 0,1, 1056 00:51:06,790 --> 00:51:11,600 die eine reelle Zahl ist, eine reelle Zahl, mit potenziell einen Dezimalpunkt. 1057 00:51:11,600 --> 00:51:13,230 Es ist nicht eine ganze Zahl ist. 1058 00:51:13,230 --> 00:51:18,290 >> Aber was ist der nächste integer bis 1/10 oder 0,1? 1059 00:51:18,290 --> 00:51:21,114 Ja, es ist eine Art von Null. 1060 00:51:21,114 --> 00:51:22,030 0,1 ist wie dieser viel. 1061 00:51:22,030 --> 00:51:22,890 Und 1 ist so viel. 1062 00:51:22,890 --> 00:51:25,870 So ist 1/10 näher 0, als es ist zu eins. 1063 00:51:25,870 --> 00:51:30,800 >> Und so was C tut für us-- Art, weil wir es gesagt zu-- 1064 00:51:30,800 --> 00:51:32,600 diese ganze Zahl ist abgeschnitten. 1065 00:51:32,600 --> 00:51:40,540 Es dauert den Wert, was wiederum soll so etwas wie 0,1000 zu sein, 1066 00:51:40,540 --> 00:51:41,800 0 und so weiter. 1067 00:51:41,800 --> 00:51:45,320 Und es ist alles Kürzen nach dem Komma 1068 00:51:45,320 --> 00:51:47,510 so dass dies alles Sachen, weil es nicht tut 1069 00:51:47,510 --> 00:51:51,910 passen in die Vorstellung von einer ganzen Zahl, die ist nur eine Zahl wie negativ 1, 0, 1, 1070 00:51:51,910 --> 00:51:55,830 nach oben und unten, wirft sie weg alles nach dem Komma, weil Sie 1071 00:51:55,830 --> 00:51:59,020 kann kein Komma passen in einem ganzzahligen per Definition. 1072 00:51:59,020 --> 00:52:01,290 >> Also hier ist die Antwort Null. 1073 00:52:01,290 --> 00:52:02,600 So, wie wir dieses Problem beheben? 1074 00:52:02,600 --> 00:52:04,400 Wir brauchen eine andere Lösung alle zusammen. 1075 00:52:04,400 --> 00:52:06,880 Und wir können dies tun, wie folgt. 1076 00:52:06,880 --> 00:52:12,820 >> Lassen Sie mich gehen Sie vor und erstellen Sie eine neue Datei mit dem Namen dieses floats.c. 1077 00:52:12,820 --> 00:52:16,500 Und speichern Sie es hier in der Verzeichnis, float.c. 1078 00:52:16,500 --> 00:52:19,360 1079 00:52:19,360 --> 00:52:23,260 Und lassen Sie mich gehen Sie vor und kopieren einige dieser Code aus früheren. 1080 00:52:23,260 --> 00:52:27,690 >> Aber anstatt des Erhaltens int, lassen Sie uns dies tun. 1081 00:52:27,690 --> 00:52:31,037 Gib mir einen Fließkommawert genannt x. wo ein Floating-Point 1082 00:52:31,037 --> 00:52:33,370 Wert ist nur wörtlich etwas mit einem Floating-Point. 1083 00:52:33,370 --> 00:52:34,410 Es kann nach links zu bewegen, nach rechts. 1084 00:52:34,410 --> 00:52:35,530 Es ist eine reelle Zahl. 1085 00:52:35,530 --> 00:52:38,050 >> Und lassen Sie mich rufen nicht bekommen int, aber bekommen Schwimmer, 1086 00:52:38,050 --> 00:52:41,420 das war auch unter dem Menü von Optionen in der C250-Bibliothek. 1087 00:52:41,420 --> 00:52:43,220 Lassen Sie uns y mit einem Schwimmer ändern. 1088 00:52:43,220 --> 00:52:45,000 So wird dieser Schwimmer bekommen. 1089 00:52:45,000 --> 00:52:47,620 >> Und jetzt wollen wir nicht in ints zu stopfen. 1090 00:52:47,620 --> 00:52:53,130 Es stellt sich heraus, dass wir Prozent zu verwenden, haben f für float, Prozent f für Schwimmer, 1091 00:52:53,130 --> 00:52:54,560 und jetzt speichern. 1092 00:52:54,560 --> 00:53:01,220 Und jetzt die Daumen, machen Schwimmer, schön, Punkt slash schwimmt. 1093 00:53:01,220 --> 00:53:04,280 x wird ein 1. y sein Wird 10 wieder zu sein. 1094 00:53:04,280 --> 00:53:08,240 >> Und schön, OK meine hinaus ist richtig. 1095 00:53:08,240 --> 00:53:10,240 Ich hatte gehofft, für mehr, aber ich habe vergessen, es zu schreiben. 1096 00:53:10,240 --> 00:53:13,250 Also lassen Sie uns gehen und diese logische Fehler zu beheben. 1097 00:53:13,250 --> 00:53:16,280 >> Fahren wir fort und die folgende greifen. 1098 00:53:16,280 --> 00:53:18,080 Wir tun nur ein wenig zum Kopieren und Einfügen. 1099 00:53:18,080 --> 00:53:20,080 Und ich werde Minus zu sagen. 1100 00:53:20,080 --> 00:53:21,890 >> Und ich werde mal zu sagen. 1101 00:53:21,890 --> 00:53:24,060 Und ich werde geteilt zu sagen. 1102 00:53:24,060 --> 00:53:28,240 Und ich werde nicht Modulo zu tun, die nicht als Germane hier, 1103 00:53:28,240 --> 00:53:33,690 dividiert durch f und Zeiten plus-- OK, lassen Sie uns noch einmal tun. 1104 00:53:33,690 --> 00:53:44,210 >> Machen Sie schwimmt, Punkt slash schwimmt, und 1, 10, und- schön, nein, OK. 1105 00:53:44,210 --> 00:53:45,250 Also ich bin ein Idiot. 1106 00:53:45,250 --> 00:53:47,000 So ist dies sehr häufig in der Informatik 1107 00:53:47,000 --> 00:53:49,780 dumme Fehler wie diese zu machen. 1108 00:53:49,780 --> 00:53:53,100 >> Für pädagogische Zwecke, was ich wirklich tun wollte 1109 00:53:53,100 --> 00:53:57,410 Änderung war die Wissenschaft hier zu plus, minus, zu Zeiten, 1110 00:53:57,410 --> 00:54:01,140 und zu teilen, wie Sie hoffentlich während dieser Übung bemerkt. 1111 00:54:01,140 --> 00:54:04,700 So, jetzt lassen Sie uns neu kompilieren diese Programm, tun dot slash schwimmt. 1112 00:54:04,700 --> 00:54:07,950 >> Und zum dritten Mal, lassen Sie uns sehen, ob es meine Erwartungen erfüllt. 1113 00:54:07,950 --> 00:54:21,480 1, 10, geben, ja, OK, 1.000, dividiert durch 10.000, ist 0,100000. 1114 00:54:21,480 --> 00:54:24,952 Und es stellt sich heraus, können wir steuern, wie viele Zahlen sind nach diesen Dezimalstellen. 1115 00:54:24,952 --> 00:54:25,660 Wir werden tatsächlich. 1116 00:54:25,660 --> 00:54:26,790 Wir werden darauf zurückkommen. 1117 00:54:26,790 --> 00:54:28,440 >> Aber jetzt, in der Tat ist die Mathematik richtig. 1118 00:54:28,440 --> 00:54:30,090 Also, noch einmal, was ist das Mitnehmen hier? 1119 00:54:30,090 --> 00:54:33,050 Es stellt sich heraus, dass in C gibt es gerade nicht nur strings-- und, in der Tat, 1120 00:54:33,050 --> 00:54:36,120 gibt es nicht wirklich, weil wir die mit der CS50-Bibliothek hinzufügen. 1121 00:54:36,120 --> 00:54:37,710 Aber es gibt nicht nur ints. 1122 00:54:37,710 --> 00:54:38,990 >> Es gibt auch schwimmt. 1123 00:54:38,990 --> 00:54:42,810 Und es stellt sich ein paar andere Daten aus Arten auch, dass wir schon bald nutzen. 1124 00:54:42,810 --> 00:54:46,270 Es stellte sich heraus, wenn Sie eine einzelne wollen Charakter, nicht um eine Zeichenfolge, 1125 00:54:46,270 --> 00:54:47,610 Sie können nur ein Zeichen verwenden. 1126 00:54:47,610 --> 00:54:52,350 >> Es stellte sich heraus, dass, wenn Sie einen Bool wollen, nur ein boolescher Wert, wahr oder falsch, 1127 00:54:52,350 --> 00:54:56,840 Dank der CS50-Bibliothek, wir haben als auch auf C den Datentyp bool hinzugefügt. 1128 00:54:56,840 --> 00:54:59,180 Aber es ist derzeit auch in viele andere Sprachen. 1129 00:54:59,180 --> 00:55:04,130 Und es stellt sich heraus, dass man manchmal müssen größere Zahlen dann kommen standardmäßig 1130 00:55:04,130 --> 00:55:05,210 mit ints und schwimmt. 1131 00:55:05,210 --> 00:55:10,590 >> Und in der Tat ist ein Doppel eine Zahl dass verwendet nicht 32 Bit, sondern 64 Bit. 1132 00:55:10,590 --> 00:55:14,990 Und eine lange, lange ist eine Zahl, verwendet nicht 32, Bits aber 64 Bits, 1133 00:55:14,990 --> 00:55:19,190 jeweils für Gleitkomma Werte und ganze Zahlen sind. 1134 00:55:19,190 --> 00:55:22,780 Also eigentlich lassen Sie uns jetzt In Aktion sehen. 1135 00:55:22,780 --> 00:55:26,150 >> Ich gehe voran, hier zu gehen und Peitsche ein anderes Programm auf. 1136 00:55:26,150 --> 00:55:32,020 Hier werde ich voran gehen und beinhalten CS50.h. 1137 00:55:32,020 --> 00:55:34,910 Und lassen Sie mich gehen, sind Standard-io.h 1138 00:55:34,910 --> 00:55:37,320 >> Und Sie werden etwas bemerken flippige geschieht hier. 1139 00:55:37,320 --> 00:55:40,592 Es ist die Farbe nicht Codierung Dinge in auf die gleiche Weise wie vorher. 1140 00:55:40,592 --> 00:55:43,550 Und es stellt sich heraus, dass, weil ich ist haben nicht die Sache einen Dateinamen gegeben. 1141 00:55:43,550 --> 00:55:47,270 >> Ich werde diese Frage zu nennen sizeof.c, und drücken Sie auf Speichern. 1142 00:55:47,270 --> 00:55:51,039 Und bemerken, was mit meinem sehr geschieht weiß Code gegen diese schwarzen Hintergrund. 1143 00:55:51,039 --> 00:55:52,830 Nun, zumindest gibt es einige dort lila. 1144 00:55:52,830 --> 00:55:54,490 Und es ist Syntax hervorgehoben. 1145 00:55:54,490 --> 00:55:57,700 >> Das liegt daran, ganz einfach, ich habe sagte der IDE, welche Art von Datei 1146 00:55:57,700 --> 00:56:01,060 es ist von ihm einen Namen zu geben, und speziell eine Dateierweiterung. 1147 00:56:01,060 --> 00:56:03,620 Nun lassen Sie uns gehen Sie vor und tun dies. 1148 00:56:03,620 --> 00:56:08,910 Ich werde weitermachen und sehr drucken Sie einfach die following-- Bool 1149 00:56:08,910 --> 00:56:11,080 ist Prozent LU. 1150 00:56:11,080 --> 00:56:12,950 >> Wir kommen wieder zu dass nur für einen Moment in. 1151 00:56:12,950 --> 00:56:15,840 Und dann werde ich Druckgröße von Bool. 1152 00:56:15,840 --> 00:56:18,170 Und jetzt, nur um zu sparen mich einige Zeit, ich bin 1153 00:56:18,170 --> 00:56:20,280 geht um ein Ganzes zu tun Bündel von diesen auf einmal. 1154 00:56:20,280 --> 00:56:24,620 Und gesagt, ich werde ändern Sie dies in einem char und char. 1155 00:56:24,620 --> 00:56:27,760 Dieser, ich werde zu ändern zu einem Doppelbett und ein Doppelzimmer. 1156 00:56:27,760 --> 00:56:31,440 >> Dieser, ich werde zu ändern mit einem Schwimmer und einem Schwimmer. 1157 00:56:31,440 --> 00:56:35,670 Dieser, ich werde Wechseln Sie zu einem int und einem int. 1158 00:56:35,670 --> 00:56:38,660 Und dieser, ich werde auf eine lange, lange zu ändern. 1159 00:56:38,660 --> 00:56:40,840 Und es ist immer noch unter eine lange Zeit, lange, lange. 1160 00:56:40,840 --> 00:56:44,572 >> Und dann schließlich gab ich mich einer zu viel, String. 1161 00:56:44,572 --> 00:56:47,030 Es stellt sich heraus, dass in C, gibt es die speziellen Operator genannt 1162 00:56:47,030 --> 00:56:50,260 Größe, das ist buchstäblich gehen, wenn laufen, 1163 00:56:50,260 --> 00:56:52,099 Erklären Sie uns die Größe von jede dieser Variablen. 1164 00:56:52,099 --> 00:56:53,890 Und dies ist eine Möglichkeit, jetzt wir können wieder verbinden 1165 00:56:53,890 --> 00:56:57,140 In den letzten Diskussion der Woche von Daten und Darstellung. 1166 00:56:57,140 --> 00:57:00,330 >> Lassen Sie mich gehen Sie vor und kompilieren Größe der Punktstrich Größe. 1167 00:57:00,330 --> 00:57:01,210 Und lassen Sie uns sehen. 1168 00:57:01,210 --> 00:57:05,210 Es stellt sich heraus, dass in C, speziell auf CS50 IDE, 1169 00:57:05,210 --> 00:57:08,170 speziell auf die Betriebssystem Ubuntu, 1170 00:57:08,170 --> 00:57:11,100 was ist ein 64-Bit-Betriebs System in diesem Fall 1171 00:57:11,100 --> 00:57:14,189 ein Bool wird sich ein Byte Speicherplatz verwenden. 1172 00:57:14,189 --> 00:57:16,480 Das ist, wie Größe gemessen wird, in Bits nicht, aber in Byte. 1173 00:57:16,480 --> 00:57:18,690 Und daran erinnern, dass ein Byte acht Bit. 1174 00:57:18,690 --> 00:57:22,030 So ein Bool, obwohl Sie auch technisch nur eine 0 oder 1 benötigen, 1175 00:57:22,030 --> 00:57:24,092 es ist ein wenig verschwenderisch wie wir haben es umgesetzt. 1176 00:57:24,092 --> 00:57:26,800 Es geht eigentlich um ein Ganzes zu verwenden byte-- so alle Nullen, sind vielleicht 1177 00:57:26,800 --> 00:57:31,050 alle diejenigen, oder so ähnlich, oder auch nur eine 1 unter den acht Bits. 1178 00:57:31,050 --> 00:57:34,962 >> Ein Zeichen, inzwischen für ein Zeichen verwendet wie ein ASCII-Zeichen pro letzte Woche, 1179 00:57:34,962 --> 00:57:36,170 wird ein Zeichen sein. 1180 00:57:36,170 --> 00:57:42,340 Und das synchs mit unseren Begriff der wobei nicht mehr als 256 bits-- vielmehr 1181 00:57:42,340 --> 00:57:45,360 synchs mit es nicht zu sein länger als 8 Bits, die 1182 00:57:45,360 --> 00:57:47,450 gibt uns so viele wie 256 Werte. 1183 00:57:47,450 --> 00:57:49,680 Ein Doppel wird sich 8 Byte oder 64 Bit betragen. 1184 00:57:49,680 --> 00:57:50,510 >> Ein Schwimmer ist 4. 1185 00:57:50,510 --> 00:57:51,690 Ein int ist 4. 1186 00:57:51,690 --> 00:57:52,980 Eine lange, lange 8. 1187 00:57:52,980 --> 00:57:54,716 Und ein String ist 8. 1188 00:57:54,716 --> 00:57:55,840 Aber keine Sorge darüber. 1189 00:57:55,840 --> 00:57:57,340 Wir gehen diese Schicht zu schälen zurück. 1190 00:57:57,340 --> 00:57:59,940 Es stellt sich heraus, Strings können mehr als 8 Bytes sein. 1191 00:57:59,940 --> 00:58:02,310 >> Und in der Tat haben wir geschrieben Saiten schon, hallo Welt, 1192 00:58:02,310 --> 00:58:03,700 länger als 8 Bytes. 1193 00:58:03,700 --> 00:58:06,270 Aber wir kommen wieder zu dass nur für einen Moment in. 1194 00:58:06,270 --> 00:58:09,690 Aber das Mitnehmen hier ist die folgende. 1195 00:58:09,690 --> 00:58:15,320 >> Jeder Computer hat nur eine endliche Speichermenge und Raum. 1196 00:58:15,320 --> 00:58:17,860 Sie können nur speichern, so viele Dateien auf Ihrem Mac oder PC. 1197 00:58:17,860 --> 00:58:23,030 Sie können nur speichern, so viele Programme in RAM auf einmal läuft, unbedingt, auch 1198 00:58:23,030 --> 00:58:26,360 mit virtuellen Speicher, weil Sie haben eine begrenzte Menge an RAM. 1199 00:58:26,360 --> 00:58:28,990 >> Und nur um picture-- wenn Sie geöffnet haben nie einen Laptop bis 1200 00:58:28,990 --> 00:58:31,300 oder zusätzlichen Speicher bestellt für einen Computer, Sie 1201 00:58:31,300 --> 00:58:33,670 vielleicht nicht wissen, dass innerhalb des Computers 1202 00:58:33,670 --> 00:58:36,590 etwas, das aussieht ein wenig wie diese. 1203 00:58:36,590 --> 00:58:40,540 So ist dies nur ein gemeinsames Unternehmen mit dem Namen Entscheidend, dass macht RAM für Computer. 1204 00:58:40,540 --> 00:58:43,620 Und RAM ist, wo Programme leben, während sie laufen. 1205 00:58:43,620 --> 00:58:46,630 >> Also auf jedem Mac oder PC, wenn Sie verdoppeln klicken Sie auf ein Programm, und es öffnet sich, 1206 00:58:46,630 --> 00:58:48,921 und es öffnet sich eine Word-Dokument oder etwas ähnliches, 1207 00:58:48,921 --> 00:58:51,764 es speichert sie vorübergehend in RAM, weil RAM ist schneller 1208 00:58:51,764 --> 00:58:53,680 als Festplatte oder Ihre Solid State Disk. 1209 00:58:53,680 --> 00:58:56,600 So ist es nur, wo Programme gehen zu leben, wenn sie laufen, 1210 00:58:56,600 --> 00:58:58,060 oder wenn Dateien verwendet werden. 1211 00:58:58,060 --> 00:59:00,890 >> So haben Sie die Dinge, die aussehen wie diese im Inneren des Laptops, 1212 00:59:00,890 --> 00:59:03,320 oder etwas größere Dinge innerhalb des Desktops. 1213 00:59:03,320 --> 00:59:07,440 Aber der Schlüssel ist, müssen Sie nur eine endliche Anzahl von diesen Dingen. 1214 00:59:07,440 --> 00:59:11,230 Und es gibt nur eine begrenzte Menge an Hardware auf diesem Schreibtisch sitzen rechts 1215 00:59:11,230 --> 00:59:11,730 Hier. 1216 00:59:11,730 --> 00:59:15,920 >> Also, sicher können wir nicht speichern unendlich lange Zahlen. 1217 00:59:15,920 --> 00:59:19,030 Und doch denken, wenn Sie zurück zu Grundschule, wie viele Stellen können 1218 00:59:19,030 --> 00:59:21,400 Sie haben auf der rechten Seite eines Komma? 1219 00:59:21,400 --> 00:59:24,680 Für diese Angelegenheit, wie viele Stellen können Sie haben auf der linken Seite von einem Komma? 1220 00:59:24,680 --> 00:59:26,300 Wirklich, unendlich viele. 1221 00:59:26,300 --> 00:59:30,840 >> Jetzt könnten wir Menschen nur wissen, wie Millionen auszusprechen, 1222 00:59:30,840 --> 00:59:34,990 und Milliarden, Billionen, und Billiarde und Trillionen. 1223 00:59:34,990 --> 00:59:39,370 Und ich bin an die Grenzen meiner understanding-- oder my-- Ich verstehe, 1224 00:59:39,370 --> 00:59:41,110 Zahlen, aber mein Aussprache von Zahlen. 1225 00:59:41,110 --> 00:59:44,720 Aber sie können unendlich groß werden mit unendlich vielen Stellen links 1226 00:59:44,720 --> 00:59:47,050 oder nach rechts von einem Komma. 1227 00:59:47,050 --> 00:59:50,040 >> Aber Computer nur ein endliche Menge an Speicher, 1228 00:59:50,040 --> 00:59:53,510 eine endliche Anzahl von Transistoren, a endliche Anzahl von Glühbirnen im Inneren. 1229 00:59:53,510 --> 00:59:57,350 Also, was passiert, wenn Sie laufen aus dem Raum? 1230 00:59:57,350 --> 00:59:59,620 Mit anderen Worten, wenn Sie denken Sie zurück an letzte Woche 1231 00:59:59,620 --> 01:00:03,160 wenn wir sprachen über Zahlen selbst werden binär dargestellt, 1232 01:00:03,160 --> 01:00:05,480 nehme an, dass wir haben, 8-Bit-Wert hier. 1233 01:00:05,480 --> 01:00:08,290 >> Und wir haben sieben 1-en und ein 0. 1234 01:00:08,290 --> 01:00:10,827 Und angenommen, dass wir wollen, 1 auf diesen Wert hinzuzufügen. 1235 01:00:10,827 --> 01:00:12,410 Dies ist eine wirklich große Zahl jetzt. 1236 01:00:12,410 --> 01:00:16,610 >> Das ist 254, wenn ich mich erinnere die Mathematik von der letzten Woche recht. 1237 01:00:16,610 --> 01:00:19,480 Aber was, wenn ich ändern dass ganz rechts 0 bis 1? 1238 01:00:19,480 --> 01:00:22,800 Die ganze Zahl, von Natürlich wird acht 1 ist. 1239 01:00:22,800 --> 01:00:24,050 So sind wir immer noch gut. 1240 01:00:24,050 --> 01:00:27,204 >> Und das wahrscheinlich repräsentiert obwohl 255, je nach Kontext 1241 01:00:27,204 --> 01:00:29,120 es könnte tatsächlich darstellen eine negative Zahl. 1242 01:00:29,120 --> 01:00:31,240 Aber mehr dazu eine andere Zeit. 1243 01:00:31,240 --> 01:00:34,220 Das fühlt sich an wie es geht um so hoch wie ich zählen kann. 1244 01:00:34,220 --> 01:00:35,290 >> Jetzt ist es nur 8 Bit. 1245 01:00:35,290 --> 01:00:38,170 Und mein Mac, sicher, hat Art und Weise mehr als 8 Bit des Speichers. 1246 01:00:38,170 --> 01:00:39,170 Aber es muss endlich. 1247 01:00:39,170 --> 01:00:43,230 Also das gleiche Argument gilt, auch wenn wir haben mehrere dieser Einsen auf dem Bildschirm. 1248 01:00:43,230 --> 01:00:47,020 >> Aber was passiert, wenn Sie Speichern Sie diese Nummer, 255, 1249 01:00:47,020 --> 01:00:49,290 und Sie möchten zählen 1 Bit höher? 1250 01:00:49,290 --> 01:00:51,600 Sie wollen 255 bis 256 zu gehen. 1251 01:00:51,600 --> 01:00:55,800 Das Problem ist natürlich, dass, wenn Sie beginnen bei Null wie letzte Woche zu zählen, 1252 01:00:55,800 --> 01:00:59,670 Sie können nicht so hoch zählen 256, geschweige denn 257, 1253 01:00:59,670 --> 01:01:02,584 geschweige denn 258, m, denn was passiert, wenn Sie ein 1 hinzufügen? 1254 01:01:02,584 --> 01:01:05,000 Wenn Sie das tun, die alte Grundschule Ansatz, setzen Sie hier eine 1, 1255 01:01:05,000 --> 01:01:08,150 und dann 1 plus 1 gleich 2 ist, aber das ist wirklich eine Null ist, tragen Sie die 1, 1256 01:01:08,150 --> 01:01:09,695 tragen die 1, tragen die 1. 1257 01:01:09,695 --> 01:01:12,620 All diese Dinge, diese 1 ist, gehen auf Null zurück. 1258 01:01:12,620 --> 01:01:17,820 Und Sie wind up, ja, wie jemand eine 1 auf der linken Seite, wies darauf hin,. 1259 01:01:17,820 --> 01:01:22,540 Aber alles kann man tatsächlich sehen und passen in den Speicher 1260 01:01:22,540 --> 01:01:27,960 nur acht 0 ist, das heißt, an einem gewissen Punkt, wenn Sie einen Computer, 1261 01:01:27,960 --> 01:01:32,490 versucht zu zählen hoch genug, du bist gehen um zu wickeln, so scheint es, 1262 01:01:32,490 --> 01:01:35,850 auf Null, oder vielleicht sogar negativ Zahlen, die sogar niedriger als Null sind. 1263 01:01:35,850 --> 01:01:37,260 >> Und wir können diese Art von zu sehen. 1264 01:01:37,260 --> 01:01:39,900 Lassen Sie mich gehen Sie vor und schreiben ein echter Schnellprogramm hier. 1265 01:01:39,900 --> 01:01:43,690 Lassen Sie mich gehen Sie vor und schreiben ein Programm namens Überlauf. 1266 01:01:43,690 --> 01:01:49,980 Fügen Sie CS50.h umfassen Standard IO.h-- oh, 1267 01:01:49,980 --> 01:01:51,730 Ich wirklich meine Syntax-Hervorhebung verpasst. 1268 01:01:51,730 --> 01:01:54,440 Also lassen Sie uns dies als overflow.c speichern. 1269 01:01:54,440 --> 01:01:57,084 >> Und jetzt int main void-- und es dauerte nicht lange, wir werden 1270 01:01:57,084 --> 01:01:59,500 wieder zu erklären, warum wir halten int main nichtig zu schreiben. 1271 01:01:59,500 --> 01:02:02,080 Aber jetzt lassen Sie uns einfach tun , Nehmen es für selbstverständlich. 1272 01:02:02,080 --> 01:02:06,200 Lassen Sie uns selbst einen int geben, und initialisieren Sie ihn auf 0. 1273 01:02:06,200 --> 01:02:11,716 >> Lassen Sie uns dann für int bekomme ich zero-- tatsächlich, lassen Sie uns eine unendliche Schleife tun 1274 01:02:11,716 --> 01:02:12,590 und sehen, was passiert. 1275 01:02:12,590 --> 01:02:22,440 Dies stimmt zwar, lassen Sie uns dann n auszudrucken i Prozent, Backslash n, Plug-in n. 1276 01:02:22,440 --> 01:02:27,200 Aber jetzt wollen wir tun n bekommt n plus 1. 1277 01:02:27,200 --> 01:02:29,660 >> Also mit anderen Worten, auf jedem Iteration dieser Endlosschleife, 1278 01:02:29,660 --> 01:02:32,550 Lassen Sie uns n den Wert nehmen, und fügen Sie 1, um es, und dann 1279 01:02:32,550 --> 01:02:34,350 speichern Sie das Ergebnis zurück in n auf der linken Seite. 1280 01:02:34,350 --> 01:02:37,150 Und in der Tat haben wir gesehen Syntax etwas wie dieses, kurz. 1281 01:02:37,150 --> 01:02:39,730 Ein cooler Trick ist, statt des Schreibens dieses alle aus, 1282 01:02:39,730 --> 01:02:42,770 Sie können tatsächlich ein n plus sagen gleich 1 ist. 1283 01:02:42,770 --> 01:02:47,480 >> Oder wenn Sie wirklich sein wollen, Phantasie, Sie können n plus plus Semikolon sagen. 1284 01:02:47,480 --> 01:02:50,130 Aber diese beiden letzteren sind nur was würden wir syntaktischer Zucker nennen 1285 01:02:50,130 --> 01:02:50,790 für die erste Sache. 1286 01:02:50,790 --> 01:02:53,456 >> Die erste Sache ist noch deutlicher, völlig in Ordnung, völlig richtig. 1287 01:02:53,456 --> 01:02:55,470 Aber das ist häufiger, werde ich sagen. 1288 01:02:55,470 --> 01:02:57,210 Also werden wir dies tun, nur für einen Moment. 1289 01:02:57,210 --> 01:03:01,685 >> Lassen Sie uns nun Überlauf machen, das klingt eher bedrohlich, Punkt Strich Überlauf. 1290 01:03:01,685 --> 01:03:04,380 1291 01:03:04,380 --> 01:03:09,852 Lassen Sie uns sehen, n ist schon ziemlich groß. 1292 01:03:09,852 --> 01:03:11,310 Aber lassen Sie uns denken, wie groß kann n bekommen? 1293 01:03:11,310 --> 01:03:12,870 >> n ist ein int. 1294 01:03:12,870 --> 01:03:16,400 Wir haben gesehen, vor einem Moment mit der Größe Beispiel, dass ein int vier Bytes. 1295 01:03:16,400 --> 01:03:22,070 Wir wissen aus der vergangenen Woche, vier Bytes 32 Bits, da 8 mal 4, ist, dass 32. 1296 01:03:22,070 --> 01:03:23,460 Das wird 4 Milliarden sein. 1297 01:03:23,460 --> 01:03:25,802 >> Und wir sind bis zu 800.000. 1298 01:03:25,802 --> 01:03:28,510 Das wird für immer zu ergreifen, um zählen so hoch wie ich nur kann. 1299 01:03:28,510 --> 01:03:30,635 Also werde ich voran gehen, wie Sie vielleicht schon bald, 1300 01:03:30,635 --> 01:03:34,910 und drücken Sie Control C-- offen, Kontrolle C, eine Menge, wo Kontrolle C im Allgemeinen 1301 01:03:34,910 --> 01:03:36,034 Mittel abzubrechen. 1302 01:03:36,034 --> 01:03:38,200 Unglücklicherweise werden diese wird in der Cloud läuft, 1303 01:03:38,200 --> 01:03:41,190 manchmal die Wolke so viel Zeug ausspucken, 1304 01:03:41,190 --> 01:03:44,180 so viel Leistung, es wird zu nehmen Sie ein wenig, während für meine Eingabe 1305 01:03:44,180 --> 01:03:45,630 in die Cloud zu bekommen. 1306 01:03:45,630 --> 01:03:49,240 Also auch wenn ich getroffen Kontrolle C ein paar Sekunden, 1307 01:03:49,240 --> 01:03:53,110 dies ist auf jeden Fall die Seite Wirkung einer Endlosschleife. 1308 01:03:53,110 --> 01:03:56,070 >> Und so in einem solchen Fall sind wir gehen zu lassen, dass sein. 1309 01:03:56,070 --> 01:03:59,050 Und wir werden eine neue hinzufügen Terminal-Fenster hier 1310 01:03:59,050 --> 01:04:03,186 mit dem Plus, was natürlich nicht so, da ich dachte, es ist immer noch. 1311 01:04:03,186 --> 01:04:05,310 Und lassen Sie uns vorangehen und sein ein wenig mehr zumutbar ist. 1312 01:04:05,310 --> 01:04:07,768 >> Ich werde weitermachen und tun diese nur endlich viele Male. 1313 01:04:07,768 --> 01:04:10,047 Lassen Sie uns eine for-Schleife verwenden, die ich zuvor angesprochenen. 1314 01:04:10,047 --> 01:04:10,630 Lass uns das machen. 1315 01:04:10,630 --> 01:04:13,430 Gib mir noch eine Variable int i 0 wird. 1316 01:04:13,430 --> 01:04:17,430 i kleiner als, sagen wir, 64 i ++. 1317 01:04:17,430 --> 01:04:24,010 Und jetzt lassen Sie mich gehen Sie vor und drucken out n Prozent i ist, Komma n. 1318 01:04:24,010 --> 01:04:27,547 Und dann n-- ist dies immer noch gehen für immer zu nehmen. 1319 01:04:27,547 --> 01:04:28,130 Lass uns das machen. 1320 01:04:28,130 --> 01:04:30,620 >> n wird n-mal 2. 1321 01:04:30,620 --> 01:04:34,140 Oder wir könnten sein Phantasie und tun mal gleich 2. 1322 01:04:34,140 --> 01:04:37,120 Aber lassen Sie uns einfach sagen, n 2 gleich selbst mal. 1323 01:04:37,120 --> 01:04:39,321 Mit anderen Worten, in dieser eine neue Version des Programms, 1324 01:04:39,321 --> 01:04:41,820 Ich will nicht ewig warten aus wie 800.000 bis 4 Milliarden. 1325 01:04:41,820 --> 01:04:43,070 Lassen Sie uns gerade diese über bekommen. 1326 01:04:43,070 --> 01:04:44,920 >> Lassen Sie uns verdoppeln tatsächlich n jedes Mal. 1327 01:04:44,920 --> 01:04:47,660 Welche, Rückruf, Verdoppelung ist die entgegengesetzt ist, natürlich. 1328 01:04:47,660 --> 01:04:50,035 Und während der letzten Woche haben wir etwas wieder und wieder, 1329 01:04:50,035 --> 01:04:52,200 und wieder, super schnell, Verdoppelung wird sicherlich 1330 01:04:52,200 --> 01:04:58,080 erhalten wir von 1 bis zur größtmöglichen Wert, den wir mit einem int zählen kann. 1331 01:04:58,080 --> 01:04:59,750 >> Lassen Sie uns also genau das tun. 1332 01:04:59,750 --> 01:05:01,720 Und wir werden schon bald darauf zurückkommen. 1333 01:05:01,720 --> 01:05:04,180 Aber dies ist wieder, wie der Wiederholungsblock in Scratch. 1334 01:05:04,180 --> 01:05:05,600 Und Sie werden diese vor langer verwenden. 1335 01:05:05,600 --> 01:05:10,170 >> Dies bedeutet nur Zählung von Null bis zu, aber nicht gleich sind, auf 64. 1336 01:05:10,170 --> 01:05:14,285 Und bei jeder Iteration dieses Schleife, nur halten i erhöht wird. 1337 01:05:14,285 --> 01:05:18,990 So i ++ - und das allgemeine Konstrukt 7 auf der Leitung ist nur ein super gemeinsamen Weg 1338 01:05:18,990 --> 01:05:22,290 der Wiederholung ein paar Zeilen von Code, eine bestimmte Anzahl von Malen. 1339 01:05:22,290 --> 01:05:23,362 Welche Zeilen Code? 1340 01:05:23,362 --> 01:05:25,570 Diese geschweiften Klammern, wie Sie kann ab sofort aufgelesen haben, 1341 01:05:25,570 --> 01:05:26,780 bedeutet, gehen Sie wie folgt. 1342 01:05:26,780 --> 01:05:29,510 >> Es ist in wie Scratch, wenn es hat die gelben Blöcke 1343 01:05:29,510 --> 01:05:32,680 und andere Farben, die Art von umarmen oder andere Blöcke umarmen. 1344 01:05:32,680 --> 01:05:34,750 Das ist, was diese geschweiften Klammern tun hier. 1345 01:05:34,750 --> 01:05:40,200 Also, wenn ich habe meine Syntax right-- Sie siehe die Karotte Symbol in C Mittel 1346 01:05:40,200 --> 01:05:42,706 das ist, wie oft ich war versucht, dieses Problem zu lösen. 1347 01:05:42,706 --> 01:05:45,330 Also lassen Sie uns dieses einen loswerden zusammen, und schließen Sie das Fenster. 1348 01:05:45,330 --> 01:05:46,520 Und wir werden die neuen. 1349 01:05:46,520 --> 01:05:51,980 Machen Sie Überlauf, Punkt slash Überlauf, Enter, alles in Ordnung, 1350 01:05:51,980 --> 01:05:53,090 es sieht auf den ersten schlecht. 1351 01:05:53,090 --> 01:05:56,200 Aber lassen Sie uns in der Zeit zurückblättern, weil ich tat dies 64-mal. 1352 01:05:56,200 --> 01:05:58,700 >> Und zum ersten Mal bemerken, ist n 1. 1353 01:05:58,700 --> 01:06:03,110 Das zweite Mal, ist n 2, dann 4, dann 8, dann 16. 1354 01:06:03,110 --> 01:06:09,450 Und es scheint, dass, sobald Ich bekomme auf rund 1 Milliarde, 1355 01:06:09,450 --> 01:06:12,800 wenn ich es noch einmal verdoppeln, das gib mir sollte 2 Milliarden. 1356 01:06:12,800 --> 01:06:14,980 Aber es stellt sich heraus, es ist direkt an der Schwelle. 1357 01:06:14,980 --> 01:06:18,930 >> Und so es tatsächlich überläuft ein int von 1 Milliarde 1358 01:06:18,930 --> 01:06:23,514 auf etwa negativ 2 Milliarden, weil eine ganze Zahl ist, 1359 01:06:23,514 --> 01:06:25,430 im Gegensatz zu den Zahlen, die wir letzte Woche wurden unter der Annahme, 1360 01:06:25,430 --> 01:06:28,397 kann sowohl positiv als auch negativ sein in Wirklichkeit und in einem Computer. 1361 01:06:28,397 --> 01:06:30,730 Und so mindestens einer von denen Bits effektiv gestohlen. 1362 01:06:30,730 --> 01:06:34,190 Also nur haben wir wirklich 31 Bit, oder 2 Milliarden möglichen Werte. 1363 01:06:34,190 --> 01:06:38,220 >> Aber jetzt ist das Essen zum Mitnehmen ganz einfach, was auch immer diese Zahlen sind 1364 01:06:38,220 --> 01:06:42,280 und was auch immer die Mathematik ist, etwas Schlimmes passiert schließlich, 1365 01:06:42,280 --> 01:06:46,980 denn schließlich wollen Sie permutieren die Bits einmal zu oft. 1366 01:06:46,980 --> 01:06:51,060 Und Sie gehen effektiv aus allen 1 ist, um vielleicht alle 0-en, oder vielleicht 1367 01:06:51,060 --> 01:06:54,260 nur einige andere Muster, dass es klar, je nach Kontext, 1368 01:06:54,260 --> 01:06:56,342 kann als negative Zahl interpretiert werden. 1369 01:06:56,342 --> 01:06:59,300 Und so wäre es die höchste Ich scheine kann in diesem Programm zählen 1370 01:06:59,300 --> 01:07:01,210 ist nur rund 1 Milliarde. 1371 01:07:01,210 --> 01:07:02,760 Aber es gibt eine Teillösung hier. 1372 01:07:02,760 --> 01:07:03,480 Weißt du was? 1373 01:07:03,480 --> 01:07:07,600 >> Lassen Sie mich von einem ändern int auf eine lange, lange. 1374 01:07:07,600 --> 01:07:10,633 Und lassen Sie mich voran gehen hier und sagen-- Ich bin zu haben, 1375 01:07:10,633 --> 01:07:12,290 dies einem unsigned long zu ändern. 1376 01:07:12,290 --> 01:07:16,860 Oder wollen wir mal sehen, ich mich nie erinnern. 1377 01:07:16,860 --> 01:07:19,920 >> Fahren wir fort und Überlauf machen. 1378 01:07:19,920 --> 01:07:21,860 Nein, das ist es nicht, LLD, danke. 1379 01:07:21,860 --> 01:07:23,430 Also manchmal kann Clang hilfreich sein. 1380 01:07:23,430 --> 01:07:27,550 Ich habe nicht daran erinnern, was das Format Bezeich war für eine lange lange. 1381 01:07:27,550 --> 01:07:28,950 >> Aber in der Tat, sagte Clang mich. 1382 01:07:28,950 --> 01:07:31,570 Grün ist eine Art gut, noch bedeutet, dass Sie einen Fehler gemacht. 1383 01:07:31,570 --> 01:07:33,190 Es ist zu raten, dass ich LLD gemeint. 1384 01:07:33,190 --> 01:07:38,750 >> Also lassen Sie mich es ist Beratung, eine lange lange Dezimalzahl, speichern das. 1385 01:07:38,750 --> 01:07:43,190 Und lassen Sie mich es erneut auszuführen, dot Slash Überlauf, ein. 1386 01:07:43,190 --> 01:07:45,020 Und nun, was cool ist, ist dies. 1387 01:07:45,020 --> 01:07:49,140 >> Wenn ich in der Zeit zurück bewegen, beginnen wir noch zur gleichen place-- Zählen 1, 2, 4, 1388 01:07:49,140 --> 01:07:50,220 8, 16. 1389 01:07:50,220 --> 01:07:54,860 Beachten Sie, bekommen wir alle die Art und Weise bis zu 1 Milliarde. 1390 01:07:54,860 --> 01:07:57,070 Aber dann sicher wir auf 2 Milliarden erhalten. 1391 01:07:57,070 --> 01:08:01,300 >> Dann kommen wir zu 4 Milliarden, dann 8 Milliarden, 17 Milliarden. 1392 01:08:01,300 --> 01:08:03,340 Und wir gehen höher und höher und höher. 1393 01:08:03,340 --> 01:08:05,740 Schließlich auch dies bricht. 1394 01:08:05,740 --> 01:08:09,350 >> Schließlich, mit einem langen langen, das ist die 64-Bit-Wert, nicht 1395 01:08:09,350 --> 01:08:13,660 ein 32-Bit-Wert, wenn Sie zählen zu hoch ist, wickeln Sie um 0. 1396 01:08:13,660 --> 01:08:16,410 Und in diesem Fall passieren wir Ende mit einer negativen Zahl. 1397 01:08:16,410 --> 01:08:17,550 >> So ist dies ein Problem. 1398 01:08:17,550 --> 01:08:20,439 Und es stellt sich heraus, dass diese Problem ist nicht so obskur. 1399 01:08:20,439 --> 01:08:23,060 Obwohl ich habe absichtlich induziert es mit diesen Fehlern, 1400 01:08:23,060 --> 01:08:26,149 es stellt sich heraus, dass wir es irgendwie alle sehen um uns herum, oder zumindest einige von uns tun. 1401 01:08:26,149 --> 01:08:28,939 >> So in Lego Star Wars, wenn Sie haben jemals gespielt, das Spiel, 1402 01:08:28,939 --> 01:08:33,830 es stellt sich heraus, können Sie gehen, um Dinge in LEGO Welt zu brechen, 1403 01:08:33,830 --> 01:08:36,640 und das Sammeln von Münzen, im Wesentlichen. 1404 01:08:36,640 --> 01:08:39,200 Und wenn Sie jemals gespielt haben dieses Spiel viel zu viel Zeit, 1405 01:08:39,200 --> 01:08:42,630 da diese nicht namentlich Einzel hier getan hat, um die Gesamtzahl 1406 01:08:42,630 --> 01:08:46,700 der Münzen, die Sie sammeln können ist, wäre es, 4 Milliarden scheinen. 1407 01:08:46,700 --> 01:08:48,240 >> Jetzt, mit ist es tatsächlich abgerundet. 1408 01:08:48,240 --> 01:08:50,239 So LEGO versuchte die Dinge benutzerfreundlich. 1409 01:08:50,239 --> 01:08:53,779 Sie taten es nicht genau 2 die 32 Leistung pro letzte Woche. 1410 01:08:53,779 --> 01:08:55,310 Aber 4 Milliarden ist ein Grund. 1411 01:08:55,310 --> 01:08:58,979 Es scheint, basierend auf dieser Information, dass LEGO, und das Unternehmen, dass 1412 01:08:58,979 --> 01:09:02,624 Diese eigentliche Software gemacht, entschieden dass die maximale Anzahl von Münzen, 1413 01:09:02,624 --> 01:09:04,540 der Benutzer kann akkumulieren ist in der Tat, 4 Milliarden, 1414 01:09:04,540 --> 01:09:12,069 weil sie beschlossen, ihren Code in zu verwenden offenbar nicht ein langer, langer, 1415 01:09:12,069 --> 01:09:16,140 aber nur eine ganze Zahl, eine nicht signierte integer, nur eine positive ganze Zahl ist, deren 1416 01:09:16,140 --> 01:09:18,089 max-Wert ist in etwa das. 1417 01:09:18,089 --> 01:09:19,380 Nun, hier ist eine andere lustige ein. 1418 01:09:19,380 --> 01:09:23,500 So in das Spiel Zivilisation, die einige von euch vielleicht bekannt sein, mit 1419 01:09:23,500 --> 01:09:26,660 es stellt sich die Jahre heraus dort vor um einen Fehler in diesem Spiel, wobei war 1420 01:09:26,660 --> 01:09:28,750 wenn Sie die Rolle gespielt von Gandhi im Spiel, 1421 01:09:28,750 --> 01:09:34,020 anstelle von ihm als sehr pazifistisch, stattdessen war unglaublich, unglaublich 1422 01:09:34,020 --> 01:09:36,399 unter bestimmten Umständen aggressiv. 1423 01:09:36,399 --> 01:09:40,529 Insbesondere die Art und Weise, dass die Zivilisation Arbeiten ist, dass, wenn Sie, der Spieler, 1424 01:09:40,529 --> 01:09:44,680 nehmen Demokratie, Ihre Aggressivität Punktzahl bekommt 1425 01:09:44,680 --> 01:09:48,130 dekrementiert durch zwei, so minus minus, und dann minus minus. 1426 01:09:48,130 --> 01:09:50,569 >> So subtrahieren Sie 2 von Ihre tatsächliche iterierenden. 1427 01:09:50,569 --> 01:09:56,650 Leider, wenn Ihr iterierenden ist zunächst auf 1, und Sie 2 davon subtrahieren 1428 01:09:56,650 --> 01:09:59,050 nach Annahme der Demokratie wie hier Gandhi könnte 1429 01:09:59,050 --> 01:10:02,200 getan haben, weil er sehr passive-- war 1 auf der Skala von Aggressivität. 1430 01:10:02,200 --> 01:10:04,830 Aber wenn er nimmt die Demokratie, dann er geht von 1 bis negativ 1. 1431 01:10:04,830 --> 01:10:11,470 >> Leider waren sie mit Zahlen ohne Vorzeichen, 1432 01:10:11,470 --> 01:10:15,400 das heißt, sie behandelt sogar negativ Zahlen, als ob sie positiv waren. 1433 01:10:15,400 --> 01:10:19,780 Und es stellt sich heraus, dass die positive Äquivalent negativ 1, 1434 01:10:19,780 --> 01:10:23,480 in typischen Computerprogrammen ist 255. 1435 01:10:23,480 --> 01:10:27,250 Also, wenn Gandhi verabschiedet Demokratie, und deshalb hat 1436 01:10:27,250 --> 01:10:32,470 seine Aggressivität Punktzahl ab, es rollt tatsächlich um bis 255 1437 01:10:32,470 --> 01:10:35,470 und macht ihn am meisten aggressiven Charakter im Spiel. 1438 01:10:35,470 --> 01:10:36,930 So können Sie sich auf diese Google-up. 1439 01:10:36,930 --> 01:10:39,380 Und es war in der Tat ein versehentlichen Programmfehler, 1440 01:10:39,380 --> 01:10:43,010 aber das ist ganz eingegeben die Lore seitdem. 1441 01:10:43,010 --> 01:10:44,360 >> Das ist alles Spaß und niedlich. 1442 01:10:44,360 --> 01:10:47,760 Mehr erschreckend ist, wenn die tatsächliche realen Welt-Geräte und nicht Spiele, 1443 01:10:47,760 --> 01:10:48,820 haben die gleichen Fehler. 1444 01:10:48,820 --> 01:10:54,500 In der Tat, nur vor einem Jahr ein Artikel kam sich über die Boeing 787 Dreamliner. 1445 01:10:54,500 --> 01:10:56,850 >> Und der Artikel auf den ersten Blick liest ein wenig obskur. 1446 01:10:56,850 --> 01:11:01,480 Aber es sagte, dies eine Software Schwachstelle in Boeing 1447 01:11:01,480 --> 01:11:04,790 neue 787-Jet hat die potenzielle Piloten verursachen 1448 01:11:04,790 --> 01:11:07,220 verlieren die Kontrolle über das Flugzeug, möglicherweise 1449 01:11:07,220 --> 01:11:11,750 im Flug, die FAA Beamte warnte Fluggesellschaften vor kurzem. 1450 01:11:11,750 --> 01:11:14,520 Es war die Bestimmung dass ein Modell 787 1451 01:11:14,520 --> 01:11:19,770 Flugzeug, das mit Strom versorgt wurde, kontinuierlich für 248 Tage 1452 01:11:19,770 --> 01:11:24,880 verlieren alle Wechselstrom, AC, elektrische Leistung durch den Generator 1453 01:11:24,880 --> 01:11:28,892 Steuergeräte, GCUs, gleichzeitig geht in Fail-Safe-Modus. 1454 01:11:28,892 --> 01:11:29,850 Es ist eine Art, mich zu verlieren. 1455 01:11:29,850 --> 01:11:35,390 Aber das Memo erwähnt, OK, jetzt habe ich, dass, der Zustand wurde durch eine Software verursacht 1456 01:11:35,390 --> 01:11:38,590 Zähler intern die Generatorsteuerung 1457 01:11:38,590 --> 01:11:44,860 Einheiten, die nach dem überlaufen 248 Tage Dauerleistung. 1458 01:11:44,860 --> 01:11:47,070 Wir sind die Ausstellung dieser bemerken Verlust zu verhindern 1459 01:11:47,070 --> 01:11:49,300 aller elektrischen Wechselstrom Macht, die zur Folge haben könnten 1460 01:11:49,300 --> 01:11:50,980 zu einem Verlust der Kontrolle über das Flugzeug. 1461 01:11:50,980 --> 01:11:55,380 >> So buchstäblich dass eine ganze Zahl ist, oder einige gleichwertige Datentyp, 1462 01:11:55,380 --> 01:11:57,960 wird in der Software verwendet in einer tatsächlichen Flugzeug 1463 01:11:57,960 --> 01:12:00,756 dass, wenn Sie Ihr Flugzeug, auf lange genug, um die scheinbar 1464 01:12:00,756 --> 01:12:03,880 kann der Fall sein, wenn Sie gerade laufen lassen sie ständig und nie Ausstecken 1465 01:12:03,880 --> 01:12:06,810 Ihr Flugzeug, wie es scheint, oder Lassen Sie die Batterien sterben, 1466 01:12:06,810 --> 01:12:09,840 zählen schließlich, und oben, und auf und auf und auf und auf. 1467 01:12:09,840 --> 01:12:12,150 >> Und von Natur aus eine finite Menge an Speicher, 1468 01:12:12,150 --> 01:12:15,880 überläuft, um ein Rollback Null oder ein negativer Wert ist, 1469 01:12:15,880 --> 01:12:19,920 ein Nebeneffekt davon ist die erschreckend reale Realität 1470 01:12:19,920 --> 01:12:23,970 dass das Flugzeug könnte brauchen neu gestartet werden, effektiv, 1471 01:12:23,970 --> 01:12:27,290 oder fallen könnte, schlimmer noch, wie es fliegt. 1472 01:12:27,290 --> 01:12:29,230 Also diese Art von Fragen noch bei uns sind, 1473 01:12:29,230 --> 01:12:33,130 even-- dies war ein 2015 Artikel, umso erschreckender 1474 01:12:33,130 --> 01:12:36,100 wenn Sie nicht unbedingt verstehen, zu schätzen wissen, oder antizipieren 1475 01:12:36,100 --> 01:12:38,640 diese Arten von Fehlern. 1476 01:12:38,640 --> 01:12:42,030 >> So stellt sich heraus gibt es noch eine andere schlechte Sache über Datendarstellung. 1477 01:12:42,030 --> 01:12:47,080 Es stellt sich heraus, dass auch Schwimmer sind Art fehlerhaft, da schwimmt auch, 1478 01:12:47,080 --> 01:12:51,440 Ich schlug vor, 32 Bit, oder vielleicht 64, wenn Sie einen Doppel verwenden. 1479 01:12:51,440 --> 01:12:53,070 Aber das ist immer noch begrenzt. 1480 01:12:53,070 --> 01:12:57,070 >> Und der Haken ist, dass, wenn Sie können stellen eine unendliche Anzahl von Nummern 1481 01:12:57,070 --> 01:12:59,460 nach dem Komma, es gibt keine Möglichkeit, 1482 01:12:59,460 --> 01:13:02,690 können alle möglichen darstellen Zahlen, die wir gelernt haben 1483 01:13:02,690 --> 01:13:04,990 in Klasse kann die Schule in der Welt existieren. 1484 01:13:04,990 --> 01:13:08,870 Ein Computer im Wesentlichen wissen, muss eine Teilmenge dieser Zahlen wählen, 1485 01:13:08,870 --> 01:13:10,200 repräsentieren genau. 1486 01:13:10,200 --> 01:13:12,450 >> Nun kann der Computer Runde vielleicht ein bisschen, 1487 01:13:12,450 --> 01:13:17,900 und können Sie zu grob speichern lassen jede Zahl, die Sie sich nur wünschen könnte. 1488 01:13:17,900 --> 01:13:20,940 Aber nur intuitiv, wenn Sie eine endliche Anzahl von Bits, 1489 01:13:20,940 --> 01:13:24,560 Sie können sie nur permute in so vielen endlichen Möglichkeiten. 1490 01:13:24,560 --> 01:13:26,570 So kann man unmöglich verwenden, um eine endliche Zahl 1491 01:13:26,570 --> 01:13:29,880 der Permutation der Bits, Muster von Nullen und Einsen, 1492 01:13:29,880 --> 01:13:32,940 repräsentieren eine unendliche Anzahl der Zahlen, 1493 01:13:32,940 --> 01:13:37,370 das deutet darauf hin, dass Computer könnte sehr gut sein, manchmal zu uns liegen. 1494 01:13:37,370 --> 01:13:38,770 >> In der Tat, lassen Sie uns dies tun. 1495 01:13:38,770 --> 01:13:41,239 Lassen Sie mich zurück in CS50 IDE gehen. 1496 01:13:41,239 --> 01:13:43,030 Lassen Sie mich gehen Sie vor und erstellen ein kleines Programm 1497 01:13:43,030 --> 01:13:47,940 Die Ungenauigkeit, genannt zu zeigen, dass Computer sind in der Tat ungenau. 1498 01:13:47,940 --> 01:13:51,910 >> Und lassen Sie mich gehen Sie vor und beginnen mit einige dieser Code aus der Zeit vor, 1499 01:13:51,910 --> 01:13:53,830 und jetzt tun, nur die folgenden. 1500 01:13:53,830 --> 01:14:03,640 Lassen Sie mich gehen Sie vor und tun printf Prozent f, Backslash n, 1 geteilt durch 10. 1501 01:14:03,640 --> 01:14:07,430 Mit anderen Worten, lassen Sie uns in tiefer tauchen 1/10, wie 1 und dividiert durch 10. 1502 01:14:07,430 --> 01:14:09,760 Sicherlich kann ein Computer 1/10 darstellen. 1503 01:14:09,760 --> 01:14:13,620 >> Also lassen Sie uns fortfahren und Unschärfen zu machen. 1504 01:14:13,620 --> 01:14:14,390 Mal schauen. 1505 01:14:14,390 --> 01:14:16,210 Format gibt doppelt eingeben. 1506 01:14:16,210 --> 01:14:18,160 Aber das Argument hat den Typ int. 1507 01:14:18,160 --> 01:14:19,040 Was ist los? 1508 01:14:19,040 --> 01:14:21,970 >> Oh, interessant, so ist es ein Lektion gelernt aus der Zeit vor. 1509 01:14:21,970 --> 01:14:26,050 Ich sage, hey, Computer zeigen mir ein Schwimmer mit Prozent f. 1510 01:14:26,050 --> 01:14:28,200 Aber ich gebe es zwei ints. 1511 01:14:28,200 --> 01:14:31,120 So stellt sich heraus, kann ich das beheben dies in einer Reihe von Möglichkeiten. 1512 01:14:31,120 --> 01:14:38,430 >> Ich konnte einfach drehen Sie einen in 1,0 und 10 in 10,0, die wäre in der Tat, 1513 01:14:38,430 --> 01:14:42,390 haben die Wirkung des Umwandelns sie in floats-- noch hoffentlich 1514 01:14:42,390 --> 01:14:43,180 die gleiche Anzahl. 1515 01:14:43,180 --> 01:14:45,880 Oder es stellt sich heraus, es ist etwas, wir werden sehen, wieder vor lang. 1516 01:14:45,880 --> 01:14:47,170 Sie könnten die Zahlen werfen. 1517 01:14:47,170 --> 01:14:49,880 >> Sie können mit dieser klammerten Ausdruck, kann man sagen, 1518 01:14:49,880 --> 01:14:52,560 hey, Computer, nehmen Sie diese 10, die ich kenne, ist ein int. 1519 01:14:52,560 --> 01:14:54,660 Aber behandeln es, bitte, als ob es ist ein Schwimmer. 1520 01:14:54,660 --> 01:14:56,680 Aber das fühlt sich unnötig komplex. 1521 01:14:56,680 --> 01:14:59,040 >> Für unsere Zwecke heute, lassen Sie uns einfach buchstäblich 1522 01:14:59,040 --> 01:15:02,700 machen sie schwimmend Punktwerte mit einem Komma, wie diese. 1523 01:15:02,700 --> 01:15:07,060 Lassen Sie mich gehen Sie vor und erneut ausführen, machen Unschärfen, gut, dot slash 1524 01:15:07,060 --> 01:15:08,870 Unschärfen, eingeben. 1525 01:15:08,870 --> 01:15:10,990 OK, wir suchen gut. 1526 01:15:10,990 --> 01:15:18,194 >> 1 von 10, unterteilt nach meiner Mac hier, ist in der Tat, 0.100000. 1527 01:15:18,194 --> 01:15:21,360 Nun, ich war in der Grundschule lehrte dort sollte eine unendliche Anzahl von 0 sein. 1528 01:15:21,360 --> 01:15:23,151 Lassen Sie uns also zumindest versuchen, einige von denen zu sehen. 1529 01:15:23,151 --> 01:15:26,770 Es stellt sich heraus, dass printf ist ein wenig schicker noch als wir verwendet haben. 1530 01:15:26,770 --> 01:15:30,890 Es stellt sich heraus, Sie müssen nicht angeben nur Prozent f oder einfach Prozent i. 1531 01:15:30,890 --> 01:15:33,830 Sie können tatsächlich angeben einige Steuerungsmöglichkeiten hier. 1532 01:15:33,830 --> 01:15:36,470 >> Genauer gesagt, ich werde zu sagen, hey, printf, 1533 01:15:36,470 --> 01:15:39,660 tatsächlich zeigen Sie mir 10 Dezimalstellen. 1534 01:15:39,660 --> 01:15:40,820 So sieht es ein wenig seltsam. 1535 01:15:40,820 --> 01:15:42,845 Aber Sie sagen Prozent, Punkt, wie viele Zahlen 1536 01:15:42,845 --> 01:15:44,970 Sie wollen nach dem zu sehen Komma, und dann f 1537 01:15:44,970 --> 01:15:48,340 für flache, nur weil das ist, was die Dokumentation sagt. 1538 01:15:48,340 --> 01:15:50,080 Lassen Sie mich gehen Sie vor und speichern das. 1539 01:15:50,080 --> 01:15:52,460 >> Und zu bemerken, ich bin immer müde Dinge für das Abtippen. 1540 01:15:52,460 --> 01:15:55,900 So bin ich nur das Einrichten und Pfeil nach unten auf meine Schlüssel hier. 1541 01:15:55,900 --> 01:15:58,710 Und wenn ich behalte das Schlagen auf, du sehen alle Befehle können 1542 01:15:58,710 --> 01:16:01,090 dass ich gemacht oder falsch gemacht. 1543 01:16:01,090 --> 01:16:04,630 >> Und ich werde jetzt nach vorne zu gehen und verwenden, die eigentlich nicht, anscheinend. 1544 01:16:04,630 --> 01:16:11,416 Machen Sie Unschärfen, Punkt Slash imprecision-- so 1545 01:16:11,416 --> 01:16:13,290 was ich gelehrt wurde, in Grundschule auscheckt. 1546 01:16:13,290 --> 01:16:19,010 Auch wenn ich es auf 10 dezimal drucken legt es in der Tat, ist 0,10000. 1547 01:16:19,010 --> 01:16:19,840 Aber weißt du was? 1548 01:16:19,840 --> 01:16:21,150 >> Lassen Sie uns ein wenig gierig. 1549 01:16:21,150 --> 01:16:23,990 Lassen Sie uns sagen, wie, zeigen Sie mir 55 Punkte hinter dem Komma. 1550 01:16:23,990 --> 01:16:26,160 Lassen Sie uns das wirklich nehmen Programm für einen Spin-out. 1551 01:16:26,160 --> 01:16:31,170 Lassen Sie mich Remake es mit make Unschärfen, Punkt slash, ungenauen. 1552 01:16:31,170 --> 01:16:32,390 >> Und es geht los. 1553 01:16:32,390 --> 01:16:34,420 Ihre Kindheit war eine Lüge. 1554 01:16:34,420 --> 01:16:48,410 Offenbar geteilt durch 10 1 ist in der Tat 0.100000000000000005551115123-- 1555 01:16:48,410 --> 01:16:49,740 >> Was ist los? 1556 01:16:49,740 --> 01:16:53,360 Nun, es stellt sich heraus, wenn Sie Art Blick weit genug in der zugrunde liegenden 1557 01:16:53,360 --> 01:16:55,950 Darstellung dieser Anzahl, es tatsächlich 1558 01:16:55,950 --> 01:17:00,400 ist nicht genau 1/10 oder 0,1 und eine unendliche Anzahl von Nullen. 1559 01:17:00,400 --> 01:17:01,630 Nun, warum ist das so? 1560 01:17:01,630 --> 01:17:06,250 >> Nun, auch wenn dies ist eine einfache Anzahl an uns Menschen, 1 geteilt durch 10, 1561 01:17:06,250 --> 01:17:10,910 es ist immer noch eine von unendlich vielen Zahlen, die wir denken konnte. 1562 01:17:10,910 --> 01:17:14,490 Aber ein Computer kann nur bedeuten endlich viele so Zahlen. 1563 01:17:14,490 --> 01:17:18,710 Und so, effektiv, was die Computer zeigt uns, ist der nächste 1564 01:17:18,710 --> 01:17:22,940 Angleichung der Anzahl Wir wollen glauben, 1/10, 1565 01:17:22,940 --> 01:17:27,760 oder wirklich 0,10000 ad infinitum. 1566 01:17:27,760 --> 01:17:30,425 >> Vielmehr, obwohl, dies ist so nah wie es bekommen kann. 1567 01:17:30,425 --> 01:17:32,300 Und in der Tat, wenn man sich unter der Haube, 1568 01:17:32,300 --> 01:17:37,050 wie wir sind hier, indem man 55 Stellen nach dem Komma, 1569 01:17:37,050 --> 01:17:39,990 wir tatsächlich sehen, dass die Realität. 1570 01:17:39,990 --> 01:17:42,610 Jetzt als beiseite, wenn Sie noch jemals die movie-- gesehen 1571 01:17:42,610 --> 01:17:45,780 die meisten von euch wahrscheinlich haven't-- aber Superman 3 vor einigen Jahren, 1572 01:17:45,780 --> 01:17:49,500 Richard Pryor im Wesentlichen Leveraged diese Realität in seinem Unternehmen eine Menge zu stehlen 1573 01:17:49,500 --> 01:17:53,500 von Fraktionen und Fraktionen von ein paar Cent, weil die company-- wie ich mich erinnere, 1574 01:17:53,500 --> 01:17:57,210 es ist ein gewesen while-- im Wesentlichen war alles wegwerfen, die nicht passen 1575 01:17:57,210 --> 01:17:58,790 in den Begriff der Cent. 1576 01:17:58,790 --> 01:18:01,480 >> Aber wenn Sie addieren sich alle diese winzig, winzig, winzig Zahlen wieder, 1577 01:18:01,480 --> 01:18:04,960 und wieder und wieder, können Sie, wie in seinen Fall, machen Sie eine gute Menge an Geld. 1578 01:18:04,960 --> 01:18:08,010 >> Das gleiche Idee wurde abgezockt durch eine neuere, aber immer noch älter geworden 1579 01:18:08,010 --> 01:18:10,500 Film, Office Space genannt, wo die Jungs in diesem Film, 1580 01:18:10,500 --> 01:18:13,501 hat die gleiche Sache, schraubte sie bis vollständig, endete auch mit Weg viel 1581 01:18:13,501 --> 01:18:14,666 Geld in ihr Bankkonto. 1582 01:18:14,666 --> 01:18:15,800 Es war alles sehr verdächtig. 1583 01:18:15,800 --> 01:18:19,290 Aber am Ende des Tages, Unschärfen ist überall um uns herum. 1584 01:18:19,290 --> 01:18:22,240 >> Und das kann auch sein, Erschreckend der Fall ist. 1585 01:18:22,240 --> 01:18:25,590 Es stellt sich heraus, dass Superman 3 und beiseite Büroräume gibt 1586 01:18:25,590 --> 01:18:28,460 kann einige sehr real sein Welt Verzweigungen 1587 01:18:28,460 --> 01:18:32,290 die besonderen Gegebenheiten der ungenauen Darstellung von Daten, 1588 01:18:32,290 --> 01:18:34,770 dass auch wir Menschen zu an diesem Tag nicht unbedingt 1589 01:18:34,770 --> 01:18:38,230 verstehen auch, wie wir sollten, oder denken Sie daran, wie oft, wie wir sollten. 1590 01:18:38,230 --> 01:18:42,950 Und in der Tat, der folgende Clip von einem Blick auf einige sehr reale Welt 1591 01:18:42,950 --> 01:18:47,730 Auswirkungen von dem, was passiert, wenn Sie nicht zu schätzen wissen, die sich ergibt 1592 01:18:47,730 --> 01:18:50,065 geschehen in Zahlen Darstellung kann. 1593 01:18:50,065 --> 01:18:51,300 >> [VIDEO-WIEDERGABE] 1594 01:18:51,300 --> 01:18:55,620 >> -Computer, Wir haben alle kommen zu akzeptieren die oft frustrierend Probleme, die 1595 01:18:55,620 --> 01:19:00,310 gehen mit them-- Bugs, Viren, und Software-Pannen, 1596 01:19:00,310 --> 01:19:03,130 für kleine Preise zu zahlen für die Bequemlichkeit. 1597 01:19:03,130 --> 01:19:07,800 Aber in High-Tech und High-Speed Militär- und Raumfahrt-Anwendungen, 1598 01:19:07,800 --> 01:19:12,800 das kleinste Problem kann vergrößert in eine Katastrophe werden. 1599 01:19:12,800 --> 01:19:18,900 >> Am 4. Juni 1996 Wissenschaftler vorbereitet eine unbemannte Rakete Ariane 5 zu starten. 1600 01:19:18,900 --> 01:19:21,220 Es trug wissenschaftliche Satelliten 1601 01:19:21,220 --> 01:19:24,600 zu etablieren, wie genau die Erdmagnetfeld in Wechselwirkung 1602 01:19:24,600 --> 01:19:27,410 mit Sonnenwinde. 1603 01:19:27,410 --> 01:19:30,800 Die Rakete wurde gebaut für der Europäischen Weltraumorganisation, 1604 01:19:30,800 --> 01:19:34,370 und von seiner Anlage abgehoben an der Küste von Französisch-Guayana. 1605 01:19:34,370 --> 01:19:37,540 >> -Am Etwa 37 Sekunden in die Flucht, sie zum ersten Mal 1606 01:19:37,540 --> 01:19:39,270 bemerkte etwas los war falsch. 1607 01:19:39,270 --> 01:19:42,250 Die Düsen wurden Einschwenken ein Weg, sollten sie wirklich nicht. 1608 01:19:42,250 --> 01:19:46,580 Etwa 40 Sekunden nach Beginn des Fluges, klar, war das Fahrzeug in Schwierigkeiten. 1609 01:19:46,580 --> 01:19:48,850 >> Und das ist, wenn sie gemacht eine Entscheidung, es zu zerstören. 1610 01:19:48,850 --> 01:19:52,780 Der Bereich Sicherheitsbeauftragten, mit enormen Mut, drückte auf den Knopf, 1611 01:19:52,780 --> 01:19:58,150 die Rakete explodierte, bevor es könnte zu einer Gefahr für die öffentliche Sicherheit. 1612 01:19:58,150 --> 01:20:01,060 >> -Das War das Mädchen Fahrt der Ariane-5. 1613 01:20:01,060 --> 01:20:03,960 Und seine Zerstörung nahm Platz aufgrund eines Fehlers 1614 01:20:03,960 --> 01:20:05,822 in der Software-Rakete eingebettet. 1615 01:20:05,822 --> 01:20:08,280 -Das Problem auf der Ariane war dass es eine Zahl, 1616 01:20:08,280 --> 01:20:10,600 erforderlichen 64 Bits auszudrücken. 1617 01:20:10,600 --> 01:20:13,590 Und sie wollten zu konvertieren es zu einer 16-Bit-Zahl. 1618 01:20:13,590 --> 01:20:15,610 Sie gingen davon aus, dass die Zahl wurde nie gehen 1619 01:20:15,610 --> 01:20:20,980 sehr groß zu sein, dass die meisten von denen, Ziffern in einer Reihe 64-Bit waren Nullen. 1620 01:20:20,980 --> 01:20:22,440 Sie lagen falsch. 1621 01:20:22,440 --> 01:20:25,060 >> -Die Unfähigkeit eines Software-Programm zu akzeptieren, 1622 01:20:25,060 --> 01:20:29,510 die Art der Zahl, die durch ein anderer war an der Wurzel des Fehlers. 1623 01:20:29,510 --> 01:20:34,350 Software-Entwicklung hatte sich ein sehr kostspielig Teil der neuen Technologie. 1624 01:20:34,350 --> 01:20:38,140 Die Ariane-Rakete waren sehr erfolgreich, so viel von der Software 1625 01:20:38,140 --> 01:20:41,550 erstellt für sie auch war in der Ariane-5 verwendet. 1626 01:20:41,550 --> 01:20:47,940 >> -Der Grundproblem war, dass die Ariane 5 war schneller, beschleunigt schneller. 1627 01:20:47,940 --> 01:20:51,450 Und die Software hatte nicht dafür entfielen. 1628 01:20:51,450 --> 01:20:55,060 >> -Die Zerstörung der Rakete war eine große finanzielle Katastrophe, 1629 01:20:55,060 --> 01:20:58,790 alle aufgrund einer Minute Softwarefehler. 1630 01:20:58,790 --> 01:21:01,210 Aber dies war nicht der erste Zeitdatenkonvertierungsprobleme 1631 01:21:01,210 --> 01:21:04,820 hatte modernen Raketentechnik geplagt. 1632 01:21:04,820 --> 01:21:08,050 >> -In 1991 mit dem Start des ersten Golfkriegs, 1633 01:21:08,050 --> 01:21:10,570 der Patriot Missile erlebt eine ähnliche Art 1634 01:21:10,570 --> 01:21:12,800 der Anzahl Umwandlung Problem. 1635 01:21:12,800 --> 01:21:16,090 Und als Ergebnis, 28 Personen, 28 amerikanische Soldaten, 1636 01:21:16,090 --> 01:21:19,080 wurden getötet, und über 100 weitere verletzt, 1637 01:21:19,080 --> 01:21:22,780 wenn der Patriot, die angeblich zum Schutz vor eingehenden scuds, 1638 01:21:22,780 --> 01:21:25,830 versäumt, eine Rakete abzufeuern. 1639 01:21:25,830 --> 01:21:31,670 >> -Wenn Irak in Kuwait einmarschierte, und Amerika ins Leben gerufen Desert Storm Anfang 1991, 1640 01:21:31,670 --> 01:21:35,780 Patriot Missile Batterien waren im Einsatz Saudi-Arabien und Israel zu schützen 1641 01:21:35,780 --> 01:21:39,230 von irakischen Scud-Raketenangriffe. 1642 01:21:39,230 --> 01:21:43,810 Der Patriot ist ein US-Mittelstrecken Boden-Luft-System, hergestellt 1643 01:21:43,810 --> 01:21:45,770 von der Raytheon Company. 1644 01:21:45,770 --> 01:21:52,340 >> -Die Größe des Patriot-Interceptor selbst ist etwa in etwa 20 Meter lang. 1645 01:21:52,340 --> 01:21:55,230 Und es wiegt etwa 2000 Pfund. 1646 01:21:55,230 --> 01:21:59,320 Und es trägt einen Gefechtskopf von etwa, Ich denke, es ist ungefähr 150 Pfund. 1647 01:21:59,320 --> 01:22:03,930 Und der Gefechtskopf selbst ist ein hochexplosiven Sprengstoff, die 1648 01:22:03,930 --> 01:22:07,330 hat Fragmente herum. 1649 01:22:07,330 --> 01:22:11,680 Das Gehäuse des Gefechtskopfes ist, entworfen, um wie Schrot zu handeln. 1650 01:22:11,680 --> 01:22:14,110 >> -Die Raketen durch vier pro Behälter, 1651 01:22:14,110 --> 01:22:17,130 und durch ein Sattelauflieger transportiert werden. 1652 01:22:17,130 --> 01:22:24,930 >> -Der Patriot Anti-Raketen-System mindestens 20 Jahren geht nun zurück. 1653 01:22:24,930 --> 01:22:28,420 Es wurde ursprünglich entworfen als Luftabwehrrakete 1654 01:22:28,420 --> 01:22:30,720 feindliche Flugzeuge abzuschießen. 1655 01:22:30,720 --> 01:22:34,500 Im ersten Golfkrieg, wenn dieser Krieg kam, 1656 01:22:34,500 --> 01:22:39,745 die Armee wollte es verwenden, um abzuschießen scuds, keine Flugzeuge. 1657 01:22:39,745 --> 01:22:43,620 >> Die irakische Luftwaffe nicht so sehr ein Problem. 1658 01:22:43,620 --> 01:22:46,670 Aber die Armee über scuds besorgt. 1659 01:22:46,670 --> 01:22:50,170 Und so versuchten sie zu Upgrade der Patriot. 1660 01:22:50,170 --> 01:22:52,800 >> -Intercepting Einen Feind Rakete reist mit Mach 5 1661 01:22:52,800 --> 01:22:55,830 würde anspruchsvoll genug zu sein. 1662 01:22:55,830 --> 01:22:58,490 Aber wenn der Patriot wurde in Dienst gehetzt, 1663 01:22:58,490 --> 01:23:02,860 die Armee war nicht bekannt, ein Irakische Modifikation, die gemacht 1664 01:23:02,860 --> 01:23:05,930 ihre scuds fast unmöglich zu schlagen. 1665 01:23:05,930 --> 01:23:10,740 >> -Was Ist passiert die scuds, dass in kamen waren instabil. 1666 01:23:10,740 --> 01:23:11,692 Sie wurden Wackeln. 1667 01:23:11,692 --> 01:23:14,910 Der Grund dafür war, die Iraker, um 1668 01:23:14,910 --> 01:23:18,280 zu bekommen 600 Kilometer aus einer 300 km 1669 01:23:18,280 --> 01:23:21,700 range missile, nahm Gewicht aus dem vorderen Gefechtskopf. 1670 01:23:21,700 --> 01:23:23,390 Sie machten der Gefechtskopf leichter. 1671 01:23:23,390 --> 01:23:27,330 >> So, jetzt die Patriot ist versuchen, an der Scud zu kommen. 1672 01:23:27,330 --> 01:23:30,230 Und die meiste Zeit, die überwältigende Mehrheit der Zeit, 1673 01:23:30,230 --> 01:23:32,940 es wäre nur durch die Scud fliegen. 1674 01:23:32,940 --> 01:23:37,260 Sobald die Patriot Netzbetreiber erkannte der Patriot sein Ziel verfehlt, 1675 01:23:37,260 --> 01:23:41,690 sie zur Detonation der Gefechtskopf Patriot mögliche Verluste, wenn es zu vermeiden 1676 01:23:41,690 --> 01:23:44,570 Man ließ den Boden fallen. 1677 01:23:44,570 --> 01:23:48,790 >> -Das War das, was die meisten Leute sahen, die großen Feuerkugeln in den Himmel, 1678 01:23:48,790 --> 01:23:54,550 und falsch verstanden als Abschnitte mit Scud Sprengköpfe. 1679 01:23:54,550 --> 01:23:56,630 >> -Obwohl In der Nacht Himmel, Patriots erschienen 1680 01:23:56,630 --> 01:24:00,370 um erfolgreich Scud-Raketen, bei Dhahran zu zerstören, 1681 01:24:00,370 --> 01:24:03,360 es konnte kein Fehler sein über seine Leistung. 1682 01:24:03,360 --> 01:24:07,970 Dort wird das Radarsystem Patriot Spur eines eingehenden Scud verloren, 1683 01:24:07,970 --> 01:24:10,721 und nie ins Leben gerufen durch zu einem Software-Fehler. 1684 01:24:10,721 --> 01:24:14,090 1685 01:24:14,090 --> 01:24:18,940 Es waren die Israelis, die zum ersten Mal entdeckt dass je länger war das System, 1686 01:24:18,940 --> 01:24:22,690 desto größer ist die Zeit Diskrepanz geworden ist, aufgrund eines Takt eingebettet 1687 01:24:22,690 --> 01:24:24,810 in dem Computer des Systems. 1688 01:24:24,810 --> 01:24:28,210 >> -Über Zwei Wochen vor die Tragödie in Dhahran, 1689 01:24:28,210 --> 01:24:30,770 die Israelis berichtet das Verteidigungsministerium 1690 01:24:30,770 --> 01:24:32,590 , dass das System Zeit zu verlieren. 1691 01:24:32,590 --> 01:24:35,360 Nach etwa acht Stunden oder Laufen, sie bemerkten, dass das System 1692 01:24:35,360 --> 01:24:37,720 deutlich weniger genau war immer. 1693 01:24:37,720 --> 01:24:41,900 Das Verteidigungsministerium reagierte alle der Patriot-Batterien zu sagen 1694 01:24:41,900 --> 01:24:44,950 zu verlassen, nicht die Systeme für eine lange Zeit. 1695 01:24:44,950 --> 01:24:49,160 Sie sagten nie, was eine lange Zeit was-- 8 Stunden, 10 Stunden 1.000 Stunden. 1696 01:24:49,160 --> 01:24:51,360 Niemand wusste. 1697 01:24:51,360 --> 01:24:53,380 >> -Der Patriot-Batterie in der Kaserne stationiert 1698 01:24:53,380 --> 01:24:58,350 bei Dhahran und seine fehlerhafte interne Uhr war über 100 Stunden gewesen auf 1699 01:24:58,350 --> 01:25:01,670 in der Nacht vom 25. Februar. 1700 01:25:01,670 --> 01:25:05,917 >> -it Nachgeführt Zeit mit einer Genauigkeit von etwa einem Zehntel einer Sekunde. 1701 01:25:05,917 --> 01:25:08,000 Nun wird eine Zehntelsekunde ist eine interessante Zahl, 1702 01:25:08,000 --> 01:25:11,920 weil es nicht exprimierenden kann binär genau, was 1703 01:25:11,920 --> 01:25:16,820 bedeutet, kann es nicht genau ausgedrückt werden in jedem modernen digitalen Computer. 1704 01:25:16,820 --> 01:25:18,540 Es ist schwer zu glauben. 1705 01:25:18,540 --> 01:25:21,210 >> Aber dies als ein Beispiel. 1706 01:25:21,210 --> 01:25:23,540 Lassen Sie uns die Nummer ein Drittel nehmen. 1707 01:25:23,540 --> 01:25:27,350 Ein Drittel kann nicht sein, genau in dezimal ausgedrückt. 1708 01:25:27,350 --> 01:25:32,080 Ein Drittel ist 0,333 geht für die Unendlichkeit. 1709 01:25:32,080 --> 01:25:36,480 >> Es gibt keine Möglichkeit, das zu tun, mit absolute Genauigkeit in dezimal. 1710 01:25:36,480 --> 01:25:39,560 Das ist genau die Art von Problem das geschah in der Patriot. 1711 01:25:39,560 --> 01:25:44,100 Je länger das System lief, die schlechter wurde der Zeitfehler. 1712 01:25:44,100 --> 01:25:48,890 >> -Nach 100 Betriebsstunden, die Fehler in der Zeit war nur etwa ein Drittel 1713 01:25:48,890 --> 01:25:50,600 einer Sekunde. 1714 01:25:50,600 --> 01:25:54,210 Aber in Bezug auf eine Ziel Rakete auf mach Reisen 5, 1715 01:25:54,210 --> 01:25:58,710 es führte zu einer Tracking Fehler von über 600 Metern. 1716 01:25:58,710 --> 01:26:02,120 Es wäre ein fataler Fehler sein für die Soldaten auf, was 1717 01:26:02,120 --> 01:26:08,940 passiert ist war eine Scud Start von Frühwarnsatelliten entdeckt 1718 01:26:08,940 --> 01:26:12,860 und sie wussten, dass die Scud war in ihrer allgemeinen Richtung. 1719 01:26:12,860 --> 01:26:15,320 Sie wussten nicht, wo es kam. 1720 01:26:15,320 --> 01:26:18,250 >> -Es War jetzt auf dem Radar nach oben Bestandteil des Patriot-System 1721 01:26:18,250 --> 01:26:23,190 verteidigen Dhahran zu lokalisieren und zu halten Spur des ankommenden feindlichen Rakete. 1722 01:26:23,190 --> 01:26:24,609 >> -Der Radar war sehr klug. 1723 01:26:24,609 --> 01:26:26,650 Es wäre tatsächlich verfolgen die Position des Scud, 1724 01:26:26,650 --> 01:26:30,350 und dann vorhersagen, wo es wahrscheinlich wäre das Radar das nächste Mal gesendet 1725 01:26:30,350 --> 01:26:31,420 einen Impuls aus. 1726 01:26:31,420 --> 01:26:33,110 Das war ein Range-Gate bezeichnet. 1727 01:26:33,110 --> 01:26:37,660 >> -Dann, Sobald der Patriot entscheidet, genügend Zeit hat, 1728 01:26:37,660 --> 01:26:42,450 vergangen, die als nächstes gehen Sie zurück und überprüfen Standort für dieses Objekt erkannt, 1729 01:26:42,450 --> 01:26:43,600 es geht zurück. 1730 01:26:43,600 --> 01:26:48,650 Also, wenn es ging zurück in die falsche Ort, es sieht dann kein Objekt. 1731 01:26:48,650 --> 01:26:52,160 Und es entscheidet, dass es keine war Objekt, es war eine falsche Erfassung, 1732 01:26:52,160 --> 01:26:53,930 und fällt die Spur. 1733 01:26:53,930 --> 01:26:57,030 >> -Der Eingehenden Scud verschwunden vom Radarschirm. 1734 01:26:57,030 --> 01:27:00,260 Und Sekunden später, die Kaserne rammte. 1735 01:27:00,260 --> 01:27:06,150 Die Scud getötet 28 und war der letzte gefeuert während des ersten Golfkriegs. 1736 01:27:06,150 --> 01:27:11,960 >> Tragisch, die aktualisierte Software kam am nächsten Tag bei Dhahran. 1737 01:27:11,960 --> 01:27:14,930 Die Software Fehler hatte wurde behoben, Schließen 1738 01:27:14,930 --> 01:27:19,806 ein Kapitel in der unruhigen Geschichte des Patriot-Rakete. 1739 01:27:19,806 --> 01:27:20,729 >> [VIDEO-WIEDERGABE] 1740 01:27:20,729 --> 01:27:23,520 DAVID J. MALAN: Also ist das alles zu sagen, dass diese Fragen von Überlauf 1741 01:27:23,520 --> 01:27:25,860 und Unschärfen sind nur allzu real. 1742 01:27:25,860 --> 01:27:26,920 Wie sind wir hierher gekommen? 1743 01:27:26,920 --> 01:27:28,895 Wir begannen mit nur etwa printf sprechen. 1744 01:27:28,895 --> 01:27:31,270 Auch diese Funktion, druckt etwas auf den Bildschirm, 1745 01:27:31,270 --> 01:27:33,450 und wir eingeführt danach einige andere Funktionen 1746 01:27:33,450 --> 01:27:34,945 von der CS50 der Bibliothek so genannte. 1747 01:27:34,945 --> 01:27:36,910 Und wir werden auch weiterhin sehen diese zu gegebener Zeit. 1748 01:27:36,910 --> 01:27:40,760 Und wir, vor allem, get-String, und bekommen int, und jetzt auch Schwimmer bekommen, 1749 01:27:40,760 --> 01:27:44,410 und noch andere noch werden wir treffen und nutzen, um uns vor lang. 1750 01:27:44,410 --> 01:27:47,220 >> Aber gelegentlich haben wir bereits eine Notwendigkeit gesehen 1751 01:27:47,220 --> 01:27:50,520 diese Funktionen Hand zu speichern, was zurück? 1752 01:27:50,520 --> 01:27:52,920 Sie übergeben uns eine Zeichenfolge zurück, oder ein int oder ein Schwimmer. 1753 01:27:52,920 --> 01:27:56,070 Und manchmal müssen wir darauf setzen String oder int oder float, irgendwo. 1754 01:27:56,070 --> 01:28:00,100 >> Und diese Dinge zu speichern, nur daran erinnern, wie in Scratch, haben wir Variablen. 1755 01:28:00,100 --> 01:28:03,260 Aber anders als in Scratch, in C haben wir tatsächlichen Typen 1756 01:28:03,260 --> 01:28:05,530 von variables-- Daten Typen, mehr generally-- 1757 01:28:05,530 --> 01:28:08,640 unter ihnen, ein String, ein int, ein schweben, und diese andere noch. 1758 01:28:08,640 --> 01:28:12,321 >> Und so, wenn wir Variablen in C erklären, wir werden unsere Datentypen deklarieren müssen. 1759 01:28:12,321 --> 01:28:14,820 Das ist nicht etwas, wir werden haben später im Semester zu tun 1760 01:28:14,820 --> 01:28:16,810 wie wir zu anderen Sprachen wechseln. 1761 01:28:16,810 --> 01:28:19,610 Aber jetzt, wir brauchen a priori im Voraus, 1762 01:28:19,610 --> 01:28:24,370 erklären auf den Computer, welche Art variabler wollen wir es uns zu geben. 1763 01:28:24,370 --> 01:28:27,290 >> Nun, inzwischen zu drucken diese Art von Datentypen, 1764 01:28:27,290 --> 01:28:29,570 wir haben zu sagen, printf, was zu erwarten. 1765 01:28:29,570 --> 01:28:32,450 Und wir sahen Prozent s für Streicher, und Prozent i für ganze Zahlen, 1766 01:28:32,450 --> 01:28:33,790 und ein paar andere schon. 1767 01:28:33,790 --> 01:28:37,237 Und das sind nur Anforderungen für die visuelle Präsentation 1768 01:28:37,237 --> 01:28:38,070 dieser Informationen. 1769 01:28:38,070 --> 01:28:42,080 >> Und jedes von diesen kann tatsächlich parametrisiert oder in irgendeiner Weise gezwickt, 1770 01:28:42,080 --> 01:28:45,370 wenn Sie wollen die Kontrolle zu fördern die Art der Ausgabe, die Sie erhalten. 1771 01:28:45,370 --> 01:28:49,604 Und in der Tat stellt sich heraus, dass nicht nur ist es für eine neue Zeile Backslash n. 1772 01:28:49,604 --> 01:28:52,520 Es ist etwas anderes Backslash genannt r für einen Wagenrücklauf, die 1773 01:28:52,520 --> 01:28:54,360 ist eher an eine alte Schule Schreibmaschine, 1774 01:28:54,360 --> 01:28:57,690 und auch verwendet, um Windows für viele Jahre. 1775 01:28:57,690 --> 01:28:59,690 >> Es gibt Backslash t für Tabs. 1776 01:28:59,690 --> 01:29:03,170 Es stellte sich heraus, dass, wenn Sie möchten, doppelte Anführungszeichen innerhalb eines Strings, 1777 01:29:03,170 --> 01:29:05,000 Daran erinnern, dass wir verwendet haben Doppel Zitat Doppel 1778 01:29:05,000 --> 01:29:07,900 Zitat auf der linken und der rechten Seite so weit endet unserer Saiten. 1779 01:29:07,900 --> 01:29:09,420 Das scheint Dinge zu verwirren. 1780 01:29:09,420 --> 01:29:12,503 >> Wenn Sie ein doppeltes Anführungszeichen setzen in die Mitte eines string-- und in der Tat, 1781 01:29:12,503 --> 01:29:13,670 es ist verwirrend zu sehen. 1782 01:29:13,670 --> 01:29:17,120 Und so müssen Sie entkommen, so zu sprechen, ein doppeltes Anführungszeichen mit etwas 1783 01:29:17,120 --> 01:29:18,860 wie wahrsten Sinne des Wortes Backslash doppelte Anführungszeichen. 1784 01:29:18,860 --> 01:29:20,230 Und es gibt noch ein paar andere noch. 1785 01:29:20,230 --> 01:29:24,540 Und wir werden mehr davon sehen bei der tatsächlichen Verwendung vor lang. 1786 01:29:24,540 --> 01:29:27,930 >> Also lassen Sie nun den Übergang von Daten und Darstellung, 1787 01:29:27,930 --> 01:29:30,820 und arithmetische Operatoren, alle von denen gab uns einige Gebäude 1788 01:29:30,820 --> 01:29:32,070 mit denen Blöcke zu spielen. 1789 01:29:32,070 --> 01:29:34,481 Aber nun tatsächlich geben uns der Rest des Vokabulars 1790 01:29:34,481 --> 01:29:36,230 dass wir bereits hatten letzte Woche mit Scratch 1791 01:29:36,230 --> 01:29:39,350 durch einen Blick auf einige andere nehmen Konstrukte in C-- nicht alle von ihnen. 1792 01:29:39,350 --> 01:29:41,680 Aber die Ideen, die wir sind über wirklich nur um zu sehen 1793 01:29:41,680 --> 01:29:45,610 Übersetzung zu betonen, aus eine Sprache, Scratch, zum anderen, C. 1794 01:29:45,610 --> 01:29:48,470 >> Und im Laufe der Zeit werden wir holen auf Weitere Tools für unser Toolkit, 1795 01:29:48,470 --> 01:29:49,820 sozusagen syntaktisch. 1796 01:29:49,820 --> 01:29:54,190 Und in der Tat, werden Sie, dass die Ideen sehen jetzt sind eher bekannt aus der letzten Woche. 1797 01:29:54,190 --> 01:29:55,200 Also lassen Sie uns dies tun. 1798 01:29:55,200 --> 01:29:58,870 >> Fahren wir fort und Peitsche ein Programm dass tatsächlich nutzt einige Ausdrücke, 1799 01:29:58,870 --> 01:30:00,720 ein Boolescher Ausdruck. 1800 01:30:00,720 --> 01:30:02,810 Lassen Sie mich gehen Sie voran hier und erstellen Sie eine neue Datei. 1801 01:30:02,810 --> 01:30:06,090 Ich werde diese condition.c nennen. 1802 01:30:06,090 --> 01:30:09,350 >> Lassen Sie mich gehen Sie vor und die CS50-Bibliothek enthalten. 1803 01:30:09,350 --> 01:30:12,640 Und lassen Sie mich gehen Sie vor und schließen Standard io.h für unsere Funktionen, 1804 01:30:12,640 --> 01:30:14,690 und printf und vieles mehr sind. 1805 01:30:14,690 --> 01:30:18,900 Ich gebe mir diese vorformulierten von int main Leere, deren Erklärung wir werden 1806 01:30:18,900 --> 01:30:20,360 kommen zurück in die Zukunft. 1807 01:30:20,360 --> 01:30:23,820 >> Nun lassen Sie mich gehen Sie vor und geben selbst ein int über get int. 1808 01:30:23,820 --> 01:30:25,970 Dann lassen Sie mich gehen Sie vor und tun dies. 1809 01:30:25,970 --> 01:30:30,150 Ich möchte sagen, wenn ich das ist less-- lassen unterscheiden zwischen positiv, negativ, 1810 01:30:30,150 --> 01:30:31,260 oder Null-Werte. 1811 01:30:31,260 --> 01:30:36,630 >> Also, wenn ich kleiner als Null ist, lassen Sie mich nur dieses Programm haben einfach sagen: 1812 01:30:36,630 --> 01:30:42,370 negativ, Backslash n, sonst wenn i größer als Null ist. 1813 01:30:42,370 --> 01:30:47,030 Nun bin ich, natürlich, gehen zu sagen, printf positiv, Backslash n. 1814 01:30:47,030 --> 01:30:50,690 Und dann sonst if-- ich dies tun könnte. 1815 01:30:50,690 --> 01:30:53,410 >> Ich konnte tun, wenn ich gleich 0. 1816 01:30:53,410 --> 01:30:55,840 Aber ich würde auf, mindestens ein Fehler bereits. 1817 01:30:55,840 --> 01:30:59,480 Daran erinnern, dass das Gleichheitszeichen nicht gleich, wie wir Menschen es kennen. 1818 01:30:59,480 --> 01:31:01,010 >> Aber es ist der Zuweisungsoperator. 1819 01:31:01,010 --> 01:31:05,640 Und wir wollen nicht 0 auf die zu nehmen Recht und legte es auf der linken Seite in i. 1820 01:31:05,640 --> 01:31:11,810 Also diese Verwirrung zu vermeiden, oder vielleicht Missbrauch der Gleichheitszeichen, 1821 01:31:11,810 --> 01:31:14,740 Menschen entschieden vor einigen Jahren dass in vielen Programmiersprachen 1822 01:31:14,740 --> 01:31:18,000 wenn Sie möchten, auf Gleichheit zu überprüfen zwischen der linken und der rechten Seite, 1823 01:31:18,000 --> 01:31:19,635 Sie verwenden eigentlich gleich Gleichen. 1824 01:31:19,635 --> 01:31:21,010 So schlagen Sie das Gleichheits zweimal unterschreiben. 1825 01:31:21,010 --> 01:31:25,600 Wenn Sie möchten, von rechts nach zuweisen nach links, verwenden Sie ein einzelnes Gleichheitszeichen. 1826 01:31:25,600 --> 01:31:29,360 So konnten wir this-- anderes tun wenn i gleich Null ist. 1827 01:31:29,360 --> 01:31:31,710 >> Ich konnte dann gehen und öffne meine geschweiften Klammern, 1828 01:31:31,710 --> 01:31:36,087 und sagen: printf 0, Backslash n, fertig. 1829 01:31:36,087 --> 01:31:38,170 Aber denken Sie daran, wie diese Gabeln in der Straße arbeiten. 1830 01:31:38,170 --> 01:31:39,836 Und wirklich, man denke nur an die Logik. 1831 01:31:39,836 --> 01:31:41,510 i eine Zahl ist. 1832 01:31:41,510 --> 01:31:43,320 Es ist eine ganze Zahl, die speziell. 1833 01:31:43,320 --> 01:31:48,600 Und das bedeutet, es wird weniger sein als 0 oder größer als 0 ist, oder 0 ist. 1834 01:31:48,600 --> 01:31:51,600 So ist es Art dieser implizite Standardfall. 1835 01:31:51,600 --> 01:31:54,920 >> Und so konnten wir, genau wie Scratch, verzichten auf den anderen, wenn, 1836 01:31:54,920 --> 01:31:55,747 und einfach sagen andere. 1837 01:31:55,747 --> 01:31:57,830 Logisch, wenn Sie die Programmierer wissen, dass es nur 1838 01:31:57,830 --> 01:32:01,635 drei Schaufeln in die ein Szenario kann die erste fall--, 1839 01:32:01,635 --> 01:32:03,510 der zweite oder der dritte in dieser Fall-- nicht 1840 01:32:03,510 --> 01:32:07,100 Mühe, die zusätzliche Präzision Zugabe und die zusätzliche Logik gibt. 1841 01:32:07,100 --> 01:32:09,690 Dann nichts wie los mit der Standardfall hier von anderen. 1842 01:32:09,690 --> 01:32:11,950 >> Nun lassen Sie uns fortfahren danach zu speichern, machen 1843 01:32:11,950 --> 01:32:15,760 Bedingungen dot slash conditions-- nicht eine große Benutzeroberfläche, 1844 01:32:15,760 --> 01:32:18,914 weil ich Aufforderung nicht die Benutzer, wie ich bereits erwähnt. 1845 01:32:18,914 --> 01:32:19,580 Aber das ist in Ordnung. 1846 01:32:19,580 --> 01:32:20,454 Wir werden es einfach zu halten. 1847 01:32:20,454 --> 01:32:21,890 Lassen Sie uns versuchen, die Nummer 42. 1848 01:32:21,890 --> 01:32:23,240 Und das ist positiv. 1849 01:32:23,240 --> 01:32:26,120 Lassen Sie uns die Nummer versuchen negativ 42 negativ. 1850 01:32:26,120 --> 01:32:28,244 >> Lassen Sie uns den Wert 0 zu versuchen. 1851 01:32:28,244 --> 01:32:29,160 Und in der Tat, es funktioniert. 1852 01:32:29,160 --> 01:32:33,900 Nun, werden Sie mit Problemen sehen vor lange, Prüfung Dinge dreimal, 1853 01:32:33,900 --> 01:32:34,980 wahrscheinlich nicht ausreichend. 1854 01:32:34,980 --> 01:32:37,438 Sie wollen wahrscheinlich etwas zu testen größere Zahlen, einige kleinere 1855 01:32:37,438 --> 01:32:40,520 Zahlen, einige Sonderfälle, wie wir kommen, um sie zu beschreiben. 1856 01:32:40,520 --> 01:32:42,500 >> Aber jetzt, ist dies ein ziemlich einfaches Programm. 1857 01:32:42,500 --> 01:32:45,160 Und ich bin mir ziemlich sicher, logisch, dass es sich in drei Fällen. 1858 01:32:45,160 --> 01:32:49,360 Und in der Tat, auch wenn wir nur auf die möglichen Nachteile konzentriert 1859 01:32:49,360 --> 01:32:53,480 Unschärfen und Überlauf, in Realität, wo viele von CS50 Probleme, 1860 01:32:53,480 --> 01:32:56,000 wir werden keine Sorgen zu machen über, die ganze Zeit, 1861 01:32:56,000 --> 01:32:59,050 diese Fragen von Überlauf und Ungenauigkeit, weil in der Tat in C, 1862 01:32:59,050 --> 01:33:01,889 es ist eigentlich gar nicht so einfach, diese Dinge zu vermeiden. 1863 01:33:01,889 --> 01:33:04,180 Wenn Sie möchten, bis zu zählen größer und größer, und größer, 1864 01:33:04,180 --> 01:33:07,510 es stellt sich heraus, es gibt Techniken, die Sie kann verwendet werden, die oft als denen Dinge 1865 01:33:07,510 --> 01:33:11,240 Bibliotheken, Sammlungen von Code, dass andere Leute geschrieben, dass Sie verwenden können, 1866 01:33:11,240 --> 01:33:13,910 und andere Sprachen wie Java und andere, eigentlich 1867 01:33:13,910 --> 01:33:15,800 machen es viel einfacher zu zählen, sogar noch höher. 1868 01:33:15,800 --> 01:33:19,810 So ist es wirklich einige dieser Gefahren eine Funktion der Sprache, die Sie verwenden. 1869 01:33:19,810 --> 01:33:22,710 Und in den kommenden Wochen werden wir sehen, wie gefährlich C wirklich 1870 01:33:22,710 --> 01:33:24,950 kann sein, wenn Sie es nicht richtig zu verwenden. 1871 01:33:24,950 --> 01:33:27,610 Aber von dort, und mit Python und JavaScript werden 1872 01:33:27,610 --> 01:33:32,620 wir Schicht auf einige zusätzliche Schutzmaßnahmen, und laufen weniger dieser Risiken. 1873 01:33:32,620 --> 01:33:35,820 >> Also lassen Sie uns ein wenig mehr machen interessante Logik in unserem Programm. 1874 01:33:35,820 --> 01:33:39,110 Also lassen Sie mich gehen Sie vor und erstellen ein Programm namens Logical 1875 01:33:39,110 --> 01:33:43,804 nur so kann ich mit einigen spielen eigentliche Logik, logical.c. 1876 01:33:43,804 --> 01:33:46,870 Ich werde einfach kopieren und einige Code aus früheren so komme ich zurück 1877 01:33:46,870 --> 01:33:49,950 zu diesem schönen Ausgangspunkt. 1878 01:33:49,950 --> 01:33:53,980 >> Lassen Sie mich diese Zeit tun char C. Ich bin geht es einen Namen von C zu geben, 1879 01:33:53,980 --> 01:33:58,510 nur weil es konventionell, ein Zeichen von der Benutzer zu bekommen. 1880 01:33:58,510 --> 01:34:00,730 Und lassen Sie uns so tun, wie Ich bin der Umsetzung Teil 1881 01:34:00,730 --> 01:34:04,130 dieses Rm Programm, das Entfernen Programm vor, dass aufgefordert, den Benutzer 1882 01:34:04,130 --> 01:34:05,400 eine Datei zu entfernen. 1883 01:34:05,400 --> 01:34:06,750 Wie können wir das tun? 1884 01:34:06,750 --> 01:34:11,090 >> Ich möchte sagen, wenn C gleich entspricht, Zitat Ende des Zitats, 1885 01:34:11,090 --> 01:34:16,304 y, dann werde ich davon ausgehen, dass der Benutzer hat ja gewählt. 1886 01:34:16,304 --> 01:34:17,470 Ich werde nur drucken ja. 1887 01:34:17,470 --> 01:34:19,440 Wenn es tatsächlich zu schreiben das Programm zum Entfernen, 1888 01:34:19,440 --> 01:34:21,420 wir könnten die Datei entfernen mit mehr Zeilen Code. 1889 01:34:21,420 --> 01:34:22,461 Aber wir werden es einfach halten. 1890 01:34:22,461 --> 01:34:25,950 1891 01:34:25,950 --> 01:34:31,250 >> Else, wenn c gleich gleich n-- und jetzt hier, ich werde sagen, 1892 01:34:31,250 --> 01:34:32,980 der Benutzer muss nicht gemeint haben. 1893 01:34:32,980 --> 01:34:34,360 Und dann anders, weißt du was? 1894 01:34:34,360 --> 01:34:36,200 Ich weiß nicht, was sonst der Benutzer wird zu tippen. 1895 01:34:36,200 --> 01:34:38,533 Also werde ich nur sagen, dass, das ist ein Fehler, was auch immer 1896 01:34:38,533 --> 01:34:40,070 er oder sie tatsächlich eingegeben haben. 1897 01:34:40,070 --> 01:34:41,180 >> Also, was ist hier los? 1898 01:34:41,180 --> 01:34:44,530 Es besteht ein grundlegender Unterschied gegenüber, was ich in der Vergangenheit getan haben. 1899 01:34:44,530 --> 01:34:49,300 Doppelte Anführungszeichen, doppelte Anführungszeichen, doppelte Zitate, und doch einfache Anführungszeichen, 1900 01:34:49,300 --> 01:34:50,170 einfache Anführungszeichen. 1901 01:34:50,170 --> 01:34:52,860 Es stellt sich heraus in C, dass, wenn Sie wollen einen String zu schreiben, 1902 01:34:52,860 --> 01:34:56,680 nur tun Sie doppelte Anführungszeichen verwenden, wie wir haben die ganze Zeit mit printf im Einsatz. 1903 01:34:56,680 --> 01:35:02,030 >> Aber wenn Sie mit nur einem zu beschäftigen einzelnes Zeichen, ein sogenanntes char, 1904 01:35:02,030 --> 01:35:03,780 dann tatsächlich Sie einfache Anführungszeichen verwenden. 1905 01:35:03,780 --> 01:35:05,450 Diejenigen von euch, die programmiert haben vor, könnten Sie nicht haben 1906 01:35:05,450 --> 01:35:07,850 hatte zu kümmern Unterscheidung in bestimmten Sprachen. 1907 01:35:07,850 --> 01:35:09,450 In C, es spielt eine Rolle. 1908 01:35:09,450 --> 01:35:12,560 Und so, wenn ich ein Zeichen bekommen, und ich will dass char equals zu vergleichen 1909 01:35:12,560 --> 01:35:18,350 bis zu einem gewissen Brief wie y oder n gleich, ich tue, in der Tat, müssen Sie die einfachen Anführungszeichen zu haben. 1910 01:35:18,350 --> 01:35:19,770 >> Nun lassen Sie uns gehen Sie vor und tun dies. 1911 01:35:19,770 --> 01:35:26,180 Fahren wir fort und machen logische Punkt Slash logisch. 1912 01:35:26,180 --> 01:35:27,305 Und jetzt aufgefordert, ich bin zu werden. 1913 01:35:27,305 --> 01:35:30,638 Also, vermutlich eine bessere Benutzererfahrung würde mir eigentlich sagen, was hier zu tun. 1914 01:35:30,638 --> 01:35:33,030 Aber ich werde einfach blind sagen y für ja, OK, schön. 1915 01:35:33,030 --> 01:35:35,780 >> Lassen Sie uns laufen sie wieder, n für nein, schön. 1916 01:35:35,780 --> 01:35:39,610 Angenommen, wie gewisse Leute, die ich kenne, meine Caps Lock-Taste auf allzu oft ist. 1917 01:35:39,610 --> 01:35:43,740 Also ich Kapital Y, geben, Fehler. 1918 01:35:43,740 --> 01:35:46,130 OK, es ist nicht genau das, was ich erwarte. 1919 01:35:46,130 --> 01:35:48,170 Tatsächlich ist der Computer tut buchstäblich was 1920 01:35:48,170 --> 01:35:51,794 Ich sagte es zu do-- überprüfen Klein y und Klein n. 1921 01:35:51,794 --> 01:35:53,960 Das fühlt sich nicht wie gut Benutzererfahrung, aber. 1922 01:35:53,960 --> 01:35:59,010 Lassen Sie mich fragen Sie nach und akzeptieren entweder Klein- oder Großbuchstaben. 1923 01:35:59,010 --> 01:36:02,090 So stellt sich heraus, könnten Sie wollen etwas zu sagen wie in Scratch, 1924 01:36:02,090 --> 01:36:08,150 wie wörtlich oder C gleich gleich Kapital Single zitiert y. 1925 01:36:08,150 --> 01:36:11,400 Es stellte sich heraus, C nicht über diese wörtliche Schlüsselwort oder. 1926 01:36:11,400 --> 01:36:12,880 >> Aber es hat zwei vertikale Balken haben. 1927 01:36:12,880 --> 01:36:15,463 Sie haben die Umschalttaste zu halten in der Regel, wenn Sie eine US-Tastatur verwenden, 1928 01:36:15,463 --> 01:36:18,910 und drücken Sie die vertikale Leiste Taste über Ihren Return-Taste. 1929 01:36:18,910 --> 01:36:22,410 Aber diese vertikale Leiste Senkrechtstrich bedeutet oder. 1930 01:36:22,410 --> 01:36:26,220 >> Wird dagegen wollten wir zu sagen, und, wie in Scratch, 1931 01:36:26,220 --> 01:36:28,180 wir konnten Ampersand Ampersand tun. 1932 01:36:28,180 --> 01:36:31,330 Das macht keinen logischen Sinn hier, weil ein Mensch unmöglich 1933 01:36:31,330 --> 01:36:37,110 eingegeben haben beide y und Klein y und Kapital Y als dem gleichen Charakter. 1934 01:36:37,110 --> 01:36:39,470 So oder ist das, was wollen wir hier. 1935 01:36:39,470 --> 01:36:46,280 >> Also, wenn ich das in beiden Orten, oder c gleich ist gleich Kapital N, jetzt erneut auszuführen, 1936 01:36:46,280 --> 01:36:49,390 machen logisch, erneut ausführen, logisch. 1937 01:36:49,390 --> 01:36:51,200 Jetzt kann ich geben Sie y ein. 1938 01:36:51,200 --> 01:36:53,920 Und ich kann es wieder tun mit Hauptstadt Y oder Kapital N. 1939 01:36:53,920 --> 01:36:56,630 Und ich konnte in weiteren hinzufügen noch Kombinationen. 1940 01:36:56,630 --> 01:36:58,810 >> Das ist also eine logische Programm soweit jetzt 1941 01:36:58,810 --> 01:37:01,940 Ich überprüfe logisch für dieser Wert oder dieser Wert. 1942 01:37:01,940 --> 01:37:06,420 Und ich habe nicht notwendigerweise kommen mit zwei mehr ifs oder sonst ifs. 1943 01:37:06,420 --> 01:37:09,960 Ich kann tatsächlich etwas von dem Mähdrescher Logik zusammen auf diese Weise zusammen. 1944 01:37:09,960 --> 01:37:11,950 So wäre dies besser konzipiert als einfach 1945 01:37:11,950 --> 01:37:17,490 sagen, wenn C niedriger Fall y gleich, drucken ja, sonst, wenn c Kapital Y entspricht, 1946 01:37:17,490 --> 01:37:20,074 drucken ja, sonst, wenn c gleich lower-- in anderen Worten, 1947 01:37:20,074 --> 01:37:21,990 Sie müssen nicht haben immer mehr Filialen. 1948 01:37:21,990 --> 01:37:28,840 Sie können einige der äquivalenten kombinieren Zweige logisch, da auf diese Weise. 1949 01:37:28,840 --> 01:37:34,150 >> Lassen Sie uns also auf nur einen Blick ein letzte Zutat, eine endgültige Konstrukt, 1950 01:37:34,150 --> 01:37:34,847 daß C ermöglicht. 1951 01:37:34,847 --> 01:37:36,930 Und wir werden in die zurückkommen noch andere Zukunft. 1952 01:37:36,930 --> 01:37:41,400 Und dann werden wir schließen, indem Sie bei nicht die Richtigkeit der code-- 1953 01:37:41,400 --> 01:37:46,070 immer Code work-- aber das Design von Code und pflanzen früh diese Samen. 1954 01:37:46,070 --> 01:37:51,337 >> Also lassen Sie mich gehen Sie vor und Öffnen Sie eine neue Datei hier oben. 1955 01:37:51,337 --> 01:37:51,920 Weißt du was? 1956 01:37:51,920 --> 01:37:54,450 Ich werde neu implementieren das gleiche Programm, 1957 01:37:54,450 --> 01:37:55,940 aber mit einem anderen Konstrukt. 1958 01:37:55,940 --> 01:38:00,110 >> Also lassen Sie mich schnell selbst geben Zugang zu umfassen CS50.h 1959 01:38:00,110 --> 01:38:04,150 für die CS50-Bibliothek, Standard io.h für printf. 1960 01:38:04,150 --> 01:38:06,510 Gib mir meine int main nichtig. 1961 01:38:06,510 --> 01:38:09,310 Und dann hier vorbei, lassen mich voran gehen und tun dies. 1962 01:38:09,310 --> 01:38:12,010 >> Char c erhält char bekommen, genau wie zuvor. 1963 01:38:12,010 --> 01:38:16,770 Und ich werde ein neues Konstrukt zu verwenden now-- wechseln, auf welchen Charakter? 1964 01:38:16,770 --> 01:38:19,820 So Schalter ist eine Art, wie Schalten eines Bahngleisen. 1965 01:38:19,820 --> 01:38:22,070 Oder wirklich, ist es eine Art von ein, wenn sonst, wenn sonst, wenn, 1966 01:38:22,070 --> 01:38:23,980 aber etwas anders geschrieben. 1967 01:38:23,980 --> 01:38:25,490 >> Ein Schalter sieht wie folgt aus. 1968 01:38:25,490 --> 01:38:29,060 Sie haben Schalter, und dann, was Zeichen oder Nummer, die Sie wollen, zu betrachten, 1969 01:38:29,060 --> 01:38:32,000 dann wie einige geschweiften Klammern in Scratch, nur sagen, diese Dinge zu tun. 1970 01:38:32,000 --> 01:38:33,480 Und dann haben Sie verschiedene Fälle. 1971 01:38:33,480 --> 01:38:34,830 >> Sie nicht, ob und anderes verwenden. 1972 01:38:34,830 --> 01:38:37,050 Sie verwenden buchstäblich das Wort Fall. 1973 01:38:37,050 --> 01:38:38,790 Und Sie würden so etwas wie dies sagen. 1974 01:38:38,790 --> 01:38:43,820 >> So im Fall eines Klein y, oder im Falle einer Kapital Y, 1975 01:38:43,820 --> 01:38:47,350 gehen Sie vor und drucken ja aus. 1976 01:38:47,350 --> 01:38:49,020 Und dann brechen aus dem Schalter. 1977 01:38:49,020 --> 01:38:49,580 Das ist es. 1978 01:38:49,580 --> 01:38:50,880 Wir sind fertig. 1979 01:38:50,880 --> 01:38:57,270 >> Else, wenn sozusagen, Kleinbuchstaben n, oder Kapital N, 1980 01:38:57,270 --> 01:39:02,560 dann gehen Sie vor und drucken out nein, und dann brechen. 1981 01:39:02,560 --> 01:39:08,022 Else-- und diese Art von ist die Standardfall indeed-- printf error-- 1982 01:39:08,022 --> 01:39:10,980 und nur für eine gute Maßnahme, obwohl sie logisch dieser Bruch ist nicht notwendig, 1983 01:39:10,980 --> 01:39:12,896 weil wir am Ende sind des Schalters sowieso, 1984 01:39:12,896 --> 01:39:14,520 Ich breche jetzt der Schalter aus. 1985 01:39:14,520 --> 01:39:16,280 So sieht das ein wenig anders. 1986 01:39:16,280 --> 01:39:18,272 >> Aber logisch, es ist tatsächlich gleichwertig. 1987 01:39:18,272 --> 01:39:19,980 Und warum würden Sie einen über den anderen? 1988 01:39:19,980 --> 01:39:23,220 Manchmal nur eine persönliche Vorliebe, manchmal die Ästhetik, 1989 01:39:23,220 --> 01:39:25,420 wenn ich auf dieser Blick Jetzt gibt es etwas 1990 01:39:25,420 --> 01:39:27,510 um für die gesagt werden, Lesbarkeit des Codes. 1991 01:39:27,510 --> 01:39:30,690 Ich meine, dagegen nie die Tatsache, dass diese Code ist neu für viele von uns im Zimmer. 1992 01:39:30,690 --> 01:39:33,515 >> Aber es ist nur irgendwie hübsch. 1993 01:39:33,515 --> 01:39:37,760 Sie sehen Klein y, Hauptstadt Y, Kleinbuchstaben n, Hauptstadt N Standard, 1994 01:39:37,760 --> 01:39:40,150 es ist eine Art von gerade springt out bei Ihnen in einer Weise, 1995 01:39:40,150 --> 01:39:42,200 dass, wohl, vielleicht Das vorherige Beispiel 1996 01:39:42,200 --> 01:39:45,780 mit der ifs, und die vertikalen Balken, und die sonst ifs, vielleicht nicht haben. 1997 01:39:45,780 --> 01:39:51,600 Also das ist wirklich eine Frage des persönlichen Wahl, wirklich, oder Lesbarkeit, 1998 01:39:51,600 --> 01:39:52,360 des Codes. 1999 01:39:52,360 --> 01:39:58,230 >> Aber in Bezug auf Funktionalität, lassen Sie mich gehen Sie vor und machen einen Schalter, Punkt slash 2000 01:39:58,230 --> 01:40:05,830 Schalter und geben Sie jetzt in Klein y, Hauptstadt Y, Klein n, Hauptstadt N, 2001 01:40:05,830 --> 01:40:09,250 David, versuchen Sie es erneut, denn das ist nicht ein einzelnes Zeichen. 2002 01:40:09,250 --> 01:40:12,050 Lassen Sie uns tun x, Fehler, wie erwartet. 2003 01:40:12,050 --> 01:40:15,640 Und logically-- und das ist etwas Ich möchte Sie ermutigen in general-- sogar 2004 01:40:15,640 --> 01:40:17,790 obwohl wir kratzen nur die Oberfläche einiger dieser Funktionen. 2005 01:40:17,790 --> 01:40:20,560 >> Und es könnte nicht offensichtlich sein, wenn Sie selbst sitzen auf der Tastatur gedrückt, 2006 01:40:20,560 --> 01:40:21,370 wie funktioniert das? 2007 01:40:21,370 --> 01:40:22,240 Was würde das tun? 2008 01:40:22,240 --> 01:40:25,630 Das Schöne daran, mit ein Laptop oder Desktop oder Zugang 2009 01:40:25,630 --> 01:40:29,290 an einen Computer mit einem Compiler, und mit einem Code-Editor wie diese, 2010 01:40:29,290 --> 01:40:32,990 wird Ihnen diese Antwort fast immer kann Fragen nur für sich selbst, indem Sie versuchen. 2011 01:40:32,990 --> 01:40:36,570 >> Zum Beispiel, wenn die rhetorische Frage bei der Hand waren, 2012 01:40:36,570 --> 01:40:39,540 was passiert, wenn man vergessen Ihre break-Anweisungen? 2013 01:40:39,540 --> 01:40:41,400 Was ist eigentlich ein sehr häufig, was zu tun, 2014 01:40:41,400 --> 01:40:43,540 weil es nicht sieht wie Sie sie wirklich brauchen. 2015 01:40:43,540 --> 01:40:46,790 Sie nicht ausfüllen wirklich Ihre dachte wie eine Klammer oder eine geschweifte 2016 01:40:46,790 --> 01:40:47,714 Klammer tut. 2017 01:40:47,714 --> 01:40:49,630 Fahren wir fort und neu kompilieren den Code und zu sehen. 2018 01:40:49,630 --> 01:40:53,690 So stellen Sie Schalter, Punkt slash-Schalter. 2019 01:40:53,690 --> 01:40:56,435 Lassen Sie uns Kleinbuchstaben eingeben y, die obere Fall ein. 2020 01:40:56,435 --> 01:40:59,390 2021 01:40:59,390 --> 01:41:00,700 So tippte ich y. 2022 01:41:00,700 --> 01:41:04,420 >> Das Programm sagte, ja, nein, Fehler, als ob änderte er seine Meinung. 2023 01:41:04,420 --> 01:41:09,280 Aber es war eine Art, weil das, was passiert, mit einem Schalter ist der erste Fall, dass 2024 01:41:09,280 --> 01:41:13,899 Spiel im Wesentlichen bedeutet, hey Computer, der gesamte Code darunter auszuführen. 2025 01:41:13,899 --> 01:41:16,690 Und wenn Sie nicht sagen, Pause, oder Brechen Sie nicht sagen, oder nicht brechen sagen, 2026 01:41:16,690 --> 01:41:19,540 der Computer wird die Luft zu sprengen durch alle diese Linien 2027 01:41:19,540 --> 01:41:22,779 und führen Sie alle von ihnen bis es wird auf diese geschweiften Klammer. 2028 01:41:22,779 --> 01:41:24,320 So sind die Bremsen sind in der Tat notwendig. 2029 01:41:24,320 --> 01:41:27,120 Aber ein Essen zum Mitnehmen hier ist, wenn Im Zweifelsfall versuchen, etwas. 2030 01:41:27,120 --> 01:41:29,510 Vielleicht ersten Code zu speichern, oder es in einer extra Datei speichern 2031 01:41:29,510 --> 01:41:32,930 wenn Sie wirklich besorgt über vermasselt und mit sich zu erholen 2032 01:41:32,930 --> 01:41:34,430 die Arbeit, die Sie wissen, arbeitet. 2033 01:41:34,430 --> 01:41:35,410 >> Aber versuchen, die Dinge. 2034 01:41:35,410 --> 01:41:38,074 Und seien Sie nicht so ängstlich, vielleicht, von dem, was der Computer tun könnte, 2035 01:41:38,074 --> 01:41:39,490 oder, dass Sie vielleicht etwas zu Bruch geht. 2036 01:41:39,490 --> 01:41:42,790 Sie können immer wieder zurück zu einem früheren Version. 2037 01:41:42,790 --> 01:41:45,640 >> Also lassen Sie uns am Ende, indem Sie bei der Gestaltung des Codes. 2038 01:41:45,640 --> 01:41:49,020 Wir haben diese Fähigkeit nun zu schreiben Bedingungen und Schreibschlaufen, 2039 01:41:49,020 --> 01:41:50,850 und Variablen und Anruffunktionen. 2040 01:41:50,850 --> 01:41:54,590 Also, ehrlich gesagt, sind wir Art zurück an wo wir waren vor einer Woche mit Scratch, 2041 01:41:54,590 --> 01:42:00,120 wenn auch mit einem weniger überzeugenden Text Umwelt als Scratch ermöglicht. 2042 01:42:00,120 --> 01:42:03,990 >> Beachten Sie aber, wie schnell haben wir erworben dass Vokabular, auch wenn es 2043 01:42:03,990 --> 01:42:07,570 geht eine Weile zu nehmen zu sinken, so dass wir jetzt dieses Vokabular verwenden können 2044 01:42:07,570 --> 01:42:10,320 Weitere interessante Programme zu schreiben. 2045 01:42:10,320 --> 01:42:12,940 Und lassen Sie uns ein Baby Schritt nehmen auf das, wie folgt. 2046 01:42:12,940 --> 01:42:14,890 Lassen Sie mich gehen Sie vor und schaffen hier eine neue Datei. 2047 01:42:14,890 --> 01:42:17,750 >> Ich werde dies zu nennen prototype.c und einführen 2048 01:42:17,750 --> 01:42:20,954 zum ersten Mal die Fähigkeit Ihre eigenen Funktionen zu machen. 2049 01:42:20,954 --> 01:42:22,870 Einige von Ihnen haben könnten dies getan mit Scratch, 2050 01:42:22,870 --> 01:42:25,430 wodurch Sie können erstellen Sie Ihre eigene benutzerdefinierte Blöcke in Scratch, 2051 01:42:25,430 --> 01:42:27,892 und ziehen Sie sie dann an ihren Platz wo auch immer Sie in C. möchten 2052 01:42:27,892 --> 01:42:30,100 Und in den meisten Programmierung Sprachen, können Sie genau das tun, 2053 01:42:30,100 --> 01:42:33,580 dass-- eigene Funktionen machen, wenn sie nicht bereits vorhanden sind. 2054 01:42:33,580 --> 01:42:38,660 >> So zum Beispiel, lassen Sie mich gehen Sie voran und umfassen CS50.h und umfassen 2055 01:42:38,660 --> 01:42:43,110 Standard io.h, int main nichtig. 2056 01:42:43,110 --> 01:42:46,020 Und jetzt haben wir ein Platzhalter bereit zu gehen. 2057 01:42:46,020 --> 01:42:48,550 Ich halte Druck Dinge wie die Menschen heute die Namen. 2058 01:42:48,550 --> 01:42:51,910 Und das fühlt sich like-- wäre nicht schön, wenn es 2059 01:42:51,910 --> 01:42:53,936 waren eine Funktion Druck Namen genannt? 2060 01:42:53,936 --> 01:42:55,060 Ich muss nicht printf verwenden. 2061 01:42:55,060 --> 01:42:56,976 Ich muss mich nicht erinnern, alle Formatcodes. 2062 01:42:56,976 --> 01:43:00,050 Warum kann ich nicht, oder warum hat nicht jemand vor mir, 2063 01:43:00,050 --> 01:43:02,980 Erstellen Sie eine Funktion namens Druck Name, dass einige Namen, 2064 01:43:02,980 --> 01:43:03,980 einfach druckt es aus? 2065 01:43:03,980 --> 01:43:08,700 >> Mit anderen Worten, wenn ich sage, hey, Computer, geben Sie mir eine Zeichenfolge 2066 01:43:08,700 --> 01:43:11,870 durch den Benutzer für eine solche stellen, über der String-Funktion des CS50. 2067 01:43:11,870 --> 01:43:15,090 Hey, Computer, setzen Sie diese Zeichenfolge in die Variable in der linken Seite, 2068 01:43:15,090 --> 01:43:16,150 und nennen es s. 2069 01:43:16,150 --> 01:43:22,150 Und dann, hey Computer, gehen Sie voran und drucken Sie den Namen der Person, fertig. 2070 01:43:22,150 --> 01:43:26,240 >> Jetzt wäre es schön sein, denn Dieses Programm, das treffend benannt, 2071 01:43:26,240 --> 01:43:29,170 sagt mir, was es tun soll ist zu weise der Namen der Funktion. 2072 01:43:29,170 --> 01:43:32,930 Lassen Sie mich gehen und Prototypen machen, ein. 2073 01:43:32,930 --> 01:43:34,930 Und leider, das wird nicht fliegen. 2074 01:43:34,930 --> 01:43:39,430 >> Prototype.c, Zeile 7, Zeichen 5, Fehler, implizite Deklaration 2075 01:43:39,430 --> 01:43:42,960 Funktionsdruck Name wird in C99, C99 ungültig 2076 01:43:42,960 --> 01:43:45,130 was bedeutet, eine Version von C das kam im Jahr 1999 heraus. 2077 01:43:45,130 --> 01:43:45,730 Das ist alles. 2078 01:43:45,730 --> 01:43:48,780 >> Also ich weiß nicht, was all dies bedeutet vor. 2079 01:43:48,780 --> 01:43:50,810 Aber ich Fehler erkenne in rot. 2080 01:43:50,810 --> 01:43:51,770 Das ist ziemlich offensichtlich. 2081 01:43:51,770 --> 01:43:53,769 >> Und es scheint, dass mit der grüne Charakter hier, 2082 01:43:53,769 --> 01:43:57,520 das Problem ist, mit Druck Name, offen paren s, in der Nähe paren, Semikolon. 2083 01:43:57,520 --> 01:44:01,800 Aber implizite Erklärung Funktion haben wir kurz zuvor zu sehen. 2084 01:44:01,800 --> 01:44:04,880 Das bedeutet einfach, dass Clang weiß nicht, was ich meine. 2085 01:44:04,880 --> 01:44:09,000 >> Ich habe ein Wort des Vokabulars verwendet, dass es nie zuvor gelehrt gesehen oder wurde. 2086 01:44:09,000 --> 01:44:11,950 Und so muss ich es lehren was diese Funktion bedeutet. 2087 01:44:11,950 --> 01:44:13,590 Also werde ich voran gehen und das tun. 2088 01:44:13,590 --> 01:44:17,970 >> Ich gehe voran zu gehen und zu implementieren meine eigene Funktion Drucken Name genannt. 2089 01:44:17,970 --> 01:44:24,720 Und ich werde sagen, wie folgt, dass Er tut dies, printf, hallo, Prozent 2090 01:44:24,720 --> 01:44:27,760 s, Backslash n, Name, Semikolon. 2091 01:44:27,760 --> 01:44:29,250 So was habe ich gerade? 2092 01:44:29,250 --> 01:44:31,325 >> So stellt sich heraus, um implementieren eine eigene Funktion, 2093 01:44:31,325 --> 01:44:33,845 wir leihen Art von einigen die gleiche Struktur wie Haupt 2094 01:44:33,845 --> 01:44:35,720 dass wir gerade gewesen für selbstverständlich gehalten, und ich 2095 01:44:35,720 --> 01:44:37,730 weiß nur das Kopieren und Einfügen ziemlich viel, was 2096 01:44:37,730 --> 01:44:39,170 Ich habe in der Vergangenheit geschrieben. 2097 01:44:39,170 --> 01:44:40,570 Aber beachten Sie hier das Muster. 2098 01:44:40,570 --> 01:44:43,750 Int, Main, Void, wir werden auseinander zu necken Es dauerte nicht lange, was das eigentlich bedeutet. 2099 01:44:43,750 --> 01:44:46,160 >> Aber für heute, nur Beachten Sie die Parallelität. 2100 01:44:46,160 --> 01:44:48,210 Void, Druckname, string name, so dass es 2101 01:44:48,210 --> 01:44:50,310 ein lila-Schlüsselwort, das wir gehen zu beginnen 2102 01:44:50,310 --> 01:44:54,067 Rückgabetyp aufrufen, den Namen die Funktion, und dann wird die Eingabe. 2103 01:44:54,067 --> 01:44:56,400 Also, eigentlich können wir destillieren diese Art von wie letzte Woche 2104 01:44:56,400 --> 01:44:59,030 so ist dies der Name oder die Algorithmus des Codes wir sind 2105 01:44:59,030 --> 01:45:00,761 gehen write-- die Algorithmus zugrunde liegenden 2106 01:45:00,761 --> 01:45:02,010 der Code wir gehen zu schreiben. 2107 01:45:02,010 --> 01:45:03,180 >> Dies ist seine Eingabe. 2108 01:45:03,180 --> 01:45:04,670 Dies ist seine Ausgabe. 2109 01:45:04,670 --> 01:45:08,730 Diese Funktion, Print-Name ist entworfen, um eine Zeichenfolge zu nehmen genannt Namen, 2110 01:45:08,730 --> 01:45:11,350 oder was auch immer, als Eingabe und dann nichtig. 2111 01:45:11,350 --> 01:45:13,904 Es gibt nichts zurück, wie der String-oder bekommen int tut. 2112 01:45:13,904 --> 01:45:15,570 Also es geht um mich wieder etwas zur Hand. 2113 01:45:15,570 --> 01:45:17,960 Es ist nur ein zu haben, Nebenwirkung, sozusagen 2114 01:45:17,960 --> 01:45:19,570 der Druck Namens einer Person. 2115 01:45:19,570 --> 01:45:22,260 So bemerken, Zeile 7, I rufen Druckname kann. 2116 01:45:22,260 --> 01:45:25,920 Zeile 10, kann ich definieren oder Druck Namen implementieren. 2117 01:45:25,920 --> 01:45:28,450 Aber leider ist das nicht genug. 2118 01:45:28,450 --> 01:45:31,230 >> Lassen Sie mich gehen Sie vor und neu kompilieren diese nach dem Speichern. 2119 01:45:31,230 --> 01:45:33,910 Whoa, jetzt, ich habe es gemacht schlimmer noch, so scheint es. 2120 01:45:33,910 --> 01:45:37,027 So implizite Erklärung Funktion Druckname ist ungültig. 2121 01:45:37,027 --> 01:45:38,360 Und wieder gibt es mehr Fehler. 2122 01:45:38,360 --> 01:45:41,430 Aber wie ich bereits darauf hingewiesen, auch wenn Sie mit überwältigt, 2123 01:45:41,430 --> 01:45:44,850 oder ein wenig traurig zu sehen, so viele Fehler, konzentrieren sich nur auf die erste 2124 01:45:44,850 --> 01:45:47,500 zunächst, weil es könnte haben eine kaskadierende Wirkung hatte. 2125 01:45:47,500 --> 01:45:51,970 So C oder Clang Spezifischer immer noch nicht erkennt Druck Namen. 2126 01:45:51,970 --> 01:45:54,580 >> Und das ist, weil Clang, von Design, ist eine Art von dumm. 2127 01:45:54,580 --> 01:45:56,280 Es tut nur das, was Sie sagen, es zu tun. 2128 01:45:56,280 --> 01:46:00,950 Und das tut sie nur so in der Reihenfolge in denen Ihnen sagen, es zu tun. 2129 01:46:00,950 --> 01:46:05,270 >> So habe ich hauptsächlich auf der Linie vier definiert, wie wir haben ziemlich oft getan. 2130 01:46:05,270 --> 01:46:07,980 Ich habe auf Druck Name definiert Zeile 10. 2131 01:46:07,980 --> 01:46:11,793 Aber ich versuche zu verwenden, Druck Name auf der Linie sieben. 2132 01:46:11,793 --> 01:46:13,670 >> Es ist zu früh, gibt es noch nicht. 2133 01:46:13,670 --> 01:46:19,150 So konnte ich klug sein, und sein wie, OK, also spielen wir zusammen nur, 2134 01:46:19,150 --> 01:46:23,680 und Druck Namen nach oben hier und neu kompilieren. 2135 01:46:23,680 --> 01:46:24,550 Oh mein Gott. 2136 01:46:24,550 --> 01:46:25,260 Es funktionierte. 2137 01:46:25,260 --> 01:46:26,670 Es war so einfach wie das. 2138 01:46:26,670 --> 01:46:28,120 >> Aber die Logik ist genau das. 2139 01:46:28,120 --> 01:46:30,870 Sie müssen Clang lehren, was es zunächst wird durch die Funktion definiert wird. 2140 01:46:30,870 --> 01:46:31,920 Dann können Sie es verwenden. 2141 01:46:31,920 --> 01:46:33,940 Aber, ehrlich gesagt, das fühlt sich an wie ein rutschiger Abhang. 2142 01:46:33,940 --> 01:46:35,773 >> Also jedes Mal, wenn ich laufen in ein Problem bin, ich habe gerade 2143 01:46:35,773 --> 01:46:39,450 Gehen Sie den Code zu markieren und kopieren Ich schrieb, schneiden Sie es und fügen Sie ihn hier oben. 2144 01:46:39,450 --> 01:46:41,370 Und sicher, wir könnten ersinnen einige Szenarien 2145 01:46:41,370 --> 01:46:43,286 wo eine Funktion könnte brauchen eine andere zu nennen. 2146 01:46:43,286 --> 01:46:46,030 Und man kann einfach nicht alle setzen Funktion über jedes andere. 2147 01:46:46,030 --> 01:46:47,930 >> So stellt sich dort die aus eine bessere Lösung. 2148 01:46:47,930 --> 01:46:50,100 Wir können verlassen diese sein. 2149 01:46:50,100 --> 01:46:53,677 Und, ehrlich gesagt, ist es in der Regel schön, und bequem, und gutes Design 2150 01:46:53,677 --> 01:46:56,760 setzen Haupt zuerst, weil wieder, wie Haupt wenn grüne Fahne geklickt haben, 2151 01:46:56,760 --> 01:46:59,027 das ist die Funktion, die wird standardmäßig ausgeführt. 2152 01:46:59,027 --> 01:47:01,110 So könnte man genauso gut setzen es an der Spitze der Datei, 2153 01:47:01,110 --> 01:47:03,560 so dass, wenn Sie oder ein andere menschliche schaut auf die Datei 2154 01:47:03,560 --> 01:47:06,360 Sie wissen, was los ist nur durch die Haupt erster Lesung. 2155 01:47:06,360 --> 01:47:15,360 So stellt sich heraus, können wir sagen, Clang proaktiv, hey, Clang, auf der Linie vier, 2156 01:47:15,360 --> 01:47:17,940 Ich verspreche, zu implementieren, eine Funktion namens Drucken 2157 01:47:17,940 --> 01:47:22,600 Namen, die einen String namens Namen gab als Eingabe und kehrt nichts, Leere. 2158 01:47:22,600 --> 01:47:24,770 Und ich werde um zu Umsetzung es später. 2159 01:47:24,770 --> 01:47:25,680 >> Hier kommt Main. 2160 01:47:25,680 --> 01:47:29,130 Haupt jetzt auf Linie 9 verwenden können Drucken Name weil Clang 2161 01:47:29,130 --> 01:47:32,600 das heißt zu vertrauen, schließlich, wird sie die Definition begegnen 2162 01:47:32,600 --> 01:47:34,880 der Umsetzung von Print-Name. 2163 01:47:34,880 --> 01:47:37,390 Also nach meiner Datei zu speichern, lassen mich voran gehen und machen Prototyp, 2164 01:47:37,390 --> 01:47:38,498 sieht dieses Mal gut. 2165 01:47:38,498 --> 01:47:43,470 Dot Slash, Prototyp, lassen Sie mich gehen Sie vor und geben Sie einen Namen in. 2166 01:47:43,470 --> 01:47:48,440 David, hallo David, Zamila, hallo Zamila, und in der Tat, jetzt funktioniert es. 2167 01:47:48,440 --> 01:47:52,200 >> So ist die Zutat hier ist, dass wir haben machte eine benutzerdefinierte Funktion, wie eine benutzerdefinierte 2168 01:47:52,200 --> 01:47:54,219 Scratch Block Wir nennen es. 2169 01:47:54,219 --> 01:47:57,010 Aber im Gegensatz zu Scratch, wo man schaffen es einfach und starten Sie es, 2170 01:47:57,010 --> 01:47:59,330 jetzt müssen wir sein, wenig mehr pedantisch, 2171 01:47:59,330 --> 01:48:03,410 und tatsächlich trainieren Clang zu verwenden, oder es erwarten. 2172 01:48:03,410 --> 01:48:09,140 Nun, so nebenbei, warum all dieser Zeit haben wir auf den Glauben nur blind gewesen einschließlich 2173 01:48:09,140 --> 01:48:12,170 CS50.h, einschließlich Standard io.h? 2174 01:48:12,170 --> 01:48:15,190 >> Nun, es stellt sich heraus, unter ein paar andere Dinge, 2175 01:48:15,190 --> 01:48:18,550 all das ist in diesen Punkt h Dateien, die Dateien sein passieren. 2176 01:48:18,550 --> 01:48:20,460 Sie sind Header-Dateien, so zu sprechen. 2177 01:48:20,460 --> 01:48:23,270 Sie sind immer noch in C geschrieben, aber sie sind eine andere Art von Datei. 2178 01:48:23,270 --> 01:48:28,690 >> Denn jetzt können Sie ziemlich viel davon ausgehen, dass alles, was im Inneren des CS50.h ist 2179 01:48:28,690 --> 01:48:33,360 dies ist einige Einzeiler wie, nicht für Funktionen Drucken Name genannt wird, 2180 01:48:33,360 --> 01:48:36,840 aber für String erhalten, erhalten Float, und ein paar andere. 2181 01:48:36,840 --> 01:48:41,510 Und es gibt ähnliche Prototypen Einzeiler, innerhalb von Standard-io.h 2182 01:48:41,510 --> 01:48:46,241 für printf, die jetzt in meine eigene Name in Druckfunktion. 2183 01:48:46,241 --> 01:48:49,490 Also mit anderen Worten, diese ganze Zeit, die wir haben gerade blind zu kopieren und einfügen 2184 01:48:49,490 --> 01:48:51,780 umfassen diese, sind dass, was los ist auf? 2185 01:48:51,780 --> 01:48:55,310 Das sind nur Art von Hinweisen zu klappern, was Funktionen 2186 01:48:55,310 --> 01:49:00,170 nur sind in der Tat umgesetzt, anderswo in verschiedenen Dateien 2187 01:49:00,170 --> 01:49:02,440 an anderer Stelle im System. 2188 01:49:02,440 --> 01:49:05,160 >> Deshalb haben wir Druck Namen umgesetzt. 2189 01:49:05,160 --> 01:49:07,910 Es hat diese Nebenwirkung von Druck etwas auf dem Bildschirm. 2190 01:49:07,910 --> 01:49:10,170 Aber es funktioniert nicht wirklich gib mir etwas zurück. 2191 01:49:10,170 --> 01:49:12,200 Wie gehen wir damit um Umsetzung eines Programms, das 2192 01:49:12,200 --> 01:49:14,510 nicht gib mir etwas zurück? 2193 01:49:14,510 --> 01:49:15,580 >> Nun, lassen Sie uns dies versuchen. 2194 01:49:15,580 --> 01:49:21,360 Lassen Sie mich gehen Sie vor und implementieren eine Datei namens return.c 2195 01:49:21,360 --> 01:49:24,530 so können wir zeigen, wie etwas wie Get String, oder Get Int, 2196 01:49:24,530 --> 01:49:27,340 ist eigentlich der Rückkehr etwas zurück an den Benutzer. 2197 01:49:27,340 --> 01:49:29,840 Fahren wir fort und int main Leere definieren. 2198 01:49:29,840 --> 01:49:33,230 >> Und wieder in die Zukunft, werden wir erklären, was das int und diese Lücke 2199 01:49:33,230 --> 01:49:34,090 ist tatsächlich tun. 2200 01:49:34,090 --> 01:49:35,840 Aber für heute, werden wir ist es selbstverständlich. 2201 01:49:35,840 --> 01:49:39,970 Ich gehe voran und printf zu gehen, für eine gute User Experience, x. 2202 01:49:39,970 --> 01:49:44,360 Und dann werde ich für die warten Benutzer geben mir x mit get int. 2203 01:49:44,360 --> 01:49:48,459 >> Und dann gehe ich voran gehen und ausdrucken x zum Quadrat. 2204 01:49:48,459 --> 01:49:50,500 Also, wenn Sie nur eine haben Tastatur, Menschen häufig 2205 01:49:50,500 --> 01:49:52,600 Verwenden Sie die kleine Karotte Symbol auf der Tastatur 2206 01:49:52,600 --> 01:49:55,330 an die Strom darzustellen von oder der Exponent. 2207 01:49:55,330 --> 01:49:58,960 So x zum Quadrat vorhanden ist i. 2208 01:49:58,960 --> 01:50:00,660 >> Und jetzt werde ich das tun. 2209 01:50:00,660 --> 01:50:03,940 Ich konnte do-- genau das, was ist x kariert? x squared x mal x. 2210 01:50:03,940 --> 01:50:06,690 >> Und wir haben dies einige Zeit schon vor heute. 2211 01:50:06,690 --> 01:50:08,730 Das fühlt sich nicht wie alle, die viel Fortschritt. 2212 01:50:08,730 --> 01:50:09,570 Weißt du was? 2213 01:50:09,570 --> 01:50:13,100 Lassen Sie uns nutzen einige dieser Idee vom letzten Mal der Abstraktion. 2214 01:50:13,100 --> 01:50:16,080 >> Wäre es nicht schön, wenn gibt es eine Funktion namens 2215 01:50:16,080 --> 01:50:18,460 Platz, der genau das tut? 2216 01:50:18,460 --> 01:50:20,640 Es immer noch am Ende der Tag, hat die gleiche Mathematik. 2217 01:50:20,640 --> 01:50:22,410 Aber lassen Sie uns abstrakt die Idee der wegzunehmen 2218 01:50:22,410 --> 01:50:25,280 eine Zahl, multipliziert mit eine andere, und geben Sie es nur einen Namen, 2219 01:50:25,280 --> 01:50:27,360 wie diesen Wert Quadrat. 2220 01:50:27,360 --> 01:50:29,560 >> Und, in anderen Worten, in C, lassen Sie uns eine Funktion erstellen, 2221 01:50:29,560 --> 01:50:32,660 genannt Quadrat, das genau funktioniert das. 2222 01:50:32,660 --> 01:50:34,600 Es wird Platz genannt zu werden. 2223 01:50:34,600 --> 01:50:35,790 Es wird ein int zu nehmen. 2224 01:50:35,790 --> 01:50:37,820 Und wir werden nur wird nennen es n, standardmäßig aktiviert. 2225 01:50:37,820 --> 01:50:39,403 >> Aber wir konnten es nennen, was wir wollen. 2226 01:50:39,403 --> 01:50:42,900 Und alles, was es wird tun, buchstäblich, ist Rückkehr 2227 01:50:42,900 --> 01:50:45,810 das Ergebnis von n mal n. 2228 01:50:45,810 --> 01:50:48,980 Sondern weil es Rückkehr etwas, was 2229 01:50:48,980 --> 01:50:53,690 ist das Schlüsselwort in lila wir haben noch nie gesehen, ich, auf der Linie 11, 2230 01:50:53,690 --> 01:50:55,410 Diese Zeit kann nicht einfach sagen, nichtig. 2231 01:50:55,410 --> 01:51:01,320 >> Void wir im Beispiel gerade gesehen eher von Druckname, bedeutet nur, 2232 01:51:01,320 --> 01:51:02,190 mach etwas. 2233 01:51:02,190 --> 01:51:04,170 Aber gib mir nicht etwas zurück. 2234 01:51:04,170 --> 01:51:06,790 In diesem Fall, ich will zurückzukehren n mal n, 2235 01:51:06,790 --> 01:51:08,460 oder was auch immer das ist, wird diese Zahl. 2236 01:51:08,460 --> 01:51:12,460 >> So kann ich nicht sagen, hey, Computer, Ich kehre nichts, nichtig. 2237 01:51:12,460 --> 01:51:16,166 Es geht zurück, von der Natur, ein int. 2238 01:51:16,166 --> 01:51:17,790 Und so ist das alles, was hier los ist. 2239 01:51:17,790 --> 01:51:20,070 >> Der Eingang zum Quadrat wird ein int sein. 2240 01:51:20,070 --> 01:51:24,760 Und damit wir es verwenden können, muss es haben einen Namen, gehen Es N. ausgeben 2241 01:51:24,760 --> 01:51:26,240 ein int, die keinen Namen brauchen. 2242 01:51:26,240 --> 01:51:29,590 Wir können es zur Haupt verlassen, oder wer auch immer ist mit mir diesen Wert, wenn wir uns erinnern 2243 01:51:29,590 --> 01:51:31,120 wollen mit einer eigenen Variablen. 2244 01:51:31,120 --> 01:51:33,230 >> Und wiederum das einzige neue Stichwort hier ist zurück. 2245 01:51:33,230 --> 01:51:34,480 Und ich mache nur etwas Mathematik. 2246 01:51:34,480 --> 01:51:41,825 Wenn ich wirklich sein wollte unnötig, Ich könnte sagen, int Produkt wird n mal n. 2247 01:51:41,825 --> 01:51:44,170 >> Und dann könnte ich sagen, Produkt zurück. 2248 01:51:44,170 --> 01:51:47,360 Aber noch einmal, um meinen Standpunkt früher von dies einfach nicht gut zu sein design-- 2249 01:51:47,360 --> 01:51:50,060 wie, warum Sie einen Namen einführen, ein Symbol, wie Produkt, 2250 01:51:50,060 --> 01:51:51,570 nur, um sofort darauf zurückkommen? 2251 01:51:51,570 --> 01:51:53,670 Es ist ein wenig sauberer, ein wenig fester, so 2252 01:51:53,670 --> 01:51:59,380 zu sprechen, nur Rückkehr n-mal zu sagen, n, loszuwerden ganz von dieser Linie. 2253 01:51:59,380 --> 01:52:02,860 >> Und es ist nur weniger Code zu lesen, weniger Gelegenheit für Fehler. 2254 01:52:02,860 --> 01:52:05,180 Und lassen Sie uns, wenn diese sehen tatsächlich funktioniert jetzt. 2255 01:52:05,180 --> 01:52:09,380 Nun, ich werde gehen und im voraus zu machen Rückkehr. 2256 01:52:09,380 --> 01:52:11,460 >> Uh-oh, implizite Deklaration der Funktion. 2257 01:52:11,460 --> 01:52:14,080 Ich habe diesen Fehler vor, keine große Sache. 2258 01:52:14,080 --> 01:52:18,950 Lassen Sie mich nur ein, oder markieren und zu kopieren, die genau die gleiche Funktionsprototyp, 2259 01:52:18,950 --> 01:52:21,342 oder Unterschrift der Funktion hier oben. 2260 01:52:21,342 --> 01:52:22,800 Oder ich könnte die ganze Funktion zu bewegen. 2261 01:52:22,800 --> 01:52:23,841 >> Aber das ist ein wenig faul. 2262 01:52:23,841 --> 01:52:24,870 So werden wir das nicht tun. 2263 01:52:24,870 --> 01:52:27,960 Nun lassen Sie mich machen Rückkehr wieder, Dot Slash Rückkehr. 2264 01:52:27,960 --> 01:52:32,790 >> x 2 x zum Quadrat ist 4. x 3 x zum Quadrat ist 9. 2265 01:52:32,790 --> 01:52:35,300 Und die Funktion scheint jetzt zu arbeiten. 2266 01:52:35,300 --> 01:52:36,550 Also, was ist der Unterschied hier? 2267 01:52:36,550 --> 01:52:42,520 Ich habe eine Funktion, die Platz genannt wird, in diesem Fall, die ich in einem Eingang setzen. 2268 01:52:42,520 --> 01:52:43,830 Und ich bekomme eine Ausgabe zurück. 2269 01:52:43,830 --> 01:52:46,210 Und doch vorher, wenn Ich öffne das andere Beispiel 2270 01:52:46,210 --> 01:52:51,640 von früher, die war genannt prototype.c, 2271 01:52:51,640 --> 01:52:54,770 Ich hatte Druck Name, der zurück Leere, so zu sprechen, 2272 01:52:54,770 --> 01:52:58,730 Oder es gab nichts zurück, und einfach hatte einen Nebeneffekt. 2273 01:52:58,730 --> 01:53:00,230 >> Also, was ist hier los? 2274 01:53:00,230 --> 01:53:03,520 Nun, betrachten die Funktion erhalten Zeichenfolge nur für einen Moment. 2275 01:53:03,520 --> 01:53:06,570 Wir haben mit der Funktion erhalten Zeichenfolge in folgender Weise. 2276 01:53:06,570 --> 01:53:10,464 >> Wir haben eine Funktion hatte bekommen string, wie umfassen CS50.h, 2277 01:53:10,464 --> 01:53:16,624 gehören Standard-io.h, int, Haupt, nichtig. 2278 01:53:16,624 --> 01:53:18,790 Und dann jedes Mal, ich habe also der String-weit genannt, 2279 01:53:18,790 --> 01:53:23,260 Ich habe gesagt, so etwas wie: string s bekommt String zu erhalten, weil get string-- 2280 01:53:23,260 --> 01:53:27,880 Nennen wir diese get.c-- get-String selbst gibt eine Zeichenfolge, die ich kann, dann 2281 01:53:27,880 --> 01:53:32,050 verwenden, und sagen, hallo, Komma, Prozent s, Backslash n, s. 2282 01:53:32,050 --> 01:53:35,660 >> Das ist also das gleiche Beispiel, wirklich, dass wir früher hatten. 2283 01:53:35,660 --> 01:53:37,920 So erhalten Zeichenfolge einen Wert zurückgibt. 2284 01:53:37,920 --> 01:53:41,260 Aber einen Moment vor, Druckzeichenfolge keinen Wert zurück. 2285 01:53:41,260 --> 01:53:42,721 Es hat einfach eine Nebenwirkung. 2286 01:53:42,721 --> 01:53:44,220 Also das ist ein fundamentaler Unterschied. 2287 01:53:44,220 --> 01:53:46,710 Wir haben verschiedene gesehen Arten von Funktionen jetzt, 2288 01:53:46,710 --> 01:53:49,490 einige davon sind zurückgekehrt Werte, zu tun, von denen einige nicht. 2289 01:53:49,490 --> 01:53:51,890 Also vielleicht ist es ein String oder int oder float. 2290 01:53:51,890 --> 01:53:53,480 Oder vielleicht ist es nur Leere. 2291 01:53:53,480 --> 01:53:55,710 >> Und der Unterschied ist, dass diese Funktionen, 2292 01:53:55,710 --> 01:53:59,940 Abrufen von Daten und einen Wert zurückgeben sind eigentlich etwas zurück an den Tisch zu bringen, 2293 01:53:59,940 --> 01:54:01,110 sozusagen. 2294 01:54:01,110 --> 01:54:03,710 Also lassen Sie uns fortfahren und Blick auf einen letzten Satz 2295 01:54:03,710 --> 01:54:09,129 Beispiele, die einen Sinn gibt, jetzt, von wie wir könnten, ja, abstrakt besser, 2296 01:54:09,129 --> 01:54:11,670 und besser und besser, oder mehr, und mehr und mehr, um 2297 01:54:11,670 --> 01:54:13,810 letztlich besseren Code zu schreiben. 2298 01:54:13,810 --> 01:54:16,860 Fahren wir fort, und im Geiste von Scratch, gehen Sie wie folgt. 2299 01:54:16,860 --> 01:54:21,700 >> Lassen Sie mich gehen Sie vor und schließen CS50.h und Standard io.h 2300 01:54:21,700 --> 01:54:24,010 Lassen Sie mich gehen Sie vor und geben selbst ein int, Haupt, nichtig. 2301 01:54:24,010 --> 01:54:27,380 Und lassen Sie mich gehen Sie vor, um dieses cough.c nennen. 2302 01:54:27,380 --> 01:54:35,510 >> Und lassen Sie mich voran gehen und einfach wie Scratch, Husten / n ausdrucken. 2303 01:54:35,510 --> 01:54:37,170 Und ich möchte dies dreimal zu tun. 2304 01:54:37,170 --> 01:54:39,670 Also habe ich, natürlich, gerade dabei zu kopieren und dreimal einfügen. 2305 01:54:39,670 --> 01:54:46,440 Ich gehe jetzt zu machen Husten dot slash Husten. 2306 01:54:46,440 --> 01:54:50,120 Lassen Sie uns geben mir ein wenig mehr Platz Geben Sie hier, Husten, Husten, Husten. 2307 01:54:50,120 --> 01:54:53,970 >> Es gibt offensichtlich bereits ein Chance für Verbesserungen. 2308 01:54:53,970 --> 01:54:55,679 Ich habe kopiert und eingefügt ein paar Mal heute. 2309 01:54:55,679 --> 01:54:58,261 Aber das war nur so habe ich nicht haben so viele Zeichen eingeben. 2310 01:54:58,261 --> 01:55:00,250 Ich änderte noch was diese Zeilen Code sind. 2311 01:55:00,250 --> 01:55:04,240 >> Diese drei Leitungen sind identisch, das fühlt sich faul und in der Tat, 2312 01:55:04,240 --> 01:55:07,110 und ist wahrscheinlich nicht der richtige Ansatz. 2313 01:55:07,110 --> 01:55:11,029 Also mit welcher Zutat konnten wir diesen Code verbessern? 2314 01:55:11,029 --> 01:55:12,570 Wir müssen nicht Code kopieren und einfügen. 2315 01:55:12,570 --> 01:55:15,070 >> Und in der Tat, Sie jederzeit das Gefühl, selbst kopieren und einfügen, 2316 01:55:15,070 --> 01:55:17,700 und nicht einmal Wechselcode, Chancen gibt es einen besseren Weg gibt. 2317 01:55:17,700 --> 01:55:19,470 Und in der Tat gibt es. 2318 01:55:19,470 --> 01:55:22,510 Lassen Sie mich gehen Sie vor und tun eine for-Schleife, obwohl die Syntax möglicherweise nicht 2319 01:55:22,510 --> 01:55:24,570 kommen natürlich noch. 2320 01:55:24,570 --> 01:55:29,494 >> Tun Sie dies dreimal, einfach durch die following-- tun 2321 01:55:29,494 --> 01:55:31,160 und ich geschehe dies aus der Praxis kennen zu lernen. 2322 01:55:31,160 --> 01:55:32,810 Aber wir haben eine Reihe von Beispielen jetzt. 2323 01:55:32,810 --> 01:55:34,950 Und Sie werden sehen Online Weitere Referenzen noch. 2324 01:55:34,950 --> 01:55:37,790 >> Dies ist die Syntax in Zeile 6, dass ähnlich wie Kratzer, der sich wiederholt 2325 01:55:37,790 --> 01:55:40,090 Block, wiederholen Sie die folgenden drei Mal. 2326 01:55:40,090 --> 01:55:41,340 Es ist ein wenig magisch für jetzt. 2327 01:55:41,340 --> 01:55:43,050 Aber das wird mehr bekommen, und mehr vertraut. 2328 01:55:43,050 --> 01:55:45,050 >> Und es wird zu wiederholen Linie acht dreimal, 2329 01:55:45,050 --> 01:55:52,390 so dass, wenn ich Make Husten neu kompilieren, dot slash Husten, Husten, Husten, Husten. 2330 01:55:52,390 --> 01:55:54,030 Es funktioniert immer noch auf die gleiche Weise. 2331 01:55:54,030 --> 01:55:55,550 Also das ist alles schön und gut. 2332 01:55:55,550 --> 01:55:58,200 Aber das ist nicht sehr abstrahiert. 2333 01:55:58,200 --> 01:55:59,371 >> Es ist völlig richtig. 2334 01:55:59,371 --> 01:56:01,370 Aber es fühlt sich dort wie könnte eine Gelegenheit sein, 2335 01:56:01,370 --> 01:56:03,750 wie in der Welt der Scratch, um Art von Start 2336 01:56:03,750 --> 01:56:07,530 einige Semantik hier hinzufügen, so dass Ich habe nicht nur einige for-Schleife, 2337 01:56:07,530 --> 01:56:09,867 und eine Funktion, die sagt, Husten, oder nicht husten. 2338 01:56:09,867 --> 01:56:10,450 Weißt du was? 2339 01:56:10,450 --> 01:56:12,620 Lassen Sie mich versuchen, eine zu sein etwas kühler als das, 2340 01:56:12,620 --> 01:56:16,090 und schreiben tatsächlich eine Funktion, die einige Nebenwirkungen hat, nennen sie husten. 2341 01:56:16,090 --> 01:56:20,830 >> Und es braucht keine Eingabe und gibt keinen Wert zurück als Ausgabe. 2342 01:56:20,830 --> 01:56:22,680 Aber Sie wissen, was es tut? 2343 01:56:22,680 --> 01:56:29,370 Es tut this-- printf, Zitat unquote, husten. 2344 01:56:29,370 --> 01:56:32,380 >> Und jetzt hier oben, ich werde voraus und für int zu gehen, 2345 01:56:32,380 --> 01:56:36,070 i bekommt Null, ich weniger als 3, i plus plus. 2346 01:56:36,070 --> 01:56:39,770 Ich gehe nicht printf zu tun, das ist wohl eine geringe Umsetzung 2347 01:56:39,770 --> 01:56:40,270 Detail. 2348 01:56:40,270 --> 01:56:41,353 Mir ist es egal, wie zu husten. 2349 01:56:41,353 --> 01:56:43,240 Ich möchte nur die Husten-Funktion zu verwenden. 2350 01:56:43,240 --> 01:56:44,840 Und ich werde nur Husten zu rufen. 2351 01:56:44,840 --> 01:56:46,204 >> Nun bemerken die Dichotomie. 2352 01:56:46,204 --> 01:56:49,370 Wenn Sie eine Funktion aufrufen, wenn Sie nicht tun wollen sie die Eingänge zu geben, völlig in Ordnung. 2353 01:56:49,370 --> 01:56:51,780 Just do offenen paren, in der Nähe paren, und du bist fertig. 2354 01:56:51,780 --> 01:56:56,271 >> Wenn Sie eine Funktion definieren, oder deklarieren eine Prototyp der Funktion, 2355 01:56:56,271 --> 01:56:58,770 Wenn Sie im Voraus wissen, ist es nicht gehen alle Argumente zu nehmen, 2356 01:56:58,770 --> 01:57:01,170 in diesen Klammern dort nichtig sagen. 2357 01:57:01,170 --> 01:57:05,660 Und das macht Sie sicher, dass Sie nicht versehentlich missbrauchen. 2358 01:57:05,660 --> 01:57:07,020 Lassen Sie mich gehen Sie vor und Husten zu machen. 2359 01:57:07,020 --> 01:57:08,540 Und natürlich, ich habe einen Fehler gemacht. 2360 01:57:08,540 --> 01:57:10,410 >> Verdammt, es ist das implizite Deklaration. 2361 01:57:10,410 --> 01:57:11,325 Aber das ist in Ordnung. 2362 01:57:11,325 --> 01:57:12,590 Es ist eine einfache Lösung. 2363 01:57:12,590 --> 01:57:18,240 Ich brauche nur der Prototyp höher in meiner Akte, als ich es bin mit wirklich. 2364 01:57:18,240 --> 01:57:20,070 >> So, jetzt lassen Sie mich Husten wieder machen, nett. 2365 01:57:20,070 --> 01:57:20,790 Jetzt funktioniert es. 2366 01:57:20,790 --> 01:57:22,930 Machen Sie Husten, Husten, Husten, Husten. 2367 01:57:22,930 --> 01:57:25,930 So könnte man denken, dass wir wirklich nur über Engineering dieses Problem. 2368 01:57:25,930 --> 01:57:26,763 Und in der Tat sind wir. 2369 01:57:26,763 --> 01:57:28,870 Dies ist keine gute Kandidat eines Programms 2370 01:57:28,870 --> 01:57:31,930 im Moment für Refactoring, und tun, was 2371 01:57:31,930 --> 01:57:35,645 genannt hierarchische Zerlegung, wo Sie einen Code nehmen, und dann 2372 01:57:35,645 --> 01:57:38,790 Sie Art von Faktor Dinge, so wie mehr Semantik ihnen zuschreiben, 2373 01:57:38,790 --> 01:57:40,930 und wieder verwenden es letztlich längere Sicht. 2374 01:57:40,930 --> 01:57:43,490 Aber es ist ein Baustein in Richtung anspruchsvollere Programme 2375 01:57:43,490 --> 01:57:45,600 dass wir beginnen, Schreiben vor lange, dass 2376 01:57:45,600 --> 01:57:50,090 ermöglicht es uns, das Vokabular zu haben mit dem besseren Code zu schreiben. 2377 01:57:50,090 --> 01:57:52,920 Und in der Tat, mal sehen, ob wir kann diese nicht weiter verallgemeinern. 2378 01:57:52,920 --> 01:57:57,984 >> Es scheint ein wenig lahm, dass ich, hauptsächlich, müssen über diese verflixte for-Schleife zu sorgen, 2379 01:57:57,984 --> 01:57:59,400 und ruft Husten wieder und wieder. 2380 01:57:59,400 --> 01:58:03,050 Warum kann ich nicht einfach sagen, Husten, bitte Husten dreimal? 2381 01:58:03,050 --> 01:58:08,170 Mit anderen Worten kann, warum nicht nur ich geben Eingang zu husten und das tun? 2382 01:58:08,170 --> 01:58:11,270 >> Warum kann ich nicht einfach sagen, in Haupt Husten dreimal. 2383 01:58:11,270 --> 01:58:13,150 Und nun, dies ist eine Art magisch. 2384 01:58:13,150 --> 01:58:14,540 Es ist sehr iterative hier. 2385 01:58:14,540 --> 01:58:15,940 Und es ist tatsächlich ein Baby Schritt. 2386 01:58:15,940 --> 01:58:19,250 >> Aber nur die Fähigkeit, zu sagen, Linie acht, drei Mal husten, 2387 01:58:19,250 --> 01:58:20,730 es ist einfach so viel besser lesbar. 2388 01:58:20,730 --> 01:58:24,210 Und, und, ich muss nicht wissen, oder egal, wie Husten umgesetzt wird. 2389 01:58:24,210 --> 01:58:26,460 Und in der Tat, später in der Begriff und für Abschlussarbeiten, 2390 01:58:26,460 --> 01:58:29,150 wenn Sie ein Projekt mit anpacken ein Mitschüler oder zwei Mitschülern, 2391 01:58:29,150 --> 01:58:32,370 Sie erkennen, dass Sie gehen zu müssen oder wollen, die Arbeit teilen. 2392 01:58:32,370 --> 01:58:34,650 >> Und Sie gehen zu wollen, um zu entscheiden, im Voraus, was tun wird, die, 2393 01:58:34,650 --> 01:58:35,483 und in dem Stück? 2394 01:58:35,483 --> 01:58:37,520 Und wäre es nicht schön, Wenn Sie, zum Beispiel, 2395 01:58:37,520 --> 01:58:40,100 nehmen Schreibhaupt, fertig. 2396 01:58:40,100 --> 01:58:43,470 Und Ihre Mitbewohner oder Ihr Partner allgemeiner, 2397 01:58:43,470 --> 01:58:45,230 kümmert Husten umzusetzen. 2398 01:58:45,230 --> 01:58:49,540 >> Und diese Spaltung, diese Wände der Abstraktion, 2399 01:58:49,540 --> 01:58:52,310 oder Abstraktionsebenen, wenn Sie sind superstarken, 2400 01:58:52,310 --> 01:58:55,480 weil vor allem für größere, komplexeren Programmen und Systemen, 2401 01:58:55,480 --> 01:59:00,070 es können mehrere Personen zu bauen Dinge zusammen, und schließlich 2402 01:59:00,070 --> 01:59:02,680 nähen ihre Arbeit auf diese Weise zusammen. 2403 01:59:02,680 --> 01:59:05,332 Aber natürlich, wir müssen jetzt Husten zu beheben. 2404 01:59:05,332 --> 01:59:07,290 Wir brauchen Husten zu sagen, dass, hey, weißt du was? 2405 01:59:07,290 --> 01:59:11,230 Sie gehen ein zu ergreifen müssen, input-- so nicht leer, sondern int und jetzt. 2406 01:59:11,230 --> 01:59:15,170 Fahren wir fort und in Husten die int. i bekommt Null. 2407 01:59:15,170 --> 01:59:16,890 >> i kleiner als wie oft. 2408 01:59:16,890 --> 01:59:18,550 Ich sagte, drei vor. 2409 01:59:18,550 --> 01:59:20,420 Aber das ist nicht das, was ich will. 2410 01:59:20,420 --> 01:59:25,520 Ich möchte husten verallgemeinert werden jede Anzahl von Iterationen zu unterstützen. 2411 01:59:25,520 --> 01:59:28,800 >> Also, ja, es ist n, die ich will, was auch immer der Benutzer sagt mir. 2412 01:59:28,800 --> 01:59:31,620 Jetzt kann ich voran gehen und Druck Husten sagen. 2413 01:59:31,620 --> 01:59:34,750 Und egal, welche Zahl der Benutzer übergibt, 2414 01:59:34,750 --> 01:59:36,890 Ich werde wiederholen, dass viele Male. 2415 01:59:36,890 --> 01:59:39,160 >> So dass am Ende des Tages, Programm ist identisch. 2416 01:59:39,160 --> 01:59:42,820 Aber beachten Sie all dieses Zeug könnte sogar in einer anderen Datei sein. 2417 01:59:42,820 --> 01:59:45,620 Tatsächlich weiß ich nicht, bei der Moment, wie printf implementiert. 2418 01:59:45,620 --> 01:59:47,980 >> Ich weiß im Moment nicht, wie bekommen String oder int bekommen oder bekommen Schwimmer 2419 01:59:47,980 --> 01:59:48,646 implementiert. 2420 01:59:48,646 --> 01:59:50,930 Und ich will nicht sehen, wie sie auf meinem Bildschirm. 2421 01:59:50,930 --> 01:59:55,320 Wie es ist, beginne ich zu konzentrieren mein Programm, nicht jene Funktionen. 2422 01:59:55,320 --> 01:59:59,070 >> Und so, in der Tat, sobald Sie Factoring-Code wie folgt beginnen, 2423 01:59:59,070 --> 02:00:01,397 könnten wir sogar Husten bewegen in einer separaten Datei? 2424 02:00:01,397 --> 02:00:02,730 Jemand anderes könnte es zu implementieren. 2425 02:00:02,730 --> 02:00:06,810 Und Sie und Ihr Programm werden die sehr schön, und sehr gut lesbar, 2426 02:00:06,810 --> 02:00:10,830 wohl, wirklich vier Zeilenprogramm recht. 2427 02:00:10,830 --> 02:00:13,510 >> Also lassen Sie uns fortfahren jetzt und eine weitere Änderung vornehmen. 2428 02:00:13,510 --> 02:00:16,180 Beachten Sie, dass mein Prototyp muss bis oben ändern. 2429 02:00:16,180 --> 02:00:18,390 Lassen Sie mich also, dass beheben, so Ich werde nicht schrie. 2430 02:00:18,390 --> 02:00:22,580 >> Machen Sie Husten, lassen Sie mich laufen Husten einmal mehr, immer noch tun, die gleiche Sache. 2431 02:00:22,580 --> 02:00:26,010 Aber jetzt, bemerken wir haben eine Zutat für eine endgültige Version. 2432 02:00:26,010 --> 02:00:26,940 Weißt du was? 2433 02:00:26,940 --> 02:00:29,040 Ich will nicht nur Husten, unbedingt. 2434 02:00:29,040 --> 02:00:30,802 Ich möchte etwas allgemeinere haben. 2435 02:00:30,802 --> 02:00:31,510 So wissen Sie was? 2436 02:00:31,510 --> 02:00:32,450 Ich möchte das machen. 2437 02:00:32,450 --> 02:00:37,140 Ich will haben, ähnlich wie Scratch der Fall ist, ein Mitsprache Block, aber nicht nur 2438 02:00:37,140 --> 02:00:38,680 etwas sagen, eine bestimmte Anzahl von Zeiten. 2439 02:00:38,680 --> 02:00:41,510 Ich will es eine ganz bestimmte Zeichenfolge zu sagen. 2440 02:00:41,510 --> 02:00:43,850 Und deshalb kann ich nicht will es nur Husten sagen. 2441 02:00:43,850 --> 02:00:47,660 Ich will es sagen, was String wird eingeleitet. 2442 02:00:47,660 --> 02:00:49,960 >> So bemerken, ich habe verallgemeinert dies so, dass nun 2443 02:00:49,960 --> 02:00:53,110 sagen wir fühlt sich wie ein guter Name für diese, wie Scratch, 2444 02:00:53,110 --> 02:00:55,530 nimmt zwei Argumente, im Gegensatz zu Scratch. 2445 02:00:55,530 --> 02:00:56,570 Eine davon ist eine Zeichenfolge. 2446 02:00:56,570 --> 02:00:57,300 Einer ist ein int. 2447 02:00:57,300 --> 02:00:58,130 >> Und ich konnte ihnen wechseln. 2448 02:00:58,130 --> 02:01:00,713 Ich bin ein bisschen wie die Idee sagen die Zeichenfolge zuerst, und dann 2449 02:01:00,713 --> 02:01:01,940 wie oft später. 2450 02:01:01,940 --> 02:01:03,970 Void bedeutet es noch gibt nichts zurück. 2451 02:01:03,970 --> 02:01:06,428 Dies sind nur visuelle Seite Effekte, wie bei [? Jordan,?] 2452 02:01:06,428 --> 02:01:08,240 eine mündliche Nebenwirkung von Schreien. 2453 02:01:08,240 --> 02:01:12,630 Es tut immer noch mal etwas n, 0 bis, aber n nicht gleich. 2454 02:01:12,630 --> 02:01:14,540 Das bedeutet, n Gesamtzeiten. 2455 02:01:14,540 --> 02:01:16,540 Und dann drucken gerade aus was auch immer, dass String ist. 2456 02:01:16,540 --> 02:01:19,060 Also ich habe wirklich generali Diese Codezeile. 2457 02:01:19,060 --> 02:01:22,460 So, jetzt, wie kann ich umsetzen der Husten-Funktion? 2458 02:01:22,460 --> 02:01:25,520 >> Ich kann Leere Husten tun. 2459 02:01:25,520 --> 02:01:28,501 Und ich kann noch dauern, wie oft wollen Sie zu husten. 2460 02:01:28,501 --> 02:01:29,250 Aber weißt du was? 2461 02:01:29,250 --> 02:01:31,240 Ich kann jetzt sagen Punt. 2462 02:01:31,240 --> 02:01:36,540 >> Ich kann mit dem Aufruf sagen Wort Husten, in n übergeben. 2463 02:01:36,540 --> 02:01:40,410 Und wenn ich möchte auch implementieren, nur zum Spaß, ein Niesen Funktion, 2464 02:01:40,410 --> 02:01:42,290 Ich kann eine gewisse Anzahl, wie oft niesen. 2465 02:01:42,290 --> 02:01:47,300 Und ich kann n halten die Wiederverwendung, weil bemerken, dass m in diesem Zusammenhang oder Umfang 2466 02:01:47,300 --> 02:01:49,470 existiert nur in dieser Funktion. 2467 02:01:49,470 --> 02:01:52,767 >> Und n nur in diesem Zusammenhang Hier besteht in dieser Funktion. 2468 02:01:52,767 --> 02:01:54,600 So kommen wir zurück zu diese Fragen Spielraum. 2469 02:01:54,600 --> 02:02:01,160 Und hier, ich werde einfach sagen, achoo, und dann n-mal, Semikolon. 2470 02:02:01,160 --> 02:02:04,340 >> Und jetzt, ich muss nur leihen diese Funktion Signaturen hier oben. 2471 02:02:04,340 --> 02:02:06,290 So ist Husten richtig. 2472 02:02:06,290 --> 02:02:10,090 Void niesen ist jetzt korrekt. 2473 02:02:10,090 --> 02:02:12,390 >> Und ich muss immer noch nur sagen. 2474 02:02:12,390 --> 02:02:18,990 Also werde ich sagen, sagen wir string s, int n, Semikolon. 2475 02:02:18,990 --> 02:02:22,010 Also ich habe over-engineered die Heck aus diesem Programm. 2476 02:02:22,010 --> 02:02:23,760 >> Und dies nicht bedeutet notwendigerweise das ist 2477 02:02:23,760 --> 02:02:26,343 was Sie tun sollten, wenn das Schreiben selbst die einfachsten Programme. 2478 02:02:26,343 --> 02:02:29,280 Nehmen Sie etwas, das ist offensichtlich wirklich einfach, wirklich kurz, 2479 02:02:29,280 --> 02:02:31,800 und neu zu implementieren es mit viel zu viel Code. 2480 02:02:31,800 --> 02:02:34,560 Aber Sie werden tatsächlich sehen, und in Zeit schauen auf diese Beispiele zurück, 2481 02:02:34,560 --> 02:02:38,610 und erkennen, oh, das sind die Schritte wir haben tatsächlich zu verallgemeinern, 2482 02:02:38,610 --> 02:02:40,797 Faktor etwas aus, bis zum Ende des Tages 2483 02:02:40,797 --> 02:02:42,380 mein Code ist eigentlich ziemlich vernünftig. 2484 02:02:42,380 --> 02:02:45,960 Denn wenn ich will drei husten mal dann dreimal niesen, 2485 02:02:45,960 --> 02:02:50,420 Ich bin einfach so gehen erneut auszuführen, Programm machen Husten, und führen Sie Husten. 2486 02:02:50,420 --> 02:02:53,620 Und ich habe drei Husten und drei niest. 2487 02:02:53,620 --> 02:02:55,990 >> Und so ist dies ein grundlegendes Paradigma, wenn man so will, 2488 02:02:55,990 --> 02:03:00,110 denn wie wir gehen könnte über Umsetzung tatsächlich ein Programm. 2489 02:03:00,110 --> 02:03:03,220 Aber lassen Sie uns sehen, gerade jetzt, was es ist wir haben alle von dieser Zeit getan, 2490 02:03:03,220 --> 02:03:06,940 und was sind einige der letzten Teile diesem einfachen Befehl sind hinter. 2491 02:03:06,940 --> 02:03:09,620 Am Ende des Tages, haben wir mit Clang als unser Compiler gewesen. 2492 02:03:09,620 --> 02:03:11,494 Wir haben Quelle schreiben Code, sie zu konvertieren 2493 02:03:11,494 --> 02:03:12,820 über Clang in Maschinencode. 2494 02:03:12,820 --> 02:03:15,540 >> Und wir haben gerade machen unter Verwendung von unsere Tastatureingaben zu erleichtern, so 2495 02:03:15,540 --> 02:03:20,740 dass wir müssen nicht erinnern diese Beschwörungen von Clang selbst. 2496 02:03:20,740 --> 02:03:22,640 Aber was ist eigentlich machen zu tun? 2497 02:03:22,640 --> 02:03:24,750 Und wiederum, was Clang tatsächlich tun? 2498 02:03:24,750 --> 02:03:28,790 >> Es stellt sich heraus, obwohl wir vereinfacht die heutige Diskussion mit den Worten: 2499 02:03:28,790 --> 02:03:33,090 Sie Quellcode nehmen, übergeben Sie es als Eingang zu einem Compiler, der Sie gibt 2500 02:03:33,090 --> 02:03:35,750 Ausgabe von Maschinen Code, stellt sich heraus, es gibt 2501 02:03:35,750 --> 02:03:37,420 ein paar verschiedene Schritte im Inneren befindet. 2502 02:03:37,420 --> 02:03:41,940 Und Compilierung geschieht der Schirm zu sein Bezeichnung für eine ganze Reihe von Schritten. 2503 02:03:41,940 --> 02:03:43,970 Aber lassen Sie uns nur ärgern dies heraus wirklich schnell. 2504 02:03:43,970 --> 02:03:48,070 >> Es stellt sich heraus, dass wir getan haben mehr Dinge jedes Mal wenn ich ein Programm ausführen, 2505 02:03:48,070 --> 02:03:50,990 oder jedes Mal, wenn ich ein Programm heute kompilieren. 2506 02:03:50,990 --> 02:03:55,020 So Vorverarbeitung bezieht sich auf this-- alles in einem C-Programm, 2507 02:03:55,020 --> 02:03:58,720 wie wir sehen immer wieder, das beginnt mit diesem Hash-Symbol, 2508 02:03:58,720 --> 02:04:03,320 oder das Hashtag Symbol bedeutet hier es ist eine Präprozessordirektive. 2509 02:04:03,320 --> 02:04:07,330 Das heißt, in diesem Fall He Computer, tun Sie etwas mit dieser Datei 2510 02:04:07,330 --> 02:04:09,430 bevor Sie meinen eigenen Code tatsächlich kompilieren. 2511 02:04:09,430 --> 02:04:15,220 >> In diesem Fall Hash umfassen heißt, im Wesentlichen, C Art zu sagen, 2512 02:04:15,220 --> 02:04:19,325 hey Computer, gehen die Inhalte bekommen von CS50.h und fügen Sie sie hier. 2513 02:04:19,325 --> 02:04:22,170 Hey Computer, gehen Sie bekommen die Inhalte von Standard io.h, 2514 02:04:22,170 --> 02:04:24,690 wo immer das auch auf die Festplatte, fügen Sie ihn hier. 2515 02:04:24,690 --> 02:04:27,390 Also diese Dinge passieren zuerst während der Vorverarbeitung. 2516 02:04:27,390 --> 02:04:28,880 >> Und Clang tut alles für uns. 2517 02:04:28,880 --> 02:04:30,510 Und es tut so verdammt schnell, tun Sie nicht einmal 2518 02:04:30,510 --> 02:04:32,000 sehen vier verschiedene Dinge passiert. 2519 02:04:32,000 --> 02:04:34,100 Aber das ist der erste derartige Schritt. 2520 02:04:34,100 --> 02:04:35,560 >> Was passiert eigentlich als nächstes? 2521 02:04:35,560 --> 02:04:38,320 Nun, die nächste offizielle Schritt kompiliert. 2522 02:04:38,320 --> 02:04:40,385 Und es stellt sich heraus, dass Kompilieren eines Programms 2523 02:04:40,385 --> 02:04:44,060 technisch bedeutet, sich aus Quellcode, die Sachen, die wir haben 2524 02:04:44,060 --> 02:04:47,890 geschrieben heute, etwas zu Assembler-Code genannt wird, etwas 2525 02:04:47,890 --> 02:04:49,260 das sieht ein wenig anders. 2526 02:04:49,260 --> 02:04:51,050 >> Und in der Tat, können wir dies wirklich schnell zu sehen. 2527 02:04:51,050 --> 02:04:53,890 Lassen Sie mich gehen tatsächlich in meine IDE. 2528 02:04:53,890 --> 02:04:58,050 Lassen Sie mich gehen Sie vor und öffnen hello.c, die ist das erste Programm, mit dem wir 2529 02:04:58,050 --> 02:04:59,120 heute begann. 2530 02:04:59,120 --> 02:05:04,130 Und lassen Sie mich voran gehen und laufen Clang ein wenig anders, Clang-s, hello.c, 2531 02:05:04,130 --> 02:05:07,720 welche ist eigentlich los zu Gib mir noch eine Datei hello.s. 2532 02:05:07,720 --> 02:05:10,330 >> Und wir werden wahrscheinlich nie wieder sehen diese Art von Code. 2533 02:05:10,330 --> 02:05:13,030 Wenn Sie eine niedrigere Stufe zu nehmen Systeme Klasse wie CS61, 2534 02:05:13,030 --> 02:05:14,920 Sie werden viel mehr sehen dieser Art von Code. 2535 02:05:14,920 --> 02:05:17,020 Aber dies ist in Assemblersprache. 2536 02:05:17,020 --> 02:05:22,050 Dies ist X86 Assembler-Sprache dass die CPU, die zugrunde liegende 2537 02:05:22,050 --> 02:05:24,460 CS50 IDE versteht eigentlich. 2538 02:05:24,460 --> 02:05:27,060 >> Und kryptisch wie es funktioniert aussehen, es ist etwas, 2539 02:05:27,060 --> 02:05:29,180 der Computer versteht ziemlich gut. 2540 02:05:29,180 --> 02:05:30,790 Sub q, ist dies ein subtrahieren. 2541 02:05:30,790 --> 02:05:31,660 Es gibt Bewegungen. 2542 02:05:31,660 --> 02:05:35,730 >> Es ist hier von Funktionen aufrufen, x oring, eine Bewegung, ein Add, ein Pop, 2543 02:05:35,730 --> 02:05:36,430 eine Rückgabe. 2544 02:05:36,430 --> 02:05:38,850 So gibt es einige sehr niedrigen Niveau Anweisungen 2545 02:05:38,850 --> 02:05:41,280 dass CPUs verstehen, dass Ich spielte auf früher. 2546 02:05:41,280 --> 02:05:43,100 Das ist, was Intel Inside. 2547 02:05:43,100 --> 02:05:45,030 >> Es gibt Muster von Nullen und Einsen, dass 2548 02:05:45,030 --> 02:05:51,800 Karte auf diese arcanely formuliert, aber etwas gut genannt, Anweisungen, 2549 02:05:51,800 --> 02:05:52,780 sozusagen. 2550 02:05:52,780 --> 02:05:54,780 Das ist, was passiert, wenn Sie Ihren Code kompilieren. 2551 02:05:54,780 --> 02:05:58,560 Sie erhalten Montage aus der es die Sprache, die 2552 02:05:58,560 --> 02:06:04,680 bedeutet, dass der dritte Schritt zu montieren ist, dass Assembler-Code in letztlich 2553 02:06:04,680 --> 02:06:09,080 Maschine code-- Nullen und Einsen, nicht die Text, den wir noch vor einem Moment sah. 2554 02:06:09,080 --> 02:06:13,370 >> So Vorverarbeitung bedeutet das finden und ersetzen, und ein paar andere Dinge. 2555 02:06:13,370 --> 02:06:16,430 Compilieren nimmt Ihre Quelle Code aus C, Quellcode 2556 02:06:16,430 --> 02:06:18,980 dass wir geschrieben haben, bis hin zur Montage Code, den wir in nur einen Blick zu. 2557 02:06:18,980 --> 02:06:22,170 Montage nimmt diese Montage Code zu Nullen und Einsen 2558 02:06:22,170 --> 02:06:24,680 wirklich, dass die CPU verstehen, am Ende des Tages. 2559 02:06:24,680 --> 02:06:27,630 Und Verknüpfung ist der letzte Schritt das geschieht für us-- wieder, 2560 02:06:27,630 --> 02:06:29,830 so schnell tun wir nicht einmal notice-- das sagt, 2561 02:06:29,830 --> 02:06:32,460 hey Computer, nehmen Sie alle die Nullen und Einsen, dass 2562 02:06:32,460 --> 02:06:36,750 führte Davids Code kompilieren, und seine Hauptfunktion in diesem Fall. 2563 02:06:36,750 --> 02:06:39,160 >> Und hey Computer, gehen Sie bekommen alle der Nullen und Einsen 2564 02:06:39,160 --> 02:06:42,180 dass das CS50 Personal schrieb in der CS50-Bibliothek. 2565 02:06:42,180 --> 02:06:43,440 diejenigen, die in mit Davids mischen. 2566 02:06:43,440 --> 02:06:46,648 Und hey Computer, gehen alle Nullen erhalten und diejenigen, die jemand anderes geschrieben Jahre 2567 02:06:46,648 --> 02:06:47,470 vor für printf. 2568 02:06:47,470 --> 02:06:49,880 Und die in der hinzufügen Ganze, so dass wir haben 2569 02:06:49,880 --> 02:06:52,870 habe meine Nullen und Einsen, die CS50 Mitarbeiter Nullen und Einsen, 2570 02:06:52,870 --> 02:06:55,370 die printf Nullen und Einsen, und alles, was wir verwenden. 2571 02:06:55,370 --> 02:07:00,410 >> Sie alle bekommen kombiniert zusammen in einem Programm genannt, in diesem Fall, hallo. 2572 02:07:00,410 --> 02:07:03,141 Also von nun an werden wir nur das Wort Compilierung. 2573 02:07:03,141 --> 02:07:06,390 Und wir werden selbstverständlich ist, dass, wenn wir sagen, kompilieren Ihr Programm, bedeutet dies, 2574 02:07:06,390 --> 02:07:08,849 hey tun, um die Pre-Processing, Montage und verknüpfen. 2575 02:07:08,849 --> 02:07:11,890 Aber es gibt tatsächlich einige saftige Zeug geht es unter der Haube. 2576 02:07:11,890 --> 02:07:13,723 Und vor allem, wenn Sie erhalten neugierig einige Zeit, 2577 02:07:13,723 --> 02:07:15,900 können Sie beginnen, Stossen um auf diesem niedrigeren Niveau. 2578 02:07:15,900 --> 02:07:19,660 Aber jetzt erkennen, dass unter den Take-away für heute 2579 02:07:19,660 --> 02:07:23,420 sind ganz einfach die Beginn eines Prozesses, 2580 02:07:23,420 --> 02:07:26,700 der, sich mit so etwas wie Hallo Welt. 2581 02:07:26,700 --> 02:07:29,575 Tatsächlich sind die meisten von dem, was wir haben heute wird sicherlich nicht super schnell sinken in. 2582 02:07:29,575 --> 02:07:31,491 Und es dauert einige Zeit, und einige Übung. 2583 02:07:31,491 --> 02:07:33,864 Und Chancen sind, werden Sie sortieren von möchten, dass Ihre Tastatur zu treffen 2584 02:07:33,864 --> 02:07:34,780 oder schreien auf den Bildschirm. 2585 02:07:34,780 --> 02:07:35,880 Und all das ist in Ordnung. 2586 02:07:35,880 --> 02:07:38,320 Obwohl vielleicht versuchen, nicht zu tun sie so viel in der Bibliothek. 2587 02:07:38,320 --> 02:07:40,820 >> Und schließlich werden Sie obwohl der Lage sein, zu starten 2588 02:07:40,820 --> 02:07:44,580 Muster, sowohl in guten Code zu sehen dass Sie geschrieben haben und in Fehler 2589 02:07:44,580 --> 02:07:45,370 dass Sie gemacht haben. 2590 02:07:45,370 --> 02:07:48,965 Und ähnlich wie der Prozess der ein TF oder ein CA zu werden, ist wie, 2591 02:07:48,965 --> 02:07:51,590 Sie beginnen, um besser zu werden und besser auf diese Muster zu sehen, 2592 02:07:51,590 --> 02:07:53,774 und die Lösung einfach Ihre eigene Probleme letztlich. 2593 02:07:53,774 --> 02:07:56,940 In der Zwischenzeit wird es viel sein von uns, Ihnen Unterstützung zu gewähren, und erhalten Sie 2594 02:07:56,940 --> 02:07:57,481 durch dies. 2595 02:07:57,481 --> 02:07:59,450 Und in den Zuschreibungen für alle Probleme 2596 02:07:59,450 --> 02:08:01,366 werden Sie durch geführt werden alle Befehle 2597 02:08:01,366 --> 02:08:05,330 dass ich weiß mit Sicherheit aus eine Menge Übung jetzt, 2598 02:08:05,330 --> 02:08:07,380 aber vielleicht haben geflogen den Kopf über vorerst. 2599 02:08:07,380 --> 02:08:08,580 Und das ist völlig in Ordnung. 2600 02:08:08,580 --> 02:08:11,230 >> Aber letztlich, du gehst beginnen Muster zu sehen entstehen. 2601 02:08:11,230 --> 02:08:14,260 Und wenn Sie all das bekommen Vergangenheit dummen Details, wie Klammern, 2602 02:08:14,260 --> 02:08:16,710 und geschweiften Klammern und Semikolons, und das Zeug, ehrlich gesagt, 2603 02:08:16,710 --> 02:08:19,360 das ist nicht bei allen intellektuell interessant. 2604 02:08:19,360 --> 02:08:22,690 Und es ist nicht das Ziel, jede einleitende Klasse. 2605 02:08:22,690 --> 02:08:24,410 Es sind die Ideen, die die Materie gehen. 2606 02:08:24,410 --> 02:08:26,659 >> Es ist die Schleifen und die Bedingungen, und die Funktionen, 2607 02:08:26,659 --> 02:08:30,552 und stärker die Abstraktion, und das Factoring von Code, 2608 02:08:30,552 --> 02:08:33,510 und das gute Design und die gute Stil, und schließlich die Richtigkeit 2609 02:08:33,510 --> 02:08:37,330 schließlich des Codes, das ist gehen die meisten auf die Materie. 2610 02:08:37,330 --> 02:08:40,925 Also das nächste Woche, werden wir diese Ideen, die wir zum ersten Mal in Scratch sah 2611 02:08:40,925 --> 02:08:42,800 und haben nun übersetzt C. Und wir beginnen 2612 02:08:42,800 --> 02:08:45,740 einzuführen, um die erste der Natürlich aus der realen Welt-Domänen. 2613 02:08:45,740 --> 02:08:50,140 >> Wir werden uns auf die Welt der Sicherheit konzentrieren, und insbesondere die Kryptographie, 2614 02:08:50,140 --> 02:08:51,980 die Kunst der Informationen kriechen. 2615 02:08:51,980 --> 02:08:54,000 Und unter den ersten Probleme, die Sie selbst 2616 02:08:54,000 --> 02:08:56,840 erhalten darüber hinaus zu schreiben mit einigen der Syntax spielen 2617 02:08:56,840 --> 02:08:59,880 und die Lösung einige logische Probleme, schließlich dauerte nicht lange, 2618 02:08:59,880 --> 02:09:03,960 ist zu krabbeln tatsächlich, oder zu verschlüsseln, und entschlüsseln letztlich Informationen. 2619 02:09:03,960 --> 02:09:06,470 Und alles, was wir getan haben, Heute werden ziemlich niedrig 2620 02:09:06,470 --> 02:09:09,190 Ebene, wird sich nur erlauben uns ein zu nehmen, und eine, 2621 02:09:09,190 --> 02:09:13,550 und einen weiteren Schritt in Richtung oben Schreiben der interessanteste Code noch. 2622 02:09:13,550 --> 02:09:15,050 >> Also mehr dazu nächste Woche. 2623 02:09:15,050 --> 02:09:17,834 2624 02:09:17,834 --> 02:09:18,762 >> [VIDEO-WIEDERGABE] 2625 02:09:18,762 --> 02:09:19,690 2626 02:09:19,690 --> 02:09:22,006 >> -Wie Können Sie mir sagen, über das letzte Mal, wenn Sie ihn gesehen? 2627 02:09:22,006 --> 02:09:26,041 2628 02:09:26,041 --> 02:09:27,040 -Wie Kann ich sagen, wirklich? 2629 02:09:27,040 --> 02:09:30,500 2630 02:09:30,500 --> 02:09:35,340 Ich meine, es war wie jedes andere Vorproduktion Probe, 2631 02:09:35,340 --> 02:09:40,510 außer dass es etwas war, sagte er ganz am Ende, die mit mir stecken. 2632 02:09:40,510 --> 02:09:44,810 2633 02:09:44,810 --> 02:09:46,640 >> -Das War CS50. 2634 02:09:46,640 --> 02:09:49,440 2635 02:09:49,440 --> 02:09:52,190 >> -Das Ist ein Schnitt jeder, gute Arbeit auf Probe. 2636 02:09:52,190 --> 02:09:53,070 >> -Das Ist das Mittagessen? 2637 02:09:53,070 --> 02:09:54,986 >> -Ja, Du und ich schnappen Sie sich einen Sandwich in einem Bit. 2638 02:09:54,986 --> 02:09:58,380 Lassen Sie mich Nachbesprechung nur mit David wirklich schnell. 2639 02:09:58,380 --> 02:09:59,160 David? 2640 02:09:59,160 --> 02:10:01,260 David? 2641 02:10:01,260 --> 02:10:03,110 >> [END WIEDERGABE]