[Jouer de la musique] ENCEINTE 1: Ceci est CS50 et ceci est le début de la deuxième semaine. Donc, nous allons plonger dans quelque chose qui est bogué, pour ainsi dire. Donc, ici est CS50 IDE et je l'ai tiré vers le haut à l'avance ce screen-- sacrément ce. Alerte spoil. Bien. Je l'ai tiré vers le haut cet écran ici, qui a un programme très simple. Si nous défiler vers le bas, la plupart de ce est commente juste, mais ici, dans les lignes 13 à travers 17 Nous avons un programme. Il est syntaxiquement valide, qui signifie que si Je compile, il va compiler et exécuter, mais il est buggy. Ce programme prétend dans les commentaires là-haut qu'il doit imprimer 10 étoiles, mais il ne le fait pas. Et sur la base de votre expérience, ou être bientôt expérience avec C, pouvez-vous discerner logiquement pourquoi cela est, en fait, Buggy? Ouais? PUBLIC: Il va de zéro à 10. Voilà 11 itérations. ENCEINTE 1: Ouais. Donc, il va de zéro et à travers égal à 10, ce qui bien sûr est de 11 itérations. Donc, ça va impression, en effet, 11 étoiles. Ainsi, la convention de l'informatique dans la plupart des langages de programmation est, en effet, juste pour commencer à compter à zéro, mais compter jusqu'à, mais pas par le la valeur que vous vous souciez vraiment de. Maintenant, cela est une chose que prend un peu de temps pour s'y habituer et même Scratch, conçu comme il est pour les non programmeurs ou non ordinateur scientifiques et pour les enfants en grande partie, est conçue pour avoir vous commencez à compter généralement à un. Et cela est très bien. Vous ne pouvez absolument commencer à compter à une si cela est plus confortable. Et compter jusqu'à 10 et à travers, mais vous vous rendrez compte en particulier cette semaine et au-delà pour que tout le beaucoup de choses dans la programmation Supposons que 0 est la première chiffres avec lesquels vous comptez, que vous allez trouver plus facilement juste pour entrer dans cette habitude de départ et en comptant à partir de zéro jusqu'à la valeur vous vous souciez de ce moment de la obtenir aller. Donc, ce qui est fixe. Nous avons changé le inférieur ou est égal à un peu moins de. Jetons un oeil à un deuxième exemple ici. Donc, ce programme soutient aussi dans son commente là-haut qu'il doit imprimer dix étoiles, mais il ne le fait pas. Quel est le bug ici? Donc, what-- et désolé, soyons clairs. 10 étoiles. Un par ligne, mais il ne le fait pas. Donc, en fait, laissez-moi aller de l'avant et compile celui-ci car il est un peu moins claire, fondée sur cette description. Laissez-moi aller dans notre répertoire source. Assurez-poussette un slash dot, un Buggy. OK, je vois 11 étoiles, qui est toujours problématique, mais ils sont aussi en une seule ligne. Quel est le problème ici? Ouais. AUDIENCE: [inaudible]. ENCEINTE 1: Ouais. Donc, c'est une subtilité que vous pouvez souviens-moi faire une brève mention de. Même si tout semble jolie, et il est bien en retrait, et ce genre de Scratch regarde comme en ce que la ligne 16 et 17 sont, En effet, en retrait sous que pour la boucle. Voilà immatériel. L'ordinateur ne fonctionne pas savoir ou voir l'espace blanc. L'espace blanc est juste pour nous, les humains, stylistiquement. L'ordinateur ne savoir quand vous avez accolades, ce qui serait, en effet, résoudre ce problème. Donc, si nous sommes allés effectivement et explicitement mis dans ces accolades ce serait résoudre ce problème en qu'il soit clair pour le compilateur que je veux réellement à exécuter deux lignes de code à nouveau, et de nouveau, et de nouveau. Mais quelle est l'explication fondamentale? Droit? Nous ne devons pas strictement Accolades tout le temps, même si elle est probablement le meilleur pratique pour entrer dans cette habitude de toute façon même si elle ajoute deux caractères de votre code. pourquoi? AUDIENCE: [inaudible]? ENCEINTE 1: Ouais alors que ce une autre solution tout à fait. Droit? Surtout si, à première vue vous ne faites pas vraiment apprécier ce qui se passe. Eh bien, nous pourrions certainement il suffit de faire deux choses à la fois et juste éviter complètement le problème. Et cela est très bien, mais maintenant, pour les besoins d'aujourd'hui, ce qui est l'explication pour le bug? Pourquoi toutes ces étoiles étaient sur une ligne? Ouais? PUBLIC: Il semble que si vous avez une ligne de code, vous pouvez le faire sans ceux-ci. ENCEINTE 1: Exactement. Ceci est juste une convention humaine. Les gens se rendent compte qu'il est un peu ennuyeux ou pénible d'avoir à mettre tous les accolades du temps, si tout ce que vous voulez faire est d'exécuter une ligne de code. Donc, les humains ont décidé certains Il ya le temps que ça va. Si vous voulez mettre la totalité de votre boucle juste que sur une ligne de ce type, qui est bien avec le single virgule à la fin. Mais vous ne pouvez faire un tel ligne sans les accolades. Ainsi, lorsque guide de style de CS50 comme on va vous indiquer, vous verrez que, généralement, il est bonne habitude pour entrer dans ce jusqu'à ce que vous êtes égarement très à l'aise à partir de ces types de conventions et de faire votre propre chose. Tant que vous êtes auto cohérente. Et nous parlerons plus le style un peu plus tard aujourd'hui. Alors, permettez-moi d'ouvrir jusqu'à un autre programme. Bien sûr, nous devrions fixer ce 10 ainsi. Permettez-moi d'aller de l'avant et écrire une vraie programme rapide que je vais appeler, disons, boucle dot C. Ainsi, la boucle dot C. Et dans la boucle C point je vais devoir, inclure les E / S standard dot H int void main. Et maintenant, nous allons juste faire, en effet, une boucle. Donc, 4 int Je obtient zéro. I est inférieur à, disons, 50. Je plus, plus. Et puis ici de laisser aller de l'avant et ne imprimer F. Et puis je veux imprimer I et une nouvelle ligne, point-virgule. Et cela devrait imprimer toutes les numéros de zéro à 50? Quelques-uns hoche la tête. Quelques nos. Quel est le bug déjà? Quelle est l'erreur facile, je fait? Ouais. AUDIENCE: [inaudible]. ENCEINTE 1: Ouais. Ainsi, même si il semble comme cela est ce que je veux, rappelle que I est également juste un caractère ASCII. Donc, si je vous dis, print "I." Il est littéralement aller I. imprimer Donc, si je vouloir plug-in un espace réservé valeur En fait, je dois faire ceci puis brancher le valeur de I dynamiquement. Sinon, je vais juste obtenir 50 I est sur l'écran. Alors, laissez-moi aller de l'avant et faire de cette boucle, exécuter, et, en effet, nous avons tous le chemin à travers 49. Et si je fais défiler en arrière, je vois le nombre zéro au début. Eh bien, si je sorte de bousiller? Que faire si je fais cela? Tout simplement parce que je ne pense pas. Quel est ce programme. Une fois re compilé et exécuté, va faire logiquement? AUDIENCE: Rien. ENCEINTE 1: Rien. Pourquoi donc? AUDIENCE: Je est conçu pour zéro. Ainsi, la condition est fausse. ENCEINTE 1: Oui, exactement. Tout le code est correct, syntaxiquement. Cela va compiler, ce code sera exécuté, mais il est pas va faire quelque chose d'utile parce que je l'initialise I à zéro. Nous vérifions ensuite, est que je supérieure à 50? De toute évidence, non, il ne l'est pas. Ainsi la boucle exécute jamais du tout. Que faire si nous faisons quelque chose un peu plus téméraire? Donc, si nous faisons comme int Je obtient zéro. Et maintenant, permettez-moi utilise le tout boucle, ce qui était une autre condition. Et tandis que je dis, alors que I est supérieur à ou égal à zéro, puis ici je aller de l'avant et enregistrez le fichier, faire boucle. Et je suis sur le point de l'exécuter. Que vais-je voir cette temps avec une boucle while? Ouais. PUBLIC: Une boucle infinie? ENCEINTE 1: Une boucle infinie? Oui, et pourquoi? AUDIENCE: Parce qu'il est toujours zéro. ENCEINTE 1: Ouais. Donc, je est initialisé à zéro. Bien sûr, je reste toujours supérieure supérieure ou égale à 0 à la suite. Donc, je vais juste voir cette infiniment. Et maintenant, cela est arrivé une fois ou deux fois pour les têtes de cours. Qu'advient-il lorsque vous avoir une boucle infinie? AUDIENCE: Contrôle C. ENCEINTE 1: Ouais. Donc contrôle C finira par répondre. Malheureusement, nous avons imprimé sur des millions et des millions de zéros déjà et si l'ordinateur possède genre d'devancé de moi. Donc, il va ignorer moi un peu. Mais si vous appuyez simplement sur quelques-uns de contrôle C fois sur votre clavier Mac ou PC, Finalement, il devrait, en effet, mettre fin. Et si non, nous allons vous montrer quelques techniques avant longtemps où vous peut effectivement tuer force programmes, un peu comme dans Windows et Mac OS, si besoin est. Mais nous allons essayer quelque chose d'autre. Disons fait incrémenter I. Est ce toujours va être infini? Permettez-moi de courir cette. Et maintenant vous pouvez sorte de voir ce qui se passe. Cela, aussi, est une boucle infinie. Mais cela est un peu une question piège. Est ce que cela va imprimer les numéros pour toujours? AUDIENCE: Non ENCEINTE 1: No. Pourquoi? Je entendu des nos ici. Someone-- Ouais. AUDIENCE: Vous ne disposez pas de suffisamment bits pour garder passe vraiment. ENCEINTE 1: Très bien. Donc, je ne ai pas assez bits pour continuer. Donc, ce qui va se passer? Il va juste pour arrêter? Public: À un certain point il arrêtera the-- ENCEINTE 1: Il va fermer le bas de la boucle, mais pourquoi? Qu'est-ce qui va se passer à la fin de ses frontières? Ouais? PUBLIC: Il fera un cycle Retour aux nombres négatifs. ENCEINTE 1: Pour les nombres négatifs, ou si nous étions simplement traiter positif, zéro au moins. Donc, oui, absolument. Rappelons que nous avons vu la dernière fois que si vous incrémenter vos morceaux une fois de trop, et vous y Fore débordement la capacité de votre int ou quel que soit le type de données est, vous êtes aller à enrouler autour, sans doute, deux nombres négatifs. Ou si vous avez indiquez que votre gamme ne devrait être positif, que vous pouvez faire, mais nous avons pas encore vu que, vous pourriez vous retrouver au moins revenir à zéro. Bien que, en fait oui. Dans ce cas, négative numéros, dans ce cas, la boucle est prêt à se terminer parce que je ne suis pas, en fait, Plus grand ou égal à zéro si elle est négative. Donc, malheureusement, comment à long aurions-nous attendre? Actuellement, nous sommes à ce qui, de 2 millions à la rigueur? Nous sommes comme des 2 milliards, nous allons devoir attendre jusqu'à ce que nous pouvons réellement voir ce symptôme. Mais nous pouvons le voir un peu plus vite, maybe-- nous allons voir si nous pouvons interrompre. Allons. Même les menus apparaissent lentement. Bien. Donc, nous allons revenir à ce que avant longtemps. Il est une bonne time-- damn it, les chiots. Il est un bon moment pour certaines annonces. Donc, si vous aimeriez de se livrer à YHack, qui est un événement étant parrainé par nos amis de Yale. Et, en effet, quelques-uns des cours de TF à Yale sont impliqués avec cela. YHack est une organisation internationale pirater-o-thon organisé par et détenus à Yale, réunissant 1500 comme tous les pirates et les créations d'esprit dans le monde. Si cela présente un intérêt, jetez un oeil ici. Si cela est trop brièvement sur le écran, jetez un oeil à des diapositives d'aujourd'hui pour l'URL pour yhack.org. Donc, aussi quelques annonces rapides. Donc, officiellement sections vont commencer la semaine prochaine à la fois ici et à New Haven. Gardez à l'esprit que vous allez recevoir un e-mail plus tard ce week-end le plus probable. Cela prend beaucoup de temps pour CS50 de l'article, compte tenu de toutes les personnes dans le classe et tout le monde à se déplacer. Et tous les Fellows enseignement » horaires sont également toujours solidification, mais restez à l'écoute pour un email et si besoin être, vous pouvez ré-section, il après. Study.cs50.net. Donc, même si vous êtes un participant constant au niveau des sections, se rendre compte que la quasi-totalité des ressources que nous utilisons dans les sections sont accessibles au public au CS50 Étudier à l'adresse ici. Donc, si vous voulez jamais souhaitez ré examen matériau de la section, ou de lire l'avenir, ou vous ne pouvez pas faire quelque semaine, réaliser que les diapositives de l'échantillon, et les problèmes, et les définitions, et plus sont tous là aussi. Les heures de bureau reprennent aujourd'hui, et demain, et le mercredi, et jeudi vérifier le cours de site web pour l'horaire. Et aussi, en train de lancer aujourd'hui est CS50 Discutez. Donc, si et quand vous avez des questions pour l'autre ou pour le personnel de la formation, et sont généralement de travail sur un certain ensemble de problème, réalisez que vous ne le faites pas nécessairement se tourner vers l'homme que vous prochaine. Si il n'y a personne là-bas, vous pouvez tendre la main à nous et camarades de classe Discutez en ligne via CS50. Donc, ceci est une discussion Conseil pour le cours, et de réaliser que ce est peut-être le meilleur point de départ quand vous avez des questions quand à l'extérieur des heures de bureau en particulier. Repas vont commencer cette semaine aussi. A Fire and Ice [Inaudible] à New Haven. Jetez un oeil sur le parcours de site Web afin de confirmer votre présence. Premier arrivé, premier servi pour cela. Si vous ne recevez pas cette semaine nous allons faire ces plus chaque vendredi pendant la durée. OK, et maintenant un mot sur le classement. D'autant plus que nous entrons problème en créer un, qui est sorti cette semaine, et le problème réglé deux et par la suite. Comment allons-nous évaluer P ensembles et évaluer la qualité de celui-ci? Ainsi, il est quatre axes que nous utilisons dans CS50, et ils sont ces quatre ici. Portée, qui capte sur un numérique base juste combien de l'ensemble de P avez-vous abordé. Ça correspond à peu près effort, et il est notre façon de capturer avez-vous essayé la moitié de la P fixer, tous de l'ensemble de P. Ceci est une tâche facile pour obtenir parfaite scores sur si vous le faites, en effet, essayer tous les aspects de l'ensemble de P. Alors garde cela en tête. Exactitude est exactement cela. Est-ce que votre travail de code que le cahier des charges et que la solution de l'échantillon des états-majors suggérer que votre code devrait, en fait, travailler. Vérifiez 50, si vous ne l'avez pas rencontré, il pourtant, est en P mis une spécification et sera généralement vous donner réponses oui / non quant à savoir si votre code est correct. Au moins autant que nous allons Pour évaluer ce basée sur les tests que nous courons dans ce programme. Le design est beaucoup plus subjective. Voici comment bien écrit est votre code. Et ceci est quelque chose qui vous obtiendrez de meilleurs au fil du temps, et il est quelque chose que nous allons fournir une rétroaction plus qualitative sur. Et par la conception que je pourrais dire avant longtemps vous pourraient être tentés dans certains P mettre à faire quelque chose loopingly, mais peut-être d'avoir trois, ou quatre, ou cinq boucles de devant imbriqués ou tout imbriqué boucles. Ce général devrait commencer à faire vous grincer des dents et serait généralement mauvaise conception considérée. Et vous allez commencer à voir en classe et hors de la classe de bonnes façons de faire les choses, mauvaises façons de faire les choses qui pourraient tous être correct, mais pas nécessairement bien conçu. Comme rédiger une dissertation. Vous pourriez être en mesure de mettre des mots sur une page qui sont grammaticalement correcte, mais l'essai ou de la thèse qu'ils sont en est juste complètement incohérente ou pas convaincant. Et ce pourrait être l'analogique dans la monde écrite de bonne ou mauvaise conception. Et de style, aussi, est assez subjective. Mais au moins, nous nous attendons à la cohérence. Voilà comment est jolie votre code. Les choses sont bien en retrait? Sont vos variables bien nommés / Sont tous de vos parenthèses et accolades alignés comme ils devraient l'être? Nous avons un guide de style que CS50 le jeu de problème vous pointer. Ceux sont plus à l'aise bienvenue à écarter de ce que tant que vous êtes auto cohérente. Et cela, aussi, est une leçon nous renforçons dans la section. Donc, si tout cela était un peu rapide, réaliser l'ensemble de P et sections ira plus en profondeur avant longtemps. Mais en général, nous avons très peu de seaux pour CS50. Scores sont généralement sur une échelle de un à trois, ou un à cinq. Nous sommes literally-- et je ne pouvons pas dire ce suffisant dans la première semaine. Trois est bonne. Donc, même si, oui, trois de cinq normalement, mathématiquement, pourrait être un 60 pour cent ou comme un D moins. Trois est, en fait, bon. Et, en fait, nous nous attendons la plupart des élèves de la classe pour commencer le terme autour deux par deux, et trois, et quatre pattes. Probablement pas tant de Fives. Pas trop chers. Mais en général, à commencer dans le point idéal de la courbe de sorte que le temps progresse, il ya effectivement la place pour, et les possibilités de progression supérieure. Alors, s'il vous plaît ne pas assimiler trois avec 60%. Il est beaucoup plus abstrait que cela. La formule avec laquelle nous calculons grades est la pondération suivante. Exactitude vaut le plus. Conception vaut un peu moins. Style vaut un peu moins. Et ce qui est généralement capte la quantité de temps qui va dans l'obtention de chaque de ces axes juste. Le style est super facile, devrait être super rapide, mais il est une habitude facile pour obtenir paresseux à ce sujet. Exactitude pourrait prendre vous la plupart du temps. Pourchassant certains pourraient bug prendre cette heure supplémentaire ou plus, et ainsi, le score en fin de compte que capture. Et donc, maintenant un mot plus grave. Depuis CS50 a la distinction, pour le meilleur ou pour le pire, d'être peut-être mieux au courant avec les questions de académique l'honnêteté que la plupart tout autre cours. Et en effet, il est à ma connaissance que nous envoyons plus d'étudiants, malheureusement, à des fins disciplinaires chaque année à la suite. Ainsi, dans l'intérêt de la pleine la divulgation, parlons brièvement à propos de ce qui se passe dans le CS50, et ce que vous peut faire, et ce que vous pouvez être conscient de. Donc, ici, depuis 2007, lorsque Je hérité du cours, est le nombre de cas de la Commission Ad. Conseil annonce est la discipline de Harvard corps, ou maintenant l'honneur avocat, auquel cas sont renvoyés lorsque étudiants font quelque chose que le cours de syllabus estime déraisonnable. Il n'y a pas motif réel ici, je dirais. Il fluctue au cours de la mais généralement années ceci est le nombre de cas qui sont visés. Le nombre d'étudiants qui sont impliqués? Il varie aussi. Typiquement, l'année dernière pour Ainsi, 29 étudiants à Harvard Ad Condamné étaient, pour ainsi dire. 29 d'entre eux les étudiants actuels, Deux d'entre eux étudiants antérieurs, qui ont été collaborer d'une certaine façon perverse. Et puis en termes de pourcentage, il est généralement d'environ 3% de la classe qui, malheureusement, rend ce genre de décisions. Ainsi, l'an dernier, il était de 3,5% du corps étudiant de CS50 qui était Ad Condamné, pour ainsi dire. Alors, qu'est-ce que tout cela signifie? Et que faisons-nous en réalité? Donc, pour la divulgation complète, nous absolument, comme les informaticiens, avoir des outils logiciels à notre disposition et il est très facile pour nous, en toute équité, camarades de classe de ce que d'autres qui ne sont pas croisement de ces lignes à traverser comparer chaque présentation cette année contre tout la soumission pour les huit dernières années. Software fait cela. Et finalement, il est yeux humains qui décident ou de ne pas renvoyer une certaine Pour plus d'importance arbitrage, mais le logiciel contribue certainement. Et cela, franchement, pourquoi est ce que je pense nous avons un si grand nombre dans CS50. Il est pas parce CS50 étudiants ou CS plus sont généralement pas moins honnête que tous les autres étudiants, il est juste que nous avons le des outils et des techniques qui profite de cette première passe. Mais nous faisons garder un oeil sur toutes ces choses ainsi, à nouveau, dans l'intérêt de reconnaissant le travail qui est mis dans une super-majorité de la classe. Et la politique de cours sur l'honnêteté académique, même si elle est un tas de paragraphes de long avec un tas de balles qui sont, espérons tout à fait lisible, il vraiment ne se résument à être raisonnable. Et la meilleure règle empirique selon laquelle nous offrons au sein du syllabus est présent, l'essence de tous les travaux que vous soumettre à ce cours doit être la vôtre. Et en effet, dans presque tous ceux cas visés par des mesures disciplinaires il était à cause de quelque tard un étudiant nuit généralement tourné son code plus pure et simple à un camarade de classe, qui a ensuite adopté dans son intégralité ou de manière significative de celui-ci. Mais vraiment, cela est OK. Et en effet, au bureau heures, les bouts de papier vous avez été remis si vous êtes venu par le bureau heures la semaine dernière encourage autant. Vous avez absolument saluée et encouragée pour discuter des ensembles de problèmes avec leurs camarades. Pour aider les uns les autres quand achoppement. Mais en général, la règle de base devrait être ceci, "lorsque vous demandez de l'aide, vous pouvez montrer votre code à d'autres, mais vous ne pouvez pas voir le leur ». Donc, en d'autres termes, si je suis aux prises avec un certain ensemble de P et je suis assis là, dans le salle à manger, ou dans la bibliothèque, ou en classe en essayant de trouver quelque faute, Je peux certainement montrer mon code sur mon écran à la personne assise à côté pour moi, certainement le personnel, mais aussi un camarade de classe. Mais si la solution qui mon camarade de classe offre est, oh, ici juste jeter un oeil à ce que Je l'ai fait, qui traverse la ligne. Et je oserais dire que ce général une chose raisonnable pour la plupart des gens de repérer très facilement la ligne de. Et ainsi, voir le programme pour plus de détails. Et maintenant l'un des plus aspects controversés CS50 de programme que je pensais parlerait dans la conclusion ici est la clause dite de regret. Donc, voici les petits caractères. Mais en général, nous avons vu au cours des 8 dernières années et plus que, en effet, presque tous de CS50 les cas de malhonnêteté intellectuelle ont été le résultat d'un peu pauvre faire tard dans la nuit décision. Le résultat du stress, le résultat du manque d'alimentation, le manque de sommeil, trop nombreux ensembles P, trop nombreux les délais, trop d'engagements. Stress construire dans un 02:00, 03:00 AM, 04h00, avec une échéance imminente. La plupart des étudiants dans ces cas venons de faire de mauvaises décisions qu'ils pourraient très bien regretter le lendemain matin sinon minutes plus tard, mais jusqu'à l'année dernière il n'y avait pas soupape de décharge que ces étudiants pourrait ouvrir effectivement jusqu'à fait face à la problème de front, sans crainte d'être démarré à partir d'un collège tout à fait. Et, en effet, nous avons introduit cette clause de regret de l'année dernière, qui dit que si, dans les 72 heures, trois jours, de franchir une certaine ligne prescrite dans le syllabus vous venez de l'avant à l'un des cours de têtes et nous aurons une discussion à ce sujet. Il ya encore quelques résultat, contrairement à ce qui est été rapportés au contraire. Il ya encore du résultat qui est une action par le cours, la réduction à zéro en général un ensemble de P ou de prendre une autre action, Mais nous allons, en effet, gérer nous-mêmes et non la renvoyer plus élevés ont été le résultat pourrait être beaucoup plus grave. Et, en effet, de partager ce qui est arrivé l'année dernière, dans les huit ans, et maintenant neuf ans, de l'enseignement de ce cours et après bricoler avec différents boutons, tourner divers cadrans sur le passé plusieurs années sur l'honnêteté intellectuelle, et de voir par les données pas apparents impact, même des discours comme celui-ci, ce fut de loin la meilleure chose nous avons introduit pédagogique en huit ans le long ces lignes dans CS50. 19 étudiants se sont présentés en vertu de cette clause de l'année dernière. Nous avons pris aucune action pour sept de ces étudiants, déterminer qu'ils étaient inutilement inquiets. Ils avaient pas, en fait, franchi une ligne, mais il était une bonne conversation d'avoir tout de même. Nous nous sommes concentrés 11 des scores qui ont été soumis. Et dans un cas, nous avons demandé une étudiant de faire un problème posé. Mais plus convaincant, honnêtement, avec ces 19 chats, qui était beaucoup plus que je devrait avoir, chacune d'entre elles 10 minutes à peut-être une heure de temps, aussi apporté à la lumière d'un certain nombre de questions concernant les problèmes familiaux, problèmes de ami, problèmes de santé mentale puis que nous nous sommes engagés, avec la bénédiction, résident de l'étudiant Dean, ou entre amis, ou tout autre numéro des ressources de soutien. Alors que ce fut de loin l'un des meilleures utilisations de notre temps et l'un des meilleurs interventions. Cela dit, il avait pas entrée sur le taux de détection de la malhonnêteté intellectuelle de manière plus générale. Et je ose dire, ce sous-ensemble des étudiants de dernière année est un groupe démographique qui nous auparavant jamais identifiés avant et n'a jamais connecté auparavant. Et donc, ce sont merveilleuses histoires de réussite même si elles ont été portées à la lumière en moins de circonstances optimales. Alors, gardez cela à l'esprit que vous faites, peut-être, une certaine mauvaise décision vous tard dans la nuit, qu'il ya recours si longtemps que l'étudiant dans cette situation posséder et se présenter afin que nous puissions avoir ce genre de discussion et de traiter avec elle d'une manière qui est de l'éducation, puis nous pouvons mettre ça derrière nous le lendemain. Alors sans plus tarder, prendre la bord au large de cette conversation, la raison les chiots sont en place est- juste pour briser la glace pour un moment. Et malheureusement, ils sont tous de sommeil, mais ce qui était censé arriver ici était tout le monde était censé de crainte et de type de détendre après cette très lourde conversation. Mais apparemment je mets les chiots dormir. Mais si vous allez à CS50 de Chiots site de Slash, vous pouvez les regarder toute la journée. Peut-être en particulier 02:00, ou 3h00, ou 4h00 dans la nuit pour voir un peu de soulagement du stress il. Voilà donc slash chiots. Bien. Était-ce pas amusant? D'ACCORD. Donc, retour à une certaine ordinateur la science, si vous le permettez. Donc, rappeler que la dernière fois que nous avons commencé la recherche non seulement au principal, qui était la fonction par défaut, lorsque la drapeau vert cliqué équivalent, mais nous avons également commencé brièvement écrit certains de nos propres fonctions. Et jusqu'à présent aucune de ces fonctions ont été particulièrement grand ou de viande. Vous aurez dans celles plus grande fonctions probablement, P set 2, 3 P fixé, P définitivement réglé 4 et au-delà. En ce moment la plupart de vos programmes, sinon la totalité d'entre eux, certainement pour P ensemble 1 peut être fait entièrement en principal. Si votre programme est seulement cinq lignes, 10 lignes, même 20 lignes de long, parfaitement raisonnable pour écrire tout en principal et de ne pas trop compliquer votre code, mais ce que nous faisons aujourd'hui et au-delà est aussi d'essayer de introduire quelques bonnes techniques de conception de sorte que votre code devient plus compliqué et que les problèmes vous voulez résoudre devenir plus difficile et plus intéressant que vous avez, en quelque sorte, les outils dans votre boîte à outils avec laquelle de concevoir de bonnes solutions à ceux-ci. Donc, nous allons jeter un coup d'œil en arrière à ce programme de ma semaine dernière, qui était fonctions zéro point C. Et remarquer que, tout simplement, il ressemble à ceci avec deux fonctions, principale et le nom d'impression. Et repensant ou peut-être l'ingénierie inverse aujourd'hui, ce qui était la motivation pour l'introduction une fonction dans la ligne 28 appelée, Nom d'impression? Ou était-ce ce un exemple de dans termes d'un principe ou à emporter, si vous voulez bien. Quelques murmures. Quoi? Ouais décomposition si fonctionnelle est une sorte de fantaisie façon de dire, décomposer votre programme en ses parties constituantes et ensuite utiliser ces pièces à assembler un ensemble. Alors, qui est trop juste genre d'une bouchée déjà, mais cela est peut-être même un Le meilleur exemple de quelque chose juste appelé abstraction. Droit? Abstraction va être l'un des thèmes récurrents dans CS50 et aussi la science informatique plus généralement, car il est une technique avec laquelle vous pouvez résoudre problèmes plus efficacement parce que vous peut écrire des solutions plus intuitivement et de façon que les échelles et est compréhensible par d'autres personnes. Qu'est-ce que je veux dire par là? Donc, il est sans doute beaucoup plus lisible à regarder un programme comme celui-ci, super court si elle est. Quand vous voyez la ligne 22 qu'il ya une fonction appelée, le nom d'impression. Ce nom seul dit ce qu'il fait. Cette fonction prend apparemment entrée entre ses parenthèses, et fait apparemment quelque chose, imprime sans doute le nom. Et donc, même si nous absolument pourrait avoir fait ce que nous avons fait il ya une semaine, qui était juste profiter de cette ligne de code, Débarrassez-vous de cela, et obtenir débarrasser de tout cela ensemble, nous sorte de couche d'abstraction la notion de l'impression d'un nom. Je ne me soucie pas si vous utilisez l'impression def. Je ne se soucient pas si vous avez un S pour cent et une barre oblique inverse N. Ces des détails incroyablement arcanes. Ce que je ne me soucie comme un programmateur imprime un nom. Et donc, quelle meilleure façon de le faire que par appel d'une fonction, le nom d'impression? Et donc, qui était l'une des motivations pour faire quelque chose comme ça. Faire le code plus lisible, plus réutilisables, et aussi l'auto descriptive. Maintenant, nous allons jeter un coup d'oeil un autre exemple, qui est une des fonctions, que nous avions ici. Ainsi, celui-ci est peut-être encore plus convaincant, car, dans ce cas, Je ne veux pas simplement obtenir un int. Je veux obtenir un int positif. Et il se trouve pour obtenir un résultat positif int vous avez à faire un tas de démarches. Droit? Il est pas une simple ligne appeler comme le nom d'impression était, qui est certes moins convaincante. Pour obtenir un int positif, logically-- permettez-moi de faire défiler vers le bas pour cacher cela. Qu'avez-vous à faire? Comme tous les outils que nous avoir au moment sont des choses comme impression def de Standard Bibliothèque et également de la bibliothèque de CS50 nous avons Obtenez Int, et obtenir Float, Obtenez Long Long, Get String, mais le seul, Germane, est dès maintenant Obtenez Int. Donc, si le seul outil dont vous disposez dans votre boîte à outils est Recevez Int, comment allons-nous mettre en œuvre elle pour obtenir int positif? AUDIENCE: Créer un journal et vérifier si l'entrée qu'ils donnaient était positif ou non. ENCEINTE 1: Parfait. Exactement. Un autre outil que nous avons dans notre boîte à outils à partir d'une ou deux semaines est juste la construction de boucle. Et donc, oui, si nous utilisons un certain temps boucle, ou une boucle Do While, ou un avant boucle, nous pourrions probablement vous en sortir l'un de ceux dans une certaine forme. Nous pouvons mettre en œuvre la notion de GET int positif en utilisant simplement Obtenez Int, puis juste continuer à l'appeler encore et garder harceler l'utilisateur jusqu'à ce qu'il ou elle fait nous donne ce que nous voulons. Et maintenant, cette abstraction du processus d'obtenir un int positif dans une fonction appelée Obtenez positive Int est un peu plus convaincant, car regarder ce. Ce sont comme des 10 plus lignes de code que sont impliqués dans l'obtention d'un int positif, et je ne me soucie pas vraiment comment vous le faites. Tout ce que je fous est que vous peut le faire, et je l'ai tous ces détails cachés derrière un fonction appelée Obtenir positive int qui, en effet, a cette boucle Do While. Et voir la semaine dernière pour la syntaxe là, mais il déclare simplement N, et il imprime le instruction à l'utilisateur. Il appelle Obtenez Int, puis il vérifie cette condition encore, et encore, et encore jusqu'à ce que l'utilisateur coopère. Alors maintenant, quelques vérifications de bonne santé. Pour ceux qui connaissent peut-être avec un peu de programmation, pourquoi est-N a déclaré, pourquoi dois-je créer N en dehors de la boucle Do While? Pourquoi est-il sur la ligne 29 et non comme sur 33, par exemple. AUDIENCE: Parce que quand vous déclarer l'extérieur, il genre de plus, la plus grande scope-- ENCEINTE 1: Bon. AUDIENCE: --et si vous déclarez à l'intérieur de la boucle, [inaudible] car il ne sait pas à ce sujet. ENCEINTE 1: Exactement. Si je peux simplify-- il est une question de portée. Et la portée se réfère au contexte dans une variable qui existe ou est utilisable. Et la belle règle de base est que généralement lorsque vous déclarez ou créez une variable, vous pouvez utiliser uniquement à l'intérieur de la plus proche embrassant accolades. donc, qu'est-ce que ça veut dire? Si je, à la place, d'annuler cette et aller avec quelque chose qui se sent un peu plus simple. Droit? Ligne 32 semble juste plus propre pour moi maintenant. Je fais les deux choses à une fois et puis assigner la main droite à la main gauche. Le problème repose maintenant sur cette définition de portée est que N peut être utilisé en traits 31 et 32 ​​à l'intérieur de cette boucle, mais où, par définition que ne peut-il être utilisé? Conformément quoi? Ouais. AUDIENCE: 35. ENCEINTE 1: 35. Certainement pas 35. Et aussi où d'autre? AUDIENCE: 34. ENCEINTE 1: Même 34 est problématique car elle est en dehors des accolades. Et donc en fait, nous allons voir ce qui se passe. Droit? Cela peut sembler un peu intuitive ou ne pourrait pas, mais nous allons voir ce que les compilateur doit dire quand nous allons dans le répertoire source d'aujourd'hui. Faire fonctionner un. Oh mon Dieu. Eh bien, je enfin terminé que, par la manière. Bien. Et quel est le problème ici? Très mystérieux à regarder. Mais voici ce que je typed-- faire fonctionner un. Voilà ce que font induit, qui est en fait utilisant le cliquetis du compilateur avec certains de ces drapeaux que nous verrons à nouveau avant longtemps. Et encore, toujours regarder à la première erreur, car il pourrait juste avoir une cascade effet de sens sur les autres lignes. Donc, ce que cela signifie est que le problème est dans la fonction 1.c. Il est sur la ligne 32. Et il est à la colonne, ou de caractère, 13. Ainsi, lorsque votre éditeur de texte qui peut vous aider à identifier où est le problème. Donc, si je fais défiler jusqu'à, ce qui est la ligne 32? Voilà en effet celui- qui est déjà mis en évidence droit ici-- utilisé variable n. Mais il est pas utilisé. Je l'utilise. Mais le compilateur est confus, parce elle existe seulement à l'intérieur de ce périmètre. Et donc je ne peux pas l'utiliser ici. Je ne peux pas l'utiliser ici. Le compilateur et, par conséquent, ne se soucie même pas que je vais essayer. Il semble être utilisé dans sa portée réelle. Donc, nous pouvons élargir la portée en faisant exactement ce que nous avons commencé avec-- int n. Et même si elle ne le fait pas regarder aussi élégant, peut-être, et nous prenons une ligne supplémentaire ici, il est maintenant portée partout. Essayons donc de nouveau. Donc, faire fonctionner un. Agréable. Et maintenant, si je si je cours fonction l'un, nous allons lui donner négative 10, négatif de 1, 0, 1, et il fonctionne bien. Donc, il ya une autre solution ici. Tu sais quoi? Que faire si je suis vraiment aux prises avec cela? Je ne sais pas où le n est censé aller. Tu sais quoi? Je vais mettre tout le chemin au sommet de mon dossier ici. Que serait-ce faire, pensez-vous? Ouais? AUDIENCE: [inaudible]. ENCEINTE 1: Ouais. Donc, je l'ai fait mondiale, pour ainsi dire. Si vous avez une variable qui est à l'extérieur l'ensemble de vos fonctions qui est autorisé, et le code devrait compiler, et n va maintenant être accessible non seulement dans get int positif, mais aussi en ce qui main-- est un peu inquiétant parce qu'il ya déjà un n dans le principal, donc plus sur ce en seulement moment-- mais cela serait considéré comme une mauvaise conception. Bien. Si vous avez recours à quelque chose comme, oh, je vais il suffit de mettre en place ici parce que le code semble compiler est généralement pas la meilleure pratique. Plutôt que vous voulez choisir la portée la plus étroite possible pour vos variables, ce qui signifierait aller avec notre conception initiale, qui est ici. Maintenant, en passant, si vous avez eu un nom de variable de manière identique ici, le chemin c gérerait this-- si cela ne se fera pas trop often-- est que cela est encore parfaitement bien ici. Mais cette définition de n dans la ligne 22 fera de l'ombre d'une planète. Alors celui-ci travaillera au sein principal, et celui mondiale sera effectivement appliquer lorsque vous êtes dans obtenir int positif mais plus sur ce une autre fois, mais juste pour ceux qui sont curieux. Donc en bref, nous fixons cette ici. Maintenant, nous allons démêler deux autres pièces avant que nous regardons une dernière ligne de code dans ce programme. Obtenez int positif. Sur le côté gauche de sa parole est la parole int. Qu'est-ce que cela signifie pensez-vous? Jusqu'à présent, nous avons surtout vu nulle. Ouais? PUBLIC: Il est le type de variable qui vous parlez. ENCEINTE 1: Ouais Il est le type de, laissez-moi pas dire variables, mais le type de valeur que je suis de retour pour demander. Et en effet, que ce intuitive ici, je l'espère. Droit? Si vous voulez obtenir un int positif, qu'est-ce que vous veulent la function-- comme notre bénévoles de la semaine dernière de vous restituer un morceau de papier avec un int sur elle? Et donc nous avons spécifié que le type dit de cette fonction de retour est d'obtenir int positif. Si nous ne voulons pas qu'il retourner quelque chose, vous dites non avenu. Si vous souhaitez qu'elle retourne une chaîne, vous dites chaîne. Si vous souhaitez qu'elle retourne un flotteur, vous dites flotteur. Mais le seul qui applique ici logiquement, parce que je suis en utilisant get int, même si je suis le limitant à des valeurs positives, est de retourner un int. Donc, à l'inverse, ce que cela signifie qu'il ya un vide entre parenthèses? Qu'est-ce que les parenthèses généralement définir? Ouais? PUBLIC: Il signifie que la fonction de pas réellement l'obtenir. ENCEINTE 1: Il signifie que la fonction de pas vraiment obtenir ce que? PUBLIC: Une entrée. ENCEINTE 1: Une entrée, que ce soit. Donc, en effet, si la parenthèse ici vous spécifiez vide, cela signifie juste que je ne veux pas d'entrée. Je vais régler le problème moi-même. Et en effet, vous ne devez pas dire obtenir quelque chose int positif. Vous venez de dire, obtenez int positif, et que fonction se déclenche et faire sa chose. Mais il ya eu un petit truc que je l'ai été jouer ici tout ce temps pour vous assurer que ce code se compile. Notez que int-- obtenir positif int void-- est sur la ligne 27. Mais pour une raison apparemment bizarre il est aussi ici à la ligne 16. Et pour faire bonne mesure, je vais répéter cela, il est donc parfaitement identique. Et je l'ai dit prototype un petit commentaire d'une seule ligne. Qu'est-ce qui se passe si je supprime cela, et relancez maintenant faire fonction 1, entrez. Oups. Attendez une minute. Où est mon onglet? Hein? Etre prêt. Faire fonction 1. Nous y voilà. D'ACCORD. Avait pas enregistré correctement. Donc, je pense qu'il ya un peu bug là où je ne suis pas voir le nom de l'onglet pour le moment. Donc ce qui se passe ici? Déclaration implicite de fonction obtenir int positif est invalide dans C99. Donc confondre à nouveau. Donc, ce qui est indicatif de ce? Eh bien, il se trouve que C est assez stupide. Eh bien, il est de la programmation la langue, ou plutôt le compilateur est. Il ne sait ce que vous avez enseigné, et il est seulement va savoir quelque chose si vous avez enseigné auparavant. En d'autres termes, principale en ce moment, je suis essayez d'appeler une fonction appelé obtenir int positif. Mais le compilateur ne va pas de remarquer que reçoivent int positif existe jusqu'à ce que la ligne 26. Et donc ce que le compilateur fait est juste erreurs dès qu'il obtient à la ligne 17, disant déclaration implicite d'obtenir int positif, ce qui est juste une façon élégante de dire, je ne sais pas savoir ce que se int positif est encore. D'autres langages comme Java et Python et Ruby pourraient regarder vers l'avenir. C ne fait pas. Et la façon dont nous fixons ceci est l'une des deux façons. Soit l'un, si le problème est que rendre int positif n'a pas été vu avant, Eh bien, permettez-moi de passer à la partie supérieure. Ce serait résoudre ce problème. Mais en général, il est meilleure technique considérée de mettre votre fonction principale à la très haut de sorte que l'homme lisant votre code sait ce que fait le programme, parce principale ne soit pas enfoui tout le chemin en bas ou au milieu. Il est tout en haut. Donc, qui ne se sent pas l'idéal. Et vous pouvez réellement obtenir dans des situations où si les appels d'une fonction un autre, qui en appelle un autre, vous pouvez entrer dans une question où ni peut aller au-dessus de l'autre, logiquement. Il est tout simplement pas possible. Et si le chemin du travail contourner cela est de simplement prendre La signature de la fonction, ainsi speak-- la première ligne où il est declared-- et il suffit de copier, coller à la top, mais pas avec braces-- bouclés juste avec un point-virgule. Il est comme un petit indice de ce qui est à venir. Et en fait, tout ce temps, lorsque nous ont vu des choses comme io.h norme cs50.h et, de même, dans les points h fichiers sont là d'autres prototypes. Et nous verrons que, avant longtemps. Donc en bref, quand vous avez un programme dans un fichier avec plusieurs fonctions Outre principale, vous avez presque toujours envie de les déclarer simplement par le biais de leur première ligne, suivi d'un point-virgule, tout en haut du fichier. Ce fut beaucoup à la fois. Des questions? Des questions? Bien. Donc, passons à autre chose alors à quelque chose comme la toux. Oh. Comment raccord. Bien. Toux. Voici donc un c mise en œuvre d'un programme nous avons fait l'autre jour dans Scratch que très simplement juste dit la toux, la toux, la toux. Bien. Et quelqu'un a dit que quelques-uns il ya jours qu'il ya une façon de nettoyer ce code jusqu'à déjà. Bien? Dès que vous copiez et coller probablement une mauvaise conception. Au moins une fois nous arrivons à quatre ou cinq ou 20 toux, il se sent une mauvaise pratique. Nous gardons juste copier, coller. Quelle est la solution la plus évidente au nettoyage de ce programme en place? AUDIENCE: Boucle. ENCEINTE 1: Ouais. Il faut donc utiliser une boucle. Et nous pouvons utiliser une boucle pour un tout boucle, un certain nombre d'approches. Et en effet, voilà ce que nous faisons en version un ici. Je suis à la place réécrit dans la version de l'un cough.c pour être juste la toux dans une boucle pour. Très bien, mais il ya un maintenant l'occasion de genre de début pour concevoir ce un peu plus comme la leçon que nous a enseigné il ya un instant, qui est this-- supposer que je voulais pour créer une fonction appelée toux, nous allons examiner pendant un moment ce que ça va ressembler. Donc, si je veux quelque chose à tousser, je dois juste à utiliser print f intérieur de la fonction. Et en effet je suis. Et en fait, tout cela temps, chaque fois que vous êtes imprimer quelque chose à l'écran, un programmeur exigerait qu'un effet secondaire. Ça m'a pas remettre Retour quelqu'un une valeur. Il me prend des mesures qui pourrait être visuellement évident. Mais cette fonction toux, faut-il revenir quoi que ce soit sur la base de sa première ligne? Non, parce que son type de retour est nulle, ce qui signifie tout simplement ça ne me remettant rien en retour. Il pourrait faire quelque chose visuellement, mais ça ne me tendant sauvegarder un morceau de papier comme la semaine dernière. Est-il besoin d'aucune entrée? Non. Et il est donc nulle ici aussi. Donc, cela aussi est une sorte de over-engineering ce problème. Droit? Je me suis fait le programme plus complexe, plus de lignes de code, Je ne l'ai pas fait tout plus fonctionnel, mais ce serait un tremplin, peut-être, pour une large cadre avec le code plus complexe. Mais qu'est-ce à ce sujet? Qu'ai-je done-- simplement en regardant ce sans regarder le commentaire au sommet de l'file-- ce que possède Je suis fondamentalement en fait ici avec ma toux mise en œuvre qui est différent? Ouais, dans le dos? AUDIENCE: Faire en sorte que vous pouvez ont un caractère éteindre. ENCEINTE 1: Ouais. Donc, cela se sent plutôt agréable. Droit? Il est comme l'ajout d'une fonctionnalité à votre programme ou votre fonction, dans ce cas. Il revient toujours rien. Il pourrait avoir un effet visuel latéral, parce qu'il appelle impression f. Mais maintenant, je suis paramétrée la fonction, signifie que je suis spécifiées qui sont prises entrée de type int et l'appeler n, mais je ne pouvais l'appeler ce que je veux. En fait, il pourrait simplement être fois pour être encore plus explicite. Et puis je ne pouvais tout simplement changer cette sélection ici. Mais le fait est que cela est la façon dont je créer une fonction qui prend entrée. Et si vous vous souvenez de retournement peut-être par le biais d'une ligne des visites virtuelles, la quatrième et dernier exemple de la toux, vous remarquerez ici, je avez généralisées mon code type de further-- abstraite davantage. Comme la toux et éternuement, les deux sont à propos de quelque chose à dire ou faire une sorte de bruit. Sauvegarder serait le bloc de Scratch correspondant. Et si ce que je faisais dans cette version, que nous ne pouvons tout simplement au regard, est la toux est juste comme disant, [TOUX], toux, et en attendant, éternuements comme dire, [ACHOO]. Et donc je l'ai généralisé la mise en œuvre de ceux maintenant la mise en œuvre cette fonction générique, dire, ce qui est intéressant pour les besoins d'aujourd'hui seulement parce qu'il reste n'a pas de type de retour. Mais combien entrées-t-il? AUDIENCE: Deux. ENCEINTE 1: Deux. Et donc si vous voulez prendre deux arguments, il suffit de les séparer par une virgule. Et si vous voulez, puis appeler cette fonction, remarquerez que vous venez appeler disons, entre guillemets, pour le premier argument, commune n, pour le second argument. Encore une fois, nous venons de le blocs de construction afin que nous puissions effectivement mettre en œuvre certaines de nos propres fonctions. Bien. Vous avez des questions à ce sujet? Alors maintenant, nous allons décoller une couche si. Et l'objectif, à terme, est le problème de l'ensemble de la semaine prochaine va être sur cryptogrophy-- l'art de brouiller l'information. Et plus particulièrement, les informations vous fera cryptage ou le décryptage va être du texte. Et si ce genre d'invitations La question aujourd'hui comme bien, ce qui se passe sous le capot avec du texte ASCII au-delà de la semaine zéro, et comment pouvons-nous réellement commencer à manipuler? Donc, voici le nom de Zamyla. Et dans le texte, qui pourrait être saisi dans comme la fonction de chaîne de get. Et à partir de maintenant, quand vous voyez un chaîne comme this-- Z-A-M-Y-L-A- commencer à penser comme si, à chaque de ces caractères est dans une boîte de son propre. Et en effet, dans une semaine ou deux est temps, chacune de ces boîtes va représenter très précisément un bloc de memory-- une bouchée de mémoire. Donc, chacun de ces lettres, finalement, représentera 8 bits. Et nous allons réellement voir ce qui se passe sur sous le capot dans mon ordinateur. Mais pour ne pas il suffit juste à regarder Zamyla dans cette optique, de sorte que chacun des ces lettres est dans sa propre boîte. Et bien assez dans C nous pouvons accéder à chacune de ces boîtes directement. Donc, si vous voulez obtenir la première lettre de son nom, super facile en C. Si vous voulez obtenir la dernière lettre, super facile ainsi avec un morceau de nouvelle syntaxe. Donc, je vais aller de l'avant dans CS50 IDE et d'ouvrir la chaîne zéro point C. Et dans cet exemple ici, il ya un couple de nouvelles choses qui se passent. Donc, en première ligne 19, nous avons vu cette chaîne de get before--. Ainsi, tout comme un test de cohérence rapide, si quelqu'un pouvait offrir verbalement l'explication d'un profane de ce qui se passe sur la ligne 19. Comme à peu traduire en Anglais qu'un colocataire pas dans CS50 pourrait comprendre. Ouais. AUDIENCE: Avoir l'utilisateur une entrée chaîne et de le stocker dans un s variable. ENCEINTE 1: Bon. Avoir l'entrée de l'utilisateur une chaîne et de le stocker dans un s variable. C'est génial. Donc, sur la droite côté, nous appelons chaîne de get. Qui renvoie une valeur qui n'a pas été affecté de droite à gauche côté dans une variable appelée s qui est conçu pour stocker une chaîne de caractères. Exactement. Donc maintenant aligner 22, par le commentaire à la ligne 21, imprime évidemment cette chaîne un caractère par ligne. Mais comment? Alors tout d'abord, on initialise I 0. Et puis comment arrivons-nous à la fin du nom de Zamyla? De plus, à la fin de Le nom de Zamyla, je pouvais tapez manuellement dans le dernier caractère de son nom en quelque sorte, ou le numéro de celui-ci. Droit? Si nous revenons ici-- Z-A-M-L-- Y-L-A- pour que je puisse saisir. Quel est l'indice de La dernière lettre de Zamyla? Si cela est 0-- parler comme un programmer-- 0, 1, 2, 3, 4, 5, Je heard-- tellement en effet, la dernière lettre au nom de Zamyla est le sixième, mais si nous comptons de 0, ça va être le numéro 5. Donc, gardez cela à l'esprit ici. Il se trouve qu'il ya une fonction dans C appelle strlen, et retour dans la journée et à ce jour encore, beaucoup de programmeurs choisir de synchroniser les noms pour leur fonctions qui sonnent comme les mots ils essaient de dire. Donc strlen est longueur de la chaîne. Et donc ce qui serait longueur de la chaîne S retour lorsque Zamyla est l'entrée? AUDIENCE: Cinq. ENCEINTE 1: Z-A-M-Y-L. Six. Droit? Quelle est la longueur du nom de Zamyla? Droit? Et en réalité, six lettres. Droit? Et qu'est-ce que cela signifie pour notre boucle? Nous allons aller de 0 jusqu'à six, qui va nous donner cinq itérations. Que faisons-nous à chaque itération? Eh bien, pour cent C, quelqu'un deviné l'autre jour, signifie un espace réservé pour quoi? AUDIENCE: Char. ENCEINTE 1: Juste un caractère. Donc, un seul character-- pas plusieurs personnages comme une chaîne. Et puis voici la nouvelle ligne que nous avons l'impression de. Et puis voici la nouvelle syntaxe. Si vous voulez imprimer le i-ème caractère de la chaîne S, pour ainsi dire, vous pouvez tout simplement dire que le nom de la chaîne S, puis ouvrez crochet, et puis fermé crochet, avec un i le milieu. Et il est plutôt agréable dans ce il ressemble un peu à un carré tout comme les carrés dans lesquels Zamyla de personnages existent sur cette photo il. Donc, si je lance ce fait maintenant, nous allons voir ce qui se passe. Assurez-chaîne 0 point barre oblique chaîne 0, et puis je suis aller à taper le nom de Zamyla. Il n'y a pas rapide, parce que je ne l'ai pas utiliser print f, mais ça va. Je sais exactement quoi faire. Et en effet, il imprime Le nom de Zamyla, un par ligne. Maintenant, nous allons être un peu téméraire. Supposons que je ne sais pas à propos de strlen et je pensais, tout droit, personne ne va avoir un nommer comme plus grand que 50 caractères. Allons de l'avant et de recompiler et relancez-le, puis tapez Zamyla de nouveau. Logiquement, ce qui est le programme va essayer d'imprimer? Z-A-M-Y-L-A alors comme 45 inconnus octets de mémoire. Et en effet, nous reviendrons à cette idée de la mémoire. Mais tout logiquement, si Le nom de Zamyla est cette longue, comme par l'image ici, ce que nous disons est de garder l'impression, l'impression garder, garder l'impression, l'impression de garder, garder l'impression, tout le chemin à caractère 50e, qui qui sait ce qui va se passer. Prenons donc effectivement un regard. Disons type dans Zamyla. Intéressant. Nous avons eu de la chance. Juste un tas d'espace blanc. Oh. Il ya un caractère funky. Il ressemble un peu à une question bizarre y marquer, mais il est le nom de Zamyla. Mettons-nous vraiment téméraire. Que diriez-vous nous imprimons sur 500 blocs dans l'inconnu? Allons de l'avant et faire de cette ainsi, puis ré-exécuter. De et laisser plein écran, parce que nous avons besoin de voir plus d'espace. Zamyla. Vous avez encore la chance. Oserons-nous obtenons plus téméraire? Soyons plus téméraire. 50.000 caractères. Ceci est très certainement pas une bonne idée. Bien. Assurez-chaîne 0. Ce sera notre dernière démonstration. Zamyla. Ugh. Ugh. D'ACCORD. Donc, ma mémoire est vraiment vide maintenant, qui est en fait assez pratique. Ce que je veux essayer d'obtenir to-- tout droit. Et maintenant, je vais juste pour obtenir téméraire. 500.000. Make-- disons plein écran il. Entrez. Zamyla. Nous y voilà. Je ne sais pas ce que cela est, mais il sonne mal. Bien. Et en fait, bientôt, si vous êtes parmi quelques privilégiés dans les heures de bureau et définir un problème, vous pourrait très bien rencontrer ce. Segmentation fault ne fait avoir un sens bien défini. Cela signifie une sorte d'erreur relatif à un segment de mémoire. Et en termes simples, cela signifie que nous touchions memory-- nous avons utilisé la RAM dans mon ordinateur que je ne devrais pas avoir eu accès à. Et qui est ce qui est à la fois puissant et également dangereux C est à propos que vous avez réellement avoir un accès sans entrave à l'intégralité de la mémoire de votre programme ou octets ou RAM, plus précisément. Ainsi, même si le nom de Zamyla est seulement six caractères, Je peux encore aller partout en mémoire que je veux. Et en passant, si vous avez jamais lu quelque article au fil des ans au sujet de certains ou un programme serveur se fissuré ou piraté qui est profité de quelque chose appelé un débordement de tampon exploiter que nous allons effectivement parler dans quelques semaines, que ce généralement référence à tromper en quelque sorte un ordinateur en allant bien au- au-delà des limites de la mémoire qu'il devrait avoir, et trouver quelque chose de juteux en ce qu 'un memory-- mot de passe, peut-être, d'une manière de contourner certains numéro de série vérifier, ou plus généralement en mesure pour tromper l'ordinateur exécute code qui n'a pas été prévu. Mais revenons à la réalité pour un instant où ce programme était mis en œuvre avec strlen, et d'introduire une chose ici. Quoi de neuf chez ces trois premières lignes? Alors chaîne dot h. Il se trouve qu'il ya cette bibliothèque appelée Chaîne Dot H, ou la Bibliothèque String, dont le fichier d'en-tête, pour ainsi dire, est une chaîne dot h qui me donne l'accès à cette fonction strlen. Si je laisse de côté que le compilateur est va me crier dessus dans une certaine forme. Mais vous savez quoi? Maintenant, nous allons vraiment nuancée. Dans la ligne 22, il ya quelque chose de gentil de inefficient-- mal conçu, arguably-- de cette ligne de code. Pensez à la façon dont pour en boucle sont mises en œuvre et quelles mesures cela se reproduise et et de nouveau again-- l'initialisation, l'état, le code qui est exécuté, alors l'incrément ou le changement, alors la condition, puis le code, alors le changement, puis l'état, le code, puis le changement, et ainsi de suite. Donc, ce que pourrait être un peu inquiétante ou mal fait ici? Ouais, en bleu. AUDIENCE: strlen est appelé de nombreuses fois. ENCEINTE 1: Ouais. Alors que l'on appelle strlen à plusieurs reprises, mais ce qui est la longueur du nom de l'Zamyla la première exécution de la boucle? AUDIENCE: Six. ENCEINTE 1: Six. Eh bien, ce qui est la longueur de son nom la deuxième fois le code exécute? AUDIENCE: Six. ENCEINTE 1: Très bien. Il est toujours de six. Droit? Le nom de Zarla n'a pas changé, même si je suis à la recherche à une partie seulement des lettres dans son nom. Et le fait que je suis efficace posant cette question, ce qui est la longueur de Zamyla, quelle est la longueur de Zamyla, quelle est la longueur de Zamyla, six fois séparés, ou sept même, est tout simplement stupide, parce que ce immuable cette réponse. Et donc ce que je pouvais effectivement faire est this-- dans une seule chaîne Je ai un peu mieux version ici. There-- chaîne whoops-- deux, je dois un peu mieux la version dans laquelle Je fais this-- au lieu de simplement i initialisation à 0, je aussi avec une virgule déclarer une seconde variable appelée n-- je ne dois dire int nouveau. Je ne devrais pas, en fait. Mais je dis n. Et puis je l'initialise à n l'strlen de n, de sorte que maintenant combien de fois ne strlen se exécuté au total? Juste une fois. Et donc ce que nous entendons plus tôt sur une meilleure conception. En fait, une fois que votre code est correct, revenir en arrière et de penser à travers, Je suis en utilisant aussi peu mémoire ou que quelques secondes ou millisecondes de temps d'ordinateur que possible de mettre en œuvre un certain problème? Et je vais faire défiler et juste parler qu'il ya cette mention null dans cette version, mais nous allons revenir à ce que avant longtemps. Parce que pour l'instant, nous allons jeter un coup d'oeil à où cela va nous mener. Donc, une, il se trouve que maintenant que nous avons la capacité à regarder des caractères individuels, nous pouvons tirer parti quelque chose de la semaine 0 qui était très obscur et sorte de inintéressante à l'époque. Mais maintenant, et surtout quand on obtenir à la cryptographie dans une semaine, ça va être assez puissant. Il se trouve que certains les ints et chars de données et les caractères et les cordes et autre things-- certains d'entre eux peut être très facilement converti en un autre. Par exemple, lorsque nous avons parlé à propos de ASCII certain temps ago-- voici les lettres majuscules A par M, point, point, dot-- nous avons dit qu'il ya une cartographie entre ces lettres et de chiffres. Et en fait, il est vrai pour les lettres minuscules ainsi. Minuscules est un 97, le capital est un 65. Et il ya un certain nombre en ASCII, qui est juste cette cartographie système pour l'ensemble de ces autres lettres. donc, qu'est-ce que ça veut dire? Eh bien, je vais aller de l'avant et ouvert jusqu'à réel rapidement quelque chose appelé ASCII 0, qui est plus de commentaires. Et de nouveau en ligne vous pouvez toujours coup d'oeil à travers les commentaires. Et jetez un oeil ce cela va faire. Donc, il a une fonction principale. Je l'ai codé en dur les chiffres juste pour maintenant, parce que je sais ce que je fais. Je sais ce que je veux voir ici. Et je l'ai initialisé I 65. Et je compte jusqu'à à 26 lettres au total. Et qu'est-ce que je vais imprimer une ligne à la fois si vous pouvez interpréter Cela met en évidence la ligne? Ce qui est imprimé? Ouais. AUDIENCE: Allez-vous d'imprimer la lettre correspond à la carte de la valeur de lettre et valeur entière? ENCEINTE 1: Exactement. Je vais imprimer la lettre correspondant à la valeur de nombre entier, et vice versa, comme suit. Eh bien cela, quelqu'un a dit plus tôt, est juste un espace réservé pour un caractère. Il est encore. Ceci, bien sûr, est un espace réservé pour un int-- pas une nouvelle ligne. Et maintenant remarquer, ma première valeur Je brancher l'appareil pour que l'espace réservé est pas seulement I. Je dis, entre parenthèses, char I, dont le charbon est entre parenthèses dire le compilateur, je traiter pas comme ce qu'il est, qui est un nombre. Traitez-le comme un vrai caractère. Considérant que la deuxième valeur Je branchant in-- I-- devrait juste être un nombre. Donc, si je compile cette program-- si cela est faire ASCII 0, point barre ASCII 0-- je reçois juste ce petit tableau pratique que me montre tous les possibles mappings sans avoir à penser qu'il à travers ou le découvrir par moi-même. Et je suis aussi imprimer, remarquer les lettres minuscules, parce que quelques lignes plus tard, je imprimer également sur cette cartographie ainsi, ce qui est juste pour dire qu'une fois que vous comprenez ce qui se passe en dessous le capot, pouvez-vous convertira automatiquement en arrière. Et en fait, si l'un de vous jamais fait cela à l'école primaire ou entendu parler de quelqu'un prenant mythiquement une note et il passe à son ou son ami dans la classe, mais vous l'brouillés par lettres comme A devient B, et B devient C, ou quelque chose plus compliqué que cela, eh bien, comment voulez-vous aller sur la mise en œuvre que comme un gamin? Eh bien, vous savez juste genre de A devient B, B devient C, mais mathématiquement, ce qui a été fait cet enfant? Que faisiez-vous en ajoutant à chaque lettre? En effet, 1. Ainsi, lorsque vous changez de A à B, qui est un peu comme changer 65-66, ce qui signifie que mathématiquement il suffit d'ajouter 1. Et si vous étiez à mettre en œuvre que peu de technique trompeuse pour votre professeur dans le code, vous pourrait faire exactement ce que vient en ajoutant une seule lettre ensemble. Donc, avant longtemps, nous sommes allons voir comment nous peut profiter de ce réellement scramble véritablement et unscramble information. En attendant, sachez que nous avons commencé d'introduire un couple d'autres bibliothèques ici-- la chaîne un aujourd'hui. Et un site très utile nous espérons que vous trouverez est appelé reference.cs50.net, qui le personnel enseignant ont mis en place, de sorte que si vous voulez regarder comment fonctionne strlen, vous pouvez commencer à taper le nom de la fonction, il cliquez strlen, puis une explication moins à l'aise va apparaître. Ou si vous voulez le fonctionnaire Explication basé sur Linux, vous pouvez cliquer plus confortable en haut à droite, et il présentera la même information, mais en termes plus complexes. Voilà une ressource utile pour savent réellement ce que tout fait. La prochaine fois que nous allons jetez un oeil à l'Ovomaltine en plus, et nous présenter dans le monde de la cryptographie. Avant cela, nous verrons vous plus tard cette semaine. Et maintenant, Colton Ogden. On se voit mercredi. [Jouer de la musique] [Jouer de la musique] ENCEINTE 1: Qu'est-ce que la [BIP] faites-vous? ENCEINTE 1: Je mange mon dessert? Comment mangez-vous? Avec vos mains? [Jouer de la musique]