1 00:00:00,000 --> 00:00:10,103 2 00:00:10,103 --> 00:00:11,270 >> ZAMYLA CHAN: Félicitations sur la finition de votre 3 00:00:11,270 --> 00:00:13,200 premier couple de programmes C. 4 00:00:13,200 --> 00:00:16,379 Je sais que votre première incursion dans Syntaxe C peut être intimidant. 5 00:00:16,379 --> 00:00:20,060 Mais je vous assure, à la fin de l' Bien sûr, vous serez en mesure de regarder l' 6 00:00:20,060 --> 00:00:23,870 premier couple de missions et compléter en quelques minutes. 7 00:00:23,870 --> 00:00:27,830 >> Maintenant que vous obtenez plus familier avec la syntaxe, passons à César. 8 00:00:27,830 --> 00:00:31,720 Dans César, l'utilisateur doit soumettre un touche nombre entier en tant que ligne de commande 9 00:00:31,720 --> 00:00:35,300 argumentation, puis entrez une plaine message texte à l'invite. 10 00:00:35,300 --> 00:00:38,050 Le programme sera ensuite chiffrer le texte et impression 11 00:00:38,050 --> 00:00:40,020 leur message chiffré. 12 00:00:40,020 --> 00:00:42,980 >> Le chiffrement de César est assez simple. 13 00:00:42,980 --> 00:00:46,455 Décaler chaque lettre, en leur texte en clair, par la clé. 14 00:00:46,455 --> 00:00:49,220 En conséquence, il est également assez précaire. 15 00:00:49,220 --> 00:00:53,850 Mais d'exécution César présentera nous aux données de ASCIIMath et le réseau 16 00:00:53,850 --> 00:00:54,460 structures. 17 00:00:54,460 --> 00:00:57,510 Nous y reviendrons plus complexe chiffrements plus tard. 18 00:00:57,510 --> 00:01:01,680 Avec une touche de César 2, la lettre A texte brut serait représentée par 19 00:01:01,680 --> 00:01:07,580 la lettre C dans chiffré car C est de deux lettres d'après A. B seraient 20 00:01:07,580 --> 00:01:12,450 représenté par D et C par E. Vers la fin de l'alphabet, W est 21 00:01:12,450 --> 00:01:18,550 représenté par Y, X et Z. Mais par Y ne pas avoir deux lettres après, alors 22 00:01:18,550 --> 00:01:21,070 les chiffres s'enroule autour de l'alphabet. 23 00:01:21,070 --> 00:01:27,190 Y en texte clair est donc représentée par A en texte chiffré, et Z par B. Il peut 24 00:01:27,190 --> 00:01:32,080 aider à voir le César Cypher comme une roue alphabet continue. 25 00:01:32,080 --> 00:01:35,760 >> Pour chiffrer leur texte, l'utilisateur entrera deux arguments 26 00:01:35,760 --> 00:01:37,090 dans la ligne de commande - 27 00:01:37,090 --> 00:01:40,010 . / César suivie par une clé. 28 00:01:40,010 --> 00:01:44,710 Comme toujours, nous ne pouvons pas faire confiance à l'utilisateur complètement pour entrer entrée qui rendent 29 00:01:44,710 --> 00:01:45,800 sens pour notre programme. 30 00:01:45,800 --> 00:01:50,670 Nous aurons donc à valider leur entrée de ligne de commande. 31 00:01:50,670 --> 00:01:57,285 >> Au lieu d'utiliser void main int, nous sommes en utilisant int main, int argc, argv chaîne. 32 00:01:57,285 --> 00:02:01,730 Le argc variable entière représente le nombre d'arguments passés en 33 00:02:01,730 --> 00:02:02,880 la ligne de commande. 34 00:02:02,880 --> 00:02:09,070 Et argv est un tableau, ou penser que c'est une liste des arguments passés po 35 00:02:09,070 --> 00:02:12,000 >> Donc, pour César, comment pouvons-nous validons l'entrée de l'utilisateur? 36 00:02:12,000 --> 00:02:15,870 Eh bien, ils ne devraient être entraient deux arguments de ligne de commande - 37 00:02:15,870 --> 00:02:18,150 . / César et une clé. 38 00:02:18,150 --> 00:02:22,340 Donc, si argc n'est pas 2, ce qui signifie que soit ils ont oublié une clé et juste 39 00:02:22,340 --> 00:02:27,230 entré. / César, ou ils conclu plusieurs touches. 40 00:02:27,230 --> 00:02:29,770 >> Si c'est le cas, alors vous aurez voulez imprimer les instructions 41 00:02:29,770 --> 00:02:30,910 et quitter le programme. 42 00:02:30,910 --> 00:02:34,320 Ils auront besoin d'essayer à nouveau à partir de la ligne de commande. 43 00:02:34,320 --> 00:02:37,430 Mais même si argc est 2, vous aurez besoin de vérifier si elles 44 00:02:37,430 --> 00:02:39,100 vous donnera une clé valide. 45 00:02:39,100 --> 00:02:40,730 Pour César, vous avez besoin d'un entier. 46 00:02:40,730 --> 00:02:43,260 Mais argv est un tableau de chaînes. 47 00:02:43,260 --> 00:02:46,490 Comment accéder à cette clé? 48 00:02:46,490 --> 00:02:47,850 >> Un rapide regard sur les tableaux - 49 00:02:47,850 --> 00:02:51,410 des structures de données qui possèdent multiple valeurs du même type de données. 50 00:02:51,410 --> 00:02:55,350 Les inscriptions sont à l'index zéro, ce qui signifie que le premier élément est le zéro de l'index 51 00:02:55,350 --> 00:03:00,260 et le dernier élément est à la taille de l'index moins 1, où la taille correspond au nombre d' 52 00:03:00,260 --> 00:03:02,850 éléments dans le tableau. 53 00:03:02,850 --> 00:03:07,380 >> Si je déclarais une nouvelle boîte aux lettres de tableau de chaînes de longueur 3, visuellement, il 54 00:03:07,380 --> 00:03:08,570 ressemble à ceci. 55 00:03:08,570 --> 00:03:11,520 Trois conteneurs pour cordes , Côte à côte. 56 00:03:11,520 --> 00:03:15,445 Pour accéder à n'importe quel élément, vous tapez le nom du tableau, puis indiquer 57 00:03:15,445 --> 00:03:18,080 l'indice entre crochets. 58 00:03:18,080 --> 00:03:21,610 Ici, je suis en attribuant une valeur à chaque élément, tout comme je le ferais avec n'importe quelle 59 00:03:21,610 --> 00:03:24,310 autre variable chaîne. 60 00:03:24,310 --> 00:03:29,020 >> Donc, pour accéder à nos arguments de ligne de commande, tout ce que nous avons à faire est d'accéder 61 00:03:29,020 --> 00:03:31,690 l'élément à droite du tableau argv. 62 00:03:31,690 --> 00:03:37,360 Si l'utilisateur a entré l'équipe. / De décollage Rocket dans le terminal, argv 0 Souhaitez- 63 00:03:37,360 --> 00:03:38,950 être. / décollage. 64 00:03:38,950 --> 00:03:45,010 argv serait l'équipe, et arg2 serait fusée. 65 00:03:45,010 --> 00:03:47,670 >> Maintenant que nous pouvons accéder à notre clé, nous avons encore besoin de faire 66 00:03:47,670 --> 00:03:49,040 sûr que c'est correct. 67 00:03:49,040 --> 00:03:51,060 Nous avons besoin de le convertir en un entier. 68 00:03:51,060 --> 00:03:54,680 Mais nous ne pouvons pas simplement jeter comme nous l'avons fait précédemment. 69 00:03:54,680 --> 00:03:58,800 Heureusement, la fonction A à Y prend soin de cela pour nous et retourne même 0 70 00:03:58,800 --> 00:04:02,110 si la chaîne de caractères ne peut pas être convertie en un nombre entier. 71 00:04:02,110 --> 00:04:04,450 C'est à vous, cependant, de dire l'utilisateur pourquoi vous ne serez pas 72 00:04:04,450 --> 00:04:06,220 laisser le programme continuer. 73 00:04:06,220 --> 00:04:10,710 Stocker le résultat de A à Y dans un entier, et là vous avez votre clé. 74 00:04:10,710 --> 00:04:12,070 La partie suivante est simple. 75 00:04:12,070 --> 00:04:15,940 Inviter l'utilisateur à leur texte, qui sera de type chaîne de données. 76 00:04:15,940 --> 00:04:18,339 Heureusement pour nous, tout utilisateur entré cordes sont valables. 77 00:04:18,339 --> 00:04:21,170 78 00:04:21,170 --> 00:04:24,760 >> Maintenant que nous avons toutes les ressources nécessaires de l'utilisateur, il est temps pour nous d' 79 00:04:24,760 --> 00:04:26,520 chiffrer leur message. 80 00:04:26,520 --> 00:04:29,200 Le concept de César est simple suffisant pour comprendre. 81 00:04:29,200 --> 00:04:33,750 Mais comment est-ce votre ordinateur sait qui lettres viennent un après l'autre? 82 00:04:33,750 --> 00:04:36,100 >> C'est ici que la table ASCII entre en jeu. 83 00:04:36,100 --> 00:04:39,420 Chaque personnage dispose d'un nombre entier nombre qui lui est associé. 84 00:04:39,420 --> 00:04:41,380 Capital A est de 65. 85 00:04:41,380 --> 00:04:43,310 Capital B est de 66. 86 00:04:43,310 --> 00:04:45,260 A minuscule est de 97. 87 00:04:45,260 --> 00:04:47,590 B minuscule est de 98. 88 00:04:47,590 --> 00:04:50,770 Mais les caractères ne sont pas limités au-delà des chiffres alphabétiques. 89 00:04:50,770 --> 00:04:56,020 Par exemple, le symbole @ est le numéro ASCII 64. 90 00:04:56,020 --> 00:04:59,690 >> Avant d'aborder la totalité de la chaîne, feignons que nous venons de passer 91 00:04:59,690 --> 00:05:01,220 un caractère. 92 00:05:01,220 --> 00:05:04,640 Eh bien, nous ne voulons décaler réelle lettres dans le texte en clair, pas 93 00:05:04,640 --> 00:05:06,020 caractères ou des chiffres. 94 00:05:06,020 --> 00:05:09,100 Donc la première chose que nous voulons vérifier est de savoir si le personnage est en 95 00:05:09,100 --> 00:05:10,430 l'alphabet. 96 00:05:10,430 --> 00:05:14,460 >> La fonction isalpha fait pour nous et retourne un Boolean - 97 00:05:14,460 --> 00:05:18,570 vrai si les caractères est une lettre, faux dans le cas contraire. 98 00:05:18,570 --> 00:05:22,270 Deux autres fonctions utiles sont isupper et islower, avec 99 00:05:22,270 --> 00:05:23,860 noms explicites. 100 00:05:23,860 --> 00:05:27,370 Ils retournent true si le caractère donné est en majuscule ou en minuscule, 101 00:05:27,370 --> 00:05:28,740 respectivement. 102 00:05:28,740 --> 00:05:33,770 Comme ils sont booléens, ils sont utile pour l'utiliser comme conditions. 103 00:05:33,770 --> 00:05:38,310 >> Si isalpha renvoie vrai, vous aurez besoin pour passer ce caractère par la clé. 104 00:05:38,310 --> 00:05:43,750 Donc, nous allons ouvrir à ASCIIMath et faire un peu de maths ASCII. 105 00:05:43,750 --> 00:05:48,700 L'utilisation est très similaire à l'utilisation pour César et prend une clé à l' 106 00:05:48,700 --> 00:05:50,870 la ligne de commande. 107 00:05:50,870 --> 00:05:59,590 >> Si je cours ASCIIMath 5, il semble ajouter 5 à un, en me donnant la lettre f, et 108 00:05:59,590 --> 00:06:01,260 l'affichage de la valeur ASCII. 109 00:06:01,260 --> 00:06:04,090 Donc, nous allons jeter un oeil à ce programme. 110 00:06:04,090 --> 00:06:11,820 >> Vous pourriez vous demander, ici, pourquoi lettre est un entier, quand il est 111 00:06:11,820 --> 00:06:14,330 clairement, eh bien, une lettre. 112 00:06:14,330 --> 00:06:17,690 Il s'avère que les personnages et entiers sont interchangeables. 113 00:06:17,690 --> 00:06:21,730 En mettant la lettre A en simple entre guillemets, l'entier peuvent stocker 114 00:06:21,730 --> 00:06:25,390 la valeur ASCII du capital A. Attention, cependant. 115 00:06:25,390 --> 00:06:27,150 Vous avez besoin des vêtements simples. 116 00:06:27,150 --> 00:06:31,260 Sans les guillemets simples, l' compilateur aurait l'air d'une variable 117 00:06:31,260 --> 00:06:35,510 Un nommé, et non pas le caractère. 118 00:06:35,510 --> 00:06:42,140 >> Puis j'ajoute lettre et une clé, stockage de l' somme dans les variables résultat int. 119 00:06:42,140 --> 00:06:47,740 Même si résultat est de type de données entier, ma déclaration printf utilise l' 120 00:06:47,740 --> 00:06:50,370 % C espace réservé pour les personnages. 121 00:06:50,370 --> 00:06:54,530 Ainsi, le programme imprime le caractère associée au résultat entier. 122 00:06:54,530 --> 00:07:00,400 Et puisque nous avons imprimé l'entier forme ainsi utiliser% d, nous voyons 123 00:07:00,400 --> 00:07:02,110 le nombre ainsi. 124 00:07:02,110 --> 00:07:04,450 Alors maintenant, vous pouvez voir que nous traiter les caractères et 125 00:07:04,450 --> 00:07:06,980 des nombres entiers, et vice versa. 126 00:07:06,980 --> 00:07:12,205 >> Testons sur ASCIIMath quelques plus de 25 fois à une utilisation en tant que clé. 127 00:07:12,205 --> 00:07:15,510 128 00:07:15,510 --> 00:07:17,090 Nous recevons la lettre z. 129 00:07:17,090 --> 00:07:19,750 Maintenant, nous essayons de 26. 130 00:07:19,750 --> 00:07:25,600 Nous voulons obtenir la lettre A, mais au contraire, nous obtenons un crochet gauche. 131 00:07:25,600 --> 00:07:29,490 Alors, évidemment, tout en ajoutant le la clé de la lettre ne fera pas. 132 00:07:29,490 --> 00:07:32,780 Nous devons trouver une formule pour envelopper autour de l'alphabet, comme notre 133 00:07:32,780 --> 00:07:34,570 par exemple au début a fait. 134 00:07:34,570 --> 00:07:38,520 >> Une formule pour le César changement est comme suit. 135 00:07:38,520 --> 00:07:42,750 c est égal à p, plus k modulo 26. 136 00:07:42,750 --> 00:07:46,040 Rappelez-vous que modulo est un utile opération qui nous donne le reste 137 00:07:46,040 --> 00:07:49,880 de division d'un nombre par l'autre. 138 00:07:49,880 --> 00:07:54,870 Nous allons appliquer cette formule à la plaine lettre de texte avec une clé de 2. 139 00:07:54,870 --> 00:08:01,810 La valeur ASCII de y est de 89, ce qui nous donne 91 modulo 26, 140 00:08:01,810 --> 00:08:03,690 ce qui équivaut à 13 - 141 00:08:03,690 --> 00:08:08,740 certainement pas la valeur ASCII d'un, qui est 67. 142 00:08:08,740 --> 00:08:12,810 >> Humour moi maintenant et s'éloigner de l' Les valeurs ASCII à un index alphabétique 143 00:08:12,810 --> 00:08:18,690 où A est égal à zéro et Z est 25, ce qui signifie que Y est 24. 144 00:08:18,690 --> 00:08:25,830 24 plus 2, modulo 6, nous donne 26, modulo 26, 0, qui est le 145 00:08:25,830 --> 00:08:28,170 index alphabétique d'un. 146 00:08:28,170 --> 00:08:32,980 Donc, cette formule semble s'appliquer à l' index alphabétique de la lettre et 147 00:08:32,980 --> 00:08:34,960 pas sa valeur ASCII. 148 00:08:34,960 --> 00:08:37,630 >> Mais vous commencez avec des valeurs ASCII. 149 00:08:37,630 --> 00:08:41,650 Et pour imprimer le caractère chiffré, vous aurez besoin de sa valeur ASCII ainsi. 150 00:08:41,650 --> 00:08:46,400 C'est à vous, alors, de comprendre comment basculer d'avant en arrière. 151 00:08:46,400 --> 00:08:49,850 >> Une fois que vous trouver la bonne formule pour un caractère, tout ce que vous devez faire 152 00:08:49,850 --> 00:08:53,520 est d'appliquer la même formule pour tous lettre dans le texte en clair - 153 00:08:53,520 --> 00:08:57,720 seulement si cette lettre est alphabétique, bien sûr. 154 00:08:57,720 --> 00:09:02,360 Et n'oubliez pas que vous devez préserver le cas, supérieure ou inférieure, c'est là 155 00:09:02,360 --> 00:09:06,890 les fonctions de IsLower isUpper et mentionné précédemment vous seront utiles. 156 00:09:06,890 --> 00:09:08,830 Vous pourriez avoir deux formules - 157 00:09:08,830 --> 00:09:11,680 un pour les lettres majuscules et l'autre pour les minuscules. 158 00:09:11,680 --> 00:09:18,420 Alors isUpper un IsLower vous aider déterminer quelle est la formule à appliquer. 159 00:09:18,420 --> 00:09:22,460 >> Comment appliquez-vous votre formule à chaque seul caractère dans une chaîne? 160 00:09:22,460 --> 00:09:25,910 Eh bien, une chaîne est juste une tableau de caractères. 161 00:09:25,910 --> 00:09:31,150 Ainsi, vous pouvez accéder à chaque caractère par regroupant plus tous les caractères de l' 162 00:09:31,150 --> 00:09:33,450 chaîne dans une boucle for. 163 00:09:33,450 --> 00:09:37,550 En ce qui concerne l'état de votre boucle for, la fonction strlen, pour la chaîne 164 00:09:37,550 --> 00:09:39,280 Enfin, vous sera utile. 165 00:09:39,280 --> 00:09:44,020 Il faut dans une chaîne en entrée et renvoie la longueur de cette chaîne. 166 00:09:44,020 --> 00:09:49,250 Assurez-vous d'inclure le droit bibliothèque Pour utiliser la fonction de longueur de chaîne. 167 00:09:49,250 --> 00:09:51,790 >> Et là, vous avez votre texte chiffré. 168 00:09:51,790 --> 00:09:53,260 Mon nom est le Zamyla. 169 00:09:53,260 --> 00:09:54,510 Et [CODE DE LANGUE]. 170 00:09:54,510 --> 00:10:02,944