1 00:00:00,000 --> 00:00:01,940 [Powered by Google Translate] [Procédure pas à pas - 2 Set problème] 2 00:00:01,940 --> 00:00:04,130 [Zamyla Chan - Université de Harvard] 3 00:00:05,170 --> 00:00:07,490 [C'est CS50. CS50.TV] 4 00:00:07,490 --> 00:00:10,750 Très bien. Bonjour à tous et bienvenue dans Procédure pas à pas 2. 5 00:00:10,750 --> 00:00:14,330 Tout d'abord, je tiens à vous féliciter pour la finition pset 1. 6 00:00:14,330 --> 00:00:18,140 Je sais que ça aurait pu être un peu difficile pour certains d'entre vous, 7 00:00:18,140 --> 00:00:20,460 aurait pu être votre premier programme informatique que vous avez écrit, 8 00:00:20,460 --> 00:00:24,500 mais n'oubliez pas que, à la fin de cela, lorsque vous regardez en arrière à la fin du semestre, 9 00:00:24,500 --> 00:00:29,820 vous aurez l'air moins pset 1 et vous allez dire, "Hé, je pu faire ça en 5 minutes." 10 00:00:29,820 --> 00:00:35,700 Donc, connaître et faire confiance qu'à la fin de cela, vous trouverez certainement pset 1 assez simple. 11 00:00:35,700 --> 00:00:40,640 Mais pour l'instant c'est un accomplissement énorme, et félicitations pour se faire. 12 00:00:40,640 --> 00:00:44,010 Maintenant, aussi un petit mot avant d'entrer dans le vif du walkthrough. 13 00:00:44,010 --> 00:00:48,340 Je veux juste faire une petite note que j'ai parfois ne pas avoir assez de temps 14 00:00:48,340 --> 00:00:52,500 pendant les procédures pas à pas à passer par tous les moyens de faire seul le problème posé 15 00:00:52,500 --> 00:00:56,140 et non seulement peut-être se concentrer sur 1 ou 2 types de mises en œuvre, 16 00:00:56,140 --> 00:00:57,750 moyens que vous pourriez le faire. 17 00:00:57,750 --> 00:01:01,970 Mais cela ne veut pas dire que vous êtes interdit de faire les choses autrement. 18 00:01:01,970 --> 00:01:05,980 Il ya souvent, comme l'informatique, de nombreuses façons de faire les choses, 19 00:01:05,980 --> 00:01:12,190 et donc certainement n'hésitez pas à utiliser un autre type de solution que j'ai peut-être présenté. 20 00:01:12,190 --> 00:01:14,520 [Pset 2: Crypto - Zamyla Chan - zamyla@cs50.net] 21 00:01:14,520 --> 00:01:17,160 [Pset2 - 0. Une section de Questions - 1. César - 2. Vigenere] 22 00:01:17,160 --> 00:01:20,650 Très bien. Donc problème posé 2: Crypto est un plaisir. 23 00:01:20,650 --> 00:01:24,500 Encore une fois, avec chaque pset vous commencerez avec une section de questions 24 00:01:24,500 --> 00:01:29,600 qui va être menée dans vos sections avec vos collègues enseignant affecté. 25 00:01:29,600 --> 00:01:31,670 Nous n'allons pas passer par ces au cours de la procédure pas à pas, 26 00:01:31,670 --> 00:01:35,100 mais ils ont certainement vous aidera à remplir le pset. 27 00:01:35,100 --> 00:01:38,100 Ainsi, la première partie de l'ensemble de problèmes qui est à César. 28 00:01:38,100 --> 00:01:43,470 Et ainsi de César quelqu'un va vous passer une clé avec un entier, 29 00:01:43,470 --> 00:01:48,420 et vous permet de chiffrer une chaîne de texte qu'ils vous fournissent 30 00:01:48,420 --> 00:01:50,670 et leur redonner une chose crypté. 31 00:01:50,670 --> 00:01:56,050 Si quelqu'un regardait Un conte de Noël, il ya un exemple de ce que là-bas. 32 00:01:56,050 --> 00:01:59,090 Puis la seconde partie de l'ensemble problème est Vigenère, 33 00:01:59,090 --> 00:02:01,790 qui est une technique de cryptage plus avancé. 34 00:02:01,790 --> 00:02:05,640 Et donc nous allons chiffrer un morceau de texte, 35 00:02:05,640 --> 00:02:09,600 sauf qu'au lieu avec juste un seul entier, nous allons en fait l'encoder 36 00:02:09,600 --> 00:02:13,340 avec un mot-clé que l'utilisateur va nous fournir. 37 00:02:16,270 --> 00:02:22,090 Ok, donc le premier outil dans la boîte à outils d'aujourd'hui qui se passe réellement à la mise à jour de l'appareil. 38 00:02:22,090 --> 00:02:26,430 Sur le forum de discussion, nous verrions des choses comme, «Pourquoi ça ne marche pas?" 39 00:02:26,430 --> 00:02:28,110 "Pourquoi ne Soumettre travail 50?" 40 00:02:28,110 --> 00:02:31,830 et souvent la solution est en fait de mettre à jour votre appareil. 41 00:02:31,830 --> 00:02:36,730 Et si vous venez de courir dans une fenêtre de terminal dans votre appareil sudo yum-y - 42 00:02:36,730 --> 00:02:40,040 c'est un drapeau dit oui, mettre à jour tout - mise à jour, 43 00:02:40,040 --> 00:02:42,280 alors votre appareil sera mise à jour si besoin est. 44 00:02:42,280 --> 00:02:46,960 Et il ne fait pas de mal si vous êtes déjà à la version la plus récente de l'appareil. 45 00:02:46,960 --> 00:02:51,280 Puis il va juste dire aucune mise à jour disponible et vous pouvez continuer à travailler le long. 46 00:02:51,280 --> 00:02:55,800 Mais ce qui est bon pour exécuter, même à chaque fois que vous ouvrez l'appareil 47 00:02:55,800 --> 00:02:57,140 puisque nous sommes encore - 48 00:02:57,140 --> 00:03:00,320 parfois, si nous entrons dans un bug - le fixer dans l'appareil. 49 00:03:00,320 --> 00:03:03,180 Donc, assurez-vous que vous disposez de la version la plus récente de l'appareil 50 00:03:03,180 --> 00:03:07,710 et exécuter cette mise à jour là-bas. 51 00:03:07,710 --> 00:03:14,360 Très bien. Donc, puisque nous avons affaire avec des lettres et changeant, chiffrement des choses, 52 00:03:14,360 --> 00:03:20,410 nous allons vraiment envie de devenir le meilleur ami de notre tableau ASCII. 53 00:03:20,410 --> 00:03:24,350 Il y en a de nombreux en ligne, si vous trouvez. Peut-être même faire vos propres. 54 00:03:24,350 --> 00:03:29,950 Fondamentalement, avec chaque lettre et chaque chiffre et chaque personnage 55 00:03:29,950 --> 00:03:32,210 il existe un nombre qui leur sont associés, 56 00:03:32,210 --> 00:03:38,670 et il est donc bon de voir leurs valeurs ASCII à côté de la lettre même. 57 00:03:38,670 --> 00:03:42,310 Cela va certainement vous aider dans le jeu de problème. 58 00:03:42,310 --> 00:03:45,750 Une chose qui m'a vraiment aidé dans ce problème posé était de fait l'imprimer, 59 00:03:45,750 --> 00:03:48,380 et comme je vivais, je voudrais vraiment attirer sur elle, 60 00:03:48,380 --> 00:03:51,150 écrire: «Si cela doit aller là-bas, alors ..." 61 00:03:51,150 --> 00:03:55,270 Type de tirer sur lui et il marquer, deviennent les meilleurs amis avec votre table ASCII. 62 00:03:57,240 --> 00:04:00,750 Ensuite, nous avons quelques outils à notre disposition. 63 00:04:00,750 --> 00:04:03,750 Cette fois, au lieu de réellement demander à l'utilisateur la totalité de leur entrée 64 00:04:03,750 --> 00:04:05,230 nous allons faire une combinaison. 65 00:04:05,230 --> 00:04:06,880 Nous allons les inviter pour une entrée, 66 00:04:06,880 --> 00:04:11,350 mais nous allons aussi tout simplement utiliser les arguments de ligne de commande. 67 00:04:11,350 --> 00:04:15,600 Alors, quand ils dirigent leur programme, généralement vous dites. / Bonjour, par exemple, 68 00:04:15,600 --> 00:04:17,310 si votre programme a été hello.c. 69 00:04:17,310 --> 00:04:22,500 Mais cette fois, au lieu de dire ça, ils peuvent mettre des mots, des arguments plus tard. 70 00:04:22,500 --> 00:04:27,210 Et donc nous allons utiliser tout ce qu'ils passent pour nous en tant que leur contribution ainsi, 71 00:04:27,210 --> 00:04:31,720 donc aller au-delà simplement demander d'entier, mais aussi en utilisant des arguments de ligne de commande. 72 00:04:31,720 --> 00:04:36,590 Et puis nous irons dans les tableaux et les chaînes de caractères, que nous allons utiliser beaucoup aussi. 73 00:04:41,460 --> 00:04:44,810 Voici juste un exemple de 1 table ASCII mini. 74 00:04:44,810 --> 00:04:48,460 Comme je l'ai dit, chaque lettre correspond à un chiffre, 75 00:04:48,460 --> 00:04:52,510 et ainsi vous familiariser avec ça. Il vous sera utile. 76 00:04:52,510 --> 00:04:55,610 Et plus tard, lorsque nous avons commencer à faire quelques ASCIIMath traiter avec les chiffres - 77 00:04:55,610 --> 00:05:00,110 ajoutant, soustrayant les - alors certainement bon de se référer à ce tableau. 78 00:05:02,860 --> 00:05:06,920 Alors, voici un exemple de chiffrement de César - quelque chose que vous avez joué avec. 79 00:05:06,920 --> 00:05:11,190 C'est juste une roue. Essentiellement, il ya un alphabet externe et puis il ya un alphabet intérieure. 80 00:05:11,190 --> 00:05:15,290 Donc, voici un bon exemple de l'algorithme de chiffrement de César mais avec une touche de 0. 81 00:05:15,290 --> 00:05:21,540 Pour l'essentiel, A est aligné avec A, B est alignée avec B, sur toute la hauteur à Z. 82 00:05:21,540 --> 00:05:26,590 Mais alors que nous voulions une clé de 3, par exemple. 83 00:05:26,590 --> 00:05:33,280 Puis nous faire tourner la roue intérieure de sorte que A s'aligne maintenant avec D, etc 84 00:05:33,280 --> 00:05:35,250 Et donc c'est essentiellement ce que nous allons faire. 85 00:05:35,250 --> 00:05:38,340 Nous n'avons pas une roue, mais ce que nous allons faire est de faire de notre programme 86 00:05:38,340 --> 00:05:44,490 type de décaler l'alphabet avec nous un certain nombre de numéros. 87 00:05:44,490 --> 00:05:48,650 Donc, comme je l'ai déjà dit, nous allons avoir affaire avec des arguments de ligne de commande 88 00:05:48,650 --> 00:05:50,390 ainsi que d'obtenir un nombre entier. 89 00:05:50,390 --> 00:05:55,050 Donc, la façon dont un utilisateur d'exécuter votre programme César, c'est de dire. / Caesar 90 00:05:55,050 --> 00:05:58,090 puis en entrant un numéro de suite. 91 00:05:58,090 --> 00:06:01,130 Et ce nombre représente la clé, le changement, 92 00:06:01,130 --> 00:06:06,740 nombre de fois que vous allez être en rotation la roue intérieure de votre chiffre de César. 93 00:06:06,740 --> 00:06:08,390 Et si vous voyez ici un exemple. 94 00:06:08,390 --> 00:06:14,550 Si nous sommes entrés dans les lettres de A à L dans notre chiffrement de César, 95 00:06:14,550 --> 00:06:19,520 alors il serait entrée D à O, parce que c'est chaque lettre déplacé plus de 3 fois, 96 00:06:19,520 --> 00:06:22,080 tout comme l'exemple de la roue que je vous ai montré. 97 00:06:22,080 --> 00:06:25,300 Alors si vous avez entré, par exemple, ce n'est CS50! 98 00:06:25,300 --> 00:06:27,960 alors il serait également déplacer toutes les lettres. 99 00:06:27,960 --> 00:06:31,040 Et c'est une chose importante dans César et Vigenère 100 00:06:31,040 --> 00:06:34,890 c'est que nous allons ignorer toutes les lettres non. 101 00:06:34,890 --> 00:06:39,160 Donc, tous les espaces, de caractères, etc, numéros, nous allons garder le même. 102 00:06:39,160 --> 00:06:42,920 Nous allons seulement de déplacer les lettres dans ce cas. 103 00:06:42,920 --> 00:06:45,870 Donc, comme vous le voyez dans la roue, nous avons seulement les lettres qui s'offrent à nous, 104 00:06:45,870 --> 00:06:50,150 si nous ne voulons décaler les lettres et chiffrer les lettres. 105 00:06:51,370 --> 00:06:56,720 Donc la première chose à faire, vous avez vu que l'utilisation de César dans le problème set 2 106 00:06:56,720 --> 00:07:05,280 est d'exécuter César et ensuite entrer un numéro lorsque vous l'exécutez dans le terminal. 107 00:07:05,280 --> 00:07:10,940 Donc, ce que nous devons faire est d'obtenir en quelque sorte la clé et y accéder. 108 00:07:10,940 --> 00:07:14,730 Et si nous voulons en quelque sorte voir que ça va être l'argument de commande deuxième ligne. 109 00:07:14,730 --> 00:07:20,950 Le premier va être. / César, et la prochaine sera le numéro de clé. 110 00:07:22,190 --> 00:07:29,200 Donc, avant que nous ayons int main (void) pour lancer nos programmes C. 111 00:07:29,200 --> 00:07:31,790 Nous allons décoller une couche un peu 112 00:07:31,790 --> 00:07:34,720 et de voir qu'au lieu de passer dans le vide à notre fonction principale 113 00:07:34,720 --> 00:07:37,920 nous sommes vraiment affaire avec 2 paramètres. 114 00:07:37,920 --> 00:07:44,070 Nous avons un int argc, puis nommé un tableau de chaînes appelé argv. 115 00:07:44,070 --> 00:07:46,030 Donc argc est un entier, 116 00:07:46,030 --> 00:07:49,640 et il représente le nombre d'arguments passés à votre programme. 117 00:07:49,640 --> 00:07:53,590 Et puis, argv est en fait la liste des arguments passés. 118 00:07:53,590 --> 00:08:00,820 Tous les arguments sont des chaînes, et ainsi de argv représente un tableau, une liste de chaînes. 119 00:08:01,830 --> 00:08:03,990 Parlons un peu des tableaux un peu. 120 00:08:03,990 --> 00:08:05,940 Les tableaux sont essentiellement une nouvelle structure de données. 121 00:08:05,940 --> 00:08:09,660 Nous avons ints, nous avons doublé, nous avons cordes, et maintenant nous avons des tableaux. 122 00:08:09,660 --> 00:08:13,820 Les tableaux sont des structures de données qui peuvent contenir plusieurs valeurs du même type, 123 00:08:13,820 --> 00:08:18,320 Donc, essentiellement, une liste de n'importe quel type que vous voulez. 124 00:08:18,320 --> 00:08:24,400 Essentiellement, si vous voulez une liste d'entiers tout en 1 variable, 125 00:08:24,400 --> 00:08:29,090 alors vous devez créer une nouvelle variable qui était de tableau de type int. 126 00:08:29,090 --> 00:08:34,450 Ainsi, les tableaux sont à l'index zéro, ce qui signifie que le premier élément du tableau est à l'index 0. 127 00:08:34,450 --> 00:08:41,799 Si le tableau est de longueur 4, comme dans cet exemple, votre dernier élément serait à l'index 3, 128 00:08:41,799 --> 00:08:44,810 qui est de 4 à 1. 129 00:08:45,940 --> 00:08:48,420 Donc, pour créer une matrice, vous feriez quelque chose comme ça. 130 00:08:48,420 --> 00:08:51,440 Que vous vouliez un tableau à double. 131 00:08:51,440 --> 00:08:56,520 Cela vaut pour tout type de type de données, cependant. 132 00:08:56,520 --> 00:09:00,210 Donc, disons que vous voulez un tableau à double. Disons que vous voulez l'appeler la boîte aux lettres. 133 00:09:00,210 --> 00:09:04,760 Comme vous le feriez initialiser toute autre double, 134 00:09:04,760 --> 00:09:09,760 vous diriez double et puis le nom, mais cette fois nous avons mis entre crochets, 135 00:09:09,760 --> 00:09:13,570 puis le nombre, il y aura la longueur de la matrice. 136 00:09:13,570 --> 00:09:16,840 Notez que dans les tableaux nous ne pourrons jamais changer la longueur, 137 00:09:16,840 --> 00:09:21,230 ainsi vous avez toujours de définir et de choisir le nombre de boîtes, 138 00:09:21,230 --> 00:09:25,440 le nombre de valeurs de votre réseau va tenir. 139 00:09:25,440 --> 00:09:31,820 Donc, pour définir des valeurs différentes dans votre tableau, vous allez utiliser cette syntaxe suivante, 140 00:09:31,820 --> 00:09:33,200 comme vous le voyez sur la diapositive. 141 00:09:33,200 --> 00:09:37,620 Vous avez 0 Indice boîte aux lettres sera fixé à 1,2, 142 00:09:37,620 --> 00:09:42,180 indice de boîte aux lettres 1 set à 2,4, etc 143 00:09:42,180 --> 00:09:47,910 Alors, maintenant que nous avons passé en revue les tableaux un peu, revenons à la argc et argv. 144 00:09:47,910 --> 00:09:52,220 Nous savons que argv est maintenant un tableau de chaînes. 145 00:09:52,220 --> 00:09:55,080 Alors, quand un utilisateur passe - dire qu'ils exécutent un programme - 146 00:09:55,080 --> 00:09:58,740 disent-ils. / bonjour David Malan, 147 00:09:58,740 --> 00:10:05,160 ce que le programme peut faire pour vous est déjà effectivement arriver à ce argc et argv sont. 148 00:10:05,160 --> 00:10:07,620 Donc, vous n'avez pas besoin de s'inquiéter à ce sujet. 149 00:10:07,620 --> 00:10:14,370 Argc, dans ce cas serait de 3 parce qu'il voit 3 mots distincts séparés par des espaces. 150 00:10:14,370 --> 00:10:18,850 Et alors le tableau dans le cas présent, le premier indice serait. / Bonjour, 151 00:10:18,850 --> 00:10:21,770 le prochain David, le prochain Malan. 152 00:10:21,770 --> 00:10:25,640 Quelqu'un voit tout de suite quelle est la relation entre argv, 153 00:10:25,640 --> 00:10:28,990  le tableau, et argc est? 154 00:10:32,820 --> 00:10:38,090 Ouais. Nous allons entrer dans ce dans un exemple args.c. 155 00:10:38,090 --> 00:10:42,880 Voyons si l'on peut profiter de la relation entre le 2. 156 00:10:42,880 --> 00:10:46,550 Ici, vous trouverez peut-être que dans l'appareil de l'application par défaut 157 00:10:46,550 --> 00:10:49,450 d'ouvrir les fichiers. c est parfois Emacs. 158 00:10:49,450 --> 00:10:54,660 Mais nous voulons traiter avec gedit, de sorte que vous pouvez faire est que vous pouvez faire un clic droit sur votre fichier C, 159 00:10:54,660 --> 00:11:04,580 allez dans Propriétés, Ouvrir avec, puis choisissez gedit, Définir par défaut, 160 00:11:04,580 --> 00:11:13,020 et maintenant votre programme devrait s'ouvrir dans gedit au lieu d'Emacs. 161 00:11:14,710 --> 00:11:16,290 Parfait. 162 00:11:17,120 --> 00:11:25,520 Donc ici, j'ai un programme que je veux imprimer chaque argument de ligne de commande. 163 00:11:25,520 --> 00:11:32,050 Donc, quoi que l'utilisateur saisit, je veux essentiellement le retourner de nouveau à eux sur une nouvelle ligne. 164 00:11:32,050 --> 00:11:36,710 Alors, quelle est la structure que nous pouvons utiliser pour itérer sur quelque chose - 165 00:11:36,710 --> 00:11:40,380 quelque chose que vous avez probablement utilisé dans votre 1 pset? 166 00:11:40,380 --> 00:11:45,840 Si vous souhaitez passer par un nombre défini de choses? >> [L'élève] boucle For. 167 00:11:45,840 --> 00:11:48,910 Pour la boucle. Exactement. Donc, nous allons commencer avec la boucle for. 168 00:11:48,910 --> 00:11:56,900 Nous avons pour int i = 0. Disons simplement commencer par une variable d'initialisation standard. 169 00:11:56,900 --> 00:12:02,370 Je vais quitter la condition d'un ensemble et dire ensuite: i + +, va faire des choses là-bas. 170 00:12:02,370 --> 00:12:04,090 Très bien. 171 00:12:04,090 --> 00:12:11,590 Donc, en repensant à argv, si argv est la liste des arguments passés dans le programme 172 00:12:11,590 --> 00:12:15,380 et argc est le nombre d'arguments dans le programme, 173 00:12:15,380 --> 00:12:21,280 cela signifie que argc est essentiellement la longueur de argv, droit, 174 00:12:21,280 --> 00:12:28,970 parce qu'il va y avoir autant d'arguments que la valeur de argc. 175 00:12:28,970 --> 00:12:35,910 Donc, si nous voulons effectuer une itération sur chaque élément de argv, 176 00:12:35,910 --> 00:12:43,290 nous allons vouloir à chaque fois accéder à la variable dans argv à l'index donné. 177 00:12:43,290 --> 00:12:49,060 Qui peut être représenté avec ça, non? 178 00:12:49,060 --> 00:12:53,430 Cette variable représente ici la chaîne que dans ce cas 179 00:12:53,430 --> 00:12:57,030 parce que c'est un tableau de chaînes - la chaîne particulière à cet index donné. 180 00:12:57,030 --> 00:13:00,690 Qu'est-ce qu'on veut faire, dans ce cas, nous voulons l'imprimer, alors disons que printf. 181 00:13:00,690 --> 00:13:04,680 Et maintenant, argv est une chaîne, alors nous voulons mettre cet espace réservé là-bas. 182 00:13:04,680 --> 00:13:08,430 Nous voulons une nouvelle ligne juste pour faire bien paraître. 183 00:13:08,430 --> 00:13:12,530 Nous avons donc ici une boucle pour. Nous n'avons pas encore la condition. 184 00:13:12,530 --> 00:13:20,020 Donc, je commence à 0, puis à chaque fois qu'il va imprimer la chaîne donnée 185 00:13:20,020 --> 00:13:22,980 à cet index particulier dans la matrice. 186 00:13:22,980 --> 00:13:28,410 Alors quand est-ce que nous voulons arrêter l'impression sur les éléments du tableau? 187 00:13:28,410 --> 00:13:35,720 Quand nous avons fini, non? Lorsque nous avons atteint la fin du tableau. 188 00:13:35,720 --> 00:13:38,870 Donc, nous ne voulons pas dépasser delà de la longueur du tableau, 189 00:13:38,870 --> 00:13:43,700 et nous savons déjà nous n'avons pas besoin de réellement savoir ce qui active la longueur de argv est 190 00:13:43,700 --> 00:13:47,520 car il nous est donné, et ce que c'est que ça? Argc. Exactement. 191 00:13:47,520 --> 00:13:56,640 Donc, nous voulons faire ce nombre argc processus de fois. 192 00:13:56,640 --> 00:13:59,550 Je ne suis pas dans le bon répertoire. 193 00:14:02,100 --> 00:14:03,490 Très bien. 194 00:14:03,490 --> 00:14:08,990 Maintenant, nous allons faire args. Pas d'erreur, ce qui est optimal. 195 00:14:08,990 --> 00:14:11,430 Alors disons simplement exécuter args. 196 00:14:11,430 --> 00:14:15,130 Quel est ce va revenir pour nous? Il va tout simplement de l'imprimer en arrière. 197 00:14:15,130 --> 00:14:18,320 "Vous args entré dans le programme, je vais le remettre à vous." 198 00:14:18,320 --> 00:14:23,170 Alors disons que nous voulons dire args alors foo bar. 199 00:14:23,170 --> 00:14:26,570 Alors il l'imprime de nouveau à nous. Tout va bien? 200 00:14:26,570 --> 00:14:30,790 Il ya donc un exemple de la façon dont vous pouvez utiliser argc et argv 201 00:14:30,790 --> 00:14:33,460 sachant que argc représente la longueur de argv. 202 00:14:33,460 --> 00:14:42,750 Assurez-vous que vous n'avez pas toujours accès aux tableaux un au-delà de la longueur du tableau 203 00:14:42,750 --> 00:14:45,140 parce que C va certainement crier à vous. 204 00:14:45,140 --> 00:14:47,560 Vous obtiendrez quelque chose appelée faute de segmentation, 205 00:14:47,560 --> 00:14:52,470 qui n'est jamais amusant, revient à dire que vous essayez d'accéder à quelque chose 206 00:14:52,470 --> 00:14:55,000 qui n'existe pas, ne vous appartient pas. 207 00:14:55,000 --> 00:14:59,430 Donc, assurez-, et surtout avec le zéro indexation, nous ne voulons pas - 208 00:14:59,430 --> 00:15:02,390 Comme par exemple, si nous avons un tableau de longueur 4, 209 00:15:02,390 --> 00:15:07,240 que l'index 4 tableau n'existe pas parce que nous commençons à 0, à zéro index. 210 00:15:07,240 --> 00:15:11,730 Il deviendra une seconde nature, tout comme pour les boucles quand on commence à 0. 211 00:15:11,730 --> 00:15:13,610 Il suffit donc de garder cela à l'esprit. 212 00:15:13,610 --> 00:15:22,590 Vous ne voulez pas toujours accéder à l'index d'un tableau qui est hors de votre portée. 213 00:15:26,710 --> 00:15:32,560 Ainsi, nous pouvons maintenant voir comment nous pouvons type d'accès 214 00:15:32,560 --> 00:15:35,930 les arguments de ligne de commande qui sont passés po 215 00:15:35,930 --> 00:15:41,330 Mais comme vous avez vu la chaîne, le argv est en fait un tableau de chaînes. 216 00:15:41,330 --> 00:15:45,740 Donc, ce n'est pas vraiment un entier encore, mais dans César nous voulons traiter avec des nombres entiers. 217 00:15:45,740 --> 00:15:54,430 Heureusement, il existe une fonction créée pour nous qui peut réellement convertir une chaîne en un entier. 218 00:15:54,430 --> 00:15:58,710 Aussi ici nous ne traitons pas avec l'entrée d'utilisateur où nous les incitant 219 00:15:58,710 --> 00:16:03,740 pour l'entrée ici pour la clé, donc nous ne pouvons pas réellement Nouvelle invite en disant: 220 00:16:03,740 --> 00:16:07,840 "Oh, donnez-moi un autre nombre entier, par exemple, si elle n'est pas valide." 221 00:16:07,840 --> 00:16:10,540 Mais nous avons encore besoin de vérifier pour une utilisation correcte. 222 00:16:10,540 --> 00:16:13,520 Dans César, ils ne sont autorisés à passer en numéro 1, 223 00:16:13,520 --> 00:16:18,030 et donc ils ont à exécuter. / César et alors ils doivent vous donner un numéro. 224 00:16:18,030 --> 00:16:23,660 Donc argc doit y avoir un certain nombre. 225 00:16:23,660 --> 00:16:29,060 Quel numéro ce que ce serait si elles doivent passer de vous. / César puis sur une touche? 226 00:16:29,060 --> 00:16:32,920 Qu'est-ce que argc? >> [L'élève] 2. Deux >>. Exactement. 227 00:16:32,920 --> 00:16:35,490 Donc, vous voulez vous assurer que argc est 2. 228 00:16:35,490 --> 00:16:39,620 Sinon, vous avez essentiellement refuser d'exécuter le programme. 229 00:16:39,620 --> 00:16:43,040 Dans main, c'est une fonction qui dit int main, 230 00:16:43,040 --> 00:16:47,360 oui, alors nous avons toujours à 0 la pratique bon retour à la fin d'un programme réussi. 231 00:16:47,360 --> 00:16:50,840 Donc, si, par exemple, ils vous donnent 3 arguments de ligne de commande au lieu de 2 232 00:16:50,840 --> 00:16:54,350 ou vous donner 1, par exemple, alors qu'est-ce que vous allez faire, c'est que vous aurez envie de vérifier que 233 00:16:54,350 --> 00:16:59,900 puis retourner 1 dire, non, je ne peux pas procéder à ce programme. 234 00:16:59,900 --> 00:17:03,190 [L'élève] Il ne peut pas être un espace dans votre texte. >> Pardon? 235 00:17:03,190 --> 00:17:06,780 [L'élève] Il ne peut pas être un espace dans le texte que vous essayez de crypter. 236 00:17:06,780 --> 00:17:08,480 Ah! 237 00:17:08,480 --> 00:17:11,280 Pour ce qui est du texte que nous essayons de chiffrer, qui provient en fait plus tard 238 00:17:11,280 --> 00:17:13,970 lorsque nous donnons ce texte. 239 00:17:13,970 --> 00:17:18,260 Donc maintenant nous sommes juste accepter comme arguments de la commande le nombre, 240 00:17:18,260 --> 00:17:21,579 l'évolution réelle pour le cryptage de César. 241 00:17:21,579 --> 00:17:27,569 [L'élève] Pourquoi avez-vous besoin de 2 au lieu de seulement 1 argc? Il ya certainement numéro 1. 242 00:17:27,569 --> 00:17:32,200 Droite. La raison pour laquelle nous avons besoin de 2 pour argc au lieu de 1 243 00:17:32,200 --> 00:17:36,260 C'est parce que quand vous exécutez un programme et dire. / césar ou. / bonjour, 244 00:17:36,260 --> 00:17:38,280 qui compte réellement comme un argument de ligne de commande. 245 00:17:38,280 --> 00:17:43,020 Alors qui prend déjà en hausse de 1 et ainsi de suite, puis nous saisir 1 extra. 246 00:17:45,030 --> 00:17:49,440 Alors vous êtes saisie en fait une chaîne dans l'argument de ligne de commande. 247 00:17:49,440 --> 00:17:52,730 Qu'est-ce que vous voulez faire, car César nous voulons faire face à un nombre entier, 248 00:17:52,730 --> 00:17:57,180 de sorte que vous pouvez utiliser cette fonction atoi. 249 00:17:57,180 --> 00:18:02,850 Et dans le fond, vous lui passez dans une chaîne, puis il vous retourner un entier 250 00:18:02,850 --> 00:18:06,070 si c'est possible de faire cette chaîne en un entier. 251 00:18:06,070 --> 00:18:10,960 Maintenant, souvenez quand nous avons affaire à des choses printf ou GetString, comme ça, 252 00:18:10,960 --> 00:18:13,390 nous incluons les bibliothèques qui sont spécifiques à nous. 253 00:18:13,390 --> 00:18:19,450 Donc, au début, nous commençons par une norme hash tag I / O,. H, quelque chose comme ça. 254 00:18:19,450 --> 00:18:22,430 Eh bien, atoi n'est pas dans l'une de ces bibliothèques, 255 00:18:22,430 --> 00:18:26,600 donc ce que nous avons à faire, c'est qu'il faut inclure la bibliothèque juste pour cela. 256 00:18:26,600 --> 00:18:32,720 Donc, retour à rappeler Procédure pas à pas 1 où j'ai discuté de la fonction manuelle. 257 00:18:32,720 --> 00:18:37,110 Vous tapez l'homme dans votre terminal, puis suivie par le nom d'une fonction. 258 00:18:37,110 --> 00:18:39,720 Et pour que fera apparaître une liste complète de son utilisation, 259 00:18:39,720 --> 00:18:42,890 mais ainsi il mettra en place qui appartient à la bibliothèque qui. 260 00:18:42,890 --> 00:18:47,000 Donc, je vais laisser ça à vous d'utiliser la fonction manuelle avec atoi 261 00:18:47,000 --> 00:18:53,360 et de déterminer dans quelle bibliothèque vous devez inclure pour être en mesure d'utiliser la fonction atoi. 262 00:18:54,450 --> 00:18:57,670 Donc, nous avons la clé et maintenant il s'agit d'obtenir le texte en clair, 263 00:18:57,670 --> 00:19:01,820 et que va réellement être saisie de l'utilisateur dans lequel vous inviter. 264 00:19:01,820 --> 00:19:05,540 Nous avons abordé getInt et GetFloat, et ainsi dans la même veine 265 00:19:05,540 --> 00:19:07,670 nous allons avoir affaire à GetString. 266 00:19:07,670 --> 00:19:12,440 Mais dans ce cas, nous n'avons pas besoin de faire tout do while ou while pour vérifier. 267 00:19:12,440 --> 00:19:14,480 GetString va certainement nous donner une chaîne, 268 00:19:14,480 --> 00:19:17,630 et nous allons chiffrer ce que l'utilisateur nous donne. 269 00:19:17,630 --> 00:19:23,770 Ainsi, vous pouvez supposer que l'ensemble de ces chaînes utilisateur saisies sont correctes. 270 00:19:23,770 --> 00:19:24,670 Grande. 271 00:19:24,670 --> 00:19:27,270 Alors une fois que vous avez la clé et une fois que vous avez le texte, 272 00:19:27,270 --> 00:19:31,660 maintenant ce qui reste est que vous devez chiffrer le texte en clair. 273 00:19:31,660 --> 00:19:36,530 Juste pour couvrir rapidement sur jargon, en clair est ce que l'utilisateur accorde à vous, 274 00:19:36,530 --> 00:19:41,030 et le cryptogramme est ce que vous revenez à eux. 275 00:19:42,450 --> 00:19:45,850 Donc, cordes, pour être en mesure de passer par réellement lettre par lettre 276 00:19:45,850 --> 00:19:48,550 parce que nous avons à passer chaque lettre, 277 00:19:48,550 --> 00:19:51,390 nous comprenons que les chaînes, si l'on sorte de décoller la couche, 278 00:19:51,390 --> 00:19:54,130 on voit qu'ils sont vraiment une liste de caractères. 279 00:19:54,130 --> 00:19:55,930 On arrive après les autres. 280 00:19:55,930 --> 00:20:01,690 Et afin que nous puissions traiter cordes comme des tableaux, parce qu'ils sont des tableaux de caractères. 281 00:20:01,690 --> 00:20:05,640 Donc, disons que vous avez une chaîne nommée texte, 282 00:20:05,640 --> 00:20:09,400 et, dans ce texte variable est stockée C'est CS50. 283 00:20:09,400 --> 00:20:15,680 Puis texte à l'index 0 serait un T majuscule, indice 1 serait h, etc 284 00:20:17,530 --> 00:20:23,970 Et puis, avec des tableaux, dans l'exemple argc dans args.c, 285 00:20:23,970 --> 00:20:27,090 nous avons vu que nous avons dû parcourir un tableau 286 00:20:27,090 --> 00:20:32,440 et nous avons donc dû parcourir à partir de i = 0 jusqu'à i est inférieure à la longueur. 287 00:20:32,440 --> 00:20:35,560 Nous avons donc besoin d'un moyen de comprendre ce que la longueur de notre chaîne est 288 00:20:35,560 --> 00:20:37,090 si nous allons itérer sur celui-ci. 289 00:20:37,090 --> 00:20:42,300 Heureusement, encore une fois, il ya une fonction là pour nous, bien que plus tard dans la CS50 290 00:20:42,300 --> 00:20:45,860 vous aurez certainement être en mesure de mettre en œuvre et faire votre propre fonction 291 00:20:45,860 --> 00:20:48,260 qui peut calculer la longueur d'une chaîne. 292 00:20:48,260 --> 00:20:52,120 Mais pour l'instant, nous allons utiliser la longueur de chaîne, de sorte strlen. 293 00:20:52,120 --> 00:21:00,440 Vous passez une chaîne, puis il reviendra vous un int qui représente la longueur de votre chaîne. 294 00:21:00,440 --> 00:21:05,840 Regardons un exemple de la façon dont nous pourrions être en mesure d'effectuer une itération sur chaque caractère dans une chaîne 295 00:21:05,840 --> 00:21:08,470 et faire quelque chose avec ça. 296 00:21:08,470 --> 00:21:13,250 Ce qu'on veut faire, c'est une itération sur chaque caractère de la chaîne, 297 00:21:13,250 --> 00:21:19,150 et ce que nous voulons faire, c'est de nous imprimer retour chaque caractère 1 par 1 298 00:21:19,150 --> 00:21:22,060 sauf que nous ajouter quelque chose à côté de lui. 299 00:21:22,060 --> 00:21:27,020 Donc, nous allons commencer avec la boucle for. Int i = 0. 300 00:21:27,020 --> 00:21:30,070 Nous allons laisser de l'espace pour la condition. 301 00:21:32,700 --> 00:21:36,840 Nous voulons itérer jusqu'à ce que nous arrivons à la fin de la chaîne, non? 302 00:21:36,840 --> 00:21:41,340 Alors quelle fonction nous donne la longueur de la chaîne? 303 00:21:41,340 --> 00:21:43,160 [Réponse de l'élève inaudible] 304 00:21:43,160 --> 00:21:46,420 C'est la longueur des arguments de ligne de commande. 305 00:21:46,420 --> 00:21:50,650 Mais pour une chaîne que nous voulons utiliser une fonction qui nous donne la longueur de la chaîne. 306 00:21:50,650 --> 00:21:53,090 Donc, c'est la longueur de chaîne. 307 00:21:53,090 --> 00:21:57,130 Et oui, alors vous devez passer une chaîne devant elle. 308 00:21:57,130 --> 00:21:59,760 Il a besoin de savoir quelle est la chaîne dont il a besoin pour calculer la longueur d'. 309 00:21:59,760 --> 00:22:03,160 Alors dans ce cas, nous avons affaire avec la chaîne s. 310 00:22:04,790 --> 00:22:05,860 Grande. 311 00:22:05,860 --> 00:22:10,770 Alors ce que nous voulons faire, nous allons printf. 312 00:22:10,770 --> 00:22:14,850 Maintenant, nous voulons traiter avec des personnages. Nous voulons imprimer chaque caractère individuel. 313 00:22:14,850 --> 00:22:22,150 Lorsque vous voulez imprimer un flotteur, vous devez utiliser l'espace réservé comme f%. 314 00:22:22,150 --> 00:22:24,580 Avec un int vous pouvez utiliser% d. 315 00:22:24,580 --> 00:22:30,890 Et ainsi de même, avec un personnage que vous utilisez c% à dire que je vais être l'impression d'un caractère 316 00:22:30,890 --> 00:22:34,570 qui est stocké dans une variable. 317 00:22:34,570 --> 00:22:40,840 Nous avons donc cela, et nous allons ajouter un point et un espace à elle. 318 00:22:40,840 --> 00:22:45,430 Quel personnage utilisons-nous? 319 00:22:45,430 --> 00:22:49,780 Nous allons utiliser ce que nous sommes au caractère de la chaîne. 320 00:22:49,780 --> 00:22:52,890 Alors nous allons utiliser quelque chose avec de la ficelle, 321 00:22:52,890 --> 00:22:56,420 mais nous voulons être accéder au caractère certain là-bas. 322 00:22:56,420 --> 00:23:02,740 Donc, si une chaîne est juste un tableau, alors comment pouvons-nous accéder à des éléments de tableaux? 323 00:23:02,740 --> 00:23:06,480 Nous avons ces crochets, et puis nous avons mis l'index à l'intérieur. 324 00:23:06,480 --> 00:23:11,820 Nous avons donc entre crochets. Notre indice dans ce cas, nous pouvons simplement utiliser i. Exactement. 325 00:23:15,290 --> 00:23:22,370 Donc, ici, nous disons que nous allons impression d'un caractère suivi d'un point et un espace, 326 00:23:22,370 --> 00:23:30,870 et ce caractère va être la lettre i dans notre chaîne s. 327 00:23:32,920 --> 00:23:39,330 Je vais sauver ce. D'accord. 328 00:23:42,510 --> 00:23:46,840 Maintenant, je vais courir longueur de la chaîne. 329 00:23:46,840 --> 00:23:53,440 Nous avons donc eu une chaîne appelée OMG, et maintenant il est souligné encore plus. 330 00:23:53,440 --> 00:23:57,870 De la même façon, disons que nous voulons réellement obtenir une chaîne à l'utilisateur. 331 00:23:57,870 --> 00:23:59,580 Comment pourrions-nous faire cela? 332 00:23:59,580 --> 00:24:01,610 Avant, comment sommes-nous arrivés un int? 333 00:24:01,610 --> 00:24:08,040 Nous avons dit getInt, non? Mais ce n'est pas int, nous allons donc GetString. 334 00:24:11,780 --> 00:24:17,770 Faisons en sorte que la longueur de chaîne. Ici, nous n'avons pas entrer dans une invite spécifique. 335 00:24:17,770 --> 00:24:19,940 Donc je ne sais pas. 336 00:24:19,940 --> 00:24:23,820 Je vais mettre mon nom ici, et si je peux faire une de ces choses 337 00:24:23,820 --> 00:24:29,600 où je affecter un mot pour chaque lettre ou quelque chose comme cela. Cool. 338 00:24:29,600 --> 00:24:31,900 Donc, c'est la longueur de chaîne. 339 00:24:33,000 --> 00:24:34,640 Nous sommes donc à César. 340 00:24:34,640 --> 00:24:38,620 Nous avons quelques outils sur la façon dont nous itérer sur une chaîne, 341 00:24:38,620 --> 00:24:41,250 comment nous accéder à chaque élément individuel. 342 00:24:41,250 --> 00:24:44,720 Alors maintenant, nous pouvons revenir au programme. 343 00:24:44,720 --> 00:24:48,650 Comme je l'ai mentionné précédemment, dans la table ASCII, votre meilleur ami, 344 00:24:48,650 --> 00:24:52,300 vous allez voir les numéros qui sont associés à chaque lettre. 345 00:24:52,300 --> 00:24:55,900 Voici donc dire que notre texte en clair, c'est que je suis étourdi! 346 00:24:55,900 --> 00:25:01,090 Ensuite, chacun de ces personnages va avoir un certain nombre et la valeur ASCII associé, 347 00:25:01,090 --> 00:25:04,710 même l'apostrophe, même l'espace, même le point d'exclamation, 348 00:25:04,710 --> 00:25:06,600 de sorte que vous aurez envie de garder cela à l'esprit. 349 00:25:06,600 --> 00:25:12,360 Alors que notre touche que l'utilisateur inclus dans leur argument de ligne de commande est de 6. 350 00:25:12,360 --> 00:25:17,770 Des moyens pour que la première lettre, qui est I, qui est représenté par 73, 351 00:25:17,770 --> 00:25:25,610 Pour revenir à ce que leur lettre est représentée par la valeur ASCII de 73 + 6. 352 00:25:25,610 --> 00:25:29,020 Dans ce cas, ce serait 79. 353 00:25:30,840 --> 00:25:35,040 Maintenant, nous voulons aller au caractère suivant. 354 00:25:35,040 --> 00:25:40,960 Donc, la prochaine index 1 du texte en clair serait l'apostrophe. 355 00:25:40,960 --> 00:25:46,780 Mais rappelez-vous, nous voulons seulement pour chiffrer les lettres. 356 00:25:46,780 --> 00:25:50,040 Donc, nous voulons faire en sorte que l'apostrophe reste en fait le même, 357 00:25:50,040 --> 00:25:54,310 que nous ne changeons pas de 39 à quelque 45 est. 358 00:25:54,310 --> 00:25:57,150 Nous voulons le garder comme une apostrophe. 359 00:25:57,150 --> 00:26:00,780 Donc, nous voulons nous souvenir de ne chiffrer les lettres 360 00:26:00,780 --> 00:26:04,560 parce que nous voulons que tous les autres symboles rester inchangé dans notre programme. 361 00:26:04,560 --> 00:26:07,130 Une autre chose que nous voulons est de préserver la capitalisation. 362 00:26:07,130 --> 00:26:10,250 Alors, quand vous avez une lettre majuscule, il devrait rester comme une majuscule. 363 00:26:10,250 --> 00:26:12,830 Lowercases devrait rester comme des minuscules. 364 00:26:13,620 --> 00:26:19,480 Ainsi, certaines fonctions utiles pour être en mesure de faire face à lettres seulement chiffrement 365 00:26:19,480 --> 00:26:22,380 préserver et maintenir la capitalisation des choses 366 00:26:22,380 --> 00:26:25,130 sont les fonctions IsLower IsAlpha, isupper,. 367 00:26:25,130 --> 00:26:29,270 Et si ce sont des fonctions qui retournent une valeur booléenne vous. 368 00:26:29,270 --> 00:26:34,180 Fondamentalement, vraie ou fausse. Est-ce une majuscule? Est-ce alphanumérique? 369 00:26:34,180 --> 00:26:37,180 Est-ce une lettre, essentiellement. 370 00:26:37,180 --> 00:26:41,070 Donc, voici 3 exemples de la façon dont vous utilisez cette fonction. 371 00:26:41,070 --> 00:26:47,060 Fondamentalement, vous pouvez tester si la valeur retournée par cette fonction est vraie ou fausse 372 00:26:47,060 --> 00:26:49,400 sur la base de cette entrée. 373 00:26:49,400 --> 00:26:54,880 Soit faire quelque chose de pas chiffrer ou crypter ou assurez-vous que c'est en majuscules, etc 374 00:26:54,880 --> 00:27:01,080 [L'élève] Pouvez-vous expliquer un peu plus ceux et comment les utiliser? >> Oui, bien sûr. 375 00:27:01,080 --> 00:27:08,470 Donc, si nous regardons en arrière, nous avons ici un I majuscule, non? 376 00:27:08,470 --> 00:27:14,550 Nous savons donc que je passe à O parce que je + 6 est O. 377 00:27:14,550 --> 00:27:18,740 Mais nous voulons nous assurer que ce O va être une capitale O. 378 00:27:18,740 --> 00:27:22,940 Donc, en gros, qui est une sorte de va changer notre entrée. 379 00:27:22,940 --> 00:27:26,870 Donc, que ce soit en majuscules ou ne pas vouloir sorte de changer la façon dont nous traitons avec elle. 380 00:27:26,870 --> 00:27:32,360 Alors, si nous utilisons la fonction isupper sur cet indice particulier, 381 00:27:32,360 --> 00:27:36,480 si isupper ("I"), qui renvoie vrai pour nous, afin que nous sachions que c'est supérieur. 382 00:27:36,480 --> 00:27:40,360 Alors sur cette base, plus tard, nous irons dans une formule 383 00:27:40,360 --> 00:27:42,750 que vous allez utiliser pour changer les choses de César, 384 00:27:42,750 --> 00:27:46,560 oui, alors, fondamentalement, il va y avoir une formule légèrement différente si elle est en majuscules 385 00:27:46,560 --> 00:27:50,670 par opposition aux minuscules. Donner un sens? 386 00:27:51,020 --> 00:27:52,760 Ouais. Pas de soucis. 387 00:27:54,900 --> 00:27:58,990 J'ai parlé un peu sur l'ajout de 6 à une lettre, qui n'est pas tout à fait logique 388 00:27:58,990 --> 00:28:05,500 sauf quand on sorte de comprendre que ces caractères 389 00:28:05,500 --> 00:28:08,920 sont un peu interchangeables avec des nombres entiers. 390 00:28:08,920 --> 00:28:11,250 Ce que nous faisons, c'est que nous sorte de casting utilisation implicite. 391 00:28:11,250 --> 00:28:18,100 Nous allons passer à jeter un peu plus tard où vous prenez une valeur et que vous mettez dans un autre type 392 00:28:18,100 --> 00:28:20,440 qu'à l'origine. 393 00:28:20,440 --> 00:28:25,910 Mais avec cette pset nous serons en mesure d'utiliser de manière interchangeable type de caractères 394 00:28:25,910 --> 00:28:30,880 et correspondant à leurs valeurs entières. 395 00:28:30,880 --> 00:28:35,140 Donc, si vous avez simplement envelopper un personnage avec seulement les apostrophes, 396 00:28:35,140 --> 00:28:40,390 alors vous serez en mesure de travailler avec elle pour les entiers, le traitant comme un entier. 397 00:28:40,390 --> 00:28:48,040 Ainsi, le C majuscule se rapporte à 67. F minuscule porte à 102. 398 00:28:48,040 --> 00:28:51,480 Encore une fois, si vous voulez connaître ces valeurs, regardez à votre table ASCII. 399 00:28:51,480 --> 00:28:56,160 Alors allons-y dans des exemples de la façon dont vous pourriez être en mesure de soustraire et d'ajouter, 400 00:28:56,160 --> 00:29:03,130 comment vous pouvez en fait vraiment travailler avec ces personnages, de les utiliser de manière interchangeable. 401 00:29:03,870 --> 00:29:11,350 Je dis que ASCIIMath va calculer l'ajout d'un personnage à un nombre entier 402 00:29:11,350 --> 00:29:17,590 puis affiche le caractère obtenu ainsi que la valeur résultante ASCII. 403 00:29:17,590 --> 00:29:22,290 Et alors voici ce que je dis - we'll accord avec cette partie plus tard - 404 00:29:22,290 --> 00:29:29,100 mais au fond, je veux dire que l'utilisateur doit dire ASCIIMath courir avec une clé, 405 00:29:29,100 --> 00:29:30,880 et je dis que cette clé va être le nombre 406 00:29:30,880 --> 00:29:34,600 avec laquelle nous allons ajouter ce personnage. 407 00:29:34,600 --> 00:29:38,560 Voici donc remarqué que depuis que je suis exigeant une clé, 408 00:29:38,560 --> 00:29:40,590 puisque je suis exigeant qu'ils me donnent 1 chose, 409 00:29:40,590 --> 00:29:45,600 Je tiens seulement à accepter. / Asciimath et une clé. 410 00:29:45,600 --> 00:29:49,330 Donc, je vais demander que argc est égal à 2. 411 00:29:49,330 --> 00:29:54,360 Si ce n'est pas le cas, alors je vais retourner 1 et le programme se terminera. 412 00:29:55,070 --> 00:29:58,540 Alors, je dis la clé ne va pas être l'argument première commande en ligne, 413 00:29:58,540 --> 00:30:05,080 ça va être la deuxième, et comme vous le voyez ici, 414 00:30:05,080 --> 00:30:11,790 Je vais le transformer en un entier. 415 00:30:15,740 --> 00:30:19,230 Alors je vais mettre un caractère à r. 416 00:30:19,230 --> 00:30:23,970 Notez que le type de la variable chr est en fait un entier. 417 00:30:23,970 --> 00:30:30,480 La façon dont je suis capable d'utiliser r comme un entier est en l'enveloppant avec ces apostrophes. 418 00:30:33,850 --> 00:30:40,560 Mais revenons à notre instruction printf où nous avons un espace réservé pour un caractère 419 00:30:40,560 --> 00:30:43,590 puis un espace réservé pour un nombre entier, 420 00:30:43,590 --> 00:30:49,450 le caractère est représenté par la CHR, et le nombre entier est la clé. 421 00:30:49,450 --> 00:30:54,320 Et alors nous allons en conséquence ajouter les 2 ensemble. 422 00:30:54,320 --> 00:30:58,420 Donc, nous allons ajouter r + quelle que soit la clé est 423 00:30:58,420 --> 00:31:03,520 puis nous allons imprimer le résultat de cela. 424 00:31:06,210 --> 00:31:14,220 Faisons donc asciimath. C'est à ce jour, nous allons donc il suffit d'exécuter asciimath. 425 00:31:14,220 --> 00:31:18,290 Oh, mais le voir, il ne fait rien parce que nous n'avons pas réellement lui donner une touche. 426 00:31:18,290 --> 00:31:23,850 Alors, quand il rentre tout juste 1, notre fonction principale, c'est juste de rentrer de nouveau à nous. 427 00:31:23,850 --> 00:31:29,250 Alors nous allons passer à une clé. Quelqu'un me donner un numéro. >> [L'élève] 4. 428 00:31:29,250 --> 00:31:30,920 4. D'accord. 429 00:31:30,920 --> 00:31:39,280 Donc r a augmenté de 4 va nous donner v, ce qui correspond à la valeur ASCII de 118. 430 00:31:39,280 --> 00:31:43,880 Alors qu'il sorte de logique que - 431 00:31:43,880 --> 00:31:51,250 En fait, je peux vous demander, qu'est-ce que vous pensez que la valeur ASCII de r est si r + 4 est de 118? 432 00:31:53,070 --> 00:31:55,470 Alors ouais, r est de 114. 433 00:31:55,470 --> 00:32:03,010 Donc, si vous regardez sur la table ASCII puis, bien sûr, vous allez voir que r est représentée par 114. 434 00:32:03,010 --> 00:32:08,610 Alors, maintenant que nous savons que nous pouvons ajouter des entiers de caractères, cela semble assez simple. 435 00:32:08,610 --> 00:32:12,740 Nous allons juste pour itérer sur une chaîne comme nous l'avons vu dans l'exemple précédent. 436 00:32:12,740 --> 00:32:17,170 Nous allons vérifier si c'est une lettre. 437 00:32:17,170 --> 00:32:20,420 Si c'est le cas, nous allons le passer par tout l'essentiel est. 438 00:32:20,420 --> 00:32:23,650 Assez simple, sauf quand vous arrivez à aimer ça, 439 00:32:23,650 --> 00:32:32,140 vous voyez que z, représenté par 122, puis vous donnerait un caractère différent. 440 00:32:32,140 --> 00:32:37,770 En fait, nous voulons rester dans notre alphabet, non? 441 00:32:37,770 --> 00:32:43,180 Nous devons donc trouver un moyen de type d'emballage autour. 442 00:32:43,180 --> 00:32:47,190 Lorsque vous atteignez zed et que vous voulez augmenter d'un certain nombre, 443 00:32:47,190 --> 00:32:51,230 vous ne voulez pas aller au-delà dans la section alphabet ASCII; 444 00:32:51,230 --> 00:32:54,140 vous voulez habiller arrière tout le chemin vers A. 445 00:32:54,140 --> 00:32:58,550 Mais gardez à l'esprit que vous êtes toujours en préservant le cas. 446 00:32:58,550 --> 00:33:00,980 Donc, sachant que les lettres ne peuvent pas devenir des symboles 447 00:33:00,980 --> 00:33:05,290 tout comme les symboles ne sont pas va changer aussi. 448 00:33:05,290 --> 00:33:08,170 Dans le pset dernier n'a certainement pas besoin, 449 00:33:08,170 --> 00:33:14,310 mais une option est de mettre en œuvre votre pset gourmand en utilisant la fonction module. 450 00:33:14,310 --> 00:33:17,230 Mais maintenant, nous allons en fait besoin d'utiliser le module, 451 00:33:17,230 --> 00:33:19,900 donc on va plutôt aller sur ce morceau un peu. 452 00:33:19,900 --> 00:33:26,920 Essentiellement, quand vous avez x modulo y, qui vous donne le reste de x divisé par y. 453 00:33:26,920 --> 00:33:30,930 Voici quelques exemples ici. Nous avons 27% 15. 454 00:33:30,930 --> 00:33:36,200 Fondamentalement, lorsque vous soustraire 15 de 27, autant de fois que possible sans obtenir négatif 455 00:33:36,200 --> 00:33:39,060 alors vous obtenez 12 gauche au-dessus. 456 00:33:39,060 --> 00:33:44,650 Donc, c'est un peu comme dans le cadre des mathématiques, mais comment pouvons-nous réellement l'utiliser? 457 00:33:44,650 --> 00:33:47,100 Ça va être utile pour notre Cache-coeur. 458 00:33:47,100 --> 00:33:55,420 Pour ce faire, disons juste que je vous ai demandé tout à diviser en 3 groupes. 459 00:33:55,420 --> 00:33:58,010 Parfois, vous faites cela dans des groupes et des choses comme ça. 460 00:33:58,010 --> 00:34:01,320 Disons que j'ai dit, "Ok, je veux que vous tous d'être divisé en 3." 461 00:34:01,320 --> 00:34:04,240 Comment pourriez-vous faire cela? 462 00:34:04,240 --> 00:34:06,810 [Réponse de l'élève inaudible] Oui, exactement. Comptez. D'accord. 463 00:34:06,810 --> 00:34:10,260 Nous allons effectivement le faire. Voulez-vous commencer? 464 00:34:10,260 --> 00:34:13,810 [Les étudiants compter off] 1, 2, 3, 4. 465 00:34:13,810 --> 00:34:16,620 Mais rappelez-vous ... >> [L'élève] Oh, désolé. 466 00:34:16,620 --> 00:34:18,730 C'est un très bon point. 467 00:34:18,730 --> 00:34:24,130 Vous avez dit 4, mais en fait nous voulons vous dire 1 parce que nous ne voulons 3 groupes. 468 00:34:24,130 --> 00:34:30,159 Alors, comment - Non, c'est un très bon exemple, car alors comment pourriez-vous dire 1? 469 00:34:30,159 --> 00:34:33,370 Quel est le lien entre 4 et 1? 470 00:34:33,370 --> 00:34:36,760 Eh bien, 4 mod 3 est 1. 471 00:34:36,760 --> 00:34:41,460 Donc, si vous continuez, vous seriez 2. 472 00:34:41,460 --> 00:34:44,540 Nous avons donc 1, 2, 3, 1, 2. 473 00:34:44,540 --> 00:34:49,420 Encore une fois, vous êtes en fait la 5ème personne. Comment savez-vous à dire 2 au lieu de 5? 474 00:34:49,420 --> 00:34:53,760 Vous dites que 5 mod 3 est 2. 475 00:34:53,760 --> 00:34:59,100 Je veux voir combien de groupes de 3 sont en reste, alors que pour Moi 476 00:34:59,100 --> 00:35:02,860 Et alors, si nous avons continué le long de la salle entière, 477 00:35:02,860 --> 00:35:07,760 alors nous verrions que nous sommes toujours à appliquer effectivement la fonction mod de nous 478 00:35:07,760 --> 00:35:09,990 à type de décompter. 479 00:35:09,990 --> 00:35:14,490 C'est un plus genre d'exemple concret de la façon dont vous pouvez utiliser modulo 480 00:35:14,490 --> 00:35:17,960 parce que je suis sûr que la plupart d'entre nous ont probablement passé par ce processus 481 00:35:17,960 --> 00:35:19,630 où nous avons eu à décompter. 482 00:35:19,630 --> 00:35:21,840 Toute question concernant modulo? 483 00:35:21,840 --> 00:35:25,360 Il sera très important de comprendre les concepts de cela, 484 00:35:25,360 --> 00:35:28,640 donc je veux m'assurer que vous les gars à comprendre. 485 00:35:28,640 --> 00:35:34,660 [Étudiant] S'il n'y a pas de reste, elle vous donne le nombre réel? 486 00:35:34,660 --> 00:35:40,430 Si l'un des 3 premiers d'entre eux l'avait fait, il aurait pu leur donner ce qu'ils étaient réellement, 487 00:35:40,430 --> 00:35:43,310 ou aurait-il donné [inaudible] >> C'est une bonne question. 488 00:35:43,310 --> 00:35:48,750 Quand il n'y a pas de reste pour le modulo - afin que vous ayez 6 mod 3 - 489 00:35:48,750 --> 00:35:52,340 qui donne vraiment vous sauvegardez 0. 490 00:35:53,670 --> 00:35:57,290 Nous en reparlerons un peu plus tard. 491 00:35:58,810 --> 00:36:07,720 Oh oui, par exemple, la 3ème personne - 3 mod 3 est en fait 0, mais elle a dit 3. 492 00:36:07,720 --> 00:36:14,900 Donc, c'est un peu comme une prise intérieure, par exemple, 493 00:36:14,900 --> 00:36:17,620 comme correct, si le mod est 0, alors je vais être la 3ème personne. 494 00:36:17,620 --> 00:36:22,740 Mais nous y reviendrons dans une sorte de savoir comment nous pourrions faire face à ce 0 est tard. 495 00:36:22,740 --> 00:36:32,750 Alors maintenant, nous ont en quelque sorte une manière de cartographier la zed à la bonne lettre. 496 00:36:32,750 --> 00:36:34,920 Alors maintenant, nous sommes passés à travers ces exemples, 497 00:36:34,920 --> 00:36:37,880 nous sorte de voir comment César pourrait fonctionner. 498 00:36:37,880 --> 00:36:42,640 Vous voyez les 2 alphabets et puis vous voyez les déplacer. 499 00:36:42,640 --> 00:36:44,430 Essayons donc d'exprimer et que, en termes de formule. 500 00:36:44,430 --> 00:36:46,940 Cette formule est en fait donnée à vous dans la spécification, 501 00:36:46,940 --> 00:36:52,070 Mais soyons genre de look grâce à ce que chaque variable signifie. 502 00:36:52,070 --> 00:36:55,000 Notre résultat final va être le texte chiffré. 503 00:36:55,000 --> 00:36:58,300 Donc, ce que dit le ième caractère du texte chiffré 504 00:36:58,300 --> 00:37:02,500 va correspondre à la ième caractère du texte en clair. 505 00:37:02,500 --> 00:37:08,130 C'est logique, car nous voulons toujours faire la queue ces choses. 506 00:37:08,130 --> 00:37:13,480 Donc, il va y avoir le ième caractère de la k chiffré en plus, ce qui est la clé de notre - 507 00:37:13,480 --> 00:37:17,230 qui fait sens - et puis nous avons ce mod 26. 508 00:37:17,230 --> 00:37:19,860 Rappelez-vous l'époque où nous avons eu l'zed 509 00:37:19,860 --> 00:37:24,190 nous ne voulions pas rentrer dans le personnage, donc nous voulions le mod 510 00:37:24,190 --> 00:37:26,540 et le type d'enveloppe autour de l'alphabet. 511 00:37:26,540 --> 00:37:33,430 Après zed vous iriez à a, b, c, d, jusqu'à ce que tu dois le bon numéro. 512 00:37:33,430 --> 00:37:44,690 Nous savons donc que zed, si + 6, nous donnerait f car après zed vient a, b, c, d, e, f. 513 00:37:44,690 --> 00:37:52,530 Alors n'oublions pas que nous savons pour sûr que zed + 6 va nous donner f. 514 00:37:52,530 --> 00:38:03,530 En valeurs ASCII, z est de 122 et f est de 102. 515 00:38:03,530 --> 00:38:10,570 Nous devons donc trouver un moyen de faire de notre formule de César nous donner 102 516 00:38:10,570 --> 00:38:13,590 après prise en 122. 517 00:38:13,590 --> 00:38:19,550 Donc, si nous appliquons cette formule, l'% ('z' + 6) 26, qui donne vraiment vous 24 518 00:38:19,550 --> 00:38:25,980 parce que 122 + 6 est 128; 128% 26 donne vous 24 reste. 519 00:38:25,980 --> 00:38:29,140 Mais cela ne veut pas dire f. Ce n'est certainement pas 102. 520 00:38:29,140 --> 00:38:33,590 C'est pas non plus la 6ème lettre de l'alphabet. 521 00:38:33,590 --> 00:38:41,550 Alors, évidemment, nous avons besoin d'avoir un moyen de peaufiner cela un peu petite. 522 00:38:42,970 --> 00:38:51,340 Pour ce qui est de l'alphabet, nous savons que z est la lettre 26 et f est le 6ème. 523 00:38:51,340 --> 00:38:55,460 Mais nous sommes en informatique, donc nous allons à l'index à 0. 524 00:38:55,460 --> 00:39:00,690 Alors au lieu de z étant le nombre 26, nous allons dire que c'est le numéro 25 525 00:39:00,690 --> 00:39:02,630 parce que a est 0. 526 00:39:02,630 --> 00:39:04,770 Alors maintenant, nous allons appliquer cette formule. 527 00:39:04,770 --> 00:39:11,710 Nous avons représenté par z 25 + 6, ce qui vous donne 31. 528 00:39:11,710 --> 00:39:15,790 Et 31 mod 26 vous donne 5 comme reste. 529 00:39:15,790 --> 00:39:20,500 C'est parfait parce que nous savons que f est la 5ème lettre de l'alphabet. 530 00:39:20,500 --> 00:39:26,400 Mais il n'est pas encore f, non? Il n'est pas encore 102. 531 00:39:26,400 --> 00:39:32,730 Alors pour ce pset, un défi sera d'essayer de trouver la relation 532 00:39:32,730 --> 00:39:36,910 entre la conversion entre ces valeurs ASCII et l'index alphabétique. 533 00:39:36,910 --> 00:39:40,280 Essentiellement, ce que vous voulez faire, vous voulez commencer avec des valeurs ASCII, 534 00:39:40,280 --> 00:39:45,390 mais alors vous voulez traduire en quelque sorte un index alphabétique 535 00:39:45,390 --> 00:39:52,610 puis de calculer quelle lettre il devrait être - en gros, ce que son index alphabétique est 536 00:39:52,610 --> 00:39:57,660 du caractère de chiffrement - puis de traduire cette information aux valeurs ASCII. 537 00:39:57,660 --> 00:40:04,870 Donc, si vous sortir votre table ASCII, puis essayer de trouver des relations entre, disons, 102 et 5 538 00:40:04,870 --> 00:40:10,440 ou le 122 et 25. 539 00:40:12,140 --> 00:40:15,690 Nous avons reçu notre clé à partir des arguments de ligne de commande, nous avons reçu le texte en clair, 540 00:40:15,690 --> 00:40:17,520 nous l'avons chiffrée. 541 00:40:17,520 --> 00:40:19,820 Maintenant, tout ce qui nous reste à faire est de l'imprimer. 542 00:40:19,820 --> 00:40:22,040 Nous pourrions le faire de deux façons différentes. 543 00:40:22,040 --> 00:40:24,570 Ce que nous pourrions faire est réellement imprimer que nous avançons. 544 00:40:24,570 --> 00:40:28,250 Comme nous l'itération sur les caractères de la chaîne, 545 00:40:28,250 --> 00:40:31,660 nous pourrions tout simplement imprimer tout de suite quand on le calculer. 546 00:40:31,660 --> 00:40:36,030 Sinon, vous pouvez également stocker dans un tableau et avoir un tableau de caractères 547 00:40:36,030 --> 00:40:39,280 et à la fin itérer sur ce tableau entier et l'imprimer. 548 00:40:39,280 --> 00:40:40,980 Donc, vous avez deux options pour cela. 549 00:40:40,980 --> 00:40:47,280 Et n'oubliez pas que c% va être l'espace réservé pour l'impression d'un personnage. 550 00:40:47,280 --> 00:40:50,420 Donc là nous avons César, et maintenant nous passons à Vigenère, 551 00:40:50,420 --> 00:40:57,580 qui est très similaire à César, mais juste un peu plus complexe. 552 00:40:57,580 --> 00:41:03,310 Donc, essentiellement, avec Vigenère est que vous allez être en passant un mot-clé. 553 00:41:03,310 --> 00:41:06,510 Ainsi, au lieu d'un numéro, vous allez avoir une chaîne, 554 00:41:06,510 --> 00:41:09,200 et que va agir comme votre mot-clé. 555 00:41:09,200 --> 00:41:14,440 Puis, comme d'habitude, vous allez obtenir une invite pour une chaîne de l'utilisateur 556 00:41:14,440 --> 00:41:19,050 puis chiffrer et ensuite leur donner le dos chiffré. 557 00:41:19,050 --> 00:41:24,650 Donc, comme je le disais, c'est très semblable à César, sauf qu'au lieu de passage par un certain nombre, 558 00:41:24,650 --> 00:41:30,620 le nombre qui se passe réellement à changer à chaque fois d'un personnage à. 559 00:41:30,620 --> 00:41:34,890 Pour représenter le nombre réel de se déplacer, il est représenté par les lettres du clavier. 560 00:41:34,890 --> 00:41:43,150 Donc, si vous entrez dans un décalage d'un, par exemple, alors cela correspond à un décalage de 0. 561 00:41:43,150 --> 00:41:45,900 Donc, c'est encore une fois de retour à l'index alphabétique. 562 00:41:45,900 --> 00:41:49,100 Ce qui peut être utile si vous voyez ce que nous sommes vraiment affaire avec des valeurs ASCII 563 00:41:49,100 --> 00:41:51,790 ainsi que les lettres, ainsi que l'indice alphabétique, 564 00:41:51,790 --> 00:41:58,020 peut-être trouver ou créer votre propre table ASCII qui montre l'index alphabétique de 0 à 25, 565 00:41:58,020 --> 00:42:03,750 de a à z, et les valeurs ASCII de sorte que vous pouvez sorte de voir la relation 566 00:42:03,750 --> 00:42:07,020 et esquisser et essayer de trouver quelques modèles. 567 00:42:07,020 --> 00:42:11,010 De même, si vous déplaçant à la demande de certains sous f - 568 00:42:11,010 --> 00:42:21,110 et c'est soit f minuscules ou majuscules - puis qui correspondrait à 5. 569 00:42:21,110 --> 00:42:24,180 Sommes-nous bien jusqu'ici? 570 00:42:25,770 --> 00:42:30,050 La formule de Vigenère est un peu différent. 571 00:42:30,050 --> 00:42:32,960 Fondamentalement, vous voyez que c'est juste comme César, 572 00:42:32,960 --> 00:42:37,390 mais au lieu de simplement k, nous avons indice k j. 573 00:42:37,390 --> 00:42:44,810 Notez que nous n'avons pas l'utiliser parce que i pour l'essentiel, la longueur du mot clé 574 00:42:44,810 --> 00:42:49,850 n'est pas nécessairement la durée de notre texte chiffré. 575 00:42:49,850 --> 00:42:56,130 Ce sera un peu plus clair quand nous voyons un exemple que j'ai un peu plus tard. 576 00:42:56,130 --> 00:43:03,160 Fondamentalement, si vous exécutez votre programme avec un mot-clé de ohai, 577 00:43:03,160 --> 00:43:08,560 alors cela signifie que chaque fois, ohai va être votre quart de travail. 578 00:43:08,560 --> 00:43:11,060 Ainsi, en fonction de la position que vous êtes dans votre mot-clé, 579 00:43:11,060 --> 00:43:15,800 vous allez passer votre personnage certaine chiffré de ce montant. 580 00:43:15,800 --> 00:43:19,630 Encore une fois, tout comme César, nous voulons nous assurer que nous préservons la capitalisation des choses 581 00:43:19,630 --> 00:43:22,900 et nous chiffrer lettres seulement, pas des caractères ou des espaces. 582 00:43:22,900 --> 00:43:26,330 Alors regardez à César sur les fonctions que vous avez utilisés, 583 00:43:26,330 --> 00:43:32,570 la façon dont vous avez décidé de changer la façon dont les choses, et de l'appliquer à votre programme ici. 584 00:43:32,570 --> 00:43:35,260 Donc, nous allons mapper cela. 585 00:43:35,260 --> 00:43:39,680 Nous avons un texte clair qui nous avons obtenu de l'utilisateur à partir GetString 586 00:43:39,680 --> 00:43:44,090 Ce disant ... est CS50! 587 00:43:44,090 --> 00:43:47,090 Ensuite, nous avons un mot-clé de ohai. 588 00:43:47,090 --> 00:43:50,930 Les 4 premiers caractères sont assez simples. 589 00:43:50,930 --> 00:43:55,580 Nous savons que T va être déplacé par o, 590 00:43:55,580 --> 00:44:01,990 puis h va être décalée par h, i va être déplacé par un. 591 00:44:01,990 --> 00:44:04,610 Ici, vous voyez que représente 0, 592 00:44:04,610 --> 00:44:11,940 oui, alors la valeur finale est en fait juste la même lettre comme avant. 593 00:44:11,940 --> 00:44:15,250 Alors s est décalée par i. 594 00:44:15,250 --> 00:44:19,370 Mais alors vous avez ces périodes là. 595 00:44:19,370 --> 00:44:25,960 Nous ne voulons pas de chiffrer ce que, si nous n'avons pas le modifier en quoi que ce soit 596 00:44:25,960 --> 00:44:31,280 et il suffit d'imprimer sur la période inchangé. 597 00:44:31,280 --> 00:44:38,020 [L'élève] Je ne comprends pas comment vous savez que cela est décalé par - Où avez-vous - >> Oh, désolé. 598 00:44:38,020 --> 00:44:41,620 En haut vous voyez ici que l'argument de ligne de commande ohai ici, 599 00:44:41,620 --> 00:44:43,740 qui va être le mot clé. 600 00:44:43,740 --> 00:44:49,550 Et donc en gros, vous êtes à vélo sur les caractères de la clé. 601 00:44:49,550 --> 00:44:52,020 [L'élève] Donc o va être déplacer le même - 602 00:44:52,020 --> 00:44:56,260 Donc, o correspond à un certain nombre dans l'alphabet. 603 00:44:56,260 --> 00:44:58,400 [L'élève] Droit. Mais où avez-vous obtenu le rôle de CS50? 604 00:44:58,400 --> 00:45:02,540 Oh. C'est dans GetString où vous êtes comme, "Donne-moi une chaîne à encoder." 605 00:45:02,540 --> 00:45:07,510 [L'élève] Ils vont vous donner cet argument à passer par 606 00:45:07,510 --> 00:45:09,380 et puis vous demandera votre première chaîne. Ouais >>. 607 00:45:09,380 --> 00:45:12,440 Alors, quand ils exécuter le programme, qu'ils vont inclure le mot clé 608 00:45:12,440 --> 00:45:14,740 dans leurs arguments de ligne de commande quand ils l'exécuter. 609 00:45:14,740 --> 00:45:19,740 Puis, une fois que vous avez vérifié qu'ils ont effectivement donné 1 et pas plus, pas moins, 610 00:45:19,740 --> 00:45:23,750 alors vous allez les inviter pour une chaîne, dire: «Donnez-moi une corde." 611 00:45:23,750 --> 00:45:27,630 C'est donc là que dans ce cas ils vous ai donné ce ... est CS50! 612 00:45:27,630 --> 00:45:32,090 Alors vous allez l'utiliser et l'utilisation ohai et itération. 613 00:45:32,090 --> 00:45:38,200 Remarquez qu'ici nous avons sauté sur le cryptage des périodes, 614 00:45:38,200 --> 00:45:51,660 mais en termes de notre position pour ohai, la prochaine, nous avons utilisé o. 615 00:45:51,660 --> 00:45:54,990 Dans ce cas, c'est un peu plus difficile à voir parce que c'est 4, 616 00:45:54,990 --> 00:45:57,710 nous allons donc continuer un peu. Il suffit de coller avec moi ici. 617 00:45:57,710 --> 00:46:02,960 Ensuite, nous avons i et s, qui sont ensuite traduites par o et h respectivement. 618 00:46:02,960 --> 00:46:09,370 Ensuite, nous avons un espace, et ainsi nous savons que nous n'allons pas pour chiffrer les espaces. 619 00:46:09,370 --> 00:46:18,930 Mais remarquez que, au lieu d'aller à un à cet endroit, ici, 620 00:46:18,930 --> 00:46:28,330 nous chiffrer par un - je ne sais pas si vous pouvez voir que - juste ici. 621 00:46:28,330 --> 00:46:33,710 Donc ce n'est pas comme vous avez réellement prédéterminé, par exemple, o va ici, h va ici, 622 00:46:33,710 --> 00:46:39,200 un passe ici, je passe ici, o, h, a, i, o, h, a, i. Vous ne faites pas cela. 623 00:46:39,200 --> 00:46:43,760 Vous ne changer votre position dans le mot-clé 624 00:46:43,760 --> 00:46:51,020 quand vous savez que vous allez effectivement être crypter une lettre réelle. 625 00:46:51,020 --> 00:46:53,920 Est-ce que ce genre de sens? 626 00:46:53,920 --> 00:46:55,800 D'accord. 627 00:46:56,490 --> 00:46:58,500 Alors que quelques rappels. 628 00:46:58,500 --> 00:47:03,760 Vous voulez vous assurer que vous ne passer à la lettre suivante dans votre mot-clé 629 00:47:03,760 --> 00:47:06,390 si le caractère dans votre texte en clair est une lettre. 630 00:47:06,390 --> 00:47:09,120 Donc, dire que nous sommes à l'o. 631 00:47:09,120 --> 00:47:19,310 Nous remarquons que le caractère suivant, l'indice i du texte en clair, est un nombre, par exemple. 632 00:47:19,310 --> 00:47:31,630 Ensuite, nous n'avançons pas j, l'indice de notre mot-clé, jusqu'à ce que nous atteignons une autre lettre. 633 00:47:31,630 --> 00:47:36,230 Encore une fois, vous voulez également vous assurer que vous enveloppant au début du mot-clé 634 00:47:36,230 --> 00:47:37,770 lorsque vous êtes à la fin de celui-ci. 635 00:47:37,770 --> 00:47:42,030 Si vous voyez ici, nous sommes à i, la prochaine doit être o. 636 00:47:42,030 --> 00:47:47,690 Donc, vous voulez trouver un moyen de pouvoir enveloppant le début de votre mot-clé 637 00:47:47,690 --> 00:47:49,470 chaque fois que vous atteignez la fin. 638 00:47:49,470 --> 00:47:55,040 Et à nouveau, ce type d'opérateur est utile dans ce cas pour envelopper? 639 00:47:56,630 --> 00:47:59,840 Comme dans le comptage hors exemple. 640 00:47:59,840 --> 00:48:03,710 [L'élève] Le signe pour cent. >> Ouais, le signe pour cent, ce qui est modulo. 641 00:48:03,710 --> 00:48:11,250 Donc, modulo sera utile ici si vous souhaitez envelopper l'indice dans votre ohai. 642 00:48:11,250 --> 00:48:17,700 Et juste un petit truc: Essayez de penser à emballant sur le mot clé un peu comme le hors comptage, 643 00:48:17,700 --> 00:48:23,590 où si il ya 3 groupes, la 4ème personne, 644 00:48:23,590 --> 00:48:30,610 leur nombre qui, selon eux, 4 mod 3, qui était de 1. 645 00:48:30,610 --> 00:48:32,880 Donc, essayer de penser de cette façon. 646 00:48:34,770 --> 00:48:42,740 Comme vous avez vu dans la formule, partout où vous avez ci et alors pi mais alors kj, 647 00:48:42,740 --> 00:48:44,700 vous voulez vous assurer que vous garder la trace de ceux-ci. 648 00:48:44,700 --> 00:48:47,580 Vous n'avez pas besoin de l'appeler i, vous n'avez pas besoin de l'appeler j, 649 00:48:47,580 --> 00:48:53,270 mais vous voulez vous assurer que vous gardez une trace de la position que vous êtes dans votre texte en clair 650 00:48:53,270 --> 00:48:55,790 ainsi que la position que vous êtes à votre mot-clé 651 00:48:55,790 --> 00:48:59,840 parce que ceux qui ne vont pas nécessairement être la même. 652 00:48:59,840 --> 00:49:06,400 Non seulement le mot-clé - il pourrait s'agir d'une longueur tout à fait différent de votre texte en clair. 653 00:49:06,400 --> 00:49:09,140 De plus, votre texte en clair, il ya des chiffres et des caractères, 654 00:49:09,140 --> 00:49:14,450 donc il ne va pas correspondre parfaitement ensemble. Oui. 655 00:49:14,450 --> 00:49:19,280 [L'élève] Y at-il une fonction pour changer la casse? 656 00:49:19,280 --> 00:49:24,530 Pouvez-vous changer un A au capital? Oui >>, il n'y a aucun doute. 657 00:49:24,530 --> 00:49:27,890 Vous pouvez vérifier - je crois que c'est toupper, tout mot 1. 658 00:49:30,650 --> 00:49:36,310 Mais quand vous essayez de chiffrer les choses et de préserver le texte, 659 00:49:36,310 --> 00:49:39,350 il est préférable d'avoir fondamentalement cas distincts. 660 00:49:39,350 --> 00:49:42,040 Si c'est une majuscule, alors vous voulez passer par cette 661 00:49:42,040 --> 00:49:46,460 parce que dans votre formule, lorsque vous regardez en arrière la façon dont nous devons sorte de go 662 00:49:46,460 --> 00:49:50,900 interchangeable entre la façon ASCII de représenter les nombres 663 00:49:50,900 --> 00:49:55,020 et l'indice réel alphabétique, nous voulons nous assurer que 664 00:49:55,020 --> 00:50:01,850 il va y avoir une sorte de modèle que vous allez utiliser. 665 00:50:01,850 --> 00:50:04,580 Une autre note sur le schéma, en fait. 666 00:50:04,580 --> 00:50:07,250 Vous allez certainement être jongler avec les chiffres. 667 00:50:07,250 --> 00:50:11,280 Essayez de ne pas utiliser des numéros de magie, qui est un exemple du style. 668 00:50:11,280 --> 00:50:18,470 Donc, disons que vous voulez quelque chose de tout décalage dans le temps par aimé - 669 00:50:18,470 --> 00:50:22,400 Bon, alors soupçon, un autre spoiler, c'est quand vous allez être quelque chose de déplacement 670 00:50:22,400 --> 00:50:26,310 d'un certain montant, essayez de ne pas représenter que par un nombre réel 671 00:50:26,310 --> 00:50:32,810 mais plutôt essayer de voir si vous pouvez utiliser la valeur ASCII, qui sorte de faire plus de sens. 672 00:50:32,810 --> 00:50:35,470 Une autre note: Parce que nous avons affaire à des formules, 673 00:50:35,470 --> 00:50:41,200 même si votre FO sorte de savoir ce motif que vous utilisez peut-être, 674 00:50:41,200 --> 00:50:44,430 au mieux dans votre genre de commentaires expliquer la logique, comme, 675 00:50:44,430 --> 00:50:51,880 "J'utilise ce modèle parce que ...» et le type d'expliquer succinctement le motif de vos commentaires. 676 00:50:54,090 --> 00:50:58,990 [Cette procédure pas à pas a été 2] S'il n'y a pas d'autres questions, alors je vais rester ici pour un peu. 677 00:50:58,990 --> 00:51:04,370 Bonne chance avec votre pset 2: Crypto et merci d'être venu. 678 00:51:06,070 --> 00:51:08,620 [L'élève] Je vous remercie. Merci >>. 679 00:51:09,220 --> 00:51:10,800 [Media introduction Hors ligne]