[Musikwiedergabe] Sprecher 1: Dies ist CS50 und Dies ist der Beginn der zweiten Woche. Also, lassen Sie tauchen rechts in etwas, das ist fehlerhaft, so zu sprechen. So, hier ist mehr als CS50 IDE und ich habe zog im Voraus diese screen-- verdammt es. Spoiler Alarm. Gut. Ich habe mir diesen Bildschirm hier gezogen wird, die einen sehr einfaches Programm. Wenn wir nach unten scrollen, die meisten dies ist nur Kommentare, aber hier in den Zeilen 13 bis 17 haben wir ein Programm. Es ist syntaktisch gültig, das heißt, wenn Ich kompilieren, wird es kompilieren und ausführen, aber es ist fehlerhaft. Dieses Programm behauptet, in den Kommentaren up top, dass es 10 Sterne zu drucken, aber es nicht tut. Und basierend auf Ihrer Erfahrung, oder bald Erfahrungen mit C, können Sie logischerweise zu erkennen Deshalb ist dies in der Tat, Buggy? Ja? Publikum: Es geht von Null bis 10. Das ist 11 Iterationen. Sprecher 1: Ja. Also, es ist von Null gehen nach oben durch und gleich 10, was natürlich 11 Iterationen. Also, es ist zu gehen Druck in der Tat 11 Sternen. Also, die Informatik-Konvention in den meisten Programmiersprachen ist in der Tat nur um Zählen beginnen bei Null, aber zählen bis zu, aber nicht durch die Wert, den Sie wirklich interessieren. Nun, dies ist eine Sache, dauert ein wenig gewöhnungsbedürftig und sogar Kratzer, entworfen, wie es ist für Nicht-Programmierer oder Nicht-Computer Wissenschaftler und für Kinder weitgehend, ist so konzipiert, haben Sie beginnen zu zählen in der Regel an einem. Und das ist in Ordnung. Sie können absolut Zählen beginnen an einem, wenn das ist noch komfortabler. Und zählen Sie bis und bis 10, aber Sie werden erkennen, besonders in dieser Woche und darüber hinaus, dass nur so viele Dinge in der Programmierung davon ausgehen, dass 0 die erste stelligen, mit denen Sie zu zählen, dass Sie gehen, es leichter zu finden sind nur um in diese Gewohnheit Ausgangs erhalten von null und zum Zählen bis zu einem Wert Sie interessieren gerade jetzt von der erhalten zu gehen. So, das ist festgelegt, dass. Wir änderten die kleiner oder gleich zu knapp. Werfen wir einen Blick auf ein zweites Beispiel. Also, auch behauptet, dieses Programm in seiner kommentiert up top, dass es zu drucken sollte zehn Sterne, aber es funktioniert nicht. Was ist der Fehler hier? Also, what-- und sorry, lassen Sie uns klar sein. 10 Sterne. Eine pro Zeile, aber es funktioniert nicht. Also, in der Tat, lassen Sie mich gehen Sie vor und kompilieren dieses, weil es ein bisschen weniger Löschen basierend auf dieser Beschreibung. Lassen Sie mich in unser Quellverzeichnis zu gehen. Machen buggy einen Punkt Schrägstrich, Buggy ein. OK, ich sehe, 11 Sterne, die ist nach wie vor problematisch, aber sie sind auch alle in einer Zeile. Was ist das Problem hier? Ja. ZIELGRUPPE: [unverständlich]. Sprecher 1: Ja. Das ist also eine Feinheit, die Sie erinnere mich machen kurze Erwähnung. Auch wenn alles gut aussieht hübsch, und es ist schön eingerückt, und es sieht Scratch-like in dieser Leitung 16 und 17 sind, Tatsächlich eingerückt darunter for-Schleife. Das ist unwesentlich. Der Computer funktioniert nicht wissen oder sehen Leerzeichen. Weißraum ist nur für uns Menschen, stilistisch. Der Computer kann wissen, wann Sie haben geschweiften Klammern, dar, der, in der Tat, dieses Problem zu beheben. Also, wenn wir in ging tatsächlich und in diesen geschweiften Klammern explizit setzen das wäre dieses Problem zu beheben, indem macht deutlich, an den Compiler dass ich ausführen möchten eigentlich zwei Codezeilen wieder, wieder und wieder. Aber was ist die grundlegende Erklärung? Recht? Wir wissen nicht genau brauchen geschweiften Klammern die ganze Zeit, obwohl es wahrscheinlich am besten Praxis in diese Gewohnheit sowieso obwohl es zwei fügt Zeichen, um Ihren Code. warum? ZIELGRUPPE: [unverständlich]? Sprecher 1: Ja, das ist also eine andere Lösung überhaupt. Recht? Vor allem, wenn auf den ersten Blick Sie nicht wirklich zu schätzen, was los ist. Gut sicher, wir könnten tun Sie zwei Dinge auf einmal und vermeiden Sie nur das Problem überhaupt. Und das ist in Ordnung, aber jetzt, für heutige Zwecke, was ist die Erklärung für den Fehler? Warum waren alle diese Sterne auf einer Linie? Ja? Publikum: Es scheint, dass, wenn Du hast eine Zeile Code, können Sie es ohne diejenigen tun kann. Sprecher 1: Genau. Dies ist nur eine menschliche Konvention. Die Menschen erkennen, dass es eine wenig ärgerlich oder mühsame In den geschweiften Klammern haupt stellen zu müssen der Zeit, wenn alles, was Sie tun möchten, ist auszuführen, eine Zeile Code. Also entschied Menschen einige Zeit her, dass das ist in Ordnung. Wenn Sie alle Ihre Schleife setzen wollen nur auf diesem eine Zeile wie diese, das ist in Ordnung mit der Single Semikolon am Ende. Sie können jedoch nur eine solche zu tun Linie ohne den geschweiften Klammern. Also, wenn CS50 Styleguide so werden Sie darauf hinweisen, Sie, denn in der Regel zu sehen Es ist gute Gewohnheit um in diese zu bekommen, bis Sie recht komfortabel verirrte von dieser Art von Konventionen und sein eigenes Ding. So lange, wie Sie sich selbst im Einklang sind. Und wir werden mehr darüber zu sprechen Stil ein wenig im Laufe des Tages. Also, lassen Sie mich eröffnen ein anderes Programm. Natürlich sollten wir ändere den 10 als gut. Lassen Sie mich gehen Sie vor und schreiben Sie eine echte Schnellprogramm, das ich nennen, lassen Sie uns sagen, dot Schleife C. So, dot Schleife C. Und in Schleifenpunkt C werde ich haben, sind Standard-I / O- dot H int main nichtig. Und jetzt lass uns einfach zu tun, in der Tat, eine Schleife. So, 4 int I erhält Null. I weniger als etwa 50. Ich und, und. Und dann lassen Sie uns hier gehen Sie vor und weiß drucken F. Und dann möchte ich zu drucken I und eine neue Linie, Strichpunkt. Und dies sollte alle drucken Zahlen von null bis 50? Ein paar Kopf nickt. Einige nos. Was ist schon die Wanze? Was ist der einfache Fehler, den ich gemacht? Ja. ZIELGRUPPE: [unverständlich]. Sprecher 1: Ja. Also auch wenn es aussieht wie das ist, was ich will, daran erinnern, dass ich es auch nur ein ASCII-Zeichen. Also, wenn ich sage, print "I." Es ist buchstäblich gehen I. So drucken, wenn ich möchte Plug-in-Platzhalter Wert ich eigentlich dies tun müssen und dann die Plug-in- Wert von I dynamisch. Ansonsten bin ich gerade dabei, erhalten 50 I auf dem Bildschirm. Also, lassen Sie mich gehen Sie vor und machen diese Schleife, führen Sie es, und in der Tat, wir haben alle der Weg nach oben durch 49. Und wenn ich einen Bildlauf in der Zeit zurück Ich sehe, die Zahl Null am Anfang. Nun, was ist, wenn ich irgendwie vermasseln? Was passiert, wenn ich das tun? Nur weil ich denke nicht. Was ist das Programm. Sobald erneut kompiliert und ausgeführt, gehen, um logisch zu tun? ZIELGRUPPE: Nichts. Sprecher 1: Nichts. Warum ist das so? ZIELGRUPPE: I ist für Null ausgelegt. So ist die Bedingung falsch ist. Sprecher 1: Ja, genau. Der gesamte Code korrekt ist, syntaktisch. Dies wird dies zu kompilieren Code ausgeführt wird, aber es ist nicht gehen, um etwas Sinnvolles zu tun weil ich zu initialisieren I auf Null. Wir haben dann zu überprüfen, ist, dass ich mehr als 50? Offensichtlich nicht, ist es nicht. So wird die Schleife nie ausgeführt überhaupt. Was, wenn wir etwas tun, ein wenig leichtsinnig? Also, was ist, wenn wir tun, wie int I erhält Null. Und jetzt lassen Sie mich die während verwenden Schleife, die eine weitere Bedingung war. Und während ich sage, wenn ich größer als oder gleich Null ist, und dann in der hier bin gehen Sie vor und speichern Sie die Datei, stellen Schleife. Und ich bin dabei, sie auszuführen. Was werde ich das zu sehen Zeit mit einer while-Schleife? Ja. Publikum: Eine Endlosschleife? Sprecher 1: Eine Endlosschleife? Ja, und warum? ZIELGRUPPE: Weil es immer Null. Sprecher 1: Ja. Also, ich als Null initialisiert. Selbstverständlich ist, dass ich immer größer oder gleich 0 als Ergebnis. Also, ich bin gerade dabei, sehen dies unendlich. Und nun, dies hat sich sofort zu kommen oder zweimal, um der natürlich Köpfe. Was passiert, wenn Sie haben eine Endlos-Schleife? ZIELGRUPPE: Steuer C. Sprecher 1: Ja. So Steuerung C wird schließlich zu reagieren. Leider haben wir ausgedruckt Millionen und Abermillionen von Nullen schon so dass der Computer Art bekam vor mir. Also, es geht zu ignorieren, mich für ein wenig. Aber wenn Sie nur getroffen Steuerung C ein paar Mal auf Ihrem Mac oder PC-Tastatur, schließlich sollte es tatsächlich zu beenden. Und wenn nicht, werden wir Ihnen zeigen einige Techniken, es dauerte nicht lange, wo Sie kann tatsächlich gewaltsam Programme zu töten, ähnlich wie in Windows und Mac OS, wenn es sein muss. Aber lassen Sie uns versuchen, etwas anderes. Lassen Sie tatsächlich erhöhen I. Ist Diese immer noch unendlich zu sein? Lassen Sie mich dies auszuführen. Und jetzt können Sie Art sehen, was passiert. Auch dies ist eine Endlosschleife. Aber das ist ein bisschen wie eine Fangfrage. Das wird für immer Nummern zu drucken? ZIELGRUPPE: Nein Sprecher 1: No. Warum? Ich habe gehört, einige nos hier. Someone-- Ja. ZIELGRUPPE: Sie haben nicht genug Bits, die wirklich weiterzumachen. Sprecher 1: In Ordnung. Also ich habe nicht genug Bits, um weiterzumachen. Also, was wird passieren? Es ist nur zu stoppen? ZIELGRUPPE: An einem bestimmten Punkt es wird herunter the-- Sprecher 1: Es wird herunter die Schleife nach unten, aber warum? Was wird in die passieren Ganz am Ende seine Grenzen? Ja? Publikum: Es radeln zurück zu negativen Zahlen. Sprecher 1: Um negative Zahlen oder wenn wir nur die Behandlung positiv, Null wenigstens. Also ja, absolut. Daran erinnern, dass wir uns das letzte Mal, dass sah, wenn Sie erhöhen Sie Ihre Bits einmal zu oft, und Sie es Fore Lauf die Kapazität des int oder was auch immer der Datentyp, du bist gehen zu umschlingen, wahrscheinlich, zwei negativen Zahlen. Oder wenn Sie angeben haben, dass Ihr Bereich sollte nur positiv sein, was Sie tun können, aber wir haben nicht so noch nicht gesehen, Sie könnten zumindest wieder auf Null enden. Obwohl, eigentlich ja. In diesem Fall negativ Zahlen, wobei die Schleife wird beendet da I nicht in der Tat größer als oder gleich Null, wenn es negativ ist. Also leider, wie lange müssten wir warten? Im Moment haben wir vorhaben was, 2 Millionen-ish? Wir sind wie 2 Milliarden, wir werden warten müssen bis wir tatsächlich sehen, dieses Symptom. Aber wir können es ein wenig schneller zu sehen, maybe-- mal sehen, ob wir unterbrechen kann. Komm schon. Auch die Menüs langsam erscheinen. Gut. Also, wir zurückkommen, bevor lang. Es ist eine gute Zeit-- es verdammt, Welpen. Es ist eine gute Zeit für ein paar Ankündigungen. Also, wenn du Dich in YHack engagieren, dem ein Ereignis sein wird von unseren Freunden an der Yale gesponsert. Und in der Tat, einige der Kurs des TFs in Yale beteiligt sind mit diesem. YHack ist eine internationale Hack-a-thon gehostet und hielt an der Yale, die Zusammenführung 1500 Gleichgesinnten Hacker und alle Kreativen der ganzen Welt. Wenn dies von Interesse ist, nehmen Sie hier einen Blick. Wenn dies zu kurz auf die Bildschirm, einen Blick auf den heutigen Dias für die URL für yhack.org. Also, auch ein paar schnellen Ankündigungen. Also, offiziell Abschnitte beginnen nächste Woche hier und New Haven. Denken Sie daran, werden Sie immer ein E-Mail später an diesem Wochenende sehr wahrscheinlich. Es dauert lange für CS50 Abschnitt, bei all den Menschen in der Klasse und alle bewegen. Und all die Lehre Fellows ' Zeitpläne werden auch noch verfestigen, sondern für eine E-Mail, und wenn notwendig bleibt dran werden, können Sie re-Abschnitt dort nach. Study.cs50.net. Also, auch wenn Sie eine Konstante Teilnehmer sind an Abschnitten, erkennen, dass fast alle der Ressourcen verwenden wir in den Abschnitten sind CS50 öffentlich verfügbar Studieren Sie an dieser URL hier. Also, wenn Sie jemals eine Überprüfung erneut Material aus dem Abschnitt, oder lesen Sie die Zukunft, oder Sie können nicht machen es einige Wochen, erkennen, dass Probenobjektträger, und Probleme, und Definitionen, und mehr sind auch dort. Bürozeiten wieder heute, und morgen, und am Mittwoch, und Donnerstag überprüfen Sie den Kurs des Website für den Zeitplan. Und auch jetzt starten heute CS50 diskutieren. Also, wenn, und wenn Sie Fragen haben, einander oder für das Personal der natürlich und sind in der Regel Arbeits auf einigen Problem-Set, erkennen, dass Sie nicht unbedingt tun, müssen für das menschliche nächsten Einschalten. Wenn es niemand gibt, können Sie erreichen heraus zu uns und Klassenkameraden online über CS50 diskutieren. So ist dies eine Diskussion Bord für den Kurs, und erkennen, dass diese ist vielleicht das beste Ort zu starten, wenn Sie Fragen, wenn außerhalb der Bürozeiten insbesondere. Pakete werden zu starten in dieser Woche. Bei Feuer und Eis [Unverständlich] in New Haven. Schauen Sie sich den Verlauf des Website auszuwerten, um RSVP. Wer zuerst kommt, mahlt zuerst dafür. Wenn Sie nicht in dieser Woche zu erhalten wir werden diese am jeden Freitag zu tun während der Laufzeit. OK, und nun ein Wort über Einstufung. Zumal wir Probleme geben set on, das in dieser Woche heraus ist, und Problem setzen zwei und danach. Wie können wir über die Auswertung P Sätze gehen und die Bewertung der Qualität davon? Also, es ist vier Achsen, die wir in CS50, und sie sind diese vier hier. Umfang, der auf einem numerischen einfängt Grundlage, wie viel von dem P-Set haben Sie zu bewältigen. Es entspricht in etwa mit Anstrengung, und es ist unsere Art der Erfassung haben sie versucht, die Hälfte der P gesetzt, alle von der P-Set. Dies ist ein einfach ein perfekter zu werden Werte auf, wenn Sie tun, in der Tat, versuchen, jeden Aspekt des P-Set. Also, sollte man nicht vergessen. Korrektheit ist genau das. Gibt es in Ihrem Code-Arbeit als die Spezifikation und wie die Angestellten "Probenlösung schlagen vor, dass Sie Ihren Code sollte in der Tat, zu arbeiten. Prüfen Sie 50, wenn man es nicht erreicht haben doch ist in einem P-Spezifikation festgelegt und wird in der Regel geben Ihnen ja / keine Antwort darüber, ob der Code richtig ist. Zumindest so weit, wir gehen um es auf Grund der Prüfungen auswerten dass wir laufen innerhalb dieses Programms. Design ist mehr subjektiv. Dies ist, wie gut geschrieben ist Ihr Code. Und das ist etwas, Sie werden besser mit der Zeit zu bekommen, und es ist etwas, dass wir bieten mehr qualitative Feedback auf. Und nach Design ich könnte es dauerte nicht lange, dass Sie vielleicht in einigen P versucht sein gesetzt, um etwas loopingly tun, sondern vielleicht drei oder vier, oder fünf verschachtelten Vordergrund Schleifen oder verschachtelt, während Schleifen. Dass in der Regel sollte starten, um Sie zurückschrecken und würde in der Regel sein als schlechtes Design. Und Sie beginnen, in der Klasse sehen und aus der Klasse gute Möglichkeiten, Dinge zu tun, schlechte Wege, Dinge zu tun, dass vielleicht alle richtig sein, aber nicht unbedingt gut gestaltet. Wie das Schreiben eines Aufsatzes. Möglicherweise können Sie Wörter auf ein gesetzt sein Seite, die grammatikalisch korrekt sind, aber der Aufsatz oder die These sie sind nur völlig inkohärent oder nicht überzeugend. Und damit könnte der analogen in die sein schriftliche Welt der schlecht oder gut Design. Und Style, auch das ist ziemlich subjektiv. Aber zumindest erwarten wir Konsistenz. Dies ist, wie hübsch ist Ihr Code. Sind die Dinge schön eingerückt? Sind Ihre Variablen auch mit dem Namen / Sind alle Ihrer Klammern und geschweifte Klammern ausgerichtet sind, wie sie sein sollte? Wir haben eine CS50-Styleguide als das Problem Set wird Sie am Punkt. Diejenigen, bequemer sind Willkommen, zum von der streun so lange, wie Sie sich selbst konsistent sind. Und auch dies ist eine Lektion wir werden im Abschnitt zu verstärken. Also, wenn das alles war ein wenig schnell, realisieren die P-Set und Sektionen wird schon bald mehr in die Tiefe zu gehen. Aber im Allgemeinen haben wir sehr wenige Schaufeln CS50. Scores sind in der Regel auf einer Skala von 2.59 oder 4.59. Wir sind literally-- und ich kann nicht sagen, Reicht das in der ersten Woche. Drei ist gut. Also, auch wenn, ja, drei von fünf normalerweise, mathematisch, könnte ein 60 Prozent oder wie ein D minus sein. Drei ist in der Tat gut. Und in der Tat zu erwarten die meisten Schüler in der Klasse um starten den Begriff zu zweit, zu dritt, und Vieren. Wahrscheinlich nicht so viele Fünfer. Nicht zu viele Einsen. Aber in der Regel zu starten in dass Sweet-Spot in der Kurve so daß, wenn die Zeit fortschreitet, es gibt tatsächlich Raum für, und Chancen für die oberen Progression. Also, bitte nicht gleichsetzen mit drei 60% liegen. Es ist viel abstrakter als das. Die Formel, mit der wir berechnen Noten wird wie folgt gewichtet. Korrektheit lohnt sich am meisten. Design lohnt sich ein bisschen weniger. Stil lohnt sich ein bisschen weniger. Und dies in der Regel erfasst die Zeitspanne das geht in immer jeweils dieser Achsen genau richtig. Stil ist super einfach, sollte super schnell sein, aber es ist eine einfache Gewohnheit zu faul zu. Korrektheit aussehen könnte Sie die meisten der Zeit. Jagd nach etwas bug Macht nehmen, dass zusätzliche Stunde oder mehr, und so weiter, das Punkte letztlich erfasst, dass. Und so, jetzt ein ernster Wort. Seit CS50 hat der Unterscheidung, für eine bessere oder zum Schlechten, des Seins vielleicht besser kennen mit Fragen der akademischen Ehrlichkeit als die meisten jedem anderen Kurs. Und in der Tat ist es nach meinem Wissen, dass senden wir mehr Studenten leider zu disziplinarischen Zwecken jedes Jahr als Folge. Also, im Interesse der vollen Offenlegung, lassen Sie uns kurz zu sprechen über, was an in CS50, und was Sie tun können, und was Sie bewusst sein kann. So, hier seit 2007, als Ich erbte den Kurs, ist die Anzahl der Ad Vorstands Fällen. Ad Board ist Harvard Disziplinar Körper oder jetzt Honor Counsel, , auf die Fälle bezeichnet, wenn Schüler, etwas zu tun, dass der Kurs der Lehrplan hält unvernünftig. Es gibt keinen wirklichen Muster hier, würde ich sagen. Es schwankt über die Jahre, aber im Allgemeinen dies ist die Anzahl von Fälle, die bezeichnet werden. Die Zahl der Studierenden , die beteiligt sind? Auch sie variiert. In der Regel im letzten Jahr für Beispiel 29 Studenten an der Harvard- waren Ad Boarded, so zu sprechen. Von denen 29 Studierende, zwei von ihnen vor Studenten, WHO-Kooperations wurden in einigen unerwünschte Art und Weise. Und dann in Bezug auf die Prozentsatz, ist es in der Regel etwa 3% der Klasse, leider macht diese Art von Entscheidungen. Also, im letzten Jahr war es 3,5% der CS50 der Studentenschaft das war Ad Boarded, so zu sprechen. Also, was bedeutet all das? Und was machen wir eigentlich? Also, für die vollständige Offenlegung, wir absolut, als Informatiker, haben Software-Tools zur Verfügung und es ist für uns sehr einfach, in Fairness, Das ist anderen Klassenkameraden, die nicht Überqueren Sie diese Zeilen zu überqueren vergleichen jede Vorlage in diesem Jahr gegen jeden Vorlage für den letzten acht Jahren. Software tut dies. Und letztlich ist es menschlichen Augen, die entscheiden, ob oder ob nicht, einige beziehen Rolle für die weitere Rechtssprechung, aber Software hilft sicherlich. Und das, ehrlich gesagt, weshalb ich denke, dass Wir haben so großer Zahl in CS50. Es ist nicht, weil CS50 Studenten oder CS Studenten mehr sind in der Regel nicht weniger ehrlich als alle anderen Studenten, es ist nur, wir haben die Werkzeuge und Techniken , mit dem dieser erste Durchgang zu nehmen. Aber wir halten ein Auge Auf all diese Dinge sowie wiederum im Interesse der in Anerkennung der Arbeit, die gesetzt ist in von einem Super-Mehrheit der Klasse. Und der Kurs Politik auf akademische Ehrlichkeit, auch wenn es eine Reihe von Absätzen lang mit einem Bündel von Kugeln die hoffentlich sind gut lesbar, es wirklich einkochen, vernünftig zu sein. Und das beste Faustregel, dass bieten wir innerhalb des Lehrplans ist dies das Wesen aller Arbeiten, die Sie unterwerfen sich diesem Kurs müssen Sie Ihre eigenen. Und zwar in fast alle, genannten Fällen für Disziplinarmaßnahmen es, weil einige Studenten spät war Nacht in der Regel eingeschaltet sein oder ihr Code über geradezu zu einem Klassenkameraden, die dann nahm er in seiner Gesamtheit oder deutlich davon. Aber wirklich, das ist OK. Und in der Tat, im Büro Stunden, die Zettel Sie übergeben worden waren, wenn Sie mit Büro kam Stunden letzte Woche ermutigt, so viel. Sie haben völlig begrüßt und gefördert Problem Sätze mit Klassenkameraden zu diskutieren. Um sich gegenseitig zu helfen, wenn stolpern. Aber in der Regel die Faustregel sollte sei es, ", wenn Sie um Hilfe bitten, Sie können Ihren Code, anderen zu zeigen, aber Sie können nicht sehen können ihre. " Also, mit anderen Worten, wenn ich mich kämpfen mit einigen P-Set und ich sitze da in der Speisesaal oder in der Bibliothek, oder im Klassenzimmer versuchen, einige Fehler zu finden, Ich kann sicherlich zeigen mein Code auf meinem Bildschirm um die Sitznachbarn mir sicher das Personal, sondern auch ein Klassenkamerad. Aber wenn die Lösung, mein Klassenkamerad bietet ist, oh, hier nur einen Blick auf das, was Ich habe, dass die Linie überquert. Und ich würde es wagen, sagen, das ist in der Regel eine vernünftige Sache für die meisten Menschen sehr einfach vor Ort die Linie. Und so finden Sie im Syllabus für mehr Details. Und nun zu den mehr umstrittensten Aspekte der CS50 Lehrplan, dass ich dachte, ich würde zum Schluß hier zu sprechen ist die sogenannte Bedauern Klausel. So, hier ist das Kleingedruckte. Aber im Allgemeinen haben wir gesehen, in den letzten 8 Jahren sowie dass in der Tat fast alle CS50 ist Fälle von akademischen Unredlichkeit waren das Ergebnis von nur schlechte Entscheidungs ​​spät in der Nacht. Das Ergebnis von Stress, ist das Ergebnis der Mangel an Ernährung, Mangel an Schlaf, zu viele P-Sets, zu viele Fristen, zu viele Verpflichtungen. Stress Aufbau in einer 2.00, 3.00 Uhr, 04.00 Uhr, mit einer Frist droht. Die meisten Studenten in diesen Fällen haben gerade schlechte Entscheidungen getroffen daß sie sehr wohl bedauern die Am nächsten Morgen, wenn nicht Minuten später, aber bis zum letzten Jahr gab es keine Ablassventil, dass diese Schüler konnten tatsächlich eröffnen, um tatsächlich die Adresse Problem Kopf auf, ohne Angst, von der Hochschule gebootet insgesamt. Und in der Tat haben wir Dieses Bedauern Klausel im letzten Jahr, die besagt, dass, wenn innerhalb von 72 Stunden, drei Tage, überqueren eine Linie im Lehrplan vorgeschriebenen Sie vorne kommen, um eine der Verlauf der Köpfe und wir werden einen Chat über sie haben. Es gibt immer noch einige Ergebnis entgegen, was wurde das Gegenteil ausgewiesen. Es gibt noch einige Ergebnis, ist umsetzbare durch den Verlauf, Nullstellung Regel eine P-Set oder sich eine andere Aktion, aber wir werden in der Tat, hand es selbst und nicht beziehen sie höher waren das Ergebnis vielleicht viel schwerer. Und in der Tat, zu teilen, was passiert im vergangenen Jahr, in den acht Jahren, und jetzt neun Jahren der Unterricht des Kurses und nach dem Basteln mit verschiedenen Drehknöpfe, Drehen verschiedenen Skalen in den letzten mehrere Jahre auf die akademische Ehrlichkeit, und zu sehen, nach den Daten ohne ersichtlichen Auswirkungen, auch von Reden wie diese, Dies war mit Abstand das Beste, was wir pädagogisch eingeführt seit acht Jahren zusammen diese Linien in CS50. 19 Schüler meldeten sich unter dieser Klausel im letzten Jahr. Wir haben keine Maßnahmen zur sieben dieser Studenten, Bestimmen, dass sie unnötig Sorgen. Sie waren nicht in der Tat eine Grenze überschritten, aber es war ein gutes Gespräch, um dennoch zu haben. Wir genullt 11 der Punkte daß eingereicht. Und in einem Fall wir fragten ein Studenten, um ein Problem zu tun gesetzt. Aber mehr überzeugende, ehrlich gesagt, mit diesen 19-Chats, die Art und Weise mehr als ich erwartet haben, wobei jeder von ihnen 10 Minuten, um vielleicht eine Stunde lang, brachte auch um eine Reihe von Fragen in Bezug auf Licht familiäre Probleme, Freund Fragen, Fragen der psychischen Gesundheit dass wir dann engagiert, mit den Studenten Segen, wohnhaft dean, oder Freunden, oder jede andere Zahl der Support-Ressourcen. So dass dieses war mit Abstand eines der besten Einsatzmöglichkeiten unserer Zeit und einer der Interventionen. Mit dieser sagte, es hatte keine Eingang auf der Erfassungsrate über akademischer Unehrlichkeit im Allgemeinen. Und ich wage zu behaupten, diese Teilmenge Studenten im letzten Jahr war eine demographische, dass wir zuvor noch nie identifiziert und hatte noch nie mit vor verbunden. Und so wurden diese wunderbare Erfolgsgeschichten auch wenn sie ans Licht gebracht wurden in weniger als optimalen Bedingungen. Also, denken Sie daran, wie Sie zu machen, vielleicht, einige schlechte Entscheidung selbst spät in der Nacht, dass es den Rückgriff so lange wie die Schüler in dieser Situation besitzen und nach vorne zu kommen, so dass wir diese Art von Chat und mit ihr umgehen in einer Weise, dass die Bildungs ​​ist, und dann können wir es hinter uns am nächsten Tag. So ohne weiteres, nehmen Sie die edge off dieses Gesprächs, der Grund, die Welpen sind up ist nur um das Eis für einen Moment zu brechen. Und leider sind sie alle entschlafen, aber was angeblich hier geschehen war jeder sollte Ehrfurcht und Art der Entspannung nach, dass sehr schwere Gespräch. Aber anscheinend habe ich die Welpen in den Schlaf. Aber wenn Sie CS50 gehen Website Strich Welpen, Sie können sie den ganzen Tag lang zu beobachten. Besonders vielleicht 2.00 oder 03.00 oder 04.00 Uhr in der Nacht ein wenig Stressabbau dort zu sehen. Das ist also Slash Welpen. Gut. War das nicht lustig? OK. Also, bis zu einem gewissen Computer wieder Wissenschaft, wenn ich darf. Also, erinnern daran, dass wir das letzte Mal gestartet suchen nicht nur am Main, die war die Standardfunktion, die bei grüne Flagge geklickt Äquivalent, aber wir auch kurz begonnen Schreiben einige unserer eigenen Funktionen. Und bisher keine dieser Funktionen haben sich als besonders groß oder fleischig gewesen. Sie werden in solche größeren erhalten Funktionen wahrscheinlich, P set 2, P 3 festgelegt, auf jeden Fall P set 4 und weiter. Gerade jetzt die meisten Ihrer Programme, wenn nicht alle von ihnen, natürlich für P Satz 1 kann vollständig im Haupt erfolgen. Wenn Ihr Programm nur fünf Linien, 10 Linien, sogar 20 Zeilen lang, perfekt vernünftig, es zu schreiben alle in Haupt und nicht um komplizierte Über Ihren Code, aber das, was wir heute tun und weiter versucht, auch präsentieren einige gute Design-Techniken so dass, wenn Ihr Code bekommt mehr kompliziert und wie die Probleme Sie lösen wollen, und noch härter werden interessanter Sie, Art, die Werkzeuge in der Toolbox, mit der gute Lösungen zu denen entwerfen. Also, lassen Sie uns einen kurzen Blick zurück auf dieses Programm von meinem letzten Woche, die war Funktionen Nullpunkt C. Und feststellen, dass, ganz einfach, es sieht aus wie dies mit zwei Funktionen, Haupt- und Druck Namen. Und wieder zurück oder vielleicht denken, Reverse Engineering heute was war die Motivation für die Einführung eine Funktion in Zeile 28 aufgerufen, Druck Name? Oder was war das ein Beispiel für die in Bezug auf ein Prinzip oder Lieferservice, wenn du würdest. Einige Geräusche. Was? Ja, so Funktionale Dekomposition ist eine Art, die andere Art zu sagen, zersetzen sich Ihr Programm in ihre Bestandteile und dann die Teile verwenden eine ganze zubauen. So auch ist, dass nur eine Art der einen Schluck schon, aber das ist vielleicht sogar besseres Beispiel für etwas, gerade angerufen Abstraktion. Recht? Abstraktion wird einer sein, der wiederkehrende Themen in CS50 und Informatik allgemeiner da es eine Technik, mit der Sie lösen können Probleme effektiver, weil Sie können Lösungen mehr schreiben intuitiv und in einer Weise, die skaliert und ist von anderen Menschen verständlich. Was mache ich damit? So, wohl ist es viel besser lesbar zu einem Programm wie folgt aussehen, Super Kurz obwohl es. Wenn Sie in Zeile 22 sehen, dass es eine Funktion aufgerufen, Print Namen. Dieser Name allein sagt, was sie tut. Diese Funktion nimmt offenbar Eingangs zwischen seinen Klammern, und anscheinend etwas tut, Vermutlich gibt den Namen. Und so, obwohl wir unbedingt haben könnte das getan, was wir getan haben vor einer Woche, die war nehmen Sie nur diese aktuelle Code-Zeile, bekommen die Befreiung von diesem, und erhalten die Befreiung von diesem alle zusammen, wir Art abstrahiert entfernt der Begriff Drucken eines Namens. Es ist mir egal, wenn Sie Druck def sind. Es ist mir egal, wenn Sie eine Prozent S und ein Backslash N. Diese sind unglaublich undurchschaubaren Details. Was ich kümmern uns um als Programmierer einen Namen Druck. Und so was könnte besser sein, das zu tun als durch den Aufruf einer Funktion, Print-Name? Und so war eine der Motivationen, dass für so etwas zu tun. Erstellen Sie den Code besser lesbar und mehr wiederverwendbar, und auch weitgehend selbsterklärend. Nun, lassen Sie uns einen Blick bei einem anderen Beispiel, Welche Funktionen war, die wir hier über hatten. Also, das ist eine vielleicht noch geboten, als in diesem Fall Ich möchte nicht nur einen int zu erhalten. Ich möchte eine positive int zu erhalten. Und es zeigt sich eine positive um int Sie eine Reihe von Beinarbeit zu tun haben. Recht? Es ist nicht einfach eine Zeile rufen Sie wie Print Name war, Das ist zwar weniger zwingend. Um eine positive int zu bekommen, logically-- lassen Sie mich zurück nach unten scrollen, um dies zu verbergen. Was hast du zu tun? Wie alle Werkzeuge, die wir im Moment sind Dinge wie Druck def von Standard Bibliothek und auch von CS50-Bibliothek Wir haben Holen Sie Int und Erhalten Float, Holen Sie sich Lang Lang, Get String, aber die einzige, Germane, ist im Moment Holen Int. Also, wenn das einzige Werkzeug, das Sie haben in Ihren Werkzeugkasten ist Erhalten Sie Int, wie gehen wir über die Implementierung gehen es positive int bekommen? ZIELGRUPPE: Erstellen Sie ein Protokoll und überprüfen ab, ob die Eingabe, die sie gaben positiv war oder nicht. Sprecher 1: Perfect. Genau. Ein weiteres Werkzeug, das wir in haben unsere Toolbox von ein oder zwei Wochen vor ist nur der Schleifenkonstrukt. Und so, ja, wenn wir eine Weile, Schleife oder ein Do While-Schleife oder eine Vordergrund Schleifen wir wahrscheinlich weg konnte mit einem der unter in irgendeiner Form. Wir können den Begriff der get umsetzen positive int nur mit Hilfe Holen Sie Int, und dann nur halten sie ruft wieder und halten Sie bedrängen den Benutzer bis er oder sie tatsächlich gibt uns, was wir wollen. Und nun, dies Abstraktion des Prozesses des Erhaltens einer positiven int in eine Funktion mit dem Namen Erhalten Positive Int ist ein wenig mehr überzeugende, weil sieh dir das an. Diese sind wie 10 plus Codezeilen, werden in immer eine positive int beteiligt, und ich weiß nicht wirklich, wie Sie es tun. Meinetwegen ist, dass man kann es tun, und so habe ich versteckt all die Details hinter ein Funktion namens Get Positive int, dass, In der Tat hat hierzu while-Schleife. Und sehen Sie in der vergangenen Woche für die Syntax gibt, aber es ist einfach erklärt, N, und es druckt die Anweisung an den Benutzer. Er fordert Erhalten Sie Int und dann überprüft er dieser Zustand wieder und wieder, wieder, bis der Benutzer zusammenwirkt. So, jetzt, einige Plausibilitätsprüfungen. Für diejenigen, die vielleicht vertraut mit etwas Programmierung, Deshalb wird N erklärt, warum muss ich erstellen N außerhalb des do while-Schleife? Warum ist es in Zeile 29 und nicht auf, wie 33, zum Beispiel. ZIELGRUPPE: Weil, wenn Sie erklären draußen, es Art mehr, den größeren scope-- Sprecher 1: Gut. ZIELGRUPPE: --und, wenn Sie erklären, es innerhalb der Schleife, [unverständlich] weil sie nicht darüber wissen. Sprecher 1: Genau. Wenn ich simplify-- können es ist eine Frage des Umfangs. Und Bereich bezieht sich auf den Kontext, in die eine variable bestehendes oder nutzbar. Und das Schöne Faustregel gilt hier, dass in der Regel, wenn Sie erklären, oder erstellen eine Variable können Sie nur es im Inneren der am nächsten umarmt geschweiften Klammern. Also, was bedeutet das? Wenn ich stattdessen rückgängig machen und gehen Sie mit etwas, das ein wenig einfacher anfühlt. Recht? Zeile 32 sieht einfach sauberer zu mir jetzt. Ich mache beides auf einmal und dann die Zuordnung die rechte Hand auf die linke Hand. Das Problem ist nun basierend auf daß Definition des Anwendungsbereichs daß N in Zeilen verwendet werden 31 und 32 innerhalb dieser Schleife aber wo die von dieser Festlegung es kann nicht verwendet werden? Im Einklang was? Ja. ZIELGRUPPE: 35. Sprecher 1: 35. Auf jeden Fall nicht 35. Und auch dort, wo sonst? ZIELGRUPPE: 34. Sprecher 1: Selbst 34 problematisch, weil es außerhalb der geschweiften Klammern. Und so in der Tat wollen wir mal sehen, was passiert. Recht? Dies könnte ein wenig scheinen intuitive oder auch nicht, aber mal sehen, was die Compiler zu sagen hat, wenn Wir gehen in die heutige Quellverzeichnis. Machen Sie eine Funktion. Oh mein Gott. Nun, ich endlich fertig dass durch die Art und Weise. Gut. Und was ist das Problem hier? Sehr geheimnisvollen, zu betrachten. Aber hier ist, was ich typed-- Schliesser ein. Hier ist, was induzierte zu machen, das ist eigentlich Verwendung der Compiler-Klang mit einigen dieser Flags dass wir uns wieder sehen, es dauerte nicht lange. Und wieder sehen immer bei der ersten Fehler weil es einfach nur vielleicht eine kaskadierende bedeutungslos Wirkung auf andere Linien. Also, was das bedeutet, ist, dass die Problem ist, in Funktion 1.c. Es ist auf der Leitung 32. Und es ist in Spalte oder Charakter, 13. Also, wenn Ihr Texteditor, der kann Ihnen helfen, festzustellen, wo das Problem ist. Also, wenn ich nach oben, was ist die Leitung 32? Das ist in der Tat diese eine das ist bereits markiert Recht hier-- unbenutzte Variablen n. Aber es ist nicht ungenutzt. Ich benutze sie. Aber der Compiler verwirrt, weil es existiert nur innerhalb dieses Umfangs. Und so kann ich nicht verwenden Sie es hier. Ich kann es nicht benutzen hier. Und der Compiler deshalb nicht einmal für nötig, dass ich versuche. Es scheint, unbenutzt innerhalb seiner tatsächlichen Umfang. So können wir den Umfang zu erweitern, indem Sie genau das, was wir begonnen mit-- int n. Und obwohl dies nicht der Fall aussehen, als elegant, vielleicht, und wir nehmen eine zusätzliche Zeile Hier, jetzt ist es im Rahmen überall. Also lassen Sie uns noch einmal versuchen. So stellen Sie eine Funktion. Nett. Und jetzt, wenn ich, wenn ich keine Funktion ein, geben wir sie negativ 10, negativ 1, 0, 1, und es funktioniert tatsächlich. So gibt es eine andere Lösung. Weißt du was? Was ist, wenn ich wirklich ringen mit diesem? Ich weiß nicht, wo die n angenommen hat, um zu gehen. Weißt du was? Ich werde einfach um es alle Weg an der Spitze meiner Datei hier. Was würde dies tun, denken Sie? Ja? ZIELGRUPPE: [unverständlich]. Sprecher 1: Ja. Also habe ich es global gemacht, so zu sprechen. Wenn Sie eine Variable haben, die außerhalb ist alle Ihre Funktionen, die zulässig ist, und der Code sollte kompilieren und n wird nun zugänglich sein, nicht nur in get positive int, sondern auch in die main-- ist ein wenig beunruhigend, weil es bereits ein n im Haupt, um so mehr, auf, dass in nur einem moment-- aber dies würde als schlechtes Design werden. Gut. Wenn Sie haben, um zurückzugreifen so etwas wie, oh, ich werde nur stellen Sie sie hier, weil der Code scheint zu kompilieren ist in der Regel nicht die beste Praxis. Eher Sie wählen möchten der möglichst engen Rahmen für Ihre Variablen, was bedeuten würde, gehen mit unseren ursprünglichen Entwurf, der ist hier richtig. Jetzt Nebenbei bemerkt, wenn Sie es haben, eine gleichnamige Variable hier, die Art und Weise behandeln würde c this-- obwohl dies nicht zu geschehen often-- ist, dass dies noch völlig in Ordnung hier. Aber diese Definition von n im Einklang 22 wird die globale einen Schatten. Also das wird man in Arbeit Haupt und das global tatsächlich anzuwenden, wenn du bist bekommen positive int Aber mehr dazu ein anderes Mal, aber nur für diejenigen neugierig. Also kurz gesagt, beheben wir diese hier. Jetzt lassen Sie uns necken neben zwei anderen Stücken bevor wir an eine letzte Zeile des Codes in diesem Programm. Holen Sie sich positive int. Auf der linken Seite von sein Wort ist das Wort int. Was soll das bedeuten, denken Sie? Bisher haben wir vor allem sehen nichtig. Ja? Publikum: Es ist die Art von Variable, die Sie über fragst. Sprecher 1: Ja, es ist die Art von, lassen Sie mich nicht sagen, variabel, aber die Art der Wert daß ich frage wieder für. Und in der Tat, das ist, Hier intuitive, hoffentlich. Recht? Wenn Sie ein erhalten möchten positive int, was ist es, Ihnen wollen, dass die function-- wie unsere Freiwillige aus der vergangenen Woche an Sie zurückgeben ein Stück Papier mit einem int auf sie? Und so haben wir festgelegt haben, dass die sogenannte Rückgabetyp dieser Funktion ist erhalten positive int. Wenn wir nicht wollen, dass es Rückkehr nichts, Sie sagen, nichtig. Wenn Sie wollen, dass er zurückkehren ein String, Sie sagen, String. Wenn Sie wollen, dass er zurückkehren einen Schwimmer, Sie sagen, float. Aber das einzige, das hier gilt logischerweise, denn ich bin mit get int, obwohl ich sie darauf zu beschränken positive Werte, ist es, einen int zurück. Also umgekehrt, was bedeutet es, , dass es eine Lücke in Klammern? Was bedeuten die Klammern in der Regel zu definieren? Ja? Publikum: Es bedeutet, dass die Funktion nicht wirklich bekommen es. Sprecher 1: Es bedeutet, dass die Funktion nicht wirklich bekommen, was? Publikum: Ein Eingang. Sprecher 1: Ein Eingang, was auch immer. So in der Tat, wenn Klammern Hier legen Sie fest, Leere, das bedeutet nur, ich will nicht jede Eingabe. Ich werde mit dem Problem selbst umzugehen. Und in der Tat, müssen Sie nicht auf sagen, bekommen positive int nichts. Du gerade gesagt, erhalten positive int, und dass Funktion erlischt und nicht sein Ding. Aber es ist schon ein kleiner Trick Ich habe die hier spielen die ganze Zeit um sicherzustellen, dass dieser Code kompiliert. Beachten Sie, dass int-- positive bekommen int void-- ist in Zeile 27. Aber aus irgendeinem seltsamen Grund scheinbar es ist auch hier auf der Leitung 16. Und nur für eine gute Maßnahme werde ich wiederholen Dies also ist es vollkommen identisch. Und ich gesagt habe Prototyp mit ein wenig einzeiliger Kommentar. Was passiert, wenn ich löschen Sie das, und Jetzt erneut machen Funktion 1, eingeben. Whoops. Warte eine Minute. Wo ist meine Rechnung? Nicht wahr? Stehen zu. Schließer 1. Da gehen wir. OK. Hatte nicht richtig gespeichert. Also, ich glaube, es ist ein wenig Bug hier, wo ich bin mir nicht Sehen Sie auf die Registerkarte Namen im Moment. Also, was ist denn hier los? Implicit declaration of function bekommen positive int ist ungültig in C99. So verwirrend erneut. Also, was ist dies ein Hinweis auf? Nun stellt sich heraus, dass C ist ziemlich dumm. Nun, es ist die Programmierung Sprache oder vielmehr der Compiler. Er weiß nur, was Sie haben, lehrte es, und es ist nur gehen, um etwas zu wissen wenn Sie es vor unterrichtet. Mit anderen Worten, in Haupt im Moment, ich bin versucht, eine Funktion aufrufen genannt bekommen positive int. Aber der Compiler nicht geht zu bemerken, dass zu bekommen positive int vorhanden ist, bis Zeile 26. Und so, was der Compiler tut, ist nur Fehler, sobald es wird an die Leitung 17, sagen implizite Deklaration bekommen positive int, die ist nur eine andere Art zu sagen, ich weiß nicht wissen, was zu bekommen positive int ist leer. Andere Sprachen wie Java und Python und Ruby könnte nach vorne schauen. C nicht. Und so ist die Art, wie wir beheben dies ist eine von zwei Arten. Entweder man, wenn das Problem ist, dass zu bekommen positive int noch nicht gesehen worden, Nun, lassen Sie mich nur verschieben Sie es an die Spitze. Das würde das Problem beheben. Aber im allgemeinen ist es als bessere Technik auf Ihre Hauptfunktion zumin setzen top, so dass ein Mensch das Lesen Ihres Codes weiß, was das Programm macht, weil Haupt nicht alle begraben die Art und Weise an der Unterseite oder in der Mitte. Es ist an der Spitze. So dass nicht das Gefühl, ideal. Und Sie tatsächlich bekommen können in Situationen, in denen wenn man Funktionsaufrufe eine andere, die ein anderes fordert, Sie in ein Problem bekommen kann, wenn weder kann über dem anderen zu gehen, logisch. Es ist einfach nicht möglich. Und so der Weg zur Arbeit um dieses ist nur nehmen Signatur der Funktion, so zu speak-- die erste Zeile, wo es declared-- und einfach kopieren, fügen Sie sie am top, aber nicht mit dem lockigen braces-- nur mit einem Semikolon. Es ist wie ein kleiner Hinweis von dem, was noch kommen wird. Und in der Tat, die gesamte Zeit, wenn wir haben Dinge wie Standard io.h gesehen und cs50.h in ähnlicher Weise in jene dot h-Dateien gibt es andere Prototypen. Und wir werden sehen, dass es dauerte nicht lange. Also kurz gesagt, wenn Sie ein Programm haben, in einer Datei mit mehreren Funktionen Neben Haupt Sie fast immer wollen, um sie zu erklären nur über deren erste Linie, gefolgt von einem Semikolon, ganz am Anfang der Datei. Das war viel auf einmal. Irgendwelche Fragen? Irgendwelche Fragen? Gut. Also machen wir weiter, dann so etwas wie Husten. Oh. Wie passend. Gut. Husten. Also hier ist ein c Durchführung eines Programms wir haben neulich in Scratch, die sehr einfach gerade sagt Husten, Husten, Husten. Gut. Und jemand sagte, ein paar Tage her, dass es ein Weg der Reinigung diesen Code up bereits. Gut? Sobald Sie das Kopieren sind und Einfügen wahrscheinlich schlechtes Design. Mindestens einmal wir vier oder fünf zu erhalten oder 20 Husten, fühlt es schlechte Praxis. Wir halten gerade kopieren, einfügen. Was ist die offensichtliche Lösung Reinigungs dieses Programm auf? ZIELGRUPPE: Loop. Sprecher 1: Ja. So verwenden Sie eine Schleife. Und wir können eine for-Schleife verwenden, eine Weile, Schleife, eine beliebige Anzahl von Ansätzen. Und in der Tat, das ist was wir tun in Version hier. Ich habe es statt umgeschrieben in der Version eines cough.c nur Husten innerhalb einer for-Schleife. In Ordnung, aber es gibt eine Gelegenheit jetzt Art von Anfang an um diese ein wenig mehr wie zu entwerfen die Lektion vor einem Augenblick unterrichtete uns, welche this-- nehme an, dass ich es um eine Funktion namens Husten zu schaffen, Betrachten wir für einen Moment was es aussehen würde. Also, wenn ich etwas will husten, ich muss nur zur Druck f innerhalb der Funktion zu verwenden. Und in der Tat bin ich. Und in der Tat, dies alles Zeit, wann immer Sie sind Druck etwas zu der Bildschirm ein Programmierer nennen würde, dass ein Nebeneffekt. Es ist nicht mir Gabe zurück jemanden ein Wert. Es hat mich unter eine Aktion das könnte optisch klar sein. Aber diese Funktion Husten, bedeutet es zurückgeben alles auf der Grundlage seiner ersten Zeile? Nein, weil der Rückgabetyp ist nichtig, was bedeutet nur, es ist mir nicht die Übergabe nichts zurück. Es könnte etwas tun, visuell, aber es hat mich nicht übergeben Rücken ein Stück Papier, wie letzte Woche. Braucht es jede Eingabe? Nein. Und so ist es auch hier nichtig. So auch das ist Art von Over-Engineering dieses Problem. Recht? Ich habe das Programm mehr hergestellt komplexer, Codezeilen, Ich habe es nicht gemacht irgendwelche funktionaler, aber diese würde ein Sprungbrett sein, vielleicht für eine breitere Zusammenhang mit komplizierteren Code. Aber was ist das? Was habe ich done-- nur einem Blick auf dies, ohne auf das Kommentar an der Spitze des file-- was haben Ich grundsätzlich hier mit meinem Husten getan Implementierung, die anders ist? Ja, auf der Rückseite? ZIELGRUPPE: Machen Sie es, so dass Sie haben ein Zeichen auszuschalten. Sprecher 1: Ja. Also das fühlt sich ganz nett. Recht? Es ist wie das Hinzufügen einer Funktion, um Ihre Programm oder Ihre Funktion, in diesem Fall. Es gibt immer noch nichts. Es könnte eine visuelle Nebeneffekt haben, denn es ruft Druck f. Aber jetzt habe ich parametrisiert die Funktion, die bedeutet, dass ich angegebenen genommen haben Eingang vom Typ int und nennen es n, aber ich konnte es nennen, was ich will. In der Tat könnte es nur sein, Mal noch mehr explizit sein. Und dann konnte ich ändern Sie einfach das hier. Aber der Punkt ist, dass dieses ist, wie ich Erstellen Sie eine Funktion, die Eingabe nimmt. Und wenn Sie wieder zu spiegeln durch in einem vielleicht Online- der zu durchschreiten, die vierte und letzte Husten Beispiel Sie werden hier feststellen, ich habe generali mein Code further-- Art von abstrahierten sie weiter. Wie Husten und Niesen, sind beide etwa aus wie etwas sagen oder machen eine Art von Sound. Speichern wäre der Scratch entsprechenden Blocks. Und so, was ich in dieser Version haben, die wir nur einen Blick auf, ist Husten ist wie zu sagen, [COUGH], husten, und mittlerweile ist Niesen wie wenn man sagt, [Achoo]. Und so habe ich generali die Umsetzung dieser mittlerweile Umsetzung Diese generische Funktion, sagen, was interessant ist, für heutige Zwecke nur, weil es immer noch hat keinen Rückgabetyp. Aber wie viele Eingänge hat es? ZIELGRUPPE: Zwei. Sprecher 1: Zwei. Und so, wenn Sie wollen nehmen Sie in zwei Argumente, nur trennen Sie diese durch ein Komma. Und wenn Sie dann möchten rufen Sie diese Funktion, feststellen, dass Sie nur rufen Sie sagen, zitat, unquote, für das erste Argument, gemeinsame n, für das zweite Argument. Also noch einmal, nur haben wir jetzt die Bausteine, damit wir tatsächlich implementieren einige unserer eigenen Funktionen. Gut. Irgendwelche Fragen zu diesen? So, jetzt wollen wir abziehen eine Schicht, wenn ja. Und das Ziel letztendlich ist nächste Woche Problem Set wird am cryptogrophy-- sein die Kunst des Scrambling-Informationen. Und zwar die Informations haben Sie ver- oder entschlüsseln wird zu Text sein. Und so diese Art von Einladungskarten die Frage, wie heute auch, was sich unter der Haube mit Text über ASCII von Woche null, Und wie können wir tatsächlich beginnen, es zu manipulieren? So, hier ist Zamyla Name. Und in Text, der eingegeben werden kann in wie der String-Funktion. Und ab jetzt, wenn Sie ein zu sehen String wie this-- Z-A-M-Y-L-A-- anfangen, der es, als ob jeder dieser Zeichen ist in einer Schachtel mit ihren besitzen. Und in der Tat, in einer Woche oder so ist Zeit, wobei jeder dieser Kästen wird sehr spezifisch darstellen ein Block von memory-- einen Bissen von Speicher. Also jeder dieser Briefe, Letztlich werden 8 Bits darzustellen. Und wir tatsächlich sehen, was los ist auf unter der Haube in meinem Computer. Aber es genügt nicht nur um zu sehen Zamyla durch diese Linse, wobei jede der diese Briefe in seiner eigenen Box. Und schön genug, in C können wir Zugriff auf jede dieser Boxen direkt. Also, wenn Sie, um den ersten zu bekommen möchten Buchstaben ihres Namens, super einfach in C. Wenn Sie die letzte erhalten möchten Brief, super einfach und mit einem Stück neue Syntax. Also werde ich weiter in die CS50 gehen IDE und öffnen Sie die Zeichenfolge Nullpunkt C. Und in diesem Beispiel hier gibt es ein paar neue Dinge geht. Also zuerst in Zeile 19, haben wir sehen diese before-- get String. Also nur als eine schnelle Plausibilitätsprüfung, wenn jemand verbal bieten bis ein Laie Erklärung was los ist in Zeile 19. Wie fast übersetzen diese in Englisch, dass eine Mitbewohner nicht CS50 vielleicht zu verstehen. Ja. ZIELGRUPPE: Haben Sie die Eingabe des Benutzers ein String und speichern sie in einer Variablen s. Sprecher 1: Gut. Haben die Benutzereingabe einen String und speichern Sie es in einer Variablen s. Das ist großartig. Usw. der rechten Seite rufen wir get String. Das gibt einen Wert das hat nicht zugewiesen werden von der rechten Seite zur linken Seite in eine Variable namens s, das ist entwickelt, um eine Zeichenfolge zu speichern. Genau. So, jetzt die Linie 22, pro der Kommentar in Zeile 21, offensichtlich druckt die Zeichenfolge ein Zeichen pro Zeile. Aber wie? Also zunächst einmal, initialisieren wir I 0. Und wie können wir dann zu bekommen, das Ende der Zamyla Name? Nun, am Ende des Zamyla Name, konnte ich manuell in das letzte Zeichen eingeben ihr Name irgendwie, oder die Anzahl von ihr. Recht? Wenn wir zurück hier-- Z-A-M-L-- Y-L-A-- so konnte ich geben. Was ist der Index der Zamyla letzter Brief? Wenn dies 0-- sprechen wie a programmer-- 0, 1, 2, 3, 4, 5, Ich heard-- so in der Tat, den letzten Buchstaben in Zamyla Name ist der sechste, aber wenn wir zählen von 0, es wird Nummer 5 zu sein. So sollte man das im Hinterkopf hier. Es stellt sich heraus gibt es eine Funktion in C genannt strlen und wieder in den Tag und bis heute immer noch, eine Menge von Programmierern wählen, um Namen für die Synchronisierung ihrer Funktionen, wie die Worte klingen sie versuchen zu sagen. So strlen ist String-Länge. Und so was würde String Länge S zurück, wenn Zamyla ist der Eingang? Publikum: Fünf. Sprecher 1: Z-A-M-Y-L. Six. Recht? Was ist die Länge der Zamyla Name? Recht? Und in Wirklichkeit sechs Buchstaben. Recht? Und was bedeutet das für unsere Schleife das? Wir werden aus gehen 0 bis zu sechs, die wird uns fünf Iterationen zu geben. Was machen wir bei jeder Iteration zu tun? Nun, Prozent C, jemand erriet den anderen Tag, bedeutet einen Platzhalter für was? ZIELGRUPPE: Char. Sprecher 1: Nur ein char. So dass eine einzelne character-- nicht mehrere Zeichen wie eine Saite. Und dann ist hier die neue Linie dass wir haben Ausdrucken. Und dann ist hier die neue Syntax. Wenn Sie zum Ausdrucken der i-ten wollen Zeichen im String S, sozusagen Sie können einfach sagen, dass die Name der String S, und öffnen Sie dann eckige Klammer, und dann geschlossen eckige Klammer, mit einem i die Mitte. Und es ist ganz nett, dass es sieht wie ein Quadrat genau wie die Plätze, in denen die Zamyla Zeichen existieren auf diesem Bild gibt. Also, wenn ich tatsächlich laufen diese Jetzt wollen wir sehen, was passiert. Machen String 0 slash dot String 0, und dann bin ich werde in Zamyla Namen eingeben. Es gibt keine Eingabeaufforderung, weil ich nicht verwenden Druck f, aber das ist in Ordnung. Ich weiß genau, was zu tun ist. Und in der Tat, gibt es aus Zamyla Namen, eine pro Zeile. Lassen Sie uns nun ein wenig leichtsinnig. Nehmen wir an, ich wusste nicht, strlen zu und ich dachte, Alles in Ordnung, niemand wird ein Baby haben nennen größer als wie 50 Zeichen. Fahren wir fort und kompilieren Sie diese und führen Sie es und geben Sie dann in Zamyla erneut. Logisch, was dass Programm werde versuchen, zu drucken? Z-A-M-Y-L-A dann wie 45 unbekannten Byte Speicherplatz. Und in der Tat, wir kommen wieder zu dieser Idee des Speichers. Aber nur logisch, wenn Zamyla Name ist diese lange, nach dem Bild hier, was wir sagen wird halten Druck, halten Druck, halten Drucken, halten Druck, halten Druck, den ganzen Weg bis zum 50. Charakter, die wer weiß, was passieren wird. Lassen Sie uns also tatsächlich einen Blick. Lassen Sie uns geben Zamyla. Interessante. Wir hatten Glück. Nur eine ganze Reihe von Leerraum. Oh. Es gibt eine flippige Charakter. Es sieht aus wie eine Art von seltsamen Frage Markieren Sie es, aber es gibt Zamyla Name. Lasst uns wirklich leichtsinnig. Wie wäre es mit uns ausdrucken 500 Blöcke ins Unbekannte? Lassen Sie uns gehen Sie vor und machen diese als auch und dann erneut ausführen. Und lassen Sie Vollbild, weil wir brauchen, um mehr Platz zu sehen. Zamyla. Bekam wieder Glück. Trauen wir mehr leichtsinnig? Lassen Sie uns mehr leichtsinnig. 50.000 Zeichen. Das ist wahrlich keine gute Idee. Gut. Machen String 0. Dies wird unser letztes Demo sein. Zamyla. Ugh. Ugh. OK. Also mein Gedächtnis ist wirklich leer ist gerade jetzt, Das ist eigentlich ganz praktisch. Was ich versuche, alles in Ordnung zu bekommen zu--. Und jetzt bin ich gerade dabei rücksichtslos zu bekommen. 500.000. Make-- wir Vollbild-it. Enter. Zamyla. Da gehen wir. Ich habe keine Ahnung, was das ist, aber es klingt schlecht. Gut. Und in der Tat, bald, wenn Sie unter bist die wenigen Glücklichen in der Bürozeiten und bei der Problem eingestellten Sie könnte sehr gut diese Begegnung. Segmentation fault tatsächlich haben eine gut definierte Bedeutung. Es bedeutet, irgendeine Art von Fehler in einem Segment des Speichers. Und in juristischer Hinsicht, es bedeutet, dass wir berührt memory-- wir in meinem Computer verwendet RAM dass ich nicht den Zugang zu haben. Und das ist, was sowohl leistungsstark und auch gefährlich über C ist, dass Sie tatsächlich haben ungehinderten Zugang auf die Gesamtheit des Arbeitsspeichers Ihres Programms oder Bytes oder RAM, genauer. Also auch wenn Zamyla Name nur sechs Zeichen lang, Ich kann immer noch irgendwohin zu gehen im Speicher ich will. Und nebenbei, wenn Sie schon immer einige Artikel lesen im Laufe der Jahre über einige Server oder einem Programm Anfang gesprungen oder gehackt, das ist ausgenutzt etwas rief ein Pufferüberlauf zu nutzen, dass wir tatsächlich reden über in ein paar Wochen, das ist, in der Regel unter Bezugnahme auf irgendwie austricksen ein Computer in gut geht über die Grenzen der Speicher dass es haben sollte, und etwas saftige finden dadurch memory-- ein Kennwort vielleicht ein Weg Umgehung einige Seriennummer zu überprüfen, oder einfach nur in der Regel in der Lage zu überlisten Sie den Computer ausgeführt wird Code, der nicht beabsichtigt war. Aber zurück gekommen, um Realität für einen Moment wobei dieses Programm mit strlen umgesetzt, und stellen eine Sache hier oben. Was ist neu unter diesen Top drei Linien? So String dot h. Es stellt sich heraus gibt es diese Bibliothek mit dem Namen String-Punkt H, oder der String-Bibliothek, deren Header-Datei, so zu sprechen, ist String dot h, die mir Zugang zu dieser strlen-Funktion. Wenn ich weglassen, dass ist der Compiler gehen, um mich in irgendeiner Form zu schreien. Aber wissen Sie was? Nun lasst uns wirklich nuanciert. In Zeile 22, gibt es etwas Art von inefficient-- schlecht konzipiert, arguably-- über diese Codezeile. Denken Sie zurück an, wie for-Schleife durchgeführt werden und welche Schritte noch einmal passieren, und immer again-- der Initialisierung der Zustand, den Code, der wird ausgeführt, dann die Schrittweite oder die Änderung, dann ist die Bedingung, dann wird der Code, dann ist die Änderung, dann die Bedingung, dann wird der Code, wird die Änderung, und so weiter. Also, was ein wenig sein könnte Besorgnis erregend oder schlecht hier getan? Ja, in blau. ZIELGRUPPE: strlen ist genannt viele, viele Male. Sprecher 1: Ja. So nennt man strlen viele Male, aber was ist die Länge der Zamyla Namen der erstmals die Schleife ausgeführt? ZIELGRUPPE: Sechs. Sprecher 1: Sechs. Nun, was ist die Länge ihres Namens das zweite Mal der Code ausführt? ZIELGRUPPE: Sechs. Sprecher 1: In Ordnung. Es ist immer noch sechs. Recht? Zarla Name hat nicht verändert, auch wenn ich bin auf der Suche nur ein Teil der Buchstaben in ihren Namen. Und so ist die Tatsache, dass ich effektiv diese Frage, was ist die Länge der Zamyla, was ist die Länge von Zamyla, was ist die Länge der Zamyla, sechs verschiedene Zeiten oder sieben selbst ist einfach nur dumm, denn das ist unveränderlich, dass Antwort. Und so, was ich konnte tatsächlich zu tun ist, this-- in einem String Ich habe ein wenig besser Version finden Sie hier. Sind-- whoops-- String zwei Ich habe eine geringfügig bessere Version, wobei Ich this-- zu tun und nicht nur Initialisierung i auf 0, I auch mit einem Komma deklarieren Sie eine zweite Variable n-- ich nicht haben, um int noch einmal sagen. Ich sollte nicht, in der Tat. Aber ich sage n. Und dann zu initialisieren I n den die Strlen von n, so dass nun wie oft hat strlen erhalten insgesamt ausgeführt? Nur einmal. Und dies ist, was wir meinen früher über besseres Design. Eigentlich, wenn Ihr Code korrekt ist, zurückgeht und durch das Denken, ich bin mit so wenig Speicher oder als einige Sekunden oder Millisekunden Rechnerzeit als möglich, irgendein Problem zu implementieren? Und ich werde, um zu blättern und nur erwähnen, dass es diese Erwähnung von null in dieser Version aber wir werden darauf zurückkommen, bevor lang. Denn jetzt, lassen Sie uns einen Blick an, wohin das führt uns zu führen. Eines stellt sich heraus, dass jetzt, wo wir die Möglichkeit haben, bei einzelnen Zeichen suchen, können wir etwas nutzen von Woche 0, die sehr obskur war und Art uninteressant zu der Zeit. Aber jetzt, und insbesondere, wenn wir bekommen, um in einer Woche Kryptographie, es wird ziemlich mächtig. Es stellt sich heraus, dass bei einigen Daten types-- ints und schwimmt und Zeichen und Zeichenketten und andere things-- einige von ihnen kann sehr leicht in eine andere umgewandelt werden. Zum Beispiel, wenn wir sprachen über ASCII einiger Zeit ago-- hier die Großbuchstaben A durch M, Punkt, Punkt, dot-- wir gesagt, dass es ein Mapping zwischen diesen Buchstaben und Zahlen. Und in der Tat gilt, für Kleinbuchstaben als auch. Kleinbuchstaben a ist 97, der Hauptstadt eine ist 65. Und es gibt eine Zahl in ASCII, Das ist gerade diese Zuordnung System für all die anderen Buchstaben. Also, was bedeutet das? Nun, ich werde weiter und offener gehen up echte schnell etwas namens ASCII 0, von denen die meisten Kommentare. Und wieder Online können Sie immer Blick durch die Kommentare. Und werfen Sie einen Blick, was dies tun wird. Also ist es eine Hauptaufgabe hat. Ich habe hart codiert die Zahlen gerade für Jetzt, da ich weiß, was ich tue. Ich weiß, was ich will, hier zu sehen. Und ich habe ich auf 65 initialisiert. Und ich zähle bis durch 26 Briefe insgesamt. Und was soll ich Drucken eine Zeile zu einem Zeitpunkt, wenn Sie interpretieren kann Dieses markierte Zeile? Was wird gedruckt? Ja. ZIELGRUPPE: Wirst um den Brief zu drucken, entspricht der Karte der Brief-Wert und Integer-Wert? Sprecher 1: Genau. Ich werde den Brief ausdrucken entsprechend dem ganzzahligen Wert, und umgekehrt, wie folgt. Gut, das jemand vorher gesagt, ist nur ein Platzhalter für einen char. Es ist immer noch. Dies ist natürlich ein Platzhalter für eine int-- nicht eine neue Linie. Und nun feststellen, meine erste Wert, Ich Einstecken für diesen Platzhalter ist nicht nur I. bin ich sagen, in Klammern, char I, die der in Klammern char sagen dem Compiler, behandle ich nicht so wie es ist, die eine Reihe ist. Behandeln Sie es als eine tatsächliche Charakter. Während der zweite Wert ich Einstecken in-- I-- sollte nur eine Zahl sein. Also, wenn ich dieses program-- kompilieren so ist dies machen ASCII 0, dot Strich ASCII 0-- bekomme ich nur dieses handliche kleine Diagramm, zeigt mir alle möglichen Mappings, ohne daran zu denken durch oder es heraus auf meinem eigenen. Und ich bin auch Ausdruck, beachten Sie die Kleinbuchstaben, weil ein paar Zeilen später, habe ich auch ausdrucken diese Zuordnung als auch, was gerade ist sagen, dass wenn Sie verstehen, was los ist unter die Haube, können Sie konvertiert automatisch hin und her. Und in der Tat, wenn jemand von euch immer tat dies in der Grundschule oder über jemanden gehört, mythisch, die eine Note und der Übergabe an seinen oder ihren Freund in der Klasse, aber Sie kletterte die Briefe wie A wird B, und B wird C oder etwas komplizierter als das, na ja, wie würden Sie gehen Umsetzung, dass als Kind? Nun, Sie nur irgendwie wissen, A wird B wird B C, aber mathematisch, was das Kind tut? Was haben Sie zusätzlich zu jedem Buchstaben? Effektiv 1. Also, wenn Sie von A nach B zu ändern, das ist, Art wie das Ändern 65-66, die mathematisch bedeutet, fügen Sie einfach 1. Und so, wenn Sie zu implementieren waren dass etwas irreführend Technik Ihre Lehrer in Code, können Sie könnte genau das tun Sie durch Hinzufügen eines einzelnen Buchstaben zusammen. So dauerte nicht lange, wir sind gehen, um, wie wir sehen, können die Vorteile, dass tatsächlich zu nehmen wirklich Gerangel und unscramble Informationen. In der Zwischenzeit wissen, dass wir begonnen haben, um ein paar weitere Bibliotheken vorstellen hier-- die Zeichenfolge ein heute. Und eine sehr hilfreiche Website hoffentlich findest Du heißt reference.cs50.net, die das Lehrpersonal zusammengestellt haben, so dass, wenn Sie wollen schauen, wie strlen Werke, können Sie mit der Eingabe beginnen den Namen der Funktion, Klicken Sie dort strlen, und dann eine weniger komfortable Erklärung wird angezeigt. Oder wenn Sie die offizielle möchten Linux-basierte Erklärung, Sie bequemer klicken oben rechts, und es die gleichen Informationen darstellen, aber in komplexeren Begriffe. Das ist eine nützliche Ressource zu wirklich wissen, was alles tut. Das nächste Mal werden wir zu gehen einen Blick auf Ovomaltine und mehr, und stellen uns vor in der Welt der Kryptographie. Bis dahin werden wir sehen, Sie noch in dieser Woche. Und nun, Colton Ogden. Wir sehen uns am Mittwoch. [Musikwiedergabe] [Musikwiedergabe] Sprecher 1: Was die [PIEPTON] machst du da? Sprecher 1: Ich esse mein Nachtisch? Wie sehen Sie es zu essen? Mit den Händen? [Musikwiedergabe]