1 00:00:00,000 --> 00:00:00,980 2 00:00:00,980 --> 00:00:04,410 >> [MUSIQUE LECTURE] 3 00:00:04,410 --> 00:00:11,147 4 00:00:11,147 --> 00:00:12,230 DAVID J. Malan: Très bien. 5 00:00:12,230 --> 00:00:16,440 C'est CS50, et ce C'est la fin de la semaine 2. 6 00:00:16,440 --> 00:00:18,480 Donc, aujourd'hui, nous allons de poursuivre notre regard 7 00:00:18,480 --> 00:00:21,150 à la façon dont nous représentons les choses sous la hood-- s'éloignant 8 00:00:21,150 --> 00:00:23,520 de nombres comme les entiers et valeurs à virgule flottante 9 00:00:23,520 --> 00:00:26,810 et en se concentrant sur les chaînes et programmes finalement plus intéressantes. 10 00:00:26,810 --> 00:00:30,140 Mais nous allons aussi jeter un oeil à un quelques problems-- spécifique à un domaine 11 00:00:30,140 --> 00:00:33,620 dont le premier sera être impliquant la cryptographie, 12 00:00:33,620 --> 00:00:36,570 l'art de brouiller l'information, dans lequel vous voyez ci-dessus ici 13 00:00:36,570 --> 00:00:41,480 C'est une image de Radio Orphan Annie anneau décodeur secret antan. 14 00:00:41,480 --> 00:00:46,490 >> C'est en fait une forme très primitive et la forme de cryptopgraphy aux enfants 15 00:00:46,490 --> 00:00:50,590 laquelle cet anneau a deux disks-- un intérieur et un extérieur. 16 00:00:50,590 --> 00:00:54,740 Et en faisant tourner l'un de ceux, vous pouvez essentiellement aligner des lettres comme A 17 00:00:54,740 --> 00:00:59,520 à Z avec d'autres lettres comme B à A. En d'autres termes, 18 00:00:59,520 --> 00:01:03,730 vous pouvez littéralement tourner l'alphabet, ainsi venir avec une application de 19 00:01:03,730 --> 00:01:07,820 lettres aux lettres de sorte que, si vous voulu envoyer un message secret 20 00:01:07,820 --> 00:01:11,820 pour quelqu'un comme Annie, vous pourriez écrire en bas de votre message, puis tourner 21 00:01:11,820 --> 00:01:15,370 les lettres, de sorte que, si vous dire à-dire «A», vous dites au lieu «B», 22 00:01:15,370 --> 00:01:17,280 Vous voulez dire «B», vous au lieu dit «C» - 23 00:01:17,280 --> 00:01:20,240 ou quelque chose d'un peu plus intelligent que that-- puis, en fin de compte, 24 00:01:20,240 --> 00:01:24,630 tant que Annie a ce décodeur anneau, elle peut décoder le message. 25 00:01:24,630 --> 00:01:28,540 Maintenant, vous pouvez rappeler, en effet, que cette a été utilisé dans un film très célèbre qui 26 00:01:28,540 --> 00:01:31,140 joue ad nauseam pendant la saison de Noël. 27 00:01:31,140 --> 00:01:32,650 Jetons un coup d'oeil ici. 28 00:01:32,650 --> 00:01:35,294 29 00:01:35,294 --> 00:01:37,210 RALPHIE PARKER: «Il est connu de tous en résumé 30 00:01:37,210 --> 00:01:41,000 Ralph Parker est nommé un membre de Little Orphan Annie secret 31 00:01:41,000 --> 00:01:44,860 Cercle et a droit à tous les honneurs et les avantages survenant à celle-ci ". 32 00:01:44,860 --> 00:01:47,410 >> RALPHIE PARKER (narration): Little Orphan Annie signé. 33 00:01:47,410 --> 00:01:50,070 Contresigné, Pierre André! 34 00:01:50,070 --> 00:01:51,490 À l'encre. 35 00:01:51,490 --> 00:01:55,494 Honneurs et les avantages, déjà à l'âge de neuf ans. 36 00:01:55,494 --> 00:01:57,402 >> [MUSIQUE LECTURE] 37 00:01:57,402 --> 00:02:00,470 >> [RADIO CHATTER] 38 00:02:00,470 --> 00:02:01,470 RALPHIE PARKER: Viens. 39 00:02:01,470 --> 00:02:02,344 Allons de l'avant avec elle. 40 00:02:02,344 --> 00:02:06,029 Je n'ai pas besoin de tout ce que le jazz sur des contrebandiers et des pirates. 41 00:02:06,029 --> 00:02:08,820 Annonceur radio: écoutez demain nuit pour l'aventure finale 42 00:02:08,820 --> 00:02:11,060 de The Black Pirate Ship. 43 00:02:11,060 --> 00:02:14,740 Maintenant, il est temps pour Annie Secret Message pour vous les membres 44 00:02:14,740 --> 00:02:17,110 de la Secret Circle. 45 00:02:17,110 --> 00:02:20,700 Rappelez-vous les enfants, seuls les membres de Secret Circle Annie 46 00:02:20,700 --> 00:02:23,270 peut décoder le message secret de Annie. 47 00:02:23,270 --> 00:02:27,270 >> Rappelez-vous, Annie compte sur vous. 48 00:02:27,270 --> 00:02:30,060 Réglez vos épingles à B-2. 49 00:02:30,060 --> 00:02:34,004 Voici le Message-- 12, 11, 2-- 50 00:02:34,004 --> 00:02:36,503 RALPHIE PARKER (narration): Je suis dans ma première réunion secrète. 51 00:02:36,503 --> 00:02:40,041 RADIO ANIMATEUR: --25, 14, 11, 18, 16-- 52 00:02:40,041 --> 00:02:42,790 RALPHIE PARKER (narration): Oh, Pierre était dans une grande voix ce soir. 53 00:02:42,790 --> 00:02:46,110 Je pourrais dire que ce soir message était vraiment important. 54 00:02:46,110 --> 00:02:47,930 >> RADIO ANIMATEUR: --3, 25. 55 00:02:47,930 --> 00:02:49,940 C'est un message d'Annie elle-même. 56 00:02:49,940 --> 00:02:52,182 Rappelez-vous, ne le dites à personne. 57 00:02:52,182 --> 00:02:55,077 >> [PANTING] 58 00:02:55,077 --> 00:02:57,285 RALPHIE PARKER (narration): Quatre-vingt dix secondes plus tard, je suis 59 00:02:57,285 --> 00:03:00,090 dans la seule pièce de la maison où un garçon de neuf ans 60 00:03:00,090 --> 00:03:04,380 pourrait s'asseoir dans l'intimité et le décodage. 61 00:03:04,380 --> 00:03:04,990 Ah. 62 00:03:04,990 --> 00:03:05,680 «B» 63 00:03:05,680 --> 00:03:06,524 >> [RIRES] 64 00:03:06,524 --> 00:03:08,684 >> RALPHIE PARKER (narration): Je suis allé à l'autre. 65 00:03:08,684 --> 00:03:09,610 «E» 66 00:03:09,610 --> 00:03:11,641 Le premier mot est «être». 67 00:03:11,641 --> 00:03:12,140 Oui! 68 00:03:12,140 --> 00:03:14,293 Il venait plus facile maintenant. 69 00:03:14,293 --> 00:03:15,259 "U" 70 00:03:15,259 --> 00:03:16,225 >> [RIRES] 71 00:03:16,225 --> 00:03:18,157 >> RANDY PARKER: Aw, allez, Ralphie. 72 00:03:18,157 --> 00:03:19,606 Je dois y aller! 73 00:03:19,606 --> 00:03:21,538 >> RALPHIE PARKER: Je vais descendre, Ma. 74 00:03:21,538 --> 00:03:22,504 Whiz Gee. 75 00:03:22,504 --> 00:03:25,402 76 00:03:25,402 --> 00:03:31,220 "T." «O» "Assurez-vous de "." Soyez sûr au "quoi? 77 00:03:31,220 --> 00:03:33,981 Quel était Little Orphan Annie essayez de dire? "Soyez sûr au" quoi? 78 00:03:33,981 --> 00:03:35,522 MERE: Ralphie, Randy a obtenu d'aller. 79 00:03:35,522 --> 00:03:36,735 Voulez-vous s'il vous plaît venez? 80 00:03:36,735 --> 00:03:38,190 >> RALPHIE PARKER: Très bien, maman! 81 00:03:38,190 --> 00:03:39,787 Je serai à raison! 82 00:03:39,787 --> 00:03:41,995 RALPHIE PARKER (narration): Je me rapprochais maintenant. 83 00:03:41,995 --> 00:03:43,370 La tension était terrible. 84 00:03:43,370 --> 00:03:44,794 Quel était-il? 85 00:03:44,794 --> 00:03:47,656 Le sort de la planète peut se bloquer dans la balance. 86 00:03:47,656 --> 00:03:50,518 >> MERE: Ralphie, Randy doit rentrer! 87 00:03:50,518 --> 00:03:53,635 >> RALPHIE PARKER: je serai bientôt sur, bordel de merde! 88 00:03:53,635 --> 00:03:55,343 RALPHIE PARKER (Narration): On y est presque! 89 00:03:55,343 --> 00:03:56,520 Mes doigts ont volé! 90 00:03:56,520 --> 00:03:58,500 Mon esprit était un piège d'acier. 91 00:03:58,500 --> 00:03:59,850 Chaque pore vibré. 92 00:03:59,850 --> 00:04:01,806 Il était presque clair! 93 00:04:01,806 --> 00:04:02,773 Oui! 94 00:04:02,773 --> 00:04:03,273 Oui! 95 00:04:03,273 --> 00:04:03,773 Oui! 96 00:04:03,773 --> 00:04:04,740 Oui! 97 00:04:04,740 --> 00:04:10,250 >> RALPHIE PARKER: "Assurez-vous à boire votre Ovomaltine ". 98 00:04:10,250 --> 00:04:10,750 Ovomaltine? 99 00:04:10,750 --> 00:04:14,864 100 00:04:14,864 --> 00:04:17,539 Un commercial minable? 101 00:04:17,539 --> 00:04:19,439 >> [MUSIQUE LECTURE] 102 00:04:19,439 --> 00:04:21,724 >> RALPHIE PARKER: Fils de pute. 103 00:04:21,724 --> 00:04:23,460 >> [Rire] 104 00:04:23,460 --> 00:04:27,070 >> DAVID J. Malan: Donc, c'est alors un aperçu de ce que la cryptographie 105 00:04:27,070 --> 00:04:29,880 peut être pour un this-- boire d'antan. 106 00:04:29,880 --> 00:04:30,900 Ainsi, une annonce rapide. 107 00:04:30,900 --> 00:04:33,410 Si vous êtes libre ce Vendredi à 13h15 et serait 108 00:04:33,410 --> 00:04:36,610 vous joindre à nous pour CS50 déjeuner, la tête à cette adresse ici. 109 00:04:36,610 --> 00:04:38,080 Premier arrivé, premier servi, comme d'habitude. 110 00:04:38,080 --> 00:04:41,840 Mais au fil du temps, nous ferons en sorte que plus tous ceux qui voudraient participer 111 00:04:41,840 --> 00:04:43,640 peut programmer-sage. 112 00:04:43,640 --> 00:04:45,170 >> Donc cordes. 113 00:04:45,170 --> 00:04:47,940 Nous avons Zamyla-- qui vous avez maintenant rencontré le plus probable 114 00:04:47,940 --> 00:04:50,750 en ensemble de problèmes dont la 1-- nom est orthographié ainsi. 115 00:04:50,750 --> 00:04:53,570 Et supposons que vous avez tapé son nom dans un programme d'ordinateur qui est 116 00:04:53,570 --> 00:04:55,710 en utilisant quelque chose comme getString. 117 00:04:55,710 --> 00:04:57,890 Afin de récupérer ces frappes, comment 118 00:04:57,890 --> 00:05:01,620 allons-nous représentant une chaîne, un mot, un paragraphe, 119 00:05:01,620 --> 00:05:03,960 ou plusieurs lettres comme celles-là? 120 00:05:03,960 --> 00:05:06,790 >> Nous avons parlé la dernière fois sur entiers et problèmes 121 00:05:06,790 --> 00:05:09,960 qui découlent de débordement d'entier et valeurs à virgule flottante 122 00:05:09,960 --> 00:05:12,190 et les problèmes que surgir au sein de précision. 123 00:05:12,190 --> 00:05:16,080 Avec des cordes, nous au moins avoir un peu plus de flexibilité 124 00:05:16,080 --> 00:05:17,970 parce strings-- juste dans le réel monde-- 125 00:05:17,970 --> 00:05:19,790 peut être une longueur assez arbitraire. 126 00:05:19,790 --> 00:05:21,055 Assez courte, assez long. 127 00:05:21,055 --> 00:05:23,680 Mais même alors, nous allons trouver que les ordinateurs peuvent parfois 128 00:05:23,680 --> 00:05:27,200 à court de mémoire et même pas stocker une assez grande chaîne. 129 00:05:27,200 --> 00:05:30,840 >> Mais pour l'instant, nous allons commencer à visualiser une chaîne comme quelque chose dans ces boîtes 130 00:05:30,840 --> 00:05:31,340 Ici. 131 00:05:31,340 --> 00:05:36,410 Donc, ces six cases, dont chacun représente un caractère ou "char". 132 00:05:36,410 --> 00:05:40,646 Donc rappeler que "char" - c-h-un-r-- est l'un des types de données intégrés dans C. 133 00:05:40,646 --> 00:05:43,520 Et ce qui est bien, c'est que vous pouvez utiliser que de sorte que un bloc de construction, 134 00:05:43,520 --> 00:05:47,880 une pièce de puzzle, si vous voulez, pour former un grand type de données que nous allons continuer 135 00:05:47,880 --> 00:05:49,410 d'appeler une «chaîne». 136 00:05:49,410 --> 00:05:53,650 >> Maintenant, ce qui est utile sur la pensée des choses comme les chaînes de cette façon? 137 00:05:53,650 --> 00:05:57,720 Eh bien, il s'avère que nous pouvons effectivement tirer parti de cette structure 138 00:05:57,720 --> 00:06:01,420 accéder à des caractères individuels réellement d'une manière assez simple. 139 00:06:01,420 --> 00:06:04,099 Je vais aller de l'avant et de créer un fichier appelé "stringzero.c" 140 00:06:04,099 --> 00:06:05,765 mais vous pouvez l'appeler comme vous le souhaitez. 141 00:06:05,765 --> 00:06:08,500 Et sur le site Web du cours est déjà cet exemple, à l'avance, 142 00:06:08,500 --> 00:06:10,430 de sorte que vous n'avez pas besoin de taper dans tout cela. 143 00:06:10,430 --> 00:06:13,820 >> Et je vais aller de l'avant et faire en premier void main int. 144 00:06:13,820 --> 00:06:15,980 Et au bout de quelques jours, nous allons commencer à démêler 145 00:06:15,980 --> 00:06:19,070 ce vide est ici, pourquoi il est int côté principal, et ainsi de suite. 146 00:06:19,070 --> 00:06:21,180 Mais pour l'instant, nous allons continuer copier coller ça. 147 00:06:21,180 --> 00:06:23,455 >> Je vais déclarer une chaîne appelée s. 148 00:06:23,455 --> 00:06:26,920 Et je vais revenir de GetString quelles que soient les types d'utilisateur dans. 149 00:06:26,920 --> 00:06:29,170 Cela va être une simple programme, pas d'instructions, 150 00:06:29,170 --> 00:06:31,336 Je vais à l'aveuglette s'attendre à ce que l'utilisateur sait 151 00:06:31,336 --> 00:06:32,600 ce qu'il faut faire pour garder les choses simples. 152 00:06:32,600 --> 00:06:34,220 >> Et maintenant, je vais avoir une boucle for. 153 00:06:34,220 --> 00:06:37,450 Et à l'intérieur de ma boucle je suis va avoir int i obtient zéro. 154 00:06:37,450 --> 00:06:40,660 Et i est, encore une fois, juste une convention, une variable d'index pour le comptage, 155 00:06:40,660 --> 00:06:42,350 mais je pourrais appeler ce que je veux. 156 00:06:42,350 --> 00:06:46,275 Je vais faire i est bien inférieur à: Le nom de Zamyla est de six lettres. 157 00:06:46,275 --> 00:06:48,150 Donc, je vais sur le disque code là pour l'instant. 158 00:06:48,150 --> 00:06:49,730 >> Et puis i ++. 159 00:06:49,730 --> 00:06:53,190 Et maintenant à l'intérieur de ceux-ci bouclés accolades je vais faire printf, 160 00:06:53,190 --> 00:06:55,460 et je veux imprimer un caractère à la fois. 161 00:06:55,460 --> 00:06:58,227 Donc, je vais utiliser% c pour peut-être la première fois. 162 00:06:58,227 --> 00:07:00,560 Et puis je veux imprimer chaque caractère sur sa propre ligne. 163 00:07:00,560 --> 00:07:02,550 Donc, je vais mettre un petite barre oblique inverse n il. 164 00:07:02,550 --> 00:07:03,640 Fermer citation. 165 00:07:03,640 --> 00:07:06,250 >> Et maintenant, je veux faire quelque chose ici. 166 00:07:06,250 --> 00:07:10,610 Je veux imprimer le lettre spécifique dans la chaîne, 167 00:07:10,610 --> 00:07:13,670 s, comme je l'itération de zéro sur un maximum de six. 168 00:07:13,670 --> 00:07:17,150 En d'autres termes, je veux imprimer le caractère ième de l'art. 169 00:07:17,150 --> 00:07:18,420 Maintenant, comment puis-je faire cela? 170 00:07:18,420 --> 00:07:21,550 >> Eh bien tout comme les boîtes de cette représentation ici, 171 00:07:21,550 --> 00:07:25,560 en quelque sorte, évoquer la notion de la boxe lettres, vous pouvez faire de même que 172 00:07:25,560 --> 00:07:32,630 syntaxiquement en C en spécifiant simplement, Je veux imprimer sur les s ième caractère. 173 00:07:32,630 --> 00:07:35,640 En utilisant les crochets sur le clavier de votre ordinateur 174 00:07:35,640 --> 00:07:38,910 que sur un clavier américain sont généralement au-dessus de votre clé de retour. 175 00:07:38,910 --> 00:07:42,630 >> Ce n'est donc pas tout à fait raison encore, comme vous avez pu le remarquer. 176 00:07:42,630 --> 00:07:44,780 Mais je vais type de la fuite en avant ici. 177 00:07:44,780 --> 00:07:47,020 Et je vais faire faire chaîne 0. 178 00:07:47,020 --> 00:07:50,860 Mais avant je fais cela, nous allons voir si nous ne peut pas anticiper quelques erreurs courantes. 179 00:07:50,860 --> 00:07:52,844 Est-ce que cela va compiler? 180 00:07:52,844 --> 00:07:54,510 Non, je suis absent tout un tas de choses. 181 00:07:54,510 --> 00:07:55,280 Bibliothèques j'ai entendu. 182 00:07:55,280 --> 00:07:58,480 >> Alors, qui en-tête des fichiers pourrais-je vouloir ajouter ici? 183 00:07:58,480 --> 00:07:59,205 Ouais. 184 00:07:59,205 --> 00:08:01,580 >> PUBLIC: Vous devez E / S standard [inaudible] 185 00:08:01,580 --> 00:08:02,663 >> DAVID J. Malan: Excellent. 186 00:08:02,663 --> 00:08:06,060 J'ai donc besoin d'E / S standard. Pour quoi but faire je veux standard E / S? 187 00:08:06,060 --> 00:08:06,670 Pour printf. 188 00:08:06,670 --> 00:08:09,220 Donc inclure stdio.h. 189 00:08:09,220 --> 00:08:13,490 Et vous proposez également que j'inclus la bibliothèque CS50 pour quelle raison? 190 00:08:13,490 --> 00:08:14,650 Pour avoir des chaînes. 191 00:08:14,650 --> 00:08:17,780 Nous allons donc voir ce que La bibliothèque de CS50 fait 192 00:08:17,780 --> 00:08:19,260 pour créer cette notion de chaîne. 193 00:08:19,260 --> 00:08:21,930 Mais pour l'instant, vous ne pouvez penser de celui-ci comme un type de données réel. 194 00:08:21,930 --> 00:08:23,596 >> Donc, cela semble être un peu nettoyé. 195 00:08:23,596 --> 00:08:27,060 Et maintenant, je vais aller de l'avant et même faire faire chaîne 0. 196 00:08:27,060 --> 00:08:27,700 Compilé. 197 00:08:27,700 --> 00:08:28,370 Donc, c'est une bonne chose. 198 00:08:28,370 --> 00:08:32,799 Alors laissez-moi ./string0 agrandir afin que nous puissions voir de plus près ce qui se passe. 199 00:08:32,799 --> 00:08:33,850 Entrée. 200 00:08:33,850 --> 00:08:37,789 Z-A-M-Y-L-A saisir. 201 00:08:37,789 --> 00:08:39,440 Et nous avons imprimé sur du nom de Zamyla. 202 00:08:39,440 --> 00:08:40,409 >> Donc, c'est très bon. 203 00:08:40,409 --> 00:08:43,220 Alors maintenant, nous allons aller de l'avant et exécuter de nouveau, 204 00:08:43,220 --> 00:08:45,659 et taper le nom complet de Daven. 205 00:08:45,659 --> 00:08:46,450 Surprise, surprise. 206 00:08:46,450 --> 00:08:48,021 Entrée. 207 00:08:48,021 --> 00:08:48,520 Hmm. 208 00:08:48,520 --> 00:08:51,750 Nous n'avons pas imprimé Daven de prénom complet correctement. 209 00:08:51,750 --> 00:08:54,250 Maintenant, cela devrait être évident dans Retrospect cause de ce que, 210 00:08:54,250 --> 00:08:57,010 en quelque sorte, stupide décision de conception? 211 00:08:57,010 --> 00:08:59,590 >> Ouais, je disque codé le six à l'intérieur de ma boucle. 212 00:08:59,590 --> 00:09:01,610 Maintenant, je l'ai fait seulement parce que Je savais que le nom de Zamyla 213 00:09:01,610 --> 00:09:02,776 allait être six lettres. 214 00:09:02,776 --> 00:09:04,720 Mais ce n'est certainement pas une solution générale. 215 00:09:04,720 --> 00:09:07,720 Ainsi, il s'avère que nous pouvons dynamique déterminer la longueur d'une chaîne 216 00:09:07,720 --> 00:09:10,440 en appelant une fonction appelée strlen. 217 00:09:10,440 --> 00:09:12,840 >> Encore une fois, délibérément succinctement nommé juste 218 00:09:12,840 --> 00:09:14,450 pour le rendre plus facile à saisir. 219 00:09:14,450 --> 00:09:17,170 Mais c'est synonyme de obtenir la longueur d'une chaîne. 220 00:09:17,170 --> 00:09:23,190 Je vais retourner dans mon terminal fenêtre et re-exécuter le compilateur. 221 00:09:23,190 --> 00:09:24,170 Mais c'est à me crier dessus. 222 00:09:24,170 --> 00:09:29,130 Déclarant implicitement fonction de bibliothèque strlen de type unsigned int const-- 223 00:09:29,130 --> 00:09:29,780 Je suis perdu. 224 00:09:29,780 --> 00:09:30,590 Complètement. 225 00:09:30,590 --> 00:09:32,940 >> Donc, d'autant plus que votre yeux commencent à glaçure plus 226 00:09:32,940 --> 00:09:36,000 des messages d'erreur comme celui-ci, l'accent Honnêtement, sur les premiers mots. 227 00:09:36,000 --> 00:09:38,590 Nous savons que le problème est dans ligne 8, comme indiqué ici. 228 00:09:38,590 --> 00:09:40,500 Et c'est dans la chaîne-0.c. 229 00:09:40,500 --> 00:09:43,580 Déclarant implicitement fonction de bibliothèque strlen. 230 00:09:43,580 --> 00:09:47,000 Alors que va généralement un motif de messages d'erreur. 231 00:09:47,000 --> 00:09:49,190 Déclarant implicitement quelque chose. 232 00:09:49,190 --> 00:09:53,250 >> Donc en bref, ce que je n'ai semblait ont fait par rapport à la ligne 8, ici. 233 00:09:53,250 --> 00:09:56,880 Ce qui pourrait être la solution soit même si vous n'avez jamais utilisé strlen vous-même? 234 00:09:56,880 --> 00:09:58,907 >> PUBLIC: Partie d'une autre bibliothèque? 235 00:09:58,907 --> 00:10:00,740 DAVID J. Malan: Partie d'une autre bibliothèque. 236 00:10:00,740 --> 00:10:02,400 Donc, il est déclaré, pour ainsi dire. 237 00:10:02,400 --> 00:10:07,510 Il est mentionné dans certains fichiers autre que stdio.h et CS50.h. 238 00:10:07,510 --> 00:10:09,179 Maintenant, où est-il défini? 239 00:10:09,179 --> 00:10:12,220 Pour être honnête, vous devez soit juste le savoir du haut de votre tête, 240 00:10:12,220 --> 00:10:13,640 ou vous Google ce et découvrir. 241 00:10:13,640 --> 00:10:18,150 Ou sais, je l'ai ouvert dans le CS50 Appliance programme de terminal, qui 242 00:10:18,150 --> 00:10:22,200 est juste la grande version plein écran de ce qui est dans le bas de la fenêtre de gedit. 243 00:10:22,200 --> 00:10:24,970 >> Et il se trouve qu'il ya une commande similaire succinct, appelé 244 00:10:24,970 --> 00:10:29,280 homme de manuel, où si vous tapez dans le nom d'une fonction et appuyez sur Entrée, 245 00:10:29,280 --> 00:10:32,240 vous récupérerez assez documentation des arcanes. 246 00:10:32,240 --> 00:10:35,299 C'est juste le texte que, généralement, regarde un petit quelque chose de ce genre. 247 00:10:35,299 --> 00:10:37,090 C'est un peu écrasante à première vue. 248 00:10:37,090 --> 00:10:39,048 Mais franchement, je vais Que mes yeux ternes 249 00:10:39,048 --> 00:10:41,930 et se concentrer uniquement sur la partie Je me soucie pour le moment. 250 00:10:41,930 --> 00:10:42,780 >> Qui est-ce. 251 00:10:42,780 --> 00:10:45,470 Qui ressemble structurellement comme quelque chose que je suis familier avec. 252 00:10:45,470 --> 00:10:48,080 En effet, la page de manuel, de sorte de parler, vous dire 253 00:10:48,080 --> 00:10:51,590 dans ce fichier en-tête d'une fonction comme strlen est défini. 254 00:10:51,590 --> 00:10:54,170 Donc, je vais maintenant revenir à gedit. 255 00:10:54,170 --> 00:10:59,070 Et je vais aller de l'avant et ajouter ici #include 256 00:10:59,070 --> 00:11:00,480 et enregistrez le fichier. 257 00:11:00,480 --> 00:11:04,300 >> Je vais effacer l'écran avec Control L Si vous vous demandez. 258 00:11:04,300 --> 00:11:08,210 Et je vais faire re-fonctionner string.0, compile cette fois. 259 00:11:08,210 --> 00:11:11,790 ./string.0 Zamyla. 260 00:11:11,790 --> 00:11:15,020 Cela a semblé fonctionner Laissez-moi aller avant et relancez avec Davenport. 261 00:11:15,020 --> 00:11:15,860 Entrée. 262 00:11:15,860 --> 00:11:17,730 Et cela, aussi, semblait fonctionner. 263 00:11:17,730 --> 00:11:21,220 >> Donc, nous pouvons faire un peu mieux que cela, cependant, nous pouvons commencer à faire le ménage 264 00:11:21,220 --> 00:11:23,257 juste un peu. 265 00:11:23,257 --> 00:11:25,590 Et je vais effectivement introduire une autre chose maintenant. 266 00:11:25,590 --> 00:11:28,930 Je vais aller de l'avant et sauvegarde dans un fichier différent. 267 00:11:28,930 --> 00:11:31,770 Et je vais appeler ce fichier string1.c juste 268 00:11:31,770 --> 00:11:34,620 pour être compatible avec le code vous serez en mesure de trouver en ligne. 269 00:11:34,620 --> 00:11:37,050 >> Et nous allons nous concentrer sur exactement le même code. 270 00:11:37,050 --> 00:11:39,000 Il s'avère que j'ai été un peu prise 271 00:11:39,000 --> 00:11:42,600 pour acquis le fait que mon ordinateur portable, et, à son tour, l'appareil de CS50 272 00:11:42,600 --> 00:11:47,450 a beaucoup de mémoire, un grand nombre de RAM, un grand nombre d'octets de l'espace 273 00:11:47,450 --> 00:11:48,920 dans lequel je peux stocker des chaînes. 274 00:11:48,920 --> 00:11:53,560 >> Mais la réalité si je tapé à long assez, et assez de frappes, 275 00:11:53,560 --> 00:11:56,170 Je pouvais dans le type de la théorie en plus de caractères 276 00:11:56,170 --> 00:11:58,830 de mon ordinateur a mémoire physique pour. 277 00:11:58,830 --> 00:11:59,830 Et ce qui est problématique. 278 00:11:59,830 --> 00:12:03,050 Tout comme un int ne peut compter si haut, en théorie, 279 00:12:03,050 --> 00:12:06,600 vous ne pouvez entasser autant de personnages dans la RAM ou Random de votre ordinateur 280 00:12:06,600 --> 00:12:07,920 Access Memory. 281 00:12:07,920 --> 00:12:11,140 >> J'avais donc mieux anticiper ce problème, même 282 00:12:11,140 --> 00:12:13,660 si cela peut être un rare coin cas, pour ainsi dire. 283 00:12:13,660 --> 00:12:15,670 Ne se produit pas très souvent, qui pourrait arriver. 284 00:12:15,670 --> 00:12:18,815 Et si cela arrive et je ne sais pas anticiper et programme pour elle, 285 00:12:18,815 --> 00:12:20,300 mon programme pourrait faire qui sait quoi. 286 00:12:20,300 --> 00:12:22,220 Geler, bloquer, redémarrer, peu importe. 287 00:12:22,220 --> 00:12:24,490 Quelque chose qui pourrait arriver prévu. 288 00:12:24,490 --> 00:12:27,120 >> Donc ce que je vais faire maintenant, désormais vraiment, 289 00:12:27,120 --> 00:12:31,630 est avant que j'aie jamais aveuglément utiliser une variable comme s que 290 00:12:31,630 --> 00:12:36,790 a été attribuée la valeur de retour de une autre fonction comme getString, 291 00:12:36,790 --> 00:12:40,200 Je vais faire en sorte que sa valeur est valide. 292 00:12:40,200 --> 00:12:44,280 Donc, je sais que pour avoir lu La documentation de CS50 pour getString, 293 00:12:44,280 --> 00:12:49,020 qui finalement, nous vous indiquerons à, que getString renvoie un symbole spécial 294 00:12:49,020 --> 00:12:53,610 appelé NULL, N-U-L-L dans tous casquettes, si quelque chose va mal. 295 00:12:53,610 --> 00:12:55,650 >> Donc, normalement, il renvoie une chaîne. 296 00:12:55,650 --> 00:12:59,700 Mais sinon, si elle retourne N-U-L-L-- nous finirons par voir ce qui a vraiment 297 00:12:59,700 --> 00:13:01,790 désigne: cela signifie simplement quelque chose de mauvais s'est passé. 298 00:13:01,790 --> 00:13:05,560 Maintenant, cela signifie, comme dans Scratch, Je peux vérifier une condition ici en C, 299 00:13:05,560 --> 00:13:08,830 si s n'est pas égal à NULL. 300 00:13:08,830 --> 00:13:11,930 Donc, si vous n'avez pas vu cela avant, cela signifie seulement n'est pas égal. 301 00:13:11,930 --> 00:13:15,290 >> Donc, c'est le contraire de égaux égalité, qui, rappelons-le, 302 00:13:15,290 --> 00:13:18,940 est différent du simple égaux, ce qui est mission. 303 00:13:18,940 --> 00:13:23,030 Donc, si s n'est pas égal à NULL, alors seulement 304 00:13:23,030 --> 00:13:25,980 Je veux exécuter ces lignes de code. 305 00:13:25,980 --> 00:13:28,080 En d'autres termes, Avant de plonger dans l'aveuglette 306 00:13:28,080 --> 00:13:30,919 et commencer l'itération s au-dessus de, et en le traitant 307 00:13:30,919 --> 00:13:33,710 comme il s'agit d'une séquence de personnages, je vais d'abord vérifier, 308 00:13:33,710 --> 00:13:37,900 attendez une minute, est s certainement pas égal à cette valeur spéciale, NULL? 309 00:13:37,900 --> 00:13:40,030 >> Parce que si c'est le cas, de mauvaises choses peuvent se produire. 310 00:13:40,030 --> 00:13:43,080 Et pour l'instant, supposons que de mauvaises choses passe signifie que votre programme plante, 311 00:13:43,080 --> 00:13:45,070 et vous ne pouvez pas forcément récupérer. 312 00:13:45,070 --> 00:13:46,800 Donc, franchement, il semble laid. 313 00:13:46,800 --> 00:13:48,660 C'est une sorte de confusion maintenant de regarder. 314 00:13:48,660 --> 00:13:50,780 Mais cela va devenir plus familier avant longtemps. 315 00:13:50,780 --> 00:13:52,920 >> Mais je vais proposer maintenant un autre amélioration. 316 00:13:52,920 --> 00:13:54,660 C'est une amélioration à la rectitude. 317 00:13:54,660 --> 00:13:58,800 Mon programme est maintenant plus correct, car dans les rares cas où pas assez de mémoire 318 00:13:58,800 --> 00:14:01,180 existe, je vais le gérer, et je vais juste ne fais rien. 319 00:14:01,180 --> 00:14:02,680 Au moins je ne vais pas tomber en panne. 320 00:14:02,680 --> 00:14:05,000 >> Mais nous allons faire une version finale ici. 321 00:14:05,000 --> 00:14:07,690 Et un fichier appelé string2.c. 322 00:14:07,690 --> 00:14:10,190 Je vais le coller même code pour un instant, 323 00:14:10,190 --> 00:14:14,210 et je vais mettre en évidence cette ligne 11, ici, juste un instant. 324 00:14:14,210 --> 00:14:18,179 Maintenant, la réalité est que les compilateurs intelligents comme Clang pourrait résoudre ce problème pour nous 325 00:14:18,179 --> 00:14:19,970 les coulisses sans notre jamais savoir. 326 00:14:19,970 --> 00:14:24,670 Mais nous devons penser à ce fondamentalement comme une conception problématique. 327 00:14:24,670 --> 00:14:29,010 >> Cette ligne de code est, bien sûr, disant: initialiser une variable i à 0. 328 00:14:29,010 --> 00:14:30,260 C'est assez simple. 329 00:14:30,260 --> 00:14:34,691 Et ce qui est encore une fois cette déclaration, ici, i ++, faire? 330 00:14:34,691 --> 00:14:37,066 Nous l'avons vu auparavant, mais nous ne pas vraiment en parler. 331 00:14:37,066 --> 00:14:37,900 >> PUBLIC: incrémentation i. 332 00:14:37,900 --> 00:14:39,191 >> DAVID J. Malan: i incrémentation. 333 00:14:39,191 --> 00:14:41,890 Ainsi, à chaque itération à travers cette boucle, à chaque cycle, 334 00:14:41,890 --> 00:14:43,570 vous i incrémentation par un. 335 00:14:43,570 --> 00:14:45,740 Ainsi, il devient de plus, et plus, et plus grand jusqu'à ce que la boucle se termine. 336 00:14:45,740 --> 00:14:46,810 Comment ça fin? 337 00:14:46,810 --> 00:14:49,430 Eh bien, il ya ce milieu condition qui nous avons utilisé avant. 338 00:14:49,430 --> 00:14:52,500 Vous avez vu et dans soluces dans le jeu de P. 339 00:14:52,500 --> 00:14:53,880 >> Mais quelle est cette parole? 340 00:14:53,880 --> 00:14:58,352 Faire la boucle suivante si Tant que i est inférieur à quoi? 341 00:14:58,352 --> 00:14:59,810 PUBLIC: La longueur de la chaîne. 342 00:14:59,810 --> 00:15:01,518 DAVID J. Malan: L' longueur de la chaîne. 343 00:15:01,518 --> 00:15:04,300 Donc, il traduit assez proprement à l'anglais dans ce sens. 344 00:15:04,300 --> 00:15:08,810 Maintenant, le problème est que chaque fois que je itérer à travers cette boucle en théorie, 345 00:15:08,810 --> 00:15:10,000 Je vous pose cette question. 346 00:15:10,000 --> 00:15:12,250 Est-i inférieure à la longueur de la chaîne de s? 347 00:15:12,250 --> 00:15:14,500 Est-i inférieure à la longueur de la chaîne de s? 348 00:15:14,500 --> 00:15:18,380 >> Maintenant, c'est moi en train de changer à chaque itération? 349 00:15:18,380 --> 00:15:18,880 Il est. 350 00:15:18,880 --> 00:15:19,629 En raison de la ++. 351 00:15:19,629 --> 00:15:21,700 Ainsi, chaque itération i s'agrandit. 352 00:15:21,700 --> 00:15:25,411 Mais est s devient plus grand, ou plus petit, ou de changer du tout? 353 00:15:25,411 --> 00:15:25,910 Non. 354 00:15:25,910 --> 00:15:30,240 Donc, en termes de design, l'un des axes le long de laquelle nous essayons d'évaluer le code 355 00:15:30,240 --> 00:15:32,610 dans la classe, cela se sent un peu stupide. 356 00:15:32,610 --> 00:15:34,690 >> Comme vous êtes littéralement, à chaque itération, 357 00:15:34,690 --> 00:15:37,110 cette boucle de demander l' encore même fichue question, 358 00:15:37,110 --> 00:15:40,770 et encore, et encore, et littéralement il ne va jamais changer. 359 00:15:40,770 --> 00:15:44,220 Au moins, si je ne le touche s et essayer de changer le contenu de l'art. 360 00:15:44,220 --> 00:15:46,610 Donc, je peux faire un peu mieux que cela. 361 00:15:46,610 --> 00:15:49,530 >> Et ce que je vais faire n'est pas déclarer une seule variable i, 362 00:15:49,530 --> 00:15:53,330 mais une seconde variable je vais arbitrairement, mais classiquement, l'appeler n. 363 00:15:53,330 --> 00:15:55,940 Attribuez n égale à la longueur de la chaîne de l'art. 364 00:15:55,940 --> 00:15:59,090 Et puis ici, je vais faire un peu d'optimisation intelligente, si 365 00:15:59,090 --> 00:16:03,460 prendre la parole, à la fin de la journée n'est pas plus correct ou pas moins correcte 366 00:16:03,460 --> 00:16:04,260 qu'auparavant. 367 00:16:04,260 --> 00:16:05,500 Mais c'est une meilleure conception. 368 00:16:05,500 --> 00:16:09,480 Dans le fait que j'utilise moins de temps, moins de cycles de CPU, de sorte 369 00:16:09,480 --> 00:16:14,040 de parler, de répondre à la même question, mais une seule fois. 370 00:16:14,040 --> 00:16:17,870 >> Vous avez des questions sur ce général principe de l'amélioration, 371 00:16:17,870 --> 00:16:21,294 dit, l'efficacité d'un programme? 372 00:16:21,294 --> 00:16:21,991 Ouais? 373 00:16:21,991 --> 00:16:23,699 PUBLIC: Pourquoi faire utiliser la [inaudible]? 374 00:16:23,699 --> 00:16:25,760 375 00:16:25,760 --> 00:16:27,010 DAVID J. Malan: Bonne question. 376 00:16:27,010 --> 00:16:30,690 Alors pourquoi avons-nous mis le ++ sur la fin de i au lieu de début de la i? 377 00:16:30,690 --> 00:16:33,070 Dans ce cas, il a aucun effet fonctionnel. 378 00:16:33,070 --> 00:16:36,670 Et en général, j'ai tendance à utiliser l'opérateur de postfix 379 00:16:36,670 --> 00:16:41,750 de sorte que c'est un peu plus clair à quand l'opération se passe. 380 00:16:41,750 --> 00:16:46,670 >> Pour ceux qui ne connaissent, il ya un autre déclarations par lesquelles vous pourriez faire ++ i. 381 00:16:46,670 --> 00:16:48,747 Ceux-ci sont fonctionnellement équivalent dans ce cas 382 00:16:48,747 --> 00:16:51,080 parce qu'il n'y a rien d'autre autour de cette incrémentation. 383 00:16:51,080 --> 00:16:54,435 Mais vous pouvez venir avec cas et de lignes de code 384 00:16:54,435 --> 00:16:55,810 où cela fait une différence. 385 00:16:55,810 --> 00:16:57,810 Donc, en général, nous ne faisons pas même parler de celui-ci. 386 00:16:57,810 --> 00:17:00,690 Parce que franchement, il rend votre Code sexy, et une sorte de ciré, 387 00:17:00,690 --> 00:17:01,776 et moins de caractères. 388 00:17:01,776 --> 00:17:04,859 Mais la réalité est qu'il est beaucoup plus difficile, Je pense que, même pour moi pour envelopper mon esprit 389 00:17:04,859 --> 00:17:07,319 autour d'elle parfois, l'ordre des opérations. 390 00:17:07,319 --> 00:17:09,750 Donc, en passant, si vous vraiment pas comme ça, 391 00:17:09,750 --> 00:17:14,650 même si c'est un peu sexy la recherche, vous pouvez également faire i + = 1, 392 00:17:14,650 --> 00:17:18,880 qui est la version la plus laid de la même idée pour postfix incrémentation. 393 00:17:18,880 --> 00:17:22,250 >> Je dis cela et vous devrait faire plaisir, 394 00:17:22,250 --> 00:17:25,140 mais vous viendrez à voir le code comme quelque chose de beau avant longtemps. 395 00:17:25,140 --> 00:17:27,160 >> [Rires] 396 00:17:27,160 --> 00:17:28,410 >> DAVID J. Malan: Droit? 397 00:17:28,410 --> 00:17:29,360 Ouais. 398 00:17:29,360 --> 00:17:30,480 Question au milieu. 399 00:17:30,480 --> 00:17:32,146 >> PUBLIC: Avez-vous besoin de dire int n? 400 00:17:32,146 --> 00:17:34,020 DAVID J. Malan: Vous faites pas besoin de dire int n. 401 00:17:34,020 --> 00:17:37,670 Donc, parce que nous l'avons déjà dit int, vous n'avez pas besoin de le répéter. 402 00:17:37,670 --> 00:17:41,820 Le hic, c'est que n doit être du même type de données que je. 403 00:17:41,820 --> 00:17:43,310 Donc, c'est juste une commodité ici. 404 00:17:43,310 --> 00:17:44,058 Ouais. 405 00:17:44,058 --> 00:17:47,806 >> PUBLIC: Pouvez-vous revenir sur le le support de caractères d'impression i nouveau? 406 00:17:47,806 --> 00:17:48,930 DAVID J. Malan: Absolument. 407 00:17:48,930 --> 00:17:52,110 Donc% c, rappeler de la dernière temps, est juste un espace réservé. 408 00:17:52,110 --> 00:17:53,930 Cela signifie mettre un omble ici. 409 00:17:53,930 --> 00:17:56,780 barre oblique inverse n, bien sûr, juste des moyens de mettre un saut de ligne ici. 410 00:17:56,780 --> 00:17:59,540 Alors que tout laisse, maintenant, cette pièce de la nouvelle syntaxe. 411 00:17:59,540 --> 00:18:03,730 Et cela est littéralement dire, saisir la chaîne appelée s et va chercher son 412 00:18:03,730 --> 00:18:06,050 caractère ième, pour ainsi dire. 413 00:18:06,050 --> 00:18:10,590 >> Et je continue à dire caractère ième car à chaque itération de cette boucle 414 00:18:10,590 --> 00:18:14,540 c'est comme si nous imprimons , tout d'abord de support 0, 415 00:18:14,540 --> 00:18:15,780 en tant que programmeur pourrait-on dire. 416 00:18:15,780 --> 00:18:18,680 S Ensuite support 1, puis s support 2, puis 3, puis 4. 417 00:18:18,680 --> 00:18:21,610 Mais bien sûr, c'est une variable, donc je l'exprime avec i. 418 00:18:21,610 --> 00:18:23,900 >> Clé, cependant, est de réaliser, surtout si vous avez pas 419 00:18:23,900 --> 00:18:26,358 été acclimater à ce monde de la programmation, où nous avons tous 420 00:18:26,358 --> 00:18:28,950 semblent compter à partir de zéro, je dois commencer à compter à partir de zéro maintenant. 421 00:18:28,950 --> 00:18:35,130 Parce que les chaînes, premier caractère, la z dans Zamyla est pour le meilleur ou pour le pire 422 00:18:35,130 --> 00:18:40,490 aller vivre à l'emplacement numéro zéro. 423 00:18:40,490 --> 00:18:48,210 >> Très bien, alors laissez-moi faire nous revenir ici pour Zamyla 424 00:18:48,210 --> 00:18:50,746 et voir ce qui se passe réellement en dessous de la hotte. 425 00:18:50,746 --> 00:18:52,370 Donc, il ya cette notion de type coulée. 426 00:18:52,370 --> 00:18:53,800 Vous pourriez avoir fait joué avec déjà, 427 00:18:53,800 --> 00:18:55,970 peut-être pour le pirate édition de P défini un. 428 00:18:55,970 --> 00:19:00,320 Mais le type coulée se réfère seulement à la capacité en C et d'autres langues 429 00:19:00,320 --> 00:19:03,170 à convertir un type de données à l'autre. 430 00:19:03,170 --> 00:19:05,450 >> Maintenant, comment pourrions-nous voir ce très franchement? 431 00:19:05,450 --> 00:19:08,530 Donc, le rappel, le début de l'alphabet anglais. 432 00:19:08,530 --> 00:19:11,265 Et le contexte, rappelons-le, de comme il ya une semaine est ASCII. 433 00:19:11,265 --> 00:19:13,790 Le code standard américain pour l'échange d'information. 434 00:19:13,790 --> 00:19:17,080 Qui est juste un très long chemin de dire une cartographie des lettres 435 00:19:17,080 --> 00:19:19,370 de numéros, de chiffres et de lettres. 436 00:19:19,370 --> 00:19:22,940 >> Donc A à M ici, dot dot point, les lignes avec, rappel, 437 00:19:22,940 --> 00:19:25,582 le nombre décimal 65 sur place. 438 00:19:25,582 --> 00:19:27,290 Et nous n'avons pas parlé de cette façon explicite, 439 00:19:27,290 --> 00:19:29,850 mais il ya sûrement similaire nombre de lettres minuscules. 440 00:19:29,850 --> 00:19:30,820 Et en effet, il existe. 441 00:19:30,820 --> 00:19:33,730 Le monde a décidé quelques années Il ya ce petit un, minuscules a, 442 00:19:33,730 --> 00:19:35,020 va être 97. 443 00:19:35,020 --> 00:19:38,010 Et petit b va à 98, et ainsi de suite. 444 00:19:38,010 --> 00:19:40,200 >> Et pour toute autre touche votre clavier, il est 445 00:19:40,200 --> 00:19:42,190 va être une tendance similaire de bits. 446 00:19:42,190 --> 00:19:44,540 Ou de manière équivalente, un nombre décimal. 447 00:19:44,540 --> 00:19:47,110 Donc la question à portée de main, alors, comment pouvons-nous 448 00:19:47,110 --> 00:19:49,400 réellement voir ce sous le capot? 449 00:19:49,400 --> 00:19:51,539 Donc, je vais passer à gedit nouveau. 450 00:19:51,539 --> 00:19:53,330 Et plutôt que de type celui-ci à partir de zéro, 451 00:19:53,330 --> 00:19:55,330 Je vais aller de l'avant et ouvrir juste quelque chose 452 00:19:55,330 --> 00:19:58,350 à partir du code d'aujourd'hui, intitulé ASCII zéro. 453 00:19:58,350 --> 00:20:01,210 >> Et ASCII zéro ressemble à ceci. 454 00:20:01,210 --> 00:20:02,710 Donc, nous allons envelopper nos esprits autour de cela. 455 00:20:02,710 --> 00:20:04,969 Alors d'abord, j'ai commenté le code, ce qui est agréable. 456 00:20:04,969 --> 00:20:07,010 Parce que c'est littéralement me dire à quoi s'attendre, 457 00:20:07,010 --> 00:20:08,950 afficher une cartographie des lettres majuscules. 458 00:20:08,950 --> 00:20:13,690 Maintenant, je ne sais pas trop ce que je dire par là, nous allons donc en déduire. 459 00:20:13,690 --> 00:20:16,870 >> En anglais, peut-être peu technophile anglais, 460 00:20:16,870 --> 00:20:20,660 Qu'est-ce que la ligne 18 semble à faire pour nous? 461 00:20:20,660 --> 00:20:21,500 Il suffit de la ligne 18. 462 00:20:21,500 --> 00:20:22,430 Qu'est-ce qu'il induire? 463 00:20:22,430 --> 00:20:25,192 Qu'est-ce que ça va le coup d'envoi ici? 464 00:20:25,192 --> 00:20:26,100 >> PUBLIC: Une boucle. 465 00:20:26,100 --> 00:20:26,630 >> DAVID J. Malan: Une boucle. 466 00:20:26,630 --> 00:20:28,463 Et combien de fois est que va parcourir? 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 PUBLIC: [interposition VOIX] six fois. 469 00:20:33,270 --> 00:20:34,830 DAVID J. Malan: six fois. 470 00:20:34,830 --> 00:20:35,840 PUBLIC: 26 fois. 471 00:20:35,840 --> 00:20:36,560 DAVID J. Malan: 26 fois. 472 00:20:36,560 --> 00:20:37,060 Ouais, désolé. 473 00:20:37,060 --> 00:20:37,960 26 fois. 474 00:20:37,960 --> 00:20:38,460 Pourquoi? 475 00:20:38,460 --> 00:20:41,590 Eh bien, c'est un peu bizarre, mais J'ai commencé à compter à partir de 65. 476 00:20:41,590 --> 00:20:43,300 Ce qui est bizarre, mais pas mal. 477 00:20:43,300 --> 00:20:44,610 Il n'est pas mauvais par exemple. 478 00:20:44,610 --> 00:20:46,980 Et je le fais seulement En effet, pour cet exemple, 479 00:20:46,980 --> 00:20:50,455 Je suis une sorte d'anticiper que le capital A était de 65. 480 00:20:50,455 --> 00:20:53,330 Maintenant, ce n'est pas le plus élégant façon de le faire, de sorte de coder en dur 481 00:20:53,330 --> 00:20:56,130 valeurs ésotériques qui ne est jamais attendu à retenir. 482 00:20:56,130 --> 00:21:00,155 >> Mais pour l'instant, remarque que je suis faire ce à travers plus de 65 26. 483 00:21:00,155 --> 00:21:03,030 Parce qu'apparemment je ne veux même pas pour faire le calcul dans ma tête. 484 00:21:03,030 --> 00:21:04,440 Donc, je vais laisser le compilateur faire. 485 00:21:04,440 --> 00:21:08,600 Mais alors, sur chaque boucle, chaque itération de la boucle, je incrémenter i. 486 00:21:08,600 --> 00:21:10,196 >> Alors maintenant, cela semble un peu obscur. 487 00:21:10,196 --> 00:21:13,320 Mais nous devrions avoir la construction de base blocs avec lesquels comprennent. 488 00:21:13,320 --> 00:21:15,510 % C est juste un espace réservé pour un car. 489 00:21:15,510 --> 00:21:19,010 % I est un espace réservé pour un int. 490 00:21:19,010 --> 00:21:23,310 Et il se trouve que l'utilisation de ce nouvelle syntaxe, ce parenthèses, si 491 00:21:23,310 --> 00:21:26,100 prendre la parole, si un type de données l'intérieur d'un parenthèses, 492 00:21:26,100 --> 00:21:32,270 Je ne peux forcer le compilateur à traiter i est un entier non, mais comme un produit de carbonisation. 493 00:21:32,270 --> 00:21:35,520 >> Me montrant ainsi le caractère équivalent de ce nombre. 494 00:21:35,520 --> 00:21:37,986 Maintenant, ici, ce code est à peu près identique. 495 00:21:37,986 --> 00:21:39,860 Je voulais juste faire Super explicite le fait 496 00:21:39,860 --> 00:21:42,095 que je commence à 97, qui est en minuscules un. 497 00:21:42,095 --> 00:21:44,080 Sur place par 26 autres lettres. 498 00:21:44,080 --> 00:21:46,970 Et je doing-- nouveau, coulée i, pour ainsi dire. 499 00:21:46,970 --> 00:21:49,160 Ou de type coulée i, pour ainsi dire. 500 00:21:49,160 --> 00:21:51,420 >> D'un int en char. 501 00:21:51,420 --> 00:21:55,760 Donc le résultat final va être, franchement, les informations que nous savons déjà. 502 00:21:55,760 --> 00:21:59,411 Je vais faire ascii-0 dot-- pas dot c. 503 00:21:59,411 --> 00:22:02,160 Avis, vous avez probablement fait que erreur que je viens de faire accidentellement. 504 00:22:02,160 --> 00:22:03,820 Assurez-ascii-0. 505 00:22:03,820 --> 00:22:06,090 Maintenant, je vais faire ./ascii-0. 506 00:22:06,090 --> 00:22:09,050 Je vais effectuer un zoom avant, et, malheureusement, ça va faire défiler l'écran. 507 00:22:09,050 --> 00:22:15,060 Mais nous voyons toute une carte où une carte de 97, cartes b à 98, 508 00:22:15,060 --> 00:22:18,931 et si nous faisons défiler jusqu'à plus A, bien sûr, les cartes à 65. 509 00:22:18,931 --> 00:22:21,180 Donc, ce n'est que pour dire que ce que nous avons prêché, 510 00:22:21,180 --> 00:22:25,310 il est cette équivalence, on en fait le cas dans la réalité. 511 00:22:25,310 --> 00:22:28,000 Ainsi, une modification rapide de cette. 512 00:22:28,000 --> 00:22:31,220 Permettez-moi de m'ouvrir ascii-1.c. 513 00:22:31,220 --> 00:22:38,070 Et remarquez ce savant, sorte de, la clarification de cette. 514 00:22:38,070 --> 00:22:41,770 C'est ascii-1.c, et remarquer ce truc de fou. 515 00:22:41,770 --> 00:22:45,120 >> Et cela devient vraiment le coeur de ce que les ordinateurs font. 516 00:22:45,120 --> 00:22:48,150 Même si nous, les humains seraient pas compter en termes de letters-- 517 00:22:48,150 --> 00:22:50,380 Je ne commence pas à penser, tout droit puis un b, 518 00:22:50,380 --> 00:22:52,590 et les utiliser pour compter des objets physiques. 519 00:22:52,590 --> 00:22:58,680 Vous pouvez certainement dire que je veux initialiser une variable appelée c-- 520 00:22:58,680 --> 00:23:03,220 mais j'aurais pu appeler ce anything-- si c est initialisée au capital A. 521 00:23:03,220 --> 00:23:07,560 >> Parce que à la fin de la journée, l'ordinateur ne vous inquiétez pas ce que vous stockez, 522 00:23:07,560 --> 00:23:10,170 il ne se soucie que la façon dont vous voulez de présenter cette information. 523 00:23:10,170 --> 00:23:13,560 Comment voulez-vous que l'ordinateur interpréter ce modèle de bits? 524 00:23:13,560 --> 00:23:16,320 Donc, ce n'est pas quelque chose que je Je recommande généralement faire. 525 00:23:16,320 --> 00:23:19,500 C'est vraiment juste un exemple pour faire que vous ne pouvez absolument 526 00:23:19,500 --> 00:23:22,049 initialiser un entier en char. 527 00:23:22,049 --> 00:23:24,090 Parce que sous la Hotte d'un char, bien sûr, 528 00:23:24,090 --> 00:23:26,170 est juste un nombre de 0 à 255. 529 00:23:26,170 --> 00:23:28,540 >> Ainsi, vous pouvez certainement mettre à l'intérieur d'un int. 530 00:23:28,540 --> 00:23:30,890 Et ce que cela aussi montre que l'on est 531 00:23:30,890 --> 00:23:34,040 peut convertir d'un taper à l'autre, ici, 532 00:23:34,040 --> 00:23:36,780 finalement l'impression de la même chose. 533 00:23:36,780 --> 00:23:44,760 Et en fait, ce que je fixera online-- a voulu dire cela, encore une fois, ici. 534 00:23:44,760 --> 00:23:48,610 Permettez-moi de nettoyer cette place en ligne, et nous allons voir dans une procédure pas à pas en ligne, au besoin, 535 00:23:48,610 --> 00:23:50,280 ce qu'il a été prévu. 536 00:23:50,280 --> 00:23:50,960 >> Dáccord. 537 00:23:50,960 --> 00:23:53,892 Ainsi dernier exemple maintenant impliquant un et des b et puis nous allons 538 00:23:53,892 --> 00:23:54,850 prendre les choses d'un cran. 539 00:23:54,850 --> 00:23:58,330 Donc, avec un et des b et c de la capitalisation 540 00:23:58,330 --> 00:24:01,560 et l'équivalence de celui-ci, nous allons jetez un oeil à cet exemple, ici. 541 00:24:01,560 --> 00:24:02,752 Un autre exemple de code. 542 00:24:02,752 --> 00:24:04,460 Nous allons ouvrir un qui est fait déjà, pour nous 543 00:24:04,460 --> 00:24:06,440 ne pas avoir à taper tout à partir de zéro. 544 00:24:06,440 --> 00:24:09,420 >> Et remarquez en prévision nous utilisons tête multiple 545 00:24:09,420 --> 00:24:13,240 fichiers, parmi lesquels notre nouvel ami, string.h. 546 00:24:13,240 --> 00:24:15,597 Maintenant, cela ressemble, à première coup d'oeil, un peu énigmatique. 547 00:24:15,597 --> 00:24:18,180 Mais nous allons voir si nous ne pouvons pas raisonner par ce qui se passe ici. 548 00:24:18,180 --> 00:24:21,150 D'abord, je reçois une chaîne de l'utilisateur, et je mets cette chaîne dans une variable 549 00:24:21,150 --> 00:24:22,286 appelés s. 550 00:24:22,286 --> 00:24:24,090 Copier coller d'avant. 551 00:24:24,090 --> 00:24:27,250 Dans la ligne 22, je suis apparemment faire exactement ce que 552 00:24:27,250 --> 00:24:30,760 Je l'ai fait il ya un moment, je itération sur les caractères de l'art. 553 00:24:30,760 --> 00:24:34,780 >> Et les nouveaux trucs ici utilisent longueur de la chaîne, l'optimisation mineur 554 00:24:34,780 --> 00:24:37,930 de stockage de la longueur de chaîne n, Plutôt que d'appeler strlen à nouveau, 555 00:24:37,930 --> 00:24:38,850 et encore, et encore. 556 00:24:38,850 --> 00:24:41,120 Et vérifiais juste que i est inférieur à n. 557 00:24:41,120 --> 00:24:43,330 Maintenant, ici, les choses se un peu intéressant. 558 00:24:43,330 --> 00:24:45,980 Mais c'est juste une application de cette même idée nouvelle. 559 00:24:45,980 --> 00:24:48,470 Qu'est-ce que l'anglais ne s support i représente? 560 00:24:48,470 --> 00:24:51,772 561 00:24:51,772 --> 00:24:54,260 >> PUBLIC: Compter chaque caractère [inaudible]. 562 00:24:54,260 --> 00:24:55,926 >> DAVID J. Malan: Compter chaque personnage. 563 00:24:55,926 --> 00:24:58,680 Et encore plus succinctement, s support i représente quoi? 564 00:24:58,680 --> 00:25:00,950 Diriez-vous. 565 00:25:00,950 --> 00:25:04,084 Pas vous mettre dans l'embarras. 566 00:25:04,084 --> 00:25:06,375 >> PUBLIC: Well-- 567 00:25:06,375 --> 00:25:09,500 DAVID J. Malan: Donc, si le mot is-- si la chaîne est Zamyla, qui starts-- 568 00:25:09,500 --> 00:25:12,380 PUBLIC: --vous traitent de les caractères séparément: 569 00:25:12,380 --> 00:25:13,690 DAVID J. Malan: Bon. 570 00:25:13,690 --> 00:25:14,190 Exactement. 571 00:25:14,190 --> 00:25:17,940 La notation de support carré vous permet pour accéder à chaque caractère individuel, 572 00:25:17,940 --> 00:25:21,120 afin de support 0 va être l' premier caractère de la chaîne. 573 00:25:21,120 --> 00:25:24,110 s étrier 1 va être le deuxième, et ainsi de suite. 574 00:25:24,110 --> 00:25:28,050 Donc la question que je pose, ici, dans cet état, c'est quoi? 575 00:25:28,050 --> 00:25:33,984 Est le caractère ième de s plus ou égale à un minuscule? 576 00:25:33,984 --> 00:25:36,400 Et qu'est-ce que cela signifie, ici, avec les doubles esperluette? 577 00:25:36,400 --> 00:25:36,800 AUDIENCE (ENSEMBLE): Et. 578 00:25:36,800 --> 00:25:37,210 DAVID J. Malan: Et. 579 00:25:37,210 --> 00:25:38,418 C'est juste équivalent à cela. 580 00:25:38,418 --> 00:25:42,310 Et ce n'est pas un mot-clé dans C, vous devez utilisation, agaçante, esperluette esperluette. 581 00:25:42,310 --> 00:25:47,520 Et ce, à l'inverse, est demandé est s de i-ème caractère inférieures ou égales 582 00:25:47,520 --> 00:25:49,030 en minuscules z? 583 00:25:49,030 --> 00:25:52,440 Et encore une fois, c'est là comprendre le sous-jacent 584 00:25:52,440 --> 00:25:54,550 mise en oeuvre d'un ordinateur est logique. 585 00:25:54,550 --> 00:25:57,330 Notez que, même si je n'ai la dot dot dot là-bas, 586 00:25:57,330 --> 00:26:04,410 ressemble a à z en minuscules sont toutes les valeurs contiguës hausse par rapport à 97 sur place. 587 00:26:04,410 --> 00:26:07,820 >> Et même pour les majuscules à partir de 65. 588 00:26:07,820 --> 00:26:10,410 Ainsi, la livraison, alors, est que en anglais, 589 00:26:10,410 --> 00:26:12,760 comment décririez-vous quelle ligne 24 est en train de faire? 590 00:26:12,760 --> 00:26:15,736 591 00:26:15,736 --> 00:26:16,728 Ouais? 592 00:26:16,728 --> 00:26:21,575 >> AUDIENCE: Le 24 c'est vérifiant si chaque caractère est une minuscule. 593 00:26:21,575 --> 00:26:24,700 DAVID J. Malan: Il est de vérifier si chaque caractère est une lettre minuscule. 594 00:26:24,700 --> 00:26:28,590 Ainsi, même de façon plus succincte, est la caractère ième de s minuscule? 595 00:26:28,590 --> 00:26:30,690 C'est tout ce que nous sommes exprimer ici toute logique, 596 00:26:30,690 --> 00:26:33,750 un peu énigmatique, mais en fin de compte assez franchement. 597 00:26:33,750 --> 00:26:36,480 Est-s de ième caractère en minuscule? 598 00:26:36,480 --> 00:26:40,130 >> Si c'est le cas, et c'est là que les choses obtenir un peu l'esprit de flexion 599 00:26:40,130 --> 00:26:44,760 pour un instant, si c'est le cas, aller avant et imprimer un caractère. 600 00:26:44,760 --> 00:26:47,360 Donc, c'est juste un espace réservé, mais ce personnage? 601 00:26:47,360 --> 00:26:53,710 Pourquoi je fais du support i moins ici cette expression? 602 00:26:53,710 --> 00:26:55,110 >> Eh bien remarquer le modèle ici. 603 00:26:55,110 --> 00:26:57,380 Les chiffres réels ne comptent pas tellement. 604 00:26:57,380 --> 00:27:02,700 Mais remarquez que 97 est à quelle distance de 65? 605 00:27:02,700 --> 00:27:03,560 >> PUBLIC: 32. 606 00:27:03,560 --> 00:27:04,480 >> DAVID J. Malan: 32. 607 00:27:04,480 --> 00:27:06,890 A quelle distance est de 98 à partir de 66? 608 00:27:06,890 --> 00:27:07,740 >> PUBLIC: 32. 609 00:27:07,740 --> 00:27:09,890 >> DAVID J. Malan: Petit c de grand C? 610 00:27:09,890 --> 00:27:10,420 32. 611 00:27:10,420 --> 00:27:14,550 Donc, il ya 32 sauts de une lettre à l'autre. 612 00:27:14,550 --> 00:27:17,790 Donc, franchement, je, pourrait pour simplifier ce que. 613 00:27:17,790 --> 00:27:20,400 Mais je suis un peu dur de codage cette faible compréhension de niveau 614 00:27:20,400 --> 00:27:21,740 que le lecteur ne soit jamais allez comprendre. 615 00:27:21,740 --> 00:27:25,080 Je vais donc à généraliser comme, je connaître les lettres minuscules sont plus grandes. 616 00:27:25,080 --> 00:27:28,400 Je sais que les lettres majuscules sont des valeurs plus petites, ironiquement. 617 00:27:28,400 --> 00:27:33,216 >> Mais ce n'est réellement équivalente à dire soustraire 32 de support s i. 618 00:27:33,216 --> 00:27:35,430 Ainsi, dans le cadre de ceux-ci lettres, si la lettre 619 00:27:35,430 --> 00:27:38,950 se trouve être un, minuscule un, et je soustrais 32, 620 00:27:38,950 --> 00:27:43,442 quel effet cela at-il, mathématiquement, sur un en minuscules? 621 00:27:43,442 --> 00:27:44,400 PUBLIC: Capitalizes-- 622 00:27:44,400 --> 00:27:45,691 DAVID J. Malan: capitalise. 623 00:27:45,691 --> 00:27:48,440 Et en effet, c'est pourquoi notre programme est appelé capitaliser zéro. 624 00:27:48,440 --> 00:27:51,590 Cette émission capitalise une lettre, 625 00:27:51,590 --> 00:27:54,580 après vérification si c'est en effet une lettre minuscule. 626 00:27:54,580 --> 00:27:59,810 Sinon, dans la ligne 30, que dois-je faire si ce n'est pas une lettre minuscule que je suis 627 00:27:59,810 --> 00:28:02,852 regardant à un particulier itération de la boucle. 628 00:28:02,852 --> 00:28:03,890 Il suffit de l'imprimer. 629 00:28:03,890 --> 00:28:07,010 >> Donc, ne pas changer des choses ce n'est pas même minuscules. 630 00:28:07,010 --> 00:28:10,790 Limitez-vous à petit un peu par z. 631 00:28:10,790 --> 00:28:12,730 Maintenant, c'est assez mystérieux. 632 00:28:12,730 --> 00:28:15,230 Mais à la fin de la journée, ce est de savoir comment nous, il était une fois, 633 00:28:15,230 --> 00:28:16,460 dû mettre en place des choses. 634 00:28:16,460 --> 00:28:19,780 Si je place j'ouvre capitaliser un, oh Dieu merci. 635 00:28:19,780 --> 00:28:22,320 Il ya une fonction appelé à supérieure qui peut 636 00:28:22,320 --> 00:28:25,410 faire tout ce que nous venons de faire à un niveau assez faible. 637 00:28:25,410 --> 00:28:28,752 >> Maintenant, pour supérieure est intéressant car elle est déclarée dans un fichier, 638 00:28:28,752 --> 00:28:31,210 et vous ne sauriez ce en vérifiant la documentation, 639 00:28:31,210 --> 00:28:35,730 ou étant dit, par exemple, dans la classe, où il existe, dans un ctype.h de fichier appelé. 640 00:28:35,730 --> 00:28:37,630 C'est donc une autre nouvelle de nos amis. 641 00:28:37,630 --> 00:28:40,750 Et pour ne supérieure exactement ce que son nom suggère. 642 00:28:40,750 --> 00:28:44,860 >> Vous pouvez passer, comme argument, entre ces parenthèses, un certain caractère. 643 00:28:44,860 --> 00:28:48,390 Je vais passer dans le caractère ième de s en utilisant notre nouvelle notation de fantaisie 644 00:28:48,390 --> 00:28:49,870 impliquant des crochets. 645 00:28:49,870 --> 00:28:53,391 Et faire une supposition, ce qui est le retour valeur de la partie supérieure va apparemment 646 00:28:53,391 --> 00:28:53,890 être? 647 00:28:53,890 --> 00:28:56,460 648 00:28:56,460 --> 00:28:57,770 Une lettre majuscule. 649 00:28:57,770 --> 00:28:58,620 Une lettre majuscule. 650 00:28:58,620 --> 00:29:02,330 >> Donc, si je passe en minuscules un, espérons-le, par définition de la supérieure, 651 00:29:02,330 --> 00:29:05,600 il va revenir un majuscules A. Sinon, 652 00:29:05,600 --> 00:29:08,590 si ce n'est pas une lettre minuscule Tout d'abord, je viens de l'imprimer. 653 00:29:08,590 --> 00:29:10,800 Et en effet, remarquer l' deuxième ami ici. 654 00:29:10,800 --> 00:29:13,840 Pas seulement pour supérieur existe, mais est inférieure, 655 00:29:13,840 --> 00:29:16,200 répond effectivement à cette question pour moi. 656 00:29:16,200 --> 00:29:19,730 >> Maintenant, celui qui a écrit ces choses, 10s de il ya quelques années, vous savez quoi? 657 00:29:19,730 --> 00:29:23,840 Mise en œuvre de haut et est réduire en utilisant le code suivant. 658 00:29:23,840 --> 00:29:27,270 Mais encore une fois, en accord avec cette idée de s'abstraire, 659 00:29:27,270 --> 00:29:29,190 sorte de niveau inférieur détails de mise en œuvre. 660 00:29:29,190 --> 00:29:32,600 Et debout sur les épaules de personnes qui sont venus avant nous, en utilisant les fonctions 661 00:29:32,600 --> 00:29:36,300 comme à haut et est plus faible, ce qui assez merveilleusement bien sont 662 00:29:36,300 --> 00:29:40,190 nommé à dire ce qu'ils font, est un paradigme merveilleuse à adopter. 663 00:29:40,190 --> 00:29:44,040 >> Maintenant, il s'avère que si je lis la page de manuel pour, disons, à supérieure, 664 00:29:44,040 --> 00:29:45,010 J'apprends quelque chose d'autre. 665 00:29:45,010 --> 00:29:46,890 Ainsi, l'homme toUpper. 666 00:29:46,890 --> 00:29:48,050 C'est un peu écrasante. 667 00:29:48,050 --> 00:29:51,110 Mais remarquez, voici que la mention de le fichier d'en-tête que je devrais utiliser. 668 00:29:51,110 --> 00:29:54,460 Soit dit en passant, parce que ce est trompeuse, la fonction 669 00:29:54,460 --> 00:29:59,070 utilise des entiers au lieu de caractères pour des raisons de vérification d'erreur. 670 00:29:59,070 --> 00:30:01,260 Mais nous allons peut-être venir revenir dans l'avenir. 671 00:30:01,260 --> 00:30:05,910 >> Mais remarquez, ici, aux convertis supérieures la lettre c en majuscule si possible. 672 00:30:05,910 --> 00:30:07,674 Donc, c'est assez simple. 673 00:30:07,674 --> 00:30:09,340 Et maintenant, soyons un peu plus précis. 674 00:30:09,340 --> 00:30:12,750 Regardons la partie de la page de manuel sous la valeur de retour. 675 00:30:12,750 --> 00:30:15,420 La valeur retournée est que de la lettre convertie. 676 00:30:15,420 --> 00:30:18,690 Ou c si la conversion n'était pas possible, 677 00:30:18,690 --> 00:30:20,250 où c est l'entrée originale. 678 00:30:20,250 --> 00:30:24,140 Ce que je sais d'ici, de l'argument de la partie supérieure. 679 00:30:24,140 --> 00:30:25,780 >> Alors, quelle est la livraison de cette? 680 00:30:25,780 --> 00:30:28,060 La valeur retournée est que de la lettre convertie, 681 00:30:28,060 --> 00:30:32,110 ou c, la lettre originale, si la conversion n'a pas été possible. 682 00:30:32,110 --> 00:30:36,460 Quelles améliorations puis-je donc apporter à la conception de mon code? 683 00:30:36,460 --> 00:30:37,146 Ouais? 684 00:30:37,146 --> 00:30:38,810 >> PUBLIC: Vous pouvez supprimer le reste. 685 00:30:38,810 --> 00:30:40,810 DAVID J. Malan: je peux retirer l'instruction else, 686 00:30:40,810 --> 00:30:42,510 et pas seulement l'instruction else. 687 00:30:42,510 --> 00:30:44,150 >> PUBLIC: Vous pouvez supprimer [inaudible]. 688 00:30:44,150 --> 00:30:46,310 >> DAVID J. Malan: je peux retirer l'ensemble fourche 689 00:30:46,310 --> 00:30:48,209 sur la route, le si d'autre complètement. 690 00:30:48,209 --> 00:30:50,250 Donc, en effet, permettez-moi d'ouvrir la version finale de ce, 691 00:30:50,250 --> 00:30:55,540 capitaliser-2 et constater à quel point, si vous, sexy, le code devient maintenant, 692 00:30:55,540 --> 00:31:00,040 en ce que j'ai réduit de certains sept ou si les lignes à seulement quatre, 693 00:31:00,040 --> 00:31:03,850 la fonctionnalité que je comptais en appelant simplement à supérieur, 694 00:31:03,850 --> 00:31:09,410 passant de support i, et l'impression , avec l'espace réservé% c, 695 00:31:09,410 --> 00:31:11,090 ce caractère particulier. 696 00:31:11,090 --> 00:31:14,560 >> Maintenant, sans doute, il ya un bug, ou au moins le risque d'une erreur, 697 00:31:14,560 --> 00:31:15,350 dans ce programme. 698 00:31:15,350 --> 00:31:18,200 Il suffit donc de revenir pour une livraison plus tôt, 699 00:31:18,200 --> 00:31:21,820 que dois-je faire probablement aussi dans ce programme pour le rendre plus robuste, 700 00:31:21,820 --> 00:31:24,974 de sorte qu'il n'y a aucun moyen il peut planter, même dans de rares cas? 701 00:31:24,974 --> 00:31:26,390 PUBLIC: Assurez-vous que ce n'est pas NULL. 702 00:31:26,390 --> 00:31:28,056 DAVID J. Malan: Assurez-vous que ce n'est pas NULL. 703 00:31:28,056 --> 00:31:31,030 Alors, vraiment, de faire cette super bon, je dois faire quelque chose comme: 704 00:31:31,030 --> 00:31:35,300 si s n'est pas NULL, aller de l'avant et d'exécuter 705 00:31:35,300 --> 00:31:38,470 ces lignes de code, qui Je peux alors tiret comme ça, 706 00:31:38,470 --> 00:31:39,870 puis mettre dans mon accolade fermée. 707 00:31:39,870 --> 00:31:41,550 Donc bon attachant ensemble des deux idées. 708 00:31:41,550 --> 00:31:42,429 Ouais? 709 00:31:42,429 --> 00:31:44,470 PUBLIC: Pourriez-vous utiliser une boucle Do While, à la place? 710 00:31:44,470 --> 00:31:47,270 DAVID J. Malan: Pourriez Je fais une boucle Do While? 711 00:31:47,270 --> 00:31:50,020 PUBLIC: --vous veulent s'assurer que vous avez réellement [inaudible]. 712 00:31:50,020 --> 00:31:51,728 DAVID J. Malan: Pourriez vous utilisez un do tout? 713 00:31:51,728 --> 00:31:52,450 Réponse courte, non. 714 00:31:52,450 --> 00:31:54,700 Parce que vous êtes sur le point de introduire un autre cas de coin. 715 00:31:54,700 --> 00:31:56,660 Si la chaîne est de longueur nulle. 716 00:31:56,660 --> 00:31:59,600 Si par exemple, je viens de frapper Entrez, sans jamais taper un Zamyla. 717 00:31:59,600 --> 00:32:02,490 Je vais vous restituer une réelle chaîne, comme nous le verrons par la suite voyons, 718 00:32:02,490 --> 00:32:03,780 qui a zéro caractères. 719 00:32:03,780 --> 00:32:05,630 C'est encore une chaîne, c'est juste super court. 720 00:32:05,630 --> 00:32:07,960 Mais si vous utilisez un do tout, vous allez à l'aveuglette 721 00:32:07,960 --> 00:32:10,050 essayer de faire quelque chose avec respecter à cette chaîne, 722 00:32:10,050 --> 00:32:12,537 et rien ne va être là. 723 00:32:12,537 --> 00:32:18,607 >> PUBLIC: Eh bien, si vous avez fait faire [inaudible] tandis que s-- 724 00:32:18,607 --> 00:32:21,190 DAVID J. Malan: Oh, je vois, garde obtenir une chaîne de l'utilisateur. 725 00:32:21,190 --> 00:32:23,525 Donc, réponse courte, vous pourrait, et garder harceler 726 00:32:23,525 --> 00:32:26,150 à vous donner une chaîne qui est suffisamment court pour tenir dans la mémoire. 727 00:32:26,150 --> 00:32:26,700 Absolument. 728 00:32:26,700 --> 00:32:27,630 J'ai juste choisi de ne pas. 729 00:32:27,630 --> 00:32:30,505 S'ils ne me donnent pas la chaîne I voulez, je m'en vais, je renonce. 730 00:32:30,505 --> 00:32:33,260 Mais absolument, à cet effet, vous pouvez absolument le faire. 731 00:32:33,260 --> 00:32:37,500 >> Ainsi, les fichiers d'en-tête de la bibliothèque qui nous sommes maintenant familiers avec ces choses, ici. 732 00:32:37,500 --> 00:32:41,550 E / S standard, CS50.h, string.h, ctype.h, et il ya, en effet, d'autres. 733 00:32:41,550 --> 00:32:44,460 Certains d'entre vous ont découvert la bibliothèque de mathématiques en math.h. 734 00:32:44,460 --> 00:32:48,200 Mais permettez-moi de vous présenter, aujourd'hui, à cette ressource que le personnel CS50, Davin, 735 00:32:48,200 --> 00:32:50,630 et Rob, et Gabe particulier ont mis en place. 736 00:32:50,630 --> 00:32:52,630 Ce sera bientôt le lien sur le site Web de cours. 737 00:32:52,630 --> 00:32:54,870 C'est ce qu'on appelle référence CS50. 738 00:32:54,870 --> 00:32:58,230 >> Qui vient de vous donner un rapide goût de celui-ci, fonctionne comme suit. 739 00:32:58,230 --> 00:33:00,740 Permettez-moi de passer à reference.cs50.net. 740 00:33:00,740 --> 00:33:02,990 Vous verrez sur la gauche l'autre une liste écrasante 741 00:33:02,990 --> 00:33:04,595 des fonctions qui viennent avec c. 742 00:33:04,595 --> 00:33:07,790 Mais si je me soucie, pour le moment, quelque chose comme strlen, 743 00:33:07,790 --> 00:33:08,746 Je peux taper là. 744 00:33:08,746 --> 00:33:10,870 Il filtre la liste à ce que je me soucie. 745 00:33:10,870 --> 00:33:11,940 Je vais cliquez dessus. 746 00:33:11,940 --> 00:33:14,740 Et maintenant, sur la gauche, vous verrez ce que nous espérons 747 00:33:14,740 --> 00:33:18,290 est un plus simple, humain explication amicale de la façon dont 748 00:33:18,290 --> 00:33:19,170 cette fonction. 749 00:33:19,170 --> 00:33:20,600 >> Retourne la longueur d'une chaîne. 750 00:33:20,600 --> 00:33:24,060 Voici un résumé, voici comment vous utiliser en termes de fichier d'en-tête, 751 00:33:24,060 --> 00:33:27,430 et en termes de ce que la fonction ressemble en termes de ses arguments. 752 00:33:27,430 --> 00:33:30,250 Et puis ici, les rendements la longueur d'une chaîne. 753 00:33:30,250 --> 00:33:34,280 Mais pour ceux d'entre vous plus à l'aise, vous pouvez réellement plus confortable cliquez, 754 00:33:34,280 --> 00:33:37,070 et le contenu de ce Cette page, maintenant, va changer 755 00:33:37,070 --> 00:33:41,660 pour être les valeurs par défaut de ce vous obtenez en utilisant la page de manuel. 756 00:33:41,660 --> 00:33:44,100 >> En d'autres termes, CS50 référence est une simplification 757 00:33:44,100 --> 00:33:46,220 de pages de manuel par le personnel, pour les étudiants. 758 00:33:46,220 --> 00:33:49,320 En particulier, ceux qui sont moins à l'aise et entre les deux, de sorte que vous 759 00:33:49,320 --> 00:33:51,660 ne pas avoir à essayer de conclure votre esprit autour, franchement, 760 00:33:51,660 --> 00:33:55,030 une syntaxe assez cryptique et de la documentation parfois. 761 00:33:55,030 --> 00:33:57,650 >> Donc, gardez cela à l'esprit dans les jours à venir. 762 00:33:57,650 --> 00:33:59,560 Donc, ici, encore une fois, est un Zamyla. 763 00:33:59,560 --> 00:34:03,255 Posons maintenant une question qui est un peu plus humain accessible. 764 00:34:03,255 --> 00:34:05,380 Merci à Chang, qui a été imprimer plus d'éléphants 765 00:34:05,380 --> 00:34:07,090 non-stop depuis quelques jours. 766 00:34:07,090 --> 00:34:09,730 Nous avons l'occasion de donner au moins un d'entre eux loin. 767 00:34:09,730 --> 00:34:13,239 Si nous pouvions obtenir un seul bénévole à venir sur place pour dessiner sur l'écran. 768 00:34:13,239 --> 00:34:14,530 Que diriez-vous ici? 769 00:34:14,530 --> 00:34:15,340 >> Venez sur place. 770 00:34:15,340 --> 00:34:16,720 Quel est votre nom? 771 00:34:16,720 --> 00:34:17,219 ALEX: Alex. 772 00:34:17,219 --> 00:34:17,760 DAVID J. Malan: Alex. 773 00:34:17,760 --> 00:34:18,259 Bien. 774 00:34:18,259 --> 00:34:19,388 Alex, venez sur place. 775 00:34:19,388 --> 00:34:21,679 Nous sommes sur le point de voir votre écriture manuscrite sur l'écran ici. 776 00:34:21,679 --> 00:34:24,325 777 00:34:24,325 --> 00:34:25,570 Très bien, ravi de vous rencontrer. 778 00:34:25,570 --> 00:34:26,429 >> ALEX: Nice vous vous rencontrer. 779 00:34:26,429 --> 00:34:27,512 >> DAVID J. Malan: Très bien. 780 00:34:27,512 --> 00:34:28,969 Donc, super simple exercice. 781 00:34:28,969 --> 00:34:31,440 Bar n'est pas élevé à obtenir un éléphant aujourd'hui. 782 00:34:31,440 --> 00:34:33,439 Vous jouez le rôle de getString. 783 00:34:33,439 --> 00:34:35,980 Et je vais vous dire juste la chaîne que vous avez obtenu. 784 00:34:35,980 --> 00:34:38,080 Et supposons que vous, getString, ont été appelés. 785 00:34:38,080 --> 00:34:42,480 Et l'être humain, comme moi, a tapé dans Zamyla, Z-A-M-Y-L-A. 786 00:34:42,480 --> 00:34:45,650 Il suffit d'aller de l'avant et écrire Zamyla sur la écran comme si vous avez obtenu il 787 00:34:45,650 --> 00:34:47,250 et stocké quelque part en mémoire. 788 00:34:47,250 --> 00:34:52,370 789 00:34:52,370 --> 00:34:55,570 >> Laissant la place pour ce qui sera de plusieurs autre words-- c'est OK, continuez. 790 00:34:55,570 --> 00:34:59,620 >> [Rires] 791 00:34:59,620 --> 00:35:00,800 >> Donc Zamyla, excellent. 792 00:35:00,800 --> 00:35:04,880 Alors maintenant, supposons que vous, getString, soient appelés de nouveau. 793 00:35:04,880 --> 00:35:09,350 Et donc, je vous donne, à la clavier, avec un autre nom, Belinda. 794 00:35:09,350 --> 00:35:17,560 795 00:35:17,560 --> 00:35:18,060 Bien. 796 00:35:18,060 --> 00:35:22,380 Et maintenant, la prochaine fois que getString est appelé, je tape quelque chose comme Gabe, 797 00:35:22,380 --> 00:35:27,560 G-A-B-E. Vous êtes vraiment prendre la mémoire à accès aléatoire du coeur. 798 00:35:27,560 --> 00:35:29,631 Qui est tout dessiner complètement au hasard. 799 00:35:29,631 --> 00:35:30,130 Dáccord. 800 00:35:30,130 --> 00:35:31,104 >> [Rires] 801 00:35:31,104 --> 00:35:32,520 ALEX: Désolé mon écriture est mauvaise. 802 00:35:32,520 --> 00:35:33,770 DAVID J. Malan: Non, ce n'est pas grave. 803 00:35:33,770 --> 00:35:40,480 Et que diriez-vous Rob, R-O-B. Dáccord. 804 00:35:40,480 --> 00:35:41,020 Bon. 805 00:35:41,020 --> 00:35:43,853 Donc, je ne vous ai pas anticiper voudrais sorte de mettre les choses de cette façon. 806 00:35:43,853 --> 00:35:45,020 Mais nous pouvons faire ce travail. 807 00:35:45,020 --> 00:35:48,810 Alors, comment avez-vous fait la pose ces caractères dans la mémoire? 808 00:35:48,810 --> 00:35:51,310 En d'autres termes, si l'on pense cet écran rectangulaire noire 809 00:35:51,310 --> 00:35:53,550 comme représentant un RAM, ou mémoire de l'ordinateur. 810 00:35:53,550 --> 00:35:55,850 >> Et de rappeler que la RAM est juste tout un tas d'octets, 811 00:35:55,850 --> 00:35:57,480 et les octets sont tout un tas de bits. 812 00:35:57,480 --> 00:35:59,350 Et les bits sont en quelque sorte mis en oeuvre, en général 813 00:35:59,350 --> 00:36:01,119 avec une forme d' électricité dans le matériel. 814 00:36:01,119 --> 00:36:03,160 Donc, c'est en quelque sorte le stratification nous avons parlé 815 00:36:03,160 --> 00:36:04,510 et peut maintenant tenir pour acquis. 816 00:36:04,510 --> 00:36:07,020 Comment avez-vous sur décider où écrire 817 00:36:07,020 --> 00:36:11,634 Rob contre Gabe contre Belinda contre Zamyla? 818 00:36:11,634 --> 00:36:14,020 >> ALEX: Je l'ai fait dans le commandez que vous m'avez dit. 819 00:36:14,020 --> 00:36:15,650 >> DAVID J. Malan: Et ce qui est vrai. 820 00:36:15,650 --> 00:36:20,100 Mais ce régie où vous mettez Le nom de Belinda et le nom de Gabe? 821 00:36:20,100 --> 00:36:20,764 >> ALEX: Rien? 822 00:36:20,764 --> 00:36:22,930 DAVID J. Malan: [RIRES] Alors qui fonctionne, c'est très bien. 823 00:36:22,930 --> 00:36:25,290 Donc, les ordinateurs sont peu plus ordonnée que cela. 824 00:36:25,290 --> 00:36:29,000 Et donc quand nous y retournerions implement-- juste un moment-- quand on fait 825 00:36:29,000 --> 00:36:31,470 mettre en œuvre quelque chose comme GETSTRING dans un ordinateur, 826 00:36:31,470 --> 00:36:34,480 Zamyla pourrait être aménagé à peu près comme vous l'avez fait à l'écran, là-bas. 827 00:36:34,480 --> 00:36:36,660 >> Et ce qui est essentiel de remarquer ici, ce que Alex fait, 828 00:36:36,660 --> 00:36:40,260 est il est une sorte de démarcation dans chacun de ces mots, non? 829 00:36:40,260 --> 00:36:46,580 Vous n'avez pas écrit Z-A-M-L-Y-A-B-E-L-I-N-D-A-G-A-B-- 830 00:36:46,580 --> 00:36:49,740 en d'autres termes, il ya une sorte de démarcation qui semble être, 831 00:36:49,740 --> 00:36:52,370 en quelque sorte, l'espacement aléatoire entre ces différents mots. 832 00:36:52,370 --> 00:36:54,120 Mais c'est une bonne chose, parce nous, les humains peuvent maintenant 833 00:36:54,120 --> 00:36:56,470 visualiser que ceux-ci sont quatre chaînes différentes. 834 00:36:56,470 --> 00:36:59,540 Ce n'est pas seulement une séquence de beaucoup de personnages. 835 00:36:59,540 --> 00:37:04,190 Ainsi, un ordinateur, alors, en attendant, pourrait prendre une chaîne comme Zamyla, 836 00:37:04,190 --> 00:37:07,220 mettre chacune de ces lettres à l'intérieur d'un octet de la mémoire. 837 00:37:07,220 --> 00:37:10,400 Mais ce nombre est beaucoup plus grand, bien sûr, de six caractères. 838 00:37:10,400 --> 00:37:11,690 >> Il ya tout un tas de RAM. 839 00:37:11,690 --> 00:37:15,330 Et désormais, ce grille de cases va 840 00:37:15,330 --> 00:37:17,560 pour représenter ce que Alex juste fait ici sur l'écran. 841 00:37:17,560 --> 00:37:20,937 Et maintenant, Alex, nous pouvons vous offrir un bleu ou un éléphant orange de Chang. 842 00:37:20,937 --> 00:37:22,270 ALEX: Je vais prendre un éléphant bleu. 843 00:37:22,270 --> 00:37:23,120 DAVID J. Malan: Un éléphant bleu. 844 00:37:23,120 --> 00:37:25,580 Ainsi, une salve d'applaudissements, si nous le pouvions, pour Alex ici. 845 00:37:25,580 --> 00:37:26,100 >> [Applaudissements] 846 00:37:26,100 --> 00:37:26,766 >> ALEX: Je vous remercie. 847 00:37:26,766 --> 00:37:28,820 DAVID J. Malan: Je vous remercie. 848 00:37:28,820 --> 00:37:36,230 Donc, les plats à emporter est que, même si le modèle type de changé au fil du temps, ici 849 00:37:36,230 --> 00:37:40,430 sur le plateau, il y avait cette démarcation entre les différentes chaînes 850 00:37:40,430 --> 00:37:42,610 Alex a obtenu pour nous. 851 00:37:42,610 --> 00:37:45,230 Maintenant, les ordinateurs, franchement, pourrait faire la même chose. 852 00:37:45,230 --> 00:37:48,210 Ils pourraient genre de plop chaînes partout dans la RAM. 853 00:37:48,210 --> 00:37:50,710 Jusqu'à ici, ici, ici, ici-bas. 854 00:37:50,710 --> 00:37:52,020 >> Ils pourraient faire exactement cela. 855 00:37:52,020 --> 00:37:54,280 Mais, bien sûr, c'est probablement pas la meilleure planification. 856 00:37:54,280 --> 00:37:54,780 Droite? 857 00:37:54,780 --> 00:37:57,340 Si je n'arrêtais pas de demander à Alex obtenir les noms, probablement il avait 858 00:37:57,340 --> 00:38:01,370 mettre un peu plus ici-bas, peut-être jusqu'à ici, ici, ici, la suite 859 00:38:01,370 --> 00:38:02,211 ici. 860 00:38:02,211 --> 00:38:05,460 Mais avec un peu plus de planification, certes, nous pourrions mettre les choses plus proprement. 861 00:38:05,460 --> 00:38:07,350 Et en effet, c'est ce que fait un ordinateur. 862 00:38:07,350 --> 00:38:10,720 >> Mais le hic, c'est que si la chaîne suivante je reçois 863 00:38:10,720 --> 00:38:14,050 après Zamyla est quelque chose comme Belinda, 864 00:38:14,050 --> 00:38:17,929 proposer où nous pourrions écrire le lettre b à l'égard de cette grille? 865 00:38:17,929 --> 00:38:18,720 Où aimeriez-vous aller? 866 00:38:18,720 --> 00:38:21,480 A droite de l'un, au-dessous de l'axe z, au-dessous de l'un? 867 00:38:21,480 --> 00:38:23,204 Quelles seraient vos premiers instincts être? 868 00:38:23,204 --> 00:38:24,120 AUDIENCE: En dessous de la z. 869 00:38:24,120 --> 00:38:25,100 DAVID J. Malan: Donc en dessous de la z. 870 00:38:25,100 --> 00:38:26,530 Et c'est à peu simple, non? 871 00:38:26,530 --> 00:38:29,321 C'est plutôt drôle, c'est ce que nous faisons sur un clavier quand nous avons frappé Entrez, 872 00:38:29,321 --> 00:38:31,770 ou un e-mail lors d'un liste à puces de choses. 873 00:38:31,770 --> 00:38:34,310 Mais la réalité est que les ordinateurs essayer d'être plus efficace, 874 00:38:34,310 --> 00:38:37,170 et entasser certainement autant données dans la RAM que possible, 875 00:38:37,170 --> 00:38:38,890 de sorte que vous ne perdez pas des octets. 876 00:38:38,890 --> 00:38:41,545 De sorte que vous ne perdez pas de tout l'immobilier de l'écran. 877 00:38:41,545 --> 00:38:44,170 Et le problème, cependant, c'est que si nous avons littéralement mis la lettre 878 00:38:44,170 --> 00:38:49,940 b après un, comment allons-nous savoir où le nom de Zamyla se termine 879 00:38:49,940 --> 00:38:51,840 et le nom de l'Belinda commence? 880 00:38:51,840 --> 00:38:55,270 Donc, vous venez de proposer les humains, bien, Appuyez sur la touche Entrée, essentiellement. 881 00:38:55,270 --> 00:38:56,410 Mettez-le ci-dessous. 882 00:38:56,410 --> 00:38:59,750 Ou même comme Alex l'a fait, il suffit de commencer l'écriture le nom ci-dessous suivant le précédent, 883 00:38:59,750 --> 00:39:01,583 et au-dessous de celle-ci, et alors inférieur à celui-ci. 884 00:39:01,583 --> 00:39:02,510 C'est un repère visuel. 885 00:39:02,510 --> 00:39:05,960 >> Les ordinateurs ont un autre repère visuel, mais c'est un peu plus succinct. 886 00:39:05,960 --> 00:39:07,840 C'est ce personnage funky. 887 00:39:07,840 --> 00:39:11,890 Backslash 0, ce qui est peut-être rappelle barre oblique inverse n, 888 00:39:11,890 --> 00:39:12,640 et ainsi de suite, maintenant. 889 00:39:12,640 --> 00:39:14,120 Les séquences d'échappement spéciales. 890 00:39:14,120 --> 00:39:19,120 Backslash 0 est la voie de représentant huit bits de zéro dans une rangée. 891 00:39:19,120 --> 00:39:22,000 0000 0000. 892 00:39:22,000 --> 00:39:26,130 >> La manière dont vous exprimez qui n'est pas à cliquez sur le numéro zéro de votre clavier, 893 00:39:26,130 --> 00:39:28,140 car en fait c'est un char ASCII. 894 00:39:28,140 --> 00:39:30,990 Il ressemble à un certain nombre, mais est en fait un nombre décimal 895 00:39:30,990 --> 00:39:35,910 que représente la circulaire glyphe, la police circulaire. 896 00:39:35,910 --> 00:39:38,410 Pendant ce temps, la barre oblique inverse zéro signifie, littéralement 897 00:39:38,410 --> 00:39:40,700 mettre huit zéro octets ici pour moi. 898 00:39:40,700 --> 00:39:42,136 >> C'est donc quelque peu arbitraire. 899 00:39:42,136 --> 00:39:44,260 Nous aurions pu utiliser n'importe quel modèle de bits, mais le monde 900 00:39:44,260 --> 00:39:46,610 décidé quelques années Il ya, à ce que représentent 901 00:39:46,610 --> 00:39:49,710 la fin d'une chaîne de caractères dans la mémoire, il suffit de mettre tout un tas de zéros. 902 00:39:49,710 --> 00:39:51,000 Parce que nous pouvons détecter. 903 00:39:51,000 --> 00:39:54,790 Maintenant, ce qui signifie qu'aucune lettre de la alphabet peut être représenté par des zéros. 904 00:39:54,790 --> 00:39:58,480 >> Mais ce n'est pas grave, nous avons déjà vu que nous utilisons sur 65 en 97 sur place. 905 00:39:58,480 --> 00:40:00,290 Nous n'avons pas eu partout fermer à zéro. 906 00:40:00,290 --> 00:40:03,040 907 00:40:03,040 --> 00:40:06,540 Alors Belinda dans la mémoire d'un ordinateur qui se passe réellement à aller ici. 908 00:40:06,540 --> 00:40:09,764 Je l'ai dessiné en jaune juste d'attirer notre attention. 909 00:40:09,764 --> 00:40:11,680 Et remarquez, aussi, ce est tout à fait arbitraire. 910 00:40:11,680 --> 00:40:12,680 J'ai dessiné comme une grille. 911 00:40:12,680 --> 00:40:14,460 Comme, RAM est juste un objet physique. 912 00:40:14,460 --> 00:40:17,300 Il ne doit pas nécessairement lignes et de colonnes, en tant que tel. 913 00:40:17,300 --> 00:40:20,490 Il a juste un tas d'octets mis en œuvre dans le matériel en quelque sorte. 914 00:40:20,490 --> 00:40:22,817 Mais si, après que Lionel tapé le nom de Gabe, 915 00:40:22,817 --> 00:40:25,650 il va finir ici en mémoire, et si j'ai tapé dans le nom de Daven, 916 00:40:25,650 --> 00:40:27,316 par exemple, il va finir ici. 917 00:40:27,316 --> 00:40:29,310 Et je peux continuer à écrire encore plus de noms. 918 00:40:29,310 --> 00:40:32,100 >> Malheureusement, si j'essaie d' écrire un super long nom, 919 00:40:32,100 --> 00:40:33,730 Je pourrais éventuellement manquer de mémoire. 920 00:40:33,730 --> 00:40:37,810 Dans ce cas, getString est va retourner NULL, comme nous l'avons dit. 921 00:40:37,810 --> 00:40:41,720 Mais heureusement, au moins en ce visuel ici, nous n'avons pas tout à fait aussi loin. 922 00:40:41,720 --> 00:40:45,860 >> Maintenant, ce qui est bien c'est que cette idée générale de traiter les choses 923 00:40:45,860 --> 00:40:49,720 comme dans les boîtes est représentatif d'une caractéristique de C 924 00:40:49,720 --> 00:40:52,690 et un grand nombre de langues, connue sous le nom d'un tableau. 925 00:40:52,690 --> 00:40:55,490 Un tableau est un autre type de données. 926 00:40:55,490 --> 00:40:57,380 C'est une structure de données, si vous voulez. 927 00:40:57,380 --> 00:41:01,160 Structure dans le sens de celui-ci en fait, en quelque sorte, à la recherche comme une boîte, au moins 928 00:41:01,160 --> 00:41:02,320 dans l'oeil de votre esprit. 929 00:41:02,320 --> 00:41:09,680 Un tableau est un contiguë séquence de types de données identiques, 930 00:41:09,680 --> 00:41:11,330 dos à dos à dos à dos. 931 00:41:11,330 --> 00:41:14,720 >> Ainsi, une chaîne, dans d'autres mots, est un tableau de caractères. 932 00:41:14,720 --> 00:41:16,120 Un tableau de caractères. 933 00:41:16,120 --> 00:41:19,070 Mais il s'avère que vous pouvez avoir tableaux de bouquets de choses. 934 00:41:19,070 --> 00:41:21,870 En fait, nous pouvons mettre encore nombres dans un tableau. 935 00:41:21,870 --> 00:41:23,920 Donc, la forme sous laquelle nous allons commencer 936 00:41:23,920 --> 00:41:26,590 déclarant ces données structure connue en tant que tableau 937 00:41:26,590 --> 00:41:28,250 va également utiliser des crochets. 938 00:41:28,250 --> 00:41:31,500 Mais ces crochets vont avoir un sens différent dans ce contexte. 939 00:41:31,500 --> 00:41:33,450 >> Et nous allons voir comme suit. 940 00:41:33,450 --> 00:41:36,780 Supposons que j'ai ouvert un nouveau fichier ici. 941 00:41:36,780 --> 00:41:38,535 Et je sauve ce que ages.c. 942 00:41:38,535 --> 00:41:41,280 943 00:41:41,280 --> 00:41:43,470 Et je vais mettre dans mon dossier ici. 944 00:41:43,470 --> 00:41:46,130 Et maintenant, je vais aller de l'avant et commencez à taper quelque chose 945 00:41:46,130 --> 00:41:53,940 comme inclure CS50.h, inclure stdio.h, int void main. 946 00:41:53,940 --> 00:41:57,370 Et puis à l'intérieur d'ici, je veux d'abord avoir un int appelé âge. 947 00:41:57,370 --> 00:42:01,371 >> Et je vais l'utiliser pour obtenir un int de l'utilisateur pour son âge. 948 00:42:01,371 --> 00:42:04,620 Mais ce programme est destiné à être utilisé par plusieurs personnes, pour n'importe quel contexte. 949 00:42:04,620 --> 00:42:05,490 J'ai une ligne de gens. 950 00:42:05,490 --> 00:42:08,281 Tous ont à taper dans leur l'âge de peut-être certains, je ne sais pas, 951 00:42:08,281 --> 00:42:10,530 concurrence, ou d'un événement que qu'ils sont arrivés pour. 952 00:42:10,530 --> 00:42:13,030 Donc, la prochaine personne, je besoin d'une autre variable. 953 00:42:13,030 --> 00:42:15,790 >> Parce que si je fais juste âge obtient getInt, c'est 954 00:42:15,790 --> 00:42:18,500 va tabasser, ou écraser l'âge de la personne précédente. 955 00:42:18,500 --> 00:42:19,760 Donc, ce n'est pas bon. 956 00:42:19,760 --> 00:42:21,790 Donc, mon premier instinct peut-être, oh, tout droit, 957 00:42:21,790 --> 00:42:26,260 si je veux obtenir plusieurs personnes de ages-- appelons ce age1, 958 00:42:26,260 --> 00:42:31,280 int age2 obtient int, int age3 obtient getInt. 959 00:42:31,280 --> 00:42:35,340 Et maintenant, je vais utiliser du code de pseudo ici. 960 00:42:35,340 --> 00:42:37,679 >> Faire quelque chose avec ces chiffres. 961 00:42:37,679 --> 00:42:40,470 Nous partons pour un autre jour ce nous y faisons, parce que nous ne 962 00:42:40,470 --> 00:42:44,200 soins pour le moment sur age1, âge2 age3. 963 00:42:44,200 --> 00:42:46,450 Malheureusement, une fois que je compiler ce programme 964 00:42:46,450 --> 00:42:51,140 et le mettre en face des utilisateurs réels, quelle est la mauvaise conception fondamentalement 965 00:42:51,140 --> 00:42:53,890 décision me semble avoir fait? 966 00:42:53,890 --> 00:42:54,624 Ouais? 967 00:42:54,624 --> 00:42:55,499 PUBLIC: [inaudible] 968 00:42:55,499 --> 00:42:58,071 969 00:42:58,071 --> 00:42:59,820 DAVID J. Malan: Ouais, Je n'ai même pas essayé 970 00:42:59,820 --> 00:43:02,028 de comprendre comment plusieurs siècles m'importe fait-il? 971 00:43:02,028 --> 00:43:05,380 Si j'ai moins de trois personnes ici, et donc moins de trois ans, 972 00:43:05,380 --> 00:43:07,260 Je suis toujours aveuglément attendre trois. 973 00:43:07,260 --> 00:43:08,720 A Dieu ne plaise quatre personnes se présentent. 974 00:43:08,720 --> 00:43:10,990 Mon programme ne veut tout simplement pas même les soutenir. 975 00:43:10,990 --> 00:43:13,280 >> Et ce, longue histoire Bref, c'est pas une bonne habitude. 976 00:43:13,280 --> 00:43:13,780 Droite? 977 00:43:13,780 --> 00:43:16,530 Je suis essentiellement la copie et coller le code et vous ajustez 978 00:43:16,530 --> 00:43:17,430 les noms de variables. 979 00:43:17,430 --> 00:43:22,410 Et, mon dieu, si vous aviez, pas trois âges, mais 10 ou 100, ou même 6500 980 00:43:22,410 --> 00:43:23,820 étudiants, par exemple. 981 00:43:23,820 --> 00:43:26,950 Cela ne va pas être particulièrement Code élégant, ou durable. 982 00:43:26,950 --> 00:43:29,200 Vous allez avoir à réécrire le programme à chaque fois 983 00:43:29,200 --> 00:43:30,760 votre numéro de changements de personnes. 984 00:43:30,760 --> 00:43:35,090 >> Donc, heureusement, dans notre effectif fichier ages.c pour aujourd'hui, 985 00:43:35,090 --> 00:43:36,970 nous avons une solution plus intelligente. 986 00:43:36,970 --> 00:43:39,800 Tout d'abord, je vais emprunter la construisons, nous avons utilisé quelques fois, 987 00:43:39,800 --> 00:43:43,744 ce faire tout en boucle, afin d'obtenir le nombre de personnes dans la salle. 988 00:43:43,744 --> 00:43:46,910 Je vais à harceler l'utilisateur, encore une fois et encore, jusqu'à ce qu'il me donne 989 00:43:46,910 --> 00:43:49,260 une valeur de n qui est un entier positif. 990 00:43:49,260 --> 00:43:51,590 >> J'aurais pu utiliser, dernier temps-y int positif. 991 00:43:51,590 --> 00:43:53,720 Mais nous n'avons pas cette pour de vrai, alors je suis allé de l'avant 992 00:43:53,720 --> 00:43:55,660 et re mis en œuvre cette idée. 993 00:43:55,660 --> 00:43:58,410 Maintenant, ici, c'est le nouveau truc. 994 00:43:58,410 --> 00:44:02,260 Dans la ligne 27, comme les commentaires la ligne 26 indique, 995 00:44:02,260 --> 00:44:05,180 déclarer un tableau dans lequel pour stocker l'âge de chacun. 996 00:44:05,180 --> 00:44:09,320 >> Donc, si vous voulez obtenir, pas un int, pas deux ints, mais tout un tas d'entiers. 997 00:44:09,320 --> 00:44:13,800 En effet les entiers n, où n pourrait trois, peut-être 100, peut-être 1000. 998 00:44:13,800 --> 00:44:17,570 La syntaxe, tout simplement, est de par exemple, quel type de données que vous voulez? 999 00:44:17,570 --> 00:44:19,620 Que voulez-vous appeler ce morceau de mémoire? 1000 00:44:19,620 --> 00:44:23,530 Qu'est-ce que vous voulez appeler la grille qui ressemble à ce imagée? 1001 00:44:23,530 --> 00:44:27,700 >> Et entre parenthèses ici, dites-vous la taille que vous voulez que le tableau soit. 1002 00:44:27,700 --> 00:44:30,450 Et plus tôt, quand j'ai dit que la syntaxe est un peu différent ici, 1003 00:44:30,450 --> 00:44:33,614 nous sommes toujours en utilisant des crochets, mais quand je suis déclaration d'un tableau, 1004 00:44:33,614 --> 00:44:35,530 le nombre à l'intérieur de la entre crochets représente 1005 00:44:35,530 --> 00:44:37,610 la taille voulez-vous le tableau soit. 1006 00:44:37,610 --> 00:44:42,490 >> En revanche, lorsque nous utilisions s support i il ya un moment, s, une chaîne, 1007 00:44:42,490 --> 00:44:46,820 est en effet un tableau de caractères, mais lorsque vous n'êtes pas déclarer une variable, 1008 00:44:46,820 --> 00:44:49,760 comme ici avec ce mot-clé, vous êtes tout simplement obtenir 1009 00:44:49,760 --> 00:44:54,280 un indice spécifique, un particulier élément de ce tableau. 1010 00:44:54,280 --> 00:44:57,090 Une fois que nous savons que, le reste de ce système est simple. 1011 00:44:57,090 --> 00:45:00,765 Si de nouveau, je vais d'abord imprimer Quel est l'âge de la personne numéro i. 1012 00:45:00,765 --> 00:45:03,890 Lorsque je dis juste nombre de personne un, personne numéro deux, numéro trois personne. 1013 00:45:03,890 --> 00:45:06,306 >> Et je suis en train de faire de l'arithmétique, de sorte que les gens normaux comme, 1014 00:45:06,306 --> 00:45:09,030 on compte à partir de l'autre pour ce programme, et non à partir de zéro. 1015 00:45:09,030 --> 00:45:13,620 Alors j'appelle getint, mais je stocke la réponse dans les âges support E. 1016 00:45:13,620 --> 00:45:16,610 Quel est l'âge ième dans le tableau. 1017 00:45:16,610 --> 00:45:21,640 Ainsi, alors que la dernière fois que nous traitions ces boîtes que caractères pour le nom de Zamyla, 1018 00:45:21,640 --> 00:45:22,490 et d'autres. 1019 00:45:22,490 --> 00:45:26,530 Maintenant, ces boîtes représentent 32 bits, ou quatre octets 1020 00:45:26,530 --> 00:45:29,510 dans lequel nous pouvons stocker un int, int, int. 1021 00:45:29,510 --> 00:45:31,890 Tout ce qui, encore une fois, sont le même type de données. 1022 00:45:31,890 --> 00:45:33,890 >> Maintenant, je fais quelque chose de stupide, comme le temps passe, juste 1023 00:45:33,890 --> 00:45:35,510 pour justifier la rédaction de ce programme. 1024 00:45:35,510 --> 00:45:40,050 Et puis ici, je itérer nouveau sur le tableau dire un an à partir de maintenant, 1025 00:45:40,050 --> 00:45:43,090 nombre de personne d'une volonté être âgé de ans quelque chose. 1026 00:45:43,090 --> 00:45:45,010 Et pour comprendre que math-- Je veux dire, ce 1027 00:45:45,010 --> 00:45:49,260 n'est pas très compliqué arithmetic-- Je viens d'ajouter un à leur âge. 1028 00:45:49,260 --> 00:45:51,240 Juste pour démontrer, encore une fois, ce. 1029 00:45:51,240 --> 00:45:57,910 >> Tout comme je ne peux indice en chaîne, s, si je peux index dans un tableau des âges, 1030 00:45:57,910 --> 00:45:59,950 comme celle là. 1031 00:45:59,950 --> 00:46:03,340 Alors, où est ce que ça va être nous prendre? 1032 00:46:03,340 --> 00:46:07,070 Nous allons donc voir, en fin de compte, un peu de choses dans les jours à venir. 1033 00:46:07,070 --> 00:46:09,510 Un, tout ce temps, quand écrire vos propres programmes, 1034 00:46:09,510 --> 00:46:11,239 comme Mario, gourmand, crédit. 1035 00:46:11,239 --> 00:46:13,780 Vous avez été de taper le nom de le programme et en appuyant sur Entrée. 1036 00:46:13,780 --> 00:46:15,610 Et puis obtenir les commentaires de l'utilisateur. 1037 00:46:15,610 --> 00:46:18,137 >> Avec getString, getInt, getLongLong, ou analogue. 1038 00:46:18,137 --> 00:46:20,720 Mais il s'avère que les supports C quelque chose qui s'appelle la ligne de commande 1039 00:46:20,720 --> 00:46:25,740 arguments, ce qui va nous permettre effectivement obtenir sur les mots que vous tapez, 1040 00:46:25,740 --> 00:46:28,570 à l'invite de clignoter, après le nom de votre programme. 1041 00:46:28,570 --> 00:46:31,430 >> Ainsi, dans les jours à venir, vous pourrait taper quelque chose comme César, 1042 00:46:31,430 --> 00:46:34,950 ou ./caesar numéro 13, par la suite. 1043 00:46:34,950 --> 00:46:36,070 Nous allons voir comment cela fonctionne. 1044 00:46:36,070 --> 00:46:37,550 Car en effet, en problème réglé deux, nous sommes 1045 00:46:37,550 --> 00:46:39,383 vais vous présenter à un petit quelque chose 1046 00:46:39,383 --> 00:46:42,360 rappelle Ralphie de contester antérieure de la cartographie. 1047 00:46:42,360 --> 00:46:43,970 L'art de brouiller l'information. 1048 00:46:43,970 --> 00:46:46,660 Ceci, en fait, est très rappelle ce que Ralphie fait. 1049 00:46:46,660 --> 00:46:51,380 >> Il s'agit d'un exemple de chiffrement algorithme appelé rot13, R-O-T 13. 1050 00:46:51,380 --> 00:46:54,910 Ce qui signifie tout simplement tourner la lettres de l'alphabet de 13 places. 1051 00:46:54,910 --> 00:46:58,309 Et si vous faites cela, vous verrez maintenant ce qui est, peut-être, une expression familière. 1052 00:46:58,309 --> 00:47:01,100 Mais la façon dont nous allons utiliser ce, finalement, est plus généralement. 1053 00:47:01,100 --> 00:47:04,390 >> Dans P mettre deux, dans l'édition standard, vous implémentez un couple de chiffres, 1054 00:47:04,390 --> 00:47:06,720 un appelé César, celui qui est appelé Vigenère. 1055 00:47:06,720 --> 00:47:10,090 Tous les deux sont en rotation chiffres, en quelque sorte que vous 1056 00:47:10,090 --> 00:47:11,826 tourner une seule lettre dans une autre lettre. 1057 00:47:11,826 --> 00:47:12,950 Et César est super simple. 1058 00:47:12,950 --> 00:47:16,220 Vous ajoutez un, vous ajoutez 13, ou un nombre jusqu'à 26. 1059 00:47:16,220 --> 00:47:19,570 Vigenère fait que sur une base par lettre. 1060 00:47:19,570 --> 00:47:22,140 Donc Vigenère, comme vous le verrez dans la spécification, est plus sûr. 1061 00:47:22,140 --> 00:47:24,973 >> Mais à la fin de la journée ce qui vous serez mise en œuvre et de définir deux P, 1062 00:47:24,973 --> 00:47:29,050 est cette clef que vous utilisez à la fois pour le chiffrement et le déchiffrement. 1063 00:47:29,050 --> 00:47:32,160 En se référant au procédé de tournage texte brut, certains message d'origine, 1064 00:47:32,160 --> 00:47:34,490 en texte chiffré, qui est quelque chose de chiffré. 1065 00:47:34,490 --> 00:47:36,220 Et puis décrypter à nouveau. 1066 00:47:36,220 --> 00:47:38,119 >> Dans l'édition de pirate, Pendant ce temps, vous serez 1067 00:47:38,119 --> 00:47:40,660 chargé de quelque chose de similaire dans l'esprit, où nous vous donnerons 1068 00:47:40,660 --> 00:47:44,610 un fichier, d'un Linux typique, ou Mac ou Unix ordinateur appelé etsy 1069 00:47:44,610 --> 00:47:47,800 mot de passe, qui contient un ensemble tas de noms d'utilisateurs et mots de passe. 1070 00:47:47,800 --> 00:47:50,932 Et ces mots de passe ont tous été chiffré, ou haché, 1071 00:47:50,932 --> 00:47:53,140 pour ainsi dire, plus correctement comme vous le verrez dans la spécification. 1072 00:47:53,140 --> 00:47:57,090 >> Et l'édition pirate contester vous, par une entrée comme celle-ci, 1073 00:47:57,090 --> 00:47:58,800 et le décryptage du mot de passe. 1074 00:47:58,800 --> 00:48:02,590 C'est, comprendre ce que l' le mot de passe de l'homme était en fait. 1075 00:48:02,590 --> 00:48:05,570 Parce que, en effet, les mots de passe sont généralement pas stocké en clair, 1076 00:48:05,570 --> 00:48:08,260 et mots de passe généralement doit être difficile à deviner. 1077 00:48:08,260 --> 00:48:09,610 Ce n'est pas souvent le cas. 1078 00:48:09,610 --> 00:48:12,110 >> Et ce que je pensais que nous ferions est conclure avec quelques minutes 1079 00:48:12,110 --> 00:48:15,160 coup d'œil à un particulier mauvais choix de mots de passe 1080 00:48:15,160 --> 00:48:17,260 d'un film, vous pourriez rappeler avec tendresse. 1081 00:48:17,260 --> 00:48:18,915 Et si non, vous devriez louer. 1082 00:48:18,915 --> 00:48:20,070 >> [VIDEO LECTURE] 1083 00:48:20,070 --> 00:48:22,320 >> -Helmet, Vous démon, ce qui se passe? 1084 00:48:22,320 --> 00:48:24,240 Que faites-vous à ma fille? 1085 00:48:24,240 --> 00:48:28,010 >> -Permit Moi de présenter le jeune et brillant chirurgien plastique, 1086 00:48:28,010 --> 00:48:30,010 Docteur Phillip Schlotkin. 1087 00:48:30,010 --> 00:48:35,020 Le plus grand homme de travail de nez à l' univers entier et de Beverly Hills. 1088 00:48:35,020 --> 00:48:36,140 >> -Votre Altesse. 1089 00:48:36,140 --> 00:48:36,820 >> Emploi -Nose? 1090 00:48:36,820 --> 00:48:37,700 Je ne comprends pas. 1091 00:48:37,700 --> 00:48:39,070 Elle a déjà eu un travail de nez. 1092 00:48:39,070 --> 00:48:40,800 C'était sa douce 16 présente. 1093 00:48:40,800 --> 00:48:42,590 >> Non, ce n'est pas ce que vous pensez. 1094 00:48:42,590 --> 00:48:44,490 C'est bien pire. 1095 00:48:44,490 --> 00:48:48,160 Si vous ne me donnez pas la combinaison de l'écran d'air, 1096 00:48:48,160 --> 00:48:52,748 médecin Schlotkin donnera à votre fille sauvegarder son vieux nez. 1097 00:48:52,748 --> 00:48:53,748 - [Halète] Nooooooooooooo. 1098 00:48:53,748 --> 00:48:57,684 1099 00:48:57,684 --> 00:48:59,652 Où avez-vous trouvé ça? 1100 00:48:59,652 --> 00:49:00,640 >> -Tous Droite. 1101 00:49:00,640 --> 00:49:02,506 Je vais vous dire, je vais vous dire. 1102 00:49:02,506 --> 00:49:03,498 >> Non, papa, non. 1103 00:49:03,498 --> 00:49:04,490 Vous ne devez pas. 1104 00:49:04,490 --> 00:49:06,090 >> -Tu Droit ma chère. 1105 00:49:06,090 --> 00:49:07,390 Je vais manquer votre nouveau nez. 1106 00:49:07,390 --> 00:49:10,990 Mais je ne vais pas les dire la combinaison peu importe quoi. 1107 00:49:10,990 --> 00:49:12,450 >> -Très Bien. 1108 00:49:12,450 --> 00:49:14,830 Docteur Schlotkin, faire votre pire. 1109 00:49:14,830 --> 00:49:15,744 >> -Mon Plaisir. 1110 00:49:15,744 --> 00:49:19,860 1111 00:49:19,860 --> 00:49:20,800 >> -nō! 1112 00:49:20,800 --> 00:49:22,780 Attendez, attendez. 1113 00:49:22,780 --> 00:49:24,000 Je vais vous dire. 1114 00:49:24,000 --> 00:49:25,830 Je vais vous dire. 1115 00:49:25,830 --> 00:49:28,270 >> -I Savait que ça marcherait. 1116 00:49:28,270 --> 00:49:31,390 Très bien, donnez-le moi. 1117 00:49:31,390 --> 00:49:36,220 >> -Le Combinaison est un. 1118 00:49:36,220 --> 00:49:36,740 >> One. 1119 00:49:36,740 --> 00:49:37,473 >> One. 1120 00:49:37,473 --> 00:49:37,972 -Deux. 1121 00:49:37,972 --> 00:49:38,471 -Deux. 1122 00:49:38,471 --> 00:49:39,800 -Deux. 1123 00:49:39,800 --> 00:49:40,300 -Trois. 1124 00:49:40,300 --> 00:49:40,800 -Trois. 1125 00:49:40,800 --> 00:49:41,800 -Trois. 1126 00:49:41,800 --> 00:49:42,300 -Quatre. 1127 00:49:42,300 --> 00:49:42,800 -Quatre. 1128 00:49:42,800 --> 00:49:44,707 -Quatre. 1129 00:49:44,707 --> 00:49:45,521 Cinq des. 1130 00:49:45,521 --> 00:49:46,430 Cinq des. 1131 00:49:46,430 --> 00:49:47,930 Cinq des. 1132 00:49:47,930 --> 00:49:53,480 -So La combinaison est un, deux, trois, quatre, cinq. 1133 00:49:53,480 --> 00:49:56,140 C'est la combinaison la plus stupide J'ai jamais entendu dans ma vie. 1134 00:49:56,140 --> 00:49:58,640 C'est le genre de chose que l' idiot pourrait avoir sur ses bagages. 1135 00:49:58,640 --> 00:50:00,000 >> Et merci, Votre Altesse. 1136 00:50:00,000 --> 00:50:01,340 >> [CLICS REMOTE] 1137 00:50:01,340 --> 00:50:02,450 >> -Quel Avez-vous fait? 1138 00:50:02,450 --> 00:50:03,800 >> -I Éteint le mur. 1139 00:50:03,800 --> 00:50:05,010 >> Non, vous ne l'avez pas, vous désactivé tout le film. 1140 00:50:05,010 --> 00:50:06,220 >> Dű -I appuyé sur le mauvais bouton. 1141 00:50:06,220 --> 00:50:07,064 >> Eh bien, le remettre sur! 1142 00:50:07,064 --> 00:50:07,910 Mettez la vidéo sur! 1143 00:50:07,910 --> 00:50:08,300 >> Oui, monsieur! 1144 00:50:08,300 --> 00:50:08,799 Oui, monsieur. 1145 00:50:08,799 --> 00:50:09,660 -Let-Y, Arnold. 1146 00:50:09,660 --> 00:50:10,450 Venez, Gretchen. 1147 00:50:10,450 --> 00:50:12,533 Bien sûr, vous savez que je vais dois vous facturer pour cela. 1148 00:50:12,533 --> 00:50:16,720 1149 00:50:16,720 --> 00:50:17,220 Eh bien? 1150 00:50:17,220 --> 00:50:17,802 At-il travailler? 1151 00:50:17,802 --> 00:50:18,510 Où est le roi? 1152 00:50:18,510 --> 00:50:20,218 >> -Il Travaillé, monsieur, nous avoir la combinaison. 1153 00:50:20,218 --> 00:50:20,740 -Great. 1154 00:50:20,740 --> 00:50:24,810 Maintenant, nous pouvons prendre le moindre souffle de l'air frais de la planète Druidia. 1155 00:50:24,810 --> 00:50:25,890 Quelle est la combinaison? 1156 00:50:25,890 --> 00:50:28,155 >> One, deux, trois, quatre, cinq. 1157 00:50:28,155 --> 00:50:29,890 >> One, deux, trois, quatre, cinq? 1158 00:50:29,890 --> 00:50:30,390 -Oui. 1159 00:50:30,390 --> 00:50:31,110 -C'est Incroyable. 1160 00:50:31,110 --> 00:50:34,550 J'ai le même combinaison sur mes bagages. 1161 00:50:34,550 --> 00:50:37,160 Préparer Spaceball 1 pour départ immédiat. 1162 00:50:37,160 --> 00:50:38,160 >> Oui, monsieur. 1163 00:50:38,160 --> 00:50:40,745 >> -AND Changer le combinaison sur mes bagages. 1164 00:50:40,745 --> 00:50:41,578 [FERMETURE DE PORTE SON] 1165 00:50:41,578 --> 00:50:42,064 [CLINK DE PORTES FRAPPE CASQUE] 1166 00:50:42,064 --> 00:50:42,550 -Ahh. 1167 00:50:42,550 --> 00:50:43,383 [FIN LECTURE VIDÉO] 1168 00:50:43,383 --> 00:50:46,700 DAVID J. Malan: C'est pour CS50, nous vous verrons la semaine prochaine. 1169 00:50:46,700 --> 00:50:49,883 Narrateur: Et maintenant, Deep Pensées, par Daven Farnham. 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> Daven FARNHAM: codage en C est d'autant plus difficile que Scratch. 1172 00:50:55,860 --> 00:50:57,320 printf, Scratch était un mensonge. 1173 00:50:57,320 --> 00:50:59,930 1174 00:50:59,930 --> 00:51:01,430 >> [Rires EXTRAIT] 1175 00:51:01,430 --> 00:51:02,486