[MUSIQUE LECTURE] DAVID J. Malan: Très bien. C'est CS50, et ce C'est la fin de la semaine 2. Donc, aujourd'hui, nous allons de poursuivre notre regard à la façon dont nous représentons les choses sous la hood-- s'éloignant de nombres comme les entiers et valeurs à virgule flottante et en se concentrant sur les chaînes et programmes finalement plus intéressantes. Mais nous allons aussi jeter un oeil à un quelques problems-- spécifique à un domaine dont le premier sera être impliquant la cryptographie, l'art de brouiller l'information, dans lequel vous voyez ci-dessus ici C'est une image de Radio Orphan Annie anneau décodeur secret antan. C'est en fait une forme très primitive et la forme de cryptopgraphy aux enfants laquelle cet anneau a deux disks-- un intérieur et un extérieur. Et en faisant tourner l'un de ceux, vous pouvez essentiellement aligner des lettres comme A à Z avec d'autres lettres comme B à A. En d'autres termes, vous pouvez littéralement tourner l'alphabet, ainsi venir avec une application de lettres aux lettres de sorte que, si vous voulu envoyer un message secret pour quelqu'un comme Annie, vous pourriez écrire en bas de votre message, puis tourner les lettres, de sorte que, si vous dire à-dire «A», vous dites au lieu «B», Vous voulez dire «B», vous au lieu dit «C» - ou quelque chose d'un peu plus intelligent que that-- puis, en fin de compte, tant que Annie a ce décodeur anneau, elle peut décoder le message. Maintenant, vous pouvez rappeler, en effet, que cette a été utilisé dans un film très célèbre qui joue ad nauseam pendant la saison de Noël. Jetons un coup d'oeil ici. RALPHIE PARKER: «Il est connu de tous en résumé Ralph Parker est nommé un membre de Little Orphan Annie secret Cercle et a droit à tous les honneurs et les avantages survenant à celle-ci ". RALPHIE PARKER (narration): Little Orphan Annie signé. Contresigné, Pierre André! À l'encre. Honneurs et les avantages, déjà à l'âge de neuf ans. [MUSIQUE LECTURE] [RADIO CHATTER] RALPHIE PARKER: Viens. Allons de l'avant avec elle. Je n'ai pas besoin de tout ce que le jazz sur des contrebandiers et des pirates. Annonceur radio: écoutez demain nuit pour l'aventure finale de The Black Pirate Ship. Maintenant, il est temps pour Annie Secret Message pour vous les membres de la Secret Circle. Rappelez-vous les enfants, seuls les membres de Secret Circle Annie peut décoder le message secret de Annie. Rappelez-vous, Annie compte sur vous. Réglez vos épingles à B-2. Voici le Message-- 12, 11, 2-- RALPHIE PARKER (narration): Je suis dans ma première réunion secrète. RADIO ANIMATEUR: --25, 14, 11, 18, 16-- RALPHIE PARKER (narration): Oh, Pierre était dans une grande voix ce soir. Je pourrais dire que ce soir message était vraiment important. RADIO ANIMATEUR: --3, 25. C'est un message d'Annie elle-même. Rappelez-vous, ne le dites à personne. [PANTING] RALPHIE PARKER (narration): Quatre-vingt dix secondes plus tard, je suis dans la seule pièce de la maison où un garçon de neuf ans pourrait s'asseoir dans l'intimité et le décodage. Ah. «B» [RIRES] RALPHIE PARKER (narration): Je suis allé à l'autre. «E» Le premier mot est «être». Oui! Il venait plus facile maintenant. "U" [RIRES] RANDY PARKER: Aw, allez, Ralphie. Je dois y aller! RALPHIE PARKER: Je vais descendre, Ma. Whiz Gee. "T." «O» "Assurez-vous de "." Soyez sûr au "quoi? Quel était Little Orphan Annie essayez de dire? "Soyez sûr au" quoi? MERE: Ralphie, Randy a obtenu d'aller. Voulez-vous s'il vous plaît venez? RALPHIE PARKER: Très bien, maman! Je serai à raison! RALPHIE PARKER (narration): Je me rapprochais maintenant. La tension était terrible. Quel était-il? Le sort de la planète peut se bloquer dans la balance. MERE: Ralphie, Randy doit rentrer! RALPHIE PARKER: je serai bientôt sur, bordel de merde! RALPHIE PARKER (Narration): On y est presque! Mes doigts ont volé! Mon esprit était un piège d'acier. Chaque pore vibré. Il était presque clair! Oui! Oui! Oui! Oui! RALPHIE PARKER: "Assurez-vous à boire votre Ovomaltine ". Ovomaltine? Un commercial minable? [MUSIQUE LECTURE] RALPHIE PARKER: Fils de pute. [Rire] DAVID J. Malan: Donc, c'est alors un aperçu de ce que la cryptographie peut être pour un this-- boire d'antan. Ainsi, une annonce rapide. Si vous êtes libre ce Vendredi à 13h15 et serait vous joindre à nous pour CS50 déjeuner, la tête à cette adresse ici. Premier arrivé, premier servi, comme d'habitude. Mais au fil du temps, nous ferons en sorte que plus tous ceux qui voudraient participer peut programmer-sage. Donc cordes. Nous avons Zamyla-- qui vous avez maintenant rencontré le plus probable en ensemble de problèmes dont la 1-- nom est orthographié ainsi. Et supposons que vous avez tapé son nom dans un programme d'ordinateur qui est en utilisant quelque chose comme getString. Afin de récupérer ces frappes, comment allons-nous représentant une chaîne, un mot, un paragraphe, ou plusieurs lettres comme celles-là? Nous avons parlé la dernière fois sur entiers et problèmes qui découlent de débordement d'entier et valeurs à virgule flottante et les problèmes que surgir au sein de précision. Avec des cordes, nous au moins avoir un peu plus de flexibilité parce strings-- juste dans le réel monde-- peut être une longueur assez arbitraire. Assez courte, assez long. Mais même alors, nous allons trouver que les ordinateurs peuvent parfois à court de mémoire et même pas stocker une assez grande chaîne. Mais pour l'instant, nous allons commencer à visualiser une chaîne comme quelque chose dans ces boîtes Ici. Donc, ces six cases, dont chacun représente un caractère ou "char". Donc rappeler que "char" - c-h-un-r-- est l'un des types de données intégrés dans C. Et ce qui est bien, c'est que vous pouvez utiliser que de sorte que un bloc de construction, une pièce de puzzle, si vous voulez, pour former un grand type de données que nous allons continuer d'appeler une «chaîne». Maintenant, ce qui est utile sur la pensée des choses comme les chaînes de cette façon? Eh bien, il s'avère que nous pouvons effectivement tirer parti de cette structure accéder à des caractères individuels réellement d'une manière assez simple. Je vais aller de l'avant et de créer un fichier appelé "stringzero.c" mais vous pouvez l'appeler comme vous le souhaitez. Et sur le site Web du cours est déjà cet exemple, à l'avance, de sorte que vous n'avez pas besoin de taper dans tout cela. Et je vais aller de l'avant et faire en premier void main int. Et au bout de quelques jours, nous allons commencer à démêler ce vide est ici, pourquoi il est int côté principal, et ainsi de suite. Mais pour l'instant, nous allons continuer copier coller ça. Je vais déclarer une chaîne appelée s. Et je vais revenir de GetString quelles que soient les types d'utilisateur dans. Cela va être une simple programme, pas d'instructions, Je vais à l'aveuglette s'attendre à ce que l'utilisateur sait ce qu'il faut faire pour garder les choses simples. Et maintenant, je vais avoir une boucle for. Et à l'intérieur de ma boucle je suis va avoir int i obtient zéro. Et i est, encore une fois, juste une convention, une variable d'index pour le comptage, mais je pourrais appeler ce que je veux. Je vais faire i est bien inférieur à: Le nom de Zamyla est de six lettres. Donc, je vais sur le disque code là pour l'instant. Et puis i ++. Et maintenant à l'intérieur de ceux-ci bouclés accolades je vais faire printf, et je veux imprimer un caractère à la fois. Donc, je vais utiliser% c pour peut-être la première fois. Et puis je veux imprimer chaque caractère sur sa propre ligne. Donc, je vais mettre un petite barre oblique inverse n il. Fermer citation. Et maintenant, je veux faire quelque chose ici. Je veux imprimer le lettre spécifique dans la chaîne, s, comme je l'itération de zéro sur un maximum de six. En d'autres termes, je veux imprimer le caractère ième de l'art. Maintenant, comment puis-je faire cela? Eh bien tout comme les boîtes de cette représentation ici, en quelque sorte, évoquer la notion de la boxe lettres, vous pouvez faire de même que syntaxiquement en C en spécifiant simplement, Je veux imprimer sur les s ième caractère. En utilisant les crochets sur le clavier de votre ordinateur que sur un clavier américain sont généralement au-dessus de votre clé de retour. Ce n'est donc pas tout à fait raison encore, comme vous avez pu le remarquer. Mais je vais type de la fuite en avant ici. Et je vais faire faire chaîne 0. Mais avant je fais cela, nous allons voir si nous ne peut pas anticiper quelques erreurs courantes. Est-ce que cela va compiler? Non, je suis absent tout un tas de choses. Bibliothèques j'ai entendu. Alors, qui en-tête des fichiers pourrais-je vouloir ajouter ici? Ouais. PUBLIC: Vous devez E / S standard [inaudible] DAVID J. Malan: Excellent. J'ai donc besoin d'E / S standard. Pour quoi but faire je veux standard E / S? Pour printf. Donc inclure stdio.h. Et vous proposez également que j'inclus la bibliothèque CS50 pour quelle raison? Pour avoir des chaînes. Nous allons donc voir ce que La bibliothèque de CS50 fait pour créer cette notion de chaîne. Mais pour l'instant, vous ne pouvez penser de celui-ci comme un type de données réel. Donc, cela semble être un peu nettoyé. Et maintenant, je vais aller de l'avant et même faire faire chaîne 0. Compilé. Donc, c'est une bonne chose. Alors laissez-moi ./string0 agrandir afin que nous puissions voir de plus près ce qui se passe. Entrée. Z-A-M-Y-L-A saisir. Et nous avons imprimé sur du nom de Zamyla. Donc, c'est très bon. Alors maintenant, nous allons aller de l'avant et exécuter de nouveau, et taper le nom complet de Daven. Surprise, surprise. Entrée. Hmm. Nous n'avons pas imprimé Daven de prénom complet correctement. Maintenant, cela devrait être évident dans Retrospect cause de ce que, en quelque sorte, stupide décision de conception? Ouais, je disque codé le six à l'intérieur de ma boucle. Maintenant, je l'ai fait seulement parce que Je savais que le nom de Zamyla allait être six lettres. Mais ce n'est certainement pas une solution générale. Ainsi, il s'avère que nous pouvons dynamique déterminer la longueur d'une chaîne en appelant une fonction appelée strlen. Encore une fois, délibérément succinctement nommé juste pour le rendre plus facile à saisir. Mais c'est synonyme de obtenir la longueur d'une chaîne. Je vais retourner dans mon terminal fenêtre et re-exécuter le compilateur. Mais c'est à me crier dessus. Déclarant implicitement fonction de bibliothèque strlen de type unsigned int const-- Je suis perdu. Complètement. Donc, d'autant plus que votre yeux commencent à glaçure plus des messages d'erreur comme celui-ci, l'accent Honnêtement, sur les premiers mots. Nous savons que le problème est dans ligne 8, comme indiqué ici. Et c'est dans la chaîne-0.c. Déclarant implicitement fonction de bibliothèque strlen. Alors que va généralement un motif de messages d'erreur. Déclarant implicitement quelque chose. Donc en bref, ce que je n'ai semblait ont fait par rapport à la ligne 8, ici. Ce qui pourrait être la solution soit même si vous n'avez jamais utilisé strlen vous-même? PUBLIC: Partie d'une autre bibliothèque? DAVID J. Malan: Partie d'une autre bibliothèque. Donc, il est déclaré, pour ainsi dire. Il est mentionné dans certains fichiers autre que stdio.h et CS50.h. Maintenant, où est-il défini? Pour être honnête, vous devez soit juste le savoir du haut de votre tête, ou vous Google ce et découvrir. Ou sais, je l'ai ouvert dans le CS50 Appliance programme de terminal, qui est juste la grande version plein écran de ce qui est dans le bas de la fenêtre de gedit. Et il se trouve qu'il ya une commande similaire succinct, appelé homme de manuel, où si vous tapez dans le nom d'une fonction et appuyez sur Entrée, vous récupérerez assez documentation des arcanes. C'est juste le texte que, généralement, regarde un petit quelque chose de ce genre. C'est un peu écrasante à première vue. Mais franchement, je vais Que mes yeux ternes et se concentrer uniquement sur la partie Je me soucie pour le moment. Qui est-ce. Qui ressemble structurellement comme quelque chose que je suis familier avec. En effet, la page de manuel, de sorte de parler, vous dire dans ce fichier en-tête d'une fonction comme strlen est défini. Donc, je vais maintenant revenir à gedit. Et je vais aller de l'avant et ajouter ici #include et enregistrez le fichier. Je vais effacer l'écran avec Control L Si vous vous demandez. Et je vais faire re-fonctionner string.0, compile cette fois. ./string.0 Zamyla. Cela a semblé fonctionner Laissez-moi aller avant et relancez avec Davenport. Entrée. Et cela, aussi, semblait fonctionner. Donc, nous pouvons faire un peu mieux que cela, cependant, nous pouvons commencer à faire le ménage juste un peu. Et je vais effectivement introduire une autre chose maintenant. Je vais aller de l'avant et sauvegarde dans un fichier différent. Et je vais appeler ce fichier string1.c juste pour être compatible avec le code vous serez en mesure de trouver en ligne. Et nous allons nous concentrer sur exactement le même code. Il s'avère que j'ai été un peu prise pour acquis le fait que mon ordinateur portable, et, à son tour, l'appareil de CS50 a beaucoup de mémoire, un grand nombre de RAM, un grand nombre d'octets de l'espace dans lequel je peux stocker des chaînes. Mais la réalité si je tapé à long assez, et assez de frappes, Je pouvais dans le type de la théorie en plus de caractères de mon ordinateur a mémoire physique pour. Et ce qui est problématique. Tout comme un int ne peut compter si haut, en théorie, vous ne pouvez entasser autant de personnages dans la RAM ou Random de votre ordinateur Access Memory. J'avais donc mieux anticiper ce problème, même si cela peut être un rare coin cas, pour ainsi dire. Ne se produit pas très souvent, qui pourrait arriver. Et si cela arrive et je ne sais pas anticiper et programme pour elle, mon programme pourrait faire qui sait quoi. Geler, bloquer, redémarrer, peu importe. Quelque chose qui pourrait arriver prévu. Donc ce que je vais faire maintenant, désormais vraiment, est avant que j'aie jamais aveuglément utiliser une variable comme s que a été attribuée la valeur de retour de une autre fonction comme getString, Je vais faire en sorte que sa valeur est valide. Donc, je sais que pour avoir lu La documentation de CS50 pour getString, qui finalement, nous vous indiquerons à, que getString renvoie un symbole spécial appelé NULL, N-U-L-L dans tous casquettes, si quelque chose va mal. Donc, normalement, il renvoie une chaîne. Mais sinon, si elle retourne N-U-L-L-- nous finirons par voir ce qui a vraiment désigne: cela signifie simplement quelque chose de mauvais s'est passé. Maintenant, cela signifie, comme dans Scratch, Je peux vérifier une condition ici en C, si s n'est pas égal à NULL. Donc, si vous n'avez pas vu cela avant, cela signifie seulement n'est pas égal. Donc, c'est le contraire de égaux égalité, qui, rappelons-le, est différent du simple égaux, ce qui est mission. Donc, si s n'est pas égal à NULL, alors seulement Je veux exécuter ces lignes de code. En d'autres termes, Avant de plonger dans l'aveuglette et commencer l'itération s au-dessus de, et en le traitant comme il s'agit d'une séquence de personnages, je vais d'abord vérifier, attendez une minute, est s certainement pas égal à cette valeur spéciale, NULL? Parce que si c'est le cas, de mauvaises choses peuvent se produire. Et pour l'instant, supposons que de mauvaises choses passe signifie que votre programme plante, et vous ne pouvez pas forcément récupérer. Donc, franchement, il semble laid. C'est une sorte de confusion maintenant de regarder. Mais cela va devenir plus familier avant longtemps. Mais je vais proposer maintenant un autre amélioration. C'est une amélioration à la rectitude. Mon programme est maintenant plus correct, car dans les rares cas où pas assez de mémoire existe, je vais le gérer, et je vais juste ne fais rien. Au moins je ne vais pas tomber en panne. Mais nous allons faire une version finale ici. Et un fichier appelé string2.c. Je vais le coller même code pour un instant, et je vais mettre en évidence cette ligne 11, ici, juste un instant. Maintenant, la réalité est que les compilateurs intelligents comme Clang pourrait résoudre ce problème pour nous les coulisses sans notre jamais savoir. Mais nous devons penser à ce fondamentalement comme une conception problématique. Cette ligne de code est, bien sûr, disant: initialiser une variable i à 0. C'est assez simple. Et ce qui est encore une fois cette déclaration, ici, i ++, faire? Nous l'avons vu auparavant, mais nous ne pas vraiment en parler. PUBLIC: incrémentation i. DAVID J. Malan: i incrémentation. Ainsi, à chaque itération à travers cette boucle, à chaque cycle, vous i incrémentation par un. Ainsi, il devient de plus, et plus, et plus grand jusqu'à ce que la boucle se termine. Comment ça fin? Eh bien, il ya ce milieu condition qui nous avons utilisé avant. Vous avez vu et dans soluces dans le jeu de P. Mais quelle est cette parole? Faire la boucle suivante si Tant que i est inférieur à quoi? PUBLIC: La longueur de la chaîne. DAVID J. Malan: L' longueur de la chaîne. Donc, il traduit assez proprement à l'anglais dans ce sens. Maintenant, le problème est que chaque fois que je itérer à travers cette boucle en théorie, Je vous pose cette question. Est-i inférieure à la longueur de la chaîne de s? Est-i inférieure à la longueur de la chaîne de s? Maintenant, c'est moi en train de changer à chaque itération? Il est. En raison de la ++. Ainsi, chaque itération i s'agrandit. Mais est s devient plus grand, ou plus petit, ou de changer du tout? Non. Donc, en termes de design, l'un des axes le long de laquelle nous essayons d'évaluer le code dans la classe, cela se sent un peu stupide. Comme vous êtes littéralement, à chaque itération, cette boucle de demander l' encore même fichue question, et encore, et encore, et littéralement il ne va jamais changer. Au moins, si je ne le touche s et essayer de changer le contenu de l'art. Donc, je peux faire un peu mieux que cela. Et ce que je vais faire n'est pas déclarer une seule variable i, mais une seconde variable je vais arbitrairement, mais classiquement, l'appeler n. Attribuez n égale à la longueur de la chaîne de l'art. Et puis ici, je vais faire un peu d'optimisation intelligente, si prendre la parole, à la fin de la journée n'est pas plus correct ou pas moins correcte qu'auparavant. Mais c'est une meilleure conception. Dans le fait que j'utilise moins de temps, moins de cycles de CPU, de sorte de parler, de répondre à la même question, mais une seule fois. Vous avez des questions sur ce général principe de l'amélioration, dit, l'efficacité d'un programme? Ouais? PUBLIC: Pourquoi faire utiliser la [inaudible]? DAVID J. Malan: Bonne question. Alors pourquoi avons-nous mis le ++ sur la fin de i au lieu de début de la i? Dans ce cas, il a aucun effet fonctionnel. Et en général, j'ai tendance à utiliser l'opérateur de postfix de sorte que c'est un peu plus clair à quand l'opération se passe. Pour ceux qui ne connaissent, il ya un autre déclarations par lesquelles vous pourriez faire ++ i. Ceux-ci sont fonctionnellement équivalent dans ce cas parce qu'il n'y a rien d'autre autour de cette incrémentation. Mais vous pouvez venir avec cas et de lignes de code où cela fait une différence. Donc, en général, nous ne faisons pas même parler de celui-ci. Parce que franchement, il rend votre Code sexy, et une sorte de ciré, et moins de caractères. Mais la réalité est qu'il est beaucoup plus difficile, Je pense que, même pour moi pour envelopper mon esprit autour d'elle parfois, l'ordre des opérations. Donc, en passant, si vous vraiment pas comme ça, même si c'est un peu sexy la recherche, vous pouvez également faire i + = 1, qui est la version la plus laid de la même idée pour postfix incrémentation. Je dis cela et vous devrait faire plaisir, mais vous viendrez à voir le code comme quelque chose de beau avant longtemps. [Rires] DAVID J. Malan: Droit? Ouais. Question au milieu. PUBLIC: Avez-vous besoin de dire int n? DAVID J. Malan: Vous faites pas besoin de dire int n. Donc, parce que nous l'avons déjà dit int, vous n'avez pas besoin de le répéter. Le hic, c'est que n doit être du même type de données que je. Donc, c'est juste une commodité ici. Ouais. PUBLIC: Pouvez-vous revenir sur le le support de caractères d'impression i nouveau? DAVID J. Malan: Absolument. Donc% c, rappeler de la dernière temps, est juste un espace réservé. Cela signifie mettre un omble ici. barre oblique inverse n, bien sûr, juste des moyens de mettre un saut de ligne ici. Alors que tout laisse, maintenant, cette pièce de la nouvelle syntaxe. Et cela est littéralement dire, saisir la chaîne appelée s et va chercher son caractère ième, pour ainsi dire. Et je continue à dire caractère ième car à chaque itération de cette boucle c'est comme si nous imprimons , tout d'abord de support 0, en tant que programmeur pourrait-on dire. S Ensuite support 1, puis s support 2, puis 3, puis 4. Mais bien sûr, c'est une variable, donc je l'exprime avec i. Clé, cependant, est de réaliser, surtout si vous avez pas été acclimater à ce monde de la programmation, où nous avons tous semblent compter à partir de zéro, je dois commencer à compter à partir de zéro maintenant. Parce que les chaînes, premier caractère, la z dans Zamyla est pour le meilleur ou pour le pire aller vivre à l'emplacement numéro zéro. Très bien, alors laissez-moi faire nous revenir ici pour Zamyla et voir ce qui se passe réellement en dessous de la hotte. Donc, il ya cette notion de type coulée. Vous pourriez avoir fait joué avec déjà, peut-être pour le pirate édition de P défini un. Mais le type coulée se réfère seulement à la capacité en C et d'autres langues à convertir un type de données à l'autre. Maintenant, comment pourrions-nous voir ce très franchement? Donc, le rappel, le début de l'alphabet anglais. Et le contexte, rappelons-le, de comme il ya une semaine est ASCII. Le code standard américain pour l'échange d'information. Qui est juste un très long chemin de dire une cartographie des lettres de numéros, de chiffres et de lettres. Donc A à M ici, dot dot point, les lignes avec, rappel, le nombre décimal 65 sur place. Et nous n'avons pas parlé de cette façon explicite, mais il ya sûrement similaire nombre de lettres minuscules. Et en effet, il existe. Le monde a décidé quelques années Il ya ce petit un, minuscules a, va être 97. Et petit b va à 98, et ainsi de suite. Et pour toute autre touche votre clavier, il est va être une tendance similaire de bits. Ou de manière équivalente, un nombre décimal. Donc la question à portée de main, alors, comment pouvons-nous réellement voir ce sous le capot? Donc, je vais passer à gedit nouveau. Et plutôt que de type celui-ci à partir de zéro, Je vais aller de l'avant et ouvrir juste quelque chose à partir du code d'aujourd'hui, intitulé ASCII zéro. Et ASCII zéro ressemble à ceci. Donc, nous allons envelopper nos esprits autour de cela. Alors d'abord, j'ai commenté le code, ce qui est agréable. Parce que c'est littéralement me dire à quoi s'attendre, afficher une cartographie des lettres majuscules. Maintenant, je ne sais pas trop ce que je dire par là, nous allons donc en déduire. En anglais, peut-être peu technophile anglais, Qu'est-ce que la ligne 18 semble à faire pour nous? Il suffit de la ligne 18. Qu'est-ce qu'il induire? Qu'est-ce que ça va le coup d'envoi ici? PUBLIC: Une boucle. DAVID J. Malan: Une boucle. Et combien de fois est que va parcourir? PUBLIC: [interposition VOIX] six fois. DAVID J. Malan: six fois. PUBLIC: 26 fois. DAVID J. Malan: 26 fois. Ouais, désolé. 26 fois. Pourquoi? Eh bien, c'est un peu bizarre, mais J'ai commencé à compter à partir de 65. Ce qui est bizarre, mais pas mal. Il n'est pas mauvais par exemple. Et je le fais seulement En effet, pour cet exemple, Je suis une sorte d'anticiper que le capital A était de 65. Maintenant, ce n'est pas le plus élégant façon de le faire, de sorte de coder en dur valeurs ésotériques qui ne est jamais attendu à retenir. Mais pour l'instant, remarque que je suis faire ce à travers plus de 65 26. Parce qu'apparemment je ne veux même pas pour faire le calcul dans ma tête. Donc, je vais laisser le compilateur faire. Mais alors, sur chaque boucle, chaque itération de la boucle, je incrémenter i. Alors maintenant, cela semble un peu obscur. Mais nous devrions avoir la construction de base blocs avec lesquels comprennent. % C est juste un espace réservé pour un car. % I est un espace réservé pour un int. Et il se trouve que l'utilisation de ce nouvelle syntaxe, ce parenthèses, si prendre la parole, si un type de données l'intérieur d'un parenthèses, Je ne peux forcer le compilateur à traiter i est un entier non, mais comme un produit de carbonisation. Me montrant ainsi le caractère équivalent de ce nombre. Maintenant, ici, ce code est à peu près identique. Je voulais juste faire Super explicite le fait que je commence à 97, qui est en minuscules un. Sur place par 26 autres lettres. Et je doing-- nouveau, coulée i, pour ainsi dire. Ou de type coulée i, pour ainsi dire. D'un int en char. Donc le résultat final va être, franchement, les informations que nous savons déjà. Je vais faire ascii-0 dot-- pas dot c. Avis, vous avez probablement fait que erreur que je viens de faire accidentellement. Assurez-ascii-0. Maintenant, je vais faire ./ascii-0. Je vais effectuer un zoom avant, et, malheureusement, ça va faire défiler l'écran. Mais nous voyons toute une carte où une carte de 97, cartes b à 98, et si nous faisons défiler jusqu'à plus A, bien sûr, les cartes à 65. Donc, ce n'est que pour dire que ce que nous avons prêché, il est cette équivalence, on en fait le cas dans la réalité. Ainsi, une modification rapide de cette. Permettez-moi de m'ouvrir ascii-1.c. Et remarquez ce savant, sorte de, la clarification de cette. C'est ascii-1.c, et remarquer ce truc de fou. Et cela devient vraiment le coeur de ce que les ordinateurs font. Même si nous, les humains seraient pas compter en termes de letters-- Je ne commence pas à penser, tout droit puis un b, et les utiliser pour compter des objets physiques. Vous pouvez certainement dire que je veux initialiser une variable appelée c-- mais j'aurais pu appeler ce anything-- si c est initialisée au capital A. Parce que à la fin de la journée, l'ordinateur ne vous inquiétez pas ce que vous stockez, il ne se soucie que la façon dont vous voulez de présenter cette information. Comment voulez-vous que l'ordinateur interpréter ce modèle de bits? Donc, ce n'est pas quelque chose que je Je recommande généralement faire. C'est vraiment juste un exemple pour faire que vous ne pouvez absolument initialiser un entier en char. Parce que sous la Hotte d'un char, bien sûr, est juste un nombre de 0 à 255. Ainsi, vous pouvez certainement mettre à l'intérieur d'un int. Et ce que cela aussi montre que l'on est peut convertir d'un taper à l'autre, ici, finalement l'impression de la même chose. Et en fait, ce que je fixera online-- a voulu dire cela, encore une fois, ici. Permettez-moi de nettoyer cette place en ligne, et nous allons voir dans une procédure pas à pas en ligne, au besoin, ce qu'il a été prévu. Dáccord. Ainsi dernier exemple maintenant impliquant un et des b et puis nous allons prendre les choses d'un cran. Donc, avec un et des b et c de la capitalisation et l'équivalence de celui-ci, nous allons jetez un oeil à cet exemple, ici. Un autre exemple de code. Nous allons ouvrir un qui est fait déjà, pour nous ne pas avoir à taper tout à partir de zéro. Et remarquez en prévision nous utilisons tête multiple fichiers, parmi lesquels notre nouvel ami, string.h. Maintenant, cela ressemble, à première coup d'oeil, un peu énigmatique. Mais nous allons voir si nous ne pouvons pas raisonner par ce qui se passe ici. D'abord, je reçois une chaîne de l'utilisateur, et je mets cette chaîne dans une variable appelés s. Copier coller d'avant. Dans la ligne 22, je suis apparemment faire exactement ce que Je l'ai fait il ya un moment, je itération sur les caractères de l'art. Et les nouveaux trucs ici utilisent longueur de la chaîne, l'optimisation mineur de stockage de la longueur de chaîne n, Plutôt que d'appeler strlen à nouveau, et encore, et encore. Et vérifiais juste que i est inférieur à n. Maintenant, ici, les choses se un peu intéressant. Mais c'est juste une application de cette même idée nouvelle. Qu'est-ce que l'anglais ne s support i représente? PUBLIC: Compter chaque caractère [inaudible]. DAVID J. Malan: Compter chaque personnage. Et encore plus succinctement, s support i représente quoi? Diriez-vous. Pas vous mettre dans l'embarras. PUBLIC: Well-- DAVID J. Malan: Donc, si le mot is-- si la chaîne est Zamyla, qui starts-- PUBLIC: --vous traitent de les caractères séparément: DAVID J. Malan: Bon. Exactement. La notation de support carré vous permet pour accéder à chaque caractère individuel, afin de support 0 va être l' premier caractère de la chaîne. s étrier 1 va être le deuxième, et ainsi de suite. Donc la question que je pose, ici, dans cet état, c'est quoi? Est le caractère ième de s plus ou égale à un minuscule? Et qu'est-ce que cela signifie, ici, avec les doubles esperluette? AUDIENCE (ENSEMBLE): Et. DAVID J. Malan: Et. C'est juste équivalent à cela. Et ce n'est pas un mot-clé dans C, vous devez utilisation, agaçante, esperluette esperluette. Et ce, à l'inverse, est demandé est s de i-ème caractère inférieures ou égales en minuscules z? Et encore une fois, c'est là comprendre le sous-jacent mise en oeuvre d'un ordinateur est logique. Notez que, même si je n'ai la dot dot dot là-bas, ressemble a à z en minuscules sont toutes les valeurs contiguës hausse par rapport à 97 sur place. Et même pour les majuscules à partir de 65. Ainsi, la livraison, alors, est que en anglais, comment décririez-vous quelle ligne 24 est en train de faire? Ouais? AUDIENCE: Le 24 c'est vérifiant si chaque caractère est une minuscule. DAVID J. Malan: Il est de vérifier si chaque caractère est une lettre minuscule. Ainsi, même de façon plus succincte, est la caractère ième de s minuscule? C'est tout ce que nous sommes exprimer ici toute logique, un peu énigmatique, mais en fin de compte assez franchement. Est-s de ième caractère en minuscule? Si c'est le cas, et c'est là que les choses obtenir un peu l'esprit de flexion pour un instant, si c'est le cas, aller avant et imprimer un caractère. Donc, c'est juste un espace réservé, mais ce personnage? Pourquoi je fais du support i moins ici cette expression? Eh bien remarquer le modèle ici. Les chiffres réels ne comptent pas tellement. Mais remarquez que 97 est à quelle distance de 65? PUBLIC: 32. DAVID J. Malan: 32. A quelle distance est de 98 à partir de 66? PUBLIC: 32. DAVID J. Malan: Petit c de grand C? 32. Donc, il ya 32 sauts de une lettre à l'autre. Donc, franchement, je, pourrait pour simplifier ce que. Mais je suis un peu dur de codage cette faible compréhension de niveau que le lecteur ne soit jamais allez comprendre. Je vais donc à généraliser comme, je connaître les lettres minuscules sont plus grandes. Je sais que les lettres majuscules sont des valeurs plus petites, ironiquement. Mais ce n'est réellement équivalente à dire soustraire 32 de support s i. Ainsi, dans le cadre de ceux-ci lettres, si la lettre se trouve être un, minuscule un, et je soustrais 32, quel effet cela at-il, mathématiquement, sur un en minuscules? PUBLIC: Capitalizes-- DAVID J. Malan: capitalise. Et en effet, c'est pourquoi notre programme est appelé capitaliser zéro. Cette émission capitalise une lettre, après vérification si c'est en effet une lettre minuscule. Sinon, dans la ligne 30, que dois-je faire si ce n'est pas une lettre minuscule que je suis regardant à un particulier itération de la boucle. Il suffit de l'imprimer. Donc, ne pas changer des choses ce n'est pas même minuscules. Limitez-vous à petit un peu par z. Maintenant, c'est assez mystérieux. Mais à la fin de la journée, ce est de savoir comment nous, il était une fois, dû mettre en place des choses. Si je place j'ouvre capitaliser un, oh Dieu merci. Il ya une fonction appelé à supérieure qui peut faire tout ce que nous venons de faire à un niveau assez faible. Maintenant, pour supérieure est intéressant car elle est déclarée dans un fichier, et vous ne sauriez ce en vérifiant la documentation, ou étant dit, par exemple, dans la classe, où il existe, dans un ctype.h de fichier appelé. C'est donc une autre nouvelle de nos amis. Et pour ne supérieure exactement ce que son nom suggère. Vous pouvez passer, comme argument, entre ces parenthèses, un certain caractère. Je vais passer dans le caractère ième de s en utilisant notre nouvelle notation de fantaisie impliquant des crochets. Et faire une supposition, ce qui est le retour valeur de la partie supérieure va apparemment être? Une lettre majuscule. Une lettre majuscule. Donc, si je passe en minuscules un, espérons-le, par définition de la supérieure, il va revenir un majuscules A. Sinon, si ce n'est pas une lettre minuscule Tout d'abord, je viens de l'imprimer. Et en effet, remarquer l' deuxième ami ici. Pas seulement pour supérieur existe, mais est inférieure, répond effectivement à cette question pour moi. Maintenant, celui qui a écrit ces choses, 10s de il ya quelques années, vous savez quoi? Mise en œuvre de haut et est réduire en utilisant le code suivant. Mais encore une fois, en accord avec cette idée de s'abstraire, sorte de niveau inférieur détails de mise en œuvre. Et debout sur les épaules de personnes qui sont venus avant nous, en utilisant les fonctions comme à haut et est plus faible, ce qui assez merveilleusement bien sont nommé à dire ce qu'ils font, est un paradigme merveilleuse à adopter. Maintenant, il s'avère que si je lis la page de manuel pour, disons, à supérieure, J'apprends quelque chose d'autre. Ainsi, l'homme toUpper. C'est un peu écrasante. Mais remarquez, voici que la mention de le fichier d'en-tête que je devrais utiliser. Soit dit en passant, parce que ce est trompeuse, la fonction utilise des entiers au lieu de caractères pour des raisons de vérification d'erreur. Mais nous allons peut-être venir revenir dans l'avenir. Mais remarquez, ici, aux convertis supérieures la lettre c en majuscule si possible. Donc, c'est assez simple. Et maintenant, soyons un peu plus précis. Regardons la partie de la page de manuel sous la valeur de retour. La valeur retournée est que de la lettre convertie. Ou c si la conversion n'était pas possible, où c est l'entrée originale. Ce que je sais d'ici, de l'argument de la partie supérieure. Alors, quelle est la livraison de cette? La valeur retournée est que de la lettre convertie, ou c, la lettre originale, si la conversion n'a pas été possible. Quelles améliorations puis-je donc apporter à la conception de mon code? Ouais? PUBLIC: Vous pouvez supprimer le reste. DAVID J. Malan: je peux retirer l'instruction else, et pas seulement l'instruction else. PUBLIC: Vous pouvez supprimer [inaudible]. DAVID J. Malan: je peux retirer l'ensemble fourche sur la route, le si d'autre complètement. Donc, en effet, permettez-moi d'ouvrir la version finale de ce, capitaliser-2 et constater à quel point, si vous, sexy, le code devient maintenant, en ce que j'ai réduit de certains sept ou si les lignes à seulement quatre, la fonctionnalité que je comptais en appelant simplement à supérieur, passant de support i, et l'impression , avec l'espace réservé% c, ce caractère particulier. Maintenant, sans doute, il ya un bug, ou au moins le risque d'une erreur, dans ce programme. Il suffit donc de revenir pour une livraison plus tôt, que dois-je faire probablement aussi dans ce programme pour le rendre plus robuste, de sorte qu'il n'y a aucun moyen il peut planter, même dans de rares cas? PUBLIC: Assurez-vous que ce n'est pas NULL. DAVID J. Malan: Assurez-vous que ce n'est pas NULL. Alors, vraiment, de faire cette super bon, je dois faire quelque chose comme: si s n'est pas NULL, aller de l'avant et d'exécuter ces lignes de code, qui Je peux alors tiret comme ça, puis mettre dans mon accolade fermée. Donc bon attachant ensemble des deux idées. Ouais? PUBLIC: Pourriez-vous utiliser une boucle Do While, à la place? DAVID J. Malan: Pourriez Je fais une boucle Do While? PUBLIC: --vous veulent s'assurer que vous avez réellement [inaudible]. DAVID J. Malan: Pourriez vous utilisez un do tout? Réponse courte, non. Parce que vous êtes sur le point de introduire un autre cas de coin. Si la chaîne est de longueur nulle. Si par exemple, je viens de frapper Entrez, sans jamais taper un Zamyla. Je vais vous restituer une réelle chaîne, comme nous le verrons par la suite voyons, qui a zéro caractères. C'est encore une chaîne, c'est juste super court. Mais si vous utilisez un do tout, vous allez à l'aveuglette essayer de faire quelque chose avec respecter à cette chaîne, et rien ne va être là. PUBLIC: Eh bien, si vous avez fait faire [inaudible] tandis que s-- DAVID J. Malan: Oh, je vois, garde obtenir une chaîne de l'utilisateur. Donc, réponse courte, vous pourrait, et garder harceler à vous donner une chaîne qui est suffisamment court pour tenir dans la mémoire. Absolument. J'ai juste choisi de ne pas. S'ils ne me donnent pas la chaîne I voulez, je m'en vais, je renonce. Mais absolument, à cet effet, vous pouvez absolument le faire. Ainsi, les fichiers d'en-tête de la bibliothèque qui nous sommes maintenant familiers avec ces choses, ici. E / S standard, CS50.h, string.h, ctype.h, et il ya, en effet, d'autres. Certains d'entre vous ont découvert la bibliothèque de mathématiques en math.h. Mais permettez-moi de vous présenter, aujourd'hui, à cette ressource que le personnel CS50, Davin, et Rob, et Gabe particulier ont mis en place. Ce sera bientôt le lien sur le site Web de cours. C'est ce qu'on appelle référence CS50. Qui vient de vous donner un rapide goût de celui-ci, fonctionne comme suit. Permettez-moi de passer à reference.cs50.net. Vous verrez sur la gauche l'autre une liste écrasante des fonctions qui viennent avec c. Mais si je me soucie, pour le moment, quelque chose comme strlen, Je peux taper là. Il filtre la liste à ce que je me soucie. Je vais cliquez dessus. Et maintenant, sur la gauche, vous verrez ce que nous espérons est un plus simple, humain explication amicale de la façon dont cette fonction. Retourne la longueur d'une chaîne. Voici un résumé, voici comment vous utiliser en termes de fichier d'en-tête, et en termes de ce que la fonction ressemble en termes de ses arguments. Et puis ici, les rendements la longueur d'une chaîne. Mais pour ceux d'entre vous plus à l'aise, vous pouvez réellement plus confortable cliquez, et le contenu de ce Cette page, maintenant, va changer pour être les valeurs par défaut de ce vous obtenez en utilisant la page de manuel. En d'autres termes, CS50 référence est une simplification de pages de manuel par le personnel, pour les étudiants. En particulier, ceux qui sont moins à l'aise et entre les deux, de sorte que vous ne pas avoir à essayer de conclure votre esprit autour, franchement, une syntaxe assez cryptique et de la documentation parfois. Donc, gardez cela à l'esprit dans les jours à venir. Donc, ici, encore une fois, est un Zamyla. Posons maintenant une question qui est un peu plus humain accessible. Merci à Chang, qui a été imprimer plus d'éléphants non-stop depuis quelques jours. Nous avons l'occasion de donner au moins un d'entre eux loin. Si nous pouvions obtenir un seul bénévole à venir sur place pour dessiner sur l'écran. Que diriez-vous ici? Venez sur place. Quel est votre nom? ALEX: Alex. DAVID J. Malan: Alex. Bien. Alex, venez sur place. Nous sommes sur le point de voir votre écriture manuscrite sur l'écran ici. Très bien, ravi de vous rencontrer. ALEX: Nice vous vous rencontrer. DAVID J. Malan: Très bien. Donc, super simple exercice. Bar n'est pas élevé à obtenir un éléphant aujourd'hui. Vous jouez le rôle de getString. Et je vais vous dire juste la chaîne que vous avez obtenu. Et supposons que vous, getString, ont été appelés. Et l'être humain, comme moi, a tapé dans Zamyla, Z-A-M-Y-L-A. Il suffit d'aller de l'avant et écrire Zamyla sur la écran comme si vous avez obtenu il et stocké quelque part en mémoire. Laissant la place pour ce qui sera de plusieurs autre words-- c'est OK, continuez. [Rires] Donc Zamyla, excellent. Alors maintenant, supposons que vous, getString, soient appelés de nouveau. Et donc, je vous donne, à la clavier, avec un autre nom, Belinda. Bien. Et maintenant, la prochaine fois que getString est appelé, je tape quelque chose comme Gabe, G-A-B-E. Vous êtes vraiment prendre la mémoire à accès aléatoire du coeur. Qui est tout dessiner complètement au hasard. Dáccord. [Rires] ALEX: Désolé mon écriture est mauvaise. DAVID J. Malan: Non, ce n'est pas grave. Et que diriez-vous Rob, R-O-B. Dáccord. Bon. Donc, je ne vous ai pas anticiper voudrais sorte de mettre les choses de cette façon. Mais nous pouvons faire ce travail. Alors, comment avez-vous fait la pose ces caractères dans la mémoire? En d'autres termes, si l'on pense cet écran rectangulaire noire comme représentant un RAM, ou mémoire de l'ordinateur. Et de rappeler que la RAM est juste tout un tas d'octets, et les octets sont tout un tas de bits. Et les bits sont en quelque sorte mis en oeuvre, en général avec une forme d' électricité dans le matériel. Donc, c'est en quelque sorte le stratification nous avons parlé et peut maintenant tenir pour acquis. Comment avez-vous sur décider où écrire Rob contre Gabe contre Belinda contre Zamyla? ALEX: Je l'ai fait dans le commandez que vous m'avez dit. DAVID J. Malan: Et ce qui est vrai. Mais ce régie où vous mettez Le nom de Belinda et le nom de Gabe? ALEX: Rien? DAVID J. Malan: [RIRES] Alors qui fonctionne, c'est très bien. Donc, les ordinateurs sont peu plus ordonnée que cela. Et donc quand nous y retournerions implement-- juste un moment-- quand on fait mettre en œuvre quelque chose comme GETSTRING dans un ordinateur, Zamyla pourrait être aménagé à peu près comme vous l'avez fait à l'écran, là-bas. Et ce qui est essentiel de remarquer ici, ce que Alex fait, est il est une sorte de démarcation dans chacun de ces mots, non? Vous n'avez pas écrit Z-A-M-L-Y-A-B-E-L-I-N-D-A-G-A-B-- en d'autres termes, il ya une sorte de démarcation qui semble être, en quelque sorte, l'espacement aléatoire entre ces différents mots. Mais c'est une bonne chose, parce nous, les humains peuvent maintenant visualiser que ceux-ci sont quatre chaînes différentes. Ce n'est pas seulement une séquence de beaucoup de personnages. Ainsi, un ordinateur, alors, en attendant, pourrait prendre une chaîne comme Zamyla, mettre chacune de ces lettres à l'intérieur d'un octet de la mémoire. Mais ce nombre est beaucoup plus grand, bien sûr, de six caractères. Il ya tout un tas de RAM. Et désormais, ce grille de cases va pour représenter ce que Alex juste fait ici sur l'écran. Et maintenant, Alex, nous pouvons vous offrir un bleu ou un éléphant orange de Chang. ALEX: Je vais prendre un éléphant bleu. DAVID J. Malan: Un éléphant bleu. Ainsi, une salve d'applaudissements, si nous le pouvions, pour Alex ici. [Applaudissements] ALEX: Je vous remercie. DAVID J. Malan: Je vous remercie. Donc, les plats à emporter est que, même si le modèle type de changé au fil du temps, ici sur le plateau, il y avait cette démarcation entre les différentes chaînes Alex a obtenu pour nous. Maintenant, les ordinateurs, franchement, pourrait faire la même chose. Ils pourraient genre de plop chaînes partout dans la RAM. Jusqu'à ici, ici, ici, ici-bas. Ils pourraient faire exactement cela. Mais, bien sûr, c'est probablement pas la meilleure planification. Droite? Si je n'arrêtais pas de demander à Alex obtenir les noms, probablement il avait mettre un peu plus ici-bas, peut-être jusqu'à ici, ici, ici, la suite ici. Mais avec un peu plus de planification, certes, nous pourrions mettre les choses plus proprement. Et en effet, c'est ce que fait un ordinateur. Mais le hic, c'est que si la chaîne suivante je reçois après Zamyla est quelque chose comme Belinda, proposer où nous pourrions écrire le lettre b à l'égard de cette grille? Où aimeriez-vous aller? A droite de l'un, au-dessous de l'axe z, au-dessous de l'un? Quelles seraient vos premiers instincts être? AUDIENCE: En dessous de la z. DAVID J. Malan: Donc en dessous de la z. Et c'est à peu simple, non? C'est plutôt drôle, c'est ce que nous faisons sur un clavier quand nous avons frappé Entrez, ou un e-mail lors d'un liste à puces de choses. Mais la réalité est que les ordinateurs essayer d'être plus efficace, et entasser certainement autant données dans la RAM que possible, de sorte que vous ne perdez pas des octets. De sorte que vous ne perdez pas de tout l'immobilier de l'écran. Et le problème, cependant, c'est que si nous avons littéralement mis la lettre b après un, comment allons-nous savoir où le nom de Zamyla se termine et le nom de l'Belinda commence? Donc, vous venez de proposer les humains, bien, Appuyez sur la touche Entrée, essentiellement. Mettez-le ci-dessous. Ou même comme Alex l'a fait, il suffit de commencer l'écriture le nom ci-dessous suivant le précédent, et au-dessous de celle-ci, et alors inférieur à celui-ci. C'est un repère visuel. Les ordinateurs ont un autre repère visuel, mais c'est un peu plus succinct. C'est ce personnage funky. Backslash 0, ce qui est peut-être rappelle barre oblique inverse n, et ainsi de suite, maintenant. Les séquences d'échappement spéciales. Backslash 0 est la voie de représentant huit bits de zéro dans une rangée. 0000 0000. La manière dont vous exprimez qui n'est pas à cliquez sur le numéro zéro de votre clavier, car en fait c'est un char ASCII. Il ressemble à un certain nombre, mais est en fait un nombre décimal que représente la circulaire glyphe, la police circulaire. Pendant ce temps, la barre oblique inverse zéro signifie, littéralement mettre huit zéro octets ici pour moi. C'est donc quelque peu arbitraire. Nous aurions pu utiliser n'importe quel modèle de bits, mais le monde décidé quelques années Il ya, à ce que représentent la fin d'une chaîne de caractères dans la mémoire, il suffit de mettre tout un tas de zéros. Parce que nous pouvons détecter. Maintenant, ce qui signifie qu'aucune lettre de la alphabet peut être représenté par des zéros. Mais ce n'est pas grave, nous avons déjà vu que nous utilisons sur 65 en 97 sur place. Nous n'avons pas eu partout fermer à zéro. Alors Belinda dans la mémoire d'un ordinateur qui se passe réellement à aller ici. Je l'ai dessiné en jaune juste d'attirer notre attention. Et remarquez, aussi, ce est tout à fait arbitraire. J'ai dessiné comme une grille. Comme, RAM est juste un objet physique. Il ne doit pas nécessairement lignes et de colonnes, en tant que tel. Il a juste un tas d'octets mis en œuvre dans le matériel en quelque sorte. Mais si, après que Lionel tapé le nom de Gabe, il va finir ici en mémoire, et si j'ai tapé dans le nom de Daven, par exemple, il va finir ici. Et je peux continuer à écrire encore plus de noms. Malheureusement, si j'essaie d' écrire un super long nom, Je pourrais éventuellement manquer de mémoire. Dans ce cas, getString est va retourner NULL, comme nous l'avons dit. Mais heureusement, au moins en ce visuel ici, nous n'avons pas tout à fait aussi loin. Maintenant, ce qui est bien c'est que cette idée générale de traiter les choses comme dans les boîtes est représentatif d'une caractéristique de C et un grand nombre de langues, connue sous le nom d'un tableau. Un tableau est un autre type de données. C'est une structure de données, si vous voulez. Structure dans le sens de celui-ci en fait, en quelque sorte, à la recherche comme une boîte, au moins dans l'oeil de votre esprit. Un tableau est un contiguë séquence de types de données identiques, dos à dos à dos à dos. Ainsi, une chaîne, dans d'autres mots, est un tableau de caractères. Un tableau de caractères. Mais il s'avère que vous pouvez avoir tableaux de bouquets de choses. En fait, nous pouvons mettre encore nombres dans un tableau. Donc, la forme sous laquelle nous allons commencer déclarant ces données structure connue en tant que tableau va également utiliser des crochets. Mais ces crochets vont avoir un sens différent dans ce contexte. Et nous allons voir comme suit. Supposons que j'ai ouvert un nouveau fichier ici. Et je sauve ce que ages.c. Et je vais mettre dans mon dossier ici. Et maintenant, je vais aller de l'avant et commencez à taper quelque chose comme inclure CS50.h, inclure stdio.h, int void main. Et puis à l'intérieur d'ici, je veux d'abord avoir un int appelé âge. Et je vais l'utiliser pour obtenir un int de l'utilisateur pour son âge. Mais ce programme est destiné à être utilisé par plusieurs personnes, pour n'importe quel contexte. J'ai une ligne de gens. Tous ont à taper dans leur l'âge de peut-être certains, je ne sais pas, concurrence, ou d'un événement que qu'ils sont arrivés pour. Donc, la prochaine personne, je besoin d'une autre variable. Parce que si je fais juste âge obtient getInt, c'est va tabasser, ou écraser l'âge de la personne précédente. Donc, ce n'est pas bon. Donc, mon premier instinct peut-être, oh, tout droit, si je veux obtenir plusieurs personnes de ages-- appelons ce age1, int age2 obtient int, int age3 obtient getInt. Et maintenant, je vais utiliser du code de pseudo ici. Faire quelque chose avec ces chiffres. Nous partons pour un autre jour ce nous y faisons, parce que nous ne soins pour le moment sur age1, âge2 age3. Malheureusement, une fois que je compiler ce programme et le mettre en face des utilisateurs réels, quelle est la mauvaise conception fondamentalement décision me semble avoir fait? Ouais? PUBLIC: [inaudible] DAVID J. Malan: Ouais, Je n'ai même pas essayé de comprendre comment plusieurs siècles m'importe fait-il? Si j'ai moins de trois personnes ici, et donc moins de trois ans, Je suis toujours aveuglément attendre trois. A Dieu ne plaise quatre personnes se présentent. Mon programme ne veut tout simplement pas même les soutenir. Et ce, longue histoire Bref, c'est pas une bonne habitude. Droite? Je suis essentiellement la copie et coller le code et vous ajustez les noms de variables. Et, mon dieu, si vous aviez, pas trois âges, mais 10 ou 100, ou même 6500 étudiants, par exemple. Cela ne va pas être particulièrement Code élégant, ou durable. Vous allez avoir à réécrire le programme à chaque fois votre numéro de changements de personnes. Donc, heureusement, dans notre effectif fichier ages.c pour aujourd'hui, nous avons une solution plus intelligente. Tout d'abord, je vais emprunter la construisons, nous avons utilisé quelques fois, ce faire tout en boucle, afin d'obtenir le nombre de personnes dans la salle. Je vais à harceler l'utilisateur, encore une fois et encore, jusqu'à ce qu'il me donne une valeur de n qui est un entier positif. J'aurais pu utiliser, dernier temps-y int positif. Mais nous n'avons pas cette pour de vrai, alors je suis allé de l'avant et re mis en œuvre cette idée. Maintenant, ici, c'est le nouveau truc. Dans la ligne 27, comme les commentaires la ligne 26 indique, déclarer un tableau dans lequel pour stocker l'âge de chacun. Donc, si vous voulez obtenir, pas un int, pas deux ints, mais tout un tas d'entiers. En effet les entiers n, où n pourrait trois, peut-être 100, peut-être 1000. La syntaxe, tout simplement, est de par exemple, quel type de données que vous voulez? Que voulez-vous appeler ce morceau de mémoire? Qu'est-ce que vous voulez appeler la grille qui ressemble à ce imagée? Et entre parenthèses ici, dites-vous la taille que vous voulez que le tableau soit. Et plus tôt, quand j'ai dit que la syntaxe est un peu différent ici, nous sommes toujours en utilisant des crochets, mais quand je suis déclaration d'un tableau, le nombre à l'intérieur de la entre crochets représente la taille voulez-vous le tableau soit. En revanche, lorsque nous utilisions s support i il ya un moment, s, une chaîne, est en effet un tableau de caractères, mais lorsque vous n'êtes pas déclarer une variable, comme ici avec ce mot-clé, vous êtes tout simplement obtenir un indice spécifique, un particulier élément de ce tableau. Une fois que nous savons que, le reste de ce système est simple. Si de nouveau, je vais d'abord imprimer Quel est l'âge de la personne numéro i. Lorsque je dis juste nombre de personne un, personne numéro deux, numéro trois personne. Et je suis en train de faire de l'arithmétique, de sorte que les gens normaux comme, on compte à partir de l'autre pour ce programme, et non à partir de zéro. Alors j'appelle getint, mais je stocke la réponse dans les âges support E. Quel est l'âge ième dans le tableau. Ainsi, alors que la dernière fois que nous traitions ces boîtes que caractères pour le nom de Zamyla, et d'autres. Maintenant, ces boîtes représentent 32 bits, ou quatre octets dans lequel nous pouvons stocker un int, int, int. Tout ce qui, encore une fois, sont le même type de données. Maintenant, je fais quelque chose de stupide, comme le temps passe, juste pour justifier la rédaction de ce programme. Et puis ici, je itérer nouveau sur le tableau dire un an à partir de maintenant, nombre de personne d'une volonté être âgé de ans quelque chose. Et pour comprendre que math-- Je veux dire, ce n'est pas très compliqué arithmetic-- Je viens d'ajouter un à leur âge. Juste pour démontrer, encore une fois, ce. Tout comme je ne peux indice en chaîne, s, si je peux index dans un tableau des âges, comme celle là. Alors, où est ce que ça va être nous prendre? Nous allons donc voir, en fin de compte, un peu de choses dans les jours à venir. Un, tout ce temps, quand écrire vos propres programmes, comme Mario, gourmand, crédit. Vous avez été de taper le nom de le programme et en appuyant sur Entrée. Et puis obtenir les commentaires de l'utilisateur. Avec getString, getInt, getLongLong, ou analogue. Mais il s'avère que les supports C quelque chose qui s'appelle la ligne de commande arguments, ce qui va nous permettre effectivement obtenir sur les mots que vous tapez, à l'invite de clignoter, après le nom de votre programme. Ainsi, dans les jours à venir, vous pourrait taper quelque chose comme César, ou ./caesar numéro 13, par la suite. Nous allons voir comment cela fonctionne. Car en effet, en problème réglé deux, nous sommes vais vous présenter à un petit quelque chose rappelle Ralphie de contester antérieure de la cartographie. L'art de brouiller l'information. Ceci, en fait, est très rappelle ce que Ralphie fait. Il s'agit d'un exemple de chiffrement algorithme appelé rot13, R-O-T 13. Ce qui signifie tout simplement tourner la lettres de l'alphabet de 13 places. Et si vous faites cela, vous verrez maintenant ce qui est, peut-être, une expression familière. Mais la façon dont nous allons utiliser ce, finalement, est plus généralement. Dans P mettre deux, dans l'édition standard, vous implémentez un couple de chiffres, un appelé César, celui qui est appelé Vigenère. Tous les deux sont en rotation chiffres, en quelque sorte que vous tourner une seule lettre dans une autre lettre. Et César est super simple. Vous ajoutez un, vous ajoutez 13, ou un nombre jusqu'à 26. Vigenère fait que sur une base par lettre. Donc Vigenère, comme vous le verrez dans la spécification, est plus sûr. Mais à la fin de la journée ce qui vous serez mise en œuvre et de définir deux P, est cette clef que vous utilisez à la fois pour le chiffrement et le déchiffrement. En se référant au procédé de tournage texte brut, certains message d'origine, en texte chiffré, qui est quelque chose de chiffré. Et puis décrypter à nouveau. Dans l'édition de pirate, Pendant ce temps, vous serez chargé de quelque chose de similaire dans l'esprit, où nous vous donnerons un fichier, d'un Linux typique, ou Mac ou Unix ordinateur appelé etsy mot de passe, qui contient un ensemble tas de noms d'utilisateurs et mots de passe. Et ces mots de passe ont tous été chiffré, ou haché, pour ainsi dire, plus correctement comme vous le verrez dans la spécification. Et l'édition pirate contester vous, par une entrée comme celle-ci, et le décryptage du mot de passe. C'est, comprendre ce que l' le mot de passe de l'homme était en fait. Parce que, en effet, les mots de passe sont généralement pas stocké en clair, et mots de passe généralement doit être difficile à deviner. Ce n'est pas souvent le cas. Et ce que je pensais que nous ferions est conclure avec quelques minutes coup d'œil à un particulier mauvais choix de mots de passe d'un film, vous pourriez rappeler avec tendresse. Et si non, vous devriez louer. [VIDEO LECTURE] -Helmet, Vous démon, ce qui se passe? Que faites-vous à ma fille? -Permit Moi de présenter le jeune et brillant chirurgien plastique, Docteur Phillip Schlotkin. Le plus grand homme de travail de nez à l' univers entier et de Beverly Hills. -Votre Altesse. Emploi -Nose? Je ne comprends pas. Elle a déjà eu un travail de nez. C'était sa douce 16 présente. Non, ce n'est pas ce que vous pensez. C'est bien pire. Si vous ne me donnez pas la combinaison de l'écran d'air, médecin Schlotkin donnera à votre fille sauvegarder son vieux nez. - [Halète] Nooooooooooooo. Où avez-vous trouvé ça? -Tous Droite. Je vais vous dire, je vais vous dire. Non, papa, non. Vous ne devez pas. -Tu Droit ma chère. Je vais manquer votre nouveau nez. Mais je ne vais pas les dire la combinaison peu importe quoi. -Très Bien. Docteur Schlotkin, faire votre pire. -Mon Plaisir. -nō! Attendez, attendez. Je vais vous dire. Je vais vous dire. -I Savait que ça marcherait. Très bien, donnez-le moi. -Le Combinaison est un. One. One. -Deux. -Deux. -Deux. -Trois. -Trois. -Trois. -Quatre. -Quatre. -Quatre. Cinq des. Cinq des. Cinq des. -So La combinaison est un, deux, trois, quatre, cinq. C'est la combinaison la plus stupide J'ai jamais entendu dans ma vie. C'est le genre de chose que l' idiot pourrait avoir sur ses bagages. Et merci, Votre Altesse. [CLICS REMOTE] -Quel Avez-vous fait? -I Éteint le mur. Non, vous ne l'avez pas, vous désactivé tout le film. Dű -I appuyé sur le mauvais bouton. Eh bien, le remettre sur! Mettez la vidéo sur! Oui, monsieur! Oui, monsieur. -Let-Y, Arnold. Venez, Gretchen. Bien sûr, vous savez que je vais dois vous facturer pour cela. Eh bien? At-il travailler? Où est le roi? -Il Travaillé, monsieur, nous avoir la combinaison. -Great. Maintenant, nous pouvons prendre le moindre souffle de l'air frais de la planète Druidia. Quelle est la combinaison? One, deux, trois, quatre, cinq. One, deux, trois, quatre, cinq? -Oui. -C'est Incroyable. J'ai le même combinaison sur mes bagages. Préparer Spaceball 1 pour départ immédiat. Oui, monsieur. -AND Changer le combinaison sur mes bagages. [FERMETURE DE PORTE SON] [CLINK DE PORTES FRAPPE CASQUE] -Ahh. [FIN LECTURE VIDÉO] DAVID J. Malan: C'est pour CS50, nous vous verrons la semaine prochaine. Narrateur: Et maintenant, Deep Pensées, par Daven Farnham. Daven FARNHAM: codage en C est d'autant plus difficile que Scratch. printf, Scratch était un mensonge. [Rires EXTRAIT]