1 00:00:07,420 --> 00:00:08,160 [Powered by Google Translate] DAVID J. MALAN: Très bien. 2 00:00:08,160 --> 00:00:11,170 C'est CS50, et c'est la fin de la deuxième semaine. 3 00:00:11,170 --> 00:00:14,650 Si vous vous attendez à avoir faim autour de la même heure demain, sachez que nous allons 4 00:00:14,650 --> 00:00:18,920 de convoquer un petit groupe demain, jeudi, 1:15 PM. 5 00:00:18,920 --> 00:00:21,460 Il ya cette URL ici si vous voulez confirmer votre présence. 6 00:00:21,460 --> 00:00:25,270 Les places sont limitées, donc s'il vous plaît pardonnez si le formulaire a remplir par le temps que vous 7 00:00:25,270 --> 00:00:26,680 remplir ce formulaire. 8 00:00:26,680 --> 00:00:29,400 Un autre URL que cela puisse être d'intérêt est la suivante. 9 00:00:29,400 --> 00:00:32,409 >> Donc, dans à peu près un mois, le cours va être mis à la disposition 10 00:00:32,409 --> 00:00:36,090 d'autant plus largement par EDX, par lequel les gens sur l'Internet sera 11 00:00:36,090 --> 00:00:39,580 en mesure de suivre, d'engager dans le cadre très activement, en fait. 12 00:00:39,580 --> 00:00:43,070 Ils vont utiliser l'appareil CS50 CS50 et Discuter et la plupart des 13 00:00:43,070 --> 00:00:45,840 différents outils logiciels que nous avons déjà eu recours à ce semestre. 14 00:00:45,840 --> 00:00:49,030 Et l'une des initiatives que nous aimerions prendre comme une expérience cette année 15 00:00:49,030 --> 00:00:53,120 est de voir à quel point le contenu que nous pouvons traduire dans d'autres parlée et 16 00:00:53,120 --> 00:00:54,110 langues écrites. 17 00:00:54,110 --> 00:00:58,000 Donc, si vous pouvez avoir un intérêt à participer à ce projet, lequel 18 00:00:58,000 --> 00:01:02,090 nous allons fournir des transcriptions anglaises et sous-titres pour le cours de 19 00:01:02,090 --> 00:01:05,190 des conférences et des séminaires et des shorts et des sections et autres - 20 00:01:05,190 --> 00:01:08,700 si vous parlez couramment ou écrire couramment une autre langue, nous le ferions 21 00:01:08,700 --> 00:01:12,240 l'amour de vous engager dans ce projet, par lequel vous prenez l'un ou plusieurs des 22 00:01:12,240 --> 00:01:15,340 vidéos, de les traduire dans une langue que vous connaissez très bien. 23 00:01:15,340 --> 00:01:19,050 Pour vous donner une idée de l'interface, il ya cette interface utilisateur basée sur le Web 24 00:01:19,050 --> 00:01:22,330 que nous allons utiliser qui permettra de créer une interface utilisateur pour l'essentiel comme ça. 25 00:01:22,330 --> 00:01:24,520 Cette m'apprenait quelque Halloween auparavant. 26 00:01:24,520 --> 00:01:27,710 Et sur le côté droit, il en noir à côté de ces horodateurs, 27 00:01:27,710 --> 00:01:31,300 vous verrez les différentes choses qui sortaient de ma bouche ce jour-là. 28 00:01:31,300 --> 00:01:34,660 Et puis, au-dessous, vous serez en mesure de traduire dans une autre langue. 29 00:01:34,660 --> 00:01:37,840 Exactement ce que la cartographie est entre les deux, dans ce cas, Anglais 30 00:01:37,840 --> 00:01:38,660 et, disons, espagnol. 31 00:01:38,660 --> 00:01:40,480 Donc, c'est en fait un très convivial outil. 32 00:01:40,480 --> 00:01:43,690 Vous pouvez revenir en arrière et avance rapide très facilement avec les raccourcis clavier. 33 00:01:43,690 --> 00:01:46,710 Donc, si vous souhaitez prendre part à cette expérience et avoir vos mots 34 00:01:46,710 --> 00:01:50,730 vu et lu par potentiellement des milliers de gens là-bas, s'il vous plaît ne me sens 35 00:01:50,730 --> 00:01:51,960 libre de participer. 36 00:01:51,960 --> 00:01:56,940 >> Maintenant, un mot sur le chaton du lundi, de peur que nous avons envoyé un trop 37 00:01:56,940 --> 00:01:58,120 un message effrayant. 38 00:01:58,120 --> 00:02:02,130 Nous rendons compte que les heures de bureau et suggèrent que les articles suggèrent, l' 39 00:02:02,130 --> 00:02:05,110 conception du cours est très bien d'avoir des élèves collaborent et 40 00:02:05,110 --> 00:02:09,250 parler à travailler par le biais ensembles de problèmes et les problèmes ensemble. 41 00:02:09,250 --> 00:02:13,630 Et vraiment la ligne est juste en bas, encore une fois, en fin de compte le travail que vous 42 00:02:13,630 --> 00:02:16,420 doivent soumettre doit être la vôtre. 43 00:02:16,420 --> 00:02:19,080 Et c'est donc, en toute honnêteté - dans les heures de bureau, il est tout à fait normal - 44 00:02:19,080 --> 00:02:21,560 il est tout à fait à prévoir, même - à discuter avec certains 45 00:02:21,560 --> 00:02:22,370 amis à côté de vous. 46 00:02:22,370 --> 00:02:25,240 Si il ou elle est aux prises avec un sujet, et vous êtes comme, oh, eh bien laissez- 47 00:02:25,240 --> 00:02:27,750 moi de vous donner un aperçu de certaines ligne de code que j'ai écrit. 48 00:02:27,750 --> 00:02:28,290 C'est très bien. 49 00:02:28,290 --> 00:02:28,700 Ce qui se passe. 50 00:02:28,700 --> 00:02:31,580 Et c'est très propice, je pense, avec le processus d'apprentissage. 51 00:02:31,580 --> 00:02:35,270 Lorsque la ligne, encore une fois, se sont croisés lorsque la tête est en quelque sorte incliné sur 52 00:02:35,270 --> 00:02:38,800 ici pendant quelques secondes ou beaucoup trop de minutes pour que vraiment avoir juste 53 00:02:38,800 --> 00:02:41,250 été l'occasion de déblocage pour votre ami. 54 00:02:41,250 --> 00:02:43,870 Et bien sûr, quand les choses deviennent échangées via e-mail et Dropbox et 55 00:02:43,870 --> 00:02:45,350 similaires, il ya trop de la ligne. 56 00:02:45,350 --> 00:02:48,940 Ainsi, par tous les moyens, à l'aise et se sentent encouragés à discuter avec des amis 57 00:02:48,940 --> 00:02:51,270 et camarades de classe sur des psets et plus encore. 58 00:02:51,270 --> 00:02:54,680 Et juste réaliser que ce que vous avez finalement soumettre devrait vraiment être l' 59 00:02:54,680 --> 00:02:57,780 produit de votre création et non pas quelqu'un d'autre. 60 00:02:57,780 --> 00:03:01,010 >> Ainsi, dans la même veine de créatures en peluche, vous pourriez 61 00:03:01,010 --> 00:03:02,820 connais ce gars là. 62 00:03:02,820 --> 00:03:06,180 C'est donc un film terriblement ringard il ya des années. 63 00:03:06,180 --> 00:03:08,680 N'importe qui ici vu Spaceballs? 64 00:03:08,680 --> 00:03:09,120 Très bien. 65 00:03:09,120 --> 00:03:10,220 Ainsi, un bon nombre ici. 66 00:03:10,220 --> 00:03:13,840 Donc, c'est notre façon merveilleusement académique de présenter aujourd'hui en fin de compte 67 00:03:13,840 --> 00:03:15,130 la notion de cryptographie. 68 00:03:15,130 --> 00:03:19,010 Et si l'un des problèmes spécifiques à un domaine pour pset 2, qui viendra 69 00:03:19,010 --> 00:03:22,770 demain soir tard, est de plonger dans le monde de la cryptographie, qui 70 00:03:22,770 --> 00:03:26,380 est l'art de crypter ou brouiller l'information. 71 00:03:26,380 --> 00:03:30,160 Et cela concerne en fin de compte dans le monde de la sécurité. 72 00:03:30,160 --> 00:03:34,440 >> Maintenant sécurité le plus pour nous, se présente sous la forme de mécanismes assez banales. 73 00:03:34,440 --> 00:03:36,920 Nous avons tous des noms d'utilisateur et mots de passe. 74 00:03:36,920 --> 00:03:41,350 Et nous avons tous des noms d'utilisateur et mots de passe très mauvais, le plus probable. 75 00:03:41,350 --> 00:03:45,250 Si votre mot de passe est le même sur plusieurs sites Web, ce n'est probablement pas 76 00:03:45,250 --> 00:03:47,920 la meilleure idée, comme nous le verrons vers la fin du semestre. 77 00:03:47,920 --> 00:03:51,680 Si votre mot de passe est écrit sur une note collante - sans blague - sur votre 78 00:03:51,680 --> 00:03:55,130 moniteur, qui n'est pas non plus forcément la meilleure conception, mais tout à fait un commun 79 00:03:55,130 --> 00:03:56,140 phénomène. 80 00:03:56,140 --> 00:04:00,420 Et si vous n'êtes pas en utilisant la cryptographie pour chiffrer vos mots de passe, ils sont 81 00:04:00,420 --> 00:04:01,610 particulièrement vulnérables. 82 00:04:01,610 --> 00:04:04,670 Donc, si vous pensez que vous être super intelligent en ayant un mot caché 83 00:04:04,670 --> 00:04:07,740 documenter quelque part sur votre disque dur qui contient tous vos mots de passe, mais 84 00:04:07,740 --> 00:04:10,550 c'est dans un dossier que personne ne va regarder dans, qui n'est pas non plus une très 85 00:04:10,550 --> 00:04:11,540 Mécanisme sécurisé. 86 00:04:11,540 --> 00:04:15,100 Et qu'est-ce pset 2 va présenter cet art de la cryptographie et 87 00:04:15,100 --> 00:04:18,300 brouiller l'information pour que les choses comme les mots de passe sont 88 00:04:18,300 --> 00:04:19,500 d'autant plus sécurisé. 89 00:04:19,500 --> 00:04:24,500 Afin de motiver ce problème très réel du monde avec un très non dans le monde réel 90 00:04:24,500 --> 00:04:28,740 scénario, laissez-moi vous présenter l'un de nos clips préférés ici à partir de cette 91 00:04:28,740 --> 00:04:29,895 film, Spaceballs. 92 00:04:29,895 --> 00:04:30,565 >> [LECTURE VIDEO] 93 00:04:30,565 --> 00:04:32,995 -Casque, vous démon, ce qui se passe? 94 00:04:32,995 --> 00:04:34,730 Que faites-vous à ma fille? 95 00:04:34,730 --> 00:04:38,960 -Permettez-moi de vous présenter le chirurgien plastique brillant jeune, le Dr Philip 96 00:04:38,960 --> 00:04:43,290 Schlotkin, le plus grand homme nose job dans l'ensemble 97 00:04:43,290 --> 00:04:45,526 univers et de Beverly Hills. 98 00:04:45,526 --> 00:04:46,450 -Votre Altesse. 99 00:04:46,450 --> 00:04:47,380 Nez-emploi? 100 00:04:47,380 --> 00:04:48,035 Je ne comprends pas. 101 00:04:48,035 --> 00:04:49,480 Elle a déjà eu un travail de nez. 102 00:04:49,480 --> 00:04:51,490 C'était un doux 16 présents. 103 00:04:51,490 --> 00:04:53,090 -Non, ce n'est pas ce que vous pensez. 104 00:04:53,090 --> 00:04:55,150 C'est bien pire. 105 00:04:55,150 --> 00:04:59,860 Si vous ne me donnez pas la combinaison du bouclier d'air, le Dr Schlotkin sera 106 00:04:59,860 --> 00:05:04,135 donner à votre fille le dos de son ancien nez. 107 00:05:04,135 --> 00:05:05,385 -Non! 108 00:05:08,202 --> 00:05:10,186 Où avez-vous trouvé ça? 109 00:05:10,186 --> 00:05:11,178 -Très bien. 110 00:05:11,178 --> 00:05:11,674 Je vais vous dire. 111 00:05:11,674 --> 00:05:12,666 Je vais vous dire. 112 00:05:12,666 --> 00:05:14,154 -Non, papa, non. 113 00:05:14,154 --> 00:05:15,150 Vous ne devez pas. 114 00:05:15,150 --> 00:05:16,460 Tu es juste-, ma chère. 115 00:05:16,460 --> 00:05:18,450 Je vais rater votre nouveau nez. 116 00:05:18,450 --> 00:05:21,550 Mais je ne vais pas leur dire la combinaison peu importe quoi. 117 00:05:21,550 --> 00:05:23,100 -Très bien. 118 00:05:23,100 --> 00:05:25,510 Dr Schlotkin, faire de ton mieux. 119 00:05:25,510 --> 00:05:26,760 -Je vous en prie. 120 00:05:30,560 --> 00:05:31,180 -Non! 121 00:05:31,180 --> 00:05:33,450 Attendez, attendez. 122 00:05:33,450 --> 00:05:34,770 Je vais vous dire. 123 00:05:34,770 --> 00:05:36,400 Je vais vous dire. 124 00:05:36,400 --> 00:05:38,630 -Je savais que ça marcherait. 125 00:05:38,630 --> 00:05:42,040 D'accord, donnez-le moi. 126 00:05:42,040 --> 00:05:46,890 -La combinaison est un. 127 00:05:46,890 --> 00:05:47,290 -Un. 128 00:05:47,290 --> 00:05:48,183 -Un. 129 00:05:48,183 --> 00:05:48,950 -Deux. 130 00:05:48,950 --> 00:05:49,370 -Deux. 131 00:05:49,370 --> 00:05:50,450 -Deux. 132 00:05:50,450 --> 00:05:50,715 -Trois 133 00:05:50,715 --> 00:05:51,380 -Trois. 134 00:05:51,380 --> 00:05:52,390 -Trois. 135 00:05:52,390 --> 00:05:53,200 -Quatre. 136 00:05:53,200 --> 00:05:53,720 -Quatre. 137 00:05:53,720 --> 00:05:55,830 -Quatre. 138 00:05:55,830 --> 00:05:56,580 -Cinq 139 00:05:56,580 --> 00:05:57,120 -Cinq. 140 00:05:57,120 --> 00:05:58,560 -Cinq. 141 00:05:58,560 --> 00:06:03,770 Ainsi, la combinaison est une, deux, trois, quatre, cinq. 142 00:06:03,770 --> 00:06:06,745 C'est la plus stupide que j'ai jamais entendue combinaison dans ma vie. 143 00:06:06,745 --> 00:06:09,290 C'est le genre de chose un idiot pourrait avoir sur ses bagages. 144 00:06:09,290 --> 00:06:11,540 -Merci, Votre Altesse. 145 00:06:11,540 --> 00:06:12,940 -Qu'avez-vous fait? 146 00:06:12,940 --> 00:06:14,230 -J'ai éteint le mur. 147 00:06:14,230 --> 00:06:14,630 -Non, vous n'avez pas. 148 00:06:14,630 --> 00:06:15,430 Vous avez éteint le film en entier. 149 00:06:15,430 --> 00:06:16,722 -Je dois avoir appuyé sur le mauvais bouton. 150 00:06:16,722 --> 00:06:18,078 -Eh bien, le remettre en place. 151 00:06:18,078 --> 00:06:18,805 Mettez la vidéo sur l'. 152 00:06:18,805 --> 00:06:19,080 -Oui, monsieur. 153 00:06:19,080 --> 00:06:19,270 Oui, monsieur. 154 00:06:19,270 --> 00:06:19,830 -Allons, Erna. 155 00:06:19,830 --> 00:06:20,270 Venez, Gretchen. 156 00:06:20,270 --> 00:06:22,850 Bien sûr, vous savez que je vais encore vous facturer pour cela. 157 00:06:27,400 --> 00:06:28,325 -Eh bien, at-elle fonctionné? 158 00:06:28,325 --> 00:06:29,550 Où est la porte? 159 00:06:29,550 --> 00:06:29,910 -Il a travaillé, monsieur. 160 00:06:29,910 --> 00:06:30,770 Nous avons la combinaison. 161 00:06:30,770 --> 00:06:31,390 -Grande. 162 00:06:31,390 --> 00:06:35,630 Maintenant, nous pouvons prendre toutes les dernier souffle d'air frais de la planète Druidia. 163 00:06:35,630 --> 00:06:36,550 Quelle est la combinaison? 164 00:06:36,550 --> 00:06:38,805 -Un, deux, trois, quatre, cinq. 165 00:06:38,805 --> 00:06:40,610 -Un, deux, trois, quatre, cinq? 166 00:06:40,610 --> 00:06:41,070 -Oui. 167 00:06:41,070 --> 00:06:41,760 -C'est incroyable. 168 00:06:41,760 --> 00:06:45,200 J'ai la même combinaison sur mes bagages. 169 00:06:45,200 --> 00:06:47,800 Préparer Spaceball 1 pour un départ immédiat. 170 00:06:47,800 --> 00:06:48,536 -Oui, monsieur. 171 00:06:48,536 --> 00:06:52,350 -Et changer la combinaison sur mes bagages. 172 00:06:52,350 --> 00:06:53,250 -Aïe! 173 00:06:53,250 --> 00:06:55,020 [FIN LECTURE VIDÉO] 174 00:06:55,020 --> 00:06:57,470 >> DAVID J. MALAN: Un film étonnant, vous devriez maintenant voir tous. 175 00:07:00,600 --> 00:07:06,540 Ainsi, le contexte ici est que les données insécurité est une occasion de 176 00:07:06,540 --> 00:07:07,790 le chiffrer et de les brouiller. 177 00:07:07,790 --> 00:07:11,060 Et si cela, par exemple, est un exemple d'un message chiffré. 178 00:07:11,060 --> 00:07:12,980 Ceci dit effectivement quelque chose en anglais. 179 00:07:12,980 --> 00:07:14,750 Mais ce n'est évidemment pas tout à fait évident. 180 00:07:14,750 --> 00:07:17,360 Et nous allons le plein cercle venu aujourd'hui pour démêler ce secret 181 00:07:17,360 --> 00:07:18,380 message ici est. 182 00:07:18,380 --> 00:07:22,370 Mais dans le monde réel des ordinateurs, les choses ne regardent même pas comme ils pourraient 183 00:07:22,370 --> 00:07:23,440 être des phrases en anglais. 184 00:07:23,440 --> 00:07:27,500 Par exemple, voici ce que vous pourriez trouver sur un standard Linux ou Mac ou 185 00:07:27,500 --> 00:07:32,080 Ordinateur Unix dans un fichier qui était autrefois appelé le fichier mot de passe. 186 00:07:32,080 --> 00:07:34,170 De nos jours, il a été déplacé vers d'autres lieux. 187 00:07:34,170 --> 00:07:38,660 Mais si vous regardez au bon endroit sur un système, vous verrez non seulement votre 188 00:07:38,660 --> 00:07:41,430 nom d'utilisateur ou d'autres personnes sur le système, mais vous verrez une 189 00:07:41,430 --> 00:07:43,410 version cryptée du mot de passe. 190 00:07:43,410 --> 00:07:47,800 En effet, la crypte mot, il suggère que la substance suivante est cryptée. 191 00:07:47,800 --> 00:07:52,030 Et cette série de lettres et de caractères apparemment aléatoires et des chiffres et 192 00:07:52,030 --> 00:07:56,370 ainsi de suite peuvent être déchiffrées que par quelque secret sachant généralement - 193 00:07:56,370 --> 00:07:58,600 un mot secret, un code secret. 194 00:07:58,600 --> 00:08:02,760 Et si en effet, l'art de la cryptographie se résume finalement à faire confiance à certains 195 00:08:02,760 --> 00:08:05,700 tri et de savoir quelque chose que quelqu'un d'autre ne fonctionne pas. 196 00:08:05,700 --> 00:08:10,010 Nous allons étudier cela en détail un peu plus aujourd'hui et dans l'ensemble de processeurs à venir. 197 00:08:10,010 --> 00:08:11,860 >> Et maintenant, un mot sur Pass / Fail. 198 00:08:11,860 --> 00:08:15,250 Donc, en particulier, que certains d'entre vous ont plongé dans pset 1, l'appareil, et 199 00:08:15,250 --> 00:08:18,390 un tout nouveau monde pour vous-même, s'est rendu compte que les frustrations et 200 00:08:18,390 --> 00:08:21,340 difficultés confusion et seulement d'ordre technique sont à prévoir. 201 00:08:21,340 --> 00:08:24,410 Surtout avec le pset d'abord, où il ya tellement de choses nouveau, le simple fait 202 00:08:24,410 --> 00:08:28,830 familiariser avec ls et cd et toutes ces commandes ésotériques dans un nouvel environnement. 203 00:08:28,830 --> 00:08:32,679 Et ce n'est séparée de la matière réelle et elle-même programmation. 204 00:08:32,679 --> 00:08:35,960 Donc réaliser, aussi, qu'il ya certainement des heures de bureau qui existent 205 00:08:35,960 --> 00:08:36,770 la structure de support. 206 00:08:36,770 --> 00:08:38,620 Les articles commencent ce dimanche. 207 00:08:38,620 --> 00:08:41,990 Mais surtout, si vous vous sentez juste que ce n'est pas le 208 00:08:41,990 --> 00:08:44,420 monde pour vous, sachez que ce n'est vraiment juste prendre du temps. 209 00:08:44,420 --> 00:08:47,520 Et s'il n'y avait pas cette opportunité ans pour moi de prendre une classe 210 00:08:47,520 --> 00:08:50,840 réussite / échec, honnêtement, je n'aurais jamais mis les pieds dans la salle de classe. 211 00:08:50,840 --> 00:08:53,520 Et vous pouvez changer cela jusqu'à ce que, par exemple, le cinquième lundi du cours. 212 00:08:53,520 --> 00:08:57,110 Donc, si vous êtes sur le bord maintenant, se rendre compte que, plutôt que la tête dans une autre 213 00:08:57,110 --> 00:09:01,000 eaux tout à fait, ne vient certainement envisager le passage à succès / échec. 214 00:09:01,000 --> 00:09:03,750 Encore une fois, il n'y a pas vraiment de cette culture ici à Harvard de prendre les choses 215 00:09:03,750 --> 00:09:08,080 réussite / échec puisque tout le monde veut vraiment atteindre ou overachieve. 216 00:09:08,080 --> 00:09:11,470 Mais franchement, c'est une merveilleuse façon d'essayer quelque chose qui pourrait ne pas 217 00:09:11,470 --> 00:09:13,110 vous être familier. 218 00:09:13,110 --> 00:09:17,090 Et vous finirez par faire dans la plupart des cas tout à fait beaux, peut-être 219 00:09:17,090 --> 00:09:18,040 bien à votre grande surprise. 220 00:09:18,040 --> 00:09:20,850 Et plus concrètement, ce que je pense de réussite / échec le fait généralement, 221 00:09:20,850 --> 00:09:23,350 d'autant plus que vous pourriez avoir expérimenté avec pset 0, si vous avez mis 222 00:09:23,350 --> 00:09:27,200 en 10 heures, 15 heures, 25 heures dans certains pset - et vous êtes juste taper 223 00:09:27,200 --> 00:09:28,180 la tête contre le mur, 224 00:09:28,180 --> 00:09:29,850 et il se fait super-tard dans la nuit, 225 00:09:29,850 --> 00:09:31,880 mais vous avez pris le pset comme 90% du chemin, 226 00:09:31,880 --> 00:09:33,780 vous savez que vous ne pouvez pas comprendre une chose - 227 00:09:33,780 --> 00:09:36,830 réussite / échec prend vraiment le bord au large d'une classe comme ça, où vous pouvez trier 228 00:09:36,830 --> 00:09:39,150 de dire heureusement pas grave, je sais que ce n'est pas parfait. 229 00:09:39,150 --> 00:09:40,470 Mais j'ai travaillé mon cul sur ce point. 230 00:09:40,470 --> 00:09:42,410 Je suis assez heureux avec où il a fini. 231 00:09:42,410 --> 00:09:44,780 Et qui répondra aux attentes de réussite / échec. 232 00:09:44,780 --> 00:09:46,850 Il ne faut donc garder cela à l'esprit. 233 00:09:46,850 --> 00:09:47,140 >> Très bien. 234 00:09:47,140 --> 00:09:50,980 Ainsi, ceux d'entre vous qui ont lutté pour utiliser l'Université de Harvard Wi-Fi savoir 235 00:09:50,980 --> 00:09:54,780 qu'il ya un SSID CS50, une connexion Wi-Fi flottant autour de vous 236 00:09:54,780 --> 00:09:56,520 pourrait avoir plus de chance d'. 237 00:09:56,520 --> 00:09:59,430 C'est un peu ironique que le mot de passe pour ce - si vous souhaitez essayer 238 00:09:59,430 --> 00:10:03,080 La connexion à ce pour de meilleures vitesses et laissez-nous savoir si ce n'est pas mieux - 239 00:10:03,080 --> 00:10:09,240 est une, deux, trois, quatre, cinq, sur toute la hauteur de huit parce huit est 240 00:10:09,240 --> 00:10:10,270 plus sûr que de cinq ans. 241 00:10:10,270 --> 00:10:15,520 Donc, si vous avez besoin du mot de passe Wi-Fi, connectez-vous sans fil CS50 ici. 242 00:10:15,520 --> 00:10:16,950 Un, deux, trois, quatre, cinq, six, sept, huit. 243 00:10:16,950 --> 00:10:20,440 Et après le CS50 Discutez si vous avez encore des problèmes de connectivité intermittents, 244 00:10:20,440 --> 00:10:24,880 et nous allons les pouvoirs en place savent pour cet espace. 245 00:10:24,880 --> 00:10:25,180 >> Très bien. 246 00:10:25,180 --> 00:10:30,350 Ainsi, un teaser rapide, surtout pour ceux d'entre vous qui sont des garçons ou des filles du ventilateur 247 00:10:30,350 --> 00:10:31,900 Tout d'Apple. 248 00:10:31,900 --> 00:10:37,566 Ce que je déterrés de quelques années en arrière était ce fichier ici, ilock.c, juste pour 249 00:10:37,566 --> 00:10:40,930 sorte de rendre plus concret et plus complexe une partie de la plus élémentaire C 250 00:10:40,930 --> 00:10:42,350 programmes que nous avons été l'écriture. 251 00:10:42,350 --> 00:10:44,360 Alors j'ai ouvert ce fichier, ilock.c. 252 00:10:44,360 --> 00:10:46,830 Il est disponible sur la page des cours pour aujourd'hui. 253 00:10:46,830 --> 00:10:49,470 Sur le côté gauche, vous verrez une longue liste de fonctions. 254 00:10:49,470 --> 00:10:51,860 Donc, le gars qui a écrit ce écrivit un grand nombre de fonctions, 255 00:10:51,860 --> 00:10:53,290 plus que principal. 256 00:10:53,290 --> 00:10:55,490 Il a utilisé tout un tas de bibliothèques ici. 257 00:10:55,490 --> 00:11:00,450 Et si on commence à défiler, de quoi il s'agit réellement est la très 258 00:11:00,450 --> 00:11:04,670 premier, je crois, craquer pour l'iPhone d'origine. 259 00:11:04,670 --> 00:11:08,000 Quand tu as voulu jailbreaker l'iPhone original, ce qui signifie untether 260 00:11:08,000 --> 00:11:11,800 il d'AT & T et fait installer un logiciel spécial sur elle et faire des choses 261 00:11:11,800 --> 00:11:13,510 que Apple ne voulait pas les gens à faire - 262 00:11:13,510 --> 00:11:17,020 bien, quelqu'un a pris le temps de comprendre exactement comment ils pourraient exploiter 263 00:11:17,020 --> 00:11:20,880 failles logicielles, les erreurs, bugs, dans le logiciel d'Apple. 264 00:11:20,880 --> 00:11:22,650 Et c'est ainsi que naquit ilock.c. 265 00:11:22,650 --> 00:11:26,670 Que si vous l'avez compilé sur un ordinateur et installé sur un iPhone 266 00:11:26,670 --> 00:11:29,810 a été connecté à votre ordinateur via, par exemple, un câble USB, ce serait vous donner 267 00:11:29,810 --> 00:11:33,360 des privilèges d'administrateur ou root sur votre iPhone et vous permettent de faire à peu près 268 00:11:33,360 --> 00:11:34,170 ce que vous voulez. 269 00:11:34,170 --> 00:11:36,740 >> Et donc, il ya eu ce chat et à la souris fascinant entre Apple et 270 00:11:36,740 --> 00:11:39,920 le reste du monde en particulier celles qui, à l'instar de nombreuses entreprises, essayez de verrouiller 271 00:11:39,920 --> 00:11:43,220 leurs trucs bas de sorte que vous ne pouvez faire ce que bon leur intention. 272 00:11:43,220 --> 00:11:46,620 Mais grâce à des gens comme celui-ci et leur compréhension de bas niveau 273 00:11:46,620 --> 00:11:50,580 détails et, dans ce cas, de programmation C et un grand nombre des constructions familières 274 00:11:50,580 --> 00:11:54,630 que nous avons commencé à jouer avec, vous êtes en mesure de tirer parti de la réalité 275 00:11:54,630 --> 00:11:59,050 matériel d'une manière bon vous semble et pas nécessairement une personne morale. 276 00:11:59,050 --> 00:12:01,360 Ainsi, par exemple, je n'ai aucune idée de ce que tout cela est fait. 277 00:12:01,360 --> 00:12:03,220 Mais GetVersion semble assez simple. 278 00:12:03,220 --> 00:12:05,480 Et on dirait que c'est une fonction que cette personne a écrit. 279 00:12:05,480 --> 00:12:09,240 Prenez une sorte de nombre entier comme argument, ne retourne rien, mais 280 00:12:09,240 --> 00:12:13,080 semble boucle avec une boucle for ici et une condition if, si la condition, 281 00:12:13,080 --> 00:12:15,620 casser, et en quelque sorte se rapporte aux numéros de version. 282 00:12:15,620 --> 00:12:16,700 Si nous défiler vers le bas - 283 00:12:16,700 --> 00:12:19,570 même si beaucoup de ces mots clés vont être nouvelle, et il ya une 284 00:12:19,570 --> 00:12:22,590 beaucoup de fonctions dans ici nous n'avons jamais vu et pourrait ne jamais voir plus 285 00:12:22,590 --> 00:12:23,830 Au cours du semestre - 286 00:12:23,830 --> 00:12:27,150 à la fin de la journée, il suit les mêmes règles et la logique que nous avons été 287 00:12:27,150 --> 00:12:28,760 jouer avec à ce jour. 288 00:12:28,760 --> 00:12:34,220 Donc, c'est beaucoup trop vieux pour craquer vos 3s 4s iPhone ou 5s, ou peu de temps ces jours-ci, 289 00:12:34,220 --> 00:12:37,320 mais je sais que tout cela est très bien tiré de ce monde que nous avons 290 00:12:37,320 --> 00:12:38,430 plongé dans. 291 00:12:38,430 --> 00:12:41,900 >> Donc, nous allons jeter un oeil à un exemple un peu plus simple. 292 00:12:41,900 --> 00:12:46,100 Celui-ci, juste pour se réchauffer avec un peu de syntaxe et aussi d'autres données 293 00:12:46,100 --> 00:12:49,240 type que nous avons parlé mais je n'ai pas vraiment vu en C. Il s'agit donc d'un 294 00:12:49,240 --> 00:12:51,680 fichier appelé positive1.c. 295 00:12:51,680 --> 00:12:55,120 Et par les commentaires au début, cela exige simplement que l'utilisateur de fournir un 296 00:12:55,120 --> 00:12:55,960 nombre positif. 297 00:12:55,960 --> 00:12:59,530 C'est donc un exemple d'une boucle do-while, ce qui est agréable pour l'utilisateur interactif 298 00:12:59,530 --> 00:13:01,980 programmes où vous devez indiquer à l'utilisateur de faire quelque chose. 299 00:13:01,980 --> 00:13:05,190 Et si elles ne coopèrent pas, vous criez sur eux ou de refuser leur entrée. 300 00:13:05,190 --> 00:13:11,610 Affaire au point, je vais faire des lignes 19 à 24, tant que l'utilisateur a 301 00:13:11,610 --> 00:13:14,310 ne m'a pas donné un nombre positif. 302 00:13:14,310 --> 00:13:20,400 Or, ce détail ici sur la ligne 18, pourquoi ai-je déclarer n-dessus cet ensemble 303 00:13:20,400 --> 00:13:24,490 construction en boucle plutôt que juste à côté de la ligne 22 où je 304 00:13:24,490 --> 00:13:26,880 se soucient réellement pour obtenir n? 305 00:13:26,880 --> 00:13:27,330 Ouais? 306 00:13:27,330 --> 00:13:27,780 [Inaudible] 307 00:13:27,780 --> 00:13:29,040 >> DAVID J. MALAN: Ouais, donc cette question de portée. 308 00:13:29,040 --> 00:13:30,850 Et en terme profane, qu'est-ce que la portée référence? 309 00:13:34,690 --> 00:13:36,610 Ouais? 310 00:13:36,610 --> 00:13:37,860 [Inaudible] 311 00:13:40,040 --> 00:13:41,105 DAVID J. MALAN: Pouvez-vous parler un peu plus fort? 312 00:13:41,105 --> 00:13:43,450 INTERLOCUTEUR 1: Où vous pouvez accéder à une variable particulière. 313 00:13:43,450 --> 00:13:45,170 DAVID J. MALAN: Parfait. 314 00:13:45,170 --> 00:13:47,360 Où vous pouvez accéder à une variable particulière. 315 00:13:47,360 --> 00:13:50,400 Et généralement, la règle d'or à ce jour est que la portée de certaines 316 00:13:50,400 --> 00:13:55,860 variable est définie par les accolades les plus récentes bouclés que vous avez vu. 317 00:13:55,860 --> 00:14:02,010 Et dans ce cas, si j'ai fait l'erreur de déclarer n sur la ligne 22, 318 00:14:02,010 --> 00:14:03,010 cette ligne pourrait fonctionner. 319 00:14:03,010 --> 00:14:10,990 Je voudrais obtenir un int, et je le mis dans cette variable n dans la ligne 22. 320 00:14:10,990 --> 00:14:16,900 Mais quelle ligne de code devrait maintenant aucune idée de ce dont je parle? 321 00:14:16,900 --> 00:14:22,650 Donc, 25 ans, et il s'avère que 24, aussi, parce que dans ce cas, elle ne relève pas 322 00:14:22,650 --> 00:14:23,610 des accolades. 323 00:14:23,610 --> 00:14:27,280 Donc, juste un peu d'une nuisance, mais très facile à régler en déclarant simplement 324 00:14:27,280 --> 00:14:30,140 l'extérieur variable de la fonction elle-même. 325 00:14:30,140 --> 00:14:32,600 >> Maintenant nous allons voir plus tard aujourd'hui, vous pouvez aller plus loin. 326 00:14:32,600 --> 00:14:34,860 Et vous pourriez même obtenir un peu paresseux - 327 00:14:34,860 --> 00:14:37,320 et ce n'est pas à recommander, en général - 328 00:14:37,320 --> 00:14:42,260 mais vous pourriez même devenir paresseux et de mettre une variable au niveau mondial, pour ainsi dire, pas 329 00:14:42,260 --> 00:14:46,670 à l'intérieur d'une fonction, non pas à l'intérieur d'une boucle, mais dans le fichier lui-même, à l'extérieur 330 00:14:46,670 --> 00:14:49,600 de toutes les fonctions que vous avez écrit, comme je l'ai fait ici sur la ligne 15. 331 00:14:49,600 --> 00:14:51,160 Mais ce qui est généralement mal vu. 332 00:14:51,160 --> 00:14:55,680 Mais réalisez que c'est parfois une solution à d'autres problèmes, comme nous allons 333 00:14:55,680 --> 00:14:56,620 éventuellement voir. 334 00:14:56,620 --> 00:14:58,130 Donc pour l'instant, nous allons le laisser comme ça. 335 00:14:58,130 --> 00:15:01,030 Mais nous allons voir si nous pouvons réécrire cette juste de commencer à nous exprimer d'une 336 00:15:01,030 --> 00:15:01,990 peu différemment. 337 00:15:01,990 --> 00:15:05,330 >> Ainsi, ce programme, juste pour être clair, est positif1. 338 00:15:05,330 --> 00:15:11,810 Permettez-moi aller de l'avant ici et dans ma fenêtre de terminal font positif1, Entrée. 339 00:15:11,810 --> 00:15:12,740 Compile, d'accord. 340 00:15:12,740 --> 00:15:14,910 Je vais courir positif1, appuyez sur Entrée. 341 00:15:14,910 --> 00:15:16,820 J'exige que vous me donnez un entier positif. 342 00:15:16,820 --> 00:15:18,260 Je dirai -1. 343 00:15:18,260 --> 00:15:18,910 Cela n'a pas fonctionné. 344 00:15:18,910 --> 00:15:22,150 0, 99, qui semble fonctionner. 345 00:15:22,150 --> 00:15:23,570 Peut-être pas le test le plus rigoureux. 346 00:15:23,570 --> 00:15:26,480 Mais au moins, c'est un bon test de cohérence que nous sommes sur la bonne voie. 347 00:15:26,480 --> 00:15:29,240 Alors maintenant, laissez-moi aller de l'avant et d'ouvrir une deuxième version de cette. 348 00:15:29,240 --> 00:15:32,500 Et ce qui est différent déjà? 349 00:15:32,500 --> 00:15:35,140 Il met en œuvre la même chose. 350 00:15:35,140 --> 00:15:40,660 Mais ce qui saute le plus clairement différent cette fois? 351 00:15:40,660 --> 00:15:42,560 Ouais, donc ce bool en vert. 352 00:15:42,560 --> 00:15:45,980 Gedit a mis en évidence en vert ce mot-clé connue sous le nom bool, 353 00:15:45,980 --> 00:15:47,000 qui est un type de données. 354 00:15:47,000 --> 00:15:51,080 Elle ne vient pas intégré à toutes les versions de C. Vous devez inclure une 355 00:15:51,080 --> 00:15:52,010 bibliothèque spécifique. 356 00:15:52,010 --> 00:15:54,770 Dans notre cas, j'ai inclus la bibliothèque CS50 afin que nous 357 00:15:54,770 --> 00:15:56,460 avoir accès à bool. 358 00:15:56,460 --> 00:15:59,810 Mais à la ligne 18, nous semblons avoir une valeur booléenne appelée ici reconnaissants. 359 00:15:59,810 --> 00:16:01,040 Donc, j'aurais pu appeler cette chose. 360 00:16:01,040 --> 00:16:04,500 Mais je l'ai appelé reconnaissants juste pour type de transmettre une signification sémantique. 361 00:16:04,500 --> 00:16:07,930 Donc, d'abord sur la ligne 18, je suis apparemment pas reconnaissants parce que le 362 00:16:07,930 --> 00:16:12,150 Valeur booléenne reconnaissants est initialisée à false dans la ligne 18. 363 00:16:12,150 --> 00:16:16,890 Et puis, il semble que j'ai fait ici, dans les lignes 21 à 23, c'est que je viens de 364 00:16:16,890 --> 00:16:18,610 sorte de réécrire ma logique. 365 00:16:18,610 --> 00:16:21,020 Donc pas fonctionnellement différentes. 366 00:16:21,020 --> 00:16:26,940 Mais à la ligne 22 maintenant, je vérifie si l'int l'utilisateur a fourni est supérieure à 367 00:16:26,940 --> 00:16:31,120 0, alors j'ai simplement changer la valeur du reconnaissants à true. 368 00:16:31,120 --> 00:16:32,290 Et pourquoi dois-je faire cela? 369 00:16:32,290 --> 00:16:35,600 Parce que dans la ligne 25, apparemment, je vais vérifier une condition. 370 00:16:35,600 --> 00:16:39,380 Pour ce faire, tout en reconnaissant la boucle est fausse. 371 00:16:39,380 --> 00:16:43,610 >> Je propose donc comme une alternative à la version ci parce qu'il ya au moins une 372 00:16:43,610 --> 00:16:45,130 peu plus intuitive, peut-être. 373 00:16:45,130 --> 00:16:46,900 C'est un peu plus à la terre en anglais. 374 00:16:46,900 --> 00:16:51,710 Donc, procédez comme suit lorsque vous n'êtes pas heureux ou tout est faux reconnaissants. 375 00:16:51,710 --> 00:16:55,890 Et cette fois-ci, j'ai apparemment ne se soucient pas de se rappeler ce que l'utilisateur a tapé 376 00:16:55,890 --> 00:16:57,730 en raison préavis n'y a pas de n variables. 377 00:16:57,730 --> 00:16:58,650 Donc en fait, je - 378 00:16:58,650 --> 00:17:00,080 un petit mensonge là-bas. 379 00:17:00,080 --> 00:17:02,770 Fonctionnellement, le programme est un peu différent une fois que nous aller au fond des 380 00:17:02,770 --> 00:17:04,819 parce que je ne suis pas se souvenir de ce n est. 381 00:17:04,819 --> 00:17:09,579 Mais j'ai voulu montrer ici aussi que même si nous avons vu et getInt 382 00:17:09,579 --> 00:17:13,920 GetString utilisé sur le côté droit d'un signe égal à ce jour de sorte que 383 00:17:13,920 --> 00:17:17,160 nous nous souvenons de la valeur, techniquement, ce n'est pas strictement nécessaire. 384 00:17:17,160 --> 00:17:20,950 Si pour une raison quelconque vous n'avez tout simplement pas envie de sauvegarder la valeur, vous voulez juste 385 00:17:20,950 --> 00:17:25,710 pour vérifier la valeur, notez que nous pouvons simplement écrire ce que getInt ouvert 386 00:17:25,710 --> 00:17:27,000 parenthèse, parenthèse ouvrante. 387 00:17:27,000 --> 00:17:30,460 Cette fonction va retourner une valeur, comme nous l'avons dit. 388 00:17:30,460 --> 00:17:32,010 Il va vous redonner un int. 389 00:17:32,010 --> 00:17:36,450 Et si vous mentalement penser à ce qui se passe, quand je tape dans 99, getInt 390 00:17:36,450 --> 00:17:38,160 renvoie le nombre 99. 391 00:17:38,160 --> 00:17:41,330 Et donc conceptuellement, c'est comme si mon code étaient en fait cela. 392 00:17:41,330 --> 00:17:45,880 Donc, si 99 est en effet supérieur à 0, puis reconnaissants devient vraie. 393 00:17:45,880 --> 00:17:50,420 Puis la ligne 25 réalise ooh, c'est fini parce que je suis maintenant heureux. 394 00:17:50,420 --> 00:17:54,590 Et à la ligne 26, nous disons simplement, grâce pour l'entier positif, quelle qu'elle 395 00:17:54,590 --> 00:17:55,710 se trouvait. 396 00:17:55,710 --> 00:17:58,900 >> Maintenant, nous allons faire une légère sucre syntaxique ici, pour ainsi dire. 397 00:17:58,900 --> 00:18:02,990 Voyons voir si nous pouvons nettoyer cette ligne 25 avec cette variance troisième et dernière 398 00:18:02,990 --> 00:18:04,640 dans positive3. 399 00:18:04,640 --> 00:18:08,250 Donc, la différence n'est que maintenant est ce que la ligne de code? 400 00:18:11,930 --> 00:18:13,260 Ouais, donc 25. 401 00:18:13,260 --> 00:18:15,520 Et nous n'avons pas vraiment vu ce truc tout de suite. 402 00:18:15,520 --> 00:18:19,510 Mais nous avons vu le point d'exclamation, le lundi, ce qui dénote quoi? 403 00:18:19,510 --> 00:18:20,970 Si non, ou la négation. 404 00:18:20,970 --> 00:18:23,460 Alors, prenez une valeur booléenne et retourner sa valeur. 405 00:18:23,460 --> 00:18:24,390 Vrai devient faux. 406 00:18:24,390 --> 00:18:25,500 Faux devient vrai. 407 00:18:25,500 --> 00:18:28,910 Donc, je proposerais, c'est même un peu plus intuitive d'un mode de 408 00:18:28,910 --> 00:18:32,200 l'écriture du code parce que j'ai encore initialiser reconnaissant à faux. 409 00:18:32,200 --> 00:18:33,530 Je fais toujours ce qui suit. 410 00:18:33,530 --> 00:18:35,700 J'ai mis reconnaissants à true lorsque le moment sera venu. 411 00:18:35,700 --> 00:18:40,690 Mais maintenant vous pouvez vraiment juste traduire ce code verbalement gauche à droite, 412 00:18:40,690 --> 00:18:42,550 tout en ne reconnaissant. 413 00:18:42,550 --> 00:18:46,170 Parce bang, ou point d'exclamation, désigne la notion de pas, alors tout 414 00:18:46,170 --> 00:18:47,010 pas reconnaissants. 415 00:18:47,010 --> 00:18:49,740 >> Encore une fois, nous n'avons pas mis en place de nouveaux concepts en soi. 416 00:18:49,740 --> 00:18:53,230 Nous avons parlé de booléens en arrière quand nous avons joué avec Scratch. 417 00:18:53,230 --> 00:18:55,690 Mais maintenant, nous pouvons réaliser juste commencer à écrire notre code dans 418 00:18:55,690 --> 00:18:56,550 nombreuses façons différentes. 419 00:18:56,550 --> 00:19:00,010 Donc, en particulier dans pset1, si vous êtes en quelque sorte du mal à comprendre la façon de 420 00:19:00,010 --> 00:19:03,400 écrire un programme, les chances sont que vous avez de la chance car il va y avoir de 421 00:19:03,400 --> 00:19:05,780 certain nombre de solutions que vous pouvez arriver à. 422 00:19:05,780 --> 00:19:09,850 Par exemple, ce n'est que trois pour même le plus simple des programmes. 423 00:19:09,850 --> 00:19:10,180 Très bien. 424 00:19:10,180 --> 00:19:13,860 Et maintenant rappeler le lundi, nous sommes partis sur cette note avec les valeurs de retour. 425 00:19:13,860 --> 00:19:18,280 Donc, pour la toute première fois, nous avons écrit un programme qui n'a pas seulement principal, 426 00:19:18,280 --> 00:19:22,240 il a aussi sa propre fonction personnalisée que j'ai écrit ici. 427 00:19:22,240 --> 00:19:26,640 Donc, à la ligne 31 à 34, j'ai mis en place une fonction cube. 428 00:19:26,640 --> 00:19:27,800 Ce n'est pas complexe. 429 00:19:27,800 --> 00:19:29,830 C'est juste une fois par fois a, dans ce cas. 430 00:19:29,830 --> 00:19:34,920 Mais ce qui est important, c'est que je prends d'entrée sous la forme d'un et 431 00:19:34,920 --> 00:19:38,910 Je suis de retour de sortie sous la forme d'une fois par fois par. 432 00:19:38,910 --> 00:19:43,940 >> Alors maintenant, j'ai la possibilité, tout comme j'avais l'habitude de la fonction printf seul, de faire appel 433 00:19:43,940 --> 00:19:47,120 cette fonction en appelant la fonction cube. 434 00:19:47,120 --> 00:19:49,470 Et la fonction cube prend certaines entrées. 435 00:19:49,470 --> 00:19:52,030 Et la fonction cube retourne une sortie. 436 00:19:52,030 --> 00:19:56,660 Et si par contre, printf juste fait quelque chose. 437 00:19:56,660 --> 00:19:59,490 Il ne revint pas tout ce qui nous intéressait - même si, en tant que 438 00:19:59,490 --> 00:20:00,820 de côté, il ne retourne pas de valeur. 439 00:20:00,820 --> 00:20:02,650 Il vous suffit généralement l'ignorer. 440 00:20:02,650 --> 00:20:04,000 Printf juste fait quelque chose. 441 00:20:04,000 --> 00:20:06,220 Il a eu un effet secondaire de l'impression à l'écran. 442 00:20:06,220 --> 00:20:09,480 Par contre ici, nous avons la fonction cube, qui 443 00:20:09,480 --> 00:20:11,400 renvoie en fait quelque chose. 444 00:20:11,400 --> 00:20:12,960 >> Donc, ce qui est généralement - 445 00:20:12,960 --> 00:20:15,260 pour ceux qui connaissent ça, c'est une idée assez simple. 446 00:20:15,260 --> 00:20:18,460 Mais pour ceux qui sont moins familiers avec cette idée de passer en intrants et d'obtenir 447 00:20:18,460 --> 00:20:21,700 sorties arrière, essayons quelque chose de simple juste super. 448 00:20:21,700 --> 00:20:25,180 Quelqu'un est-il à l'aise de monter sur scène en quelques mots? 449 00:20:25,180 --> 00:20:27,460 Vous devez être à l'aise avec une caméra sur vous, aussi. 450 00:20:27,460 --> 00:20:27,640 Ouais. 451 00:20:27,640 --> 00:20:28,610 Ok, quel est ton nom? 452 00:20:28,610 --> 00:20:29,020 KEN: Ken. 453 00:20:29,020 --> 00:20:29,420 DAVID J. MALAN: Ken. 454 00:20:29,420 --> 00:20:29,810 Très bien, Ken. 455 00:20:29,810 --> 00:20:31,060 Venez sur place. 456 00:20:31,060 --> 00:20:34,660 Ainsi, Ken va être une fonction en quelque sorte ici. 457 00:20:34,660 --> 00:20:35,760 Et nous allons aller de l'avant et de le faire. 458 00:20:35,760 --> 00:20:38,790 Prenons un peu de fantaisie. 459 00:20:38,790 --> 00:20:39,770 Enchanté de faire votre connaissance. 460 00:20:39,770 --> 00:20:41,010 Bienvenue sur scène. 461 00:20:41,010 --> 00:20:41,980 Très bien. 462 00:20:41,980 --> 00:20:45,590 Frappons ce bouton ici. 463 00:20:45,590 --> 00:20:46,420 Très bien. 464 00:20:46,420 --> 00:20:49,490 Vous avez donc ici un tableau moderne. 465 00:20:49,490 --> 00:20:53,050 Et ce que je suis est la fonction principale, par exemple. 466 00:20:53,050 --> 00:20:55,990 Et je n'ai pas un iPad dans ma main. 467 00:20:55,990 --> 00:20:59,000 Je ne me souviens pas vraiment comment - et, en fait, ne peut pas dire cela. 468 00:20:59,000 --> 00:21:02,200 Je n'ai pas vraiment de bonne écriture. 469 00:21:02,200 --> 00:21:05,260 Et par conséquent, je veux que vous imprimer quelque chose sur l'écran pour moi. 470 00:21:05,260 --> 00:21:07,470 >> Je suis donc être le programme principal. 471 00:21:07,470 --> 00:21:15,060 Et je vais vous dire ceci en l'écrivant dans mon poulet et aux rayures 472 00:21:15,060 --> 00:21:16,600 puis en passant vous une entrée. 473 00:21:16,600 --> 00:21:20,000 Donc, aussi stupide que cet exercice est, la notion de fonction et d'appeler un 474 00:21:20,000 --> 00:21:22,260 la fonction et le retour d'une fonction se résume à cela. 475 00:21:22,260 --> 00:21:23,120 Je suis principale. 476 00:21:23,120 --> 00:21:26,270 Je viens d'écrire printf ("quelque chose") sur l'écran. 477 00:21:26,270 --> 00:21:27,470 Je l'exécution de ce programme. 478 00:21:27,470 --> 00:21:30,900 Et dès que se printf appelée, elle prend un argument - ou un paramètre, 479 00:21:30,900 --> 00:21:31,660 parfois - 480 00:21:31,660 --> 00:21:32,780 entre guillemets. 481 00:21:32,780 --> 00:21:33,960 Voici cet argument. 482 00:21:33,960 --> 00:21:35,740 Je suis en train de passer à Ken. 483 00:21:35,740 --> 00:21:39,390 Maintenant, il est une boîte noire écrit un certain nombre d'années qui, apparemment, 484 00:21:39,390 --> 00:21:41,070 ne sait imprimer des choses sur l'écran. 485 00:21:41,070 --> 00:21:42,320 >> Donc, exécuter. 486 00:21:48,842 --> 00:21:49,900 Ce n'est pas mal. 487 00:21:49,900 --> 00:21:50,890 Donc, très bon. 488 00:21:50,890 --> 00:21:52,900 Alors maintenant, Ken se fait exécuter. 489 00:21:52,900 --> 00:21:55,810 At-il besoin pour me remettre quelque chose en retour? 490 00:21:55,810 --> 00:21:57,240 Donc pas que nous avons vu jusqu'à présent. 491 00:21:57,240 --> 00:21:59,230 Encore une fois, ne fait printf retourner un nombre. 492 00:21:59,230 --> 00:22:01,640 Mais nous allons ignorer pour l'instant parce que nous ne l'avons jamais utilisé. 493 00:22:01,640 --> 00:22:03,400 Donc, c'est tout pour Ken. 494 00:22:03,400 --> 00:22:06,650 Et maintenant principal revient à exécuter - 495 00:22:06,650 --> 00:22:09,630 principal prend le contrôle du programme à nouveau parce que cette ligne de code, 496 00:22:09,630 --> 00:22:11,010 printf, se fait exécuter. 497 00:22:11,010 --> 00:22:13,890 Et nous allons sur notre façon quel que soit l'exécution d'autres lignes sont là. 498 00:22:13,890 --> 00:22:14,130 >> Très bien. 499 00:22:14,130 --> 00:22:17,080 Alors maintenant, nous allons essayer un exemple légèrement différent. 500 00:22:17,080 --> 00:22:22,430 Et cette fois-là, nous allons d'abord effacer l'écran ici. 501 00:22:22,430 --> 00:22:24,670 Et cette fois, nous ferons la fonction de cubage. 502 00:22:24,670 --> 00:22:27,350 Mais cette fois, je m'attends à une valeur de sortie. 503 00:22:27,350 --> 00:22:28,630 Donc, nous allons aller de l'avant et de le faire. 504 00:22:28,630 --> 00:22:35,680 Alors maintenant, j'ai une ligne de code qui dit que x = cube (x). 505 00:22:35,680 --> 00:22:36,930 Donc en fait let's - 506 00:22:41,450 --> 00:22:43,940 la ligne de code, rappel, ressemble à ceci. 507 00:22:43,940 --> 00:22:45,960 x cube = (x). 508 00:22:45,960 --> 00:22:48,100 Alors, comment est-ce d'aller travailler? 509 00:22:48,100 --> 00:22:50,820 Alors allons-y et donnez-vous un écran blanc à nouveau. 510 00:22:50,820 --> 00:22:55,000 Et je vais écrire maintenant vers le bas la valeur de x, qui à ce moment de 511 00:22:55,000 --> 00:23:01,080 temps se trouve être, disons, 2, garder les choses simples. 512 00:23:01,080 --> 00:23:04,890 J'ai donc écrit sur un bout de papier la valeur de 2, 513 00:23:04,890 --> 00:23:06,100 qui est ma valeur x. 514 00:23:06,100 --> 00:23:08,250 Je le remettre à Ken. 515 00:23:08,250 --> 00:23:09,200 KEN: Et je viens de rédiger la réponse? 516 00:23:09,200 --> 00:23:12,660 DAVID J. MALAN: Oui, nous allons simplement écrire la réponse. 517 00:23:12,660 --> 00:23:13,030 D'accord. 518 00:23:13,030 --> 00:23:16,280 Et maintenant, il doit retourner quelque chose. 519 00:23:16,280 --> 00:23:17,560 Donc - 520 00:23:17,560 --> 00:23:18,170 parfait. 521 00:23:18,170 --> 00:23:18,840 Belle segue. 522 00:23:18,840 --> 00:23:21,970 >> Alors maintenant, il me tend de nouveau la valeur de 8 dans ce cas. 523 00:23:21,970 --> 00:23:23,220 Et je fais quoi avec ça? 524 00:23:23,220 --> 00:23:26,130 Eh bien, effectivement, nous allons voir. 525 00:23:26,130 --> 00:23:26,640 Obtenir ce droit. 526 00:23:26,640 --> 00:23:27,880 Que vais-je faire avec elle? 527 00:23:27,880 --> 00:23:31,900 Maintenant, je vais prendre cette valeur et en fait le stocker dans les 528 00:23:31,900 --> 00:23:33,400 mêmes bits dans la mémoire. 529 00:23:33,400 --> 00:23:35,030 Mais remarquez, je suis un peu mal ici. 530 00:23:35,030 --> 00:23:38,280 Je suis un peu confus parce que là où puis-je réellement écrire la valeur de x? 531 00:23:38,280 --> 00:23:41,840 Parce que ce que je viens de faire est physiquement Ken main un morceau de papier 532 00:23:41,840 --> 00:23:44,400 qui a la valeur 2, qui est x. 533 00:23:44,400 --> 00:23:46,300 Et en effet, c'est précisément ce qui se passe. 534 00:23:46,300 --> 00:23:50,100 Ainsi, il s'avère que lorsque vous appelez une fonction, et que vous passez dans un argument 535 00:23:50,100 --> 00:23:54,130 comme "bonjour le monde" ou si vous passez un argument comme 2, en général, vous êtes 536 00:23:54,130 --> 00:23:56,720 passant dans une copie de cet argument. 537 00:23:56,720 --> 00:24:01,020 Et si juste que j'ai écrit ici le numéro 2 et le tendit à Ken, qui doit 538 00:24:01,020 --> 00:24:04,760 dire que j'ai encore une copie de la valeur 2 quelque part. 539 00:24:04,760 --> 00:24:08,140 Car en effet, maintenant que j'ai décidé de remonter la valeur 8, j'ai besoin de revenir en arrière 540 00:24:08,140 --> 00:24:12,010 RAM et fait écrire 8, où j'ai eu le numéro 2. 541 00:24:12,010 --> 00:24:15,720 >> Donc visuellement rappeler cette notion de passage dans la lettre 542 00:24:15,720 --> 00:24:16,730 une copie de la valeur. 543 00:24:16,730 --> 00:24:19,570 Ken fait sa chose, me remet quelque chose en retour - dans ce cas, 544 00:24:19,570 --> 00:24:20,820 une valeur comme 8. 545 00:24:20,820 --> 00:24:22,660 Et puis, je dois faire quelque chose avec cette valeur si je 546 00:24:22,660 --> 00:24:24,880 voulez le garder. 547 00:24:24,880 --> 00:24:29,470 Donc, tout cela va être trop familier avant longtemps. 548 00:24:29,470 --> 00:24:33,082 Merci beaucoup pour cette démo ici, Ken. 549 00:24:33,082 --> 00:24:34,820 Très bien. 550 00:24:34,820 --> 00:24:36,720 Très bien fait. 551 00:24:36,720 --> 00:24:40,610 Voyons donc comment cela se rapporte finalement à une partie de la fonction 552 00:24:40,610 --> 00:24:42,270 appeler que nous avons fait ici. 553 00:24:42,270 --> 00:24:47,610 Alors laissez-moi aller de l'avant et nous ramener à l'exemple de cubage ici. 554 00:24:47,610 --> 00:24:53,080 Et remarquez que si nous voulons vraiment commencer à prendre plus loin, nous allons 555 00:24:53,080 --> 00:24:57,050 d'avoir à tenir compte du fait que le nombre x qui a été adoptée en 556 00:24:57,050 --> 00:25:01,390 ici est différent de ce qui réellement passé à la fonction. 557 00:25:01,390 --> 00:25:03,940 Encore une fois, ce adoptée par copie va devenir très 558 00:25:03,940 --> 00:25:05,620 germane dans un instant. 559 00:25:05,620 --> 00:25:09,320 >> Donc, nous allons jeter un oeil à quelque chose qui ne fonctionne pas tout à droite encore. 560 00:25:09,320 --> 00:25:11,790 Je vais aller de l'avant et d'ouvrir un exemple poussette troisième, qui 561 00:25:11,790 --> 00:25:13,560 est vicié par la nature. 562 00:25:13,560 --> 00:25:18,070 Et ça s'appelle buggy3, et il met en œuvre une fonction de permutation. 563 00:25:18,070 --> 00:25:23,500 Nous avons donc ici une fonction principale qui a x et y arbitrairement initialisée à 564 00:25:23,500 --> 00:25:24,720 1 et 2, respectivement. 565 00:25:24,720 --> 00:25:27,590 Nous pourrions utiliser getInt, mais nous avons juste besoin d'un simple exercice. 566 00:25:27,590 --> 00:25:29,680 Il est donc codé en dur comme 1 et 2. 567 00:25:29,680 --> 00:25:35,330 Dans les lignes 21 et 22, nous semble-t-imprimer x et y, un par ligne. 568 00:25:35,330 --> 00:25:39,620 Puis, à la ligne 23, je prétends que je échanger ces valeurs, dot, dot, dot. 569 00:25:39,620 --> 00:25:43,030 J'ai apparemment appeler une fonction dans la ligne 24 appelée échange 570 00:25:43,030 --> 00:25:44,000 qui prend deux arguments. 571 00:25:44,000 --> 00:25:46,430 Il est tout à fait légitime pour les fonctions de prendre deux arguments. 572 00:25:46,430 --> 00:25:48,220 Nous avons vu printf le font déjà. 573 00:25:48,220 --> 00:25:50,370 Donc échange prend apparemment x et y. 574 00:25:50,370 --> 00:25:53,010 Et comme son nom l'indique, j'espère que ça va 575 00:25:53,010 --> 00:25:54,320 permuter ces deux valeurs. 576 00:25:54,320 --> 00:25:57,560 Alors, je demande à la ligne 25, permutées. 577 00:25:57,560 --> 00:26:01,570 Et réimprimer x et y dans l'hypothèse où 578 00:26:01,570 --> 00:26:02,830 ils ont en effet été échangés. 579 00:26:02,830 --> 00:26:04,370 Mais si je fait exécuter ce programme - 580 00:26:04,370 --> 00:26:06,060 Permettez-moi d'ouvrir une fenêtre de terminal. 581 00:26:06,060 --> 00:26:07,750 Permettez-moi de faire buggy3. 582 00:26:07,750 --> 00:26:09,970 Comme son nom l'indique, ce ne va pas bien finir. 583 00:26:09,970 --> 00:26:14,690 Parce que quand je la touche Entrée, vous remarquerez que x est 1. 584 00:26:14,690 --> 00:26:15,720 y est égal à 2. 585 00:26:15,720 --> 00:26:19,160 Et pourtant, à la fin du programme, ils sont toujours, en fait, la même chose. 586 00:26:19,160 --> 00:26:22,760 >> Donc, fondée sur la démonstration tout à l'heure avec Ken, ce qui se passe réellement? 587 00:26:22,760 --> 00:26:24,660 Eh bien, nous allons plonger dans cette fonction d'échange. 588 00:26:24,660 --> 00:26:25,800 C'est super court. 589 00:26:25,800 --> 00:26:28,020 C'est seulement quelques lignes de code long. 590 00:26:28,020 --> 00:26:32,810 Mais quel est le problème fondamental basé sur la simple histoire a dit à 591 00:26:32,810 --> 00:26:34,270 ici avec Ken? 592 00:26:34,270 --> 00:26:36,115 Pourquoi est-échange cassé? 593 00:26:36,115 --> 00:26:37,365 [Inaudible] 594 00:26:39,840 --> 00:26:40,460 Exactement. 595 00:26:40,460 --> 00:26:43,610 Nous sommes donc les stocker dans une copie, et non la variable elle-même. 596 00:26:43,610 --> 00:26:46,810 En d'autres termes, l'échange prend deux arguments apparemment, un int. 597 00:26:46,810 --> 00:26:49,370 Et il est arbitrairement appelé a et b. 598 00:26:49,370 --> 00:26:54,430 Et ici, je suis passé en x et y, qui sont respectivement 1 et 2. 599 00:26:54,430 --> 00:26:56,580 Mais je ne suis pas littéralement passer en x. 600 00:26:56,580 --> 00:26:58,410 Je ne suis pas littéralement le passage en y. 601 00:26:58,410 --> 00:27:01,230 Je passe une copie de x et de y une copie. 602 00:27:01,230 --> 00:27:05,180 C'est comme presque comme si vous avez copié et collé dans permuter les valeurs que 603 00:27:05,180 --> 00:27:07,440 vous voulez qu'il fait manipuler. 604 00:27:07,440 --> 00:27:11,970 Donc, si c'est le cas, lorsque moi, le programme, lancer l'exécution 605 00:27:11,970 --> 00:27:14,140 ligne 35, puis 36 - 606 00:27:14,140 --> 00:27:17,740 quand j'arrive à la ligne 37, à ce stade de l'histoire, quelle est la valeur de a? 607 00:27:20,740 --> 00:27:24,850 À ce stade de l'histoire, la ligne 37, quelle est la valeur d'un en ce moment? 608 00:27:24,850 --> 00:27:25,980 Donc, il devrait juste être 1. 609 00:27:25,980 --> 00:27:26,170 Pas vrai? 610 00:27:26,170 --> 00:27:29,100 Parce que x a été adoptée en tant que premier argument. 611 00:27:29,100 --> 00:27:33,150 Et cette fonction, il suffit arbitrairement appelle son premier argument, un. 612 00:27:33,150 --> 00:27:35,130 Est même y, le second argument. 613 00:27:35,130 --> 00:27:37,930 Et c'est juste arbitrairement appeler le second argument b. 614 00:27:37,930 --> 00:27:40,510 >> Maintenant, cette dichotomie est en fait assez simplement expliqué. 615 00:27:40,510 --> 00:27:40,880 Pensez-y. 616 00:27:40,880 --> 00:27:42,980 Aucun d'entre nous ont rencontré la personne qui a écrit printf. 617 00:27:42,980 --> 00:27:49,880 Alors certes, il ou elle n'a aucune idée de ce que nos variables 30 ans plus tard vont 618 00:27:49,880 --> 00:27:50,710 à appeler. 619 00:27:50,710 --> 00:27:55,110 Donc il doit y avoir une distinction entre ce que vous appelez des variables dans 620 00:27:55,110 --> 00:27:59,960 fonctions que vous écrivez et ce que vous appelez des variables dans les fonctions que vous êtes 621 00:27:59,960 --> 00:28:01,770 appelant ou l'utilisation. 622 00:28:01,770 --> 00:28:05,120 Donc, en d'autres termes, j'ai écrit mes variables comme x et y. 623 00:28:05,120 --> 00:28:08,060 Mais si quelqu'un d'autre avait écrit la fonction de permutation, il ou elle a certainement 624 00:28:08,060 --> 00:28:10,480 ne sais pas ce que mes variables vont être appelés. 625 00:28:10,480 --> 00:28:13,850 Alors rends compte que c'est pourquoi vous avez cette dualité de noms. 626 00:28:13,850 --> 00:28:16,800 Techniquement, je pourrais faire ça par hasard. 627 00:28:16,800 --> 00:28:19,750 Mais ils seraient encore passé en autant d'exemplaires. 628 00:28:19,750 --> 00:28:22,940 Il serait tout simplement une pure coïncidence si esthétiquement que la personne qui a écrit 629 00:28:22,940 --> 00:28:25,590 échange avait utilisé les mêmes noms. 630 00:28:25,590 --> 00:28:25,930 >> Très bien. 631 00:28:25,930 --> 00:28:29,010 Donc, à ce moment de l'histoire, la ligne 37, a est 1. 632 00:28:29,010 --> 00:28:30,410 b est égal à 2. 633 00:28:30,410 --> 00:28:32,040 Et maintenant, je passe à les échanger. 634 00:28:32,040 --> 00:28:34,730 Eh bien tout d'abord, permettez-moi de réellement faire beaucoup plus simplement. 635 00:28:34,730 --> 00:28:36,500 Je ne sais pas ce que ces trois lignes de code ont été faites. 636 00:28:36,500 --> 00:28:37,370 Permettez-moi de le faire. 637 00:28:37,370 --> 00:28:38,850 b obtient un. 638 00:28:38,850 --> 00:28:40,170 b obtient un. 639 00:28:40,170 --> 00:28:41,450 Terminé. 640 00:28:41,450 --> 00:28:43,540 Pourquoi est-ce cassé, logiquement? 641 00:28:46,980 --> 00:28:48,590 C'est un peu la chose intuitive, non? 642 00:28:48,590 --> 00:28:50,640 Ainsi, un devient b. 643 00:28:50,640 --> 00:28:52,450 Et b devient un. 644 00:28:52,450 --> 00:28:55,410 Mais le problème est que dès que la ligne 37 est exécuté, quelle est la 645 00:28:55,410 --> 00:28:58,170 valeur de a et b? 646 00:28:58,170 --> 00:28:59,070 Le même, 1. 647 00:28:59,070 --> 00:29:03,460 Parce que vous avez mis à mal, pour ainsi dire, tu as changé b pour égaler un. 648 00:29:03,460 --> 00:29:06,000 Donc, une fois la ligne 37 est exécutée, c'est très bien. 649 00:29:06,000 --> 00:29:09,940 Vous avez maintenant deux exemplaires du numéro 1 à l'intérieur de cette fonction. 650 00:29:09,940 --> 00:29:14,720 Alors quand vous dites dans la ligne 38, un obtient b, eh bien, vous êtes un peu foutu. 651 00:29:14,720 --> 00:29:17,370 Parce que vous êtes juste attribuant 1 à 1. 652 00:29:17,370 --> 00:29:20,400 Vous avez un peu perdu la valeur que vous souciait. 653 00:29:20,400 --> 00:29:22,910 >> Ainsi, dans la version originale de ce fait, notez ce que j'ai fait. 654 00:29:22,910 --> 00:29:26,620 J'ai plutôt eu une troisième ligne de code qui ressemble à ceci. 655 00:29:26,620 --> 00:29:29,910 Je déclare une variable temporaire - tmp est un nom très commun 656 00:29:29,910 --> 00:29:31,240 pour une variable temporaire. 657 00:29:31,240 --> 00:29:34,280 C'est un int car elle doit correspondre à ce que je veux faire une copie d'. 658 00:29:34,280 --> 00:29:39,720 Je stocker une copie d'un intérieur de tmp. Donc, une fois la ligne 37 a été exécutée, 659 00:29:39,720 --> 00:29:41,390 la valeur de a est - 660 00:29:41,390 --> 00:29:42,970 santé mentale vérification rapide - 661 00:29:42,970 --> 00:29:43,460 1. 662 00:29:43,460 --> 00:29:45,780 La valeur de b est 2. 663 00:29:45,780 --> 00:29:48,470 Et la valeur de tmp est aussi 1. 664 00:29:48,470 --> 00:29:51,470 Alors maintenant, je exécuter la ligne 38. 665 00:29:51,470 --> 00:29:57,180 Donc, une fois la ligne 38 exécute, a prend la valeur de b. 666 00:29:57,180 --> 00:29:58,510 Et b est 2. 667 00:29:58,510 --> 00:30:00,500 Ainsi, un qui passe à 2. 668 00:30:00,500 --> 00:30:03,110 Donc, à ce moment de l'histoire, a est 2, b est 2, 669 00:30:03,110 --> 00:30:05,130 et tmp est 1. 670 00:30:05,130 --> 00:30:09,330 Alors maintenant, en toute logique, nous pouvons juste valeur tmp plop a en b. 671 00:30:09,330 --> 00:30:10,690 Et c'est fait. 672 00:30:10,690 --> 00:30:12,170 >> Donc, nous avons résolu ce problème. 673 00:30:12,170 --> 00:30:16,040 Malheureusement, quand je lance ce programme sous cette forme, il ne fait pas échanger 674 00:30:16,040 --> 00:30:17,700 toutes les valeurs. 675 00:30:17,700 --> 00:30:18,950 Mais pour être clair, pourquoi? 676 00:30:23,420 --> 00:30:26,310 J'ai corrigé le problème logique de tout à l'heure. 677 00:30:26,310 --> 00:30:31,150 Mais encore une fois, si je lance ce programme, x et y restent inchangés à la fin de 678 00:30:31,150 --> 00:30:33,834 exécution du programme. 679 00:30:33,834 --> 00:30:34,760 [Inaudible] 680 00:30:34,760 --> 00:30:36,030 DAVID J. MALAN: Donc, nous n'avons pas retourné quoi que ce soit. 681 00:30:36,030 --> 00:30:36,960 Donc, c'est vrai. 682 00:30:36,960 --> 00:30:39,880 Mais il s'avère qu'il ya un petit problème ici parce que jusqu'à présent, le 683 00:30:39,880 --> 00:30:42,460 seule chose que nous avons été en mesure de revenir, c'est une chose. 684 00:30:42,460 --> 00:30:46,540 Et il s'agit d'une restriction de C. Vous ne pouvez retourner vraiment une valeur, 685 00:30:46,540 --> 00:30:48,970 dans ce cas, je suis un peu coincé ici 686 00:30:48,970 --> 00:30:51,805 parce que je pouvais retourner la nouvelle valeur de x ou je pourrais retourner le 687 00:30:51,805 --> 00:30:53,160 nouvelle valeur de y. 688 00:30:53,160 --> 00:30:54,330 Mais je veux aussi revenir. 689 00:30:54,330 --> 00:30:58,010 Donc, le retour n'est pas la solution simple ici. 690 00:30:58,010 --> 00:30:59,770 Mais le problème est fondamentalement pourquoi? 691 00:30:59,770 --> 00:31:03,270 Qu'avons-nous fait échangé? 692 00:31:03,270 --> 00:31:04,010 a et b. 693 00:31:04,010 --> 00:31:07,670 Mais a et b sont des copies de x et de y, ce qui signifie que nous venons de faire tout cela 694 00:31:07,670 --> 00:31:10,080 travailler - nous venons de passer comme trois minutes à parler de l'échange 695 00:31:10,080 --> 00:31:11,680 fonction et chacune de ces trois variables. 696 00:31:11,680 --> 00:31:15,090 Et c'est très bien, parfaitement correct dans l'isolement. 697 00:31:15,090 --> 00:31:20,230 Mais une portée et b n'est que dans ces lignes ici. 698 00:31:20,230 --> 00:31:24,130 Ainsi, tout comme une boucle for, si vous déclarez un entier i pour l'intérieur de la 699 00:31:24,130 --> 00:31:27,400 boucle - de même, si vous êtes à l'intérieur déclarant a et b d'une fonction qui 700 00:31:27,400 --> 00:31:30,550 vous avez écrit, ils sont seulement valide dans les de cette fonction. 701 00:31:30,550 --> 00:31:35,020 Ce qui signifie que dès que swap est fait exécuter et nous allons partir de la ligne 24 à 702 00:31:35,020 --> 00:31:38,380 ligne 25, x et y ont pas été changé. 703 00:31:38,380 --> 00:31:42,580 Vous venez de perdre un tas de troquer des copies de variables. 704 00:31:42,580 --> 00:31:46,490 >> Ainsi, il s'avère que la solution à cette question est effectivement non évidente. 705 00:31:46,490 --> 00:31:49,210 Ce n'est pas tout à fait suffisant pour renvoyer des valeurs parce que nous pouvons 706 00:31:49,210 --> 00:31:50,320 seulement retourner une valeur. 707 00:31:50,320 --> 00:31:53,370 Et je veux vraiment échanger x et y dans le même temps. 708 00:31:53,370 --> 00:31:55,020 Donc, nous allons revenir à cela. 709 00:31:55,020 --> 00:31:58,770 Mais pour l'instant, se rendre compte que le problème provient fondamentalement du fait 710 00:31:58,770 --> 00:32:00,660 que a et b sont des copies. 711 00:32:00,660 --> 00:32:03,450 Et ils sont dans leur propre champ d'application. 712 00:32:03,450 --> 00:32:04,980 Eh bien, nous allons essayer de résoudre ce en quelque sorte. 713 00:32:04,980 --> 00:32:09,200 Permettez-moi de revenir en arrière en fait ici et d'ouvrir, disons, une quatrième variante 714 00:32:09,200 --> 00:32:11,170 De ce fait, buggy4. 715 00:32:11,170 --> 00:32:13,230 Et que dire de cela? 716 00:32:13,230 --> 00:32:16,690 Il s'agit d'un problème similaire mais plus simple à regarder avant de prendre un coup de poignard au 717 00:32:16,690 --> 00:32:17,530 le résoudre. 718 00:32:17,530 --> 00:32:19,440 Ce programme est appelé incrément. 719 00:32:19,440 --> 00:32:24,320 Et apparemment il initialise un entier x à 1 à la ligne 18. 720 00:32:24,320 --> 00:32:25,950 J'ai ensuite prétendre x est 1. 721 00:32:25,950 --> 00:32:28,020 J'ai ensuite réclamation incrémentation, point, point, point. 722 00:32:28,020 --> 00:32:29,460 J'appelle ensuite incrément. 723 00:32:29,460 --> 00:32:33,480 Mais ensuite, dans les lignes 22 et 23, je prétends qu'il a été incrémenté. 724 00:32:33,480 --> 00:32:37,780 Je prétends x est maintenant quel qu'il soit, 2 sans doute. 725 00:32:37,780 --> 00:32:39,770 >> Mais ce programme est bogué. 726 00:32:39,770 --> 00:32:41,020 Quel est le problème? 727 00:32:43,450 --> 00:32:44,418 Ouais? 728 00:32:44,418 --> 00:32:45,668 [Inaudible] 729 00:32:49,260 --> 00:32:49,850 DAVID J. MALAN: Exactement. 730 00:32:49,850 --> 00:32:52,430 Alors x est déclarée manifestement sur la ligne 18. 731 00:32:52,430 --> 00:32:54,410 C'est à l'intérieur des accolades principal. 732 00:32:54,410 --> 00:32:58,470 Donc, la réponse simple est que, eh bien, x existe ici. 733 00:32:58,470 --> 00:33:01,510 Il n'existe pas dans la ligne 32. 734 00:33:01,510 --> 00:33:03,710 Ainsi, ce programme fait même pas compiler. 735 00:33:03,710 --> 00:33:07,910 Le compilateur, quand j'ai essayer de compiler ce code, va me crier dessus 736 00:33:07,910 --> 00:33:13,190 sur certains identificateur non déclaré ou quelque chose à cet effet. 737 00:33:13,190 --> 00:33:13,870 En fait, nous allons essayer. 738 00:33:13,870 --> 00:33:15,235 C'est faire buggy4. 739 00:33:17,780 --> 00:33:18,190 Il est là. 740 00:33:18,190 --> 00:33:22,030 L'utilisation de x identificateur non déclaré dans la ligne 32. 741 00:33:22,030 --> 00:33:25,700 Et effectivement, nous allons être plus explicite ici aujourd'hui pour que ce soit utile dans 742 00:33:25,700 --> 00:33:27,140 les heures de bureau et à la maison. 743 00:33:27,140 --> 00:33:29,000 Notez que c'est un peu cryptique écrite. 744 00:33:29,000 --> 00:33:31,560 Mais le fait que Clang a hurlé à nous, en disant: 745 00:33:31,560 --> 00:33:36,970 buggy4.c: 32:5, est réellement utile. 746 00:33:36,970 --> 00:33:41,970 Cela signifie que l'erreur est sur la ligne 32, à cinq position de caractère. 747 00:33:41,970 --> 00:33:44,670 Donc, un, deux, trois, quatre, cinq. 748 00:33:44,670 --> 00:33:46,640 C'est, en fait, où est le problème. 749 00:33:46,640 --> 00:33:49,710 Et aussi garder à l'esprit aux heures de bureau et à la maison, j'ai de la chance ici. 750 00:33:49,710 --> 00:33:50,740 J'ai une erreur. 751 00:33:50,740 --> 00:33:52,660 Ça va être relativement facile à corriger. 752 00:33:52,660 --> 00:33:56,220 Mais si vous obtenez un écran tout plein de messages d'erreur écrasante, encore une fois, 753 00:33:56,220 --> 00:33:59,240 se rendre compte que la plus inférieure pourrait bien être le symptôme d' 754 00:33:59,240 --> 00:34:00,320 les plus hautes. 755 00:34:00,320 --> 00:34:03,560 Il faut donc toujours pourchasser vos bugs de haut en bas. 756 00:34:03,560 --> 00:34:06,720 Parce qu'il pourrait s'agir d'un effet en cascade qui vous suggère 757 00:34:06,720 --> 00:34:09,030 ont des problèmes de façon plus que vous avez réellement le faire. 758 00:34:09,030 --> 00:34:14,989 >> Alors, comment pouvons-nous résoudre ce problème si mon objectif est d'incrémenter x? 759 00:34:14,989 --> 00:34:15,370 Qu'est-ce que c'est? 760 00:34:15,370 --> 00:34:15,620 D'accord. 761 00:34:15,620 --> 00:34:16,679 Nous pouvons donc x planétaire. 762 00:34:16,679 --> 00:34:18,860 Prenons le raccourci que je garde tout à l'heure. 763 00:34:18,860 --> 00:34:20,550 Mais diable, nous avons juste besoin d'une solution rapide. 764 00:34:20,550 --> 00:34:23,949 Alors disons simplement int x ici. 765 00:34:23,949 --> 00:34:25,600 Cela fait x planétaire. 766 00:34:25,600 --> 00:34:28,460 Alors maintenant, principal a accès. 767 00:34:28,460 --> 00:34:31,780 Et l'incrément peut y avoir accès. 768 00:34:31,780 --> 00:34:33,860 Et laissez-moi aller de l'avant et de compiler ce moment. 769 00:34:33,860 --> 00:34:36,330 Assurez-buggy4, Entrée. 770 00:34:36,330 --> 00:34:37,440 Semble compiler maintenant. 771 00:34:37,440 --> 00:34:40,949 Lançons buggy4, et il semble réellement. 772 00:34:40,949 --> 00:34:42,780 Maintenant, c'est une de ces choses - 773 00:34:42,780 --> 00:34:45,870 faites ce que je dis, pas ce que je fais, comme je viens de faire ici. 774 00:34:45,870 --> 00:34:49,239 Parce qu'en général, nos programmes vont devenir beaucoup plus intéressant et 775 00:34:49,239 --> 00:34:50,440 beaucoup plus que cela. 776 00:34:50,440 --> 00:34:53,199 Et si votre solution aux problèmes de la vie est juste, euh, mettre tous les 777 00:34:53,199 --> 00:34:57,550 variables au début de votre fichier, faire très rapidement des programmes se 778 00:34:57,550 --> 00:34:59,700 horriblement difficile à gérer. 779 00:34:59,700 --> 00:35:02,050 Il devient plus difficile d'imaginer de nouveaux noms de variables. 780 00:35:02,050 --> 00:35:05,240 Il devient plus difficile de comprendre ce que la variable fait quoi. 781 00:35:05,240 --> 00:35:08,250 >> Et donc, en général, ce n'est pas une bonne solution. 782 00:35:08,250 --> 00:35:09,780 Donc, nous allons faire mieux. 783 00:35:09,780 --> 00:35:11,920 Nous ne voulons pas d'utiliser une variable globale ici. 784 00:35:11,920 --> 00:35:14,050 Je ne veux pour incrémenter x. 785 00:35:14,050 --> 00:35:16,050 Donc, je ne pouvais évidemment - 786 00:35:16,050 --> 00:35:18,450 à la fin de la journée, c'est un peu une histoire idiote car nous venons de le faire. 787 00:35:18,450 --> 00:35:22,050 Mais si je ne savais pas à propos de cet opérateur, ou je n'étais pas autorisé à 788 00:35:22,050 --> 00:35:27,700 le changer en principal lui-même, comment pourrais-je mettre en œuvre Ken ici, ce 789 00:35:27,700 --> 00:35:31,450 le temps n'est pas au cube, mais pour incrémenter? 790 00:35:31,450 --> 00:35:32,700 Comment puis-je changer cette chose ici? 791 00:35:32,700 --> 00:35:33,025 Ouais. 792 00:35:33,025 --> 00:35:34,275 [Inaudible] 793 00:35:37,430 --> 00:35:38,000 DAVID J. MALAN: Très bien. 794 00:35:38,000 --> 00:35:40,490 Alors, pourquoi ne puis-je pas passer dans x? 795 00:35:40,490 --> 00:35:44,390 Et puis, plutôt que de le retourner, pourquoi ne puis-je pas simplement faire return x + 1? 796 00:35:44,390 --> 00:35:46,370 Maintenant, les choses un couple plus avoir à changer ici. 797 00:35:46,370 --> 00:35:47,530 Je suis sur la bonne voie. 798 00:35:47,530 --> 00:35:48,910 Que dois-je tweak? 799 00:35:48,910 --> 00:35:49,470 Quelqu'un d'autre. 800 00:35:49,470 --> 00:35:49,882 Ouais? 801 00:35:49,882 --> 00:35:51,530 [Inaudible] 802 00:35:51,530 --> 00:35:53,520 DAVID J. MALAN: j'ai besoin de changer le type de retour de l'augmentation 803 00:35:53,520 --> 00:35:54,590 car il n'est pas annulée. 804 00:35:54,590 --> 00:35:56,650 Vide signifie rien n'est retourné. 805 00:35:56,650 --> 00:35:57,600 Mais de toute évidence, il est maintenant. 806 00:35:57,600 --> 00:36:01,280 Donc, cela doit changer en int d'être cohérent avec ce que 807 00:36:01,280 --> 00:36:02,580 Je suis en train de revenir. 808 00:36:02,580 --> 00:36:04,580 >> Maintenant, autre chose est encore buggé ici. 809 00:36:04,580 --> 00:36:04,982 Ouais? 810 00:36:04,982 --> 00:36:06,590 [Inaudible] 811 00:36:06,590 --> 00:36:07,630 DAVID J. MALAN: Donc j'ai besoin d'incrémenter x? 812 00:36:07,630 --> 00:36:10,336 [Inaudible] 813 00:36:10,336 --> 00:36:11,880 DAVID J. MALAN: Ah, donc j'ai besoin de passer x. 814 00:36:11,880 --> 00:36:13,300 J'ai donc besoin de le faire ici. 815 00:36:17,590 --> 00:36:19,690 Ainsi, le prototype, je dois changer cette place ici. 816 00:36:19,690 --> 00:36:21,290 Donc, ce doit être un entier. 817 00:36:21,290 --> 00:36:22,820 Cela doit devenir - 818 00:36:22,820 --> 00:36:23,670 hmm. 819 00:36:23,670 --> 00:36:24,710 En fait, j'ai un bug ici-bas. 820 00:36:24,710 --> 00:36:25,780 Fixons cette première. 821 00:36:25,780 --> 00:36:27,990 Que devrait-il être fait? 822 00:36:27,990 --> 00:36:29,330 Donc, il faut que ce soit quelque chose d'int. 823 00:36:29,330 --> 00:36:30,340 Il pourrait être x. 824 00:36:30,340 --> 00:36:33,120 Mais franchement, si vous commencez à appeler tous vos variables x, il va devenir 825 00:36:33,120 --> 00:36:35,250 de moins en moins claire qui est qui. 826 00:36:35,250 --> 00:36:38,210 Donc on va plutôt choisir arbitrairement une convention de nommage différent pour mon 827 00:36:38,210 --> 00:36:40,220 fonctions auxiliaires, les fonctions j'écris. 828 00:36:40,220 --> 00:36:41,100 Nous allons l'appeler un. 829 00:36:41,100 --> 00:36:44,500 Ou nous pourrions l'appeler - appelons-le even_number d'être encore plus explicite. 830 00:36:44,500 --> 00:36:47,610 Alors je dois retourner quelque soit le nombre est plus 1. 831 00:36:47,610 --> 00:36:49,720 Et maintenant, je dois changer quelque chose d'autre ici et un 832 00:36:49,720 --> 00:36:50,700 autre chose ici. 833 00:36:50,700 --> 00:36:54,150 Qu'est-ce que je dois changer sur la ligne 21 en premier? 834 00:36:54,150 --> 00:36:55,390 Je dois l'attribuer à x. 835 00:36:55,390 --> 00:36:57,480 Donc, je ne peux pas appeler x incrément. 836 00:36:57,480 --> 00:37:01,000 Je dois me rappeler la réponse en changeant la valeur de x sur 837 00:37:01,000 --> 00:37:02,020 le côté gauche. 838 00:37:02,020 --> 00:37:04,930 Et même si x est maintenant sur la gauche et la droite, c'est tout à fait bien, car 839 00:37:04,930 --> 00:37:08,370 le côté droit se exécuté en premier puis se fait flac dans la gauche 840 00:37:08,370 --> 00:37:10,240 chose à la main, x dans ce cas. 841 00:37:10,240 --> 00:37:11,900 Et puis enfin, il s'agit d'une solution facile maintenant. 842 00:37:11,900 --> 00:37:15,080 Cela devrait correspondre à ce que tout est en bas. 843 00:37:15,080 --> 00:37:17,120 Numéro Int. 844 00:37:17,120 --> 00:37:17,320 >> Très bien. 845 00:37:17,320 --> 00:37:20,290 Ainsi, tout un tas de changements pour une fonction vraiment stupide. 846 00:37:20,290 --> 00:37:24,250 Mais représentant de choses que nous allons de plus en plus envie de faire. 847 00:37:24,250 --> 00:37:25,490 Donc, assurez-buggy4. 848 00:37:25,490 --> 00:37:26,485 J'ai merdé quelque part. 849 00:37:26,485 --> 00:37:27,520 Oh mon Dieu. 850 00:37:27,520 --> 00:37:29,660 Cinq erreurs, comme, un programme de six lignes. 851 00:37:29,660 --> 00:37:36,500 Alors qu'est-ce qui ne va pas à la ligne 18, caractère 5? 852 00:37:36,500 --> 00:37:36,970 Très bien. 853 00:37:36,970 --> 00:37:39,330 Je dois donc déclarer cette int. 854 00:37:39,330 --> 00:37:39,630 Très bien. 855 00:37:39,630 --> 00:37:41,790 Voyons donc, tout un tas d'autres erreurs. 856 00:37:41,790 --> 00:37:42,230 Oh mon dieu. 857 00:37:42,230 --> 00:37:43,880 19, 18, 21. 858 00:37:43,880 --> 00:37:46,020 Mais encore une fois, nous allons simplement effacer l'écran - 859 00:37:46,020 --> 00:37:48,660 L commande ici - et re-run Clang. 860 00:37:48,660 --> 00:37:51,340 Ainsi, cinq problèmes est en fait celui-là. 861 00:37:51,340 --> 00:37:53,500 Alors maintenant, nous allons lancer buggy4, Entrée. 862 00:37:53,500 --> 00:37:54,150 Ouf. 863 00:37:54,150 --> 00:37:57,434 x est incrémenté correctement. 864 00:37:57,434 --> 00:37:58,420 >> Très bien. 865 00:37:58,420 --> 00:38:01,700 Vous avez des questions sur la façon d'incrémenter les numéros? 866 00:38:01,700 --> 00:38:02,896 Ouais? 867 00:38:02,896 --> 00:38:06,864 SPEAKER 2: Pourquoi est-ce que vous pouvez simplement changer x en nombre dans la variable 868 00:38:06,864 --> 00:38:08,860 nom et il saura ce que tu veux dire? 869 00:38:08,860 --> 00:38:09,600 DAVID J. MALAN: Bonne question. 870 00:38:09,600 --> 00:38:13,130 Comment est-ce que je peux juste changer x en nombre et le programme saura 871 00:38:13,130 --> 00:38:13,990 immédiatement? 872 00:38:13,990 --> 00:38:16,120 Encore une fois, penser que c'est cette abstraction. 873 00:38:16,120 --> 00:38:20,110 Donc, si je suis principale et Ken est incrémentale, franchement, je m'en fous 874 00:38:20,110 --> 00:38:21,540 ce que Ken appelle son iPad. 875 00:38:21,540 --> 00:38:25,350 Je me moque de ce qu'il appelle tout ce qui a à voir avec sa mise en œuvre 876 00:38:25,350 --> 00:38:26,550 de cette fonctionnalité. 877 00:38:26,550 --> 00:38:32,130 Il s'agit donc d'un détail d'implémentation que j'ai, main, ne 878 00:38:32,130 --> 00:38:33,010 à se soucier. 879 00:38:33,010 --> 00:38:37,440 Et donc il suffit de changer régulièrement l'intérieur de la fonction, le numéro ici 880 00:38:37,440 --> 00:38:41,340 et le nombre ici, c'est tout ce qu'il faut tant que je recompiler. 881 00:38:41,340 --> 00:38:43,820 C'est un peu comme si vous y pensez - beaucoup d'entre nous, ceux d'entre vous avec conducteur 882 00:38:43,820 --> 00:38:46,590 licences qui ont parcourus, ou si vous avez même poussé dans une voiture - 883 00:38:46,590 --> 00:38:50,710 plupart d'entre nous n'ont aucune idée de comment fonctionne une voiture sous le capot. 884 00:38:50,710 --> 00:38:54,710 Et littéralement, si vous ouvrez le capot, la plupart d'entre nous - moi y compris - 885 00:38:54,710 --> 00:38:56,580 ne vont pas vraiment ce que nous étudions. 886 00:38:56,580 --> 00:38:58,850 Un peu comme vous pourriez vous sentir avec des trucs comme ça maintenant. 887 00:38:58,850 --> 00:39:01,380 Mais nous n'avons pas vraiment à se soucier comment la voiture fonctionne. 888 00:39:01,380 --> 00:39:05,000 Nous n'avons pas se soucier de ce ensemble des bielles et des pistons et des câbles à l'intérieur de 889 00:39:05,000 --> 00:39:07,700 la voiture sont en train de faire. 890 00:39:07,700 --> 00:39:11,360 >> Donc, quelque chose comme ce que vous appelez le piston n'a pas d'importance 891 00:39:11,360 --> 00:39:11,920 ici, dans ce cas. 892 00:39:11,920 --> 00:39:12,490 Même idée. 893 00:39:12,490 --> 00:39:12,670 Ouais? 894 00:39:12,670 --> 00:39:13,920 [Inaudible] 895 00:39:25,250 --> 00:39:29,530 DAVID J. MALAN: S'il y avait plus d'utilisations du moment variable xa il ya, 896 00:39:29,530 --> 00:39:32,220 vous, le programmeur, aurait à les changer partout. 897 00:39:32,220 --> 00:39:35,230 Ou vous pouvez littéralement faire Fichier, Menu, puis sur Rechercher / Remplacer, 898 00:39:35,230 --> 00:39:36,270 quelque chose comme ça. 899 00:39:36,270 --> 00:39:40,110 Mais vous allez avoir à faire ces changements vous-même. 900 00:39:40,110 --> 00:39:41,200 Vous devez être cohérent. 901 00:39:41,200 --> 00:39:42,450 [Inaudible] 902 00:39:47,200 --> 00:39:48,960 DAVID J. MALAN: Un ordre particulier comme ici? 903 00:39:48,960 --> 00:39:52,660 Si c'était un autre numéro int? 904 00:39:52,660 --> 00:39:52,940 Ouais. 905 00:39:52,940 --> 00:39:56,430 Donc ordre importe quand vous appelez la fonction. 906 00:39:56,430 --> 00:40:00,350 Donc, si je devais appeler incrément ici avec quelque chose virgule quelque chose, 907 00:40:00,350 --> 00:40:01,400 il ya une correspondance directe. 908 00:40:01,400 --> 00:40:04,490 La première variable, quelque chose comme ça, on fait une copie de la première 909 00:40:04,490 --> 00:40:05,480 l'argument ici. 910 00:40:05,480 --> 00:40:07,280 Désolé, cela ne devrait pas être une parenthèse. 911 00:40:07,280 --> 00:40:09,300 Les lignes second argument allant à la seconde. 912 00:40:09,300 --> 00:40:11,220 >> Donc, l'ordre, oui, les questions. 913 00:40:11,220 --> 00:40:11,490 Très bien. 914 00:40:11,490 --> 00:40:13,360 Désolé j'ai pris un long chemin pour y arriver. 915 00:40:13,360 --> 00:40:14,610 D'autres questions? 916 00:40:16,460 --> 00:40:16,850 Très bien. 917 00:40:16,850 --> 00:40:20,300 Donc, nous allons voir si nous ne pouvons pas dresser un portrait de ce qui se passe réellement 918 00:40:20,300 --> 00:40:22,160 ici sous le capot, pour ainsi dire. 919 00:40:22,160 --> 00:40:26,310 Il s'agit donc d'un rectangle qui pourrait représenter la mémoire de votre ordinateur. 920 00:40:26,310 --> 00:40:31,240 Donc, même si vous n'avez aucune idée comment fonctionne la mémoire RAM ou comment fonctionne, au moins 921 00:40:31,240 --> 00:40:33,590 supposons que vous avez des bouquets de lui ces jours-ci. 922 00:40:33,590 --> 00:40:34,740 Vous avez mégaoctets de celui-ci. 923 00:40:34,740 --> 00:40:35,760 Vous avez gigaoctets de celui-ci. 924 00:40:35,760 --> 00:40:40,690 Et nous savons par semaine zéro qu'un octet est juste quoi? 925 00:40:40,690 --> 00:40:41,280 8 bits. 926 00:40:41,280 --> 00:40:42,730 D'accord, donc 8 zéros et de uns. 927 00:40:42,730 --> 00:40:46,300 Donc, si votre ordinateur dispose d'un Go de RAM, deux Go de RAM ces jours-ci, vous avez un 928 00:40:46,300 --> 00:40:54,450 milliard ou 2 milliards d'octets de mémoire, soit environ 8 milliards ou 16 milliards 929 00:40:54,450 --> 00:40:56,560 bits, à l'intérieur de votre ordinateur. 930 00:40:56,560 --> 00:40:59,710 Maintenant, contrairement à l'exemple de Willy peu laineux, ce n'est pas des particules magnétiques 931 00:40:59,710 --> 00:41:00,560 généralement plus. 932 00:41:00,560 --> 00:41:04,470 De plus en plus, dans les ordinateurs portables moins, c'est solid state drives, SSD, que 933 00:41:04,470 --> 00:41:05,560 n'ont tout simplement pas de pièces mobiles. 934 00:41:05,560 --> 00:41:06,710 C'est tout électronique. 935 00:41:06,710 --> 00:41:08,070 C'est toute l'électricité en fonction. 936 00:41:08,070 --> 00:41:12,360 Alors, pensez, même si, de ce rectangle représentant la juste un ou deux 937 00:41:12,360 --> 00:41:13,930 gigaoctets de mémoire que vous avez. 938 00:41:13,930 --> 00:41:15,500 >> Donc, c'est un morceau de mémoire. 939 00:41:15,500 --> 00:41:20,460 Maintenant, le monde de l'informatique a en quelque sorte morceaux cloisonnées de 940 00:41:20,460 --> 00:41:22,570 mémoire pour faire des choses différentes. 941 00:41:22,570 --> 00:41:25,930 Ainsi, par exemple, si c'est la RAM de votre ordinateur - comme le suggère le 942 00:41:25,930 --> 00:41:30,400 rectangle là - se trouve que, par convention, dans la partie supérieure de votre mémoire, de sorte 943 00:41:30,400 --> 00:41:33,170 de parler, c'est généralement ce que l'on appelle un segment de texte. 944 00:41:33,170 --> 00:41:35,910 Ce sont les zéros et ceux que vous avez réunies. 945 00:41:35,910 --> 00:41:39,040 Alors, quand nous avons regardé sous le capot ce qui est a.out, tous les 946 00:41:39,040 --> 00:41:40,360 les zéros et de uns - 947 00:41:40,360 --> 00:41:44,000 lorsque vous exécutez un programme, ces zéros et de uns sont chargés de votre disque dur 948 00:41:44,000 --> 00:41:46,290 lecteur dans quelque chose appelé RAM. 949 00:41:46,290 --> 00:41:48,950 Et dans la RAM, ils sont mis dans la partie supérieure. 950 00:41:48,950 --> 00:41:50,330 Maintenant, quant à lui, vous avez autre chose. 951 00:41:50,330 --> 00:41:53,060 Données initialisées, non initialisées. 952 00:41:53,060 --> 00:41:56,440 Ces deux andains de mémoire se référer à des variables globales, qui 953 00:41:56,440 --> 00:41:57,530 vous n'utilisez pas souvent. 954 00:41:57,530 --> 00:42:00,630 Mais parfois, si vous le faites, ils finissent là-bas aussi. 955 00:42:00,630 --> 00:42:01,620 Ensuite, il ya d'autres choses. 956 00:42:01,620 --> 00:42:04,130 Les variables d'environnement, que nous n'aborderons pas passer beaucoup de temps sur. 957 00:42:04,130 --> 00:42:06,120 Mais alors, de deux choses importantes qui reviendra tout au long de cette 958 00:42:06,120 --> 00:42:08,130 semestre, pile et le tas. 959 00:42:08,130 --> 00:42:12,280 >> Ainsi, la plupart de la mémoire de votre ordinateur est réservé lors de l'exécution d'un programme de 960 00:42:12,280 --> 00:42:14,880 quelque chose qui s'appelle la pile et quelque chose qui s'appelle le tas. 961 00:42:14,880 --> 00:42:16,940 Et nous n'allons pas parler de tas d'aujourd'hui, mais nous allons 962 00:42:16,940 --> 00:42:18,180 parler de la pile. 963 00:42:18,180 --> 00:42:22,910 Et la pile est destinée à évoquer l'aspect visuel de la salle à manger comme 964 00:42:22,910 --> 00:42:26,120 plateaux-repas en Maison Mather, ou partout où vous arrive d'être, où l' 965 00:42:26,120 --> 00:42:27,810 réfectoire du personnel les nettoyer tous les jours. 966 00:42:27,810 --> 00:42:30,180 Ils les comparent à partir du sol sur place. 967 00:42:30,180 --> 00:42:33,800 Et même dans la mémoire, il ya cette idée de mettre quelque chose sur un 968 00:42:33,800 --> 00:42:36,740 empiler, mettre quelque chose sur une pile, mettre quelque chose sur une pile. 969 00:42:36,740 --> 00:42:38,000 Et qu'entendons-nous par là? 970 00:42:38,000 --> 00:42:41,430 Eh bien, nous allons effectuer un zoom avant sur juste la moitié inférieure de cette image, de votre ordinateur 971 00:42:41,430 --> 00:42:43,990 RAM, de proposer ce qui suit. 972 00:42:43,990 --> 00:42:48,300 Il s'avère que lorsque vous exécutez un programme comme a.out ou bonjour, quelle que soit 973 00:42:48,300 --> 00:42:49,920 ce programme est que vous avez écrit, 974 00:42:49,920 --> 00:42:53,030 de plus, ces zéros et de uns sont chargés à partir de votre disque dur - ce qui est 975 00:42:53,030 --> 00:42:56,190 stockage à long terme, y reste même lorsque vous tirez sur la fiche - 976 00:42:56,190 --> 00:42:57,220 chargé dans la RAM. 977 00:42:57,220 --> 00:42:59,020 RAM est plus rapide que les disques durs. 978 00:42:59,020 --> 00:43:00,700 Il est plus petit que les disques durs. 979 00:43:00,700 --> 00:43:03,490 Mais c'est là que vivent des programmes alors que vous êtes les exécuter. 980 00:43:03,490 --> 00:43:06,380 >> Donc, vous double-cliquez sur un programme sur un Mac ou un PC - il est chargé de 981 00:43:06,380 --> 00:43:07,750 disque dur dans la RAM. 982 00:43:07,750 --> 00:43:11,760 Dès qu'il est chargé dans la mémoire vive, les zéros et de uns aller au sommet façon, l' 983 00:43:11,760 --> 00:43:13,130 dits segment de texte. 984 00:43:13,130 --> 00:43:17,040 Mais dès le début du programme en cours d'exécution en réalité, la principale 985 00:43:17,040 --> 00:43:18,140 fonction est appelée. 986 00:43:18,140 --> 00:43:21,070 Et principale, comme nous l'avons vu, a souvent des variables locales. 987 00:43:21,070 --> 00:43:24,560 Et il a les entiers et les chaînes de caractères et les caractères, etc. 988 00:43:24,560 --> 00:43:28,300 Donc, si votre programme que vous avez écrit ou le programme que vous avez 989 00:43:28,300 --> 00:43:33,680 double-cliqué utilisé des variables à l'intérieur de la principale, ils finissent à la 990 00:43:33,680 --> 00:43:37,020 bas de votre pile de la mémoire, pour ainsi dire. 991 00:43:37,020 --> 00:43:39,160 Maintenant, plus concrètement, qu'est-ce que cela signifie réellement? 992 00:43:39,160 --> 00:43:44,080 Cela signifie simplement que si nous allions à numéroter les choses - 993 00:43:44,080 --> 00:43:49,380 si nous allions au nombre des octets de RAM dans votre ordinateur, vous remarquerez que 994 00:43:49,380 --> 00:43:51,650 cela pourrait être numéro zéro octet. 995 00:43:51,650 --> 00:43:56,130 C'est peut-être l'octet numéro un, deux, trois, quatre, cinq, six, tous 996 00:43:56,130 --> 00:43:57,290 le chemin jusqu'à voulez - 997 00:43:57,290 --> 00:44:01,520 2 milliards seraient d'autant là-haut au sommet. 998 00:44:01,520 --> 00:44:05,960 Donc, en d'autres termes, lorsque nous parlons de la mémoire RAM ou en termes d'octets, il 999 00:44:05,960 --> 00:44:09,680 signifie simplement que quelqu'un a décidé de numéroter ce chacun des 1000 00:44:09,680 --> 00:44:11,110 ces morceaux de mémoire. 1001 00:44:11,110 --> 00:44:16,950 >> Alors, quand vous avez besoin de 32 bits pour un int, ou vous avez besoin de 8 bits pour un char, le cas 1002 00:44:16,950 --> 00:44:18,320 finissent-ils en mémoire? 1003 00:44:18,320 --> 00:44:20,650 Eh bien conceptuellement, ils ont juste se retrouver au bas de cette 1004 00:44:20,650 --> 00:44:21,780 chose qui s'appelle la pile. 1005 00:44:21,780 --> 00:44:25,670 Mais ce qui est intéressant c'est maintenant que principal appelle une fonction. 1006 00:44:25,670 --> 00:44:28,830 Supposons une fonction appelée foo, juste un nom arbitraire. 1007 00:44:28,830 --> 00:44:32,480 Qu'est-ce qui se passe est le principal se trouve au bas de cette pile de la mémoire. 1008 00:44:32,480 --> 00:44:35,630 Foo est maintenant mis sur le dessus de la principale dans la mémoire. 1009 00:44:35,630 --> 00:44:40,020 Ainsi, toutes les variables locales que foo a finir sorte de vue conceptuel ci-dessus 1010 00:44:40,020 --> 00:44:40,770 celles principale. 1011 00:44:40,770 --> 00:44:46,920 Si foo appelle une autre fonction appelée barre, ces variables se retrouvent ici. 1012 00:44:46,920 --> 00:44:49,790 Si la barre appelle autre chose, ici, ici, ici. 1013 00:44:49,790 --> 00:44:53,900 Donc ce qui est intéressant à propos de l'exécution d'un programme, c'est que tant que vous appelez des fonctions, 1014 00:44:53,900 --> 00:44:57,720 et que ces fonctions appeler des fonctions, et que ces fonctions appeler des fonctions, 1015 00:44:57,720 --> 00:45:00,980 vous construisez cette pile de fonctions en mémoire. 1016 00:45:00,980 --> 00:45:06,740 Et seulement une fois qu'une fonction retourne, vous commencez à obtenir que la mémoire en arrière. 1017 00:45:06,740 --> 00:45:11,190 Donc l'une des façons les plus faciles à exécuter de mémoire dans un programme informatique est de 1018 00:45:11,190 --> 00:45:14,170 écrire des fonctions qui ne retournent jamais. 1019 00:45:14,170 --> 00:45:16,650 >> Ainsi, par exemple, nous allons démontrer autant avec un 1020 00:45:16,650 --> 00:45:18,460 programme volontairement buggée. 1021 00:45:18,460 --> 00:45:24,690 Permettez-moi aller de l'avant et ne # include, int main (void). 1022 00:45:24,690 --> 00:45:31,270 Et je vais faire tout (2> 1), qui ne sera probablement jamais 1023 00:45:31,270 --> 00:45:33,370 changer sur nous. 1024 00:45:33,370 --> 00:45:37,720 Et laissez-moi aller de l'avant maintenant et faire printf. 1025 00:45:37,720 --> 00:45:39,950 En fait, ça va être moins intéressant visuellement. 1026 00:45:39,950 --> 00:45:40,460 Faisons-le. 1027 00:45:40,460 --> 00:45:44,840 Pour int (i = 0; i> 0). 1028 00:45:44,840 --> 00:45:49,740 Faisons de cette erreur, i + +. 1029 00:45:49,740 --> 00:45:51,150 Et il ne faut pas printf ici. 1030 00:45:51,150 --> 00:45:52,550 Voyons en pratique ce que je prêche. 1031 00:45:52,550 --> 00:45:54,090 Ayons une méthode ici. 1032 00:45:54,090 --> 00:46:00,860 Chœur vide, et nous dirons int i. 1033 00:46:00,860 --> 00:46:02,295 Et puis je vais vous dire, printf - 1034 00:46:04,871 --> 00:46:06,790 oh, nous allons rendre cela plus intéressant. 1035 00:46:06,790 --> 00:46:08,350 Nous allons effectivement pas imprimer quoi que ce soit. 1036 00:46:08,350 --> 00:46:10,530 Disons simplement le faire. 1037 00:46:10,530 --> 00:46:11,780 Chorus (i). 1038 00:46:16,630 --> 00:46:17,000 >> Très bien. 1039 00:46:17,000 --> 00:46:20,040 Donc, c'est buggé, car pourquoi? 1040 00:46:20,040 --> 00:46:22,850 Je fais ce que je vais en place parce que le programme ne fait rien 1041 00:46:22,850 --> 00:46:23,420 d'intérêt. 1042 00:46:23,420 --> 00:46:24,670 Mais ce n'est pas le but. 1043 00:46:24,670 --> 00:46:30,440 L'objectif est d'écrire un programme dont la fonction principale fait quoi, apparemment? 1044 00:46:30,440 --> 00:46:31,370 Appelez-même. 1045 00:46:31,370 --> 00:46:32,600 Et en fait, nous n'avons pas besoin de la boucle. 1046 00:46:32,600 --> 00:46:36,070 Nous allons simplifier ce juste pour ne pas perdre de vue la réalité 1047 00:46:36,070 --> 00:46:37,310 bug fondamentale. 1048 00:46:37,310 --> 00:46:39,200 Principaux appels chœur pour chanter quelques chœurs. 1049 00:46:39,200 --> 00:46:41,760 Ensuite, j'ai fait quelque chose de stupide, et j'ai eu choeur choeur appel parce que j'ai supposé 1050 00:46:41,760 --> 00:46:43,550 quelqu'un d'autre allait peut-être le mettre en œuvre. 1051 00:46:43,550 --> 00:46:45,960 Et maintenant, cela ne va pas encore à compiler. 1052 00:46:45,960 --> 00:46:48,340 Je dois faire quoi? 1053 00:46:48,340 --> 00:46:49,700 J'ai besoin du prototype, souvenez-vous. 1054 00:46:49,700 --> 00:46:55,520 J'ai donc besoin d'avoir ici chœur void (int i);. 1055 00:46:55,520 --> 00:46:57,470 >> Alors maintenant, si je descends ici - 1056 00:46:57,470 --> 00:46:59,030 en fait, nous allons utiliser la plus grande fenêtre. 1057 00:46:59,030 --> 00:47:01,670 Allons de l'avant et de faire chorus. 1058 00:47:01,670 --> 00:47:06,000 Allons de l'avant et de faire chorus. 1059 00:47:06,000 --> 00:47:08,302 Utilisez du déclarant non identifié i. 1060 00:47:08,302 --> 00:47:09,860 Oh, que c'était stupide. 1061 00:47:09,860 --> 00:47:11,020 Nous n'avons pas besoin de l'argument. 1062 00:47:11,020 --> 00:47:13,680 Disons simplement le faire. 1063 00:47:13,680 --> 00:47:14,550 Si seulement nous avions commencé de cette façon. 1064 00:47:14,550 --> 00:47:16,160 Il aurait été un programme beaucoup plus facile à écrire. 1065 00:47:16,160 --> 00:47:20,100 Donc là. 1066 00:47:20,100 --> 00:47:23,870 Maintenant, nous allons passer à ma fenêtre de terminal, re-run Clang. 1067 00:47:23,870 --> 00:47:26,900 Et nous y voilà. 1068 00:47:26,900 --> 00:47:28,020 Cela a été très rapide. 1069 00:47:28,020 --> 00:47:30,690 Qu'est-ce qui s'est passé en réalité, si? 1070 00:47:30,690 --> 00:47:33,430 Eh bien, maintenant, je vais ajouter la ligne d'impression, afin que nous puissions voir. 1071 00:47:33,430 --> 00:47:41,330 Alors laissez-moi vous dire printf, disons, que je suis ici. 1072 00:47:41,330 --> 00:47:43,470 Ok, pas de variables, nous allons le laisser comme ça. 1073 00:47:43,470 --> 00:47:44,860 Permettez-moi de faire exécuter à nouveau. 1074 00:47:44,860 --> 00:47:47,940 Permettez-moi de re-run chœur. 1075 00:47:47,940 --> 00:47:51,235 Et allez. 1076 00:47:53,880 --> 00:47:55,130 Continuez. 1077 00:47:57,630 --> 00:47:59,750 Soit dit en passant, pourquoi n'at-il pas écrasé encore? 1078 00:47:59,750 --> 00:48:02,050 L'erreur de segmentation qui s'est passé super vite qu'avant. 1079 00:48:02,050 --> 00:48:04,250 [Inaudible] 1080 00:48:04,250 --> 00:48:04,830 DAVID J. MALAN: Exactement. 1081 00:48:04,830 --> 00:48:06,350 Donc, il faut du temps pour imprimer. 1082 00:48:06,350 --> 00:48:08,370 Il prend juste plus de travail de la part de l'ordinateur. 1083 00:48:08,370 --> 00:48:09,550 Et ça y est. 1084 00:48:09,550 --> 00:48:10,620 Segmentation fault. 1085 00:48:10,620 --> 00:48:12,140 >> Donc remarqué à quel point des programmes rapides de fonctionner. 1086 00:48:12,140 --> 00:48:14,110 Si vous n'êtes pas l'impression de quelque chose, super rapide. 1087 00:48:14,110 --> 00:48:18,100 Mais nous avons toujours eu cette erreur de segmentation, car ce qui se passait? 1088 00:48:18,100 --> 00:48:21,310 Eh bien, si vous pensez à la façon dont la mémoire de votre ordinateur est exposé, ce 1089 00:48:21,310 --> 00:48:22,890 se trouve être principale. 1090 00:48:22,890 --> 00:48:23,800 Mais ici - 1091 00:48:23,800 --> 00:48:28,670 nous allons simplement appeler ce chœur, et appelons ce chœur. 1092 00:48:28,670 --> 00:48:33,420 Et maintenant, si je fais mon esthétique droite, ce n'est tout simplement dire chœur, 1093 00:48:33,420 --> 00:48:38,060 chorus, chorus, chorus, chorus, chorus, chorus, ad nauseam. 1094 00:48:38,060 --> 00:48:39,920 Et finalement, qu'est-ce qui va se passer? 1095 00:48:39,920 --> 00:48:46,690 Si le tableau d'ensemble est littéralement cela, ce qui se passe juste conceptuel? 1096 00:48:46,690 --> 00:48:48,320 Les dépassements de pile le tas. 1097 00:48:48,320 --> 00:48:52,400 Ou pire, il vous suffit de dépassement tout, y compris le segment de texte, ce qui est 1098 00:48:52,400 --> 00:48:54,530 les zéros et de uns qui représentent votre programme. 1099 00:48:54,530 --> 00:48:56,690 En bref, c'est tout simplement super, super-mauvaises. 1100 00:48:56,690 --> 00:48:56,860 Pas vrai? 1101 00:48:56,860 --> 00:48:58,620 Votre programme a échappé à tout contrôle. 1102 00:48:58,620 --> 00:49:02,840 Vous utilisez la mémoire beaucoup plus que vous aviez l'intention à cause d'un stupide 1103 00:49:02,840 --> 00:49:03,920 erreur, dans ce cas. 1104 00:49:03,920 --> 00:49:08,160 Ou dans ce cas, une fonction très délibérément fait elle-même appel. 1105 00:49:08,160 --> 00:49:09,210 Or, ce n'est pas mal du tout. 1106 00:49:09,210 --> 00:49:12,540 Fonctions elles-mêmes appel a fait une grande puissance 1107 00:49:12,540 --> 00:49:13,700 lorsque vous l'utilisez correctement. 1108 00:49:13,700 --> 00:49:15,650 Je ne l'ai pas utilisé correctement ici. 1109 00:49:15,650 --> 00:49:16,940 >> Donc, ce n'est pas mal du tout. 1110 00:49:16,940 --> 00:49:20,620 Mais le fait que je n'ai jamais vraiment m'empêcher d'appel est un droit fondamental 1111 00:49:20,620 --> 00:49:23,050 faiblesse ici de ce programme. 1112 00:49:23,050 --> 00:49:25,090 Alors, où allons-nous avec tout cela? 1113 00:49:25,090 --> 00:49:26,230 Eh bien, qu'est-ce qui se passe réellement? 1114 00:49:26,230 --> 00:49:30,010 Quand j'appelle la fonction d'incrémentation, comme nous le faisions dans ces exemples, 1115 00:49:30,010 --> 00:49:33,290 J'ai une valeur comme 1 que je passe po 1116 00:49:33,290 --> 00:49:35,820 Je passe une copie de la première. 1117 00:49:35,820 --> 00:49:37,080 Donc, ce qui suit se produit. 1118 00:49:37,080 --> 00:49:40,390 Alors allons-y dans l'exemple incrément. 1119 00:49:40,390 --> 00:49:44,230 Et ce gars juste ici. 1120 00:49:44,230 --> 00:49:46,800 Alors, voici ce qui se passe réellement. 1121 00:49:46,800 --> 00:49:50,770 Quand j'ai appelé incrément, et je passe en x, imagée ce qui est 1122 00:49:50,770 --> 00:49:53,660 qui se passe ici est la suivante - 1123 00:49:53,660 --> 00:50:00,240 si j'ai la valeur de 1 stockés ici, et j'ai effectivement appeler incrémentation, qui 1124 00:50:00,240 --> 00:50:02,680 est maintenant appelé chorus - 1125 00:50:02,680 --> 00:50:04,010 Ouais, c'est moi jetant ici. 1126 00:50:04,010 --> 00:50:06,750 Donc appelons cette augmentation. 1127 00:50:06,750 --> 00:50:09,420 Et nous ne savons pas ce que cette fonction suivante va être. 1128 00:50:09,420 --> 00:50:14,270 Alors qu'est-ce qui se passe réellement est ici quelque part dans le main, j'ai un morceau de 1129 00:50:14,270 --> 00:50:16,670 mémoire qui stocke le nombre 1. 1130 00:50:16,670 --> 00:50:19,730 Quand j'appelle incrément, j'utilise un autre morceau de la mémoire, mais maintenant je 1131 00:50:19,730 --> 00:50:20,840 avoir la copie du 1. 1132 00:50:20,840 --> 00:50:25,480 Quand je incrémenter cette valeur, cela devient 2 - horriblement écrit sur le 1133 00:50:25,480 --> 00:50:26,420 écran ici. 1134 00:50:26,420 --> 00:50:30,550 Mais alors, qu'est-ce qui se passe dès le retour incrément? 1135 00:50:30,550 --> 00:50:34,610 Cette mémoire est simplement remis au système d'exploitation, ce qui signifie que tous les 1136 00:50:34,610 --> 00:50:37,470 vous avez fait n'est rien d'utile. 1137 00:50:37,470 --> 00:50:43,460 Celui qui a été à l'origine dans principal est toujours bien là. 1138 00:50:43,460 --> 00:50:44,650 >> Alors, où allons-nous avec ça? 1139 00:50:44,650 --> 00:50:49,400 Eh bien, il s'avère que dans la mémoire que vous avez ce dos à dos séquence de 1140 00:50:49,400 --> 00:50:50,940 octets que vous pouvez mettre des trucs po 1141 00:50:50,940 --> 00:50:53,760 Et il se trouve que nous avons déjà vu quelque chose qui implique la mise 1142 00:50:53,760 --> 00:50:55,100 choses dos à dos à dos à dos. 1143 00:50:55,100 --> 00:51:00,170 Qu'est-ce qu'une chaîne, basée sur une semaine et maintenant deux semaines? 1144 00:51:00,170 --> 00:51:01,840 Donc, c'est juste une collection de caractères. 1145 00:51:01,840 --> 00:51:05,290 Ainsi, il s'avère, tout comme vous pouvez mettre des numéros en mémoire, vous pouvez même 1146 00:51:05,290 --> 00:51:06,900 mettre des caractères en mémoire. 1147 00:51:06,900 --> 00:51:09,810 Et une fois que nous commençons à mettre les caractères en mémoire dos à dos à dos à 1148 00:51:09,810 --> 00:51:12,800 en arrière, il s'avère que l'utilisation la plus simple des choses comme une boucle for ou 1149 00:51:12,800 --> 00:51:14,510 une boucle while, nous pouvons itérer - 1150 00:51:14,510 --> 00:51:17,130 de gauche à droite sur les caractères d'une chaîne - 1151 00:51:17,130 --> 00:51:20,720 et commencer à les masser en caractères totalement différents. 1152 00:51:20,720 --> 00:51:25,550 Un pourrait devenir B. B pourrait devenir C. Alors qu'en fin de compte, nous pouvons prendre une 1153 00:51:25,550 --> 00:51:28,830 Phrase en anglais qui fait réellement sens et convertir chacun de ces 1154 00:51:28,830 --> 00:51:32,440 lettres une à la fois en se promenant dans la mémoire de notre ordinateur de gauche à 1155 00:51:32,440 --> 00:51:34,300 droit de chiffrer réellement. 1156 00:51:34,300 --> 00:51:36,590 >> Alors prenons notre pause de cinq minutes ici, et quand nous reviendrons, nous allons 1157 00:51:36,590 --> 00:51:39,060 démarrer ce processus de brouiller l'information. 1158 00:51:41,640 --> 00:51:43,180 >> Très bien. 1159 00:51:43,180 --> 00:51:48,440 Donc, avant de nous plonger dans une certaine crypto et ces choses appelées tableaux, permettez-moi 1160 00:51:48,440 --> 00:51:51,610 pause pour toutes les questions parce que j'ai l'impression vraiment une sorte de confuse certains 1161 00:51:51,610 --> 00:51:52,230 ces sujets. 1162 00:51:52,230 --> 00:51:53,940 Donc, nous allons fixer maintenant, si nous le pouvons. 1163 00:51:53,940 --> 00:51:56,480 Donc nous venons de parler valeurs de retour. 1164 00:51:56,480 --> 00:51:58,630 Nous avons parlé arguments. 1165 00:51:58,630 --> 00:52:02,330 Et nous avons parlé de cette notion, que nous y reviendrons dans les prochaines semaines 1166 00:52:02,330 --> 00:52:07,140 venir, de considérer la mémoire comme un tas de ces empilé 1167 00:52:07,140 --> 00:52:08,540 plateaux, pour ainsi dire. 1168 00:52:08,540 --> 00:52:13,460 De bas en haut, de telle sorte que chaque plateau qui se placer sur la pile représente 1169 00:52:13,460 --> 00:52:15,160 une fonction qui est en cours d'appel. 1170 00:52:17,970 --> 00:52:20,300 Des questions? 1171 00:52:20,300 --> 00:52:22,890 Alors que diriez-vous - laissez-moi essayer de poser une question. 1172 00:52:22,890 --> 00:52:25,520 Je garde gâcher cela, mais maintenant it's - vous avez tous vu le visage du garçon. 1173 00:52:25,520 --> 00:52:27,020 Donc, nous allons revenir à cela. 1174 00:52:27,020 --> 00:52:29,700 >> Permettez-moi de poser une question ici. 1175 00:52:29,700 --> 00:52:34,810 Permettez-moi de simplifier ce retour à ce qu'il était avant certains de nos plus tôt Q & A. 1176 00:52:34,810 --> 00:52:41,730 Et le fait que l 'accroissement a parenthèse ouverte, int nombre, fermé 1177 00:52:41,730 --> 00:52:42,260 parenthèses. 1178 00:52:42,260 --> 00:52:46,370 Qu'est-ce que le numéro int représentent-ils? 1179 00:52:46,370 --> 00:52:47,250 [Inaudible] 1180 00:52:47,250 --> 00:52:47,870 DAVID J. MALAN: Un argument. 1181 00:52:47,870 --> 00:52:50,732 D'accord, mais qu'est-ce qu'un argument? 1182 00:52:50,732 --> 00:52:51,620 [Inaudible] 1183 00:52:51,620 --> 00:52:52,500 DAVID J. MALAN: Désolé, c'est quoi? 1184 00:52:52,500 --> 00:52:53,150 SPEAKER 3: Quelque chose que vous passez po 1185 00:52:53,150 --> 00:52:53,570 DAVID J. MALAN: Très bien. 1186 00:52:53,570 --> 00:52:54,780 Donc, quelque chose que vous passez po 1187 00:52:54,780 --> 00:52:56,560 Et plus généralement, c'est juste l'entrée. 1188 00:52:56,560 --> 00:52:59,860 Si vous écrivez une fonction et le but de cette fonction dans la vie est de faire 1189 00:52:59,860 --> 00:53:03,290 quelque chose d'un peu différent à chaque fois que vous l'utilisez, alors la seule façon pour 1190 00:53:03,290 --> 00:53:07,710 que cela se produise vraiment semble être de lui fournir d'entrée de sorte qu'il 1191 00:53:07,710 --> 00:53:10,180 peut faire quelque chose de différent avec cette entrée à chaque fois. 1192 00:53:10,180 --> 00:53:13,590 >> Donc, vous devez spécifier deux choses quand une fonction prend entrées. 1193 00:53:13,590 --> 00:53:17,240 Vous devez spécifier le nom que vous voulez donner à cette entrée, uniquement pour 1194 00:53:17,240 --> 00:53:20,790 votre propre convenance de sorte que vous pouvez y faire référence dans la fonction que vous 1195 00:53:20,790 --> 00:53:23,610 vous écrivez, comme je l'ai fait ici dans la ligne 32. 1196 00:53:23,610 --> 00:53:27,840 Mais vous devez également spécifier son type car C est un langage de programmation 1197 00:53:27,840 --> 00:53:28,840 qui exige que 1198 00:53:28,840 --> 00:53:31,810 que si vous voulez une variable, vous devez dire à l'ordinateur ce qu'il 1199 00:53:31,810 --> 00:53:32,790 le type de données qu'il est, 1200 00:53:32,790 --> 00:53:35,540 en grande partie pour qu'il sache combien de bits d' 1201 00:53:35,540 --> 00:53:37,230 allouer à cette variable. 1202 00:53:37,230 --> 00:53:38,600 Parce que cela pourrait être six - 1203 00:53:38,600 --> 00:53:39,990 désolé, il ne sera pas six. 1204 00:53:39,990 --> 00:53:41,050 Il peut être 16. 1205 00:53:41,050 --> 00:53:41,630 Il peut être 8. 1206 00:53:41,630 --> 00:53:44,410 Il peut être 32, voire 64 ans. 1207 00:53:44,410 --> 00:53:45,820 Mais l'ordinateur a besoin de savoir. 1208 00:53:45,820 --> 00:53:49,110 Maintenant, l'int sur le côté gauche représente ce qui, par contraste? 1209 00:53:52,825 --> 00:53:53,780 [Inaudible] 1210 00:53:53,780 --> 00:53:54,570 DAVID J. MALAN: Qu'est-ce que c'est? 1211 00:53:54,570 --> 00:53:55,390 [Inaudible] 1212 00:53:55,390 --> 00:53:57,920 DAVID J. MALAN: Le type de la fonction et, plus spécifiquement, la 1213 00:53:57,920 --> 00:53:59,755 Type de sa production. 1214 00:53:59,755 --> 00:54:00,220 Droite. 1215 00:54:00,220 --> 00:54:04,220 Ainsi, alors que la chose entre parenthèses représente sa contribution, le cas échéant, le 1216 00:54:04,220 --> 00:54:06,640 chose à la gauche représente sa sortie. 1217 00:54:06,640 --> 00:54:10,560 Et dans ce cas, l'accroissement apparemment retourne un int. 1218 00:54:10,560 --> 00:54:14,590 Et donc int est le type de retour de cette fonction. 1219 00:54:14,590 --> 00:54:16,090 >> Qu'est-ce que ça veut dire au retour? 1220 00:54:16,090 --> 00:54:19,810 Littéralement, vous utilisez le mot-clé return. 1221 00:54:19,810 --> 00:54:24,640 Et puis si ce que vous êtes de retour à la droite du mot-clé est un 1222 00:54:24,640 --> 00:54:28,340 entier, alors c'est bien conforme à ce que nous avons promis. 1223 00:54:28,340 --> 00:54:31,110 Vous ne pourriez pas faire quelque chose comme ça - 1224 00:54:31,110 --> 00:54:32,280 bonjour, monde - 1225 00:54:32,280 --> 00:54:33,500 parce que c'est une chaîne. 1226 00:54:33,500 --> 00:54:35,440 Évidemment, il n'est pas un entier. 1227 00:54:35,440 --> 00:54:40,450 Donc en bref, le fardeau est vraiment sur nous, le programmeur, pour être précis que 1228 00:54:40,450 --> 00:54:44,730 à ce que nous retournant et puis effectivement aller sur le retournant. 1229 00:54:44,730 --> 00:54:49,030 Et puis pour faire un peu plus clair le contexte - 1230 00:54:49,030 --> 00:54:50,080 il est là à nouveau. 1231 00:54:50,080 --> 00:54:51,060 Le contexte - 1232 00:54:51,060 --> 00:54:52,830 grosse surprise à venir dans un instant. 1233 00:54:52,830 --> 00:54:57,720 Le contexte ici est que la mémoire de votre ordinateur est, encore une fois, un 1234 00:54:57,720 --> 00:54:59,070 gigaoctet, deux giga-octets, peu importe. 1235 00:54:59,070 --> 00:54:59,630 C'est peut-être plus. 1236 00:54:59,630 --> 00:55:00,540 C'est peut-être moins. 1237 00:55:00,540 --> 00:55:03,750 Mais l'ordinateur qu'il considère comme ayant des sections différentes. 1238 00:55:03,750 --> 00:55:04,860 Quelque chose se passe là-bas. 1239 00:55:04,860 --> 00:55:06,020 Quelque chose d'autre se passe là-haut. 1240 00:55:06,020 --> 00:55:07,540 Différentes choses va au milieu. 1241 00:55:07,540 --> 00:55:09,300 Et aujourd'hui, nous venons de commencer à raconter cette histoire. 1242 00:55:09,300 --> 00:55:11,130 >> Mais nous reviendrons sur ce fil du temps. 1243 00:55:11,130 --> 00:55:15,000 Pour l'instant, le seul élément de la mémoire nous nous soucions vraiment est le segment de texte 1244 00:55:15,000 --> 00:55:17,160 parce que cela représente seulement les zéros et de uns 1245 00:55:17,160 --> 00:55:18,460 Clang qui a fourni en sortie. 1246 00:55:18,460 --> 00:55:21,570 Ainsi, lorsque vous exécutez une commande au clavier comme a.out ou vous double 1247 00:55:21,570 --> 00:55:25,350 cliquez sur une icône sous Mac OS ou Windows, votre programme est chargé à partir de votre disque dur 1248 00:55:25,350 --> 00:55:26,930 conduire dans la RAM. 1249 00:55:26,930 --> 00:55:30,850 Et c'est flac en haut de la RAM de votre ordinateur, pour ainsi dire. 1250 00:55:30,850 --> 00:55:35,470 Maintenant, quant à lui, que votre programme est lancé et principale est appelée dans le 1251 00:55:35,470 --> 00:55:39,240 programme que vous avez écrit ou le programme Microsoft ou Apple écrit, l'un de ses 1252 00:55:39,240 --> 00:55:42,930 variables locales finissent là-bas au fond de la mémoire de votre ordinateur. 1253 00:55:42,930 --> 00:55:46,490 Mais si principal appelle une autre fonction qui lui-même a des variables ou des 1254 00:55:46,490 --> 00:55:48,340 arguments, ils finissent par-dessus. 1255 00:55:48,340 --> 00:55:50,670 Et si cette fonction appelle quelque chose, ils finissent par-dessus, 1256 00:55:50,670 --> 00:55:51,840 au-dessus, au-dessus de celui-ci. 1257 00:55:51,840 --> 00:55:56,100 Et une seule fois une fonction d'exécution ne se fait la pile de plateaux, de sorte 1258 00:55:56,100 --> 00:55:58,320 de parler, commencez à obtenir plus en plus bas. 1259 00:55:58,320 --> 00:56:03,370 Et c'est ce qui alors, en un mot, nous explique pourquoi, lorsque vous appelez cube - 1260 00:56:03,370 --> 00:56:04,660 ou si vous appelez incrément - 1261 00:56:04,660 --> 00:56:06,490 vous êtes de passage dans une copie de la valeur. 1262 00:56:06,490 --> 00:56:09,840 Et qu'est-ce que cela signifie de façon imagée, c'est que vous êtes littéralement écrit l' 1263 00:56:09,840 --> 00:56:14,540 numéro 1 dans une autre partie de la mémoire, qui change de 1 à 2, dans le cas d' 1264 00:56:14,540 --> 00:56:15,360 increment - 1265 00:56:15,360 --> 00:56:17,450 ou d'un 8, dans le cas de cube - 1266 00:56:17,450 --> 00:56:21,450 puis lancer loin que la mémoire dès que l'incrément ou le cube 1267 00:56:21,450 --> 00:56:23,410 retour de la fonction. 1268 00:56:23,410 --> 00:56:24,267 >> Question. 1269 00:56:24,267 --> 00:56:25,517 [Inaudible] 1270 00:56:28,090 --> 00:56:29,970 DAVID J. MALAN: Où - variables globales sont stockées dans ce qui est 1271 00:56:29,970 --> 00:56:32,960 actuellement appelé les données initialisées ou des données non initialisées. 1272 00:56:32,960 --> 00:56:35,900 La différence étant, si vous avez une variable globale, et vous l'assigner 1273 00:56:35,900 --> 00:56:39,530 immédiatement une valeur avec le signe égal, il finit par en haut là-bas. 1274 00:56:39,530 --> 00:56:43,390 Et si vous venez de dire int x-virgule sans valeur, il finit en légère hausse 1275 00:56:43,390 --> 00:56:46,670 inférieure dans la RAM tout simplement par convention. 1276 00:56:46,670 --> 00:56:49,308 D'autres questions. 1277 00:56:49,308 --> 00:56:49,750 Très bien. 1278 00:56:49,750 --> 00:56:53,040 >> Donc, cette image va revenir que nous aurons plus puissant avec ce que nous pouvons faire 1279 00:56:53,040 --> 00:56:53,830 avec l'ordinateur. 1280 00:56:53,830 --> 00:56:58,790 Mais pour l'instant, nous allons avoir une brève introduction à la cryptographie, un type spécifique de 1281 00:56:58,790 --> 00:57:01,910 cryptographie qui ne résout pas tous les problèmes du monde, mais ne résoudre 1282 00:57:01,910 --> 00:57:02,480 certains d'entre eux. 1283 00:57:02,480 --> 00:57:06,090 Dans ce cas là, nous avons quelque chose appelé cryptographie à clé secrète. 1284 00:57:06,090 --> 00:57:10,430 Et cryptographie à clé secrète, comme son nom l'indique, tire sa sécurité 1285 00:57:10,430 --> 00:57:11,330 à partir d'un secret. 1286 00:57:11,330 --> 00:57:14,720 Ainsi, par exemple, si vous êtes de retour à l'école primaire et que vous êtes de passage d'un 1287 00:57:14,720 --> 00:57:18,040 petite lettre d'amour secret pour le garçon ou la fille que vous concassage sur - si vous 1288 00:57:18,040 --> 00:57:20,820 voulu passer que par le public, vous n'auriez probablement pas écrire 1289 00:57:20,820 --> 00:57:24,120 une telle note en anglais ou quel que soit votre langue maternelle est, au contraire, vous 1290 00:57:24,120 --> 00:57:25,800 peut le chiffrer. 1291 00:57:25,800 --> 00:57:27,820 Ou bien vous pouvez leur envoyer un message texte de ces journées. 1292 00:57:27,820 --> 00:57:30,310 Mais vous pouvez effectivement passer d'une note dans la classe. 1293 00:57:30,310 --> 00:57:33,820 Et pour ce faire en toute sécurité, de manière à ce que vos amis et les enseignants 1294 00:57:33,820 --> 00:57:36,820 ne sais pas ce que vous écrivez, vous pourriez trouver un assez simple 1295 00:57:36,820 --> 00:57:37,800 algorithme - 1296 00:57:37,800 --> 00:57:39,290 jeune si vous pourriez être - 1297 00:57:39,290 --> 00:57:40,780 juste brouiller les mots. 1298 00:57:40,780 --> 00:57:44,390 Ainsi, au lieu d'écrire un, vous pourriez écrire B. Au lieu de B, vous pourriez écrire 1299 00:57:44,390 --> 00:57:46,670 C. Au lieu de C, vous pouvez écrire D, et ainsi de suite. 1300 00:57:46,670 --> 00:57:50,020 Ou vous pourriez trouver une traduction plus sophistiquée de lettres 1301 00:57:50,020 --> 00:57:51,300 à des lettres différentes. 1302 00:57:51,300 --> 00:57:55,440 Mais le hic, c'est le garçon ou la fille à qui vous envoyez cette note doit 1303 00:57:55,440 --> 00:57:56,850 savoir quelque chose. 1304 00:57:56,850 --> 00:57:59,620 Qui est ce qui, évidemment? 1305 00:57:59,620 --> 00:58:01,400 Comme, quel est votre secret. 1306 00:58:01,400 --> 00:58:04,620 Comme, qu'est-ce que la cartographie entre As et Bs et Cs et Ds? 1307 00:58:04,620 --> 00:58:08,780 Est-il juste en ajouter un, pour ainsi dire, à chacune des lettres de passer d' 1308 00:58:08,780 --> 00:58:09,730 De A à B, B à C? 1309 00:58:09,730 --> 00:58:11,350 Est-il plus complexe que cela? 1310 00:58:11,350 --> 00:58:16,450 Ainsi, vous et votre écraser besoin d'avoir cette information secrète. 1311 00:58:16,450 --> 00:58:18,170 Mais il ya une sorte de catch-22 ici. 1312 00:58:18,170 --> 00:58:20,760 Si c'est la première fois que vous envoyez cette lettre d'amour à travers la 1313 00:58:20,760 --> 00:58:25,590 classe, comment est-ce que garçon ou fille, va savoir ce que le secret est encore? 1314 00:58:25,590 --> 00:58:28,450 Donc, la clé secrète de chiffrement ne résout pas tous les problèmes du monde. 1315 00:58:28,450 --> 00:58:30,490 Et il ya en fait une relation que nous reviendrons vers 1316 00:58:30,490 --> 00:58:31,370 semestre de fin. 1317 00:58:31,370 --> 00:58:35,970 >> De même, aucun d'entre nous ont probablement jamais envoyé un - 1318 00:58:35,970 --> 00:58:39,453 De même, la plupart de nous ne connaît pas quelqu'un qui travaille, par exemple, à 1319 00:58:39,453 --> 00:58:40,300 Amazon.com. 1320 00:58:40,300 --> 00:58:43,130 Et pourtant, beaucoup d'entre nous ont probablement acheté des trucs sur Amazon.com. 1321 00:58:43,130 --> 00:58:45,670 Et nous avons appris à supposer que ces e-commerce 1322 00:58:45,670 --> 00:58:47,060 les transactions sont sécurisées. 1323 00:58:47,060 --> 00:58:47,210 Pas vrai? 1324 00:58:47,210 --> 00:58:49,310 L'URL https dit probablement. 1325 00:58:49,310 --> 00:58:51,590 Il ya peut-être un peu ridicule cadenas quelque part. 1326 00:58:51,590 --> 00:58:54,680 Il ya une sorte de cryptographie sécuriser vos informations de carte de crédit 1327 00:58:54,680 --> 00:58:56,980 entre vous et Amazon.com. 1328 00:58:56,980 --> 00:59:00,410 Et pourtant, si la cryptographie consiste à savoir un secret, et pourtant je ne suis pas 1329 00:59:00,410 --> 00:59:03,330 connais personne chez Amazon, et je n'ai certainement pas arrangé tout type de 1330 00:59:03,330 --> 00:59:07,350 secret avec quelqu'un chez Amazon, comment mon ordinateur ou mon navigateur fais ça? 1331 00:59:07,350 --> 00:59:10,100 Eh bien, s'avère qu'il ya d'autres types de cryptographie qui permettent de résoudre au total 1332 00:59:10,100 --> 00:59:10,740 ce problème. 1333 00:59:10,740 --> 00:59:13,610 Mais pour aujourd'hui, nous allons nous concentrer sur le simple, où vous pouvez organiser dans 1334 00:59:13,610 --> 00:59:18,480 faire progresser la connaissance de certains secrets, comme plus 1 ou une correspondance entre A et des B. 1335 00:59:18,480 --> 00:59:20,710 >> Et le processus de cryptographie implique généralement présent. 1336 00:59:20,710 --> 00:59:23,550 Vous avez un texte ordinaire, représenté ici à gauche. 1337 00:59:23,550 --> 00:59:26,260 Vous l'exécutez à travers une sorte d'algorithme ou une procédure 1338 00:59:26,260 --> 00:59:27,670 pour le chiffrer. 1339 00:59:27,670 --> 00:59:31,390 Peut-être que c'est juste A devient B, B devient C. Et puis vous vous retrouvez avec 1340 00:59:31,390 --> 00:59:32,260 chiffrer le texte. 1341 00:59:32,260 --> 00:59:36,450 Pendant ce temps, une fois que votre écraser reçoit la note secrète, il ou elle doit alors 1342 00:59:36,450 --> 00:59:39,950 décrypter par inversion généralement que l'algorithme de façon à obtenir 1343 00:59:39,950 --> 00:59:41,640 sauvegarder le texte en clair. 1344 00:59:41,640 --> 00:59:43,860 Maintenant il ya incarnations physiques de ce. 1345 00:59:43,860 --> 00:59:46,720 Par exemple, il s'agit d'un anneau décodeur petit secret. 1346 00:59:46,720 --> 00:59:50,060 Et c'est un anneau dans le sens où il ya deux cadrans ici. 1347 00:59:50,060 --> 00:59:53,630 Sur le pourtour extérieur de cette chose, il ya les lettres A à Z, 1348 00:59:53,630 --> 00:59:55,110 même si elles sont dans un ordre aléatoire. 1349 00:59:55,110 --> 00:59:58,410 Et à l'intérieur, il ya en fait quelques chiffres, de sorte que avec ce 1350 00:59:58,410 --> 01:00:02,940 anneau, vous pouvez sorte de transformer l'extérieur mais pas à l'intérieur afin d'aligner 1351 01:00:02,940 --> 01:00:04,110 chiffres avec des lettres. 1352 01:00:04,110 --> 01:00:08,290 Et dans le clip que vous allez voir - dont certains que vous avez pu voir 24/7 1353 01:00:08,290 --> 01:00:11,120 autour de la saison de Noël à partir d'un film intitulé A Christmas Story. 1354 01:00:11,120 --> 01:00:16,050 Vous verrez que Ralphie petite était si désireux de comprendre ce petit orphelin 1355 01:00:16,050 --> 01:00:19,810 Message secret d'Annie était lui qui avait été communiquée, je pense que, dans le 1356 01:00:19,810 --> 01:00:22,810 former des messages numériques sur un boîtier de série. 1357 01:00:22,810 --> 01:00:26,760 Et il fallait accumuler toutes les petites cartes qui sont venus 1358 01:00:26,760 --> 01:00:27,480 dans la boîte de céréales. 1359 01:00:27,480 --> 01:00:28,320 Il fallait les envoyer po 1360 01:00:28,320 --> 01:00:31,060 Il fallait récupérer l'anneau décodeur secret, afin que vous puissiez enfin comprendre 1361 01:00:31,060 --> 01:00:34,190 ce que la cartographie est entre lettres et chiffres, 1362 01:00:34,190 --> 01:00:35,420 ou des lettres et des lettres. 1363 01:00:35,420 --> 01:00:39,790 Donc, je vous donne ce petit clip de Un conte de Noël pour motiver pset 2 et 1364 01:00:39,790 --> 01:00:42,340 notre discussion, en un instant, de tableaux. 1365 01:00:42,340 --> 01:00:43,773 Nous avons donc ici Ralphie. 1366 01:00:43,773 --> 01:00:44,126 >> [LECTURE VIDEO] 1367 01:00:44,126 --> 01:00:47,470 -Qu'il soit connu à tout le monde que Ralph Parker est nommé 1368 01:00:47,470 --> 01:00:50,690 membre du Cercle Annie, la petite orpheline secret et a droit à tous les 1369 01:00:50,690 --> 01:00:53,500 les honneurs et les avantages qui y survenant. 1370 01:00:53,500 --> 01:00:56,040 Signé: Little Orphan Annie. 1371 01:00:56,040 --> 01:00:58,730 Contresigné, Pierre André! 1372 01:00:58,730 --> 01:01:00,150 À l'encre! 1373 01:01:00,150 --> 01:01:02,910 Honneurs et les avantages sociaux, déjà à l'âge de neuf ans. 1374 01:01:09,970 --> 01:01:10,730 Allez, passons à autre chose. 1375 01:01:10,730 --> 01:01:15,000 Je n'ai pas besoin de tout ce que le jazz au sujet des contrebandiers et des pirates. 1376 01:01:15,000 --> 01:01:17,624 Écoutez-demain soir pour conclure l'aventure de The Black 1377 01:01:17,624 --> 01:01:19,710 Pirate Ship. 1378 01:01:19,710 --> 01:01:23,380 Maintenant il est temps pour Annie message secret pour vous, membres 1379 01:01:23,380 --> 01:01:25,670 du Secret Circle. 1380 01:01:25,670 --> 01:01:30,260 Rappelez-vous, les enfants, seuls les membres du Secret Circle Annie peut décoder 1381 01:01:30,260 --> 01:01:31,660 Message secret d'Annie. 1382 01:01:31,660 --> 01:01:36,230 Rappelez-vous, Annie a besoin de vous. 1383 01:01:36,230 --> 01:01:38,720 Réglez vos épingles à B2. 1384 01:01:38,720 --> 01:01:41,040 Voici le message. 1385 01:01:41,040 --> 01:01:42,470 12, 11 - 1386 01:01:42,470 --> 01:01:46,000 -Je suis dans mon premier secret réunion. 1387 01:01:46,000 --> 01:01:49,440 -14, 11, 18, 16 - 1388 01:01:49,440 --> 01:01:51,700 -Pierre était en voix ce soir grand. 1389 01:01:51,700 --> 01:01:54,890 Je pourrais dire que le message de ce soir était vraiment important. 1390 01:01:54,890 --> 01:01:56,750 -3, 25. 1391 01:01:56,750 --> 01:01:58,590 C'est un message d'Annie elle-même. 1392 01:01:58,590 --> 01:01:59,840 Rappelez-vous, ne le dites à personne. 1393 01:02:04,570 --> 01:02:08,750 -90 Secondes plus tard, je suis dans la seule pièce de la maison où un garçon de neuf ans 1394 01:02:08,750 --> 01:02:12,980 pouvait s'asseoir dans la vie privée et de décodage. 1395 01:02:12,980 --> 01:02:17,130 Aha, B. Je suis allé à l'autre. 1396 01:02:17,130 --> 01:02:20,330 E. Le premier mot est l'être. 1397 01:02:20,330 --> 01:02:22,670 S. Il venait plus facile maintenant. 1398 01:02:22,670 --> 01:02:24,590 U. 1399 01:02:24,590 --> 01:02:26,510 -Oh, allez, Ralphie. 1400 01:02:26,510 --> 01:02:28,430 Je dois y aller. 1401 01:02:28,430 --> 01:02:30,350 -Je descends tout de suite, ma. 1402 01:02:30,350 --> 01:02:33,720 Gee whiz-. 1403 01:02:33,720 --> 01:02:38,270 -T, O. Assurez-vous de. 1404 01:02:38,270 --> 01:02:40,000 Assurez-vous de quoi? 1405 01:02:40,000 --> 01:02:42,105 Quel était Little Orphan Annie essaie de dire? 1406 01:02:42,105 --> 01:02:43,095 Assurez-vous de quoi? 1407 01:02:43,095 --> 01:02:43,590 -Ralphie! 1408 01:02:43,590 --> 01:02:44,580 Randy a obtenu d'aller. 1409 01:02:44,580 --> 01:02:45,570 Voulez-vous s'il vous plaît de sortir? 1410 01:02:45,570 --> 01:02:46,560 -Très bien, maman. 1411 01:02:46,560 --> 01:02:48,540 Je vais tout de suite. 1412 01:02:48,540 --> 01:02:50,580 -Je me rapprochais maintenant. 1413 01:02:50,580 --> 01:02:52,550 La tension était terrible. 1414 01:02:52,550 --> 01:02:53,355 Qu'est-ce que c'était? 1415 01:02:53,355 --> 01:02:56,315 Le sort de la planète peut se bloquer dans la balance. 1416 01:02:56,315 --> 01:02:56,790 -Ralphie! 1417 01:02:56,790 --> 01:02:59,165 Randy doit y aller. 1418 01:02:59,165 --> 01:03:02,310 -Je vais être dès la sortie, bordel de merde. 1419 01:03:02,310 --> 01:03:04,000 -Gee, y est presque. 1420 01:03:04,000 --> 01:03:05,180 Mes doigts volaient. 1421 01:03:05,180 --> 01:03:07,150 Mon esprit était un piège d'acier. 1422 01:03:07,150 --> 01:03:08,790 Chaque pore vibré. 1423 01:03:08,790 --> 01:03:10,040 Il était presque clair. 1424 01:03:10,040 --> 01:03:13,400 Oui, oui, oui, oui. 1425 01:03:13,400 --> 01:03:18,960 -Assurez-vous de boire votre Ovomaltine. 1426 01:03:18,960 --> 01:03:20,210 Ovomaltine? 1427 01:03:24,010 --> 01:03:25,260 Une publicité minable? 1428 01:03:28,200 --> 01:03:29,640 Fils de pute. 1429 01:03:29,640 --> 01:03:33,340 [FIN LECTURE VIDÉO] 1430 01:03:33,340 --> 01:03:36,040 >> DAVID J. MALAN: Donc nous avons là la cryptographie. 1431 01:03:36,040 --> 01:03:39,670 Alors, comment dans un ordinateur peut-on aller sur la mise en œuvre ou 1432 01:03:39,670 --> 01:03:40,950 représenter les choses comme ça? 1433 01:03:40,950 --> 01:03:44,430 Eh bien, nous avons besoin d'une façon de nous exprimer un peu plus souple que 1434 01:03:44,430 --> 01:03:46,420 nos variables à ce jour ont permis. 1435 01:03:46,420 --> 01:03:47,370 Nous avons eu ints. 1436 01:03:47,370 --> 01:03:48,380 Nous avons eu des chars. 1437 01:03:48,380 --> 01:03:50,790 Nous avons eu des flotteurs et des chambres doubles et quelques autres. 1438 01:03:50,790 --> 01:03:55,050 Mais ce sont des pièces individuelles de la mémoire qui ne nous permet pas vraiment de 1439 01:03:55,050 --> 01:03:58,010 exprimer des choses comme des mots et des phrases et des phrases. 1440 01:03:58,010 --> 01:04:00,200 En effet, nous avons appelé ces chaînes choses. 1441 01:04:00,200 --> 01:04:03,650 Mais nous avons promis que c'est vraiment juste une simplification dans le CS50 1442 01:04:03,650 --> 01:04:07,020 bibliothèque que nous avons l'intention de décoller. 1443 01:04:07,020 --> 01:04:08,970 >> Et nous allons donc commencer à faire ici. 1444 01:04:08,970 --> 01:04:11,130 Permettez-moi aller de l'avant et d'ouvrir un fichier - 1445 01:04:11,130 --> 01:04:13,770 l'ensemble de ces documents sont disponibles en ligne habitude - 1446 01:04:13,770 --> 01:04:19,120 array.c appelé à résoudre un problème sans rapport avec cordes, mais qui dresse un 1447 01:04:19,120 --> 01:04:23,040 image ici de la façon dont nous pourrions utiliser ce qu'on appelle un tableau. 1448 01:04:23,040 --> 01:04:25,530 Un tableau est un type de données. 1449 01:04:25,530 --> 01:04:31,320 Il s'agit d'un type de variable, en quelque sorte, qui a de multiples types de données plus petits 1450 01:04:31,320 --> 01:04:34,150 à l'intérieur de celui-ci de nouveau au dos à dos à dos. 1451 01:04:34,150 --> 01:04:37,700 Ainsi, par exemple, si nous voulons écrire un petit programme qui vous donne votre 1452 01:04:37,700 --> 01:04:42,110 Quiz moyenne pour un cours comme celui 50 qui a deux questionnaires, vous pourriez très facilement 1453 01:04:42,110 --> 01:04:45,170 écrire ce programme - la base même sur quelques-uns des matériaux de la semaine dernière - 1454 01:04:45,170 --> 01:04:47,770 en utilisant getInt et un couple de variables. 1455 01:04:47,770 --> 01:04:51,920 Int quiz1, int quiz2, et c'est assez simple. 1456 01:04:51,920 --> 01:04:55,930 C'est peut-être 10, 20 lignes de code, max, pour mettre en œuvre un programme qui demande à l' 1457 01:04:55,930 --> 01:05:01,170 utilisateur pour deux scores de quiz, puis calcule leur moyenne en les ajoutant 1458 01:05:01,170 --> 01:05:03,850 ainsi, en divisant par deux, puis l'impression des résultats. 1459 01:05:03,850 --> 01:05:06,380 Nous pourrions probablement le faire assez facilement maintenant, après 1460 01:05:06,380 --> 01:05:07,510 un certain nombre de minutes. 1461 01:05:07,510 --> 01:05:11,005 >> Mais le problème est que suppose que 50 en avaient trois ou quatre quiz. 1462 01:05:11,005 --> 01:05:13,510 Supposons que vous vouliez utiliser le même programme pour une classe qui avait 1463 01:05:13,510 --> 01:05:14,850 jeux-questionnaires hebdomadaires. 1464 01:05:14,850 --> 01:05:16,610 Pensez à une classe qui a des quiz hebdomadaire. 1465 01:05:16,610 --> 01:05:20,610 Si il ya comme 16 ou tant de semaines dans un semestre, vous avez maintenant 16 variables - 1466 01:05:20,610 --> 01:05:24,270 int quiz1, int quiz2, int quiz3, int quiz4. 1467 01:05:24,270 --> 01:05:27,560 Dès que vous commencez à voir cette redondance, ce copier-coller 1468 01:05:27,560 --> 01:05:31,390 du code, il doit commencer à faire que vous souhaitez, il y avait une meilleure façon. 1469 01:05:31,390 --> 01:05:33,930 Et heureusement, parce que des tableaux, il est. 1470 01:05:33,930 --> 01:05:34,980 Alors allons-y. 1471 01:05:34,980 --> 01:05:38,430 Tout d'abord, laissez moi vous présenter une chose très simple que nous n'avons pas utilisé à ce jour, 1472 01:05:38,430 --> 01:05:40,140 mais vous allez le voir de temps en temps dans le code. 1473 01:05:40,140 --> 01:05:42,360 C'est ce qu'on appelle généralement une constante. 1474 01:05:42,360 --> 01:05:45,790 Donc, c'est une constante dans le sens où cette valeur ne change jamais. 1475 01:05:45,790 --> 01:05:49,210 La convention de l'homme lors de la création d'une constante est d'utiliser la totalité du capital 1476 01:05:49,210 --> 01:05:51,940 lettres, juste pour qu'il se démarque vraiment dans votre code. 1477 01:05:51,940 --> 01:05:55,960 Et le mot-clé spécial que vous utilisez dans C est # define. 1478 01:05:55,960 --> 01:06:00,250 Donc, si vous dites # define, puis un espace, puis le mot que vous voulez utiliser pour 1479 01:06:00,250 --> 01:06:03,260 la constante de nom, et ensuite la valeur de la constante. 1480 01:06:03,260 --> 01:06:06,180 Alors préavis, ceci est différent de l'attribution quelque chose à une variable. 1481 01:06:06,180 --> 01:06:07,020 Il n'ya pas de signe égal. 1482 01:06:07,020 --> 01:06:08,240 Il n'ya pas de point-virgule. 1483 01:06:08,240 --> 01:06:11,410 C'est ce qui est généralement connu comme une directive de préprocesseur, mais plus sur 1484 01:06:11,410 --> 01:06:12,210 une autre fois. 1485 01:06:12,210 --> 01:06:18,540 >> Pour l'instant, ce qui crée une valeur immuable appelé QUIZ dont réelle 1486 01:06:18,540 --> 01:06:19,940 valeur numérique est 2. 1487 01:06:19,940 --> 01:06:24,020 Donc, partout où vous voyez des quiz, des jeux-questionnaires, des jeux-questionnaires tout au long de ce dossier, c'est 1488 01:06:24,020 --> 01:06:25,410 simplement le numéro 2. 1489 01:06:25,410 --> 01:06:28,100 Maintenant, si je regarde principal maintenant, nous allons voir comment cela fonctionne. 1490 01:06:28,100 --> 01:06:29,500 Dans un premier temps, il semble un peu obscur. 1491 01:06:29,500 --> 01:06:31,340 Mais c'est tous les trucs de la première semaine. 1492 01:06:31,340 --> 01:06:32,710 Demandez à l'utilisateur pour les grades. 1493 01:06:32,710 --> 01:06:33,630 Comment pouvons-nous faire cela? 1494 01:06:33,630 --> 01:06:35,470 Eh bien, à la ligne 22 - 1495 01:06:35,470 --> 01:06:37,210 c'est vraiment la partie juteuse - 1496 01:06:37,210 --> 01:06:40,960 Je déclare un flotteur, mais pas seulement un seul flotteur. 1497 01:06:40,960 --> 01:06:44,620 Je déclare, au contraire, un tableau de valeurs à virgule flottante. 1498 01:06:44,620 --> 01:06:49,100 Cette variable va être appelé qualités, comme le laisse entendre ici. 1499 01:06:49,100 --> 01:06:53,080 Mais la seule nouvelle syntaxe sont donc ces crochets, le fait 1500 01:06:53,080 --> 01:06:59,350 ce que j'ai dit grades flotteurs et ensuite support ouvert, puis un certain nombre. 1501 01:06:59,350 --> 01:07:02,460 Remarquez, si cela est une constante, c'est juste comme nous l'avons fait. 1502 01:07:02,460 --> 01:07:06,890 Cela signifie que l'ordinateur hey, donne-moi deux flotteurs, et nous allons collectivement appeler 1503 01:07:06,890 --> 01:07:08,220 les notes. 1504 01:07:08,220 --> 01:07:11,920 Ceci est en contraste à un processus beaucoup plus pénible comme ça. 1505 01:07:11,920 --> 01:07:15,850 Float grade1, flotter grade2, et ainsi de suite. 1506 01:07:15,850 --> 01:07:20,010 Ainsi, un tableau nous permet de mettre en œuvre cette idée, mais beaucoup moins hirsute, dans 1507 01:07:20,010 --> 01:07:24,630 de telle sorte que nous pouvons écrire une seule ligne de code au lieu de, disons, 16 pour un 16 1508 01:07:24,630 --> 01:07:25,740 semestre semaine. 1509 01:07:25,740 --> 01:07:29,950 Donc je ne voulais pas coder en dur 2 parce que si vous pensez à ce sujet maintenant 1510 01:07:29,950 --> 01:07:34,160 logiquement - suppose que l'année prochaine CS50 changements à 3 quiz à la place. 1511 01:07:34,160 --> 01:07:35,510 Et j'ai eu le numéro 2 ici. 1512 01:07:35,510 --> 01:07:36,600 J'ai eu le numéro 2 ici. 1513 01:07:36,600 --> 01:07:37,580 J'ai eu le numéro 2 ici. 1514 01:07:37,580 --> 01:07:38,560 J'ai eu le numéro 2 ici. 1515 01:07:38,560 --> 01:07:43,180 Il devient très pénible et très facile à visser et à changer accidentellement 1516 01:07:43,180 --> 01:07:47,690 une valeur de 3 et de manquer une autre valeur de 2. 1517 01:07:47,690 --> 01:07:52,460 Donc, je vais plutôt abstraite à cette distance et utiliser cette constante qui, comme son 1518 01:07:52,460 --> 01:07:54,120 nom l'indique, ne change jamais. 1519 01:07:54,120 --> 01:07:57,710 Et maintenant, peu importe si nous avons différents quizz cette année ou la prochaine, je 1520 01:07:57,710 --> 01:08:01,210 suffit de le changer en un seul endroit, ici en haut. 1521 01:08:01,210 --> 01:08:02,720 >> C'est tout ce que constante est. 1522 01:08:02,720 --> 01:08:08,680 Pendant ce temps, la nouvelle fonctionnalité conceptuelle est celle d'un tableau. 1523 01:08:08,680 --> 01:08:14,660 Ainsi, les crochets de me donner ce beaucoup de chars et me laisse collectivement 1524 01:08:14,660 --> 01:08:16,630 appelle les classes ici. 1525 01:08:16,630 --> 01:08:17,990 Alors maintenant, nous allons voir ce que je vais faire. 1526 01:08:17,990 --> 01:08:20,359 Ici, à la ligne 24 est le début d'une boucle for. 1527 01:08:20,359 --> 01:08:22,260 C'est vraiment rien d'extraordinaire. 1528 01:08:22,260 --> 01:08:25,060 Il est juste en utilisant des questionnaires au lieu d'un nombre codé en dur. 1529 01:08:25,060 --> 01:08:27,790 Mais il n'y a rien intellectuellement différent là-bas la semaine dernière. 1530 01:08:27,790 --> 01:08:29,040 C'est juste printf. 1531 01:08:29,040 --> 01:08:35,490 Donc printf ("% d quizz nombre de% d") parce que je veux juste me donner imprimer quizz 1532 01:08:35,490 --> 01:08:38,050 Numéro un des deux, puis deux sur deux. 1533 01:08:38,050 --> 01:08:39,850 Donc, c'est une chose purement esthétique. 1534 01:08:39,850 --> 01:08:42,500 Mais la partie la plus intéressante est maintenant en ligne 27. 1535 01:08:42,500 --> 01:08:48,310 Afin de remplir l'un des deux marqueurs avec une virgule flottante 1536 01:08:48,310 --> 01:08:51,029 valeur, nous utilisons à nouveau entre crochets. 1537 01:08:51,029 --> 01:08:55,620 Dans ce cas, je suis en utilisant i parce que cette boucle for a commencé avec i égal à 1538 01:08:55,620 --> 01:08:57,560 quelle valeur, apparemment? 1539 01:08:57,560 --> 01:08:58,279 0. 1540 01:08:58,279 --> 01:09:01,350 >> Ainsi, à la première itération de cette boucle, c'est comme si je 1541 01:09:01,350 --> 01:09:02,689 a écrit cela dans le code. 1542 01:09:02,689 --> 01:09:05,580 Mais sur la seconde itération de cette boucle, c'est comme si je 1543 01:09:05,580 --> 01:09:07,750 a écrit ceci dans mon code. 1544 01:09:07,750 --> 01:09:10,750 Mais le fait que je suis en utilisant une variable est parfait parce que, comme son nom l' 1545 01:09:10,750 --> 01:09:14,300 suggère, c'est de faire varier sa valeur à chaque itération. 1546 01:09:14,300 --> 01:09:17,370 Donc, je suis remplissant ce tableau à une place à la fois. 1547 01:09:17,370 --> 01:09:18,910 Qu'est-ce que ce tableau ressemble? 1548 01:09:18,910 --> 01:09:21,430 Eh bien, la raison pour laquelle j'ai dessiné ce super simple rectangle sur l'écran ici 1549 01:09:21,430 --> 01:09:23,350 avant c'était pour cette raison. 1550 01:09:23,350 --> 01:09:27,279 Un tableau est juste un morceau de mémoire suivi d'un autre morceau de mémoire, 1551 01:09:27,279 --> 01:09:30,109 suivi d'un autre bloc de mémoire, et ainsi de suite. 1552 01:09:30,109 --> 01:09:35,260 Donc, si mon tableau est de taille 2, dans ce cas là, tout ce que je ferais par 1553 01:09:35,260 --> 01:09:37,590 tapant dans mes scores de quiz, comme ici. 1554 01:09:37,590 --> 01:09:39,430 J'ai obtenu 100 sur celui-ci. 1555 01:09:39,430 --> 01:09:42,020 Et puis j'ai eu un 99 sur celui-ci. 1556 01:09:42,020 --> 01:09:46,040 Alors cette mémoire pourrait même ne pas être utilisé parce que j'ai seulement demandé à la 1557 01:09:46,040 --> 01:09:48,689 ordinateur pour un tableau de taille 2. 1558 01:09:48,689 --> 01:09:50,180 Ces carrés sont toujours là. 1559 01:09:50,180 --> 01:09:50,340 Pas vrai? 1560 01:09:50,340 --> 01:09:52,500 Vous avez encore deux gigaoctets de RAM, même si vous êtes seulement 1561 01:09:52,500 --> 01:09:53,979 demander deux flotteurs. 1562 01:09:53,979 --> 01:09:58,710 Donc, l'idée derrière les tableaux, c'est que l'ordinateur prend juste un morceau de mémoire 1563 01:09:58,710 --> 01:10:03,230 et répartit ensuite les petits morceaux dos à dos à dos à dos. 1564 01:10:03,230 --> 01:10:04,740 Et si c'est tout un tableau est. 1565 01:10:04,740 --> 01:10:09,080 C'est un espace contigu de mémoire, à l'intérieur de laquelle vous pouvez mettre des choses. 1566 01:10:09,080 --> 01:10:12,400 >> Maintenant, ce qui se passe ensuite faire juste un peu d'arithmétique ennuyeux. 1567 01:10:12,400 --> 01:10:16,170 Si je descendez ici, c'est là que je puis itérer sur le tableau. 1568 01:10:16,170 --> 01:10:19,410 Je viens avec la somme de toutes les valeurs dans le tableau. 1569 01:10:19,410 --> 01:10:22,390 Et puis-je utiliser la fonction round ici pour réellement faire la 1570 01:10:22,390 --> 01:10:23,940 divisé par la somme des quiz. 1571 01:10:23,940 --> 01:10:27,450 Mais permettez-moi de saluer ma main à ce que le tri de l'arithmétique assez pour le moment. 1572 01:10:27,450 --> 01:10:30,010 Mais tout ce qui est fait pour moi est finalement calculer une moyenne. 1573 01:10:30,010 --> 01:10:33,640 Quiz Alors d'abord, plus second questionnaire, divisé par 2, puis l'impression 1574 01:10:33,640 --> 01:10:34,700 il comme un int. 1575 01:10:34,700 --> 01:10:39,030 >> Mais nous allons maintenant la transition vers un autre exemple appelé chaine1, 1576 01:10:39,030 --> 01:10:42,370 qui dresse un portrait similaire, mais en utilisant des chaînes. 1577 01:10:42,370 --> 01:10:45,550 Permettez-moi aller de l'avant et de simplifier cela pour un instant. 1578 01:10:45,550 --> 01:10:48,340 Et pardonne l'indentation pour le moment. 1579 01:10:48,340 --> 01:10:52,280 Avis à la ligne 19 de cet exemple, je reçois une chaîne à l'utilisateur. 1580 01:10:52,280 --> 01:10:55,780 Mais remarquez ce que je fais en suivant les lignes 22 en avant. 1581 01:10:55,780 --> 01:11:00,260 Je suis en fait une itération de i jusqu'à - et c'est un nouveau truc - 1582 01:11:00,260 --> 01:11:02,730 strlen longueur de la chaîne,. 1583 01:11:02,730 --> 01:11:07,010 Il s'agit d'une fonction qui est livré avec C que si vous passez une chaîne, il raconte 1584 01:11:07,010 --> 01:11:08,950 vous combien de caractères sont dans cette chaîne. 1585 01:11:08,950 --> 01:11:09,440 Voilà tout. 1586 01:11:09,440 --> 01:11:12,520 Le fait que ce soit strlen au lieu de la longueur de chaîne est juste parce que c'est 1587 01:11:12,520 --> 01:11:13,040 plus succinct. 1588 01:11:13,040 --> 01:11:17,100 Il ya 30 ans, les gens ont aimé écrire des choses aussi succinctement que possible. 1589 01:11:17,100 --> 01:11:19,080 Nous avons donc conservé cette convention ici. 1590 01:11:19,080 --> 01:11:21,730 i + + signifie simplement incrémenter i à chaque itération. 1591 01:11:21,730 --> 01:11:24,310 Et maintenant, remarquez ce qui est vraiment intéressant. 1592 01:11:24,310 --> 01:11:28,730 Donc, à la ligne 24, je dis ordinateur, donnez-moi un personnage, huit 1593 01:11:28,730 --> 01:11:30,770 bits, et l'appeler c. 1594 01:11:30,770 --> 01:11:35,370 Mais quel est ce sur le côté droit de dire? 1595 01:11:35,370 --> 01:11:38,150 En anglais, ce que ça représente? 1596 01:11:38,150 --> 01:11:40,070 [Inaudible] 1597 01:11:40,070 --> 01:11:40,490 DAVID J. MALAN: Exactement. 1598 01:11:40,490 --> 01:11:42,390 Donnez-moi le premier caractère dans le tableau. 1599 01:11:42,390 --> 01:11:45,400 Ou, plus généralement, donne-moi le caractère i-ème dans le tableau. 1600 01:11:45,400 --> 01:11:48,230 Et se rendre compte qu'il est important maintenant que les informaticiens, nous sommes en fait 1601 01:11:48,230 --> 01:11:49,330 compter à partir de 0. 1602 01:11:49,330 --> 01:11:51,290 Vous n'avez pas le pouvoir discrétionnaire maintenant pour commencer à faire cela. 1603 01:11:51,290 --> 01:11:54,580 Maintenant, il faut se comporter conformément aux attentes de l'ordinateur et 1604 01:11:54,580 --> 01:11:58,010 compter à partir de zéro, car [0] va être le premier 1605 01:11:58,010 --> 01:11:59,670 caractère dans une chaîne. 1606 01:11:59,670 --> 01:12:01,320 [1] va être le deuxième. 1607 01:12:01,320 --> 01:12:03,610 [2] va être la troisième, et ainsi de suite. 1608 01:12:03,610 --> 01:12:08,840 Ainsi, ce programme, si je le compiler - c'est, encore une fois, chaine1. 1609 01:12:08,840 --> 01:12:11,040 >> Donc, assurez-string1. 1610 01:12:11,040 --> 01:12:16,730 Et maintenant je cours chaine1 dans ma fenêtre de terminal. 1611 01:12:16,730 --> 01:12:19,180 Il est en attente d'entrée, donc je vais taper dans, disons, David. 1612 01:12:19,180 --> 01:12:20,080 Entrée. 1613 01:12:20,080 --> 01:12:23,350 Et maintenant, il imprime DAVID tous sur des lignes différentes, car 1614 01:12:23,350 --> 01:12:24,430 remarqué ce que je fais. 1615 01:12:24,430 --> 01:12:27,510 Je suis d'imprimer un caractère à la fois. 1616 01:12:27,510 --> 01:12:29,100 Maintenant, nous n'allons pas entrer dans les détails aujourd'hui à ce sujet. 1617 01:12:29,100 --> 01:12:31,610 Mais j'ai supprimé il ya un moment cette vérification ici. 1618 01:12:31,610 --> 01:12:36,310 Il s'avère que si l'utilisateur se conduit mal, contradictoire, ou tout simplement 1619 01:12:36,310 --> 01:12:41,780 confus, vous pouvez effectivement ne parviennent pas à donner une chaîne d'une certaine longueur. 1620 01:12:41,780 --> 01:12:43,640 Si vous appuyez sur la mauvaise touche sur le clavier, vous pouvez donner 1621 01:12:43,640 --> 01:12:44,390 aucune chaîne à tous. 1622 01:12:44,390 --> 01:12:47,790 Ou si vous êtes méchant, vous pourriez essayer de coller de la valeur d'un gigaoctet de l' 1623 01:12:47,790 --> 01:12:49,380 essai pour combler cette chaîne. 1624 01:12:49,380 --> 01:12:52,060 Et si l'ordinateur manque de mémoire, il s'avère que nous allons 1625 01:12:52,060 --> 01:12:54,310 pour récupérer cette valeur spéciale appelée nulle. 1626 01:12:54,310 --> 01:12:57,550 Donc pour l'instant, sachez simplement qu'il ya cette valeur spéciale appelée nulle selon laquelle 1627 01:12:57,550 --> 01:13:01,000 nous permettra de vérifier quand nous sommes sortis de la mémoire, entre autres choses. 1628 01:13:01,000 --> 01:13:07,330 >> Mais si j'ouvre maintenant chaîne2, vous remarquerez une différence ici. 1629 01:13:07,330 --> 01:13:09,760 Remarquez ici une différence avec string2. 1630 01:13:09,760 --> 01:13:13,260 Avec chaîne2, cette boucle for est un peu différent. 1631 01:13:13,260 --> 01:13:16,350 Permettez-moi de supprimer les zéros de sorte que nous pouvons en parler une autre fois. 1632 01:13:16,350 --> 01:13:18,460 Mais ce qui est différent de la boucle for, cette fois? 1633 01:13:21,580 --> 01:13:23,160 Et je peux revenir à l'exemple précédent. 1634 01:13:23,160 --> 01:13:24,800 C'est donc la deuxième version. 1635 01:13:24,800 --> 01:13:27,020 Ceci est une version un. 1636 01:13:27,020 --> 01:13:31,935 Un, deux, un, deux. 1637 01:13:35,030 --> 01:13:38,240 Donc, l'appel strlen est où? 1638 01:13:38,240 --> 01:13:40,420 C'est dans la première partie de la boucle for. 1639 01:13:40,420 --> 01:13:43,060 Toute pensée quant à pourquoi je fais cela? 1640 01:13:43,060 --> 01:13:43,690 Ouais. 1641 01:13:43,690 --> 01:13:46,010 [Inaudible] 1642 01:13:46,010 --> 01:13:47,630 DAVID J. MALAN: Nous n'avons donc pas appeler la fonction à chaque fois. 1643 01:13:47,630 --> 01:13:48,040 Exactement. 1644 01:13:48,040 --> 01:13:50,350 Rappelons à partir de boucles qui ils sont super simple une fois que vous sorte de 1645 01:13:50,350 --> 01:13:52,180 comprendre que c'est l'initialisation, la 1646 01:13:52,180 --> 01:13:53,330 condition, et la mise à jour. 1647 01:13:53,330 --> 01:13:55,430 Le problème est que la condition se produit sur tous les 1648 01:13:55,430 --> 01:13:56,600 itération de la boucle. 1649 01:13:56,600 --> 01:13:59,930 Et si dans cet exemple ici, ce qui est mauvais sur le fait 1650 01:13:59,930 --> 01:14:03,500 que c'est mon état? 1651 01:14:03,500 --> 01:14:05,920 Vous appelez strlen encore et encore et encore. 1652 01:14:05,920 --> 01:14:08,990 Mais une fois que j'ai tapé dans DAVID, la longueur de cette chaîne est de cinq. 1653 01:14:08,990 --> 01:14:11,560 Et ça ne va pas changer à chaque itération de la boucle parce que le 1654 01:14:11,560 --> 01:14:15,560 chaîne est encore D-A-V-I-D. Donc, c'est une allusion à ce qui se passe de devenir un 1655 01:14:15,560 --> 01:14:19,650 idée plus important connu sous le nom une décision de conception, où - n'ont tout simplement pas 1656 01:14:19,650 --> 01:14:21,640 rendre l'ordinateur faire le travail inutile. 1657 01:14:21,640 --> 01:14:25,630 >> Or, comme un avant-goût de pset 2, pset 2 dans l'édition standard est 1658 01:14:25,630 --> 01:14:28,850 va vous mettre au défi de mettre en œuvre effectivement un certain nombre de chiffres, certains 1659 01:14:28,850 --> 01:14:32,650 nombre d'algorithmes de chiffrement, de sorte que vous pouvez crypter et décrypter 1660 01:14:32,650 --> 01:14:35,530 des messages secrets, un peu comme la Ralphie personne là décodé. 1661 01:14:35,530 --> 01:14:38,720 Dans l'édition pirate de pset 2, nous allons aller un peu plus loin. 1662 01:14:38,720 --> 01:14:42,010 Nous allons vous remettre un fichier à partir d'un système réel de l'ordinateur qui contient une 1663 01:14:42,010 --> 01:14:45,690 tas de noms d'utilisateur et mots de passe chiffrés réels, et le défi 1664 01:14:45,690 --> 01:14:49,110 pour l'édition pirate va être à casser les mots de passe et des figures 1665 01:14:49,110 --> 01:14:53,060 ce que la cryptographie ou quel secret a été utilisé pour effectivement 1666 01:14:53,060 --> 01:14:55,080 générer les mots de passe. 1667 01:14:55,080 --> 01:14:58,360 Et nous allons le faire en utilisant une nouvelle fonctionnalité de C que je vais vous donner 1668 01:14:58,360 --> 01:15:02,200 vous avez juste une démo de, connu sous le nom de ligne de commande arguments. 1669 01:15:02,200 --> 01:15:05,930 >> Ainsi, il s'avère, comme certains d'entre vous ont vu dans la section ou dans les manuels, 1670 01:15:05,930 --> 01:15:09,850 principal ne doit pas toujours être vide entre parenthèses. 1671 01:15:09,850 --> 01:15:14,060 Il s'avère que principal peut également être écrit comme ceci, avec deux arguments, 1672 01:15:14,060 --> 01:15:19,690 argc et argv, où argc est le nombre de mots que vous tapez après 1673 01:15:19,690 --> 01:15:21,940 le nom du programme sur votre ligne de commande. 1674 01:15:21,940 --> 01:15:24,550 Et argv sont les mots réels. 1675 01:15:24,550 --> 01:15:29,470 Et comme les crochets y penser, argv est un tableau apparemment. 1676 01:15:29,470 --> 01:15:33,720 Ça va être une chaîne après une série après une chaîne en mémoire. 1677 01:15:33,720 --> 01:15:36,170 Donc, ce que nous allons être en mesure de le faire, à commencer par pset 2, est 1678 01:15:36,170 --> 01:15:37,310 quelque chose comme ça. 1679 01:15:37,310 --> 01:15:42,450 Si je fais argv1, qui est un exemple, nous allons revenir à lundi, et exécuter 1680 01:15:42,450 --> 01:15:45,180 il, remarquez que cela ne semble pas faire quoi que ce soit pour le moment. 1681 01:15:45,180 --> 01:15:47,050 Il se contente d'afficher son nom propre. 1682 01:15:47,050 --> 01:15:53,220 Mais si je dis au revoir classe, notez que ce programme itère apparemment 1683 01:15:53,220 --> 01:15:57,030 sur chacun des mots qui ont été tapés à l'invite. 1684 01:15:57,030 --> 01:16:02,050 Et les moyens par lesquels nous allons accéder aux mots que l'utilisateur a 1685 01:16:02,050 --> 01:16:06,780 tapé à l'invite est de changer principale, à partir de ce week-end, de int 1686 01:16:06,780 --> 01:16:10,710 main (void) en int main (argc, argv). 1687 01:16:10,710 --> 01:16:13,700 Et c'est ainsi que va naître arguments de ligne de commande. 1688 01:16:13,700 --> 01:16:17,210 Et une fois que vous obtenez vraiment sophistiqué à cela, vous serez en mesure d'écrire 1689 01:16:17,210 --> 01:16:21,370 programmes vraiment trippy, comme celui-là, qui va au-delà de 1690 01:16:21,370 --> 01:16:25,520 certaines des fonctionnalités que nous avons fait jusqu'à présent, mais tous très puissant. 1691 01:16:25,520 --> 01:16:27,330 >> Donc, nous allons laisser ce avec cela sur l'écran. 1692 01:16:27,330 --> 01:16:29,160 Et nous allons vous voir lundi.