1 00:00:00,000 --> 00:00:11,280 2 00:00:11,280 --> 00:00:13,650 >> Sprecher 1: In Ordnung. 3 00:00:13,650 --> 00:00:14,390 Willkommen zurück. 4 00:00:14,390 --> 00:00:19,260 Dies ist Woche Zwei CS50, und wir haben bisher wurde die Verwendung von Funktionen, sondern 5 00:00:19,260 --> 00:00:20,830 weitgehend genommen sie für selbstverständlich. 6 00:00:20,830 --> 00:00:23,430 Wir haben die printf hat das verwendete Nebeneffekt Druck 7 00:00:23,430 --> 00:00:24,110 Dinge auf dem Bildschirm. 8 00:00:24,110 --> 00:00:25,790 Wir haben zu gewöhnen-int, erhalten schweben. 9 00:00:25,790 --> 00:00:29,230 >> Aber was, wenn Sie wirklich wollen, schaffen Ihre eigenen Funktionen, wie einige 10 00:00:29,230 --> 00:00:31,740 Sie vielleicht schon begonnen zu haben tun für Problem Set One, obwohl 11 00:00:31,740 --> 00:00:33,140 nicht unbedingt erforderlich? 12 00:00:33,140 --> 00:00:37,150 Nun, lassen Sie uns fortfahren und erneut, dass Problem nur die Benutzer zu fragen 13 00:00:37,150 --> 00:00:40,660 ihren Namen und den Druck etwas auf der Bildschirm, sondern versuchen, ausklammern einige 14 00:00:40,660 --> 00:00:44,000 der Gemeinsamkeit, dass wir gesehen in unseren Code so weit. 15 00:00:44,000 --> 00:00:45,120 Also damit meine ich die folgenden. 16 00:00:45,120 --> 00:00:47,315 >> Ich werde weitermachen und erstellen ein neues Programm, rufen Sie einfach 17 00:00:47,315 --> 00:00:49,320 es Hello.c wie gewohnt. 18 00:00:49,320 --> 00:00:53,730 Ich werde weitermachen und mich gehören Standard io.h an der Spitze. 19 00:00:53,730 --> 00:00:57,040 Ich werde auch mir selbst präventiv der CS50-Bibliothek, so dass 20 00:00:57,040 --> 00:00:59,080 Ich glaube nicht an die vom Compiler bekommen schrie. 21 00:00:59,080 --> 00:01:02,400 Und jetzt gehe ich voran gehen und erklären, int, main, nichtig. 22 00:01:02,400 --> 00:01:09,020 >> Und dann in hier, das ist, wo ich will zu beginnen, um die Funktionalität auslagern 23 00:01:09,020 --> 00:01:12,090 eine andere Funktion, die ich selbst bin gehen, um zu schreiben, aber das bedeutet nicht 24 00:01:12,090 --> 00:01:13,820 Derzeit existieren. 25 00:01:13,820 --> 00:01:19,210 Zum Beispiel: Angenommen, ich wollte eine Funktion schreiben, die mir erlaubt 26 00:01:19,210 --> 00:01:23,830 ausdrucken hallo, Komma, und dann einige Namen des Benutzers. 27 00:01:23,830 --> 00:01:29,010 Statt weiterhin printf tun hallo,% s, wäre es nicht schön, wenn 28 00:01:29,010 --> 00:01:33,380 gab es nur eine Funktion aufgerufen printf nicht aber drucken Name? 29 00:01:33,380 --> 00:01:36,600 >> Also mit anderen Worten, ich möchte in der Lage sein ein Programm schreiben, das ein wenig tut 30 00:01:36,600 --> 00:01:37,710 etwas wie dieses. 31 00:01:37,710 --> 00:01:42,070 Zuerst werde ich sagen, dass Ihre printf Name, wodurch der Benutzer aufgefordert wird 32 00:01:42,070 --> 00:01:46,150 gib mir seinen Namen, und dann bin ich gehen, um die vertrauten string s verwenden, um 33 00:01:46,150 --> 00:01:47,290 erklären einen String. 34 00:01:47,290 --> 00:01:50,420 Gib mir eine Variable vom Typ string, nennen es s und speichern, dass die 35 00:01:50,420 --> 00:01:52,120 Ergebnis des Aufrufs bekommen Zeichenfolge. 36 00:01:52,120 --> 00:01:56,060 Aber jetzt in Wochen vorbei, würde ich etwas mühsam getan hallo,% s / n. 37 00:01:56,060 --> 00:01:58,630 38 00:01:58,630 --> 00:02:02,570 >> Und in anderen Worten, wir haben gesehen Beispiel ein paar Mal, und es ist ein 39 00:02:02,570 --> 00:02:05,280 triviales Beispiel, denn es gibt nur eine Codezeile so ist es wirklich nicht ein 40 00:02:05,280 --> 00:02:06,860 große Sache zu halten Eingabe wieder. 41 00:02:06,860 --> 00:02:09,990 Aber nehmen wir an, dass diese Codezeile tatsächlich wurden zu einer Belastung und 42 00:02:09,990 --> 00:02:12,900 es ist nicht eine Zeile Code, aber es ist 10 Codezeilen ein paar Wochen von jetzt an, 43 00:02:12,900 --> 00:02:15,190 und du bist nur müde Kopieren und Einfügen von oder 44 00:02:15,190 --> 00:02:17,180 Abtippen denselben Code. 45 00:02:17,180 --> 00:02:22,100 Wäre es nicht schön, anstatt das zu tun printf hallo,% s und so weiter, 46 00:02:22,100 --> 00:02:26,500 wäre es nicht schön, wenn es nur eine Funktion aufgerufen drucken Name, 47 00:02:26,500 --> 00:02:27,560 ein Argument - 48 00:02:27,560 --> 00:02:29,120 Mit anderen Worten, es dauert Eingang - 49 00:02:29,120 --> 00:02:30,620 und dann Semikolon. 50 00:02:30,620 --> 00:02:33,240 So, dass Funktion, wäre es nicht wäre schön, wenn die bestanden? 51 00:02:33,240 --> 00:02:36,690 Dann würde ich nicht zu befürchten printf was ist, was% s und alle 52 00:02:36,690 --> 00:02:39,400 diese Komplexität, die sind gar nicht so interessant. 53 00:02:39,400 --> 00:02:40,570 Sie sind nützlich. 54 00:02:40,570 --> 00:02:44,700 >> So drucken Name war leider nicht erfunden einige 40 plus Jahren. 55 00:02:44,700 --> 00:02:45,980 Niemand dachte daran, es zu schreiben. 56 00:02:45,980 --> 00:02:48,300 Aber das ist die Schönheit der mit einem Programmiersprache, wie in 57 00:02:48,300 --> 00:02:52,930 Scratch können Sie benutzerdefinierte Blöcke, so in C und fast jeder Sprache, können Sie 58 00:02:52,930 --> 00:02:57,260 definieren Sie Ihre eigene Funktionalität, kann Sie auch eigene Funktionen definieren. 59 00:02:57,260 --> 00:03:01,710 Also auch wenn wir Hauptsache durch automatisch kostenlos, können wir erklären, 60 00:03:01,710 --> 00:03:02,730 unsere eigenen Funktionen. 61 00:03:02,730 --> 00:03:05,670 >> Also werde ich etwas Platz hier oben machen bis oben, und ich werde erklären, meine 62 00:03:05,670 --> 00:03:08,210 eigene Funktion, die gehen, um einen Blick ist wenig seltsam auf den ersten, aber wir kommen 63 00:03:08,210 --> 00:03:09,400 zurück zu dieser vor lang. 64 00:03:09,400 --> 00:03:12,310 Ich werde sagen, nichtig, wodurch anzeigt, diese Funktion macht 65 00:03:12,310 --> 00:03:16,040 etwas, hat einen Nebeneffekt, aber es nicht wieder etwas zu mir in die 66 00:03:16,040 --> 00:03:18,810 gleichen Weise, int bekommen oder bekommen String selbst tut. 67 00:03:18,810 --> 00:03:22,450 Und ich werde Ihnen diese Funktion eine Name des Druck-Namen, und ich bin zu gehen 68 00:03:22,450 --> 00:03:26,470 anzugeben, dass dieser Kerl wird dauern ein String, und ich werde das nennen 69 00:03:26,470 --> 00:03:27,600 string name. 70 00:03:27,600 --> 00:03:32,100 Ich könnte es, was ich will, aber ich möchte meinen Code zu sein selbst dokumentieren. 71 00:03:32,100 --> 00:03:34,770 In anderen Worten, wenn einer von euch zu diese Datei öffnen und lesen Sie sie, könnten Sie 72 00:03:34,770 --> 00:03:39,020 Art folgern aus dem Namen, dass Eingang, welche Rolle es soll zu spielen. 73 00:03:39,020 --> 00:03:42,270 >> Und jetzt darunter, ich werde zu öffnen geschweiften Klammer und geschlossenen geschweiften Klammer, 74 00:03:42,270 --> 00:03:47,140 und so feststellen, ich habe das gleiche gefolgt Muster auf vier bis sieben Zeilen wie 75 00:03:47,140 --> 00:03:51,622 Ich habe für eine gute Woche plus verfolgt nun zwischen, sagen wir, neun Linien und 76 00:03:51,622 --> 00:03:53,400 14, die wichtigsten zu komponieren. 77 00:03:53,400 --> 00:03:56,160 In anderen Worten, ausdrucken Namen eine weitere Funktion. 78 00:03:56,160 --> 00:03:58,990 Nun wird der Compiler nicht zu wissen, diese Sache automatisch aufrufen 79 00:03:58,990 --> 00:04:02,670 weil ich buchstäblich nur erfunden, aber es wird noch wissen, zu nennen wichtigsten 80 00:04:02,670 --> 00:04:08,710 automatisch, und dann natürlich in Linie 13, rufe ich meine eigene Funktion. 81 00:04:08,710 --> 00:04:12,805 Und weil ich habe erklärt, dass Funktion up on line vier vor den Hauptmahlzeiten, 82 00:04:12,805 --> 00:04:16,579 dies wird den Compiler lehren was Zitat unquote, "print name" 83 00:04:16,579 --> 00:04:18,140 bedeutet und was es tun sollte. 84 00:04:18,140 --> 00:04:22,700 Also ich bin Art von ihm eine neue benutzerdefinierte blockieren im Rahmen von, sagen wir, Scratch. 85 00:04:22,700 --> 00:04:27,240 >> Also hier kann ich setzen, dass sehr häufig oder wiederkehrende Muster der Code, den ich halten 86 00:04:27,240 --> 00:04:32,300 Schreiben in der Klasse, printf % S hallo,% s / n ", - 87 00:04:32,300 --> 00:04:36,720 88 00:04:36,720 --> 00:04:37,590 was will ich hier setzen? 89 00:04:37,590 --> 00:04:39,200 S? 90 00:04:39,200 --> 00:04:41,420 Deshalb möchte ich in diesem Zusammenhang Namen setzen. 91 00:04:41,420 --> 00:04:43,440 So bemerkt ein bisschen eine Dichotomie hier. 92 00:04:43,440 --> 00:04:47,680 Weil ich erklärte meine eigene Funktion und ich habe etwas willkürlich genannt 93 00:04:47,680 --> 00:04:50,880 es ausdrucken Namen, und weil ich in Klammern angegeben, dass diese 94 00:04:50,880 --> 00:04:55,035 Funktion nimmt ein Argument, die Art der das ist ein string - so ist es ein Wort 95 00:04:55,035 --> 00:05:00,010 oder eine Phrase oder so ähnlich - und Ich rufe dieses Argument Namen, dass 96 00:05:00,010 --> 00:05:04,770 bedeutet die einzige Variable, die in ist Umfang, so zu sprechen, ist der Name. 97 00:05:04,770 --> 00:05:07,780 >> S existiert nur zwischen dem, was zwei geschweiften Klammern, natürlich? 98 00:05:07,780 --> 00:05:12,990 Nun wirklich, wie Linie 10 durch 14, so genau wie am Montag nicht verwenden können 99 00:05:12,990 --> 00:05:17,650 S, aber was ich tun kann, ist vorbei S in den Druck ein. 100 00:05:17,650 --> 00:05:21,030 Drucken Namen einfach so passiert, es aufzugeben ein Alias, ein Synonym, ein Spitzname, 101 00:05:21,030 --> 00:05:24,400 Namen nannte es, und jetzt Verwendung in dieser Linie. 102 00:05:24,400 --> 00:05:26,840 So, jetzt lassen Sie mich diese speichern, vergrößern oder verkleinern. 103 00:05:26,840 --> 00:05:31,250 >> Lassen Sie mich gehen Sie vor und machen hallo. 104 00:05:31,250 --> 00:05:32,400 Sieht gut aus. 105 00:05:32,400 --> 00:05:36,110 Haben Sie nicht ausspucken eventuelle Fehler. . / Hallo eingeben. 106 00:05:36,110 --> 00:05:37,020 Was ist mein Name? 107 00:05:37,020 --> 00:05:38,060 David. 108 00:05:38,060 --> 00:05:39,270 Und hallo David. 109 00:05:39,270 --> 00:05:41,820 Also gar nicht so aufregend, aber gerade jetzt denken. 110 00:05:41,820 --> 00:05:44,310 Sie haben nun die gleiche Zutat wie wir in Scratch zu 111 00:05:44,310 --> 00:05:45,420 machen unsere eigenen Funktionen. 112 00:05:45,420 --> 00:05:46,770 >> Aber es ist ein bisschen wie ein gotcha. 113 00:05:46,770 --> 00:05:50,620 Angenommen, ich hätte nicht wirklich gedacht, diese durch und ich eigentlich ohne 114 00:05:50,620 --> 00:05:54,250 wirklich darüber nachzudenken schrieb Diese Funktion hier unten. 115 00:05:54,250 --> 00:05:55,420 Fühlt sich absolut vernünftig. 116 00:05:55,420 --> 00:05:58,440 In Scratch gibt es keine Vorstellung der Ort in Ihrer Skripte. 117 00:05:58,440 --> 00:06:00,670 Sie hätte den hier oben, hier oben, hier oben, und es könnte zu starten 118 00:06:00,670 --> 00:06:03,310 um ein wenig chaotisch aussehen, wenn Sie dies nicht tun legte es ordentlich, aber es funktioniert nicht 119 00:06:03,310 --> 00:06:05,910 egal, wo physisch die Skripte waren auf dem Bildschirm. 120 00:06:05,910 --> 00:06:09,660 Leider gibt es in C - und das ist im Gegensatz zu Sprachen wie Java und Python 121 00:06:09,660 --> 00:06:13,600 und andere, die Sie kennen könnten mit - leider in C, tut Bestellung 122 00:06:13,600 --> 00:06:15,830 egal, denn was ist Uhr wird jetzt passieren. 123 00:06:15,830 --> 00:06:19,010 >> Die Standardfunktion das wird auszuführen ist, natürlich, main. 124 00:06:19,010 --> 00:06:22,290 Main Drucklegung Namen nennen Linie acht, aber leider die 125 00:06:22,290 --> 00:06:26,660 Compiler wird nicht einmal wissen, dass Name in Druckschrift existiert, bis sie in die Linie 11 erhält, 126 00:06:26,660 --> 00:06:28,520 das ist leider werde zu spät sein. 127 00:06:28,520 --> 00:06:30,660 So lasst uns machen hallo. 128 00:06:30,660 --> 00:06:32,950 Und jetzt verdammt, zwei Fehler generiert. 129 00:06:32,950 --> 00:06:36,050 So, jetzt lassen Sie mich nach oben auf die sehr zunächst, wie sollten wir immer zu tun, und 130 00:06:36,050 --> 00:06:39,560 feststellen, dass es bei mir schreien, "Implizite Deklaration der Funktion 131 00:06:39,560 --> 00:06:40,540 ausdrucken Namen. " 132 00:06:40,540 --> 00:06:43,860 >> Also haben wir diese Nachricht gesehen, Implizite Deklaration der Funktion. 133 00:06:43,860 --> 00:06:48,080 Wann haben wir diese Art von Fehler gesehen? 134 00:06:48,080 --> 00:06:49,180 Als ich nicht zählen eine Bibliothek. 135 00:06:49,180 --> 00:06:53,470 Wenn ich cs50.h vergessen und ich würde schrie für den String oder int bekommen. 136 00:06:53,470 --> 00:06:56,880 Aber in diesem Fall diese Funktion Drucken Name ist nicht in einer Bibliothek, nicht wahr? 137 00:06:56,880 --> 00:07:00,230 Es ist buchstäblich in dieser Datei, so was wirklich das Problem? 138 00:07:00,230 --> 00:07:04,660 >> Nun leider in C, gelangen Sie so unglaublich buchstäblich, wenn Sie 139 00:07:04,660 --> 00:07:08,640 möchten eine Funktion namens Print Namen vorhanden sind, müssen Sie entweder implementieren 140 00:07:08,640 --> 00:07:11,940 diese Funktion an der Spitze des Code, so dass es zugänglich zu senken ist 141 00:07:11,940 --> 00:07:15,070 Funktionen, aber ehrlich gesagt, wird das schlampig sehr schnell. 142 00:07:15,070 --> 00:07:18,160 Ich persönlich mag Putting wichtigsten ersten weil dann ist es ganz klar, was diese 143 00:07:18,160 --> 00:07:19,890 Programm macht auf den ersten Blick. 144 00:07:19,890 --> 00:07:23,290 Und plus, können Sie in seltsamen Ecke bekommen Fälle, in denen, wenn x nennen will 145 00:07:23,290 --> 00:07:27,530 y, aber y nennen könnte x, die Sie gerade physisch nicht tatsächlich legte eine 146 00:07:27,530 --> 00:07:28,540 übereinander. 147 00:07:28,540 --> 00:07:31,230 >> Aber es stellt sich heraus, in C, können wir lösen diese sehr einfach. 148 00:07:31,230 --> 00:07:34,010 Ich werde ein wenig Raum setzen hier, und ich werde einfach 149 00:07:34,010 --> 00:07:38,170 präventiv, wenn auch etwas redundant, geht auf die lehren 150 00:07:38,170 --> 00:07:42,320 Compiler, dass es eine Funktion genannt Name in Druckschrift, dauert es eine Zeichenfolge, 151 00:07:42,320 --> 00:07:46,330 und ich werde rufen es nennen Semikolon. 152 00:07:46,330 --> 00:07:50,220 >> Also das ist jetzt in der vierten Zeile, die wir habe nicht gesehen, ist eine Erklärung 153 00:07:50,220 --> 00:07:53,940 einer Funktion Name in Druckschrift, aber es ist nur ein Versprechen, dass diese Funktion 154 00:07:53,940 --> 00:07:56,620 schließlich festgelegt, ggf. werden umgesetzt werden. 155 00:07:56,620 --> 00:08:00,180 Das kann ich jetzt in Ruhe zu lassen, weil Jetzt ist die Definition, die 156 00:08:00,180 --> 00:08:04,090 Durchführung, Art der letzten Meile der Umsetzung dieser 157 00:08:04,090 --> 00:08:05,130 bestimmte Funktion. 158 00:08:05,130 --> 00:08:08,450 Also ehrlich gesagt ist es dumm ist, ist es ärgerlich, aber dies ist der Weg C ist, und es ist 159 00:08:08,450 --> 00:08:12,050 denn es dauert sehr wörtlich und, wie ein Computer offen sollte, 160 00:08:12,050 --> 00:08:16,020 nur, dass genau das, was Sie sagen, es zu zu tun, und so, dass die Bestellung wichtig ist. 161 00:08:16,020 --> 00:08:18,940 >> Also man im Hinterkopf behalten und wieder beginnen, bemerken die Wiederholung von Mustern. 162 00:08:18,940 --> 00:08:21,850 Chancen sind Sie, wenn Sie nicht über bereits, starten, um Nachrichten zu begegnen 163 00:08:21,850 --> 00:08:24,700 wie diese, die auf den ersten Blick völlig kryptisch, aber wenn Sie beginnen 164 00:08:24,700 --> 00:08:29,000 für diese Schlüsselwörter aussehen "Implizite Deklaration", der eine Erwähnung 165 00:08:29,000 --> 00:08:32,380 Funktion in diesem Fall - und ehrlich gesagt, Sie manchmal sogar noch ein wenig grün 166 00:08:32,380 --> 00:08:35,010 Karotte Symbol, das Ihnen sagt, wo das Problem ist wahrscheinlich - 167 00:08:35,010 --> 00:08:40,980 können Sie beginnen, Ihren Weg durch Arbeit noch ungesehen Fehlermeldungen. 168 00:08:40,980 --> 00:08:45,860 Irgendwelche Fragen zu dem Schreiben eigene Funktion in dieser Art und Weise? 169 00:08:45,860 --> 00:08:47,540 >> Lasst uns etwas tun, das ist eine wenig mehr überzeugend. 170 00:08:47,540 --> 00:08:51,760 Anstatt nur etwas tun, das hat ein Nebeneffekt der Druck, lass mich gehen 171 00:08:51,760 --> 00:08:55,340 vor und speichern Sie eine neue Datei, und wir werden nennen diese positive.c, obwohl es 172 00:08:55,340 --> 00:08:57,600 gehen, um ein wenig unterschiedlich sein im Vergleich zum letzten Mal. 173 00:08:57,600 --> 00:09:01,910 Und dieses Mal möchte ich wieder zu implementieren Das letzte Mal positive.C beispielsweise die 174 00:09:01,910 --> 00:09:04,430 wird den Benutzer zu zwingen geben mich eine positive ganze Zahl. 175 00:09:04,430 --> 00:09:07,280 Aber ich hatte zu benutzen bekommen int letzten Zeit. 176 00:09:07,280 --> 00:09:10,780 Wäre es nicht schön gewesen, wenn es eine Funktion aufgerufen bekommen positive int 177 00:09:10,780 --> 00:09:13,610 dass ich nur diese auslagern Stück Funktionalität? 178 00:09:13,610 --> 00:09:16,480 Also der Unterschied ist hier, wir werden Umsetzung bekommen positive int, aber im Gegensatz zu 179 00:09:16,480 --> 00:09:20,330 Name in Druckschrift, die einen Nebeneffekt hatte - es kam nicht wieder etwas zu mir wie 180 00:09:20,330 --> 00:09:21,710 eine Zahl oder ein String - 181 00:09:21,710 --> 00:09:25,510 bekommen positive int ist, natürlich, geht auf zurückkehren, hoffentlich eine positive int. 182 00:09:25,510 --> 00:09:26,170 >> Also lasst uns dies tun. 183 00:09:26,170 --> 00:09:30,840 Fügen cs50.h, auch Standard io.h 184 00:09:30,840 --> 00:09:33,520 Int main nichtig. 185 00:09:33,520 --> 00:09:42,160 Und jetzt hier, ich werde weitermachen und lassen Sie uns sagen, int, nennen es n, gleich 186 00:09:42,160 --> 00:09:44,270 bekommen positive int. 187 00:09:44,270 --> 00:09:49,080 Und wie bekommen int existiert bereits weil die Mitarbeiter schrieb er, ich werde 188 00:09:49,080 --> 00:09:53,950 für den Augenblick, die davon ausgehen, erhalten positive int existiert, und jetzt werde ich 189 00:09:53,950 --> 00:09:57,730 voran gehen und sagen, printf, danke für die% i / n ", n. 190 00:09:57,730 --> 00:10:02,940 191 00:10:02,940 --> 00:10:07,770 >> So jetzt, wenn ich dieses Programm zu kompilieren, was passieren wird in meinem Terminal 192 00:10:07,770 --> 00:10:09,075 Fenster am unteren Rand des Bildschirms? 193 00:10:09,075 --> 00:10:11,580 194 00:10:11,580 --> 00:10:13,900 Ich werde wahrscheinlich, dass gleichen Fehler wie zuvor. 195 00:10:13,900 --> 00:10:14,570 Lassen Sie uns also versuchen, diese. 196 00:10:14,570 --> 00:10:16,450 Als positiv. 197 00:10:16,450 --> 00:10:19,900 Und wieder implizite Deklaration Funktion, bekommen positive int. 198 00:10:19,900 --> 00:10:21,970 So können wir diese in Lösung ein paar Möglichkeiten. 199 00:10:21,970 --> 00:10:27,310 Ich werde es einfach zu halten und nur meine Erklärung hier und erhalten 200 00:10:27,310 --> 00:10:28,120 positive int. 201 00:10:28,120 --> 00:10:29,720 Ich brauche die sogenannte Signatur. 202 00:10:29,720 --> 00:10:32,410 Die Signatur bezieht sich nur auf die Ästhetik der 203 00:10:32,410 --> 00:10:34,090 erste Zeile des Programms. 204 00:10:34,090 --> 00:10:37,420 Also, was sollte sich positiv int zurück? 205 00:10:37,420 --> 00:10:37,970 >> So ein int. 206 00:10:37,970 --> 00:10:41,540 Ich meine, im Idealfall würde es zurückgeben so etwas wie positive int, aber das 207 00:10:41,540 --> 00:10:42,160 existiert nicht. 208 00:10:42,160 --> 00:10:45,280 Wir haben nicht gesehen, dass unter unseren Daten Typen, also müssen wir mit dem Deal 209 00:10:45,280 --> 00:10:47,170 Tatsache, dass wir nur sehr wenige haben Datentypen zu arbeiten. 210 00:10:47,170 --> 00:10:50,360 Aber wir können einen int zurück und nur darauf vertrauen, dass es positiv sein wird. 211 00:10:50,360 --> 00:10:52,690 Es wird aufgerufen werden bekommen positive int. 212 00:10:52,690 --> 00:10:55,122 >> Und jetzt, wie etwa ihre Argumente? 213 00:10:55,122 --> 00:10:56,440 Braucht es jede Eingabe? 214 00:10:56,440 --> 00:10:58,280 Braucht es jede Eingabe? 215 00:10:58,280 --> 00:11:00,900 So muss es nicht wissen, im Voraus nichts. 216 00:11:00,900 --> 00:11:03,220 Holen String nicht, bekommen int nicht. 217 00:11:03,220 --> 00:11:06,430 Printf tut - es muss einige haben Eingabe übergeben hinein - und Name in Druckschrift 218 00:11:06,430 --> 00:11:09,020 benötigt eine Eingabe, sondern bekommen positive int nicht. 219 00:11:09,020 --> 00:11:11,530 Also ich bin explizit gehen sagen dem Compiler nichtig. 220 00:11:11,530 --> 00:11:13,470 Void ist die Abwesenheit von irgendetwas anderes. 221 00:11:13,470 --> 00:11:17,990 So nichtig Mittel nichts drinnen vor sich geht dieser Klammern, Semikolon. 222 00:11:17,990 --> 00:11:20,840 >> Und nun an der Unterseite meiner Datei - und wieder, ich bin nur Art von anal 223 00:11:20,840 --> 00:11:23,640 hier setzen Haupt an der Spitze, die ist eine gute Übung, weil auf diese Weise, 224 00:11:23,640 --> 00:11:26,220 wenn Sie oder jemand anderes öffnet die Datei, die 225 00:11:26,220 --> 00:11:27,400 Funktionalität ist recht. 226 00:11:27,400 --> 00:11:29,660 Sie können in von Platz eins zu tauchen. 227 00:11:29,660 --> 00:11:34,190 So, jetzt werde ich diese zu duplizieren, bekommen positive int Leere, aber ich bin nicht 228 00:11:34,190 --> 00:11:35,430 werde ein Semikolon jetzt getroffen. 229 00:11:35,430 --> 00:11:38,280 Ich werde geschweiften Klammern öffnen, und jetzt muss ich ausleihen 230 00:11:38,280 --> 00:11:39,700 einige Ideen von Montag. 231 00:11:39,700 --> 00:11:44,450 >> So wie Sie sich erinnern, haben wir etwas mögen die folgenden, während 232 00:11:44,450 --> 00:11:45,830 etwas nicht stimmt. 233 00:11:45,830 --> 00:11:46,630 Und was habe ich getan? 234 00:11:46,630 --> 00:11:51,540 Ich habe so etwas wie geben mich eine positive ganze Zahl, 235 00:11:51,540 --> 00:11:52,430 wenig von einer Eingabeaufforderung. 236 00:11:52,430 --> 00:11:53,540 Ich könnte keine Worte, die ich will. 237 00:11:53,540 --> 00:11:54,960 Und dann habe ich was? 238 00:11:54,960 --> 00:11:59,530 Int n gleich bekommen int, keine Argumente zu. 239 00:11:59,530 --> 00:12:00,550 >> Und den Unterschied bemerken. 240 00:12:00,550 --> 00:12:04,680 Wenn Sie eine Funktion aufrufen, wenn Sie eine Funktion, die Sie nicht in Leere setzen. 241 00:12:04,680 --> 00:12:08,570 Sie müssen nur das tun, wenn die Vereinbarkeit eines Funktion, die Vermittlung der Compiler, was 242 00:12:08,570 --> 00:12:09,780 sie erwarten sollten. 243 00:12:09,780 --> 00:12:11,650 So brauchen Sie nicht zu setzen erlischt es sich. 244 00:12:11,650 --> 00:12:12,940 >> Und nun, was war mein Zustand? 245 00:12:12,940 --> 00:12:19,670 Nun, das ist n nicht gleich positiv, aber das ist nur Pseudo-Code. 246 00:12:19,670 --> 00:12:22,530 Also, wie drücke ich dies mehr sauber? 247 00:12:22,530 --> 00:12:24,090 So kleiner oder gleich Null ist. 248 00:12:24,090 --> 00:12:26,250 Also noch einmal, bemerken Sie tun können weniger als oder gleich. 249 00:12:26,250 --> 00:12:28,100 Auch wenn es zwei getrennte Symbole, können Sie es auf zu tun 250 00:12:28,100 --> 00:12:29,350 Ihre Tastatur als solche. 251 00:12:29,350 --> 00:12:33,950 >> Aber es gibt noch ein Fehler, dass Ich habe es vermasselt letztes Mal zu. 252 00:12:33,950 --> 00:12:36,950 Ich habe zu erklären - 253 00:12:36,950 --> 00:12:37,460 genau. 254 00:12:37,460 --> 00:12:39,640 Ich muss n außerhalb erklären der Schleife. 255 00:12:39,640 --> 00:12:44,180 Also muss ich setzen n bis hier, und ich weiß nicht wollen wieder erklären sie hier 256 00:12:44,180 --> 00:12:46,480 damit ich eine neue Variable. 257 00:12:46,480 --> 00:12:48,860 Ich will einfach nur, um einen Wert in hier zuordnen. 258 00:12:48,860 --> 00:12:54,320 >> Und jetzt bin ich noch nicht ganz fertig. 259 00:12:54,320 --> 00:12:57,290 Lassen Sie mich vor mir selbst bekommen und behaupten, ich bin fertig. 260 00:12:57,290 --> 00:13:01,220 Machen Sie positiv, und jetzt es gibt einen neuen Fehler. 261 00:13:01,220 --> 00:13:04,550 Steuerung erreicht Ende Nicht-void-Funktion. 262 00:13:04,550 --> 00:13:07,760 Also neue Fehlermeldung, aber wenn man Art von necken neben jedes der Worte, es 263 00:13:07,760 --> 00:13:09,620 wahrscheinlich deutet an, was falsch ist. 264 00:13:09,620 --> 00:13:11,240 >> Steuern. 265 00:13:11,240 --> 00:13:14,250 Kontrolle bedeutet nur, auf die Reihenfolge von Operationen in einem Programm. 266 00:13:14,250 --> 00:13:16,510 Der Computer ist in der Steuerung und etwas schief gelaufen ist. 267 00:13:16,510 --> 00:13:18,510 So ist das Ende des ein Nicht-void-Funktion. 268 00:13:18,510 --> 00:13:21,760 Welche Funktion ist es offenbar gemeint? 269 00:13:21,760 --> 00:13:24,790 Welche Funktion ist nicht nichtig? 270 00:13:24,790 --> 00:13:27,400 So bekommen positive int, und ein wenig verwirrend in diesem gut, 271 00:13:27,400 --> 00:13:29,010 es ist eine Art von Leere. 272 00:13:29,010 --> 00:13:33,070 Es hat eine Spezifikation für nichtig sein Argumente, aber ihr Ausgang ist mit gehen 273 00:13:33,070 --> 00:13:34,540 sein vom Typ n. 274 00:13:34,540 --> 00:13:37,260 Also das Wort auf der linken Seite ist die sogenannte Rückgabetyp. 275 00:13:37,260 --> 00:13:40,320 Das Wort auf der Innenseite ist hier die null oder mehr Argumente 276 00:13:40,320 --> 00:13:41,970 dass eine Funktion übernimmt. 277 00:13:41,970 --> 00:13:44,060 >> Also, was muss ich tun? 278 00:13:44,060 --> 00:13:47,650 An diesem Punkt in meinem Code, Zeile 21, wo die blinkende Eingabeaufforderung ist jetzt, ich 279 00:13:47,650 --> 00:13:51,430 haben eine positive int innen der Variable n. 280 00:13:51,430 --> 00:13:55,200 Wie gebe ich es zurück zur Hauptansicht? 281 00:13:55,200 --> 00:13:55,960 Buchstäblich. 282 00:13:55,960 --> 00:13:59,320 Zurück n Semikolon. 283 00:13:59,320 --> 00:14:04,090 >> So wie Colton ein Stück zurück Papier mit einer Antwort auf mich fallen 284 00:14:04,090 --> 00:14:07,020 das Stück Papier in das kleine schwarze Box auf dem Tisch, der in zu tun 285 00:14:07,020 --> 00:14:10,100 Code, Sie buchstäblich nur schreiben, zurück n, und es ist, als ob Colton waren 286 00:14:10,100 --> 00:14:12,140 reichte mir etwas Körperliches zurück. 287 00:14:12,140 --> 00:14:15,870 In diesem Fall, was passiert ist, erhalten positive int wird übergeben zurück 288 00:14:15,870 --> 00:14:19,220 was vermutlich eine positive integer zu wem? 289 00:14:19,220 --> 00:14:21,380 Woher kommt dieser Wert am Ende? 290 00:14:21,380 --> 00:14:29,080 Das endet in dieser Variable n, und dann haben wir mit der Linie neun gehen. 291 00:14:29,080 --> 00:14:31,920 >> Mit anderen Worten, in der Reihenfolge Operationen, startet dieses Programm 292 00:14:31,920 --> 00:14:34,430 Ausführung und der Compiler erkennt, oh, wollen Sie die Bibliothek? 293 00:14:34,430 --> 00:14:36,310 Lassen Sie mich gehen greifen, was drin ist, dass. 294 00:14:36,310 --> 00:14:37,750 Oh, Sie wollen den Standard IO-Bibliothek? 295 00:14:37,750 --> 00:14:39,660 Lassen Sie mich gehen greifen, was drin ist, dass. 296 00:14:39,660 --> 00:14:44,510 Was bedeutet, dass der Compiler selbst sagen wenn er trifft Linie vier? 297 00:14:44,510 --> 00:14:47,980 Oh, Sie haben versprochen, die Umsetzung Funktion aufgerufen bekommen positive, aber 298 00:14:47,980 --> 00:14:50,820 bekommen wir zurück zu, dass später etwas in diese Richtung. 299 00:14:50,820 --> 00:14:53,450 >> Int main Leere bedeutet nur, hier ist den Mut meines Programms. 300 00:14:53,450 --> 00:14:54,990 Linie sieben ist nur ein geschweiften Klammer. 301 00:14:54,990 --> 00:14:59,540 Zeile acht wird auf der linken Seite sagen, gib me 32 Bit für eine ganze Zahl, nennen es n. 302 00:14:59,540 --> 00:15:02,160 Auf der rechten Seite ist es sagen bekommen positive int. 303 00:15:02,160 --> 00:15:07,120 Lassen Sie uns jetzt Pause, die Geschichte, weil jetzt Ich weiß nicht in Bewegung bleiben mein Cursor nach unten. 304 00:15:07,120 --> 00:15:11,720 Mein Cursor geht jetzt hier unten, weil jetzt bekommen positive int führt. 305 00:15:11,720 --> 00:15:13,100 Int n deklariert ist. 306 00:15:13,100 --> 00:15:14,040 Gehen Sie wie folgt. 307 00:15:14,040 --> 00:15:16,090 Printf gibt mir eine positive ganze Zahl ist. 308 00:15:16,090 --> 00:15:19,740 >> Holen Sie sich einen int vom Benutzer, speichern Sie es in n, und vielleicht tun dies immer und immer wieder. 309 00:15:19,740 --> 00:15:23,010 Diese Schleife bedeutet, dass dieser Code könnte führen nach oben und unten wieder so 310 00:15:23,010 --> 00:15:25,810 wieder, aber wenn der Benutzer schließlich kooperiert und gibt mir eine positive 311 00:15:25,810 --> 00:15:31,750 int, schlug ich die Leitung 21, an welchem ​​Punkt der Zahl zurück, übergeben und die man 312 00:15:31,750 --> 00:15:34,280 soll ich jetzt hervorheben? 313 00:15:34,280 --> 00:15:35,070 Nine. 314 00:15:35,070 --> 00:15:39,010 Kontrolle, so zu sprechen, gibt zu neun auszukleiden. 315 00:15:39,010 --> 00:15:40,650 Das ist die Linie, die jetzt das Sagen hat. 316 00:15:40,650 --> 00:15:43,250 >> Also das ist, was passiert ist alles diesmal unter der Haube, sondern 317 00:15:43,250 --> 00:15:46,480 wenn wir Funktionen wie printf verwendet oder sogar String, dass jemand anderes 318 00:15:46,480 --> 00:15:50,600 schrieb für Sie wurde Steuerelement übergeben aus, um jemand anderes Codezeile 319 00:15:50,600 --> 00:15:51,290 durch zeilenweise. 320 00:15:51,290 --> 00:15:53,770 Es ist nur, wir könnten es nicht sehen, und wir konnte nicht wirklich zeigen sie in dieser 321 00:15:53,770 --> 00:15:57,620 Programm, weil es in einem anderen Datei auf der Festplatte 322 00:15:57,620 --> 00:16:00,000 Unbemerkt von uns. 323 00:16:00,000 --> 00:16:02,100 Lassen Sie uns also tatsächlich kompilieren und führen Sie diese jetzt. 324 00:16:02,100 --> 00:16:03,890 >> Als positiv. 325 00:16:03,890 --> 00:16:05,260 Kompilieren, das ist Fortschritt. 326 00:16:05,260 --> 00:16:06,650 . / Positiv. 327 00:16:06,650 --> 00:16:08,020 Gib mir eine positive ganze Zahl ist. 328 00:16:08,020 --> 00:16:08,800 Lasst uns schwierig sein. 329 00:16:08,800 --> 00:16:10,430 Negative 1. 330 00:16:10,430 --> 00:16:11,360 Null. 331 00:16:11,360 --> 00:16:13,370 Lass es uns 50. 332 00:16:13,370 --> 00:16:18,100 Vielen Dank für die 50 und so Kontrolle hat jetzt zurückgegeben. 333 00:16:18,100 --> 00:16:21,750 Haben Sie Fragen, dann auf das? 334 00:16:21,750 --> 00:16:23,180 Ja? 335 00:16:23,180 --> 00:16:25,630 >> [Unverständlich]. 336 00:16:25,630 --> 00:16:26,130 >> Sagen Sie es erneut. 337 00:16:26,130 --> 00:16:27,860 Oh, gute Frage. 338 00:16:27,860 --> 00:16:31,100 So könnten Sie hier eine Parallele feststellen, dass Ich bin ein bisschen Schneiden einer Ecke auf. 339 00:16:31,100 --> 00:16:35,420 In Zeile 12 und sprach: Ich bin, bekommen positive int liefert einen int, aber von demselben 340 00:16:35,420 --> 00:16:39,660 Logik, es liegt nun nahe, dass in Reihensechszylinder, ich sage, dass Haupt-Renditen 341 00:16:39,660 --> 00:16:44,040 ein int, aber was haben wir noch nie hatte in einem unserer Programme? 342 00:16:44,040 --> 00:16:46,470 Wir hatten noch nie die Rede von Dieses Schlüsselwort Rückkehr. 343 00:16:46,470 --> 00:16:49,970 >> So stellt sich heraus, dass in C, mindestens die Version davon, dass wir mit 344 00:16:49,970 --> 00:16:55,750 machte im Jahr 1999, technisch gesehen, ist dies geschieht automatisch für Sie. 345 00:16:55,750 --> 00:16:59,300 Immer, wenn Sie ein Programm zu implementieren, und Sie implementieren eine Funktion namens main, 346 00:16:59,300 --> 00:17:04,230 Diese Funktion wird Null zurück Verzug, wenn Sie nicht etwas anderes sagen, 347 00:17:04,230 --> 00:17:05,849 und Null ist nur eine Konvention. 348 00:17:05,849 --> 00:17:09,430 Die Welt ist Null dabei anzeigt, dass alles gut ist, 349 00:17:09,430 --> 00:17:13,040 effektiv verlässt uns mit vier Milliarden möglichen Dinge, die gehen könnte 350 00:17:13,040 --> 00:17:17,530 falsch, so dass, wenn wir eine Rückkehr, dass vielleicht einen Code bedeuten, dass bedeutet dies, 351 00:17:17,530 --> 00:17:18,310 Sache ging schief. 352 00:17:18,310 --> 00:17:20,589 Wir konnten zwei zurück, was bedeutet, diese andere Sache ging schief. 353 00:17:20,589 --> 00:17:23,440 Wir konnten vier Milliarden zurück, die bedeutet dies andere Sache ging schief. 354 00:17:23,440 --> 00:17:27,170 >> Und wenn Sie jetzt denken über Ihre eigenen PC oder Mac, können Sie sich erinnern, dass 355 00:17:27,170 --> 00:17:29,610 manchmal bekommt man kryptische Fehlermeldungen von Software, die Sie 356 00:17:29,610 --> 00:17:32,650 Verwendung, und manchmal ist ein menschliches freundliche Beschreibung, aber es gibt 357 00:17:32,650 --> 00:17:35,265 oft ein Code oder eine Zahl auf dem Bildschirm? 358 00:17:35,265 --> 00:17:37,800 Wenn dies nicht in den Sinn kommen, nur ein Auge dafür. 359 00:17:37,800 --> 00:17:40,790 Das ist in der Regel, was diese Codes beziehen. 360 00:17:40,790 --> 00:17:44,200 Sie sind in Microsoft Word enthalten und anderen Programmen, so dass, wenn Sie eine Datei 361 00:17:44,200 --> 00:17:48,850 Bug-Report mit dem Unternehmen, können Sie ihnen sagen, oh, ich habe Fehler Nummer 45. 362 00:17:48,850 --> 00:17:51,750 Und einige Programmierer bei der Firma zurück können, dass nachschlagen in seinem oder ihrem 363 00:17:51,750 --> 00:17:54,940 Code und sagen, oh, das ist, weil ich gemacht dieser Fehler und das ist, warum der Benutzer 364 00:17:54,940 --> 00:17:56,240 Diese Nachricht bekam. 365 00:17:56,240 --> 00:17:59,490 >> Aber ehrlich gesagt, es ist nur ein wenig ablenken und ein wenig langweilig, 366 00:17:59,490 --> 00:18:02,130 Schluss, dass mindestens auf der ersten paar Programme, also haben wir 367 00:18:02,130 --> 00:18:02,970 wurde das Weglassen. 368 00:18:02,970 --> 00:18:07,450 Aber die ganze Zeit jede Ihrer Funktionen main hat heimlich hatte diese 369 00:18:07,450 --> 00:18:11,600 Zeile automatisch hinzugefügt für Sie durch die Compiler, nur durch Konvention 370 00:18:11,600 --> 00:18:13,172 sparen Sie Zeit. 371 00:18:13,172 --> 00:18:14,620 >> [Unverständlich]. 372 00:18:14,620 --> 00:18:16,250 >> Sie brauchen nicht, um es in den wichtigsten gehören. 373 00:18:16,250 --> 00:18:16,700 Das ist in Ordnung. 374 00:18:16,700 --> 00:18:20,260 Sie brauchen, um es zu schließen, wenn Sie waren Implementierung einer Funktion wie diese. 375 00:18:20,260 --> 00:18:22,850 Andernfalls wird die Funktion flache Sie würde nicht funktionieren. 376 00:18:22,850 --> 00:18:24,480 Aber in Haupt-, ist es nicht notwendig. 377 00:18:24,480 --> 00:18:28,450 In ein oder zwei Wochen, werden wir anfangen, in diese Gewohnheit, sobald wir anfangen wollen, 378 00:18:28,450 --> 00:18:29,690 bedeutet Fehler. 379 00:18:29,690 --> 00:18:32,550 Wirklich gute Frage. 380 00:18:32,550 --> 00:18:36,880 >> So schnell verbal Pause zu erwähnen, dass an diesem Freitag, werden wir nicht zu Mittag essen 381 00:18:36,880 --> 00:18:39,980 per se, aber wir werden beim Abendessen mit einige der Studenten und Mitarbeiter. 382 00:18:39,980 --> 00:18:42,940 Wenn Sie möchten, sich uns anzuschließen, fühlen du auf cs50.net/rsvp gehen. 383 00:18:42,940 --> 00:18:45,030 18.00 an diesem Freitag. 384 00:18:45,030 --> 00:18:47,990 Der Raum ist, wie immer, begrenzt, aber wir auch weiterhin tun, diese auf einer fast 385 00:18:47,990 --> 00:18:51,420 wöchentlich, wenn der Raum läuft diese Woche. 386 00:18:51,420 --> 00:18:56,160 >> So der Cliffhanger, dass wir aufgehört haben auf Montag war, dass Strings kann tatsächlich 387 00:18:56,160 --> 00:19:00,520 indiziert in werden, was nur bedeutet, dass Sie kann mit dem ersten Zeichen zu bekommen, die 388 00:19:00,520 --> 00:19:03,770 zweite Zeichen, das dritte Zeichen und so weiter, da kann man 389 00:19:03,770 --> 00:19:07,860 effektiv von einem String zu denken, wie hallo, als in diesem Fall fünf 390 00:19:07,860 --> 00:19:09,670 Buchstaben innerhalb der Boxen. 391 00:19:09,670 --> 00:19:13,370 Und Sie können an jeder von denen bekommen Boxen mit dem, was wir taten Syntax 392 00:19:13,370 --> 00:19:15,230 Einführung am Montag? 393 00:19:15,230 --> 00:19:16,760 Diese eckigen Klammern auf Ihrer Tastatur. 394 00:19:16,760 --> 00:19:18,980 Das meinte nur gehen, um Standort Null. 395 00:19:18,980 --> 00:19:22,840 >> Wir beginnen bei Null zu zählen, so Klammer Null bedeutet h, eine Halterung 396 00:19:22,840 --> 00:19:25,170 bedeutet e, und so weiter. 397 00:19:25,170 --> 00:19:28,490 Und so die ganze Zeit, als wir waren mit Streichern und der Eingabe in "hallo" 398 00:19:28,490 --> 00:19:31,250 und "Welt" und andere Dinge auf der Bildschirm, wird es gespeichert wurde 399 00:19:31,250 --> 00:19:32,820 in Boxen wie diese. 400 00:19:32,820 --> 00:19:33,370 Und nehmen Sie eine Vermutung. 401 00:19:33,370 --> 00:19:37,470 Was macht jede Box stellen physisch Inneren des Computers? 402 00:19:37,470 --> 00:19:38,250 >> [Unverständlich]. 403 00:19:38,250 --> 00:19:39,150 >> Es tut uns leid? 404 00:19:39,150 --> 00:19:39,580 >> Charaktere. 405 00:19:39,580 --> 00:19:44,760 >> So ein Charakter, sicherlich im Fall von Strings und ein Charakter ist gerade 406 00:19:44,760 --> 00:19:46,800 acht Bit oder einem Byte. 407 00:19:46,800 --> 00:19:49,550 So sind Sie wahrscheinlich mindestens vage mit der Tatsache vertraut, dass Ihr 408 00:19:49,550 --> 00:19:50,500 Computer-Speicher. 409 00:19:50,500 --> 00:19:52,110 Es verfügt über zwei Arten von Speicher mindestens. 410 00:19:52,110 --> 00:19:54,810 Eine davon ist die Festplatte, wo Sie sparen stopfen dauerhaft, und das ist 411 00:19:54,810 --> 00:19:57,400 typischerweise groß, so können Sie Filme Musik und so weiter. 412 00:19:57,400 --> 00:20:04,010 >> Dann haben Sie eine andere Art von Speicher genannt RAM, R-A-M, Random Access 413 00:20:04,010 --> 00:20:07,510 Speicher, und dies ist die Art von Speicher die verwendet wird, wenn sich der Computer 414 00:20:07,510 --> 00:20:11,520 läuft, aber wenn Sie die Stromversorgung oder verlieren Batterie stirbt, alles, was gespeichert ist 415 00:20:11,520 --> 00:20:15,300 in RAM verschwindet, wenn Sie die Macht zu verlieren insgesamt, weil es nicht 416 00:20:15,300 --> 00:20:16,060 persistent. 417 00:20:16,060 --> 00:20:19,120 Sie haben in der Regel, in diesen Tagen, ein gig davon, zwei Konzerte, vielleicht auch mehr. 418 00:20:19,120 --> 00:20:23,490 Und der Kopf des RAM ist, dass es viel ist viel, viel schneller als Festplatten 419 00:20:23,490 --> 00:20:27,390 oder auch Solid State Drives in diesen Tagen, aber es ist in der Regel teurer, so 420 00:20:27,390 --> 00:20:28,480 Sie haben weniger davon. 421 00:20:28,480 --> 00:20:32,400 >> So heutigen Gespräch wirklich bezieht to RAM, diese Art von Speicher, 422 00:20:32,400 --> 00:20:35,270 existiert nur, solange es Macht wird in den Computer eingespeist. 423 00:20:35,270 --> 00:20:40,530 Also, wenn Sie in H-E-L-L-O-Typ, auf Enter die Tastatur wird die Uhr in einem gehen 424 00:20:40,530 --> 00:20:44,550 Byte RAM, wird die E in Going ein weiteres Byte RAM, wie 425 00:20:44,550 --> 00:20:45,800 der Rest des Wortes. 426 00:20:45,800 --> 00:20:49,010 So erinnern, was wir in der Lage waren zum letzten Mal zu tun war. 427 00:20:49,010 --> 00:20:53,940 Lassen Sie mich gehen Sie vor und öffnen Sie die Datei dass wir aufgerufen string.c und erinnern 428 00:20:53,940 --> 00:20:56,860 dass es sah ein wenig etwas wie dieses. 429 00:20:56,860 --> 00:20:59,860 Lassen Sie mich tatsächlich wieder rollen und ändern es genau, wie es aussah, 430 00:20:59,860 --> 00:21:02,654 String-Länge von s. 431 00:21:02,654 --> 00:21:04,560 >> Also bei dem Programm finden Sie hier. 432 00:21:04,560 --> 00:21:08,530 Wir sind der CS50-Bibliothek so die wir verwenden können erhalten Zeichenfolge. 433 00:21:08,530 --> 00:21:11,400 Wir gehören Standard io.h so können wir printf verwenden. 434 00:21:11,400 --> 00:21:13,580 Warum haben wir gehören string.h? 435 00:21:13,580 --> 00:21:16,980 Dies war am Montag neu. 436 00:21:16,980 --> 00:21:18,230 Also wollten wir String-Länge. 437 00:21:18,230 --> 00:21:19,090 Str. Kiel. 438 00:21:19,090 --> 00:21:21,470 Menschen vor Jahren beschlossen, lasst uns einfach prägnant sein. 439 00:21:21,470 --> 00:21:24,290 Statt nannte es "Mensur" nennen wir es "str Kiel" und lassen Sie die 440 00:21:24,290 --> 00:21:28,540 Figur, die Welt aus, und damit ist was wir bekommen Zugang zu mit string.h. 441 00:21:28,540 --> 00:21:29,390 >> Dies ist vertraut. 442 00:21:29,390 --> 00:21:30,320 Dies ist vertraut. 443 00:21:30,320 --> 00:21:31,450 Dies ist vertraut. 444 00:21:31,450 --> 00:21:32,370 Dies ist ein wenig neu. 445 00:21:32,370 --> 00:21:35,420 In Zeile 22 - und wir kommen wieder dazu, aber jetzt wissen - 446 00:21:35,420 --> 00:21:37,880 und Sie würden nur wissen das aus mit Lesen Sie die Dokumentation oder wenn 447 00:21:37,880 --> 00:21:39,010 Sie wusste bereits C - 448 00:21:39,010 --> 00:21:41,510 String bekommen manchmal kann vermasseln. 449 00:21:41,510 --> 00:21:45,130 Wenn der Benutzer wirklich kontradiktorischen oder unkooperativ und er oder sie gerade 450 00:21:45,130 --> 00:21:49,450 nicht geben nichts auf der Tastatur oder Typen so viel auf der Tastatur, 451 00:21:49,450 --> 00:21:53,760 es überwältigt den Arbeitsspeicher des Computers, in der Theorie, den String könnte zurückkehren 452 00:21:53,760 --> 00:21:56,270 etwas anderes als ein Zeichenfolge. 453 00:21:56,270 --> 00:22:01,930 Es könnte zurückkehren einen besonderen Wert genannt NULL in Großbuchstaben, N-U-L-L, und das ist 454 00:22:01,930 --> 00:22:03,390 nur eine sogenannte Sentinel Wert. 455 00:22:03,390 --> 00:22:08,010 Es ist ein spezieller Wert, bedeutet etwas Schlimmes passiert in diesem Fall. 456 00:22:08,010 --> 00:22:10,520 Es ist das Fehlen einer Zeichenkette. 457 00:22:10,520 --> 00:22:16,190 >> Also null Ich bin für die Überprüfung einfach so, dass, lange Rede, kurzer Sinn, str Kiel und 458 00:22:16,190 --> 00:22:20,230 andere Funktionen, die mit C kommen, wenn sie erwarten einen String, aber sie geben sie 459 00:22:20,230 --> 00:22:23,630 das Fehlen einer Zeichenfolge, wenn Sie passieren sie NULL, den Computer oder das Programm 460 00:22:23,630 --> 00:22:25,000 wird nur geradezu abstürzen. 461 00:22:25,000 --> 00:22:25,610 Es hängen. 462 00:22:25,610 --> 00:22:27,250 Es wird werfen einige Fehlermeldung. 463 00:22:27,250 --> 00:22:28,690 Schlimme Dinge passieren wird. 464 00:22:28,690 --> 00:22:31,130 Also auch wenn dies immer noch nicht eindeutig definiert - 465 00:22:31,130 --> 00:22:33,730 Dies wird mehr Sinn in einer Woche zu machen oder zwei - in Zeile 22, dies ist nur ein 466 00:22:33,730 --> 00:22:38,790 Beispiel Selbst defensive Fehlerprüfung für den Fall einer Zeit von 467 00:22:38,790 --> 00:22:42,040 eine Million etwas schief geht, bei zumindest mein Programm wird nicht abstürzen. 468 00:22:42,040 --> 00:22:45,960 >> Also, wenn s nicht tut gleich etwas Schlimmes, Ich habe diese for-Schleife, und das war 469 00:22:45,960 --> 00:22:47,710 wo wir hatten, dass andere neues Stück Syntax. 470 00:22:47,710 --> 00:22:51,580 Ich habe eine for-Schleife durchlaufen von Null bis zu einer Länge von S. 471 00:22:51,580 --> 00:22:56,140 Und dann ist hier, ich war ein Ausdrucken s Halterung i, aber warum habe ich% c alle 472 00:22:56,140 --> 00:23:00,770 plötzlich anstelle von% s sogar wenn s ist ein String? 473 00:23:00,770 --> 00:23:02,110 Es ist ein Zeichen, nicht wahr? 474 00:23:02,110 --> 00:23:06,560 S ist ein String, aber s Halterung etwas, s Halterung, wobei i gleich Null 475 00:23:06,560 --> 00:23:10,380 oder ein oder zwei, das ist eine individuelle Zeichen in der Zeichenfolge, und so für 476 00:23:10,380 --> 00:23:14,970 dass printf muss informiert werden, dass es ist in der Tat ein Zeichen zu erwarten. 477 00:23:14,970 --> 00:23:18,096 >> Und dann erinnern, tat, was diese Programm tatsächlich tun? 478 00:23:18,096 --> 00:23:19,848 >> Gedruckt es in den Spalten. 479 00:23:19,848 --> 00:23:21,120 >> Ja, genau. 480 00:23:21,120 --> 00:23:24,990 Es ist einfach gedruckt das Wort, das ich geben in eine Säule, ein Zeichen pro Zeile. 481 00:23:24,990 --> 00:23:26,190 Also mal sehen, dieses wieder. 482 00:23:26,190 --> 00:23:27,810 So machen Zeichenfolge. 483 00:23:27,810 --> 00:23:30,200 Zusammengestellt OK. . / String. 484 00:23:30,200 --> 00:23:35,560 Lassen Sie mich in H-E-L-L-O eingeben, Enter und Tat ich es, eine pro Zeile. 485 00:23:35,560 --> 00:23:37,280 >> Also lassen Sie mich tun eine Optimierung hier. 486 00:23:37,280 --> 00:23:40,240 Wenn Sie darüber nachdenken, vor allem, wenn Sie programmiert haben vor, es gibt 487 00:23:40,240 --> 00:23:43,340 wohl eine Ineffizienz in Zeile 24. 488 00:23:43,340 --> 00:23:46,160 Mit anderen Worten, es ist nicht unbedingt das beste Design. 489 00:23:46,160 --> 00:23:50,200 Geradlinige, zumindest wenn man daran erinnern, was str Kiel ist, aber es ist 490 00:23:50,200 --> 00:23:52,640 etwas dumm potentiell. 491 00:23:52,640 --> 00:23:54,863 Was könnte das sein? 492 00:23:54,863 --> 00:23:56,280 >> [Unverständlich]. 493 00:23:56,280 --> 00:23:56,800 >> Genau. 494 00:23:56,800 --> 00:24:00,340 Es ist für die Dauer der Überprüfung s jedes einzelne Mal, obwohl 495 00:24:00,340 --> 00:24:02,980 H-E-L-L-O wird immer zu fünf Zeichen lang sein. 496 00:24:02,980 --> 00:24:05,490 Jedes Mal, wenn durch diese Schleife, die fünf ändert sich nicht. 497 00:24:05,490 --> 00:24:08,750 Ich könnte Inkrementieren i, aber was die Länge n auf jeden 498 00:24:08,750 --> 00:24:09,690 Iteration dieser Schleife? 499 00:24:09,690 --> 00:24:15,810 Es ist fünf vor fünf, es ist fünf, und Trotzdem bin ich noch fragen diese 500 00:24:15,810 --> 00:24:18,320 Frage wieder und wieder und wieder. 501 00:24:18,320 --> 00:24:20,750 Nun ehrlich gesagt, ist der Computer so verdammt schnell, niemand wird eine Bekanntmachung 502 00:24:20,750 --> 00:24:23,780 Unterschied in diesem Fall, aber diese Art der schlechten Design-Entscheidungen können 503 00:24:23,780 --> 00:24:28,330 beginnen zu addieren, wenn der Compiler selbst nicht versuchen, dies für Sie zu beheben, welche 504 00:24:28,330 --> 00:24:30,630 es gewohnt nicht an zumindest im Gerät. 505 00:24:30,630 --> 00:24:31,540 >> Also werde ich, dies zu tun. 506 00:24:31,540 --> 00:24:34,580 Ich werde ein Komma nach hinzufügen meine erste Variable, i. 507 00:24:34,580 --> 00:24:37,310 Ich werde mir selbst ein anderes Variable, nannte es n, nur durch 508 00:24:37,310 --> 00:24:41,330 Konvention für Zahlen, und dann bin ich werde zuweisen n Der Wert von String 509 00:24:41,330 --> 00:24:42,530 Länge s. 510 00:24:42,530 --> 00:24:46,060 Und dann werde ich ändern mein Zustand, was sein? 511 00:24:46,060 --> 00:24:51,960 Ich werde meinen Zustand ändern um während i kleiner als n ist. 512 00:24:51,960 --> 00:24:55,700 >> So, jetzt, wie oft bin ich Überprüfung der Länge von s? 513 00:24:55,700 --> 00:25:00,110 Einmal, aber es ist in Ordnung, ich gegen überprüfen n immer wieder, weil jetzt die 514 00:25:00,110 --> 00:25:03,170 Werte sind nicht wirklich zu ändern. 515 00:25:03,170 --> 00:25:06,020 Jetzt für jetzt, weiß nur, dass, wenn Sie eine Funktion aufrufen, es ist ein bisschen 516 00:25:06,020 --> 00:25:09,930 Overhead, nicht genug, um Sie zu entmutigen wirklich jemals mit Funktionen, sondern 517 00:25:09,930 --> 00:25:12,750 sicherlich, wenn es eine Codezeile so - und die Linien erhalten 518 00:25:12,750 --> 00:25:15,490 mehr interessante dauerte nicht lange - wo gibt es eine Möglichkeit zu denken, wenn ich 519 00:25:15,490 --> 00:25:18,320 Geben Sie diesen Code ein, wie viele mal wird es ausführen? 520 00:25:18,320 --> 00:25:20,950 Sie beginnen, im Laufe der Zeit die sehen Leistung Ihrer Programme können 521 00:25:20,950 --> 00:25:21,660 in der Tat ändern. 522 00:25:21,660 --> 00:25:24,110 >> In der Tat, setzt eines der Problem, das wir haben getan in den vergangenen Jahren beinhaltet 523 00:25:24,110 --> 00:25:27,600 Umsetzung, wie Sie sich vielleicht erinnern aus Woche Null, eine Rechtschreibprüfung, sondern ein 524 00:25:27,600 --> 00:25:31,380 Rechtschreibprüfung, die zur Unterstützung ist ein Wörterbuch von 150.000 zzgl. 525 00:25:31,380 --> 00:25:32,860 Worte, die wir Ihnen Jungs. 526 00:25:32,860 --> 00:25:37,100 Sie müssten, Code zu schreiben, dass die Ladung diese Worte in den Arbeitsspeicher, so in 527 00:25:37,100 --> 00:25:40,700 Boxen wie wir sahen, auf dem Bildschirm einen Moment her, und dann so schnell wie möglich 528 00:25:40,700 --> 00:25:43,740 können, müssen Sie in der Lage, eine Antwort Frage nach der Form wird dieses Wort 529 00:25:43,740 --> 00:25:44,280 falsch geschrieben? 530 00:25:44,280 --> 00:25:45,420 Ist das Wort falsch geschrieben? 531 00:25:45,420 --> 00:25:46,770 Ist das Wort falsch geschrieben? 532 00:25:46,770 --> 00:25:49,525 >> Und in so etwas wie das, was wir haben getan in den vergangenen Jahren wird es in sich, 533 00:25:49,525 --> 00:25:53,500 wenn auch auf einem Opt-in freiwilliger Basis ein Konkurrenz der Arten, wobei die 534 00:25:53,500 --> 00:25:59,470 Studenten, die weniger RAM verwenden und weniger Zeit, weniger CPU-Zyklen, bis Ende 535 00:25:59,470 --> 00:26:02,640 sprudelt bis an die Spitze eines kleinen Leaderboard oder Ranking, dass wir anziehen 536 00:26:02,640 --> 00:26:04,770 Homepage des Kurses wie wir getan in den vergangenen Jahren. 537 00:26:04,770 --> 00:26:08,100 Also noch einmal, völlig optional, aber diese spricht zu den Gestaltungsmöglichkeiten 538 00:26:08,100 --> 00:26:11,250 die vor uns sind, wenn wir beginnen Gebäude oben auf einige dieser 539 00:26:11,250 --> 00:26:14,010 Grundbausteine. 540 00:26:14,010 --> 00:26:16,780 >> Also lassen Sie mich zurück zu diesem Diagramm für nur einen Augenblick und zeigen ein wenig 541 00:26:16,780 --> 00:26:17,610 etwas mehr. 542 00:26:17,610 --> 00:26:21,400 Dies ist in der Tat ein String ist, und wir haben gemacht Vorteil von wenigen Bibliotheken, 543 00:26:21,400 --> 00:26:25,150 Standard io.h was sich - 544 00:26:25,150 --> 00:26:26,110 >> Printf. 545 00:26:26,110 --> 00:26:27,860 >> Printf, unter anderem. 546 00:26:27,860 --> 00:26:31,540 cs50.h, die int bekommen hat und den String und so weiter, string.h, die 547 00:26:31,540 --> 00:26:32,570 hatte str Kiel. 548 00:26:32,570 --> 00:26:34,800 Aber es stellt sich heraus, es gibt noch eine andere. 549 00:26:34,800 --> 00:26:38,540 Ehrlich gesagt, es gibt viele, viele header Dateien, die Funktionen erklären 550 00:26:38,540 --> 00:26:43,320 für Bibliotheken, aber dies ist ctype.h tatsächlich zu etwas sein 551 00:26:43,320 --> 00:26:46,900 vorteilhaft, weil ich gehe voran gehen und Umsetzung einer 552 00:26:46,900 --> 00:26:48,120 anderen Programm finden Sie hier. 553 00:26:48,120 --> 00:26:52,420 >> Lassen Sie mich gehen Sie vor und eröffnen etwas Ich schrieb im Voraus genannt 554 00:26:52,420 --> 00:26:55,750 capitalize.c, und lassen Sie uns ein Blick darauf, wie das funktioniert. 555 00:26:55,750 --> 00:27:00,340 Beachten Sie, dass ich mit in dieser Version davon, drei bekannten Dateien. 556 00:27:00,340 --> 00:27:04,110 Beachten Sie, dass in Zeile 18, ich bin immer eine Textzeile. 557 00:27:04,110 --> 00:27:07,660 Hinweis in Zeile 21, ich behauptete, dass Mit dem folgenden Code wird gehen 558 00:27:07,660 --> 00:27:12,170 kapitalisieren s, was der Benutzer eingegeben in, und wie mache ich das? 559 00:27:12,170 --> 00:27:13,300 Nun, ich nehme - 560 00:27:13,300 --> 00:27:14,750 Lektion gelernt vom letzten Mal - 561 00:27:14,750 --> 00:27:18,370 Ich erkläre i und n und Iteration Das Zeichen in der Zeichenfolge. 562 00:27:18,370 --> 00:27:22,720 Und was ist dann dieser Block von Code in Zeile 24 bis 27 563 00:27:22,720 --> 00:27:24,550 tut in juristischer Hinsicht? 564 00:27:24,550 --> 00:27:27,766 565 00:27:27,766 --> 00:27:29,730 >> Kleinbuchstaben zurück. 566 00:27:29,730 --> 00:27:30,430 >> Genau. 567 00:27:30,430 --> 00:27:35,920 Wenn s Halterung i - so, wenn das i-te Charakter s, ist die eine spezifische 568 00:27:35,920 --> 00:27:40,220 char in der Zeichenfolge, ist größer als oder gleich Kleinbuchstaben a und - 569 00:27:40,220 --> 00:27:42,670 erinnern, dass eine doppelte kaufmännisches bedeuten und - 570 00:27:42,670 --> 00:27:46,810 und das gleiche Zeichen, s Halterung i ist weniger als oder gleich z Kleinbuchstaben 571 00:27:46,810 --> 00:27:50,600 das heißt, es ist ein a oder ein b oder ein c oder Punkt, Punkt, Punkt, oder ein z, was bedeutet, 572 00:27:50,600 --> 00:27:51,340 es ist Kleinbuchstaben. 573 00:27:51,340 --> 00:27:52,900 Was will ich in diesem Fall tun? 574 00:27:52,900 --> 00:27:55,010 Nun, ich kann diese etwas tun kryptisch, aber 575 00:27:55,010 --> 00:27:56,160 lasst uns necken diese auseinander. 576 00:27:56,160 --> 00:28:00,210 >> Ich werde printf nennen, druckt% c denn ich will diese nachdrucken 577 00:28:00,210 --> 00:28:01,580 Zeichen auf dem Bildschirm. 578 00:28:01,580 --> 00:28:06,650 Ich werde dann s Halterung i, die nehmen i-te Zeichen in s, und warum dann 579 00:28:06,650 --> 00:28:12,330 mache ich diesen kleinen Trick hier, Kleinbuchstaben ein Minus Hauptstadt A? 580 00:28:12,330 --> 00:28:16,352 Was soll das gehen, um me, allgemein gesprochen? 581 00:28:16,352 --> 00:28:18,600 >> [Unverständlich]. 582 00:28:18,600 --> 00:28:19,390 >> Genau. 583 00:28:19,390 --> 00:28:20,860 Ich glaube nicht wirklich daran erinnern - 584 00:28:20,860 --> 00:28:24,390 es war 65 für das Kapital A. Ich weiß nicht wirklich daran erinnern, was Kleinbuchstaben a, 585 00:28:24,390 --> 00:28:25,540 aber egal. 586 00:28:25,540 --> 00:28:26,580 Der Computer kennt. 587 00:28:26,580 --> 00:28:30,380 So, indem er sagte, Kleinbuchstaben ein Minus Ein Kapital, es ist seltsam zu sein 588 00:28:30,380 --> 00:28:33,530 Subtrahieren eines char von einem anderen, aber was sind Zeichen unter der Haube? 589 00:28:33,530 --> 00:28:34,520 Sie sind nur Zahlen. 590 00:28:34,520 --> 00:28:36,980 Also was auch immer diese Zahlen sind, lassen Sie den Computer daran erinnern 591 00:28:36,980 --> 00:28:38,240 anstatt mich der Mensch. 592 00:28:38,240 --> 00:28:41,710 >> So Kleinbuchstaben ein Minus Kapital A gehen, um mir einen Unterschied. 593 00:28:41,710 --> 00:28:45,370 Es passiert zu 32 sein, und das wäre der Fall für Kleinbuchstaben b und Kapital B 594 00:28:45,370 --> 00:28:45,930 und so weiter. 595 00:28:45,930 --> 00:28:47,710 Er bleibt konsequent, zum Glück. 596 00:28:47,710 --> 00:28:51,930 Also bin ich im Wesentlichen sagen, nehmen Sie die Kleinbuchstaben, subtrahieren, dass 597 00:28:51,930 --> 00:28:55,340 Standard-Unterschied, und dass Änderungen wirksam s i Halterung aus 598 00:28:55,340 --> 00:28:59,400 Kleinbuchstaben, natürlich, Großbuchstaben, ohne meine wirklich mit zu denken 599 00:28:59,400 --> 00:29:03,040 über oder denken Sie daran, was waren die Zahlen, die wir darüber gesprochen, wenn die acht 600 00:29:03,040 --> 00:29:04,800 Freiwillige kamen auf die Bühne? 601 00:29:04,800 --> 00:29:08,800 Jetzt unterdessen in der anderen, wenn es nicht ein Kleinbuchstabe, bestimmt 602 00:29:08,800 --> 00:29:10,400 durch die Linie 24, nur ausdrucken. 603 00:29:10,400 --> 00:29:12,590 Ich will nur die berühren Zeichen, die waren 604 00:29:12,590 --> 00:29:14,410 eigentlich ursprünglich Kleinbuchstaben. 605 00:29:14,410 --> 00:29:15,150 >> Also mal sehen, dies. 606 00:29:15,150 --> 00:29:17,400 Machen Sie profitieren. 607 00:29:17,400 --> 00:29:18,470 Zusammengestellt, OK. 608 00:29:18,470 --> 00:29:19,730 . / Kapitalisieren. 609 00:29:19,730 --> 00:29:23,530 Und lassen Sie mich in H-E-L-L-O geben in Kleinbuchstaben eingeben. 610 00:29:23,530 --> 00:29:26,370 Und feststellen, dass es umgesetzt wird in Großbuchstaben. 611 00:29:26,370 --> 00:29:27,940 Lassen Sie mich dies wieder tun mit ein anderes Wort. 612 00:29:27,940 --> 00:29:32,720 Wie wäre es mit D-A-V-I-D mit dem ersten D kapitalisiert als Name der Regel ist? 613 00:29:32,720 --> 00:29:33,560 Enter. 614 00:29:33,560 --> 00:29:34,870 Beachten Sie, es ist immer noch richtig. 615 00:29:34,870 --> 00:29:40,250 Es ist einfach ausgegeben, dass erste D unverändert über die anderen zu konstruieren. 616 00:29:40,250 --> 00:29:42,170 >> So im Hinterkopf behalten, dann ein paar Dinge hier. 617 00:29:42,170 --> 00:29:45,060 Einer, wenn Sie schon immer einmal zwei überprüfen Bedingungen auf einmal, können Sie und sie 618 00:29:45,060 --> 00:29:46,500 zusammen, wie wir vorausgesagt. 619 00:29:46,500 --> 00:29:49,900 Sie können Zeichen in dieser Weise vergleichen und effektiv zu behandeln Zeichen als 620 00:29:49,900 --> 00:29:53,050 Zahlen, aber ehrlich gesagt, das ist so verdammt kryptischen ich werde nie vergessen 621 00:29:53,050 --> 00:29:56,510 wie man sich mit diesem von Grund auf ohne Begründung durch sie für ganz 622 00:29:56,510 --> 00:29:57,140 ein bisschen Zeit. 623 00:29:57,140 --> 00:30:00,590 >> Wäre es nicht schön gewesen, wenn jemand draußen schrieb eine Funktion aufgerufen wird 624 00:30:00,590 --> 00:30:05,390 senken das könnte für mich wahr oder beantworten falsch, ist dieses Zeichen Kleinbuchstaben? 625 00:30:05,390 --> 00:30:09,350 Nun zum Glück, wer schrieb ctype.h genau das tat. 626 00:30:09,350 --> 00:30:15,540 Lassen Sie mich gehen hier oben, und fügen Sie ctype für c Typen, und jetzt lass mich gehen hier unten und 627 00:30:15,540 --> 00:30:18,820 umschreiben diese Zeile wie folgt. 628 00:30:18,820 --> 00:30:27,510 >> Also, wenn es heißt niedriger ist, behaupte ich, s Halterung i, dann werde ich löschen 629 00:30:27,510 --> 00:30:29,400 diese beiden Linien insgesamt. 630 00:30:29,400 --> 00:30:32,570 So, jetzt jemand anderes, ich hoffe, schrieb eine Funktion aufgerufen niedriger ist, und es 631 00:30:32,570 --> 00:30:36,250 fällt sie taten, und sie erklärt es innerhalb von ctype.h. 632 00:30:36,250 --> 00:30:39,480 Und jetzt gehe ich in die Linie 27 verlassen allein, ich werde in die Linie 31 verlassen 633 00:30:39,480 --> 00:30:41,890 allein, zu bemerken, wie viel ich habe verschärft meinen Code. 634 00:30:41,890 --> 00:30:42,690 Es ist jetzt sauberer. 635 00:30:42,690 --> 00:30:47,250 Es ist weniger schwer zu durchschauen weil jetzt die Funktion ist darüber hinaus 636 00:30:47,250 --> 00:30:50,080 so wunderbar nannte sie nur tut, was es sagt. 637 00:30:50,080 --> 00:30:51,520 >> So, jetzt werde ich diese zu speichern. 638 00:30:51,520 --> 00:30:52,930 Ich werde zu verkleinern. 639 00:30:52,930 --> 00:30:56,650 Und ebenso wie in Scratch könnten Sie haben Booleans, Boolean Werte true oder 640 00:30:56,650 --> 00:31:01,530 falsch, das ist genau das, was ist senken effektiv Renditen. 641 00:31:01,530 --> 00:31:02,960 Lassen Sie mich neu zu kompilieren. 642 00:31:02,960 --> 00:31:04,500 Lassen Sie mich re-run. 643 00:31:04,500 --> 00:31:07,350 Und jetzt versuchen wir es wieder, H-E-L-L-O, Enter. 644 00:31:07,350 --> 00:31:07,970 Das ist ziemlich gut. 645 00:31:07,970 --> 00:31:10,150 Und versuchen Sie es erneut, sicherzustellen, dass ich nicht schrauben etwas auf. 646 00:31:10,150 --> 00:31:11,670 Das ist so gut kapitalisiert. 647 00:31:11,670 --> 00:31:14,190 >> Aber dies ist nicht gut genug, weil die andere Sache, die ich nie 648 00:31:14,190 --> 00:31:19,090 erinnern, wenn ich durch sie wirklich funktionieren sorgfältig auf, sagen wir, ist Papier 649 00:31:19,090 --> 00:31:19,920 diese verdammte Linie. 650 00:31:19,920 --> 00:31:23,450 Wäre es nicht schön, wenn es eine Funktion aufgerufen, upper? 651 00:31:23,450 --> 00:31:26,930 Nun, es stellt sich heraus, es ist in ctype.h als gut. 652 00:31:26,930 --> 00:31:30,150 Ich werde weitermachen und geben - 653 00:31:30,150 --> 00:31:31,340 lassen Sie mich bringen diese Linie zurück. 654 00:31:31,340 --> 00:31:36,430 Anstelle dieser hier, lass mich gehen und sagen, Ersatz für die c% der 655 00:31:36,430 --> 00:31:42,110 aufgrund des Aufrufs dieser Funktion Obergrenze für die i-te Zeichen s. 656 00:31:42,110 --> 00:31:45,430 Und nun bemerken, es wird immer ein wenig ausgeglichen. 657 00:31:45,430 --> 00:31:48,870 Ich habe den Überblick, wie viele halten Klammern habe ich geöffnet und geschlossen. 658 00:31:48,870 --> 00:31:50,050 >> So jetzt ist es noch sauberer. 659 00:31:50,050 --> 00:31:53,460 Nun, das Programm wird immer besser und besser wohl weil es entworfen 660 00:31:53,460 --> 00:31:56,450 viel, viel mehr lesbar, aber ist es kein wir korrigieren. 661 00:31:56,450 --> 00:31:57,600 Machen Sie profitieren. 662 00:31:57,600 --> 00:31:58,930 . / Kapitalisieren. 663 00:31:58,930 --> 00:32:03,220 H-E-L-L-O. Laufen wir es wieder, D-A-V-I-D. OK, so sind wir immer noch in 664 00:32:03,220 --> 00:32:04,250 ziemlich guter Form. 665 00:32:04,250 --> 00:32:06,030 >> Aber jetzt zu den oberen. 666 00:32:06,030 --> 00:32:09,720 Ich schlage vor, dass es eine weitere Verfeinerung könnten wir machen, das wäre 667 00:32:09,720 --> 00:32:12,820 wirklich nett, das wirklich anziehen könnte bis dieser Code und wirklich geben uns fünf 668 00:32:12,820 --> 00:32:15,150 von fünf für Design, zum Beispiel. 669 00:32:15,150 --> 00:32:16,510 Was schön wäre, um loszuwerden? 670 00:32:16,510 --> 00:32:20,770 Nun, schauen Sie, wie verdammt lange diesen Block Code ist nur etwas Einfaches zu tun. 671 00:32:20,770 --> 00:32:23,850 >> Jetzt als beiseite, so haben Sie vielleicht gesehen in Super-Abschnitt im vergangenen 672 00:32:23,850 --> 00:32:27,570 Wochenende, brauchen Sie nicht unbedingt brauchen die geschweiften Klammern, wenn Sie nur eine 673 00:32:27,570 --> 00:32:32,180 Codezeile, obwohl wir vorgeschlagen halten sie so, dass es viel macht 674 00:32:32,180 --> 00:32:36,190 mehr klar, wie in Scratch U-förmige Blöcke, was drin ist der Zweigniederlassung. 675 00:32:36,190 --> 00:32:40,170 Aber wäre es nicht, wenn zu den oberen schön, wenn angesichts dessen Eingang, verwandelte sie in 676 00:32:40,170 --> 00:32:44,730 Großbuchstaben, wenn es nicht ist, und was wäre werden im umgekehrten Fall wunderbar, wenn 677 00:32:44,730 --> 00:32:47,210 es ist schon Großbuchstaben? 678 00:32:47,210 --> 00:32:49,620 Nur führt es durch und lassen sie allein. 679 00:32:49,620 --> 00:32:50,660 >> Also vielleicht ist es das tut. 680 00:32:50,660 --> 00:32:52,990 Ich könnte versuchen und hoffe nur, dass es, aber lassen Sie mich 681 00:32:52,990 --> 00:32:54,450 vorstellen eine andere Sache. 682 00:32:54,450 --> 00:32:57,440 Anstelle der Verwendung dieses eingebauten Terminal Fenster hier unten, daran erinnern, dass 683 00:32:57,440 --> 00:33:01,130 dieser Platz schwarze Ikone gibt Ihnen eine größere Terminal-Fenster, dass ich kann die volle 684 00:33:01,130 --> 00:33:02,260 Bildschirm, wenn ich will? 685 00:33:02,260 --> 00:33:05,820 So stellt sich heraus, dass sie irgendwie seltsam sind benannt, aber es gibt diese Dinge genannt 686 00:33:05,820 --> 00:33:10,970 man pages, Handbuchseiten, Mann für kurze, und ich kann auf diese durch 687 00:33:10,970 --> 00:33:14,515 Eingabe Mann - 688 00:33:14,515 --> 00:33:15,570 was will ich schreiben? 689 00:33:15,570 --> 00:33:17,830 Man to oberen. 690 00:33:17,830 --> 00:33:21,090 >> Und nun bemerken, wenn es eine Funktion innerhalb des Computers, in 691 00:33:21,090 --> 00:33:23,970 In diesem Fall das Gerät, das nur das Betriebssystem Linux, es geht 692 00:33:23,970 --> 00:33:27,920 um mir einen etwas kryptischen Satz Ausgang, aber Sie werden feststellen, dass im Laufe der Zeit 693 00:33:27,920 --> 00:33:31,720 sie ist immer so ziemlich das formatiert gleichen, so dass Sie beginnen, sich daran zu gewöhnen. 694 00:33:31,720 --> 00:33:35,130 Beachten Sie an der Spitze der oberen und offenbar ist die gleiche Dokumentation 695 00:33:35,130 --> 00:33:35,680 für zu senken. 696 00:33:35,680 --> 00:33:38,740 Wer schrieb es wurde Schneiden einige Ecken und setzte alles auf eine Seite. 697 00:33:38,740 --> 00:33:40,720 Diese Dinge 'Zweck in Leben ist ein Konvertit 698 00:33:40,720 --> 00:33:42,780 Brief an Ober-oder Kleinschreibung. 699 00:33:42,780 --> 00:33:46,290 >> Beachten Sie, dass unter Synopsis, die man-Seite lehrt mich, was ich haben Datei 700 00:33:46,290 --> 00:33:48,130 zu schließen, um dieses Ding zu benutzen. 701 00:33:48,130 --> 00:33:51,320 Es gibt mir die Unterschriften für diese Funktionen, die beide von ihnen, auch 702 00:33:51,320 --> 00:33:53,510 wenn wir jetzt nur kümmern uns um eins. 703 00:33:53,510 --> 00:33:54,730 Hier ist nun eine Beschreibung. 704 00:33:54,730 --> 00:33:58,800 Um oberen wandelt die Buchstaben c in Großbuchstaben, wenn möglich. 705 00:33:58,800 --> 00:34:02,280 >> Noch nicht so lehrreich, aber lassen Sie mich jetzt unter Rückgabewert aussehen, das Ding 706 00:34:02,280 --> 00:34:03,520 Das ist wieder übergeben. 707 00:34:03,520 --> 00:34:08,600 So der zurückgegebene Wert ist, dass der umgewandelt Brief oder c, wenn die 708 00:34:08,600 --> 00:34:09,870 Umwandlung nicht möglich war. 709 00:34:09,870 --> 00:34:11,202 Was ist c? 710 00:34:11,202 --> 00:34:12,560 >> Der ursprüngliche Charakter. 711 00:34:12,560 --> 00:34:15,370 >> Der ursprüngliche Charakter und wir wissen, dass durch die wieder gehen bis zu der 712 00:34:15,370 --> 00:34:19,179 Synopsis, und wer schrieb diese Funktion gerade beschlossen, dass der Eingang 713 00:34:19,179 --> 00:34:22,909 an oberen und unteren nur zur willkürlich werde genannt werden c. 714 00:34:22,909 --> 00:34:24,909 Man könnte sie als es fast alles haben sie wollen, aber sie hielten es 715 00:34:24,909 --> 00:34:26,270 einfach wie c. 716 00:34:26,270 --> 00:34:27,880 Also habe ich die Manpage konsultiert. 717 00:34:27,880 --> 00:34:31,870 Dieser Satz beruhigt mich, dass, wenn es ist nicht ein Kleinbuchstabe, ist es 718 00:34:31,870 --> 00:34:34,969 werde nur gib mir C, das ist perfekt, was bedeutet, kann ich loswerden 719 00:34:34,969 --> 00:34:36,199 meine else-Bedingung. 720 00:34:36,199 --> 00:34:39,679 >> Also lassen Sie mich zurück zu gedit und Jetzt lassen Sie mich nur dies tun. 721 00:34:39,679 --> 00:34:41,960 Ich werde meine printf Anweisung kopieren. 722 00:34:41,960 --> 00:34:45,969 Ich werde weitermachen und rechts reingehen die for-Schleife, dass Druck aus, und erhalten 723 00:34:45,969 --> 00:34:48,760 Befreien Sie sich von jetzt diese ganze if-Konstrukt. 724 00:34:48,760 --> 00:34:51,860 War das nicht eine schlechte Idee, und es war sehr viel richtig und im Einklang mit 725 00:34:51,860 --> 00:34:54,100 alles, was wir predigen, aber gerade nicht erforderlich. 726 00:34:54,100 --> 00:34:57,070 Sobald Sie etwas Bibliothek realisieren Funktion vorhanden ist, dass jemand anderes 727 00:34:57,070 --> 00:35:01,340 schrieb, oder vielleicht haben Sie schrieb an anderer Stelle in die Datei, können Sie es verwenden und wirklich 728 00:35:01,340 --> 00:35:02,690 beginnen zu straffen Sie den Code. 729 00:35:02,690 --> 00:35:06,080 >> Und wenn ich Dinge wie guter Stil sagen, die Tatsache, dass diese Person die als 730 00:35:06,080 --> 00:35:11,490 funktionieren bis oberen oder vorher ist geringer ist wunderbar nützlich, weil 731 00:35:11,490 --> 00:35:12,900 sie sind sehr beschreibend. 732 00:35:12,900 --> 00:35:16,120 Sie würde nicht wollen, um Ihre Funktionen aufrufen x und y und z, die über 733 00:35:16,120 --> 00:35:19,620 viel, viel weniger Bedeutung. 734 00:35:19,620 --> 00:35:25,160 Irgendwelche Fragen zu dieser Reihe Verbesserungen? 735 00:35:25,160 --> 00:35:28,010 >> So genügt es, eine der sagen Imbissbuden ist auch euer eigenes Problem 736 00:35:28,010 --> 00:35:30,960 Satz - vielleicht Problem Satz, aber sicherlich zwei P gesetzt und weiter, auch 737 00:35:30,960 --> 00:35:34,380 wenn sie korrekt sind nicht unbedingt , sie sind perfekt, nur 738 00:35:34,380 --> 00:35:36,155 noch oder besonders gut entwickelt. 739 00:35:36,155 --> 00:35:38,420 Das ist die andere Achse anfangen, darüber nachzudenken. 740 00:35:38,420 --> 00:35:41,730 Das war also eine Zeichenfolge innerhalb Ihres Arbeitsspeicher des Computers, aber wenn Sie ein 741 00:35:41,730 --> 00:35:46,180 ganze Reihe von Figuren wie H-E-L-L-O innerhalb von RAM, und nehme 742 00:35:46,180 --> 00:35:51,330 dass Sie in Ihrem Programm nennen den String mehrfach, so dass Sie 743 00:35:51,330 --> 00:35:54,200 rufen den String einmal, dann rufen den String wieder. 744 00:35:54,200 --> 00:35:55,880 Nun, was ist zu gehen geschehen im Laufe der Zeit? 745 00:35:55,880 --> 00:35:59,170 >> In anderen Worten, wenn Sie eine Linie von Code, allerdings aus dem Zusammenhang gerissen, wie 746 00:35:59,170 --> 00:36:02,120 string s bekommt - 747 00:36:02,120 --> 00:36:02,960 Lassen Sie uns dies tun. 748 00:36:02,960 --> 00:36:05,270 String name gleich den String. 749 00:36:05,270 --> 00:36:08,590 Es gelte also Codezeile gemeint ist um den Benutzer für seinen oder ihren Namen zu fragen. 750 00:36:08,590 --> 00:36:14,580 Das nächste Codezeile soll fragen der Benutzer für seine oder ihre Schule und 751 00:36:14,580 --> 00:36:15,920 Diese nächste Zeile und so weiter. 752 00:36:15,920 --> 00:36:18,150 Angenommen, wir fragen halten der Benutzer für den einen und 753 00:36:18,150 --> 00:36:19,750 andere und andere Zeichenfolge. 754 00:36:19,750 --> 00:36:22,390 Sie werden in Erinnerung bleiben gleichzeitig. 755 00:36:22,390 --> 00:36:24,280 Man ist nicht auf die anderen vermischen. 756 00:36:24,280 --> 00:36:26,420 Schule ist nicht überschreiben die andere. 757 00:36:26,420 --> 00:36:28,520 Aber wo tun sie alle am Ende in Erinnerung? 758 00:36:28,520 --> 00:36:32,030 >> Nun, wenn wir beginnen, auf dem Bildschirm zeichnen, was wir können diese Sache 759 00:36:32,030 --> 00:36:35,800 hier wie eine Tafel, wenn dieser schwarzen Rechteck stellt meines Computers 760 00:36:35,800 --> 00:36:39,800 Speicher, ich werde willkürlich beginnen Teilen Sie es in kleine Quadrate, 761 00:36:39,800 --> 00:36:42,120 von denen jedes ein Byte des Speichers. 762 00:36:42,120 --> 00:36:46,560 Ehrlich gesagt, wenn Sie ein Gigabyte RAM in diesen Tagen haben Sie eine Milliarde Bytes 763 00:36:46,560 --> 00:36:49,540 Arbeitsspeicher in Ihrem Computer, so dass eine Milliarde dieser Quadrate. 764 00:36:49,540 --> 00:36:52,110 So genügt es zu sagen, diese ist nicht wirklich maßstabsgetreu. 765 00:36:52,110 --> 00:36:58,250 >> Aber wir halten konnte zeichnen alle diese eindeutig nicht maßstäblich Quadrate, und dies 766 00:36:58,250 --> 00:37:01,260 kollektiv repräsentiert mein Arbeitsspeicher des Computers. 767 00:37:01,260 --> 00:37:03,136 Jetzt werden wir nur tun, Punkt, Punkt, Punkt. 768 00:37:03,136 --> 00:37:06,260 Also mit anderen Worten, wenn ich jetzt aufgefordert die Benutzer mit get String, um mir ein 769 00:37:06,260 --> 00:37:07,350 String, was passiert? 770 00:37:07,350 --> 00:37:14,270 Wenn der Benutzer in "Hallo," das endet in H-E-L-L-O. Aber angenommen, die 771 00:37:14,270 --> 00:37:15,720 Benutzer dann in Arten - 772 00:37:15,720 --> 00:37:17,250 Eigentlich sollte ich nicht getan habe hallo, da fragen wir 773 00:37:17,250 --> 00:37:18,330 sie für ihren Namen. 774 00:37:18,330 --> 00:37:20,580 So gehen wir zurück, wenn ich dies tun können. 775 00:37:20,580 --> 00:37:26,130 >> Also, wenn ich in D-Typ-A-V-I-D für meinen Namen, aber daran erinnern, dass in der zweiten Zeile 776 00:37:26,130 --> 00:37:29,220 Code wurde Zeichenfolge wieder zu bekommen um ihre Schule zu bekommen. 777 00:37:29,220 --> 00:37:32,090 Wo ist das Wort, das der Benutzer Typen in als nächstes gehen? 778 00:37:32,090 --> 00:37:38,290 Na ja, vielleicht, es wird in Serie gehen H-A-R-V-A-R-D. Also obwohl ich 779 00:37:38,290 --> 00:37:41,560 gezeichnet als zwei Zeilen, das ist nur eine ganze Reihe von Bytes in Ihrem 780 00:37:41,560 --> 00:37:42,710 Arbeitsspeicher des Computers. 781 00:37:42,710 --> 00:37:46,560 Es gibt jetzt ein Problem, denn nun wenn ich mit RAM in diesem sehr günstigen 782 00:37:46,560 --> 00:37:49,910 aber irgendwie naive Art und Weise, was kann man offenbar nicht unterscheiden? 783 00:37:49,910 --> 00:37:52,640 784 00:37:52,640 --> 00:37:54,680 Wo man anfängt und wo einem Ende, nicht wahr? 785 00:37:54,680 --> 00:37:55,860 Sie sind irgendwie verwischt zusammen. 786 00:37:55,860 --> 00:37:57,920 >> So stellt sich heraus den Computer tut dies nicht. 787 00:37:57,920 --> 00:38:04,720 Lassen Sie mich eigentlich blättern zurück in die Zeit einer paar Zeichen, und statt Harvard 788 00:38:04,720 --> 00:38:09,570 gehen sofort nach dem Namen des Benutzers, der Benutzer tatsächlich bekommt, hinter 789 00:38:09,570 --> 00:38:12,000 die Szenen, ein spezielles Zeichen eingefügt durch das 790 00:38:12,000 --> 00:38:13,885 Computer für ihn oder sie. 791 00:38:13,885 --> 00:38:19,470 / 0, sonst wie die NUL-Zeichen bekannt annoyingly namens N-U-L, nicht 792 00:38:19,470 --> 00:38:22,190 N-U-L-L, aber Sie schreiben es als / 0. 793 00:38:22,190 --> 00:38:27,130 Es ist nur alle Null-Bits ist ein Marker in zwischen dem ersten Wort, das der Benutzer- 794 00:38:27,130 --> 00:38:28,290 eingegeben und die zweite. 795 00:38:28,290 --> 00:38:33,020 >> So Harvard tatsächlich jetzt endet da diese Zeichenfolge 796 00:38:33,020 --> 00:38:36,110 und eine weitere / 0. 797 00:38:36,110 --> 00:38:41,690 Mit anderen Worten, durch diese mit Sentinel-Werte, acht zusammenhängenden Null 798 00:38:41,690 --> 00:38:45,220 Bits, können Sie jetzt beginnen zu unterscheiden ein Zeichen von einem anderen. 799 00:38:45,220 --> 00:38:49,720 Also die ganze Zeit, was "Hallo" wurde, ist tatsächlich "Hallo" mit einem / 0, und 800 00:38:49,720 --> 00:38:53,580 Inzwischen könnte es sehr gut durchaus ein bisschen mehr RAM 801 00:38:53,580 --> 00:38:56,400 innerhalb des Computers. 802 00:38:56,400 --> 00:38:57,810 >> Lass es mich tun eine andere Sache jetzt. 803 00:38:57,810 --> 00:39:01,800 Es stellt sich heraus, dass alle diese Quadrate wir haben zeichnen, sie sind, ja, 804 00:39:01,800 --> 00:39:06,140 Strings, sondern auch allgemein, diese Dinge sind Arrays. 805 00:39:06,140 --> 00:39:10,590 Ein Array ist nur ein Teil des Speichers das ist die Rücken an Rücken zu Rücken an Rücken, 806 00:39:10,590 --> 00:39:15,130 und Sie verwenden in der Regel eine Reihe von Weg dieser eckigen Klammer-Notation. 807 00:39:15,130 --> 00:39:18,210 So werden wir diese ziemlich viel zu sehen im Laufe der Zeit, aber lassen Sie mich gehen Sie vor und 808 00:39:18,210 --> 00:39:21,160 eröffnen, nennen wir es altert. 809 00:39:21,160 --> 00:39:23,920 Und bemerken, was wir tun können mit die gleichen Tricks, ein wenig 810 00:39:23,920 --> 00:39:25,750 bisschen mehr Syntax hier. 811 00:39:25,750 --> 00:39:29,270 >> Also in Zeile 17 des Programms - eigentlich, lassen Sie mich das Programm zuerst 812 00:39:29,270 --> 00:39:30,770 so können wir sehen, was dieses Ding tut. 813 00:39:30,770 --> 00:39:33,530 Lassen Sie mich rufen Altersgruppen zu machen dieses Programm kompilieren. 814 00:39:33,530 --> 00:39:34,950 . / Altersklassen. 815 00:39:34,950 --> 00:39:36,480 Wie viele Menschen sind in den Raum? 816 00:39:36,480 --> 00:39:38,020 Nennen Sie es drei. 817 00:39:38,020 --> 00:39:39,575 Alter der ersten Person? 818 00:39:39,575 --> 00:39:42,710 18, 19 und 20. 819 00:39:42,710 --> 00:39:46,770 Und jetzt etwas lächerlich, nur ich machte ein Programm, das im Alter von denen haben 820 00:39:46,770 --> 00:39:47,740 drei Personen. 821 00:39:47,740 --> 00:39:50,390 >> Also gibt es eindeutig eine Chance für etwas Spaß arithmetische hier. 822 00:39:50,390 --> 00:39:51,560 Zum Glück ist die Mathematik richtig. 823 00:39:51,560 --> 00:39:54,720 18 ging an 19, 19 ging bis 20 und so weiter. 824 00:39:54,720 --> 00:39:58,510 Aber was wirklich gemeint zu sein Veranschaulichung ist hier, wie wir die Speicherung 825 00:39:58,510 --> 00:40:00,190 Diese drei Menschen im Alter. 826 00:40:00,190 --> 00:40:02,370 Lassen Sie mich zu vergrößern, was ist hier los ist. 827 00:40:02,370 --> 00:40:06,240 >> Also erstens, sollten diese ersten paar Zeilen werden immer ziemlich vertraut. 828 00:40:06,240 --> 00:40:08,770 Ich bin einfach nur den Benutzer zur Eingabe der Anzahl der Personen im Raum. 829 00:40:08,770 --> 00:40:11,490 Dann bin ich mit bekommen int und tun, während auf tun dies wieder und wieder und wieder. 830 00:40:11,490 --> 00:40:15,780 Wir haben dieses Muster vor gesehen, aber Zeile 27 ist neu und eigentlich ganz 831 00:40:15,780 --> 00:40:18,160 nützlich, und wird sich immer nützlich. 832 00:40:18,160 --> 00:40:21,620 Beachten Sie, dass das, was in anderen Zeile 27 ist ist, dass ich eine Erklärung sein scheinen 833 00:40:21,620 --> 00:40:23,960 int genannt Altersgruppen, aber warten. 834 00:40:23,960 --> 00:40:27,140 Es ist nicht nur int Alters. 835 00:40:27,140 --> 00:40:30,130 Es gibt diese eckigen Klammern, innerhalb von n ist. 836 00:40:30,130 --> 00:40:35,150 >> So ist die Halterung n in diesem Zusammenhang nicht innerhalb eines printf Anweisung hier aber 837 00:40:35,150 --> 00:40:44,370 in diesem einzigen Zeile 27, ist diese Linie sagen, gib mir n ints, von denen jede 838 00:40:44,370 --> 00:40:46,080 ist vom Typ int. 839 00:40:46,080 --> 00:40:49,870 Also das ist ein Eimer, so zu sprechen, der, in diesem Fall drei Integer zurück zu 840 00:40:49,870 --> 00:40:52,770 Rücken an Rücken, so dass ich effektiv haben drei Variablen. 841 00:40:52,770 --> 00:40:54,890 Die Alternative zu sein klar, wäre dies. 842 00:40:54,890 --> 00:40:57,400 >> Wenn ich wollte, dass die ersten Schüler Alter, ich könnte dies tun. 843 00:40:57,400 --> 00:40:59,520 Wenn ich wollte, dass die zweiten Schüler Alter, ich könnte dies tun. 844 00:40:59,520 --> 00:41:01,860 Wenn ich wollte, dass die dritten Schüler Alter, ich könnte dies tun. 845 00:41:01,860 --> 00:41:04,320 Und Gott bewahre wir brauchen jeden Alter in diesem Raum - 846 00:41:04,320 --> 00:41:07,670 Ich meine, das ist eine verdammt viel von Kopie, fügen Sie wieder und wieder und wieder. 847 00:41:07,670 --> 00:41:10,870 Und zzgl. sobald ich dieses Programm kompilieren, wenn ein anderer Student geht in über out 848 00:41:10,870 --> 00:41:14,200 dieser Tür, jetzt meine Nummer von Variablen ist falsch. 849 00:41:14,200 --> 00:41:17,450 >> Also, was ist schön, über ein Array ist als Sobald Sie das Gefühl selbst 850 00:41:17,450 --> 00:41:20,190 Kopieren und Einfügen, stehen die Chancen, dass es nicht der beste Ansatz. 851 00:41:20,190 --> 00:41:22,240 Ein Array ist dynamisch potentiell. 852 00:41:22,240 --> 00:41:24,610 Ich weiß nicht im Voraus, wie viele Leute wissen, gehen, um im Raum zu sein, 853 00:41:24,610 --> 00:41:28,670 aber ich weiß, ich brauche n von ihnen, und ich werde herauszufinden, n, wenn die Zeit kommt. 854 00:41:28,670 --> 00:41:35,500 Diese Codezeile bedeutet jetzt, gib mir ein Teil des Speichers, die wie folgt aussieht 855 00:41:35,500 --> 00:41:40,380 wobei die Anzahl von Feldern auf dem Bildschirm ist völlig abhängig von n, dass 856 00:41:40,380 --> 00:41:42,010 der Benutzer eingegeben in. 857 00:41:42,010 --> 00:41:44,850 >> So, jetzt der Rest des Programms ist eigentlich ziemlich ähnlich, was wir 858 00:41:44,850 --> 00:41:46,860 habe gerade mit Zeichen. 859 00:41:46,860 --> 00:41:49,970 Merke ich, haben eine for-Schleife ab Zeile 30. 860 00:41:49,970 --> 00:41:54,920 So, nachdem ich das Array zu bekommen, ich Iteration von y gleich Null auf bis zu n. 861 00:41:54,920 --> 00:41:58,890 Ich habe nur dieses lehrreiche printf Nachricht nur sagen, gib mir das Alter 862 00:41:58,890 --> 00:42:03,690 von Person #% i, so die Nummer eins, Nummer zwei, Nummer drei. 863 00:42:03,690 --> 00:42:04,730 Und warum ich das tun? 864 00:42:04,730 --> 00:42:08,870 Ehrlich gesagt, lieber Mensch, um von einer zählen auf bis während Informatiker, 865 00:42:08,870 --> 00:42:09,620 Null auf bis. 866 00:42:09,620 --> 00:42:11,700 Informatiker sind nicht zu Mit dieser Art von Programm, so dass wir 867 00:42:11,700 --> 00:42:13,990 werde nur anfangen zu zählen an einem wie normale Menschen. 868 00:42:13,990 --> 00:42:17,630 >> Und jetzt in Zeile 33, die etwas bemerken anderes Stück Syntax. 869 00:42:17,630 --> 00:42:23,710 Das i-te in diesem Alter Variable vom Typ Array wird einen int zu bekommen. 870 00:42:23,710 --> 00:42:25,770 Und nun endlich, das ist nur arithmetische hier unten. 871 00:42:25,770 --> 00:42:29,200 Ich beschloss, in einer separaten Schleife Anspruch einige Zeit vergeht, und jetzt in dieser 872 00:42:29,200 --> 00:42:31,400 separaten Kreislauf, führen diese Zeilen. 873 00:42:31,400 --> 00:42:35,810 >> Ein Jahr ab jetzt, ich werde Person i sein Jahre alt, aber bemerken, ist dies nicht der 874 00:42:35,810 --> 00:42:36,500 Variable i. 875 00:42:36,500 --> 00:42:38,390 Dies ist nun% i für int. 876 00:42:38,390 --> 00:42:43,210 Und Bekanntmachung als ersten Platzhalter, ich Stecker in i plus 1, so dass wir wie eine Zählung 877 00:42:43,210 --> 00:42:44,250 normaler Mensch. 878 00:42:44,250 --> 00:42:49,190 Und dann für den Wert ihres Alters, für i Jahre alt, ich nehme Alters Halterung 879 00:42:49,190 --> 00:42:52,980 i - und warum mache ich plus eins hier? 880 00:42:52,980 --> 00:42:53,760 Sie nur im Alter. 881 00:42:53,760 --> 00:42:55,030 Es ist meine dumme Auswahl an Programmen. 882 00:42:55,030 --> 00:42:56,810 Sie nur im Alter von einem Jahr. 883 00:42:56,810 --> 00:42:59,770 Ich könnte in einer beliebigen Anzahl dieses Typs Eigentlich möchte ich dort. 884 00:42:59,770 --> 00:43:02,430 >> Also, was ist eigentlich alle die Relevanz hier? 885 00:43:02,430 --> 00:43:07,610 Nun, lassen Sie mich eigentlich zurück blättern hier und ein Bild malen 886 00:43:07,610 --> 00:43:10,830 von dem, was vor uns liegt. 887 00:43:10,830 --> 00:43:15,720 Was wir mit unserem nächsten tun Problem Zwei Set wird in der Dilettantismus 888 00:43:15,720 --> 00:43:17,070 Welt der Kryptographie. 889 00:43:17,070 --> 00:43:22,500 Dies ist also eine Folge von Zeichen, so dass ein Folge von mehreren Zeichen, und welche 890 00:43:22,500 --> 00:43:23,750 bedeutet dies sagen? 891 00:43:23,750 --> 00:43:28,530 892 00:43:28,530 --> 00:43:30,600 Es ist nicht in der Online-Version der Folien. 893 00:43:30,600 --> 00:43:35,880 >> Also ich behaupten, dass dies das entspricht ein dumme Werbung von vielen Jahren 894 00:43:35,880 --> 00:43:39,950 vor, das könnte in der Tat erinnern einen ihrer Ursprünge. 895 00:43:39,950 --> 00:43:42,740 Also das ist ein Beispiel für Verschlüsselung oder Kryptographie. 896 00:43:42,740 --> 00:43:46,150 Es stellt sich heraus, dass, wenn Sie wollen tatsächlich Informationen senden oder teilen 897 00:43:46,150 --> 00:43:49,310 Informationen mit jemandem sicher, wie eine Meldung wie diese, können Sie 898 00:43:49,310 --> 00:43:50,500 Verschlüsselung der Buchstaben. 899 00:43:50,500 --> 00:43:53,170 Aber in der Regel sind die Wörter nicht verschlüsselt zufällig. 900 00:43:53,170 --> 00:43:56,365 Sie sind in gewisser Weise vertauscht oder verändert in gewisser Weise so, dass - oops. 901 00:43:56,365 --> 00:43:59,040 Das ist ein Spaß Spoiler für die nächste Zeit. 902 00:43:59,040 --> 00:44:04,390 >> So kann man abbilden, was offenbar O B. Beachten Sie, dass Leitungen bis 903 00:44:04,390 --> 00:44:05,420 Kapitalisierung-weise. 904 00:44:05,420 --> 00:44:07,960 Offenbar wird e r. 905 00:44:07,960 --> 00:44:14,000 Offenbar F-H-E-R zu S-U-R-E. So es stellt sich heraus, es gibt eine Abbildung, und in 906 00:44:14,000 --> 00:44:18,720 In diesem Fall gibt es eine ziemlich dumm Kartierung, wenn jemand es herausgefunden hat? 907 00:44:18,720 --> 00:44:21,440 Dies ist die so genannte Rot 13, 13 drehen. 908 00:44:21,440 --> 00:44:24,760 Es ist die dümmste Verschlüsselung Mechanismen, weil es buchstäblich nur 909 00:44:24,760 --> 00:44:29,160 fügt 13 bis jeder einen der Buchstaben, dumm in dem Sinne, dass, wenn Sie nur 910 00:44:29,160 --> 00:44:31,890 haben ein bisschen freie Zeit auf Ihre Hände und ein Bleistift, oder einfach nur, dass es 911 00:44:31,890 --> 00:44:35,260 durch im Kopf, könnten Sie versuchen, alle möglichen Ergänzungen - eins, zwei, 912 00:44:35,260 --> 00:44:38,470 drei, Punkt, Punkt, Punkt, 25 nur drehen das ganze Alphabet, und 913 00:44:38,470 --> 00:44:40,860 Irgendwann werden Sie herausfinden, was diese Meldung. 914 00:44:40,860 --> 00:44:43,700 Also, wenn Sie tat etwas wie dies in Grundschule vorbei Nachrichten an Ihre 915 00:44:43,700 --> 00:44:46,830 bester Freund, wenn Ihr der Grundschule Lehrer einfach durch die Lese- 916 00:44:46,830 --> 00:44:50,320 Nachricht und Brute gezwungen die Lösung, Sie vielleicht bekommen haben 917 00:44:50,320 --> 00:44:52,550 eine Antwort, dass durch. 918 00:44:52,550 --> 00:44:54,970 >> Jetzt natürlich, in der realen Welt, Kryptographie ist anspruchsvoller. 919 00:44:54,970 --> 00:45:00,120 Dies ist ein Text-Snippet aus einer Computersystem, das Benutzernamen und hat 920 00:45:00,120 --> 00:45:03,630 Passwörter, wie fast alle von uns tun, und das ist, was vergessen könnte 921 00:45:03,630 --> 00:45:07,260 aussehen, wenn auf Ihrer Festplatte gespeichert fahren, aber in verschlüsselter Form. 922 00:45:07,260 --> 00:45:11,050 Dies ist nicht nur eine Drehung von Briefen, A ist, B und B C. Dies ist 923 00:45:11,050 --> 00:45:15,620 viel anspruchsvoller, aber es nutzt was allgemein als geheimen Schlüssel bekannt 924 00:45:15,620 --> 00:45:16,690 Kryptographie. 925 00:45:16,690 --> 00:45:20,210 Dieses Bild erzählt die folgende Geschichte mit ein paar Symbolen. 926 00:45:20,210 --> 00:45:22,250 >> Auf der linken Seite haben wir, was nennen wir Klartext. 927 00:45:22,250 --> 00:45:25,420 In der Welt der Kryptographie, glatt Text ist nur die ursprüngliche Nachricht 928 00:45:25,420 --> 00:45:29,050 geschrieben in Englisch oder Französisch oder eine Sprache auch immer. 929 00:45:29,050 --> 00:45:32,405 Wenn Sie es verschlüsseln möchten, wir passieren es bildhaft durch ein Vorhängeschloss, so 930 00:45:32,405 --> 00:45:35,580 einige Art von Algorithmus, eine Funktion oder Programm, dass jemand schrieb 931 00:45:35,580 --> 00:45:39,880 dass verschlüsselt die Buchstaben hoffentlich mehr kompliziert als einfach nur mit 13 932 00:45:39,880 --> 00:45:40,980 für jeden von ihnen. 933 00:45:40,980 --> 00:45:43,780 >> Was Sie aus diesem Prozess in die Mitte gibt heißt cyphertext. 934 00:45:43,780 --> 00:45:44,850 So eine Art sexy Wort. 935 00:45:44,850 --> 00:45:47,630 Es bedeutet nur, es ist die verschlüsselte Version des Klartext. 936 00:45:47,630 --> 00:45:52,570 Und nur, wenn Sie das gleiche Geheimnis, 13 oder minus 13, sind Sie in der Lage, 937 00:45:52,570 --> 00:45:54,970 Entschlüsseln einer Nachricht so. 938 00:45:54,970 --> 00:45:57,770 >> So in Problem Set Two, unter den Dingen Du wirst, wenn in der Hacker tun 939 00:45:57,770 --> 00:46:01,860 Ausgabe, haben Sie, um Code zu schreiben diese Passwörter knacken, herauszufinden, 940 00:46:01,860 --> 00:46:05,170 was sie waren und wie sie waren verschlüsselt, obwohl wir Ihnen ein bisschen 941 00:46:05,170 --> 00:46:06,460 der Beratung auf dem Weg. 942 00:46:06,460 --> 00:46:09,320 In der Standard Edition, stellen wir ein paar Chiffren, Verschlüsselung 943 00:46:09,320 --> 00:46:12,400 Mechanismen, nannte man Caesar, ein genannt Vigenere, dass es noch 944 00:46:12,400 --> 00:46:16,100 Dreh-Chiffren, wo A wird etwas, wird B etwas, aber 945 00:46:16,100 --> 00:46:18,820 Sie haben es programmatisch denn es wird in der Tat ein Geheimnis sein 946 00:46:18,820 --> 00:46:22,840 Schlüssel handelt, die in der Regel eine Zahl oder ein Stichwort, dass nur die 947 00:46:22,840 --> 00:46:26,420 Absender und der Empfänger diese Nachrichten verstehen sollten. 948 00:46:26,420 --> 00:46:28,660 >> Nun, diese tatsächlich Inkarnationen in der realen Welt. 949 00:46:28,660 --> 00:46:32,910 Dies ist zum Beispiel kleine Waise Annies Geheimnis Decoder Ring, und Sie 950 00:46:32,910 --> 00:46:35,180 kann tatsächlich setzen diese Dreh-Chiffren - 951 00:46:35,180 --> 00:46:37,930 A wird zu etwas, wird B etwas - mit ein paar Räder, 952 00:46:37,930 --> 00:46:40,840 eine auf der Außenseite, einem auf der Innenseite so dass, wenn Sie das Rad drehen, oder 953 00:46:40,840 --> 00:46:44,170 der Ring, können Sie tatsächlich Line-Up der Briefe mit verschiedenen Buchstaben, 954 00:46:44,170 --> 00:46:45,430 immer einen geheimen Code. 955 00:46:45,430 --> 00:46:48,110 Und so wie der Cliffhanger für heute, , was ich dachte, ich hätte tun müssen, ist ein bisschen 956 00:46:48,110 --> 00:46:52,170 Rückschritt, dass, wenn Sie den Fernseher einschalten am 24. Dezember, können Sie beobachten die 957 00:46:52,170 --> 00:46:55,390 Film bis zum Überdruss für 24 Stunden in einer Reihe. 958 00:46:55,390 --> 00:47:06,030 Aber für heute, werde ich es öffnen sich hier und geben uns nur zwei Minuten ein 959 00:47:06,030 --> 00:47:13,493 pädagogisch relevanten Christmas Story mit einem kleinen Kerl namens Ralphie. 960 00:47:13,493 --> 00:47:14,400 >> [VIDEO PLAYBACK] 961 00:47:14,400 --> 00:47:17,420 >> -Sei es, um alle und jeden, die bekannt Ralph Parker wird ernannt 962 00:47:17,420 --> 00:47:20,650 Mitglied der Little Orphan Annie Geheimnis Kreis und wird auf alle Titel 963 00:47:20,650 --> 00:47:23,460 die Ehren und Vorteile auftretenden dazu. 964 00:47:23,460 --> 00:47:25,990 >> -Signed, Little Orphan Annie. 965 00:47:25,990 --> 00:47:30,100 Gegengezeichnet, Pierre Andre in Tinte. 966 00:47:30,100 --> 00:47:34,270 Ehrungen und Leistungen bereits im Alter von neun Jahren. 967 00:47:34,270 --> 00:47:39,440 >> [Schreien auf RADIO] 968 00:47:39,440 --> 00:47:40,770 >> Komm, lass uns auf mit ihm zu bekommen. 969 00:47:40,770 --> 00:47:44,965 Ich brauche nicht all that jazz über Schmuggler und Piraten. 970 00:47:44,965 --> 00:47:48,270 >> -Hören Sie morgen Abend für die Abschluss Abenteuer der schwarzen 971 00:47:48,270 --> 00:47:49,650 Piratenschiff. 972 00:47:49,650 --> 00:47:53,320 Jetzt ist es Zeit für Annie Secret Message for you Mitglieder 973 00:47:53,320 --> 00:47:55,720 der geheimen Kreis. 974 00:47:55,720 --> 00:47:56,580 Erinnern Sie sich, Kinder. 975 00:47:56,580 --> 00:48:01,720 Nur die Mitglieder des Secret Circle Annies kann Annies geheime Botschaft zu entschlüsseln. 976 00:48:01,720 --> 00:48:05,872 Denken Sie daran, Annie auf dich. 977 00:48:05,872 --> 00:48:08,670 Legen Sie Ihre Stifte bis B2. 978 00:48:08,670 --> 00:48:11,000 Hier ist die Botschaft. 979 00:48:11,000 --> 00:48:12,335 12, 11, 2 - 980 00:48:12,335 --> 00:48:14,670 >> -Ich bin in meinem ersten geheimen Treffen. 981 00:48:14,670 --> 00:48:19,720 >> -25, 14, 11, 18, 16 - 982 00:48:19,720 --> 00:48:21,650 >> -Pierre war in der großen Stimme heute abend. 983 00:48:21,650 --> 00:48:24,830 Ich könnte sagen, dass die heutige Nachricht war wirklich wichtig. 984 00:48:24,830 --> 00:48:26,400 >> -3, 25. 985 00:48:26,400 --> 00:48:28,540 Das ist eine Nachricht von Annie sich. 986 00:48:28,540 --> 00:48:30,086 Denken Sie daran, es niemandem sagen. 987 00:48:30,086 --> 00:48:34,370 988 00:48:34,370 --> 00:48:38,710 >> -90 Sekunden später, ich bin in der nur noch Zimmer in dem Haus, wo ein Junge von neun 989 00:48:38,710 --> 00:48:42,668 konnte in der Privatsphäre und decodieren zu sitzen. 990 00:48:42,668 --> 00:48:47,628 Aha, ging B. ich zum nächsten. 991 00:48:47,628 --> 00:48:53,060 E. Das erste Wort ist "sein." S. Es war leichter, jetzt kommen. 992 00:48:53,060 --> 00:48:54,980 U. 25. 993 00:48:54,980 --> 00:48:55,940 Das ist R. 994 00:48:55,940 --> 00:48:56,900 >> -Komm, Ralphie. 995 00:48:56,900 --> 00:48:57,860 I gotta go. 996 00:48:57,860 --> 00:48:59,780 >> -Ich werde gleich runter, Ma. 997 00:48:59,780 --> 00:49:01,030 Herrje. 998 00:49:01,030 --> 00:49:04,300 999 00:49:04,300 --> 00:49:08,220 >> -T. Achten Sie darauf, O.. 1000 00:49:08,220 --> 00:49:09,500 Achten Sie darauf, was? 1001 00:49:09,500 --> 00:49:11,660 Was war Little Orphan Annie versucht zu sagen? 1002 00:49:11,660 --> 00:49:12,844 Achten Sie darauf, was? 1003 00:49:12,844 --> 00:49:14,732 >> -Ralphie hat Randy muss gehen. 1004 00:49:14,732 --> 00:49:16,148 Würden Sie bitte kommen? 1005 00:49:16,148 --> 00:49:17,092 >> In Ordnung, Ma. 1006 00:49:17,092 --> 00:49:18,510 Ich komme gleich sein. 1007 00:49:18,510 --> 00:49:20,270 >> -Ich war immer näher an jetzt. 1008 00:49:20,270 --> 00:49:21,823 Die Spannung war schrecklich. 1009 00:49:21,823 --> 00:49:23,045 Was war es? 1010 00:49:23,045 --> 00:49:26,510 Das Schicksal des Planeten kann hängen in der Schwebe. 1011 00:49:26,510 --> 00:49:28,985 >> -Ralphie, Randys Gotta Go. 1012 00:49:28,985 --> 00:49:32,680 >> -Ich werde direkt aus für crying out loud. 1013 00:49:32,680 --> 00:49:33,956 >> -Fast da. 1014 00:49:33,956 --> 00:49:35,140 Meine Finger flogen. 1015 00:49:35,140 --> 00:49:36,880 Mein Geist war ein Stahl-Falle. 1016 00:49:36,880 --> 00:49:38,010 Jede Pore vibrierte. 1017 00:49:38,010 --> 00:49:39,878 Es war fast klar. 1018 00:49:39,878 --> 00:49:43,210 Ja, ja, ja, ja, ja. 1019 00:49:43,210 --> 00:49:49,030 >> -Achten Sie darauf, Ihre Ovomaltine trinken. 1020 00:49:49,030 --> 00:49:50,280 Ovomaltine? 1021 00:49:50,280 --> 00:49:53,980 1022 00:49:53,980 --> 00:49:55,230 Ein miesen Werbespot? 1023 00:49:55,230 --> 00:49:58,572 1024 00:49:58,572 --> 00:50:00,694 Son of a bitch. 1025 00:50:00,694 --> 00:50:01,900 >> [END VIDEO PLAYBACK] 1026 00:50:01,900 --> 00:50:04,260 >> Sprecher 1: Dies ist CS50, und dass Problem wird sein Set Zwei. 1027 00:50:04,260 --> 00:50:06,305 Wir sehen uns nächste Woche. 1028 00:50:06,305 --> 00:50:08,800 >> Sprecher 2: An der nächsten CS50, geschieht dies. 1029 00:50:08,800 --> 00:50:11,060 >> Sprecher 1: So ein Thema haben wir nicht sah so weit ist 1030 00:50:11,060 --> 00:50:12,220 dass der Zeiger auf Funktionen. 1031 00:50:12,220 --> 00:50:14,540 Nun, das ist eine Funktion Zeiger nur die Adresse eines öffentlichen 1032 00:50:14,540 --> 00:50:17,000 Funktion, sondern ähnlich wie - 1033 00:50:17,000 --> 00:50:18,250 Sohn von a - 1034 00:50:18,250 --> 00:50:19,670