1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Section 4] [Moins confortable] 2 00:00:02,000 --> 00:00:04,000 [Nate Hardison] [Université de Harvard] 3 00:00:04,000 --> 00:00:07,000 [C'est CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:10,000 >> Très bien, bon retour à la section. 5 00:00:10,000 --> 00:00:13,000 Dans la section de cette semaine, nous allons faire une ou deux choses. 6 00:00:13,000 --> 00:00:17,000 Nous allons Set récapitulatif premier problème 2, 7 00:00:17,000 --> 00:00:20,000 qui est le problème posé César et Vigenère. 8 00:00:20,000 --> 00:00:23,000 Et puis, nous allons plonger dans Quiz 0 avis 9 00:00:23,000 --> 00:00:26,000 et passer un peu de temps récapituler ce que nous avons parlé 10 00:00:26,000 --> 00:00:30,000 dans chacune des conférences à ce jour, et nous allons également faire quelques problèmes 11 00:00:30,000 --> 00:00:32,000 à partir de questionnaires année précédente. 12 00:00:32,000 --> 00:00:36,000 De cette façon, vous les gars ont une bonne façon de se préparer à cela. 13 00:00:36,000 --> 00:00:40,000 >> Pour commencer, j'ai démarré un couple de bonnes solutions 14 00:00:40,000 --> 00:00:45,000 pour l'ensemble précédent problème, un problème Set 2, dans cet espace. 15 00:00:45,000 --> 00:00:48,000 Si vous les gars tous atteint ce lien, 16 00:00:48,000 --> 00:00:53,000 et si vous cliquez sur mon nom et cliquez sur mon première révision 17 00:00:53,000 --> 00:00:56,000 vous verrez caesar.c, ce qui est exactement ce que je vois. 18 00:00:56,000 --> 00:01:00,000 Parlons un peu de ce très rapidement. 19 00:01:00,000 --> 00:01:02,000 Ceci est juste un exemple de solution. 20 00:01:02,000 --> 00:01:05,000 Ce n'est pas forcément la solution idéale. 21 00:01:05,000 --> 00:01:08,000 Il existe de nombreuses manières différentes d'écrire cela, 22 00:01:08,000 --> 00:01:10,000 mais il ya quelques petites choses que je voulais mettre en évidence 23 00:01:10,000 --> 00:01:13,000 que j'ai vu que j'étais classement, erreurs les plus courantes que je pense 24 00:01:13,000 --> 00:01:18,000 Cette solution fait un très bon travail de manutention. 25 00:01:18,000 --> 00:01:22,000 >> La première est d'avoir une sorte de commentaire d'en-tête en haut. 26 00:01:22,000 --> 00:01:25,000 Sur les lignes 1 à 7, vous voyez les détails, 27 00:01:25,000 --> 00:01:28,000 exactement ce que ce programme fait. 28 00:01:28,000 --> 00:01:32,000 Une bonne pratique standard lorsque vous écrivez du code C 29 00:01:32,000 --> 00:01:35,000 peu importe si votre programme est contenu dans un seul fichier ou 30 00:01:35,000 --> 00:01:38,000 que ce soit réparti sur plusieurs fichiers, c'est d'avoir une sorte de 31 00:01:38,000 --> 00:01:40,000 orienter commentaire en haut. 32 00:01:40,000 --> 00:01:43,000 C'est aussi pour les personnes qui sortent et écrire du code dans le monde réel. 33 00:01:43,000 --> 00:01:47,000 C'est là qu'ils vont mettre les informations de copyright. 34 00:01:47,000 --> 00:01:50,000 Voici les # includes. 35 00:01:50,000 --> 00:01:55,000 Sur la ligne 16, il ya ce # define, qui nous y reviendrons dans un instant. 36 00:01:55,000 --> 00:01:59,000 Et puis une fois que la fonction commence, commence une fois que les principaux, 37 00:01:59,000 --> 00:02:03,000 parce que ce programme a été tout contenu dans une seule fonction 38 00:02:03,000 --> 00:02:09,000 la première chose qui se passe et ce qui est très idiomatique et typique d'un programme C 39 00:02:09,000 --> 00:02:14,000 qui prend en ligne de commande arguments, c'est que celui-ci vérifie immédiatement 40 00:02:14,000 --> 00:02:18,000 >> pour le nombre d'arguments, argc. 41 00:02:18,000 --> 00:02:24,000 Ici, nous voyons que ce programme attend 2 arguments exactement. 42 00:02:24,000 --> 00:02:27,000 Rappelez-vous, il ya ce premier argument, c'est le spécial 43 00:02:27,000 --> 00:02:29,000 c'est toujours le nom du programme qui est en cours d'exécution, 44 00:02:29,000 --> 00:02:31,000 le nom du fichier exécutable. 45 00:02:31,000 --> 00:02:36,000 Et qu'est-ce que cela fait est qu'il empêche l'utilisateur d'exécuter le programme 46 00:02:36,000 --> 00:02:42,000 avec des arguments plus ou moins. 47 00:02:42,000 --> 00:02:44,000 La raison pour laquelle nous voulons vérifier ça tout de suite parce que 48 00:02:44,000 --> 00:02:52,000 nous ne pouvons pas réellement accéder à ce tableau argv ici de manière fiable 49 00:02:52,000 --> 00:02:55,000 jusqu'à ce que nous avons vérifié pour voir comment elle est grande. 50 00:02:55,000 --> 00:02:58,000 >> Une des erreurs les plus courantes que j'ai vu était des gens se rendre immédiatement dans 51 00:02:58,000 --> 00:03:01,000 et grappin argv [1]. 52 00:03:01,000 --> 00:03:06,000 Ils avaient saisir l'argument clé de la matrice et ne l'a à i vérifier sur elle, 53 00:03:06,000 --> 00:03:11,000 et puis ils font le test argc, ainsi que la prochaine épreuve, 54 00:03:11,000 --> 00:03:16,000 si le premier argument est en effet un nombre entier au même moment, 55 00:03:16,000 --> 00:03:20,000 et cela ne fonctionne pas, car dans le cas où il n'y a pas d'arguments fournis 56 00:03:20,000 --> 00:03:26,000 vous serez saisissant un argument qui n'est pas là ou de tenter d'attraper un qui n'est pas là. 57 00:03:26,000 --> 00:03:29,000 >> L'autre chose importante que vous devriez remarquer est que 58 00:03:29,000 --> 00:03:32,000 vous voulez toujours imprimer une sorte de message d'erreur utile 59 00:03:32,000 --> 00:03:34,000 à l'utilisateur de les orienter. 60 00:03:34,000 --> 00:03:37,000 Je suis sûr que vous avez tous les programmes gérés par où tout d'un coup il se bloque, 61 00:03:37,000 --> 00:03:41,000 et vous obtenez cette boîte de dialogue qui apparaît peu ridicule et dit 62 00:03:41,000 --> 00:03:44,000 quelque chose de terriblement cryptique et peut-être vous donne un code d'erreur ou quelque chose comme ça 63 00:03:44,000 --> 00:03:47,000 qui n'a aucun sens. 64 00:03:47,000 --> 00:03:50,000 C'est là que vous voulez vraiment apporter quelque chose d'utile 65 00:03:50,000 --> 00:03:54,000 et ciblées à l'utilisateur de sorte que quand ils l'exécuter ils vont "Oh," visage de palme. 66 00:03:54,000 --> 00:03:58,000 «Je sais exactement ce qu'il faut faire. Je sais comment résoudre ce problème." 67 00:03:58,000 --> 00:04:01,000 >> Si vous n'avez pas à imprimer un message, puis vous vous retrouvez en fait 68 00:04:01,000 --> 00:04:04,000 laissant à l'utilisateur d'aller examiner le code source 69 00:04:04,000 --> 00:04:07,000 de comprendre ce qui s'est mal passé. 70 00:04:07,000 --> 00:04:11,000 Il ya aussi des moments que vous allez utiliser différents codes d'erreur. 71 00:04:11,000 --> 00:04:14,000 Ici, nous avons utilisé un pour dire qu'il ya eu une erreur, 72 00:04:14,000 --> 00:04:16,000 il y avait une erreur, une erreur s'est produite. 73 00:04:16,000 --> 00:04:20,000 Bigger programmes, souvent des programmes qui sont appelés par d'autres programmes, 74 00:04:20,000 --> 00:04:25,000 sera de retour une sorte de codes d'erreur spécifiques dans différents scénarios 75 00:04:25,000 --> 00:04:28,000 par programmation communiquer ce que vous feriez autrement 76 00:04:28,000 --> 00:04:32,000 il suffit d'utiliser un gentil message en anglais pour. 77 00:04:32,000 --> 00:04:35,000 Cool. 78 00:04:35,000 --> 00:04:37,000 Comme nous travaillons en bas, vous pouvez voir que nous tirez la clé. 79 00:04:37,000 --> 00:04:40,000 Nous tester pour voir si la clé correspond. 80 00:04:40,000 --> 00:04:42,000 Nous recevons un message à l'utilisateur. 81 00:04:42,000 --> 00:04:46,000 La raison pour laquelle nous le faisons dans ce do-while et c'est quelque chose que nous allons couvrir 82 00:04:46,000 --> 00:04:50,000 dans un petit peu, mais il s'avère que si vous tapez control D 83 00:04:50,000 --> 00:04:54,000 quand vous obtenez ce GetString rapide sur le terminal 84 00:04:54,000 --> 00:04:59,000 ce qui revient en fait il envoie un caractère spécial 85 00:04:59,000 --> 00:05:01,000 pour le programme. 86 00:05:01,000 --> 00:05:05,000 C'est ce qu'on appelle l'ELF ou le caractère de fin de fichier. 87 00:05:05,000 --> 00:05:08,000 Et dans ce cas, notre chaîne de message sera nulle, 88 00:05:08,000 --> 00:05:14,000 donc ce n'était pas quelque chose où nous sommes arrivés dans le problème lui-même fixé. 89 00:05:14,000 --> 00:05:17,000 >> Mais, comme nous allons, maintenant que nous avons commencé à parler de pointeurs 90 00:05:17,000 --> 00:05:21,000 et l'allocation dynamique de la mémoire sur le tas, 91 00:05:21,000 --> 00:05:25,000 le contrôle de null chaque fois que vous avez une fonction qui pourrait 92 00:05:25,000 --> 00:05:30,000 return null comme valeur de quelque chose que vous aurez envie de prendre l'habitude de faire. 93 00:05:30,000 --> 00:05:33,000 Il s'agit ici principalement à titre d'illustration. 94 00:05:33,000 --> 00:05:36,000 Mais quand vous voyez GetString à l'avenir, 95 00:05:36,000 --> 00:05:41,000 afin de problème Set 4, vous aurez envie de garder cela à l'esprit. 96 00:05:41,000 --> 00:05:44,000 Encore une fois, ce n'est pas un problème pour un problème Set 3, soit depuis que nous n'avions pas encore couvertes. 97 00:05:44,000 --> 00:05:53,000 Enfin, nous arrivons à cette partie où nous arrivons à la boucle de cryptage principale, 98 00:05:53,000 --> 00:05:57,000 et il ya un certain nombre de choses qui se passent ici. 99 00:05:57,000 --> 00:06:02,000 Tout d'abord, nous avons une itération sur la chaîne de la totalité du message lui-même. 100 00:06:02,000 --> 00:06:07,000 Ici, nous avons gardé l'appel strlen dans l'état, 101 00:06:07,000 --> 00:06:12,000 laquelle un certain nombre d'entre vous l'ont souligné n'est pas un grand chemin à parcourir. 102 00:06:12,000 --> 00:06:15,000 Il s'avère dans ce cas, il n'est pas non plus grand, 103 00:06:15,000 --> 00:06:20,000 en partie parce que nous sommes modifier le contenu du message lui-même 104 00:06:20,000 --> 00:06:27,000 l'intérieur de la boucle for, donc si nous avons un message qui fait 10 caractères de long, 105 00:06:27,000 --> 00:06:32,000 la première fois que nous partons pour la boucle strlen retourne quoi? 106 00:06:32,000 --> 00:06:35,000 10. 107 00:06:35,000 --> 00:06:40,000 >> Mais si nous alors modifier un message, par exemple, nous modifions sa 5ème caractère, 108 00:06:40,000 --> 00:06:46,000 et nous jeter dans un caractère \ 0 en 5ème position, 109 00:06:46,000 --> 00:06:49,000 sur une itération ultérieure strlen (message) ne retournera pas ce qu'il a fait 110 00:06:49,000 --> 00:06:52,000 la première fois que nous itéré, 111 00:06:52,000 --> 00:06:56,000 mais il sera plutôt revenir 5 parce que nous avons jeté dans cette fin nulle, 112 00:06:56,000 --> 00:06:59,000 et la longueur de la corde est défini 113 00:06:59,000 --> 00:07:03,000 par la position de ce \ 0. 114 00:07:03,000 --> 00:07:09,000 Dans ce cas, il s'agit d'un excellent moyen d'aller parce que nous sommes le modifier en place. 115 00:07:09,000 --> 00:07:13,000 Mais vous remarquerez que c'est en fait étonnamment simple à chiffrer 116 00:07:13,000 --> 00:07:16,000 si vous pouvez obtenir le calcul exact. 117 00:07:16,000 --> 00:07:19,000 Tout ce qu'il faut est de vérifier si oui ou non la lettre que vous cherchez à 118 00:07:19,000 --> 00:07:21,000 est en majuscule ou en minuscule. 119 00:07:21,000 --> 00:07:24,000 >> La raison pour laquelle nous ne disposons pas de consulter pour cela et nous n'avons pas à vérifier 120 00:07:24,000 --> 00:07:27,000 le cas parce que l'alpha est 121 00:07:27,000 --> 00:07:30,000 si un caractère est en majuscule ou en minuscule si c'est 122 00:07:30,000 --> 00:07:33,000 alors il est certainement un caractère alphabétique, 123 00:07:33,000 --> 00:07:38,000 parce que nous n'avons pas les chiffres majuscules et minuscules. 124 00:07:38,000 --> 00:07:41,000 L'autre chose que nous faisons, et c'est un peu difficile- 125 00:07:41,000 --> 00:07:45,000 est que nous avons modifié la norme de chiffrement de César formule 126 00:07:45,000 --> 00:07:49,000 que nous avons donné dans la spécification du jeu de problème. 127 00:07:49,000 --> 00:07:52,000 Ce qui est différent ici, c'est que nous avons soustrait 128 00:07:52,000 --> 00:07:58,000 cas dans la capitale majuscule, puis nous avons ajouté majuscule 129 00:07:58,000 --> 00:08:02,000 sauvegarder à la fin. 130 00:08:02,000 --> 00:08:05,000 >> Je sais que certains d'entre vous l'ont fait ceci dans votre code. 131 00:08:05,000 --> 00:08:09,000 Avez-vous tout de cela dans vos mémoires? 132 00:08:09,000 --> 00:08:13,000 Vous l'avez fait. Pouvez-vous expliquer ce que cela fait, Sahb? 133 00:08:13,000 --> 00:08:18,000 En le soustrayant, parce que vous avez fait un mod juste après, 134 00:08:18,000 --> 00:08:21,000 vous devez l'enlever, si cette façon vous obtenez [toux] position. 135 00:08:21,000 --> 00:08:25,000 Et puis en l'ajoutant revenir plus tard vous avez changé sur celui que vous vouliez. 136 00:08:25,000 --> 00:08:27,000 Oui, exactement. 137 00:08:27,000 --> 00:08:32,000 Qu'est-ce Sahb dit, c'est que quand nous voulons ajouter 138 00:08:32,000 --> 00:08:36,000 notre message et notre touche en même temps 139 00:08:36,000 --> 00:08:42,000 puis mod qui, mod que par NUM_LETTERS, 140 00:08:42,000 --> 00:08:50,000 si nous ne s'adaptent pas notre message approprié dans la gamme de 0 à 25 d'abord, 141 00:08:50,000 --> 00:08:54,000 alors nous pourrions finir par avoir un nombre vraiment bizarre 142 00:08:54,000 --> 00:08:59,000 parce que les valeurs qui nous intéressent quand on regarde message [i], 143 00:08:59,000 --> 00:09:03,000 quand on regarde le ième caractère de notre message en texte ordinaire, 144 00:09:03,000 --> 00:09:08,000 est une valeur quelque part dans cette fourchette de 65 à 122 145 00:09:08,000 --> 00:09:13,000 sur la base des valeurs ASCII pour les majuscules A à Z minuscules. 146 00:09:13,000 --> 00:09:18,000 Et quand nous le mod par 26 ou par NUM_LETTERS, 147 00:09:18,000 --> 00:09:23,000 puisque c'était notre # define en haut à droite ici, 148 00:09:23,000 --> 00:09:28,000 qui va nous donner une valeur qui se trouve dans la plage de 0 à 25, 149 00:09:28,000 --> 00:09:30,000 et nous avons besoin d'un moyen de l'échelle alors que les secours 150 00:09:30,000 --> 00:09:32,000 et le faire dans l'intervalle ASCII approprié. 151 00:09:32,000 --> 00:09:36,000 La meilleure façon de le faire est de simplement étendre tout vers le bas 152 00:09:36,000 --> 00:09:39,000 dans la plage de 0 à 25, pour commencer, 153 00:09:39,000 --> 00:09:43,000 et passer ensuite tout remettre en place à la fin. 154 00:09:43,000 --> 00:09:46,000 >> Une autre erreur commune que j'ai vu des gens courir en est que 155 00:09:46,000 --> 00:09:50,000 si vous n'avez pas fait cela tout de suite mise à l'échelle 156 00:09:50,000 --> 00:09:53,000 et que vous ajoutez un message et touche en même temps et vous les ajoutez, par exemple, 157 00:09:53,000 --> 00:09:58,000 dans une variable de type char, le problème avec cette 158 00:09:58,000 --> 00:10:01,000 C'est depuis le message [i] est un nombre relativement important de commencer par- 159 00:10:01,000 --> 00:10:05,000 n'oubliez pas que c'est au moins 65 ans si c'est une majuscule caractère 160 00:10:05,000 --> 00:10:09,000 si vous avez une grosse clef, disons, quelque chose comme 100, 161 00:10:09,000 --> 00:10:13,000 et vous ajoutez les 2 ensemble dans un char signé que vous allez obtenir un débordement. 162 00:10:13,000 --> 00:10:17,000 Vous allez obtenir une valeur qui est plus grand que 127, 163 00:10:17,000 --> 00:10:22,000 qui est la plus grande valeur qu'une variable de type char peut contenir. 164 00:10:22,000 --> 00:10:26,000 Encore une fois, c'est pourquoi vous voulez faire ce genre de chose pour commencer. 165 00:10:26,000 --> 00:10:29,000 Certaines personnes ont autour de ce cas en faisant un if else et tester 166 00:10:29,000 --> 00:10:33,000 pour voir si elle provoque un débordement avant de faire cela, 167 00:10:33,000 --> 00:10:36,000 mais de cette manière permet de contourner cela. 168 00:10:36,000 --> 00:10:40,000 Et puis, dans cette solution, nous avons imprimé sur toute la chaîne à la fin. 169 00:10:40,000 --> 00:10:45,000 D'autres personnes imprimé un caractère à la fois. Les deux sont super. 170 00:10:45,000 --> 00:10:51,000 À ce stade, que vous les gars avez des questions, des commentaires à ce sujet? 171 00:10:51,000 --> 00:10:56,000 Choses que vous aimez, des choses que vous n'aimez pas? 172 00:10:56,000 --> 00:10:58,000 >> J'avais une question. 173 00:10:58,000 --> 00:11:01,000 Peut-être que je l'ai raté lors de votre explication, mais comment ce programme 174 00:11:01,000 --> 00:11:07,000 sauter les espaces pour connecter la clé à la longueur du texte? 175 00:11:07,000 --> 00:11:10,000 Ce n'est qu'un chiffre de César. >> Oh, désolé, ouais. 176 00:11:10,000 --> 00:11:13,000 Ouais, on va voir ça. 177 00:11:13,000 --> 00:11:16,000 Dans le chiffrement de César nous nous sommes promenés que parce que 178 00:11:16,000 --> 00:11:18,000 nous ne retournée caractères. 179 00:11:18,000 --> 00:11:27,000 Nous ne les ai tournés s'ils étaient en majuscules ou en minuscules. 180 00:11:27,000 --> 00:11:32,000 Les gars, vous sentez assez bien à ce sujet? 181 00:11:32,000 --> 00:11:34,000 N'hésitez pas à copier cette maison, prenez-la, 182 00:11:34,000 --> 00:11:37,000 le comparer à ce que vous les gars ont écrit. 183 00:11:37,000 --> 00:11:42,000 Certainement, n'hésitez pas à envoyer vos questions à ce sujet aussi. 184 00:11:42,000 --> 00:11:46,000 Et encore une fois, se rendre compte que le but ici avec votre problème fixe 185 00:11:46,000 --> 00:11:50,000 n'est pas de faire de vous pour écrire du code parfait pour vos séries de problèmes. 186 00:11:50,000 --> 00:11:57,000 C'est une expérience d'apprentissage. Ouais. 187 00:11:57,000 --> 00:12:01,000 >> Retour à la boucle Do While, si elle est égale nulle, 188 00:12:01,000 --> 00:12:06,000 donc nulle signifie rien du tout, ils ont juste frappé entrer? 189 00:12:06,000 --> 00:12:12,000 Null est une valeur de pointeur spécial, 190 00:12:12,000 --> 00:12:17,000 et nous utilisons nulle lorsque nous voulons dire 191 00:12:17,000 --> 00:12:23,000 nous avons une variable pointeur qui pointe vers rien. 192 00:12:23,000 --> 00:12:28,000 Et si typiquement cela signifie que cette variable, cette variable message 193 00:12:28,000 --> 00:12:35,000 est vide, et ici, parce que nous utilisons le type CS50 chaîne spéciale, 194 00:12:35,000 --> 00:12:37,000 quel est le type de chaîne CS50? 195 00:12:37,000 --> 00:12:42,000 Avez-vous vu ce que c'est quand David tiré vers l'arrière de la hotte dans la conférence? 196 00:12:42,000 --> 00:12:44,000 C'est une musique funky-c'est un pointeur, pas vrai? 197 00:12:44,000 --> 00:12:48,000 Ok, ouais. >> C'est un char *. 198 00:12:48,000 --> 00:12:52,000 Et si vraiment on pourrait remplacer cette 199 00:12:52,000 --> 00:12:56,000 ici avec un message char *, 200 00:12:56,000 --> 00:13:04,000 et si la fonction GetString, si elle n'a pas réussi à obtenir une chaîne de caractères provenant de l'utilisateur, 201 00:13:04,000 --> 00:13:08,000 il ne peut pas analyser une chaîne, et le seul cas dans lequel il ne peut pas analyser une chaîne 202 00:13:08,000 --> 00:13:11,000 est que si l'utilisateur tape le caractère de fin de fichier, la commande D, 203 00:13:11,000 --> 00:13:17,000 ce qui n'est pas quelque chose que vous faites normalement, mais si cela se produit 204 00:13:17,000 --> 00:13:20,000 alors la fonction retourne cette valeur null comme une façon de dire 205 00:13:20,000 --> 00:13:23,000 "Hé, je n'ai pas une chaîne." 206 00:13:23,000 --> 00:13:27,000 Qu'arriverait-il si nous ne mettons pas un message = null, 207 00:13:27,000 --> 00:13:30,000 qui est quelque chose que nous n'avons pas fait encore? 208 00:13:30,000 --> 00:13:32,000 Pourquoi serait-ce un problème? 209 00:13:32,000 --> 00:13:38,000 Parce que je sais que nous avons parlé un peu de lecture sur les fuites de mémoire. 210 00:13:38,000 --> 00:13:42,000 Oui, nous allons le faire, et nous allons voir ce qui se passe. 211 00:13:42,000 --> 00:13:44,000 >> Question Basile était ce qui se passe si nous n'avons pas vraiment 212 00:13:44,000 --> 00:13:48,000 ce message de test = null? 213 00:13:48,000 --> 00:13:51,000 Faisons défiler vers le haut vers le haut. 214 00:13:51,000 --> 00:13:53,000 Les gars, vous pouvez commenter cette option. 215 00:13:53,000 --> 00:13:55,000 En fait, je vais l'enregistrer dans une révision. 216 00:13:55,000 --> 00:13:58,000 Ce sera la révision 3. 217 00:13:58,000 --> 00:14:02,000 Qu'est-ce que vous avez à faire pour exécuter ce programme est que vous aurez à cliquer sur cette icône d'engrenage ici, 218 00:14:02,000 --> 00:14:04,000 et vous aurez à ajouter un argument à lui. 219 00:14:04,000 --> 00:14:10,000 Vous devez lui donner l'argument clé, car nous voulons passer un argument de ligne de commande. 220 00:14:10,000 --> 00:14:13,000 Ici, je vais lui donner le numéro 3. J'aime 3. 221 00:14:13,000 --> 00:14:19,000 Maintenant zoom revenir en arrière, l'exécution du programme. 222 00:14:19,000 --> 00:14:24,000 Il fonctionne, la compilation, la construction. 223 00:14:24,000 --> 00:14:27,000 Nous y voilà. Il attend d'être invité. 224 00:14:27,000 --> 00:14:33,000 Si je tape dans quelque chose comme bonjour, où ça s'est passé? 225 00:14:33,000 --> 00:14:38,000 Oh, mon programme a pris trop de temps à s'exécuter. J'ai été jawing depuis trop longtemps. 226 00:14:38,000 --> 00:14:40,000 Ici, il va. 227 00:14:40,000 --> 00:14:43,000 Maintenant je tape bonjour. 228 00:14:43,000 --> 00:14:46,000 Nous voyons que le chiffre de manière appropriée. 229 00:14:46,000 --> 00:14:52,000 Maintenant ce qui se passe si nous faisons GetString invite pour revenir nulle? 230 00:14:52,000 --> 00:14:57,000 Rappelez-vous, j'ai dit que nous l'avons fait en appuyant sur commande D dans le même temps. 231 00:14:57,000 --> 00:14:59,000 Je vais défiler vers le haut ici. Nous allons l'exécuter à nouveau. 232 00:14:59,000 --> 00:15:01,000 Bâtiment. Là, il va. 233 00:15:01,000 --> 00:15:04,000 Maintenant, quand je frappe le contrôle D 234 00:15:04,000 --> 00:15:12,000 J'ai eu cette ligne qui indique opt/sandbox50/bin/run.sh, Segmentation fault. 235 00:15:12,000 --> 00:15:15,000 Avez-vous les gars vu ça avant? 236 00:15:15,000 --> 00:15:17,000 >> [Étudiants] Pourquoi n'y at-il >> Désolé? 237 00:15:17,000 --> 00:15:20,000 [Étudiants] Pourquoi aucune core dump dans ce cas? 238 00:15:20,000 --> 00:15:26,000 Le core dump est-la question est pourquoi est-il pas de core dump ici? 239 00:15:26,000 --> 00:15:29,000 La question, c'est qu'il ya peut-être, mais le core dump est un fichier 240 00:15:29,000 --> 00:15:31,000 qui est stocké sur le disque dur. 241 00:15:31,000 --> 00:15:34,000 Dans ce cas, nous avons désactivé core dumps 242 00:15:34,000 --> 00:15:37,000 sur le serveur d'exécution de sorte que nous n'avons pas les gens seg failles 243 00:15:37,000 --> 00:15:40,000 et le renforcement des tonnes de core dump. 244 00:15:40,000 --> 00:15:46,000 Mais vous pouvez en obtenir un. 245 00:15:46,000 --> 00:15:48,000 Core dumps sont le genre de chose que vous pouvez souvent désactiver, 246 00:15:48,000 --> 00:15:52,000 et parfois vous faites. 247 00:15:52,000 --> 00:15:55,000 L'erreur de segmentation, pour répondre à votre question, Basil, 248 00:15:55,000 --> 00:16:00,000 dit que nous avons essayé d'accéder à un pointeur 249 00:16:00,000 --> 00:16:05,000 qui n'a pas été définie pour pointer sur quoi que ce soit. 250 00:16:05,000 --> 00:16:09,000 Se souvenir de Binky dans la vidéo lors de Binky tente de 251 00:16:09,000 --> 00:16:12,000 allez accéder à un pointeur qui ne pointe pas vers qui se quoi que ce soit? 252 00:16:12,000 --> 00:16:16,000 Dans ce cas, je suppose que, techniquement, le pointeur pointe vers quelque chose. 253 00:16:16,000 --> 00:16:20,000 Il pointe vers nulle, ce qui est techniquement 0, 254 00:16:20,000 --> 00:16:25,000 mais qui est définie pour être dans un segment qui n'est pas accessible 255 00:16:25,000 --> 00:16:28,000 par votre programme, vous obtenez une erreur de segmentation 256 00:16:28,000 --> 00:16:31,000 parce que vous n'êtes pas accéder à la mémoire qui se trouve dans un segment valide 257 00:16:31,000 --> 00:16:38,000 comme le segment de pile ou le segment de pile ou le segment de données. 258 00:16:38,000 --> 00:16:40,000 Cool. 259 00:16:40,000 --> 00:16:48,000 D'autres questions à propos de César? 260 00:16:48,000 --> 00:16:51,000 >> Passons à autre chose. Regardons Révision 2 très rapidement. 261 00:16:51,000 --> 00:17:00,000 C'est Vigenère. 262 00:17:00,000 --> 00:17:04,000 Ici, dans Vigenère 263 00:17:04,000 --> 00:17:06,000 nous allons marcher à travers celui-ci assez rapidement parce que, encore une fois, 264 00:17:06,000 --> 00:17:10,000 Vigenère et César sont assez similaires. 265 00:17:10,000 --> 00:17:12,000 Commentaire d'en-tête est devant, 266 00:17:12,000 --> 00:17:17,000 # Define est avant pour éviter d'utiliser ces nombres magiques. 267 00:17:17,000 --> 00:17:21,000 La bonne chose est que nous voulions passer à 268 00:17:21,000 --> 00:17:23,000 un alphabet différent ou quelque chose comme ça. 269 00:17:23,000 --> 00:17:26,000 Plutôt que d'avoir à aller modifier manuellement tous les 26 dans le code de 270 00:17:26,000 --> 00:17:30,000 nous pourrions changer cela pour 27 ou le faire tomber 271 00:17:30,000 --> 00:17:34,000 si nous utilisions des alphabets différents, des langues différentes. 272 00:17:34,000 --> 00:17:38,000 Encore une fois, nous avons cette vérification de l'argument nombre, 273 00:17:38,000 --> 00:17:42,000 et vraiment, on peut presque considérer cela comme un modèle. 274 00:17:42,000 --> 00:17:46,000 Presque chaque programme que vous écrivez doit avoir- 275 00:17:46,000 --> 00:17:50,000 si elle a des arguments de ligne de commande-une séquence de lignes 276 00:17:50,000 --> 00:17:55,000 qui se lit comme ça au début. 277 00:17:55,000 --> 00:17:59,000 C'est l'un des tests sanity abord, vous voulez faire. 278 00:17:59,000 --> 00:18:03,000 >> Voici ce que nous avons été nous nous sommes assurés que les 279 00:18:03,000 --> 00:18:06,000 le mot-clé est valide, et que c'était la deuxième vérification que nous avons fait. 280 00:18:06,000 --> 00:18:11,000 Notez encore une fois que nous nous sommes séparés de cette argc et 2. 281 00:18:11,000 --> 00:18:14,000 Notez que dans ce cas, une chose que nous avions à faire était plutôt 282 00:18:14,000 --> 00:18:18,000 de l'utilisation de a à i nous voulions valider la totalité de la chaîne, 283 00:18:18,000 --> 00:18:21,000 et pour ce faire que vous avez réellement besoin d'aller caractère par caractère 284 00:18:21,000 --> 00:18:23,000 sur la chaîne. 285 00:18:23,000 --> 00:18:29,000 Il n'ya pas de bonne façon d'appeler quelque chose à ce sujet 286 00:18:29,000 --> 00:18:31,000 parce que même, par exemple, a à i retourne 0 287 00:18:31,000 --> 00:18:37,000 si elle ne peut pas analyser un nombre entier, ce qui ne fonctionne même pas. 288 00:18:37,000 --> 00:18:42,000 Encore une fois, joli message indiquant à l'utilisateur exactement ce qui s'est passé. 289 00:18:42,000 --> 00:18:45,000 Alors voilà, encore une fois, nous avons également gérer le cas où 290 00:18:45,000 --> 00:18:50,000 l'utilisateur tape un caractère de contrôle D aléatoire. 291 00:18:50,000 --> 00:18:54,000 >> Et puis, Charlotte a eu plus tôt une question sur la façon dont nous gérons pour passer espaces 292 00:18:54,000 --> 00:18:57,000 dans notre chaîne ici. 293 00:18:57,000 --> 00:19:00,000 C'était un peu similaire à ce que nous avons fait avec le programme Myspace 294 00:19:00,000 --> 00:19:04,000 que nous avons fait dans la section, et la façon dont cela a fonctionné 295 00:19:04,000 --> 00:19:08,000 est que nous avons suivi le nombre de lettres que nous avions vu. 296 00:19:08,000 --> 00:19:13,000 Tandis que nous marchions sur la chaîne de message, alors que nous marchions sur le caractère par caractère, 297 00:19:13,000 --> 00:19:16,000 nous avons suivi l'indice dans le cadre de notre boucle for, puis nous avons également suivi 298 00:19:16,000 --> 00:19:21,000 le nombre de lettres, de sorte non des caractères spéciaux, chiffres, non-non-Blancs espace 299 00:19:21,000 --> 00:19:27,000 que nous avions vu dans la variable distincte. 300 00:19:27,000 --> 00:19:33,000 Et puis cette solution modifie la clé 301 00:19:33,000 --> 00:19:41,000 pour obtenir un nombre entier de clé réelle, et il le fait à la volée, 302 00:19:41,000 --> 00:19:47,000 juste avant qu'il ne se rend ensuite à chiffrer le caractère réel des messages. 303 00:19:47,000 --> 00:19:50,000 Il existe des solutions qui étaient parfaitement très bien aussi 304 00:19:50,000 --> 00:19:58,000 qui modifierait la touche vers le haut lors du test de validité de la clé. 305 00:19:58,000 --> 00:20:01,000 En plus de s'assurer que le caractère et le mot-clé 306 00:20:01,000 --> 00:20:05,000 a un caractère alphabétique elle a également tourné que dans un nombre entier 307 00:20:05,000 --> 00:20:13,000 dans l'intervalle 0 à 25 puis passez à avoir à le faire plus tard dans cette boucle for. 308 00:20:13,000 --> 00:20:18,000 Encore une fois, vous voyez ici c'est vraiment exactement le même code 309 00:20:18,000 --> 00:20:22,000 que nous avons utilisé dans César à ce stade. 310 00:20:22,000 --> 00:20:25,000 Vous faites exactement la même chose, de sorte que le vrai truc est de trouver 311 00:20:25,000 --> 00:20:30,000 comment mettre la clé dans un entier. 312 00:20:30,000 --> 00:20:35,000 >> Une chose que nous avons fait ici c'est un peu dense 313 00:20:35,000 --> 00:20:39,000 est, nous avons répété cette phrase, je suppose que vous pourriez l'appeler, 314 00:20:39,000 --> 00:20:45,000 3 fois séparées sur les lignes 58, 59, et 61. 315 00:20:45,000 --> 00:20:52,000 Quelqu'un peut-il expliquer ce qu'est exactement cette phrase fait? 316 00:20:52,000 --> 00:20:55,000 Il accède à un personnage, comme vous avez dit. 317 00:20:55,000 --> 00:20:59,000 Ouais, c'est [inaudible] un caractère dans le mot-clé, 318 00:20:59,000 --> 00:21:04,000 et il est donc certain nombre de lettres vus parce que vous êtes seulement se déplaçant le long 319 00:21:04,000 --> 00:21:06,000 le mot-clé une fois que vous avez vu la lettre, 320 00:21:06,000 --> 00:21:10,000 de sorte que ça va passer efficacement des espaces et des trucs comme ça. 321 00:21:10,000 --> 00:21:12,000 Oui, exactement. 322 00:21:12,000 --> 00:21:16,000 Et puis une fois que vous avez vu l'ébauche de mot-clé que vous venez de mod si vous vous déplacez en arrière autour. 323 00:21:16,000 --> 00:21:18,000 Exactement. C'est une explication parfaite. 324 00:21:18,000 --> 00:21:23,000 Que Kevin a dit, c'est que nous voulons index dans la clé. 325 00:21:23,000 --> 00:21:28,000 Nous voulons obtenir le caractère num_letters_seen, si vous voulez, 326 00:21:28,000 --> 00:21:32,000 mais si num_letters_seen dépasse la longueur de la clé, 327 00:21:32,000 --> 00:21:37,000 la façon dont nous serons de retour dans la gamme appropriée est que nous utilisons l'opérateur mod 328 00:21:37,000 --> 00:21:40,000 efficacement envelopper. 329 00:21:40,000 --> 00:21:43,000 Par exemple, comme dans le court, le mot clé est notre bacon, 330 00:21:43,000 --> 00:21:46,000 et c'est 5 lettres. 331 00:21:46,000 --> 00:21:50,000 Mais nous avons vu 6 lettres dans notre texte à ce stade 332 00:21:50,000 --> 00:21:52,000 et crypté 6. 333 00:21:52,000 --> 00:21:57,000 Nous allons finir par accéder à la num_letters_seen, 334 00:21:57,000 --> 00:22:00,000 qui est 6, la longueur du mod le mot 5, 335 00:22:00,000 --> 00:22:04,000 et ainsi nous aurons 1, et donc ce que nous allons faire, c'est nous allons 336 00:22:04,000 --> 00:22:14,000 accéder à l'intérieur du premier caractère de notre mot à ce point. 337 00:22:14,000 --> 00:22:21,000 >> Tout droit, toute question sur Vigenère 338 00:22:21,000 --> 00:22:26,000 avant de passer? 339 00:22:26,000 --> 00:22:31,000 Les gars, vous sentez assez bien à ce sujet? 340 00:22:31,000 --> 00:22:35,000 Cool, génial. 341 00:22:35,000 --> 00:22:38,000 Je tiens à vous assurer que vous les gars ont la chance de voir le code 342 00:22:38,000 --> 00:22:48,000 que nous pensons semble bon et avoir la chance d'apprendre de lui. 343 00:22:48,000 --> 00:22:53,000 Ce sera le dernier que nous allons utiliser les espaces pour le moment, 344 00:22:53,000 --> 00:22:59,000 et nous allons faire la transition maintenant, et je vais aller à cs50.net/lectures 345 00:22:59,000 --> 00:23:06,000 afin que nous puissions faire un peu de révision quiz. 346 00:23:06,000 --> 00:23:10,000 La meilleure façon je pense que pour commencer à faire questionnaire examen 347 00:23:10,000 --> 00:23:15,000 est d'arriver à cette page Conférences, cs50.net/lectures, 348 00:23:15,000 --> 00:23:20,000 et sous chacune des rubriques semaine, donc si je regarde ici à la semaine 0, 349 00:23:20,000 --> 00:23:27,000 Je vois que nous avons une liste de sujets que nous avons vu dans la semaine 0. 350 00:23:27,000 --> 00:23:31,000 >> Si l'un de ces sujets semblent pas familier pour vous 351 00:23:31,000 --> 00:23:34,000 vous aurez certainement envie de revenir en arrière et parcourir les notes de cours et, éventuellement, 352 00:23:34,000 --> 00:23:39,000 même parcourir les conférences, les regarder à nouveau si vous voulez 353 00:23:39,000 --> 00:23:44,000 pour avoir une idée de ce qui se passe avec chacun de ces sujets. 354 00:23:44,000 --> 00:23:49,000 Je dirai plus, cette année, une des ressources fraîches que nous avons obtenu 355 00:23:49,000 --> 00:23:55,000 est ce short que nous avons créés, et si vous regardez à la semaine 0, 356 00:23:55,000 --> 00:24:00,000 nous n'avons pas tous les sujets abordés, mais nous avons un assez grand nombre d'entre eux, 357 00:24:00,000 --> 00:24:03,000 quelques-uns des plus délicates, donc regarder ce short à nouveau 358 00:24:03,000 --> 00:24:08,000 est un bon moyen pour vous mettre au courant. 359 00:24:08,000 --> 00:24:15,000 En particulier, je vais mettre dans une prise pour le 3 sur le fond, depuis que j'ai fait ceux-ci. 360 00:24:15,000 --> 00:24:20,000 Mais si vous êtes aux prises avec binaire, bits, hexagonales, ce genre de choses, 361 00:24:20,000 --> 00:24:22,000 binaire est un excellent endroit pour commencer. 362 00:24:22,000 --> 00:24:25,000 ASCII est un autre qui est bon de voir aussi. 363 00:24:25,000 --> 00:24:31,000 Vous pouvez même me regarder à la vitesse de 1.5x si je vais trop lent pour vous. 364 00:24:31,000 --> 00:24:35,000 Depuis sa révision, n'hésitez pas à le faire. 365 00:24:35,000 --> 00:24:40,000 >> Juste pour commencer très rapidement, nous allons passer par un couple de ces problèmes de quiz 366 00:24:40,000 --> 00:24:44,000 juste pour rapidement le taux de désabonnement à travers celles-ci. 367 00:24:44,000 --> 00:24:50,000 Par exemple, regardons problème 16 que je dois juste ici sur le plateau. 368 00:24:50,000 --> 00:24:54,000 Nous avons ce calcul suivant en binaire, 369 00:24:54,000 --> 00:24:56,000 et nous voulons montrer tout le travail. 370 00:24:56,000 --> 00:24:59,000 Ok, je vais vous donner ce coup. 371 00:24:59,000 --> 00:25:01,000 Vous devriez suivre avec le papier, 372 00:25:01,000 --> 00:25:04,000 et nous ferons ce très rapidement. 373 00:25:04,000 --> 00:25:06,000 Nous voulons effectuer le calcul suivant en binaire. 374 00:25:06,000 --> 00:25:16,000 J'ai 00110010. 375 00:25:16,000 --> 00:25:27,000 Et je vais y ajouter 00110010. 376 00:25:27,000 --> 00:25:30,000 Pour le calcul des génies suivant le long à la maison, 377 00:25:30,000 --> 00:25:35,000 ceci est effectivement multiplier par 2. 378 00:25:35,000 --> 00:25:37,000 Commençons. 379 00:25:37,000 --> 00:25:39,000 Nous allons suivre l'algorithme d'addition même que nous faisons 380 00:25:39,000 --> 00:25:43,000 si l'on ajoute les nombres décimaux ensemble. 381 00:25:43,000 --> 00:25:46,000 En réalité, la seule différence ici est que nous bouclage autour 382 00:25:46,000 --> 00:25:51,000 une fois que nous avons 1 + 1 au lieu d'une fois nous arrivons à 10. 383 00:25:51,000 --> 00:25:53,000 >> Si nous partons de la droite, très rapidement, ce qui est le premier chiffre? 384 00:25:53,000 --> 00:25:55,000 [Étudiants] 0. >> [Nate H.] 0. 385 00:25:55,000 --> 00:25:58,000 Grande, le deuxième chiffre? 386 00:25:58,000 --> 00:26:00,000 [Étudiants] 1. 387 00:26:00,000 --> 00:26:02,000 [Nate H.] Est-ce un 1? 1 + 1 est? 388 00:26:02,000 --> 00:26:04,000 [Étudiants] 10. 389 00:26:04,000 --> 00:26:08,000 [Nate H.] Exactement, alors quel est le chiffre que je vous écris juste en dessous des 2 ceux ajoutés ensemble? 390 00:26:08,000 --> 00:26:11,000 [Étudiants] 1, 0, ou 0, puis porter la 1. 391 00:26:11,000 --> 00:26:15,000 [Nate H.] 0 et porter un 1, exactement. 392 00:26:15,000 --> 00:26:18,000 Prochaine étape un, Basil, c'est à vous. 393 00:26:18,000 --> 00:26:20,000 Quelle est la troisième? >> [Basil] 1. 394 00:26:20,000 --> 00:26:23,000 [Nate H.] 1, parfait. Kevin? 395 00:26:23,000 --> 00:26:27,000 [Kevin] 0. >> [Nate H.] 0, Charlotte? 396 00:26:27,000 --> 00:26:30,000 [Charlotte] 0. >> [Nate H.] Ouais, et qu'est-ce que je dois faire? 397 00:26:30,000 --> 00:26:32,000 [Étudiants] Le 1. 398 00:26:32,000 --> 00:26:34,000 [Nate H.] Et que dois-je faire? Et puis je porte le 1. 399 00:26:34,000 --> 00:26:36,000 Parfait, Sahb? >> [Sahb] Maintenant, vous avez 1. 400 00:26:36,000 --> 00:26:40,000 [Nate H.] Et dois-je faire quelque chose ici? 401 00:26:40,000 --> 00:26:43,000 [Sahb] Alors, pour le prochain vous avez 1 parce que vous reportés 1. 402 00:26:43,000 --> 00:26:49,000 [Nate H.] Super, ici, nous pouvons le terminer. 403 00:26:49,000 --> 00:26:51,000 Cool. 404 00:26:51,000 --> 00:26:54,000 [Étudiants] Est-ce que 0 + 0 = 0? 405 00:26:54,000 --> 00:26:56,000 0 + 0 = 0. 406 00:26:56,000 --> 00:27:01,000 1 + 1, comme vous l'avez dit, est de 10, ou 1, 0, plutôt. 407 00:27:01,000 --> 00:27:07,000 10 est un abus de langage car pour moi, 10 signifie que le nombre 10, 408 00:27:07,000 --> 00:27:12,000 et c'est le caprice de la façon dont nous le représenter lorsque nous l'écrire. 409 00:27:12,000 --> 00:27:20,000 Nous représentons le numéro 2 de 1, 0, et le nombre 10 est légèrement différente. 410 00:27:20,000 --> 00:27:23,000 >> Ce qui est plutôt agréable à propos de binaire est qu'il ya vraiment pas beaucoup 411 00:27:23,000 --> 00:27:25,000 des cas, vous avez besoin d'apprendre. 412 00:27:25,000 --> 00:27:30,000 Il ya 0 + 0 = 0, 0 + 1 = 1, 413 00:27:30,000 --> 00:27:34,000 1 + 1 est égal à 0, puis effectuer un 1, 414 00:27:34,000 --> 00:27:37,000 et puis vous pouvez voir ici sur la troisième colonne de droite 415 00:27:37,000 --> 00:27:40,000 nous avons eu cette 1, 1 et 1. 416 00:27:40,000 --> 00:27:43,000 Et 1 + 1 + 1 est un 1, 417 00:27:43,000 --> 00:27:45,000 et vous portez un autre 1. 418 00:27:45,000 --> 00:27:48,000 Lorsque vous faites l'addition binaire, assez simple. 419 00:27:48,000 --> 00:27:51,000 Je ferais un couple de ces plus à la raison vous vérifiez 420 00:27:51,000 --> 00:27:54,000 avant d'entrer parce que ce n'est 421 00:27:54,000 --> 00:28:00,000 probablement quelque chose que nous verrons sur le quiz. 422 00:28:00,000 --> 00:28:03,000 Maintenant, nous allons le faire suivant ainsi. 423 00:28:03,000 --> 00:28:06,000 Faisons problème 17. 424 00:28:06,000 --> 00:28:12,000 Nous allons convertir le nombre binaire en décimal suivant. 425 00:28:12,000 --> 00:28:28,000 J'ai 10100111001. 426 00:28:28,000 --> 00:28:33,000 Rappelez-vous dans la vidéo binaire que j'ai fait 427 00:28:33,000 --> 00:28:36,000 Je marchais à travers quelques exemples, et j'ai montré comment 428 00:28:36,000 --> 00:28:41,000 tout fonctionne lorsque vous le faites en décimal. 429 00:28:41,000 --> 00:28:45,000 Lorsque vous travaillez en représentation décimale, je pense que nous sommes 430 00:28:45,000 --> 00:28:48,000 à ce stade dans nos vies afin couramment dans ce que 431 00:28:48,000 --> 00:28:53,000 il est assez facile de passer sous silence les mécanismes de la façon dont il fonctionne réellement. 432 00:28:53,000 --> 00:28:59,000 >> Mais pour ce faire un bref récapitulatif, si j'ai le numéro 137 433 00:28:59,000 --> 00:29:06,000 cela signifie-et vraiment nouveau, c'est dans la représentation décimale- 434 00:29:06,000 --> 00:29:19,000 le numéro 137 en décimal signifie que je dois 1 x 100 + 3 x 10 + 7 x 1. 435 00:29:19,000 --> 00:29:22,000 Ceci est d'autant rester sur l'écran. 436 00:29:22,000 --> 00:29:29,000 Et puis, si vous regardez ces chiffres ici, 437 00:29:29,000 --> 00:29:34,000 100, 10 et 1, on voit que ce sont en fait toutes les puissances de 10. 438 00:29:34,000 --> 00:29:43,000 J'ai 10 ², 10 ¹, et 10 à zéro. 439 00:29:43,000 --> 00:29:48,000 Nous avons une sorte de chose semblable en binaire, 440 00:29:48,000 --> 00:29:55,000 sauf que notre base, comme nous l'appelons, est de 2 au lieu de 10. 441 00:29:55,000 --> 00:29:58,000 Ces 10s que j'ai écrit ici-bas au fond, 442 00:29:58,000 --> 00:30:02,000 ce ² 10, 10 ¹, 10 au zéro, est notre base 10, 443 00:30:02,000 --> 00:30:08,000 et l'exposant, 0, 1, ou 2, 444 00:30:08,000 --> 00:30:14,000 est impliqué par la position du chiffre dans le nombre que nous écrivons. 445 00:30:14,000 --> 00:30:21,000 1, si l'on regarde, ce 1 est en 2ème position. 446 00:30:21,000 --> 00:30:27,000 La figure 3 est en position 1, et la figure 7 est en position 0e. 447 00:30:27,000 --> 00:30:35,000 C'est ainsi que nous obtenons les divers exposants ci-dessous pour nos bases. 448 00:30:35,000 --> 00:30:40,000 >> Après tout cela, we'll-en fait, vous savez quoi? 449 00:30:40,000 --> 00:30:43,000 Nous ferons-Où est mon bouton Annuler aller? 450 00:30:43,000 --> 00:30:45,000 Là, il va. 451 00:30:45,000 --> 00:30:47,000 J'aime cette annulation chose. 452 00:30:47,000 --> 00:30:51,000 Suite à cela, je pense que pour moi au moins 453 00:30:51,000 --> 00:30:54,000 la meilleure façon de commencer la conversion d'un nombre binaire 454 00:30:54,000 --> 00:30:57,000 ou un nombre hexadécimal dans lequel la base est de 16 455 00:30:57,000 --> 00:31:02,000 et non pas 10 ou 2 est d'aller de l'avant et d'écrire 456 00:31:02,000 --> 00:31:09,000 les bases et les exposants pour tous les numéros dans mon nombre binaire en haut. 457 00:31:09,000 --> 00:31:14,000 Si nous partons de gauche à droite à nouveau, 458 00:31:14,000 --> 00:31:17,000 ce qui est assez paradoxal, 459 00:31:17,000 --> 00:31:23,000 Je vais revenir au noir ici, nous avons la 2 à la position 0e, 460 00:31:23,000 --> 00:31:27,000 et puis nous avons 2 ¹, 2 ², 461 00:31:27,000 --> 00:31:33,000 puis 2 à la 3, 2 à la 4, 2 à la 5, 6, 462 00:31:33,000 --> 00:31:39,000 7, 8, 9, et 10. 463 00:31:39,000 --> 00:31:41,000 Ces chiffres que j'ai écrites sur tous les exposants sont. 464 00:31:41,000 --> 00:31:48,000 J'ai seulement écrit les bases ici dans les 3 premiers seulement pour l'espace. 465 00:31:48,000 --> 00:31:50,000 >> A ce stade, je vais aller de l'avant et je suis vraiment en train d'effacer 466 00:31:50,000 --> 00:31:53,000 les choses que nous avons fait en décimal, si cela vous convient. 467 00:31:53,000 --> 00:31:57,000 Vous avez tous compris. 468 00:31:57,000 --> 00:32:05,000 Ceux d'entre vous regarder en ligne Je suis sûr, sera en mesure de me revenir en arrière si vous le souhaitez. 469 00:32:05,000 --> 00:32:07,000 Le retour à la plume. 470 00:32:07,000 --> 00:32:12,000 Maintenant, ce que nous pouvons faire, si vous les gars ne sont pas totalement au courant de vos puissances de 2, 471 00:32:12,000 --> 00:32:15,000 c'est vraiment cool. 472 00:32:15,000 --> 00:32:18,000 Il ne se passe. Je comprends. 473 00:32:18,000 --> 00:32:23,000 Une fois, j'ai eu un entretien d'embauche où on m'a dit que je devrais savoir toutes les puissances de 2 474 00:32:23,000 --> 00:32:26,000 à travers 2 à la 30e. 475 00:32:26,000 --> 00:32:29,000 Ce n'était pas un travail que j'ai eue. 476 00:32:29,000 --> 00:32:32,000 Quoi qu'il en soit, les gars vous pouvez aller de l'avant et faire le calcul ici, 477 00:32:32,000 --> 00:32:35,000 mais avec des binaires, il n'a pas vraiment de sens, 478 00:32:35,000 --> 00:32:38,000 et ne porte pas de sens avec décimal ou hexadécimal soit, 479 00:32:38,000 --> 00:32:43,000 de faire le calcul sur lequel vous avez des zéros. 480 00:32:43,000 --> 00:32:49,000 Vous pouvez voir que j'ai 0 ici, un 0 ici, 0 ici, 0 ici, 0 ici, 0 ici. 481 00:32:49,000 --> 00:32:52,000 Pourquoi serait-il pas judicieux de faire le calcul réel 482 00:32:52,000 --> 00:32:56,000 à calculer la puissance appropriée de 2 pour que la position? 483 00:32:56,000 --> 00:32:59,000 Exactement, comme dit Charlotte, ce sera 0. 484 00:32:59,000 --> 00:33:05,000 Pourrait tout aussi bien vous épargner du temps, si le calcul des puissances de 2 n'est pas votre point fort. 485 00:33:05,000 --> 00:33:10,000 Dans ce cas, nous avons seulement besoin de le calculer pour 2 à 0, ce qui est la-? 486 00:33:10,000 --> 00:33:12,000 [Étudiants] 1. 487 00:33:12,000 --> 00:33:14,000 [Nate H.] 1, 2 et 3, qui est la-? 488 00:33:14,000 --> 00:33:16,000 [Étudiants] 8. >> [Nate H.] 8. 489 00:33:16,000 --> 00:33:18,000 2 à la 4? 490 00:33:18,000 --> 00:33:21,000 [Étudiants] 2. Je suis désolé, 1. 491 00:33:21,000 --> 00:33:26,000 [Nate H.] 2 au 4 a 16 ans, exactement. 492 00:33:26,000 --> 00:33:28,000 2 au 5, Kevin? >> 32. 493 00:33:28,000 --> 00:33:32,000 [Nate H.] 32, 2 au 8? 494 00:33:32,000 --> 00:33:38,000 [Étudiants] 32 x 8, 256. 495 00:33:38,000 --> 00:33:41,000 [Nate H.] Parfait. 496 00:33:41,000 --> 00:33:43,000 Et 2 à la 10? 497 00:33:43,000 --> 00:33:45,000 [Etudiant] 1024. 498 00:33:45,000 --> 00:33:49,000 [Nate H.] Ouais, 1024. 499 00:33:49,000 --> 00:33:57,000 >> Une fois que nous avons ces chiffres, nous pouvons résumer le tout. 500 00:33:57,000 --> 00:34:01,000 Et c'est là que c'est vraiment important de faire un certain nombre de choses. 501 00:34:01,000 --> 00:34:07,000 On est aller lentement et vérifier votre travail. 502 00:34:07,000 --> 00:34:10,000 Vous pouvez dire qu'il ya un 1 à la fin de ce nombre, 503 00:34:10,000 --> 00:34:15,000 donc je devrais certainement obtenir un nombre impair de mon résultat, 504 00:34:15,000 --> 00:34:18,000 parce que tous les autres vont être des nombres pairs 505 00:34:18,000 --> 00:34:21,000 étant donné que c'est un nombre binaire. 506 00:34:21,000 --> 00:34:24,000 L'autre chose à faire, c'est si vous arrivez à ce point sur le test 507 00:34:24,000 --> 00:34:27,000 et vous l'avez écrit sur ce bien 508 00:34:27,000 --> 00:34:30,000 et vous êtes à court de temps 509 00:34:30,000 --> 00:34:33,000 regardez le nombre de points que ce problème vaut la peine. 510 00:34:33,000 --> 00:34:40,000 Ce problème, comme vous pouvez le voir, si je retourner en arrière à mon ordinateur portable très rapidement- 511 00:34:40,000 --> 00:34:44,000 ce problème vaut 2 points, donc ce n'est pas le genre d'addition 512 00:34:44,000 --> 00:34:47,000 vous devez passer par si vous êtes vraiment pressé par le temps. 513 00:34:47,000 --> 00:34:52,000 Mais nous allons revenir à l'iPad, et nous allons passer en revue très rapidement. 514 00:34:52,000 --> 00:34:54,000 >> J'aime faire les numéros petits d'abord 515 00:34:54,000 --> 00:34:56,000 parce que je trouve cela plus facile. 516 00:34:56,000 --> 00:35:00,000 J'aime 32 et 8 parce qu'elles s'accompagnent assez facilement, et nous obtenons 50. 517 00:35:00,000 --> 00:35:03,000 16 et 1 obtient 17. 518 00:35:03,000 --> 00:35:05,000 Il nous obtenons 57, 519 00:35:05,000 --> 00:35:14,000 et nous pourrons alors faire le reste de ce fait, de sorte que nous pouvons faire 57, 156. 520 00:35:14,000 --> 00:35:16,000 Allez. 521 00:35:16,000 --> 00:35:19,000 L'homme, eh bien, nous allons voir. 522 00:35:19,000 --> 00:35:27,000 Nous avons eu 57, 256 et 1024. 523 00:35:27,000 --> 00:35:31,000 À ce stade, je préfère passer. 524 00:35:31,000 --> 00:35:35,000 Je n'ai aucune idée. J'ai bien besoin de lire à ce sujet. 525 00:35:35,000 --> 00:35:40,000 7, 6, et 4, vous obtenez 17. 526 00:35:40,000 --> 00:35:42,000 1, 5, 5, 2, 13. 527 00:35:42,000 --> 00:35:45,000 Ensuite, on obtient 3, puis on a 1. 528 00:35:45,000 --> 00:35:52,000 1337. 529 00:35:52,000 --> 00:35:55,000 Oeufs de Pâques, tout le monde? 530 00:35:55,000 --> 00:35:59,000 Tout le monde reconnaît ce numéro? 531 00:35:59,000 --> 00:36:02,000 Chris reconnaît le nombre. Qu'est-ce que ça veut dire, Chris? 532 00:36:02,000 --> 00:36:04,000 [Chris] Leet. 533 00:36:04,000 --> 00:36:11,000 Leet, donc si vous regardez cela, il ressemble à leet. 534 00:36:11,000 --> 00:36:15,000 Hacker choses. Méfiez-vous de ce genre de trucs sur le moyen terme ou le quiz, plutôt. 535 00:36:15,000 --> 00:36:19,000 Si vous voyez ce genre de choses et vous vous demandez "Euh," 536 00:36:19,000 --> 00:36:22,000 qui pourrait réellement signifier quelque chose. 537 00:36:22,000 --> 00:36:24,000 Je ne sais pas. David aime le mettre po 538 00:36:24,000 --> 00:36:26,000 C'est un bon moyen de vérifier la validité de celui. 539 00:36:26,000 --> 00:36:30,000 Comme bien, je peux voir ce qui se passe. 540 00:36:30,000 --> 00:36:34,000 >> C'est la Semaine 0/semaine une substance. 541 00:36:34,000 --> 00:36:39,000 Si nous revenir à notre ordinateur portable maintenant, 542 00:36:39,000 --> 00:36:46,000 effectuer un zoom arrière, et un couple d'autres choses. 543 00:36:46,000 --> 00:36:50,000 Il ya ASCII, que nous avons fait beaucoup de problèmes avec les jeux. 544 00:36:50,000 --> 00:36:55,000 Cette notion de capital A. Qu'est-ce que vraiment? 545 00:36:55,000 --> 00:36:57,000 Sachant que c'est l'entier décimal. 546 00:36:57,000 --> 00:37:00,000 65 est ce qu'il est mappé à la table ASCII, 547 00:37:00,000 --> 00:37:03,000 et c'est donc de savoir comment l'ordinateur, il écrit: 548 00:37:03,000 --> 00:37:06,000 et c'est ainsi que nous avons reçu de suite avec de l'écrire 549 00:37:06,000 --> 00:37:09,000 la capitale caractère A et le caractère en minuscule un 550 00:37:09,000 --> 00:37:14,000 dans certains de ces solutions et ensembles de problèmes que vous avez fait. 551 00:37:14,000 --> 00:37:16,000 Un couple d'autres choses. 552 00:37:16,000 --> 00:37:25,000 Nous avons déclarations, expressions booléennes, conditions, boucles, variables et les threads. 553 00:37:25,000 --> 00:37:29,000 >> Ceux semblent tous sens pour la plupart? 554 00:37:29,000 --> 00:37:35,000 Une partie de cette terminologie est un peu funky à la fois. 555 00:37:35,000 --> 00:37:46,000 J'aime à penser de la déclaration de la chose la plus partie qui se termine par un point-virgule. 556 00:37:46,000 --> 00:37:51,000 Des déclarations telles que x = 7, qui définit une variable, 557 00:37:51,000 --> 00:37:54,000 vraisemblablement appelé x = 7. 558 00:37:54,000 --> 00:38:01,000 On peut supposer que x est aussi un type qui peut stocker le numéro 7, 559 00:38:01,000 --> 00:38:05,000 il est donc un int ou un float ou peut-être un court-circuit ou un char, 560 00:38:05,000 --> 00:38:07,000 quelque chose comme ça. 561 00:38:07,000 --> 00:38:12,000 Une expression booléenne est l'utilisation de ces deux égaux 562 00:38:12,000 --> 00:38:17,000 et le bang est égal ou égale pas, inférieur à, supérieur à, 563 00:38:17,000 --> 00:38:22,000 inférieur ou égal à, tout ce genre de trucs. 564 00:38:22,000 --> 00:38:28,000 Conditions ensuite sont des déclarations si d'autre. 565 00:38:28,000 --> 00:38:32,000 Je voudrais vous rappeler que vous ne pouvez pas avoir un autre sans une correspondante si. 566 00:38:32,000 --> 00:38:37,000 De même, vous ne pouvez pas avoir un autre si sans correspondant si. 567 00:38:37,000 --> 00:38:40,000 Boucles, rappellent les 3 types de boucles, nous avons été en martelant que vous 568 00:38:40,000 --> 00:38:43,000 pour les deux dernières sections et ensembles de problèmes. 569 00:38:43,000 --> 00:38:46,000 L'utilisation, ne tandis que lorsque vous obtenez une entrée utilisateur, 570 00:38:46,000 --> 00:38:51,000 en utilisant des boucles while jusqu'à ce qu'une condition est vraie, 571 00:38:51,000 --> 00:38:56,000 puis en utilisant les boucles for, si vous avez besoin d' 572 00:38:56,000 --> 00:39:01,000 savoir quelle itération de la boucle que vous êtes actuellement sur ce que je pense à ce sujet. 573 00:39:01,000 --> 00:39:07,000 Ou si vous faites un pour chaque caractère dans une chaîne que je veux faire quelque chose, 574 00:39:07,000 --> 00:39:15,000 pour chaque élément dans un tableau que je veux faire quelque chose à cet élément. 575 00:39:15,000 --> 00:39:18,000 >> Fils et événements. 576 00:39:18,000 --> 00:39:21,000 Ceux-ci nous n'avons pas couvert de manière explicite en C, 577 00:39:21,000 --> 00:39:23,000 mais rappelez-vous à partir de zéro. 578 00:39:23,000 --> 00:39:26,000 C'est l'idée d'avoir des scripts différents. 579 00:39:26,000 --> 00:39:32,000 C'est aussi cette notion de diffuser un événement. 580 00:39:32,000 --> 00:39:37,000 Certaines personnes n'ont pas la diffusion dans leurs projets de départ, 581 00:39:37,000 --> 00:39:40,000 ce qui est vraiment cool, 582 00:39:40,000 --> 00:39:46,000 mais ce sont 2 manières différentes de traiter cette question plus vaste appelé la concurrence, 583 00:39:46,000 --> 00:39:49,000 qui est comment obtenez-vous les programmes à exécuter 584 00:39:49,000 --> 00:39:54,000 ou apparemment exécuter en même temps? 585 00:39:54,000 --> 00:39:59,000 Différentes tâches en cours d'exécution tandis que d'autres tâches sont également en cours d'exécution. 586 00:39:59,000 --> 00:40:01,000 C'est ainsi que votre système d'exploitation semble fonctionner. 587 00:40:01,000 --> 00:40:04,000 C'est pourquoi, même si, par exemple, 588 00:40:04,000 --> 00:40:10,000 J'ai obtenu mon navigateur fonctionne, je peux aussi mettre sur Spotify et jouer une chanson. 589 00:40:10,000 --> 00:40:14,000 C'est plus d'une chose conceptuelle pour comprendre. 590 00:40:14,000 --> 00:40:17,000 Je voudrais jeter un oeil à des fils courts 591 00:40:17,000 --> 00:40:21,000 si vous souhaitez en savoir plus à ce sujet. 592 00:40:21,000 --> 00:40:26,000 >> Voyons, je crois qu'il aurait pu être 593 00:40:26,000 --> 00:40:31,000 un problème à ce sujet dans une de celles-ci. 594 00:40:31,000 --> 00:40:35,000 Encore une fois, je pense que les discussions et les événements ne sont pas quelque chose que nous allons couvrir dans C 595 00:40:35,000 --> 00:40:41,000 juste parce que c'est beaucoup plus difficile que dans Scratch. 596 00:40:41,000 --> 00:40:44,000 Ne vous inquiétez pas à ce sujet, mais certainement comprendre les concepts, 597 00:40:44,000 --> 00:40:47,000 comprendre ce qui se passe. 598 00:40:47,000 --> 00:40:52,000 Avant de passer, des questions sur la Semaine 0 matérielles? 599 00:40:52,000 --> 00:40:55,000 Tout le monde sent assez bon? 600 00:40:55,000 --> 00:41:03,000 Comprendre les variables et ce qu'est une variable? 601 00:41:03,000 --> 00:41:08,000 >> Passons. Semaine 1. 602 00:41:08,000 --> 00:41:12,000 Un couple de choses ici qui ne sont pas particulièrement couvertes 603 00:41:12,000 --> 00:41:21,000 dans la revue questionnaire nécessairement et aussi des choses plus conceptuels pour penser. 604 00:41:21,000 --> 00:41:30,000 La première est la notion de ce code source, le code objet et compilateurs sont. 605 00:41:30,000 --> 00:41:32,000 Il ya quelqu'un? Basil. 606 00:41:32,000 --> 00:41:37,000 Est objet de code, je veux dire le code source est ce que vous mettez dans clang, 607 00:41:37,000 --> 00:41:42,000 et le code objet est ce bruit met de telle sorte que votre ordinateur peut lire le programme. 608 00:41:42,000 --> 00:41:44,000 Exactement. 609 00:41:44,000 --> 00:41:47,000 Le code source est le code C que vous avez réellement taper. 610 00:41:47,000 --> 00:41:50,000 Code objet est ce que vous sortez de bruit. 611 00:41:50,000 --> 00:41:54,000 C'est le 0 et de 1 dans ce format binaire. 612 00:41:54,000 --> 00:41:59,000 Alors qu'est-ce qui se passe, c'est quand vous avez un tas de fichiers objets, 613 00:41:59,000 --> 00:42:04,000 dire que vous compilez un projet ou d'un programme qui utilise plusieurs fichiers de code source, 614 00:42:04,000 --> 00:42:09,000 qui, par convention ont l'extension de fichier. c. 615 00:42:09,000 --> 00:42:13,000 C'est pourquoi nous avons caesar.c, vigenère.c. 616 00:42:13,000 --> 00:42:18,000 Si vous écrivez des programmes Java que vous leur donner l'extension. Java. 617 00:42:18,000 --> 00:42:24,000 Programmes Python ont l'extension. Py souvent. 618 00:42:24,000 --> 00:42:26,000 >> Une fois que vous avez plusieurs fichiers. C, vous les compiler. 619 00:42:26,000 --> 00:42:29,000 Clang crache toute cette ordure binaire. 620 00:42:29,000 --> 00:42:33,000 Ensuite, parce que vous ne voulez 1 programme 621 00:42:33,000 --> 00:42:37,000 vous avez le lien linker tous ces objets ensemble des fichiers 622 00:42:37,000 --> 00:42:40,000 dans 1 fichier exécutable. 623 00:42:40,000 --> 00:42:45,000 C'est aussi ce qui se passe lorsque vous utilisez la bibliothèque CS50, par exemple. 624 00:42:45,000 --> 00:42:50,000 La bibliothèque est à la fois CS50 cela. Fichier d'entête h 625 00:42:50,000 --> 00:42:53,000 que vous lisez, ce que # includecs50.h. 626 00:42:53,000 --> 00:42:58,000 Et puis, il ya aussi un fichier binaire spécial bibliothèque 627 00:42:58,000 --> 00:43:02,000 qui a été compilé qui est 0 et de 1, 628 00:43:02,000 --> 00:43:08,000 et que l'option-l, donc si nous revenons à nos espaces et nous sommes très vite 629 00:43:08,000 --> 00:43:11,000 à ce qui se passe ici quand nous regardons notre commande clang, 630 00:43:11,000 --> 00:43:15,000 ce que nous avons, c'est que c'est notre fichier de code source ici. 631 00:43:15,000 --> 00:43:18,000 Il s'agit d'un tas d'options de compilation. 632 00:43:18,000 --> 00:43:22,000 Et puis à la fin, ceux-ci l-drapeaux lien 633 00:43:22,000 --> 00:43:30,000 les fichiers binaires pour ces 2 bibliothèques, la bibliothèque CS50 et ensuite de la bibliothèque mathématique. 634 00:43:30,000 --> 00:43:35,000 >> Comprendre chaque type de finalité des fichiers » 635 00:43:35,000 --> 00:43:38,000 dans le processus de compilation est quelque chose que vous aurez envie d'être en mesure de 636 00:43:38,000 --> 00:43:43,000 donner au moins un aperçu de haut niveau de l'. 637 00:43:43,000 --> 00:43:46,000 Le code source entre en jeu. Le code objet sort. 638 00:43:46,000 --> 00:43:53,000 Fichiers de code objet lier ensemble, et vous obtenez un beau, un fichier exécutable. 639 00:43:53,000 --> 00:43:55,000 Cool. 640 00:43:55,000 --> 00:43:58,000 C'est également là que vous pouvez avoir des erreurs sur plusieurs points 641 00:43:58,000 --> 00:44:00,000 dans le processus de compilation. 642 00:44:00,000 --> 00:44:04,000 C'est là que, par exemple, si vous prenez cette option de liaison, 643 00:44:04,000 --> 00:44:10,000 le drapeau CS50, et vous l'omettez dans les espaces ou lorsque vous exécutez votre code, 644 00:44:10,000 --> 00:44:13,000 c'est là que vous aurez une erreur dans la phase de liaison, 645 00:44:13,000 --> 00:44:18,000 et l'éditeur de liens va dire: «Hé, vous avez appelé un GetString fonction 646 00:44:18,000 --> 00:44:20,000 C'est dans la bibliothèque CS50. " 647 00:44:20,000 --> 00:44:25,000 "Tu m'as dit qu'il était dans la bibliothèque CS50, et je ne trouve pas le code pour elle." 648 00:44:25,000 --> 00:44:28,000 C'est là que vous devez le lier à, et c'est séparé 649 00:44:28,000 --> 00:44:33,000 d'une erreur de compilation car le compilateur se penche sur la syntaxe et ce genre de choses. 650 00:44:33,000 --> 00:44:38,000 Il est bon de savoir ce qui se passe quand. 651 00:44:38,000 --> 00:44:42,000 >> D'autres choses à connaître. 652 00:44:42,000 --> 00:44:49,000 Je dirais que vous voulez absolument jeter un oeil à la court de transtypage fait par la Jordanie 653 00:44:49,000 --> 00:44:55,000 de comprendre ce qui ints sont sous le capot, 654 00:44:55,000 --> 00:44:58,000 ce que les caractères sont sous le capot. 655 00:44:58,000 --> 00:45:02,000 Lorsque nous parlons ASCII et nous fait regarder la table ASCII, 656 00:45:02,000 --> 00:45:07,000 ce qui est fait est de nous donner une hotte sous le regard 657 00:45:07,000 --> 00:45:13,000 à la façon dont l'ordinateur représente en fait majuscule et le chiffre 7 658 00:45:13,000 --> 00:45:17,000 et une virgule et un point d'interrogation. 659 00:45:17,000 --> 00:45:20,000 L'ordinateur dispose également des moyens spéciaux pour représenter 660 00:45:20,000 --> 00:45:23,000 le nombre 7 comme un entier. 661 00:45:23,000 --> 00:45:27,000 Il a une façon spéciale pour représenter le nombre 7 en tant que nombre à virgule flottante, 662 00:45:27,000 --> 00:45:29,000 et ceux qui sont très différents. 663 00:45:29,000 --> 00:45:32,000 Transtypage est de savoir comment vous dire à l'ordinateur "Hé, je veux que vous convertissez 664 00:45:32,000 --> 00:45:37,000 d'une représentation à une autre représentation. " 665 00:45:37,000 --> 00:45:40,000 Pourquoi ne pas jeter un oeil à ça. 666 00:45:40,000 --> 00:45:44,000 >> Je voudrais aussi jeter un oeil à court sur les bibliothèques et le court sur les compilateurs. 667 00:45:44,000 --> 00:45:47,000 Ceux parler du processus de compilation, 668 00:45:47,000 --> 00:45:53,000 ce qu'est une bibliothèque, et passer en revue certaines de ces questions que vous pourriez vous poser. 669 00:45:53,000 --> 00:45:55,000 Questions sur semaine 1 matériel? 670 00:45:55,000 --> 00:46:03,000 Y at-il des sujets qui semblent ici en intimidant que vous aimeriez aborder? 671 00:46:03,000 --> 00:46:07,000 Je suis en train de souffler à travers la plupart de ces sujets précédents afin que nous puissions arriver à 672 00:46:07,000 --> 00:46:13,000 pointeurs et faire un peu de récursivité. 673 00:46:13,000 --> 00:46:15,000 Pensées? 674 00:46:15,000 --> 00:46:19,000 Rien recouvrir? 675 00:46:19,000 --> 00:46:21,000 Temps pour un peu de chocolat peut-être? 676 00:46:21,000 --> 00:46:23,000 Les gars, vous travaillez à travers elle. 677 00:46:23,000 --> 00:46:26,000 Je vais continuer à siroter mon café. 678 00:46:26,000 --> 00:46:31,000 Semaine 2. 679 00:46:31,000 --> 00:46:34,000 Bon appel, bon appel. 680 00:46:34,000 --> 00:46:38,000 Lors de la semaine 2, nous avons parlé un peu plus sur les fonctions. 681 00:46:38,000 --> 00:46:43,000 >> Dans les premiers ensembles problème années, nous n'avons pas vraiment écrire des fonctions à tous 682 00:46:43,000 --> 00:46:45,000 autre que ce qui fonctionne? 683 00:46:45,000 --> 00:46:47,000 [Étudiants] Principal. >> Main, exactement. 684 00:46:47,000 --> 00:46:51,000 Et nous avons vu les différents costumes que principal porte. 685 00:46:51,000 --> 00:46:54,000 Il ya celui dans lequel il ne prend aucun argument, 686 00:46:54,000 --> 00:46:58,000 et nous venons de dire vide entre les parenthèses, 687 00:46:58,000 --> 00:47:01,000 et puis il ya l'autre où nous voulons prendre des arguments de ligne de commande, 688 00:47:01,000 --> 00:47:08,000 et comme nous l'avons vu, c'est là que vous avez argc int et string argv ensemble 689 00:47:08,000 --> 00:47:13,000 ou maintenant que nous avons réellement exposés chaîne à la char * qu'il est 690 00:47:13,000 --> 00:47:20,000 nous allons commencer à l'écrire en tant que char * argv puis entre parenthèses. 691 00:47:20,000 --> 00:47:22,000 En 3 Set problème, les gars vous vu un tas de fonctions, 692 00:47:22,000 --> 00:47:27,000 et vous mis en place un tas de fonctions, dessiner, regarder, bousculade. 693 00:47:27,000 --> 00:47:31,000 Les prototypes ont toutes été écrites là pour vous. 694 00:47:31,000 --> 00:47:33,000 >> Ce que je voulais parler ici avec des fonctions très rapidement 695 00:47:33,000 --> 00:47:38,000 est qu'il ya 3 parties à eux chaque fois que vous écrivez une fonction. 696 00:47:38,000 --> 00:47:43,000 Vous devez spécifier le type de retour de la fonction. 697 00:47:43,000 --> 00:47:46,000 Vous devez spécifier un nom pour la fonction, puis vous devez spécifier 698 00:47:46,000 --> 00:47:51,000 la liste des arguments ou la liste des paramètres. 699 00:47:51,000 --> 00:47:57,000 Par exemple, si je devais écrire une fonction pour résumer un ensemble de nombres entiers 700 00:47:57,000 --> 00:48:03,000 et puis revenez me voir la somme quel serait mon type de retour 701 00:48:03,000 --> 00:48:06,000 si je voulais résumer entiers, puis retourner la somme? 702 00:48:06,000 --> 00:48:12,000 Puis le nom de la fonction. 703 00:48:12,000 --> 00:48:27,000 Si je vais de l'avant et écrire en vert, cette partie est le type de retour. 704 00:48:27,000 --> 00:48:34,000 Cette partie est le nom. 705 00:48:34,000 --> 00:48:40,000 Et puis entre parenthèses 706 00:48:40,000 --> 00:48:46,000 C'est là que je donne des arguments, 707 00:48:46,000 --> 00:48:56,000 souvent abrégé en args, parfois appelés params pour les paramètres. 708 00:48:56,000 --> 00:49:00,000 Et si vous en avez un, il vous suffit de spécifier l'un. 709 00:49:00,000 --> 00:49:06,000 Si vous avez plusieurs, vous les séparer par une virgule. 710 00:49:06,000 --> 00:49:13,000 Et pour chaque argument que vous lui donner 2 choses qui sont-Kevin? 711 00:49:13,000 --> 00:49:18,000 [Kevin] Vous devez donner le type et le nom. 712 00:49:18,000 --> 00:49:21,000 Et puis le nom, et le nom est le nom que vous allez utiliser 713 00:49:21,000 --> 00:49:25,000 se référer à cet argument dans la fonction somme, 714 00:49:25,000 --> 00:49:27,000 au sein de la fonction que vous êtes en train d'écrire. 715 00:49:27,000 --> 00:49:32,000 >> Vous n'avez pas à, par exemple, si je vais résumer, 716 00:49:32,000 --> 00:49:41,000 dire, un tableau d'entiers-we'll do tableau int, 717 00:49:41,000 --> 00:49:46,000 et je vais me donner quelques accolades il- 718 00:49:46,000 --> 00:49:51,000 puis quand je passe d'un tableau à la fonction somme 719 00:49:51,000 --> 00:49:55,000 Je passe à la première position de la liste des arguments. 720 00:49:55,000 --> 00:49:59,000 Mais le tableau que je passe à ne pas avoir le nom arr. 721 00:49:59,000 --> 00:50:07,000 Arr va être comment je me réfère à cet argument dans le corps de la fonction. 722 00:50:07,000 --> 00:50:10,000 L'autre chose que nous devons prendre en compte, 723 00:50:10,000 --> 00:50:14,000 et ce qui est légèrement différent de fonctions, mais je pense que c'est un point important, 724 00:50:14,000 --> 00:50:20,000 est que, dans C lorsque j'écris une fonction comme ceci 725 00:50:20,000 --> 00:50:29,000 comment puis-je savoir combien d'éléments sont dans ce tableau? 726 00:50:29,000 --> 00:50:31,000 Il s'agit en quelque sorte d'une question piège. 727 00:50:31,000 --> 00:50:35,000 Nous en avons parlé un peu dans la section de la semaine dernière. 728 00:50:35,000 --> 00:50:40,000 Comment puis-je savoir le nombre d'éléments à l'intérieur d'un tableau en C? 729 00:50:40,000 --> 00:50:44,000 Est-il possible? 730 00:50:44,000 --> 00:50:49,000 >> Il s'avère qu'il n'y a aucun moyen de savoir. 731 00:50:49,000 --> 00:50:52,000 Vous devez passer en séparément. 732 00:50:52,000 --> 00:50:55,000 Il ya un truc que vous pouvez faire 733 00:50:55,000 --> 00:51:00,000 si vous êtes dans la même fonction dans laquelle le réseau a été déclaré, 734 00:51:00,000 --> 00:51:04,000 et vous travaillez avec un tableau de pile. 735 00:51:04,000 --> 00:51:06,000 Mais cela ne fonctionne que si vous êtes dans la même fonction. 736 00:51:06,000 --> 00:51:09,000 Une fois que vous passer un tableau à une autre fonction ou si vous avez déclaré un tableau 737 00:51:09,000 --> 00:51:12,000 et vous mettez ce tableau sur le tas, vous avez utilisé malloc 738 00:51:12,000 --> 00:51:15,000  et ce genre de choses, alors tous les paris sont éteints. 739 00:51:15,000 --> 00:51:18,000 Ensuite, vous avez réellement à faire circuler 740 00:51:18,000 --> 00:51:21,000 un argument spécial ou un autre paramètre 741 00:51:21,000 --> 00:51:23,000 vous dire combien grande est la matrice. 742 00:51:23,000 --> 00:51:28,000 Dans ce cas, je voudrais utiliser une virgule-je suis désolé, ça va hors de l'écran ci- 743 00:51:28,000 --> 00:51:32,000 et je voudrais passer un autre argument 744 00:51:32,000 --> 00:51:40,000  et appelez-le len int pour la longueur. 745 00:51:40,000 --> 00:51:44,000 >> Une chose qui pourrait arriver sur le quiz 746 00:51:44,000 --> 00:51:49,000 vous demande d'écrire ou de mettre en œuvre une fonction particulière appelée quelque chose. 747 00:51:49,000 --> 00:51:54,000 Si nous ne vous donne pas le prototype, donc tout cela ici, 748 00:51:54,000 --> 00:51:58,000 tout ce gâchis est appelé la déclaration de fonction ou le prototype de fonction, 749 00:51:58,000 --> 00:52:01,000 c'est l'une des premières choses que vous aurez envie de clouer si elle n'est pas donnée 750 00:52:01,000 --> 00:52:03,000 à vous tout de suite sur le questionnaire. 751 00:52:03,000 --> 00:52:06,000 L'autre truc que j'ai appris, c'est que 752 00:52:06,000 --> 00:52:11,000 dire que nous ne vous donner un prototype pour une fonction, et nous dire: «Hé, vous avez à écrire." 753 00:52:11,000 --> 00:52:16,000 A l'intérieur des accolades que vous avez sur le quiz 754 00:52:16,000 --> 00:52:20,000 si vous remarquez qu'il ya un type de retour et vous remarquerez que le type de retour 755 00:52:20,000 --> 00:52:25,000 est autre chose que nul, ce qui signifie que la fonction ne retourne rien, 756 00:52:25,000 --> 00:52:28,000 puis une chose que vous voulez faire est d'écrire 757 00:52:28,000 --> 00:52:33,000 une sorte de déclaration de retour à la fin de la fonction. 758 00:52:33,000 --> 00:52:40,000 Retour, et dans ce cas, nous allons mettre un blanc parce que nous voulons remplir le vide. 759 00:52:40,000 --> 00:52:44,000 Mais cela fait réfléchir dans le bon sens sur la façon dont je vais aborder ce problème? 760 00:52:44,000 --> 00:52:49,000 Et il vous rappelle que vous allez avoir à renvoyer une valeur 761 00:52:49,000 --> 00:52:51,000 à l'appelant de la fonction. 762 00:52:51,000 --> 00:52:54,000 >> Ouais. >> [Étudiants] Est-ce que le style s'applique pas lorsque nous écrivons du code sur le quizz? 763 00:52:54,000 --> 00:52:58,000 Tels que l'indentation et ce genre de choses? >> [Étudiants] Ouais. 764 00:52:58,000 --> 00:53:00,000 Non, pas autant. 765 00:53:00,000 --> 00:53:09,000 Je pense que beaucoup de-c'est quelque chose que nous allons préciser sur le questionnaire le jour de, 766 00:53:09,000 --> 00:53:15,000 mais en général se soucier # includes et ce genre de choses, c'est un peu en dehors. 767 00:53:15,000 --> 00:53:17,000 [Étudiants] Avez-vous besoin de commenter votre code écrit à la main? 768 00:53:17,000 --> 00:53:19,000 Avez-vous besoin de commenter votre code écrit à la main? 769 00:53:19,000 --> 00:53:24,000 Commentant est toujours bon si vous êtes inquiet à propos de crédit partiel 770 00:53:24,000 --> 00:53:29,000 ou si vous voulez communiquer votre intention de la niveleuse. 771 00:53:29,000 --> 00:53:33,000 Mais moi, encore une fois, permettra de clarifier le questionnaire lui-même et le jour quiz, 772 00:53:33,000 --> 00:53:39,000 mais je ne crois pas que vous serez tenus de rédiger des commentaires, non. 773 00:53:39,000 --> 00:53:42,000 Généralement non, mais il est certainement le genre de chose où 774 00:53:42,000 --> 00:53:45,000 vous pouvez communiquer votre intention, comme "Hey, c'est là où je vais avec elle." 775 00:53:45,000 --> 00:53:49,000 Et parfois cela peut aider à crédit partiel. 776 00:53:49,000 --> 00:53:51,000 Cool. 777 00:53:51,000 --> 00:53:53,000 >> Basil. 778 00:53:53,000 --> 00:53:56,000 [Basil] Quelle est la différence entre déclarer, par exemple, int lang 779 00:53:56,000 --> 00:54:03,000 dans les arguments ou paramètres par rapport à la déclaration d'une variable à l'intérieur de la fonction? 780 00:54:03,000 --> 00:54:05,000 Wow, le café est descendu de la trachée. 781 00:54:05,000 --> 00:54:07,000 [Basil] Comme les choses qui nous voulons mettre en arguments. 782 00:54:07,000 --> 00:54:09,000 Oui, c'est une très bonne question. 783 00:54:09,000 --> 00:54:11,000 Comment choisissez-vous les choses que vous voulez mettre dans les arguments 784 00:54:11,000 --> 00:54:17,000 par rapport à ce que vous devriez faire à l'intérieur de la fonction? 785 00:54:17,000 --> 00:54:24,000 Dans ce cas, nous avons inclus ces deux arguments que 786 00:54:24,000 --> 00:54:29,000 parce qu'ils sont quelque chose que la personne qui va utiliser la fonction somme 787 00:54:29,000 --> 00:54:32,000 doit préciser les choses. 788 00:54:32,000 --> 00:54:35,000 >> La fonction somme, comme nous en avons parlé, n'a aucun moyen de savoir 789 00:54:35,000 --> 00:54:40,000 la taille du tableau est qu'elle reçoit de son appelant ou celui qui utilise la fonction somme. 790 00:54:40,000 --> 00:54:44,000 Il n'a aucun moyen de savoir la taille que tableau est. 791 00:54:44,000 --> 00:54:48,000 La raison pour laquelle nous passons dans cette longueur ici comme un argument 792 00:54:48,000 --> 00:54:51,000 c'est parce que c'est quelque chose que nous sommes fondamentalement indiquer à l'appelant de la fonction, 793 00:54:51,000 --> 00:54:55,000 celui qui va utiliser la fonction somme, "Hé, non seulement vous devez nous donner un tableau 794 00:54:55,000 --> 00:54:59,000 d'entiers, vous avez également à nous dire la taille du tableau que vous nous avez donné est. " 795 00:54:59,000 --> 00:55:03,000 [Basil] Ceux qui seront tous deux arguments de ligne de commande? 796 00:55:03,000 --> 00:55:06,000 Non, ce sont des arguments réels que vous passez à la fonction. 797 00:55:06,000 --> 00:55:10,000 >> Permettez-moi de faire une nouvelle page ici. 798 00:55:10,000 --> 00:55:13,000 [Basil] Comme le nom passerait- 799 00:55:13,000 --> 00:55:24,000 [Nate H.] Si j'ai int main (void), 800 00:55:24,000 --> 00:55:27,000 et je vais mettre dans mon retour 0 ici-bas au fond, 801 00:55:27,000 --> 00:55:31,000 et dire que je veux appeler la fonction somme. 802 00:55:31,000 --> 00:55:42,000 Je veux dire int x = sum (); 803 00:55:42,000 --> 00:55:46,000 Pour utiliser la fonction somme je dois passer à la fois dans le tableau que je voudrais résumer 804 00:55:46,000 --> 00:55:51,000 et la longueur du réseau, de sorte que c'est le cas 805 00:55:51,000 --> 00:55:54,000 en supposant que j'avais un tableau d'entiers, 806 00:55:54,000 --> 00:56:12,000 dire que j'ai eu Numbaz int [] = 1, 2, 3, 807 00:56:12,000 --> 00:56:16,000 type d'utilisation que piraté syntaxe là, 808 00:56:16,000 --> 00:56:21,000 alors ce que je ferais, c'est en somme je voudrais passer en 809 00:56:21,000 --> 00:56:27,000 à la fois Numbaz et le chiffre 3 810 00:56:27,000 --> 00:56:30,000 de dire la fonction sum "Ok, voici le tableau que je veux vous faire la somme." 811 00:56:30,000 --> 00:56:34,000 «Ici, c'est sa taille." 812 00:56:34,000 --> 00:56:39,000 Est-ce logique? Est-ce que cela répond à votre question? 813 00:56:39,000 --> 00:56:42,000 >> À bien des égards c'est le cas en parallèle ce que nous faisons avec les principaux 814 00:56:42,000 --> 00:56:44,000 quand nous avons les arguments de ligne de commande. 815 00:56:44,000 --> 00:56:47,000 Un programme comme César chiffre, par exemple, ce qui est nécessaire 816 00:56:47,000 --> 00:56:53,000 arguments de ligne de commande ne serait pas en mesure de faire quoi que ce soit. 817 00:56:53,000 --> 00:56:57,000 Il ne saurait pas comment crypter si vous n'avez pas dit ce qu'elle touche à utiliser 818 00:56:57,000 --> 00:57:03,000 ou si vous ne l'avez pas dit ce que vous vouliez chaîne à chiffrer. 819 00:57:03,000 --> 00:57:08,000 Incitation pour l'entrée, c'est là que nous avons 2 mécanismes différents 820 00:57:08,000 --> 00:57:14,000 pour la prise d'entrée en provenance de l'utilisateur, des informations pour la prise en provenance de l'utilisateur. 821 00:57:14,000 --> 00:57:19,000 Pour un problème Set 1, nous avons vu ce getInt, GetString, ainsi GetFloat 822 00:57:19,000 --> 00:57:26,000 des invites d'intervention, et c'est ce qu'on appelle l'aide du flux d'entrée standard. 823 00:57:26,000 --> 00:57:28,000 C'est légèrement différent. 824 00:57:28,000 --> 00:57:31,000 C'est quelque chose que vous pouvez faire à un moment donné, par opposition à 825 00:57:31,000 --> 00:57:35,000 Lorsque vous lancez le programme, lorsque vous démarrez le programme en cours. 826 00:57:35,000 --> 00:57:41,000 Les arguments de ligne de commande sont tous spécifiés lorsque vous démarrez le programme lancé. 827 00:57:41,000 --> 00:57:47,000 Nous avons été de mélanger les deux d'entre eux. 828 00:57:47,000 --> 00:57:52,000 Lorsque nous utilisons des arguments à une fonction, c'est un peu comme arguments de ligne de commande à principal. 829 00:57:52,000 --> 00:57:56,000 C'est lorsque vous appelez la fonction, vous devez le dire 830 00:57:56,000 --> 00:58:05,000 exactement ce dont il a besoin pour accomplir ses tâches. 831 00:58:05,000 --> 00:58:08,000 Une autre bonne chose à regarder, et je vous laisse regarder dans votre temps libre, 832 00:58:08,000 --> 00:58:11,000 et elle était couverte dans le quiz était cette notion de champ 833 00:58:11,000 --> 00:58:15,000 et des variables locales par rapport à des variables globales. 834 00:58:15,000 --> 00:58:18,000 Faites attention à cela. 835 00:58:18,000 --> 00:58:23,000 >> Maintenant que nous arrivons à ce genre de choses d'autres, 836 00:58:23,000 --> 00:58:27,000 à la semaine 3, nous avons commencé à parler sur la recherche et le tri. 837 00:58:27,000 --> 00:58:32,000 Recherche et de tri, au moins en CS50, 838 00:58:32,000 --> 00:58:39,000 est beaucoup une introduction à certaines des parties les plus théoriques de l'informatique. 839 00:58:39,000 --> 00:58:42,000 Le problème de la recherche, le problème du tri 840 00:58:42,000 --> 00:58:46,000 sont grandes, les problèmes canoniques. 841 00:58:46,000 --> 00:58:52,000 Comment trouvez-vous un numéro particulier d'un tableau de milliards de nombres entiers? 842 00:58:52,000 --> 00:58:55,000 Comment trouvez-vous un nom particulier à l'intérieur d'un annuaire téléphonique 843 00:58:55,000 --> 00:58:59,000 qui est stocké sur votre ordinateur portable? 844 00:58:59,000 --> 00:59:04,000 Et si nous introduisons cette notion de temps d'exécution asymptotiques 845 00:59:04,000 --> 00:59:11,000 pour vraiment quantifier combien de temps, à quel point ces problèmes sont, 846 00:59:11,000 --> 00:59:14,000 combien de temps ils prennent à résoudre. 847 00:59:14,000 --> 00:59:20,000 En, je crois, 2011 au quiz il ya un problème que je pense mérite 848 00:59:20,000 --> 00:59:27,000 couvrant très rapidement, ce qui est celui-ci, problème 12. 849 00:59:27,000 --> 00:59:32,000 Oh non, c'est Omega. 850 00:59:32,000 --> 00:59:41,000 >> Ici, nous parlons de la durée d'exécution la plus rapide possible 851 00:59:41,000 --> 00:59:46,000 pour un algorithme particulier, puis le temps d'exécution plus lente possible. 852 00:59:46,000 --> 00:59:52,000 Cette Omega et O ne sont que des raccourcis. 853 00:59:52,000 --> 00:59:55,000 Ils sont raccourcis typographiques pour dire 854 00:59:55,000 --> 00:59:59,000 la rapidité dans le meilleur des cas possibles sera notre course algorithme, 855 00:59:59,000 --> 01:00:06,000 et la lenteur dans le pire des cas possibles sera notre algorithme de fonctionner? 856 01:00:06,000 --> 01:00:10,000 Faisons un couple de ceux-ci, et ceux-ci ont également été couverts 857 01:00:10,000 --> 01:00:13,000 dans le court sur la notation asymptotique, que je recommande fortement. 858 01:00:13,000 --> 01:00:17,000 Jackson a fait un très bon travail. 859 01:00:17,000 --> 01:00:23,000 Avec binaire de recherche, nous parlons de recherche binaire comme étant un algorithme, 860 01:00:23,000 --> 01:00:28,000 et nous avons l'habitude en parler en termes de son grand O. 861 01:00:28,000 --> 01:00:30,000 Quel est le grand O? 862 01:00:30,000 --> 01:00:34,000 Quel est le temps d'exécution plus lente possible de recherche binaire? 863 01:00:34,000 --> 01:00:36,000 [Étudiants] N ²? 864 01:00:36,000 --> 01:00:41,000 Fermer, je suppose semblable. 865 01:00:41,000 --> 01:00:43,000 C'est beaucoup plus rapide que cela. 866 01:00:43,000 --> 01:00:45,000 [Étudiants] binaire? >> Ouais, recherche binaire. 867 01:00:45,000 --> 01:00:47,000 [Étudiants] Il est log n. 868 01:00:47,000 --> 01:00:49,000 Log n, alors qu'est-ce que vous n veut dire? 869 01:00:49,000 --> 01:00:51,000 Il divise par deux à chaque itération. 870 01:00:51,000 --> 01:00:56,000 Justement, dans le cas le plus lent possible, 871 01:00:56,000 --> 01:01:00,000 dire si vous avez un tableau trié 872 01:01:00,000 --> 01:01:08,000 d'un million de nombres entiers et le nombre que vous cherchez 873 01:01:08,000 --> 01:01:14,000 est soit le premier élément dans la matrice ou le dernier élément dans le même tableau. 874 01:01:14,000 --> 01:01:18,000 Rappelez-vous, l'algorithme de recherche binaire fonctionne en regardant l'élément central, 875 01:01:18,000 --> 01:01:21,000 voir si c'est le match que vous recherchez. 876 01:01:21,000 --> 01:01:23,000 Si c'est le cas, tant mieux, vous l'avez trouvé. 877 01:01:23,000 --> 01:01:27,000 >> Dans le meilleur des cas possible, comment est la vitesse d'exécution binaire de recherche? 878 01:01:27,000 --> 01:01:29,000 [Etudiants] 1. 879 01:01:29,000 --> 01:01:32,000 1, il est temps constant, grand O de 1. Ouais. 880 01:01:32,000 --> 01:01:36,000 [Étudiants] J'ai une question. Quand vous dites que vous n, que vous voulez dire par rapport à la base 2, non? 881 01:01:36,000 --> 01:01:40,000 Oui, alors c'est autre chose. 882 01:01:40,000 --> 01:01:44,000 Nous disons n log, et je suppose que quand j'étais à l'école secondaire 883 01:01:44,000 --> 01:01:48,000 J'ai toujours pensé que c'était log base 10. 884 01:01:48,000 --> 01:01:57,000 Ouais, donc oui, log 2 de base est typiquement ce que nous utilisons. 885 01:01:57,000 --> 01:02:02,000 Pour en revenir à la recherche binaire, si vous êtes à la recherche pour les deux 886 01:02:02,000 --> 01:02:05,000 l'élément à la fin ou l'élément à l'origine, 887 01:02:05,000 --> 01:02:08,000 parce que vous commencez au milieu et puis vous jetez 888 01:02:08,000 --> 01:02:13,000 selon moitié ne répondent pas aux critères que vous cherchez, 889 01:02:13,000 --> 01:02:15,000 et vous allez à la prochaine moitié et la moitié prochaine et le prochain demi. 890 01:02:15,000 --> 01:02:19,000 Si je suis à la recherche du plus grand élément dans le tableau millions entier 891 01:02:19,000 --> 01:02:25,000 Je vais la réduire de moitié tout au plus log de 1 million de fois 892 01:02:25,000 --> 01:02:28,000 avant de finalement tester et voir ce que l'élément que je recherche 893 01:02:28,000 --> 01:02:33,000 est le plus grand ou le plus haut dans l'indice de la matrice, 894 01:02:33,000 --> 01:02:38,000 et cela prendra du log n, log de 1 million de fois. 895 01:02:38,000 --> 01:02:40,000 >> Tri à bulles. 896 01:02:40,000 --> 01:02:43,000 Ne vous vous souvenez de l'algorithme de tri à bulles? 897 01:02:43,000 --> 01:02:47,000 Kevin, peux-tu me donner un bref récapitulatif de ce qui s'est passé dans l'algorithme de tri à bulles? 898 01:02:47,000 --> 01:02:50,000 [Kevin] Fondamentalement, il passe par tout dans la liste. 899 01:02:50,000 --> 01:02:52,000 Il se penche sur les deux premiers. 900 01:02:52,000 --> 01:02:55,000 Si le premier est plus grand que le second il les swaps. 901 01:02:55,000 --> 01:02:58,000 Puis il compare les deuxième et troisième, la même chose, swaps, 902 01:02:58,000 --> 01:03:00,000 troisième et quatrième, tout le chemin vers le bas. 903 01:03:00,000 --> 01:03:03,000 Plus grands nombres suivra jusqu'à la fin. 904 01:03:03,000 --> 01:03:07,000 Et après de nombreuses boucles toutefois vous avez terminé. 905 01:03:07,000 --> 01:03:11,000 Exactement, ce que Kevin a dit, c'est que nous allons regarder les plus grands nombres 906 01:03:11,000 --> 01:03:15,000 bulle jusqu'à l'extrémité de la rangée. 907 01:03:15,000 --> 01:03:19,000 Par exemple, ne vous ennuierait de nous promener dans cet exemple, si ce n'est notre tableau? 908 01:03:19,000 --> 01:03:21,000 [Kevin] Vous prendrez 2 et 3. 909 01:03:21,000 --> 01:03:23,000 3 est plus grand que 2, de sorte que vous les échanger. 910 01:03:23,000 --> 01:03:29,000 [Nate H.] Bon, alors nous échangeons ceux-ci, et on obtient 2, 3, 6, 4 et 9. 911 01:03:29,000 --> 01:03:31,000 [Kevin] Puis vous comparez les 3 et 6. 912 01:03:31,000 --> 01:03:33,000 3 est inférieur à 6, de sorte que vous les laisser, 913 01:03:33,000 --> 01:03:37,000 et 6 et 4, vous les échanger parce que 4 est inférieur à 6. 914 01:03:37,000 --> 01:03:42,000 [Nate H.] Bon, alors j'ai 2, 3, 4, 6, 9. 915 01:03:42,000 --> 01:03:46,000 [Kevin] Et 9 est plus grand que 6, de sorte que vous laissez. 916 01:03:46,000 --> 01:03:48,000 Et vous voudriez revenir en arrière à travers elle à nouveau. 917 01:03:48,000 --> 01:03:50,000 >> [Nate H.] Suis-je fait en ce moment? >> [Kevin] No. 918 01:03:50,000 --> 01:03:52,000 Et pourquoi suis-je pas fait à ce point? 919 01:03:52,000 --> 01:03:54,000 Parce qu'il ressemble à mon tableau est trié. Je suis à la recherche dans ce domaine. 920 01:03:54,000 --> 01:03:57,000 [Kevin] Traversez-le à nouveau et assurez-vous qu'il n'y a pas d'autres swaps 921 01:03:57,000 --> 01:04:00,000 avant de pouvoir arrêter complètement. 922 01:04:00,000 --> 01:04:04,000 Exactement, vous devez donc continuer à travers et assurez-vous qu'il n'ya pas de swaps 923 01:04:04,000 --> 01:04:06,000 que vous pouvez faire à ce stade. 924 01:04:06,000 --> 01:04:08,000 C'était vraiment de la chance, comme vous l'avez dit, que nous nous sommes retrouvés 925 01:04:08,000 --> 01:04:12,000 que d'avoir à faire 1 passe à travers et nous triées. 926 01:04:12,000 --> 01:04:16,000 Mais pour ce faire, dans le cas général, nous allons effectivement obligé de le faire encore et encore. 927 01:04:16,000 --> 01:04:20,000 Et en fait, il s'agissait d'un exemple de cas le mieux possible, 928 01:04:20,000 --> 01:04:24,000 comme nous l'avons vu dans le problème. 929 01:04:24,000 --> 01:04:28,000 Nous avons vu que l'affaire a été mieux possible n. 930 01:04:28,000 --> 01:04:32,000 Nous sommes allés à travers le tableau 1 fois. 931 01:04:32,000 --> 01:04:35,000 Quel est le pire cas possible de cet algorithme? 932 01:04:35,000 --> 01:04:37,000 [Kevin] N ². 933 01:04:37,000 --> 01:04:41,000 Et qu'est-ce que ce regard parfait? Que serait un coup d'oeil ensemble comme ça prendrait du temps ² n? 934 01:04:41,000 --> 01:04:43,000 [Kevin] [inaudible] triées. 935 01:04:43,000 --> 01:04:51,000 Exactement, donc si je devais le tableau 9, 7, 6, 5, 2, 936 01:04:51,000 --> 01:04:54,000 d'abord le 9 serait bulle sur toute la hauteur. 937 01:04:54,000 --> 01:04:59,000 Après 1 itération nous aurions 7, 6, 5, 2, 9. 938 01:04:59,000 --> 01:05:07,000 Puis, le 7 serait bouillonner, 6, 5, 2, 7, 9, et ainsi de suite et ainsi de suite. 939 01:05:07,000 --> 01:05:13,000 >> Nous serions obligés de passer par le tableau entier n fois, 940 01:05:13,000 --> 01:05:16,000 et vous pouvez réellement obtenir un peu plus précis que ce 941 01:05:16,000 --> 01:05:23,000 car une fois que nous sommes passés de 9 tout le chemin vers le haut dans sa position possible dernière 942 01:05:23,000 --> 01:05:26,000 nous savons que nous n'avons jamais à comparer à cet élément nouveau. 943 01:05:26,000 --> 01:05:29,000 Une fois que nous commençons à faire barboter le 7 jusqu'à 944 01:05:29,000 --> 01:05:35,000 nous savons que nous pouvons nous arrêter une fois que le 7 est juste avant le 9 945 01:05:35,000 --> 01:05:37,000 puisque nous avons déjà comparé le 9 à elle. 946 01:05:37,000 --> 01:05:46,000 Si vous faites cela de manière intelligente, ce n'est pas vraiment, je pense, que beaucoup de temps. 947 01:05:46,000 --> 01:05:49,000 Vous n'allez pas comparer tous les possibles combinaisons de [inaudible] 948 01:05:49,000 --> 01:05:55,000 à chaque fois que vous passez par chaque itération. 949 01:05:55,000 --> 01:05:59,000 Mais tout de même, quand on parle de cette borne supérieure nous disons que 950 01:05:59,000 --> 01:06:04,000 vous cherchez à n ² comparaisons tout au long. 951 01:06:04,000 --> 01:06:12,000 >> Revenons, et depuis que nous avons commencé à avoir un peu à court de temps 952 01:06:12,000 --> 01:06:15,000 Je dirais que vous devez absolument passer par le reste de ce tableau, 953 01:06:15,000 --> 01:06:17,000 remplir tout ça. 954 01:06:17,000 --> 01:06:20,000 Pensez à des exemples. Pensez à des exemples concrets. 955 01:06:20,000 --> 01:06:22,000 C'est vraiment pratique et utile de le faire. 956 01:06:22,000 --> 01:06:25,000 Y puiser. 957 01:06:25,000 --> 01:06:28,000 C'est le genre de tableau que vous passez par en informatique 958 01:06:28,000 --> 01:06:32,000 vous devriez vraiment commencer à savoir ce cœur par. 959 01:06:32,000 --> 01:06:34,000 Ce sont le genre de questions que vous obtenez dans les interviews. 960 01:06:34,000 --> 01:06:36,000 Ce sont des sortes de choses qui sont bonnes à savoir, 961 01:06:36,000 --> 01:06:41,000 et de réfléchir à ces cas limites, de discerner comment penser 962 01:06:41,000 --> 01:06:45,000 sachant que pour la bulle trier le tableau le plus sombre 963 01:06:45,000 --> 01:06:52,000 pour trier avec ça, c'est celui qui est dans l'ordre inverse. 964 01:06:52,000 --> 01:06:58,000 >> Pointeurs. Parlons un peu de pointeurs. 965 01:06:58,000 --> 01:07:03,000 Dans les dernières minutes que nous avons ici 966 01:07:03,000 --> 01:07:11,000 Je sais que c'est quelque chose avec le fichier I / O qui est assez nouveau. 967 01:07:11,000 --> 01:07:19,000 Lorsque nous parlons des pointeurs de la raison pour laquelle nous voulons parler de pointeurs 968 01:07:19,000 --> 01:07:24,000 C'est parce que, premièrement, quand nous travaillons en C 969 01:07:24,000 --> 01:07:33,000 nous sommes vraiment à un niveau relativement bas par rapport aux langages de programmation les plus modernes. 970 01:07:33,000 --> 01:07:38,000 Nous sommes effectivement en mesure de manipuler les variables en mémoire, 971 01:07:38,000 --> 01:07:43,000 savoir où ils sont en fait situés dans notre mémoire. 972 01:07:43,000 --> 01:07:46,000 Une fois que vous avez continué à prendre des cours de système d'exploitation que vous verrez 973 01:07:46,000 --> 01:07:48,000 que c'est, encore une fois, une sorte d'abstraction. 974 01:07:48,000 --> 01:07:50,000 Ce n'est pas vraiment le cas. 975 01:07:50,000 --> 01:07:52,000 Nous avons la mémoire virtuelle qui se cache ces détails de notre part. 976 01:07:52,000 --> 01:07:58,000 >> Mais pour l'instant vous pouvez supposer que si vous avez un programme, 977 01:07:58,000 --> 01:08:02,000 par exemple, lorsque vous démarrez l'exécution de votre programme de chiffrement de César 978 01:08:02,000 --> 01:08:06,000 Je vais revenir à mon iPad très rapidement- 979 01:08:06,000 --> 01:08:12,000 qu'au tout début de votre programme, si vous avez, par exemple, 980 01:08:12,000 --> 01:08:15,000 4 Go de RAM sur votre ordinateur portable, 981 01:08:15,000 --> 01:08:21,000 vous êtes mis de côté ce morceau, et nous appellerons cette RAM. 982 01:08:21,000 --> 01:08:25,000 Et cela commence dans un endroit que nous allons appeler le 0, 983 01:08:25,000 --> 01:08:30,000 et se termine à un endroit que nous appellerons 4 gigaoctets. 984 01:08:30,000 --> 01:08:37,000 Je ne peux pas écrire. L'homme, qui est piraté. 985 01:08:37,000 --> 01:08:40,000 Lorsque votre programme exécute 986 01:08:40,000 --> 01:08:44,000 le système d'exploitation sculpte la RAM, 987 01:08:44,000 --> 01:08:51,000 et il précise les différents segments pour les différentes parties de votre programme à vivre po 988 01:08:51,000 --> 01:08:58,000 Ici-bas, ce domaine est une sorte de zone neutre de l'homme. 989 01:08:58,000 --> 01:09:02,000 Lorsque vous montez un peu plus loin ici 990 01:09:02,000 --> 01:09:05,000 vous avez réellement l'endroit où 991 01:09:05,000 --> 01:09:09,000 le code de votre vie du programme. 992 01:09:09,000 --> 01:09:13,000 Ce code binaire réel, que fichier exécutable se fait chargé en mémoire 993 01:09:13,000 --> 01:09:17,000 lorsque vous exécutez un programme, et il vit dans le segment de code. 994 01:09:17,000 --> 01:09:22,000 Et que votre programme exécute le processeur regarde ce segment de code 995 01:09:22,000 --> 01:09:24,000 de comprendre quelle est la prochaine instruction? 996 01:09:24,000 --> 01:09:27,000 Quelle est la prochaine ligne de code que j'ai besoin d'exécuter? 997 01:09:27,000 --> 01:09:31,000 >> Il ya aussi un segment de données, et c'est là que les constantes de chaîne 998 01:09:31,000 --> 01:09:34,000 sont stockés que vous avez utilisé. 999 01:09:34,000 --> 01:09:42,000 Et puis plus loin là-haut, c'est cet endroit appelé le tas. 1000 01:09:42,000 --> 01:09:46,000 Nous avons accès à la mémoire là-bas à l'aide de malloc, 1001 01:09:46,000 --> 01:09:49,000 puis vers le haut de votre programme 1002 01:09:49,000 --> 01:09:52,000 il ya la pile, 1003 01:09:52,000 --> 01:09:57,000 et c'est là que nous avons joué pour la plupart du début. 1004 01:09:57,000 --> 01:09:59,000 Ce n'est pas à l'échelle ou quoi que ce soit. 1005 01:09:59,000 --> 01:10:03,000 Beaucoup de ce qui est très dépendant de la machine, 1006 01:10:03,000 --> 01:10:10,000 système d'exploitation à charge, mais cela est relativement comment les choses se chunked place. 1007 01:10:10,000 --> 01:10:17,000 Lorsque vous exécutez un programme et vous déclarez une variable appelée x- 1008 01:10:17,000 --> 01:10:27,000 Je vais faire une autre boîte en bas, et cela va être ainsi RAM. 1009 01:10:27,000 --> 01:10:29,000 Et je vais regarder. 1010 01:10:29,000 --> 01:10:34,000 Nous allons dessiner des lignes brisées pour indiquer qu'il s'agit juste d'une petite section de la RAM 1011 01:10:34,000 --> 01:10:38,000 et pas tout comme nous attirons vers le haut. 1012 01:10:38,000 --> 01:10:43,000 >> Si je déclare une variable entière nommée x, 1013 01:10:43,000 --> 01:10:49,000 alors ce que je réellement obtenir une cartographie 1014 01:10:49,000 --> 01:10:54,000 qui est stockée dans la table de symboles de programme de ma 1015 01:10:54,000 --> 01:11:00,000 qui relie le nom x dans cette région du mémoire que j'ai rédigé 1016 01:11:00,000 --> 01:11:03,000 ici entre les barres verticales. 1017 01:11:03,000 --> 01:11:08,000 Si j'ai une ligne de code dans mon programme qui dit x = 7 1018 01:11:08,000 --> 01:11:15,000 le processeur sait "Oh, d'accord, je sais que la vie des x dans ce lieu de mémoire». 1019 01:11:15,000 --> 01:11:25,000 «Je vais aller de l'avant et écrire un 7 là-bas." 1020 01:11:25,000 --> 01:11:28,000 Comment sait-il quel endroit ce n'est dans la mémoire? 1021 01:11:28,000 --> 01:11:30,000 Eh bien, que tout est fait au moment de la compilation. 1022 01:11:30,000 --> 01:11:34,000 Le compilateur prend soin d'affecter où chacune des variables vont aller 1023 01:11:34,000 --> 01:11:40,000 et la création d'une cartographie spécifique ou non reliant les points 1024 01:11:40,000 --> 01:11:43,000 entre un symbole et où il va, d'une variable nom 1025 01:11:43,000 --> 01:11:46,000 et où il va vivre dans la mémoire. 1026 01:11:46,000 --> 01:11:50,000 Mais il s'avère que nous pouvons y accéder à nos programmes ainsi. 1027 01:11:50,000 --> 01:11:55,000 Cela devient important quand on commence à parler de quelques-unes des structures de données, 1028 01:11:55,000 --> 01:11:58,000 qui est un concept que nous allons vous présenter plus tard. 1029 01:11:58,000 --> 01:12:09,000 >> Mais pour l'instant, ce que vous pouvez savoir, c'est que je peux créer un pointeur vers cet endroit, x. 1030 01:12:09,000 --> 01:12:12,000 Par exemple, je peux créer une variable pointeur. 1031 01:12:12,000 --> 01:12:16,000 Lorsque nous créons une variable pointeur on utilise la notation étoile. 1032 01:12:16,000 --> 01:12:21,000 Dans ce cas, cela dit je vais créer un pointeur vers un int. 1033 01:12:21,000 --> 01:12:24,000 C'est un type comme les autres. 1034 01:12:24,000 --> 01:12:27,000 Nous lui donnons une variable comme y, 1035 01:12:27,000 --> 01:12:32,000 puis nous avons mis en elle égale à l'adresse, à une adresse. 1036 01:12:32,000 --> 01:12:38,000 Dans ce cas, nous pouvons mettre au point y à x 1037 01:12:38,000 --> 01:12:43,000 en prenant l'adresse de x, ce que nous faisons avec ce esperluette, 1038 01:12:43,000 --> 01:12:55,000 puis nous avons mis à y pointer vers elle. 1039 01:12:55,000 --> 01:12:59,000 Ce qui ne l'essentiel est de savoir si nous regardons notre RAM 1040 01:12:59,000 --> 01:13:02,000 cela crée une variable distincte. 1041 01:13:02,000 --> 01:13:04,000 Il va y appeler, 1042 01:13:04,000 --> 01:13:06,000 et lorsque cette ligne de code s'exécute 1043 01:13:06,000 --> 01:13:13,000 il va vraiment créer un pointeur peu que nous en général dessiner comme une flèche, 1044 01:13:13,000 --> 01:13:15,000 et il y met au point à x. 1045 01:13:15,000 --> 01:13:17,000 Oui. 1046 01:13:17,000 --> 01:13:19,000 [Étudiants] Si x est déjà un pointeur, pourriez-vous faire 1047 01:13:19,000 --> 01:13:22,000 int * y = x au lieu d'avoir l'esperluette? 1048 01:13:22,000 --> 01:13:24,000 Oui. 1049 01:13:24,000 --> 01:13:27,000 Si x est déjà un pointeur, vous pouvez définir 2 pointeurs égales les unes aux autres, 1050 01:13:27,000 --> 01:13:30,000 dans ce cas, y aurait pas signaler à x, 1051 01:13:30,000 --> 01:13:34,000 mais il rappelle à tout ce que x pointe. 1052 01:13:34,000 --> 01:13:37,000 Malheureusement, nous n'avons plus de temps. 1053 01:13:37,000 --> 01:13:44,000 >> Ce que je voudrais dire à ce stade, on peut parler de cette ligne, 1054 01:13:44,000 --> 01:13:49,000 mais je dirais de commencer à travailler à travers ce problème, n ° 14. 1055 01:13:49,000 --> 01:13:53,000 Vous pouvez voir qu'il ya déjà un peu rempli pour vous ici. 1056 01:13:53,000 --> 01:13:57,000 Vous pouvez voir que lorsque nous déclarons 2 pointeurs, int * x et y *, 1057 01:13:57,000 --> 01:14:01,000 et notez que pointer du * côté de la variable est quelque chose qui a été fait l'année dernière. 1058 01:14:01,000 --> 01:14:05,000 Il s'avère que ceci est similaire à ce que nous faisons cette année. 1059 01:14:05,000 --> 01:14:11,000 Il n'a pas d'importance où vous écrivez le fichier * lorsque vous êtes en déclarant le pointeur. 1060 01:14:11,000 --> 01:14:17,000 Mais nous avons écrit l'* à côté du type 1061 01:14:17,000 --> 01:14:24,000 parce que il est très clair que vous déclarez une variable pointeur. 1062 01:14:24,000 --> 01:14:27,000 Vous pouvez voir que la déclaration des 2 pointeurs nous donne 2 boîtes. 1063 01:14:27,000 --> 01:14:31,000 Ici, lorsque nous avons créé x est égal à malloc 1064 01:14:31,000 --> 01:14:34,000 ce que cela veut dire met de côté la mémoire dans le tas. 1065 01:14:34,000 --> 01:14:41,000 Cette petite boîte ici, ce cercle, est situé sur le tas. 1066 01:14:41,000 --> 01:14:43,000 X est orientée vers celui-ci. 1067 01:14:43,000 --> 01:14:46,000 Notez que y est pas encore pointant vers quoi que ce soit. 1068 01:14:46,000 --> 01:14:50,000 Pour obtenir de mémoire pour enregistrer le numéro 42 dans x 1069 01:14:50,000 --> 01:14:55,000 nous devrions utiliser ce notation? 1070 01:14:55,000 --> 01:14:59,000 [Étudiants] * x = 42. 1071 01:14:59,000 --> 01:15:01,000 Exactement, * x = 42. 1072 01:15:01,000 --> 01:15:06,000 Cela signifie suivre la flèche et jeter 42 en bas. 1073 01:15:06,000 --> 01:15:09,000 Voici où nous installons y et x, nous avons y pointant vers x. 1074 01:15:09,000 --> 01:15:13,000 Encore une fois, cela est juste comme ce que Kevin a dit où nous installons y égal à x. 1075 01:15:13,000 --> 01:15:15,000 Y ne pointe pas vers x. 1076 01:15:15,000 --> 01:15:19,000 Au contraire, il pointe vers ce qui est x désignant aussi bien. 1077 01:15:19,000 --> 01:15:24,000 >> Et puis enfin, dans cette dernière case, il ya 2 choses possibles que nous pourrions faire. 1078 01:15:24,000 --> 01:15:28,000 Premièrement, nous pourrions dire * x = 13. 1079 01:15:28,000 --> 01:15:33,000 L'autre chose est que nous pourrions dire, Alex, savez-vous ce que nous pourrions faire ici? 1080 01:15:33,000 --> 01:15:37,000 On pourrait dire * x = 13 ou- 1081 01:15:37,000 --> 01:15:41,000 [Étudiants] Vous pouvez dire tout ce que int. 1082 01:15:41,000 --> 01:15:45,000 [Nate H.] Si cela était appelée une variable int nous pourrions le faire. 1083 01:15:45,000 --> 01:15:49,000 On pourrait aussi dire * y = 13, car ils sont tous deux pointant vers le même endroit, 1084 01:15:49,000 --> 01:15:51,000 nous pouvons donc utiliser soit variable pour y arriver. 1085 01:15:51,000 --> 01:15:56,000 Ouais. >> [Étudiants] Que faudrait-il ressembler si nous disons simplement x int est de 13? 1086 01:15:56,000 --> 01:16:00,000 Ce serait de déclarer une nouvelle variable appelée x, qui ne fonctionnerait pas. 1087 01:16:00,000 --> 01:16:04,000 Nous aurions une collision, car nous avons déclaré que x soit un pointeur vers le haut ici. 1088 01:16:04,000 --> 01:16:10,000 [Étudiants] Si nous avons juste eu cette déclaration par lui-même ce qui ressemblerait-il en termes de cercle? 1089 01:16:10,000 --> 01:16:14,000 Si nous avions x = 13 alors nous aurions une boîte, et plutôt que d'avoir une flèche 1090 01:16:14,000 --> 01:16:16,000 sortir de la boîte, nous avions le dessiner comme un simple 13. 1091 01:16:16,000 --> 01:16:19,000 [Étudiants] Dans la boîte. D'accord. 1092 01:16:19,000 --> 01:16:24,000 >> Merci d'avoir regardé, et bonne chance Quiz 0. 1093 01:16:24,000 --> 01:16:28,000 [CS50.TV]