1 00:00:00,000 --> 00:00:11,280 2 00:00:11,280 --> 00:00:13,650 >> INTERLOCUTEUR 1: Très bien. 3 00:00:13,650 --> 00:00:14,390 Bienvenue. 4 00:00:14,390 --> 00:00:19,260 C'est la deuxième semaine du CS50, et nous avons jusqu'ici été en utilisant des fonctions mais 5 00:00:19,260 --> 00:00:20,830 largement pris pour acquis. 6 00:00:20,830 --> 00:00:23,430 Nous avons utilisé printf qui a le effet secondaire d'impression 7 00:00:23,430 --> 00:00:24,110 choses à l'écran. 8 00:00:24,110 --> 00:00:25,790 Nous avons utilisé rendez-int, float obtenir. 9 00:00:25,790 --> 00:00:29,230 >> Mais que faire si vous voulez vraiment créer vos propres fonctions, comme certains d' 10 00:00:29,230 --> 00:00:31,740 vous avez peut-être déjà commencé à faire pour ensemble de problèmes Un, bien 11 00:00:31,740 --> 00:00:33,140 pas strictement nécessaire? 12 00:00:33,140 --> 00:00:37,150 Eh bien, allons de l'avant et revenir sur cette problème de demande simplement à l'utilisateur 13 00:00:37,150 --> 00:00:40,660 leur nom et d'imprimer quelque chose sur le écran, mais essayez de factoriser certains 14 00:00:40,660 --> 00:00:44,000 de la communauté que nous avons vu dans notre code jusqu'ici. 15 00:00:44,000 --> 00:00:45,120 Donc, je veux dire par ce qui suit. 16 00:00:45,120 --> 00:00:47,315 >> Je vais aller de l'avant et créer un nouveau programme, appelez simplement 17 00:00:47,315 --> 00:00:49,320 il hello.c comme d'habitude. 18 00:00:49,320 --> 00:00:53,730 Je vais aller de l'avant et me donner inclure io.h norme au sommet. 19 00:00:53,730 --> 00:00:57,040 Je vais me donner aussi préventivement la bibliothèque CS50 sorte que 20 00:00:57,040 --> 00:00:59,080 Je ne suis pas crié par le compilateur. 21 00:00:59,080 --> 00:01:02,400 Et maintenant, je vais aller de l'avant et déclarer int, main, vide. 22 00:01:02,400 --> 00:01:09,020 >> Et puis ici, c'est là que je veux pour commencer à externaliser les fonctionnalités de 23 00:01:09,020 --> 00:01:12,090 une autre fonction que je me suis vais écrire mais cela ne 24 00:01:12,090 --> 00:01:13,820 existent actuellement. 25 00:01:13,820 --> 00:01:19,210 Par exemple, supposons que je voulais écrire une fonction qui me permet d' 26 00:01:19,210 --> 00:01:23,830 imprimer bonjour, virgule, puis le nom de certains utilisateurs. 27 00:01:23,830 --> 00:01:29,010 Plutôt que de continuer à faire printf bonjour,% s, ça ne serait pas bien si 28 00:01:29,010 --> 00:01:33,380 il y avait juste une fonction appelée printf, mais pas le nom d'impression? 29 00:01:33,380 --> 00:01:36,600 >> Donc, en d'autres termes, je veux être en mesure de écrire un programme qui fait un peu 30 00:01:36,600 --> 00:01:37,710 quelque chose comme ça. 31 00:01:37,710 --> 00:01:42,070 Tout d'abord, je vais dire printf votre nom, incitant ainsi à l'utilisateur de 32 00:01:42,070 --> 00:01:46,150 me donner son nom, et puis je suis va utiliser la chaîne familières s à 33 00:01:46,150 --> 00:01:47,290 déclarer une chaîne. 34 00:01:47,290 --> 00:01:50,420 Donne-moi une variable de type string, appelez-s, et en ce que le magasin 35 00:01:50,420 --> 00:01:52,120 résultat de l'appel obtenir chaîne. 36 00:01:52,120 --> 00:01:56,060 Mais maintenant, ces dernières semaines, je n'aurais un peu laborieusement fait bonjour,% s / n. 37 00:01:56,060 --> 00:01:58,630 38 00:01:58,630 --> 00:02:02,570 >> Et en d'autres termes, nous avons vu ce exemple un tas de fois, et c'est un 39 00:02:02,570 --> 00:02:05,280 exemple trivial, car il ya juste un ligne de code donc c'est vraiment pas un 40 00:02:05,280 --> 00:02:06,860 gros problème pour continuer à taper à nouveau. 41 00:02:06,860 --> 00:02:09,990 Mais supposons que cette ligne de code ont été effectivement devenir un fardeau, et 42 00:02:09,990 --> 00:02:12,900 ce n'est pas une ligne de code, mais c'est 10 lignes de code quelques semaines à partir de maintenant, 43 00:02:12,900 --> 00:02:15,190 et vous êtes juste fatigué de copier et de coller ou 44 00:02:15,190 --> 00:02:17,180 retaper ce même code. 45 00:02:17,180 --> 00:02:22,100 Ne serait-il pas agréable au lieu de faire printf bonjour,% s et ainsi de suite, 46 00:02:22,100 --> 00:02:26,500 ça ne serait pas bien s'il y avait juste une fonction appelée nom d'impression 47 00:02:26,500 --> 00:02:27,560 prend un argument - 48 00:02:27,560 --> 00:02:29,120 en d'autres termes, il faut d'entrée - 49 00:02:29,120 --> 00:02:30,620 et puis point-virgule. 50 00:02:30,620 --> 00:02:33,240 Alors que la fonction, ne serait-il Soyez gentil si cela existe? 51 00:02:33,240 --> 00:02:36,690 Alors je ne voudrais pas avoir à se soucier ce qui est printf, ce% s et tous 52 00:02:36,690 --> 00:02:39,400 ces complexités qui sont pas tout à fait intéressant. 53 00:02:39,400 --> 00:02:40,570 Ils sont utiles. 54 00:02:40,570 --> 00:02:44,700 >> Donc nom d'impression, malheureusement, n'a pas été inventé certains il ya 40 ans et plus. 55 00:02:44,700 --> 00:02:45,980 Personne ne pensait à écrire. 56 00:02:45,980 --> 00:02:48,300 Mais c'est la beauté d'avoir une langage de programmation, tout comme dans 57 00:02:48,300 --> 00:02:52,930 Scratch vous pouvez définir des blocs personnalisés, de sorte en C et plus n'importe quelle langue, pouvez-vous 58 00:02:52,930 --> 00:02:57,260 définir votre propre fonctionnalité, peut vous définissez vos propres fonctions. 59 00:02:57,260 --> 00:03:01,710 Ainsi, même si nous obtenons principal par automatiquement gratuitement, nous pouvons déclarer 60 00:03:01,710 --> 00:03:02,730 nos propres fonctions. 61 00:03:02,730 --> 00:03:05,670 >> Donc, je vais faire un peu de place ici en haut, et je vais déclarer ma 62 00:03:05,670 --> 00:03:08,210 propre fonction qui va chercher un peu étrange au début, mais nous y reviendrons 63 00:03:08,210 --> 00:03:09,400 Retour à cela avant longtemps. 64 00:03:09,400 --> 00:03:12,310 Je vais dire nulle, ce qui indiquant que cette fonction fait 65 00:03:12,310 --> 00:03:16,040 quelque chose, a un effet secondaire, mais il ne revient pas quelque chose de moi dans le 66 00:03:16,040 --> 00:03:18,810 même manière que se int ou obtenir chaîne elle-même fait. 67 00:03:18,810 --> 00:03:22,450 Et je vais donner à cette fonction une nom de l'appellation d'impression, et je vais 68 00:03:22,450 --> 00:03:26,470 précise que ce gars va prendre une chaîne, et je vais appeler que 69 00:03:26,470 --> 00:03:27,600 nom de chaîne. 70 00:03:27,600 --> 00:03:32,100 Je pourrais l'appeler ce que je veux, mais je veux que mon code soit auto-documenté. 71 00:03:32,100 --> 00:03:34,770 En d'autres termes, si l'un d'entre vous étaient à ouvrir ce fichier et le lire, vous pourriez 72 00:03:34,770 --> 00:03:39,020 sorte de déduire du nom de cette entrée ce rôle qu'il est censé jouer. 73 00:03:39,020 --> 00:03:42,270 >> Et maintenant, ci-dessous, je vais ouvrir accolade et fermé accolade, 74 00:03:42,270 --> 00:03:47,140 et ainsi remarqué que j'ai suivi la même motif sur quatre lignes à travers sept comme 75 00:03:47,140 --> 00:03:51,622 J'ai suivi pendant une bonne semaine plus maintenant entre, par exemple, des lignes et neuf 76 00:03:51,622 --> 00:03:53,400 14 qui composent principal. 77 00:03:53,400 --> 00:03:56,160 En d'autres termes, imprimer le nom est une autre fonction. 78 00:03:56,160 --> 00:03:58,990 Maintenant, le compilateur ne va pas savoir pour appeler automatiquement cette chose 79 00:03:58,990 --> 00:04:02,670 parce que je me suis littéralement viens de l'inventer, mais il saura toujours faire appel principal 80 00:04:02,670 --> 00:04:08,710 automatiquement, et puis bien sûr en ligne 13, j'appelle mon propre fonction. 81 00:04:08,710 --> 00:04:12,805 Et parce que j'ai déclaré que la fonction sur quatre lignes avant principal, 82 00:04:12,805 --> 00:04:16,579 cela va enseigner le compilateur ce entre guillemets », nom d'impression" 83 00:04:16,579 --> 00:04:18,140 signifie et ce qu'il devrait faire. 84 00:04:18,140 --> 00:04:22,700 Donc, je suis en quelque sorte de lui donner une nouvelle coutume bloquer dans le cadre de, disons, zéro. 85 00:04:22,700 --> 00:04:27,240 >> Donc ici, je peux mettre que très commun ou un motif récurrent de code, je garderai 86 00:04:27,240 --> 00:04:32,300 écriture en classe, printf % S bonjour,% s / n ", - 87 00:04:32,300 --> 00:04:36,720 88 00:04:36,720 --> 00:04:37,590 qu'est-ce que je veux mettre ici? 89 00:04:37,590 --> 00:04:39,200 S? 90 00:04:39,200 --> 00:04:41,420 Je tiens donc à mettre le nom dans ce contexte. 91 00:04:41,420 --> 00:04:43,440 Alors remarquer un peu d'une dichotomie ici. 92 00:04:43,440 --> 00:04:47,680 Parce que je déclare ma propre fonction et j'ai un peu arbitrairement appelé 93 00:04:47,680 --> 00:04:50,880 il imprimer le nom, et parce que j'ai spécifié entre parenthèses que cette 94 00:04:50,880 --> 00:04:55,035 fonction prend un argument, le type de qui est une chaîne - c'est donc un mot 95 00:04:55,035 --> 00:05:00,010 ou une phrase ou quelque chose comme ça - et J'appelle ce nom d'argument, que 96 00:05:00,010 --> 00:05:04,770 signifie la seule variable qui est en portée, pour ainsi dire, est le nom. 97 00:05:04,770 --> 00:05:07,780 >> S existe seulement entre ce deux accolades, bien sûr? 98 00:05:07,780 --> 00:05:12,990 Eh bien, tout comme la ligne 10 par le biais 14 Ainsi, tout comme le lundi ne pouvez pas utiliser 99 00:05:12,990 --> 00:05:17,650 S, mais ce que je peux faire est de passer S en caractères d'imprimerie. 100 00:05:17,650 --> 00:05:21,030 Imprimer le nom se trouve juste à lui donner un alias, un synonyme, un surnom, 101 00:05:21,030 --> 00:05:24,400 appelant son nom, et maintenant utiliser dans cette ligne. 102 00:05:24,400 --> 00:05:26,840 Alors maintenant, laissez-moi sauver ce, effectuer un zoom arrière. 103 00:05:26,840 --> 00:05:31,250 >> Permettez-moi d'aller de l'avant et faire bonjour. 104 00:05:31,250 --> 00:05:32,400 On dirait bien. 105 00:05:32,400 --> 00:05:36,110 N'a pas cracher des erreurs. . / Bonjour Entrée. 106 00:05:36,110 --> 00:05:37,020 Quel est mon nom? 107 00:05:37,020 --> 00:05:38,060 David. 108 00:05:38,060 --> 00:05:39,270 Et bonjour David. 109 00:05:39,270 --> 00:05:41,820 Donc, pas tout à fait passionnant, mais il suffit de penser maintenant. 110 00:05:41,820 --> 00:05:44,310 Vous avez maintenant le même ingrédient comme nous l'avons fait dans Scratch 111 00:05:44,310 --> 00:05:45,420 faire nos propres fonctions. 112 00:05:45,420 --> 00:05:46,770 >> Mais il ya un peu d'une chasse aux sorcières. 113 00:05:46,770 --> 00:05:50,620 Supposons que je n'avais pas vraiment pensé cette grâce et je fait sans 114 00:05:50,620 --> 00:05:54,250 vraiment y penser écrit cette fonction ici. 115 00:05:54,250 --> 00:05:55,420 Sent parfaitement raisonnable. 116 00:05:55,420 --> 00:05:58,440 Dans Scratch il n'ya pas de notion d'emplacement dans vos scripts. 117 00:05:58,440 --> 00:06:00,670 Vous pourriez mettre un ici, un ici, une place ici, et il pourrait commencer 118 00:06:00,670 --> 00:06:03,310 à regarder un peu en désordre si vous n'avez pas étalez soigneusement, mais ce n'est pas 119 00:06:03,310 --> 00:06:05,910 Peu importe où physiquement les scripts étaient à l'écran. 120 00:06:05,910 --> 00:06:09,660 Malheureusement, dans C - et c'est la différence langages comme Java et Python 121 00:06:09,660 --> 00:06:13,600 et d'autres que vous connaissez peut-être avec - malheureusement en C, afin de ne 122 00:06:13,600 --> 00:06:15,830 d'importance parce que regarder ce qui se va se passer maintenant. 123 00:06:15,830 --> 00:06:19,010 >> La fonction par défaut qui va à exécuter est, bien sûr, le principal. 124 00:06:19,010 --> 00:06:22,290 Principal va appeler le nom d'impression sur ligne huit, mais malheureusement, le 125 00:06:22,290 --> 00:06:26,660 compilateur ne saura même pas que le nom d'impression existe jusqu'à ce qu'il arrive à la ligne 11, 126 00:06:26,660 --> 00:06:28,520 ce qui n'est malheureusement va être trop tard. 127 00:06:28,520 --> 00:06:30,660 Alors, faisons faire bonjour. 128 00:06:30,660 --> 00:06:32,950 Et maintenant, putain, deux erreurs générées. 129 00:06:32,950 --> 00:06:36,050 Alors maintenant, laissez-moi faire défiler jusqu'à la très D'abord, comme nous devrions toujours faire, et 130 00:06:36,050 --> 00:06:39,560 remarquerez que c'est à me crier dessus, "Déclaration implicite de la fonction 131 00:06:39,560 --> 00:06:40,540 imprimer le nom ". 132 00:06:40,540 --> 00:06:43,860 >> Donc, nous avons vu ce message avant, déclaration implicite de la fonction. 133 00:06:43,860 --> 00:06:48,080 Lorsque nous avons vu ce genre d'erreur? 134 00:06:48,080 --> 00:06:49,180 Quand je ne comprend pas une bibliothèque. 135 00:06:49,180 --> 00:06:53,470 Si j'ai oublié cs50.h et je recevrais engueuler pour obtenir string ou obtenir int. 136 00:06:53,470 --> 00:06:56,880 Mais dans ce cas, cette fonction print nom n'est pas dans une bibliothèque, non? 137 00:06:56,880 --> 00:07:00,230 C'est littéralement dans ce dossier, afin ce qui est vraiment le problème? 138 00:07:00,230 --> 00:07:04,660 >> Eh bien, malheureusement en C, il vous faut si incroyablement littéralement que si vous 139 00:07:04,660 --> 00:07:08,640 vouloir une fonction appelée nom d'impression existe, il faut soit mettre en œuvre 140 00:07:08,640 --> 00:07:11,940 cette fonction tout en haut de votre Code afin qu'il soit accessible à la baisse 141 00:07:11,940 --> 00:07:15,070 fonctions, mais franchement, cela devient bâclé très rapidement. 142 00:07:15,070 --> 00:07:18,160 Personnellement, j'aime donner la priorité principale car alors il est très clair que cette 143 00:07:18,160 --> 00:07:19,890 programme fait à première vue. 144 00:07:19,890 --> 00:07:23,290 Et en plus, vous pouvez obtenir dans le coin bizarre cas où si x veut appeler 145 00:07:23,290 --> 00:07:27,530 Y mais y peuvent appeler x, il vous suffit physiquement ne peut pas vraiment mettre un 146 00:07:27,530 --> 00:07:28,540 au-dessus de l'autre. 147 00:07:28,540 --> 00:07:31,230 >> Mais il se trouve dans C, on peut résoudre ce très simplement. 148 00:07:31,230 --> 00:07:34,010 Je vais mettre un peu d'espace ici, et je vais juste 149 00:07:34,010 --> 00:07:38,170 préventivement, quoique quelque peu redondante, va enseigner l' 150 00:07:38,170 --> 00:07:42,320 compilateur qu'il existe une fonction appelé nom d'impression, il prend une chaîne, 151 00:07:42,320 --> 00:07:46,330 et je vais appeler il n'en citer virgule. 152 00:07:46,330 --> 00:07:50,220 >> Donc cela maintenant en ligne quatre, ce qui nous n'ont pas vu avant, est une déclaration 153 00:07:50,220 --> 00:07:53,940 d'un nom d'impression de fonction, mais c'est seulement une promesse que cette fonction 154 00:07:53,940 --> 00:07:56,620 éventuellement être défini, finalement être mis en œuvre. 155 00:07:56,620 --> 00:08:00,180 Cet maintenant je peux laisser seul car maintenant c'est la définition, la 156 00:08:00,180 --> 00:08:04,090 mise en œuvre, en quelque sorte le dernier mile de la mise en œuvre de cette 157 00:08:04,090 --> 00:08:05,130 fonction particulière. 158 00:08:05,130 --> 00:08:08,450 Donc franchement c'est stupide, c'est ennuyeux, mais c'est la façon dont C est, et c'est 159 00:08:08,450 --> 00:08:12,050 car il vous emmène très littéralement et, comme un ordinateur franchement devrait, 160 00:08:12,050 --> 00:08:16,020 que fait exactement ce que vous lui demandez de faire, et de manière que les commandes est important. 161 00:08:16,020 --> 00:08:18,940 >> Donc, gardez cela à l'esprit et à nouveau, commencer à constater la récurrence de motifs. 162 00:08:18,940 --> 00:08:21,850 Les chances sont que vous voulez, si vous ne l'avez pas déjà, commencer à rencontrer des messages 163 00:08:21,850 --> 00:08:24,700 comme ce qui à première vue semblent complètement énigmatique, mais si vous commencez 164 00:08:24,700 --> 00:08:29,000 de rechercher ces mots clés comme "Déclaration implicite», la mention d'un 165 00:08:29,000 --> 00:08:32,380 fonction dans ce cas - et franchement, vous parfois même obtenir un peu de vert 166 00:08:32,380 --> 00:08:35,010 symbole de la carotte qui vous indique où le problème est probablement - 167 00:08:35,010 --> 00:08:40,980 vous pouvez commencer à travailler votre chemin à travers encore des messages d'erreur invisible. 168 00:08:40,980 --> 00:08:45,860 Toutes les questions sur l'écriture de votre propre fonction de cette façon? 169 00:08:45,860 --> 00:08:47,540 >> Faisons quelque chose qui est un peu plus convaincant. 170 00:08:47,540 --> 00:08:51,760 Plutôt que de simplement faire quelque chose qui a un effet secondaire de l'impression, laissez-moi aller 171 00:08:51,760 --> 00:08:55,340 avant et enregistrer un nouveau fichier, et nous allons appeler cette positive.c, même si c'est 172 00:08:55,340 --> 00:08:57,600 va être un peu différent par rapport à la dernière fois. 173 00:08:57,600 --> 00:09:01,910 Et cette fois, je tiens à re-mettre en œuvre exemple positive.C de dernière heure, qui 174 00:09:01,910 --> 00:09:04,430 est la force à l'utilisateur de donner moi un entier positif. 175 00:09:04,430 --> 00:09:07,280 Mais j'ai dû utiliser obtenir int dernière fois. 176 00:09:07,280 --> 00:09:10,780 N'aurait-il pas été bien s'il y avait une fonction appelée obtenir int positif 177 00:09:10,780 --> 00:09:13,610 que je ne pouvais confier cette morceau de fonctionnalités à? 178 00:09:13,610 --> 00:09:16,480 Donc, la différence est ici nous allons mettre en oeuvre obtenir int positif, mais à la différence 179 00:09:16,480 --> 00:09:20,330 Nom d'impression qui a eu un effet secondaire - il n'a retourné quelque chose pour moi comme 180 00:09:20,330 --> 00:09:21,710 un nombre ou une chaîne - 181 00:09:21,710 --> 00:09:25,510 se int positif est, bien sûr, va revenir, espérons-le, un int positif. 182 00:09:25,510 --> 00:09:26,170 >> Donc, nous allons le faire. 183 00:09:26,170 --> 00:09:30,840 Inclure cs50.h, Inclure norme io.h. 184 00:09:30,840 --> 00:09:33,520 Int void main. 185 00:09:33,520 --> 00:09:42,160 Et maintenant, ici, je vais aller de l'avant et disons int, appelez ça n, est égal 186 00:09:42,160 --> 00:09:44,270 obtenir int positive. 187 00:09:44,270 --> 00:09:49,080 Et tout comme obtenir int existe déjà parce que le personnel a écrit, je vais 188 00:09:49,080 --> 00:09:53,950 à supposer pour le moment que se int positive existe, et maintenant je vais 189 00:09:53,950 --> 00:09:57,730 à aller de l'avant et de dire printf, merci pour l'% i / n ", n. 190 00:09:57,730 --> 00:10:02,940 191 00:10:02,940 --> 00:10:07,770 >> Alors maintenant, si je compile ce programme, ce qui qui va se passer dans mon terminal 192 00:10:07,770 --> 00:10:09,075 fenêtre au bas de l'écran? 193 00:10:09,075 --> 00:10:11,580 194 00:10:11,580 --> 00:10:13,900 Je vais probablement obtenir que même erreur que précédemment. 195 00:10:13,900 --> 00:10:14,570 Essayons donc de cela. 196 00:10:14,570 --> 00:10:16,450 Rendre positif. 197 00:10:16,450 --> 00:10:19,900 Et encore une fois, déclaration implicite de fonction, obtenir int positive. 198 00:10:19,900 --> 00:10:21,970 Ainsi, nous pouvons résoudre ce dans un couple des manières. 199 00:10:21,970 --> 00:10:27,310 Je vais rester simple et juste mettre ma déclaration ici et obtenir 200 00:10:27,310 --> 00:10:28,120 int positive. 201 00:10:28,120 --> 00:10:29,720 J'ai besoin de ce qu'on appelle la signature. 202 00:10:29,720 --> 00:10:32,410 La signature se réfère seulement à l'esthétique de l' 203 00:10:32,410 --> 00:10:34,090 la première ligne du programme. 204 00:10:34,090 --> 00:10:37,420 Alors, que doit obtenir positif int retour? 205 00:10:37,420 --> 00:10:37,970 >> Ainsi, un int. 206 00:10:37,970 --> 00:10:41,540 Je veux dire, idéalement, il serait de retour quelque chose comme int positif, mais que 207 00:10:41,540 --> 00:10:42,160 n'existe pas. 208 00:10:42,160 --> 00:10:45,280 Nous n'avons pas vu que, parmi nos données types, nous devons donc faire face à la 209 00:10:45,280 --> 00:10:47,170 fait que nous avons très peu types de données pour travailler avec. 210 00:10:47,170 --> 00:10:50,360 Mais nous ne pouvons retourner un int et juste confiance que ce sera positif. 211 00:10:50,360 --> 00:10:52,690 Ça va être appelé obtenir int positive. 212 00:10:52,690 --> 00:10:55,122 >> Et maintenant, que diriez-vous de ses arguments? 213 00:10:55,122 --> 00:10:56,440 Faut-il une entrée? 214 00:10:56,440 --> 00:10:58,280 Est-il besoin n'importe quelle entrée? 215 00:10:58,280 --> 00:11:00,900 Donc, il n'a pas besoin de savoir en quoi que ce soit à l'avance. 216 00:11:00,900 --> 00:11:03,220 Recevez chaîne ne pas obtenir int ne fonctionne pas. 217 00:11:03,220 --> 00:11:06,430 Ne printf - il doit avoir une certaine entrée passée dans le - et le nom d'impression 218 00:11:06,430 --> 00:11:09,020 besoin d'un peu d'entrée, mais se int positif ne fait pas. 219 00:11:09,020 --> 00:11:11,530 Donc, je vais explicitement dire le vide du compilateur. 220 00:11:11,530 --> 00:11:13,470 Void est l'absence de toute autre chose. 221 00:11:13,470 --> 00:11:17,990 Alors moyens vide rien ne se passe à l'intérieur de ces parenthèses, virgules. 222 00:11:17,990 --> 00:11:20,840 >> Et maintenant, au fond de mon dossier - et encore une fois, je vais être de nature anal 223 00:11:20,840 --> 00:11:23,640 ici mettre principale dans la partie supérieure, qui est bien pratique car de cette façon, 224 00:11:23,640 --> 00:11:26,220 chaque fois que vous ou quelqu'un d'autre ouvre le fichier, le 225 00:11:26,220 --> 00:11:27,400 fonctionnalité est juste là. 226 00:11:27,400 --> 00:11:29,660 Vous pouvez plonger dans de zéro. 227 00:11:29,660 --> 00:11:34,190 Alors maintenant, je vais reproduire ceci, obtenir nulle int positif, mais je ne suis pas 228 00:11:34,190 --> 00:11:35,430 va frapper un point-virgule maintenant. 229 00:11:35,430 --> 00:11:38,280 Je vais ouvrir accolades, et maintenant j'ai besoin d'emprunter 230 00:11:38,280 --> 00:11:39,700 quelques idées du lundi. 231 00:11:39,700 --> 00:11:44,450 >> Donc, comme vous le savez, nous avons fait quelque chose que faire ce qui suit 232 00:11:44,450 --> 00:11:45,830 quelque chose était vraie. 233 00:11:45,830 --> 00:11:46,630 Et qu'ai-je fait? 234 00:11:46,630 --> 00:11:51,540 J'ai fait quelque chose comme donner moi un entier positif, 235 00:11:51,540 --> 00:11:52,430 peu d'une invite. 236 00:11:52,430 --> 00:11:53,540 Je pourrais utiliser les mots que je veux. 237 00:11:53,540 --> 00:11:54,960 Et puis j'ai utilisé quoi? 238 00:11:54,960 --> 00:11:59,530 Int n est égal à obtenir int, aucun argument à lui. 239 00:11:59,530 --> 00:12:00,550 >> Et la différence. 240 00:12:00,550 --> 00:12:04,680 Lorsque vous appelez une fonction, lorsque vous utilisez une fonction, vous ne mettez pas dans le vide. 241 00:12:04,680 --> 00:12:08,570 Vous ne faites que lorsque vous déclarez une fonction, l'enseignement au compilateur 242 00:12:08,570 --> 00:12:09,780 il doit s'attendre. 243 00:12:09,780 --> 00:12:11,650 Donc, vous n'avez pas besoin de mettre il annuler vous-même. 244 00:12:11,650 --> 00:12:12,940 >> Et maintenant, quel était mon état? 245 00:12:12,940 --> 00:12:19,670 Eh bien, n n'est pas égal à positive, mais c'est juste un pseudo-code. 246 00:12:19,670 --> 00:12:22,530 Alors, comment puis-je exprimer cela plus proprement? 247 00:12:22,530 --> 00:12:24,090 Ainsi, inférieure ou égale à zéro. 248 00:12:24,090 --> 00:12:26,250 Encore une fois, notez que vous pouvez faire inférieure ou égale à. 249 00:12:26,250 --> 00:12:28,100 Même si c'est deux séparés symboles, vous pouvez le faire sur 250 00:12:28,100 --> 00:12:29,350 votre clavier en tant que tel. 251 00:12:29,350 --> 00:12:33,950 >> Mais il ya encore un bug qui J'ai foiré dernière fois aussi. 252 00:12:33,950 --> 00:12:36,950 Je dois déclarer - 253 00:12:36,950 --> 00:12:37,460 exactement. 254 00:12:37,460 --> 00:12:39,640 Je dois déclarer à l'extérieur n de la boucle. 255 00:12:39,640 --> 00:12:44,180 J'ai donc besoin de mettre n place ici, et je ne sais pas envie de re-déclarer ici 256 00:12:44,180 --> 00:12:46,480 de peur que je reçois une nouvelle variable. 257 00:12:46,480 --> 00:12:48,860 Je veux juste d'attribuer une valeur ici. 258 00:12:48,860 --> 00:12:54,320 >> Et maintenant, je ne suis pas tout à fait fini. 259 00:12:54,320 --> 00:12:57,290 Permettez-moi de m'avancer et prétendre que je suis fait. 260 00:12:57,290 --> 00:13:01,220 Rendre positif, et maintenant il ya une nouvelle erreur. 261 00:13:01,220 --> 00:13:04,550 Contrôle atteint la fin de fonction non nulle. 262 00:13:04,550 --> 00:13:07,760 Donc, un nouveau message d'erreur, mais si vous genre de démêler chacun des mots, il 263 00:13:07,760 --> 00:13:09,620 Conseils probablement à ce qui est erroné. 264 00:13:09,620 --> 00:13:11,240 >> Contrôle. 265 00:13:11,240 --> 00:13:14,250 Contrôle signifie simplement à l'ordre des opérations dans le programme. 266 00:13:14,250 --> 00:13:16,510 L'ordinateur est dans le contrôle et quelque chose s'est mal passé. 267 00:13:16,510 --> 00:13:18,510 Alors qu'il arrive en fin de une fonction non nulle. 268 00:13:18,510 --> 00:13:21,760 Quelle fonction est-elle apparemment référence? 269 00:13:21,760 --> 00:13:24,790 Quelle est la fonction est non-nulle? 270 00:13:24,790 --> 00:13:27,400 Donc obtenir int positif, et un peu confusion dans ce puits, 271 00:13:27,400 --> 00:13:29,010 c'est une sorte de vide. 272 00:13:29,010 --> 00:13:33,070 Il a une spécification de vide pour son arguments, mais sa production va 273 00:13:33,070 --> 00:13:34,540 être de type n. 274 00:13:34,540 --> 00:13:37,260 Donc le mot de gauche est le que l'on appelle le type de retour. 275 00:13:37,260 --> 00:13:40,320 Le mot à l'intérieur est ici les zéro ou plusieurs arguments 276 00:13:40,320 --> 00:13:41,970 qu'une fonction prend. 277 00:13:41,970 --> 00:13:44,060 >> Alors, que dois-je faire? 278 00:13:44,060 --> 00:13:47,650 A ce point de mon code, la ligne 21 où l'invite clignotant est maintenant, je 279 00:13:47,650 --> 00:13:51,430 un int positif à l'intérieur de la variable appelée n. 280 00:13:51,430 --> 00:13:55,200 Comment puis-je le rendrai principal? 281 00:13:55,200 --> 00:13:55,960 Littéralement. 282 00:13:55,960 --> 00:13:59,320 Retour n virgule. 283 00:13:59,320 --> 00:14:04,090 >> Ainsi, tout comme Colton retourné un morceau de papier avec une réponse à me faisant tomber 284 00:14:04,090 --> 00:14:07,020 ce morceau de papier dans le petit noir boîte sur la table, pour faire en 285 00:14:07,020 --> 00:14:10,100 code, vous venez d'écrire littéralement, le retour n, et c'est comme si Colton étaient 286 00:14:10,100 --> 00:14:12,140 me remettre quelque chose au dos physique. 287 00:14:12,140 --> 00:14:15,870 Dans ce cas, qu'est-ce qui se passe est d'obtenir int positif va restituer 288 00:14:15,870 --> 00:14:19,220 ce qui est sans doute un effet positif entier à qui? 289 00:14:19,220 --> 00:14:21,380 D'où vient cette valeur finir? 290 00:14:21,380 --> 00:14:29,080 Qui se retrouve dans cette variable, n, et puis nous procédons à la ligne neuf. 291 00:14:29,080 --> 00:14:31,920 >> Donc, en d'autres termes, afin de opérations, ce programme commence 292 00:14:31,920 --> 00:14:34,430 d'exécution, et le compilateur réalise, Oh, vous voulez la bibliothèque? 293 00:14:34,430 --> 00:14:36,310 Permettez-moi d'aller prendre tout ce qui est à l'intérieur de cela. 294 00:14:36,310 --> 00:14:37,750 Oh, vous voulez la bibliothèque IO standard? 295 00:14:37,750 --> 00:14:39,660 Permettez-moi d'aller prendre tout ce qui est à l'intérieur de cela. 296 00:14:39,660 --> 00:14:44,510 Qu'est-ce que le compilateur dire à lui-même quand il frappe quatre lignes? 297 00:14:44,510 --> 00:14:47,980 Oh, vous avez promis de mettre en œuvre le fonction appelée obtenir positive, mais 298 00:14:47,980 --> 00:14:50,820 nous y reviendrons plus tard, quelque chose le long de ces lignes. 299 00:14:50,820 --> 00:14:53,450 >> Void main Int signifie simplement que voici les entrailles de mon programme. 300 00:14:53,450 --> 00:14:54,990 Ligne sept est juste une accolade. 301 00:14:54,990 --> 00:14:59,540 Ligne huit dit sur la gauche, donne moi 32 bits pour un entier, appellent n. 302 00:14:59,540 --> 00:15:02,160 Sur le côté droit, il est dire obtenir int positive. 303 00:15:02,160 --> 00:15:07,120 Maintenant, arrêtons-nous cette histoire parce que maintenant Je ne garde pas déplacer mon curseur vers le bas. 304 00:15:07,120 --> 00:15:11,720 Mon curseur va maintenant ici-bas parce que maintenant obtenir int positif exécute. 305 00:15:11,720 --> 00:15:13,100 Int n est déclarée. 306 00:15:13,100 --> 00:15:14,040 Procédez comme suit. 307 00:15:14,040 --> 00:15:16,090 Printf me donne un entier positif. 308 00:15:16,090 --> 00:15:19,740 >> Obtenez un int de l'utilisateur, le stocker dans n, et peut-être le faire encore et encore. 309 00:15:19,740 --> 00:15:23,010 Cette boucle signifie que ce code pourrait exécuter monter et descendre comme ça à nouveau 310 00:15:23,010 --> 00:15:25,810 et encore, mais lorsque l'utilisateur finalement coopère et me donne un positif 311 00:15:25,810 --> 00:15:31,750 int, j'ai touché la ligne 21, à quel point l' nombre est remis en arrière, et que l'on 312 00:15:31,750 --> 00:15:34,280 dois-je mettre aujourd'hui? 313 00:15:34,280 --> 00:15:35,070 Nine. 314 00:15:35,070 --> 00:15:39,010 Contrôle, pour ainsi dire, retourne pour aligner neuf. 315 00:15:39,010 --> 00:15:40,650 C'est la ligne qui est maintenant en charge. 316 00:15:40,650 --> 00:15:43,250 >> Donc, c'est ce qui se passe tous cette fois sous le capot, mais 317 00:15:43,250 --> 00:15:46,480 lorsque nous avons utilisé des fonctions comme printf ou même obtenir chaîne que quelqu'un d'autre 318 00:15:46,480 --> 00:15:50,600 a écrit pour vous, le contrôle avait été remis La ligne de code à quelqu'un d'autre 319 00:15:50,600 --> 00:15:51,290 par ligne par ligne. 320 00:15:51,290 --> 00:15:53,770 C'est juste que nous ne pouvait pas le voir et nous ne pouvait pas vraiment décrire dans ce 321 00:15:53,770 --> 00:15:57,620 programme parce que c'est une autre fichier sur le disque dur 322 00:15:57,620 --> 00:16:00,000 à notre insu. 323 00:16:00,000 --> 00:16:02,100 Donc, nous allons réellement compiler et exécuter cette entreprise. 324 00:16:02,100 --> 00:16:03,890 >> Rendre positif. 325 00:16:03,890 --> 00:16:05,260 Compiler, c'est le progrès. 326 00:16:05,260 --> 00:16:06,650 . / Positive. 327 00:16:06,650 --> 00:16:08,020 Donnez-moi un entier positif. 328 00:16:08,020 --> 00:16:08,800 Soyons difficile. 329 00:16:08,800 --> 00:16:10,430 Négatif 1. 330 00:16:10,430 --> 00:16:11,360 Zéro. 331 00:16:11,360 --> 00:16:13,370 Donnons-lui 50. 332 00:16:13,370 --> 00:16:18,100 Merci pour le 50, et ainsi de contrôle est maintenant de retour. 333 00:16:18,100 --> 00:16:21,750 Toutes les questions, alors, à ce sujet? 334 00:16:21,750 --> 00:16:23,180 Ouais? 335 00:16:23,180 --> 00:16:25,630 >> [Inaudible]. 336 00:16:25,630 --> 00:16:26,130 >> Dites à nouveau. 337 00:16:26,130 --> 00:16:27,860 Oh, bonne question. 338 00:16:27,860 --> 00:16:31,100 Ainsi, vous remarquerez peut-être un parallèle qui Je suis une sorte de coupe sur un coin. 339 00:16:31,100 --> 00:16:35,420 Dans la ligne 12, je veux dire, obtenir int positif retourne un int, mais par la même 340 00:16:35,420 --> 00:16:39,660 logique, il va maintenant de soi que dans ligne six, je dis que les rendements principales 341 00:16:39,660 --> 00:16:44,040 un int, mais qu'avons-nous jamais eu dans l'un de nos programmes? 342 00:16:44,040 --> 00:16:46,470 Nous n'avons jamais eu de mention cette déclaration de mot-clé. 343 00:16:46,470 --> 00:16:49,970 >> Ainsi, il s'avère que, dans C, au moins la version de celui-ci que nous utilisons 344 00:16:49,970 --> 00:16:55,750 fait en 1999, techniquement, ce n'est passe automatiquement pour vous. 345 00:16:55,750 --> 00:16:59,300 Chaque fois que vous mettez en œuvre un programme et vous mettre en œuvre une fonction appelée principale, 346 00:16:59,300 --> 00:17:04,230 cette fonction retournera zéro par par défaut si vous ne dites pas non, 347 00:17:04,230 --> 00:17:05,849 et nul n'est qu'une convention. 348 00:17:05,849 --> 00:17:09,430 Le monde retourne zéro ainsi ce qui indique que tout va bien, 349 00:17:09,430 --> 00:17:13,040 effectivement nous laissant avec quatre milliards choses qui pourraient aller 350 00:17:13,040 --> 00:17:17,530 mal de sorte que si nous revenons un, qui pourrait signifier un code qui signifie que ce 351 00:17:17,530 --> 00:17:18,310 chose s'est mal passé. 352 00:17:18,310 --> 00:17:20,589 Nous pourrions revenir à deux, ce qui signifie cette autre chose s'est mal passé. 353 00:17:20,589 --> 00:17:23,440 Nous pourrions revenir quatre milliards, ce qui signifie que cette autre chose s'est mal passé. 354 00:17:23,440 --> 00:17:27,170 >> Et si vous pensez maintenant de votre propre PC ou Mac, vous aimerez rappeler que 355 00:17:27,170 --> 00:17:29,610 Parfois, vous avez des messages d'erreur incompréhensibles à partir du logiciel que vous êtes 356 00:17:29,610 --> 00:17:32,650 l'aide, et parfois il a un humain Description sympathique, mais il ya 357 00:17:32,650 --> 00:17:35,265 souvent un code ou d'un numéro sur l'écran? 358 00:17:35,265 --> 00:17:37,800 Si cela ne vient pas à l'esprit, juste garder un œil sur elle. 359 00:17:37,800 --> 00:17:40,790 C'est typiquement ce que ces codes se réfèrent. 360 00:17:40,790 --> 00:17:44,200 Ils sont inclus dans Microsoft Word et d'autres programmes de sorte que si vous déposez une 361 00:17:44,200 --> 00:17:48,850 rapport de bogue avec l'entreprise, vous pouvez leur dire, oh, je suis numéro d'erreur 45. 362 00:17:48,850 --> 00:17:51,750 Et certains dos de programmeur à l'entreprise peut regarder que dans son 363 00:17:51,750 --> 00:17:54,940 code et dire, oh, c'est parce que j'ai fait ce bug et c'est pourquoi l'utilisateur 364 00:17:54,940 --> 00:17:56,240 obtenu ce message. 365 00:17:56,240 --> 00:17:59,490 >> Mais franchement, c'est juste un peu distrayant et un peu fastidieux à 366 00:17:59,490 --> 00:18:02,130 conclure que, au moins sur notre premiers programmes, nous avons donc 367 00:18:02,130 --> 00:18:02,970 été omettre. 368 00:18:02,970 --> 00:18:07,450 Mais tout ce temps, chacun de votre les principales fonctions a secrètement eu cette 369 00:18:07,450 --> 00:18:11,600 la ligne automatiquement ajouté pour vous par le compilateur, juste par convention 370 00:18:11,600 --> 00:18:13,172 vous faire gagner du temps. 371 00:18:13,172 --> 00:18:14,620 >> [Inaudible]. 372 00:18:14,620 --> 00:18:16,250 >> Vous n'avez pas besoin de l'inclure dans le principal. 373 00:18:16,250 --> 00:18:16,700 C'est très bien. 374 00:18:16,700 --> 00:18:20,260 Vous n'avez pas besoin de comprendre si vous étiez mettre en œuvre une fonction de ce genre. 375 00:18:20,260 --> 00:18:22,850 Sinon, l'appartement de fonction à ne fonctionnerait pas. 376 00:18:22,850 --> 00:18:24,480 Mais dans le principal, ce n'est pas nécessaire. 377 00:18:24,480 --> 00:18:28,450 Dans une semaine ou deux, nous allons commencer à obtenir cette habitude une fois que nous voulons commencer 378 00:18:28,450 --> 00:18:29,690 signifiant erreurs. 379 00:18:29,690 --> 00:18:32,550 Très bonne question. 380 00:18:32,550 --> 00:18:36,880 >> Pause verbale si prompts à souligner que ce vendredi, nous ne serons pas en train de déjeuner 381 00:18:36,880 --> 00:18:39,980 en soi, mais nous serons en train de dîner avec certains des étudiants et du personnel. 382 00:18:39,980 --> 00:18:42,940 Si vous souhaitez nous rejoindre, n'hésitez pas libre d'aller cs50.net/rsvp. 383 00:18:42,940 --> 00:18:45,030 18h00 ce vendredi. 384 00:18:45,030 --> 00:18:47,990 L'espace est, comme toujours, limité, mais nous allons continuer à faire ces derniers sur une presque 385 00:18:47,990 --> 00:18:51,420 chaque semaine si l'espace s'épuise cette semaine. 386 00:18:51,420 --> 00:18:56,160 >> Ainsi, le cliffhanger que nous nous sommes quittés sur Lundi était que les chaînes peuvent réellement 387 00:18:56,160 --> 00:19:00,520 être indexé en qui vous veut juste dire peut obtenir sur le premier caractère, la 388 00:19:00,520 --> 00:19:03,770 second caractère, le troisième caractère et ainsi de suite, parce que vous pouvez 389 00:19:03,770 --> 00:19:07,860 penser effectivement d'une chaîne, comme bonjour, comme dans ce cas-cinq 390 00:19:07,860 --> 00:19:09,670 lettres à l'intérieur des boîtes. 391 00:19:09,670 --> 00:19:13,370 Et vous pouvez obtenir à chacun de ces boîtes avec ce syntaxe Avons-nous 392 00:19:13,370 --> 00:19:15,230 introduire le lundi? 393 00:19:15,230 --> 00:19:16,760 Ces crochets sur votre clavier. 394 00:19:16,760 --> 00:19:18,980 C'est juste voulu aller à l'emplacement zéro. 395 00:19:18,980 --> 00:19:22,840 >> Nous commençons à compter à zéro, de sorte que support zéro signifie h, un support 396 00:19:22,840 --> 00:19:25,170 e signifie, et ainsi de suite. 397 00:19:25,170 --> 00:19:28,490 Et donc tout le temps quand nous avons été utilisant des chaînes et en tapant "bonjour" 398 00:19:28,490 --> 00:19:31,250 et «monde» et d'autres choses sur l'écran, il a été stocké 399 00:19:31,250 --> 00:19:32,820 dans des boîtes de ce genre. 400 00:19:32,820 --> 00:19:33,370 Et prendre une supposition. 401 00:19:33,370 --> 00:19:37,470 Qu'est-ce que chaque case représente physiquement à l'intérieur de votre ordinateur? 402 00:19:37,470 --> 00:19:38,250 >> [Inaudible]. 403 00:19:38,250 --> 00:19:39,150 >> Désolé? 404 00:19:39,150 --> 00:19:39,580 >> Personnages. 405 00:19:39,580 --> 00:19:44,760 >> Ainsi, un personnage, certainement dans le cas de chaînes, et un personnage est juste 406 00:19:44,760 --> 00:19:46,800 huit bits ou un octet. 407 00:19:46,800 --> 00:19:49,550 Alors vous êtes probablement au moins vaguement familiers avec le fait que votre 408 00:19:49,550 --> 00:19:50,500 ordinateur doté d'une mémoire. 409 00:19:50,500 --> 00:19:52,110 Il dispose de deux types de mémoire au moins. 410 00:19:52,110 --> 00:19:54,810 L'un est le disque dur sur lequel vous enregistrez farcir en permanence, et c'est 411 00:19:54,810 --> 00:19:57,400 typiquement grande afin que vous puissiez avoir des films et de la musique et ainsi de suite. 412 00:19:57,400 --> 00:20:04,010 >> Ensuite, vous avez un autre type de mémoire appelée RAM, R-A-M, Random Access 413 00:20:04,010 --> 00:20:07,510 Mémoire, et c'est le type de mémoire qui est utilisé lorsque votre ordinateur est 414 00:20:07,510 --> 00:20:11,520 fonctionne, mais si vous perdez votre pouvoir ou batterie meurt, tout ce qui est stocké 415 00:20:11,520 --> 00:20:15,300 dans la RAM disparaît si vous perdez le pouvoir tout à fait, car il n'est pas 416 00:20:15,300 --> 00:20:16,060 persistante. 417 00:20:16,060 --> 00:20:19,120 Vous avez généralement, de nos jours, un concert de celui-ci, deux concerts, voire plus. 418 00:20:19,120 --> 00:20:23,490 Et la hausse de RAM, c'est que c'est beaucoup beaucoup plus rapide que les disques durs 419 00:20:23,490 --> 00:20:27,390 ou même l'état solide entraîne de nos jours, mais il est généralement plus cher, donc 420 00:20:27,390 --> 00:20:28,480 vous avez moins de celui-ci. 421 00:20:28,480 --> 00:20:32,400 >> Alors, la conversation d'aujourd'hui se rapporte vraiment à la RAM, ce type de mémoire qui 422 00:20:32,400 --> 00:20:35,270 n'existe que tant qu'il ya puissance être introduit dans votre ordinateur. 423 00:20:35,270 --> 00:20:40,530 Ainsi, lorsque vous tapez dans H-E-L-L-O, pénétrer sur le clavier, l'H va dans une 424 00:20:40,530 --> 00:20:44,550 octet de RAM, le E va dans un autre octet de mémoire vive, comme c'est 425 00:20:44,550 --> 00:20:45,800 le reste du mot. 426 00:20:45,800 --> 00:20:49,010 Alors, rappelons ce que nous avons pu de faire la dernière fois, c'était cela. 427 00:20:49,010 --> 00:20:53,940 Permettez-moi d'aller de l'avant et d'ouvrir le fichier que nous avons appelé string.c, et rappelons 428 00:20:53,940 --> 00:20:56,860 qu'il avait l'air un peu quelque chose comme ça. 429 00:20:56,860 --> 00:20:59,860 Permettez-moi de réellement roule en arrière et changer il exactement à quoi il ressemblait, 430 00:20:59,860 --> 00:21:02,654 longueur de la chaîne de l'art. 431 00:21:02,654 --> 00:21:04,560 >> Alors regardez le programme ici. 432 00:21:04,560 --> 00:21:08,530 Nous incluons la bibliothèque CS50 si que nous pouvons utiliser obtenir chaîne. 433 00:21:08,530 --> 00:21:11,400 Nous incluons io.h norme afin que nous puissions utiliser printf. 434 00:21:11,400 --> 00:21:13,580 Pourquoi avons-nous inclus ? 435 00:21:13,580 --> 00:21:16,980 C'était nouveau lundi. 436 00:21:16,980 --> 00:21:18,230 Nous avons donc voulu longueur de la chaîne. 437 00:21:18,230 --> 00:21:19,090 Str Long. 438 00:21:19,090 --> 00:21:21,470 Les gens ont décidé il ya quelques années, disons simplement être succincte. 439 00:21:21,470 --> 00:21:24,290 Au lieu de l'appeler «longueur de la chaîne», appelons-le "str leng" et laissez l' 440 00:21:24,290 --> 00:21:28,540 Figure du monde que dehors, et c'est donc ce que nous avons accès à des . 441 00:21:28,540 --> 00:21:29,390 >> Ceci est familier. 442 00:21:29,390 --> 00:21:30,320 Ceci est familier. 443 00:21:30,320 --> 00:21:31,450 Ceci est familier. 444 00:21:31,450 --> 00:21:32,370 C'est un peu nouveau. 445 00:21:32,370 --> 00:21:35,420 En ligne 22 - et nous reviendrons à ce sujet, mais pour savoir maintenant - 446 00:21:35,420 --> 00:21:37,880 et vous voulez savoir ce que d'avoir lire la documentation ou si 447 00:21:37,880 --> 00:21:39,010 vous le saviez déjà C - 448 00:21:39,010 --> 00:21:41,510 obtenir chaîne peut parfois gâcher. 449 00:21:41,510 --> 00:21:45,130 Si l'utilisateur est vraiment contradictoire ou coopératifs et il ou elle vient 450 00:21:45,130 --> 00:21:49,450 ne rien taper au clavier ou types tellement au clavier 451 00:21:49,450 --> 00:21:53,760 il accable la mémoire de l'ordinateur, en théorie, obtenir chaîne pourrait revenir 452 00:21:53,760 --> 00:21:56,270 autre qu'une chose chaîne de caractères. 453 00:21:56,270 --> 00:22:01,930 Il pourrait retourner une valeur spéciale appelée NULL dans toutes les casquettes, N-U-L-L, et c'est 454 00:22:01,930 --> 00:22:03,390 seulement une valeur dite de sentinelle. 455 00:22:03,390 --> 00:22:08,010 C'est une valeur spéciale qui signifie quelque chose de mauvais s'est passé dans ce cas. 456 00:22:08,010 --> 00:22:10,520 C'est l'absence d'une chaîne. 457 00:22:10,520 --> 00:22:16,190 >> Alors NULL Je vérifie pour tout simplement de sorte que, Bref, str Long et 458 00:22:16,190 --> 00:22:20,230 autres fonctions qui viennent avec C, le cas ils s'attendent à une chaîne mais vous les transmettre 459 00:22:20,230 --> 00:22:23,630 l'absence d'une chaîne, si vous passez comme nulles, l'ordinateur ou le programme 460 00:22:23,630 --> 00:22:25,000 va juste planter carrément. 461 00:22:25,000 --> 00:22:25,610 Il se bloque. 462 00:22:25,610 --> 00:22:27,250 Il jettera quelque message d'erreur. 463 00:22:27,250 --> 00:22:28,690 Les mauvaises choses vont arriver. 464 00:22:28,690 --> 00:22:31,130 Ainsi, même si cela est encore pas bien défini - 465 00:22:31,130 --> 00:22:33,730 ce qui fera plus de sens dans une semaine ou deux - dans la ligne 22, c'est juste une 466 00:22:33,730 --> 00:22:38,790 exemple d'auto contrôle d'erreur défensive juste au cas où une fois sur 467 00:22:38,790 --> 00:22:42,040 quelque chose se passe mal millions, à moins mon programme ne plantera pas. 468 00:22:42,040 --> 00:22:45,960 >> Donc, si s ne égaux quelque chose de mauvais, J'ai cette boucle for, et ce fut 469 00:22:45,960 --> 00:22:47,710 où nous avons eu cet autre nouveau morceau de syntaxe. 470 00:22:47,710 --> 00:22:51,580 J'ai une boucle d'itération de zéro jusqu'à la longueur de l'art. 471 00:22:51,580 --> 00:22:56,140 Et puis ici, j'étais impression sur s support i, mais pourquoi n'ai-je utiliser% c tout 472 00:22:56,140 --> 00:23:00,770 un coup au lieu de% s même si s est une chaîne? 473 00:23:00,770 --> 00:23:02,110 C'est un personnage, non? 474 00:23:02,110 --> 00:23:06,560 S est une chaîne, mais s étrier quelque chose, s tranche i où i est nul 475 00:23:06,560 --> 00:23:10,380 ou un ou deux, c'est un individu caractère de la chaîne, et ainsi pour 476 00:23:10,380 --> 00:23:14,970 que, les besoins printf être informé que c'est en effet un caractère d'attendre. 477 00:23:14,970 --> 00:23:18,096 >> Et puis, rappelons-le, qu'est-ce que cette programme réellement faire? 478 00:23:18,096 --> 00:23:19,848 >> Imprimé il dans les colonnes. 479 00:23:19,848 --> 00:23:21,120 >> Oui, exactement. 480 00:23:21,120 --> 00:23:24,990 Il a juste imprimé le mot que je tape dans une colonne, d'un caractère par ligne. 481 00:23:24,990 --> 00:23:26,190 Voyons donc ce message. 482 00:23:26,190 --> 00:23:27,810 Donc, assurez-string. 483 00:23:27,810 --> 00:23:30,200 Compilé OK. . / String. 484 00:23:30,200 --> 00:23:35,560 Permettez-moi de taper dans H-E-L-L-O, saisir et en effet, je l'aurai, un par ligne. 485 00:23:35,560 --> 00:23:37,280 >> Alors permettez-moi de faire une optimisation ici. 486 00:23:37,280 --> 00:23:40,240 Si vous pensez cela, surtout si vous avez programmé avant, il ya 487 00:23:40,240 --> 00:23:43,340 sans doute une inefficacité dans la ligne 24. 488 00:23:43,340 --> 00:23:46,160 En d'autres termes, ce n'est pas nécessairement le meilleur design. 489 00:23:46,160 --> 00:23:50,200 Simple, au moins une fois que vous rappelez-vous ce str Leng est, mais il est 490 00:23:50,200 --> 00:23:52,640 faire quelque chose de stupide potentiellement. 491 00:23:52,640 --> 00:23:54,863 Qu'est-ce qui pourrait être? 492 00:23:54,863 --> 00:23:56,280 >> [Inaudible]. 493 00:23:56,280 --> 00:23:56,800 >> Exactement. 494 00:23:56,800 --> 00:24:00,340 C'est la vérification de la longueur de s à chaque fois, même si 495 00:24:00,340 --> 00:24:02,980 H-E-L-L-O va toujours être de cinq caractères. 496 00:24:02,980 --> 00:24:05,490 Chaque fois que dans cette boucle, les cinq ne change pas. 497 00:24:05,490 --> 00:24:08,750 Je pourrais être incrémenter i, mais ce est la longueur de l'art à chaque 498 00:24:08,750 --> 00:24:09,690 itération de cette boucle? 499 00:24:09,690 --> 00:24:15,810 Il est cinq heures, c'est cinq ans, c'est cinq ans, et mais je suis tout de même poser cette 500 00:24:15,810 --> 00:24:18,320 questionner encore et encore et encore. 501 00:24:18,320 --> 00:24:20,750 Maintenant, franchement, l'ordinateur est si sacrément rapide, personne ne va remarquer une 502 00:24:20,750 --> 00:24:23,780 différence dans ce cas, mais ces types des décisions de conception pauvres ne peuvent 503 00:24:23,780 --> 00:24:28,330 commencer à s'accumuler si le compilateur lui-même ne pas essayer de résoudre ce problème pour vous qui 504 00:24:28,330 --> 00:24:30,630 il serait généralement pas, à moins dans l'appareil. 505 00:24:30,630 --> 00:24:31,540 >> Donc, je vais le faire. 506 00:24:31,540 --> 00:24:34,580 Je vais ajouter une virgule après ma première variable, i. 507 00:24:34,580 --> 00:24:37,310 Je vais me donner une autre variables, en l'appelant n, juste en 508 00:24:37,310 --> 00:24:41,330 convention pour les chiffres, et puis je suis va affecter n La valeur de chaîne 509 00:24:41,330 --> 00:24:42,530 longueur de l'art. 510 00:24:42,530 --> 00:24:46,060 Et puis je vais changer mon état d'être quoi? 511 00:24:46,060 --> 00:24:51,960 Je vais changer mon état pour tout i est inférieur à n. 512 00:24:51,960 --> 00:24:55,700 >> Alors maintenant, combien de fois suis-je vérifier la longueur de s? 513 00:24:55,700 --> 00:25:00,110 Une fois, mais c'est OK pour vérifier i contre n, encore et encore, parce que maintenant ceux 514 00:25:00,110 --> 00:25:03,170 Les valeurs ne sont pas réellement en train de changer. 515 00:25:03,170 --> 00:25:06,020 Maintenant, pour l'instant, il suffit de savoir que chaque fois que vous appeler une fonction, il ya un peu de 516 00:25:06,020 --> 00:25:09,930 les frais généraux, ne suffit pas à vous décourager vraiment du jamais utiliser les fonctions, mais 517 00:25:09,930 --> 00:25:12,750 Certes, quand il ya une ligne de code comme ça - et les lignes obtiendront 518 00:25:12,750 --> 00:25:15,490 plus intéressant avant longtemps - où il ya une occasion de réfléchir, si je 519 00:25:15,490 --> 00:25:18,320 taper ce code, combien de fois faut-il exécuter? 520 00:25:18,320 --> 00:25:20,950 Vous allez commencer à voir au fil du temps le performances de vos programmes peuvent 521 00:25:20,950 --> 00:25:21,660 en effet changer. 522 00:25:21,660 --> 00:25:24,110 >> En fait, l'un des problèmes établit que nous avons fait dans les années passées implique 523 00:25:24,110 --> 00:25:27,600 la mise en œuvre, comme vous le rappelez peut-être de semaine zéro, un correcteur orthographique, mais un 524 00:25:27,600 --> 00:25:31,380 Correcteur orthographique qui est conçu pour soutenir un dictionnaire de 150.000, plus 525 00:25:31,380 --> 00:25:32,860 mots que nous vous donnons les gars. 526 00:25:32,860 --> 00:25:37,100 Vous n'avez pas à écrire du code qui charge ces mots dans la RAM, donc en 527 00:25:37,100 --> 00:25:40,700 boîtes, comme nous avons vu sur l'écran un instant Il ya, et puis aussi vite que vous 528 00:25:40,700 --> 00:25:43,740 pouvez, vous devez être en mesure de répondre à une question de la forme, c'est ce mot 529 00:25:43,740 --> 00:25:44,280 mal orthographié? 530 00:25:44,280 --> 00:25:45,420 Est-ce le mot mal orthographié? 531 00:25:45,420 --> 00:25:46,770 Est-ce le mot mal orthographié? 532 00:25:46,770 --> 00:25:49,525 >> Et dans quelque chose comme ce que nous avons fait dans les années passées est transformé en, 533 00:25:49,525 --> 00:25:53,500 bien que sur une base opt-in en option, un concours de toutes sortes, par laquelle le 534 00:25:53,500 --> 00:25:59,470 les élèves qui utilisent le moins de RAM et moins temps, moins de cycles CPU, finissent 535 00:25:59,470 --> 00:26:02,640 bouillonne au sommet d'une petite leader board ou le classement que nous mettons sur 536 00:26:02,640 --> 00:26:04,770 page d'accueil du cours comme nous l'avons fait dans les années passées. 537 00:26:04,770 --> 00:26:08,100 Encore une fois, totalement facultative, mais cette parle aux possibilités de conception 538 00:26:08,100 --> 00:26:11,250 qui sommes en avance lorsque nous commencerons construction au sommet de certains d'entre eux 539 00:26:11,250 --> 00:26:14,010 blocs de construction de base. 540 00:26:14,010 --> 00:26:16,780 >> Alors permettez-moi de revenir à ce schéma pour juste un moment et révéler un peu 541 00:26:16,780 --> 00:26:17,610 quelque chose de plus. 542 00:26:17,610 --> 00:26:21,400 Cet effet est une chaîne, et nous avons pris avantage de quelques bibliothèques, 543 00:26:21,400 --> 00:26:25,150 io.h norme qui a - 544 00:26:25,150 --> 00:26:26,110 >> Printf. 545 00:26:26,110 --> 00:26:27,860 >> Printf, entre autres choses. 546 00:26:27,860 --> 00:26:31,540 cs50.h, qui a obtenir int et obtenir chaîne et ainsi de suite, , qui 547 00:26:31,540 --> 00:26:32,570 eu str Long. 548 00:26:32,570 --> 00:26:34,800 Mais il s'avère qu'il ya encore un autre. 549 00:26:34,800 --> 00:26:38,540 Franchement, il ya des tas de tête fichiers qui déclarent fonctions 550 00:26:38,540 --> 00:26:43,320 pour les bibliothèques, mais ce n'est ctype.h en fait va être un peu 551 00:26:43,320 --> 00:26:46,900 avantageux parce que je vais à aller de l'avant et mettre en œuvre une 552 00:26:46,900 --> 00:26:48,120 autre programme ici. 553 00:26:48,120 --> 00:26:52,420 >> Permettez-moi d'aller de l'avant et d'ouvrir quelque chose J'ai écrit à l'avance appelé 554 00:26:52,420 --> 00:26:55,750 capitalize.c, et prenons Regardez comment cela fonctionne. 555 00:26:55,750 --> 00:27:00,340 Remarquez que j'utilise, dans cette version de celui-ci, trois fichiers sont familiers. 556 00:27:00,340 --> 00:27:04,110 Notez que dans la ligne 18, je suis obtenir une ligne de texte. 557 00:27:04,110 --> 00:27:07,660 Avis à la ligne 21, je suis affirmant que le code suivant va 558 00:27:07,660 --> 00:27:12,170 capitaliser s, quel que soit l'utilisateur a tapé , et comment je fais ça? 559 00:27:12,170 --> 00:27:13,300 Eh bien, je prends - 560 00:27:13,300 --> 00:27:14,750 leçon de la dernière fois - 561 00:27:14,750 --> 00:27:18,370 Je déclare i et n et itération sur les caractères de la chaîne. 562 00:27:18,370 --> 00:27:22,720 Et puis qu'est-ce que ce bloc de Code de la ligne 24 à 27 563 00:27:22,720 --> 00:27:24,550 faire en termes simples? 564 00:27:24,550 --> 00:27:27,766 565 00:27:27,766 --> 00:27:29,730 >> Lettre minuscule dos. 566 00:27:29,730 --> 00:27:30,430 >> Exactement. 567 00:27:30,430 --> 00:27:35,920 Si s i support - si le i-ème nature de l'art, qui est un particulier 568 00:27:35,920 --> 00:27:40,220 caractère dans la chaîne, est plus grande que ou égale à un et minuscules - 569 00:27:40,220 --> 00:27:42,670 rappeler que la double esperluette signifier et - 570 00:27:42,670 --> 00:27:46,810 et le même caractère, s i support, est inférieur ou égal à z en minuscules, 571 00:27:46,810 --> 00:27:50,600 cela signifie que c'est un A ou un B ou un C ou point, point, point, ou a z, qui signifie 572 00:27:50,600 --> 00:27:51,340 c'est minuscule. 573 00:27:51,340 --> 00:27:52,900 Qu'est-ce que je veux faire dans ce cas? 574 00:27:52,900 --> 00:27:55,010 Eh bien, je peux le faire un peu énigmatique, mais 575 00:27:55,010 --> 00:27:56,160 nous allons taquiner cet intervalle. 576 00:27:56,160 --> 00:28:00,210 >> Je vais appeler printf, imprime% c parce que je veux reproduire cette 577 00:28:00,210 --> 00:28:01,580 personnage à l'écran. 578 00:28:01,580 --> 00:28:06,650 Je puis va prendre de support i, l' i-ième caractère dans s, et puis pourquoi 579 00:28:06,650 --> 00:28:12,330 je fais ce petit truc ici, Un minuscule de capital moins? 580 00:28:12,330 --> 00:28:16,352 Qu'est ce que cela va donner moi, d'une manière générale? 581 00:28:16,352 --> 00:28:18,600 >> [Inaudible]. 582 00:28:18,600 --> 00:28:19,390 >> Exactement. 583 00:28:19,390 --> 00:28:20,860 Je ne me souviens pas vraiment - 584 00:28:20,860 --> 00:28:24,390 il était de 65 pour grand A. Je n'aime pas vraiment rappelez-vous quelle a minuscule est, 585 00:28:24,390 --> 00:28:25,540 mais peu importe. 586 00:28:25,540 --> 00:28:26,580 L'ordinateur sait. 587 00:28:26,580 --> 00:28:30,380 Donc, en disant minuscules un moins A majuscule, ça fait bizarre d'être 588 00:28:30,380 --> 00:28:33,530 soustrayant un chevalier d'un autre, mais quels sont les caractères sous le capot? 589 00:28:33,530 --> 00:28:34,520 Ils sont juste des chiffres. 590 00:28:34,520 --> 00:28:36,980 Donc, quelles que soient ces chiffres, laisser l'ordinateur s'en souviennent 591 00:28:36,980 --> 00:28:38,240 plutôt que de me l'être humain. 592 00:28:38,240 --> 00:28:41,710 >> Alors minuscules un capital moins A est va me donner une différence. 593 00:28:41,710 --> 00:28:45,370 Il arrive à 32, et qui serait le cas pour les minuscules b et B majuscule 594 00:28:45,370 --> 00:28:45,930 et ainsi de suite. 595 00:28:45,930 --> 00:28:47,710 Il reste constante, heureusement. 596 00:28:47,710 --> 00:28:51,930 Donc, je suis essentiellement dire, prendre la lettre minuscule, il faut soustraire large que 597 00:28:51,930 --> 00:28:55,340 la différence standard, et que efficacement les changements de support de i à partir de 598 00:28:55,340 --> 00:28:59,400 minuscules, bien sûr, majuscule, sans que j'aie vraiment à penser 599 00:28:59,400 --> 00:29:03,040 sur ou rappelez-vous, ce sont ceux numéros, nous avons parlé lors de la huitième 600 00:29:03,040 --> 00:29:04,800 bénévoles sont venus sur scène? 601 00:29:04,800 --> 00:29:08,800 Maintenant, quant à lui, dans l'autre, si ce n'est pas une lettre minuscule telle que déterminée 602 00:29:08,800 --> 00:29:10,400 par la ligne 24, juste imprimer. 603 00:29:10,400 --> 00:29:12,590 Je veux seulement toucher l' caractères qui étaient 604 00:29:12,590 --> 00:29:14,410 réellement l'origine minuscules. 605 00:29:14,410 --> 00:29:15,150 >> Voyons donc cela. 606 00:29:15,150 --> 00:29:17,400 Faire capitaliser. 607 00:29:17,400 --> 00:29:18,470 Compilé, OK. 608 00:29:18,470 --> 00:29:19,730 . / Capitaliser. 609 00:29:19,730 --> 00:29:23,530 Et permettez-moi de taper dans H-E-L-L-O en minuscules, Entrée. 610 00:29:23,530 --> 00:29:26,370 Et remarquez qu'il est converti en majuscules. 611 00:29:26,370 --> 00:29:27,940 Permettez-moi de faire à nouveau avec un autre mot. 612 00:29:27,940 --> 00:29:32,720 Que diriez-D-A-V-I-D avec le premier D capitalisés à titre de nom est généralement? 613 00:29:32,720 --> 00:29:33,560 Entrée. 614 00:29:33,560 --> 00:29:34,870 Notez qu'il est toujours correct. 615 00:29:34,870 --> 00:29:40,250 Il a juste sorti ce premier D inchangé via cette autre construction. 616 00:29:40,250 --> 00:29:42,170 >> Donc, gardez à l'esprit, alors, un certain nombre de choses ici. 617 00:29:42,170 --> 00:29:45,060 Premièrement, si jamais vous voulez vérifier deux conditions à la fois, vous pouvez et les 618 00:29:45,060 --> 00:29:46,500 ensemble comme nous l'avions prévu. 619 00:29:46,500 --> 00:29:49,900 Vous pouvez comparer les caractères de cette façon et traiter efficacement les caractères que 620 00:29:49,900 --> 00:29:53,050 chiffres, mais franchement, c'est tellement fichu cryptique Je ne vais jamais à retenir 621 00:29:53,050 --> 00:29:56,510 comment arriver à ce à partir de zéro sans raisonnement pour tout 622 00:29:56,510 --> 00:29:57,140 un peu de temps. 623 00:29:57,140 --> 00:30:00,590 >> N'aurait-il pas été bien si quelqu'un là-bas a écrit une fonction appelée est 624 00:30:00,590 --> 00:30:05,390 inférieur qui pourrait répondre pour moi vrai ou faux, ce personnage est en minuscules? 625 00:30:05,390 --> 00:30:09,350 Bien heureusement, celui qui a écrit ctype.h fait exactement cela. 626 00:30:09,350 --> 00:30:15,540 Laisse-moi aller ici et ajouter CType pour c types, et maintenant, laissez-moi descendre ici et 627 00:30:15,540 --> 00:30:18,820 réécrire cette ligne comme suit. 628 00:30:18,820 --> 00:30:27,510 >> Donc, si elle est appelée est inférieure, je prétends, s support i, alors je vais supprimer 629 00:30:27,510 --> 00:30:29,400 ces deux lignes au total. 630 00:30:29,400 --> 00:30:32,570 Alors maintenant, quelqu'un d'autre, j'espère, a écrit une fonction appelée est plus faible, et il 631 00:30:32,570 --> 00:30:36,250 Il s'avère que qu'ils ont fait et ils ont déclaré à l'intérieur de ctype.h. 632 00:30:36,250 --> 00:30:39,480 Et maintenant, je vais laisser la ligne 27 seul, je vais laisser la ligne 31 633 00:30:39,480 --> 00:30:41,890 seul, mais remarque combien j'ai resserré mon code. 634 00:30:41,890 --> 00:30:42,690 Il est maintenant plus propre. 635 00:30:42,690 --> 00:30:47,250 Il est moins difficile de regarder à travers parce que maintenant la fonction est d'ailleurs 636 00:30:47,250 --> 00:30:50,080 si merveilleusement nommé juste fait ce qu'il dit. 637 00:30:50,080 --> 00:30:51,520 >> Alors maintenant, je vais enregistrer cette. 638 00:30:51,520 --> 00:30:52,930 Je vais effectuer un zoom arrière. 639 00:30:52,930 --> 00:30:56,650 Et tout comme dans Scratch vous pourriez avoir Booléens, les valeurs booléennes vrai ou 640 00:30:56,650 --> 00:31:01,530 faux, c'est exactement ce qui est abaisser efficacement le rendement. 641 00:31:01,530 --> 00:31:02,960 Permettez-moi de recompilation. 642 00:31:02,960 --> 00:31:04,500 Permettez-moi de re-run. 643 00:31:04,500 --> 00:31:07,350 Et maintenant, nous allons essayer de nouveau, H-E-L-L-O, Entrée. 644 00:31:07,350 --> 00:31:07,970 C'est très bien. 645 00:31:07,970 --> 00:31:10,150 Et essayez à nouveau, assurez-vous que ne pas visser quelque chose. 646 00:31:10,150 --> 00:31:11,670 Qui est capitalisée ainsi. 647 00:31:11,670 --> 00:31:14,190 >> Mais ce n'est pas suffisant parce que le autre chose que je ne vais jamais 648 00:31:14,190 --> 00:31:19,090 rappeler à moins que je travaille à travers elle vraiment soigneusement sur, par exemple, le papier est 649 00:31:19,090 --> 00:31:19,920 cette fichue ligne. 650 00:31:19,920 --> 00:31:23,450 Ce ne serait pas bien s'il y avait une fonction appelée à supérieure? 651 00:31:23,450 --> 00:31:26,930 Eh bien, il s'avère qu'il est en ctype.h ainsi. 652 00:31:26,930 --> 00:31:30,150 Je vais aller de l'avant et tapez - 653 00:31:30,150 --> 00:31:31,340 permettez-moi de mettre cette ligne arrière. 654 00:31:31,340 --> 00:31:36,430 Au lieu de cela ici, laissez-moi aller de l'avant et dire substituer à l'% c l' 655 00:31:36,430 --> 00:31:42,110 résultat de l'appel à cette fonction supérieure sur le i-ième caractère de l'art. 656 00:31:42,110 --> 00:31:45,430 Et maintenant, il se fait remarquer un peu équilibré. 657 00:31:45,430 --> 00:31:48,870 Je dois garder une trace de combien de parenthèses j'ai ouvert et fermé. 658 00:31:48,870 --> 00:31:50,050 >> Alors maintenant c'est encore plus propre. 659 00:31:50,050 --> 00:31:53,460 Maintenant ce programme est de mieux en mieux conçu sans doute parce que c'est 660 00:31:53,460 --> 00:31:56,450 beaucoup, beaucoup plus lisible, mais il n'est pas laissé, c'est exact. 661 00:31:56,450 --> 00:31:57,600 Faire capitaliser. 662 00:31:57,600 --> 00:31:58,930 . / Capitaliser. 663 00:31:58,930 --> 00:32:03,220 H-E-L-L-O. Lançons à nouveau, D-A-V-I-D. OK, donc nous sommes toujours en 664 00:32:03,220 --> 00:32:04,250 forme assez bonne. 665 00:32:04,250 --> 00:32:06,030 >> Mais maintenant supérieure. 666 00:32:06,030 --> 00:32:09,720 Je propose qu'il y ait une plus raffinement que nous pourrions faire, ce serait 667 00:32:09,720 --> 00:32:12,820 vraiment sympa, qui pourrait vraiment serrer jusqu'à ce code et vraiment nous donner cinq 668 00:32:12,820 --> 00:32:15,150 sur cinq pour la conception, par exemple. 669 00:32:15,150 --> 00:32:16,510 Ce qui serait bien pour vous débarrasser? 670 00:32:16,510 --> 00:32:20,770 Eh bien, regardez comment sacrément longtemps ce bloc de code est juste pour faire quelque chose de simple. 671 00:32:20,770 --> 00:32:23,850 >> Maintenant, en aparté, que vous pourriez avoir vu dans la section superbe cette dernière 672 00:32:23,850 --> 00:32:27,570 week-end, vous n'avez pas strictement besoin de l' accolades quand vous n'avez qu'un seul 673 00:32:27,570 --> 00:32:32,180 ligne de code, même si nous avons proposé les garder pour que cela fasse une grande 674 00:32:32,180 --> 00:32:36,190 plus clairement, comme en forme de U de Scratch blocs, ce qui est à l'intérieur de la branche. 675 00:32:36,190 --> 00:32:40,170 Mais ne serait-il pas agréable si à supérieure, lorsqu'il est administré son entrée, transformé en 676 00:32:40,170 --> 00:32:44,730 majuscules si elle n'est pas, et ce serait être merveilleux dans le cas contraire, si 677 00:32:44,730 --> 00:32:47,210 il est déjà en majuscule? 678 00:32:47,210 --> 00:32:49,620 Il suffit de passer à travers et le laisser seul. 679 00:32:49,620 --> 00:32:50,660 >> Alors peut-être qu'il ne le fait. 680 00:32:50,660 --> 00:32:52,990 Je pourrais essayer et j'espère juste qu'il fait, mais laissez-moi 681 00:32:52,990 --> 00:32:54,450 introduire une autre chose. 682 00:32:54,450 --> 00:32:57,440 Au lieu d'utiliser ce terminal intégré fenêtre vers le bas ici, rappelons que 683 00:32:57,440 --> 00:33:01,130 Cette icône carré noir vous donne un fenêtre de terminal plus grand que je ne peux plein 684 00:33:01,130 --> 00:33:02,260 écran si je veux? 685 00:33:02,260 --> 00:33:05,820 Ainsi, il s'avère qu'ils sont en quelque sorte bizarrement Nommé, mais il ya ces choses appelées 686 00:33:05,820 --> 00:33:10,970 pages de manuel, pages de manuel, l'homme pour faire court, et je peux y accéder en 687 00:33:10,970 --> 00:33:14,515 homme frappe - 688 00:33:14,515 --> 00:33:15,570 ce que je veux Type? 689 00:33:15,570 --> 00:33:17,830 Man to supérieure. 690 00:33:17,830 --> 00:33:21,090 >> Et maintenant constater s'il existe une fonctionner à l'intérieur de l'ordinateur, en 691 00:33:21,090 --> 00:33:23,970 ce cas, l 'appareil, ce qui est juste le système d'exploitation Linux, ça va 692 00:33:23,970 --> 00:33:27,920 de me donner un ensemble quelque peu énigmatique de sortie, mais vous trouverez plus de temps que 693 00:33:27,920 --> 00:33:31,720 il est formaté toujours à peu près la même si vous commencez à vous y habituer. 694 00:33:31,720 --> 00:33:35,130 Avis au sommet de haut, et est apparemment la même documentation 695 00:33:35,130 --> 00:33:35,680 pour faire baisser. 696 00:33:35,680 --> 00:33:38,740 Celui qui a écrit cela coupait quelque coins et mettre tout cela sur une page. 697 00:33:38,740 --> 00:33:40,720 Le but de ces choses dans la vie est de convertir un 698 00:33:40,720 --> 00:33:42,780 lettre majuscule ou minuscule. 699 00:33:42,780 --> 00:33:46,290 >> Notez que sous Synopsis, la page de manuel m'apprend quel fichier que j'ai 700 00:33:46,290 --> 00:33:48,130 d'inclure d'utiliser cette chose. 701 00:33:48,130 --> 00:33:51,320 Il me donne les signatures de ces fonctions, les deux d'entre eux, même 702 00:33:51,320 --> 00:33:53,510 si nous en ce moment seulement préoccuper un. 703 00:33:53,510 --> 00:33:54,730 Voici maintenant une description. 704 00:33:54,730 --> 00:33:58,800 Pour supérieure convertit la lettre c en majuscule si possible. 705 00:33:58,800 --> 00:34:02,280 >> Toujours pas que instructif, mais laissez-moi maintenant regarder sous la valeur de retour, la chose 706 00:34:02,280 --> 00:34:03,520 ce n'est restitué. 707 00:34:03,520 --> 00:34:08,600 Ainsi, la valeur retournée est celle de l' lettre ou c converti si l' 708 00:34:08,600 --> 00:34:09,870 conversion n'était pas possible. 709 00:34:09,870 --> 00:34:11,202 Qu'est-ce que c? 710 00:34:11,202 --> 00:34:12,560 >> Le caractère original. 711 00:34:12,560 --> 00:34:15,370 >> Le caractère original et nous savons que par, encore une fois, aller jusqu'à l' 712 00:34:15,370 --> 00:34:19,179 synopsis, et celui qui a écrit cette fonction a tout simplement décidé que l'entrée 713 00:34:19,179 --> 00:34:22,909 à la partie supérieure et à faible est juste va être arbitrairement appelé c. 714 00:34:22,909 --> 00:34:24,909 Ils auraient appelé plus rien qu'ils veulent, mais ils l'ont gardé 715 00:34:24,909 --> 00:34:26,270 simple que c. 716 00:34:26,270 --> 00:34:27,880 J'ai donc consulté la page de manuel. 717 00:34:27,880 --> 00:34:31,870 Cette phrase me rassure que si ce n'est pas une lettre minuscule, il est 718 00:34:31,870 --> 00:34:34,969 va me donner juste de retour c, ce qui est parfaite, ce qui veut dire que je peux me débarrasser de 719 00:34:34,969 --> 00:34:36,199 mon état d'autre. 720 00:34:36,199 --> 00:34:39,679 >> Alors permettez-moi de revenir à GEdit, et maintenant laissez-moi faire ça. 721 00:34:39,679 --> 00:34:41,960 Je vais copier mon instruction printf. 722 00:34:41,960 --> 00:34:45,969 Je vais aller de l'avant et à l'intérieur même le pour l'impression de boucle dehors, et obtenir 723 00:34:45,969 --> 00:34:48,760 débarrasser de maintenant toute cette construction if. 724 00:34:48,760 --> 00:34:51,860 N'était-ce pas une mauvaise idée, et il était très beaucoup correctes et cohérentes avec 725 00:34:51,860 --> 00:34:54,100 tout ce que nous avons prêché, mais tout simplement pas nécessaire. 726 00:34:54,100 --> 00:34:57,070 Dès que vous vous rendez compte quelque bibliothèque fonction existe que quelqu'un d'autre 727 00:34:57,070 --> 00:35:01,340 écrit, ou peut-être que vous avez écrit ailleurs dans le fichier, vous pouvez l'utiliser et vraiment 728 00:35:01,340 --> 00:35:02,690 commencer à resserrer le code. 729 00:35:02,690 --> 00:35:06,080 >> Et quand je dis les choses comme bon style, le fait que la personne appelée 730 00:35:06,080 --> 00:35:11,490 fonctionner à haute ou précédemment est inférieur est merveilleusement utile car 731 00:35:11,490 --> 00:35:12,900 ils sont très descriptive. 732 00:35:12,900 --> 00:35:16,120 Vous ne voudriez pas à appeler vos fonctions x et y et z, qui possède 733 00:35:16,120 --> 00:35:19,620 beaucoup, beaucoup moins de sens. 734 00:35:19,620 --> 00:35:25,160 Vous avez des questions sur cette série des améliorations? 735 00:35:25,160 --> 00:35:28,010 >> Donc, il suffit de dire l'un des plats à emporter est comme votre propre problème 736 00:35:28,010 --> 00:35:30,960 set - peut-être problème posé, mais certainement P a placé deux et au-delà, même 737 00:35:30,960 --> 00:35:34,380 quand ils sont correct ne signifie pas nécessairement dire qu'ils sont parfaits juste 738 00:35:34,380 --> 00:35:36,155 ou encore particulièrement bien conçu. 739 00:35:36,155 --> 00:35:38,420 C'est l'autre axe commencer à réfléchir. 740 00:35:38,420 --> 00:35:41,730 Donc, ce fut un intérieur de série de votre la mémoire de l'ordinateur, mais si vous avez un 741 00:35:41,730 --> 00:35:46,180 tas de personnages comme H-E-L-L-O à l'intérieur de RAM, et supposons 742 00:35:46,180 --> 00:35:51,330 que vous appelez dans votre programme obtenir chaîne à plusieurs reprises de sorte que vous 743 00:35:51,330 --> 00:35:54,200 appelez obtenir chaîne une fois, puis vous appeler obtenir à nouveau chaîne. 744 00:35:54,200 --> 00:35:55,880 Eh bien, ce qui va se produire au fil du temps? 745 00:35:55,880 --> 00:35:59,170 >> En d'autres termes, si vous avez une ligne de code, mais hors contexte, comme 746 00:35:59,170 --> 00:36:02,120 string s obtient - 747 00:36:02,120 --> 00:36:02,960 nous allons le faire. 748 00:36:02,960 --> 00:36:05,270 String nom équivaut à obtenir chaîne. 749 00:36:05,270 --> 00:36:08,590 Donc, supposons que la ligne de code est destiné pour demander à l'utilisateur son nom. 750 00:36:08,590 --> 00:36:14,580 Cette ligne de code suivante est destinée à poser l'utilisateur pour son école, et 751 00:36:14,580 --> 00:36:15,920 cette ligne suivante, et ainsi de suite. 752 00:36:15,920 --> 00:36:18,150 Supposons que nous continuons à demander l'utilisateur à un autre, et 753 00:36:18,150 --> 00:36:19,750 un autre et une autre chaîne. 754 00:36:19,750 --> 00:36:22,390 Ils vont rester dans la mémoire dans le même temps. 755 00:36:22,390 --> 00:36:24,280 On ne va pas écraser les autre. 756 00:36:24,280 --> 00:36:26,420 L'école n'est pas écraser l'autre. 757 00:36:26,420 --> 00:36:28,520 Mais où vont-ils tous se retrouver dans la mémoire? 758 00:36:28,520 --> 00:36:32,030 >> Eh bien, si nous commençons à dessiner sur l'écran, que nous pouvons utiliser cette chose 759 00:36:32,030 --> 00:36:35,800 ici comme un tableau, si ce noir rectangle représente mon ordinateur de 760 00:36:35,800 --> 00:36:39,800 mémoire, je vais commencer arbitrairement divisant en petits carrés, 761 00:36:39,800 --> 00:36:42,120 dont chacun représente un octet de la mémoire. 762 00:36:42,120 --> 00:36:46,560 Franchement, si vous avez un gigaoctet de RAM ces jours-ci, vous disposez d'un milliard d'octets 763 00:36:46,560 --> 00:36:49,540 de mémoire de votre ordinateur, de sorte un milliard de ces carrés. 764 00:36:49,540 --> 00:36:52,110 Donc, il suffit de dire, ce n'est pas vraiment à l'échelle. 765 00:36:52,110 --> 00:36:58,250 >> Mais nous pourrions continuer d'attirer tous ces clairement pas à l'échelle carrés, et ce 766 00:36:58,250 --> 00:37:01,260 représente collectivement la mémoire de mon ordinateur. 767 00:37:01,260 --> 00:37:03,136 Maintenant, nous allons juste faire point, point, point. 768 00:37:03,136 --> 00:37:06,260 Donc, en d'autres termes, quand je maintenant inviter l' utilisateur avec de la ficelle get me donner un 769 00:37:06,260 --> 00:37:07,350 chaîne, ce qui se passe? 770 00:37:07,350 --> 00:37:14,270 Si l'utilisateur tape dans "bonjour", qui se termine en H-E-L-L-O. Mais supposons que le 771 00:37:14,270 --> 00:37:15,720 l'utilisateur tape ensuite en - 772 00:37:15,720 --> 00:37:17,250 En fait, je n'aurais pas dû faire bonjour parce que nous demandons 773 00:37:17,250 --> 00:37:18,330 pour leurs noms. 774 00:37:18,330 --> 00:37:20,580 Donc, revenons, si je peux le faire. 775 00:37:20,580 --> 00:37:26,130 >> Donc, si je tape dans D-A-V-I-D pour mon nom, mais rappeler que la deuxième ligne de 776 00:37:26,130 --> 00:37:29,220 code a été à nouveau obtenir chaîne pour obtenir leur école. 777 00:37:29,220 --> 00:37:32,090 Où est ce mot que l'utilisateur types à aller à la prochaine étape? 778 00:37:32,090 --> 00:37:38,290 Eh bien, peut-être que ça va aller dans H-A-R-V-A-R-D. Donc, même si je n'ai 779 00:37:38,290 --> 00:37:41,560 tiré comme deux rangées, ce n'est que tout un tas d'octets dans votre 780 00:37:41,560 --> 00:37:42,710 la mémoire vive de l'ordinateur. 781 00:37:42,710 --> 00:37:46,560 Il ya un problème maintenant parce que maintenant, si je suis utilisant RAM dans ce très raisonnable 782 00:37:46,560 --> 00:37:49,910 mais sorte de manière naïve, que pouvez-vous apparemment pas la distinction? 783 00:37:49,910 --> 00:37:52,640 784 00:37:52,640 --> 00:37:54,680 Où l'on commence et où on finit, non? 785 00:37:54,680 --> 00:37:55,860 Elles sont un genre de brouiller ensemble. 786 00:37:55,860 --> 00:37:57,920 >> Ainsi, il s'avère l'ordinateur ne pas le faire. 787 00:37:57,920 --> 00:38:04,720 Permettez-moi de réellement revenir en arrière dans le temps une quelques personnages, et au lieu de Harvard 788 00:38:04,720 --> 00:38:09,570 aller immédiatement après le nom de l'utilisateur, l'utilisateur obtient en réalité, derrière 789 00:38:09,570 --> 00:38:12,000 les coulisses, un caractère spécial inséré par l' 790 00:38:12,000 --> 00:38:13,885 ordinateur pour lui ou elle. 791 00:38:13,885 --> 00:38:19,470 / 0, autrement connu comme le caractère nul fâcheusement appelé N-U-L, pas 792 00:38:19,470 --> 00:38:22,190 N-U-L-L, mais que vous écrivez comme / 0. 793 00:38:22,190 --> 00:38:27,130 C'est juste que tous les bits zéro est un marqueur dans entre le premier mot qui de l'utilisateur 794 00:38:27,130 --> 00:38:28,290 dactylographié et le second. 795 00:38:28,290 --> 00:38:33,020 >> Alors Harvard réellement se termine maintenant que cette séquence de caractères 796 00:38:33,020 --> 00:38:36,110 et une plus / 0. 797 00:38:36,110 --> 00:38:41,690 Donc, en d'autres termes, en ayant ces valeurs sentinelles, huit zéro contiguë 798 00:38:41,690 --> 00:38:45,220 morceaux, vous pouvez maintenant commencer à distinguer un caractère d'un autre. 799 00:38:45,220 --> 00:38:49,720 Donc tout ce temps ce qui a été «bonjour» est en fait "bonjour" avec un / 0, et 800 00:38:49,720 --> 00:38:53,580 En attendant, il pourrait très bien être un peu plus de RAM 801 00:38:53,580 --> 00:38:56,400 à l'intérieur de l'ordinateur. 802 00:38:56,400 --> 00:38:57,810 >> Permettez-moi de faire autre chose maintenant. 803 00:38:57,810 --> 00:39:01,800 Il s'avère que toutes ces places nous avons dessin, ils sont, oui, 804 00:39:01,800 --> 00:39:06,140 cordes, mais plus généralement, ces choses sont des tableaux. 805 00:39:06,140 --> 00:39:10,590 Un tableau est juste un morceau de mémoire c'est dos à dos à dos à dos, 806 00:39:10,590 --> 00:39:15,130 et vous utilisez généralement un tableau par de cette notation entre crochets. 807 00:39:15,130 --> 00:39:18,210 Nous allons donc voir ces un peu au fil du temps, mais je vais aller de l'avant et 808 00:39:18,210 --> 00:39:21,160 ouvrir, appelons-les âges. 809 00:39:21,160 --> 00:39:23,920 Et remarquons que nous pouvons faire avec ces mêmes trucs, un peu 810 00:39:23,920 --> 00:39:25,750 peu plus de la syntaxe ici. 811 00:39:25,750 --> 00:39:29,270 >> Ainsi, dans la ligne 17 de ce programme - en fait, je me lance le premier programme 812 00:39:29,270 --> 00:39:30,770 afin que nous puissions voir ce que cette chose fait. 813 00:39:30,770 --> 00:39:33,530 Permettez-moi j'appelle faire âges compiler ce programme. 814 00:39:33,530 --> 00:39:34,950 . / Âges. 815 00:39:34,950 --> 00:39:36,480 Combien de personnes sont dans la salle? 816 00:39:36,480 --> 00:39:38,020 Appelez-trois. 817 00:39:38,020 --> 00:39:39,575 L'âge de la première personne? 818 00:39:39,575 --> 00:39:42,710 18, 19, et 20. 819 00:39:42,710 --> 00:39:46,770 Et maintenant, un peu ridicule, je viens ont fait un programme qui vieillit ceux 820 00:39:46,770 --> 00:39:47,740 trois personnes. 821 00:39:47,740 --> 00:39:50,390 >> Il ya donc clairement une opportunité pour un peu d'arithmétique amusante ici. 822 00:39:50,390 --> 00:39:51,560 Heureusement, les calculs sont corrects. 823 00:39:51,560 --> 00:39:54,720 18 sont allés à 19, 19 est allé à 20, et ainsi de suite. 824 00:39:54,720 --> 00:39:58,510 Mais ce qui est vraiment destiné à être illustrative voici comment nous allons stocker 825 00:39:58,510 --> 00:40:00,190 Les âges de ces trois personnes. 826 00:40:00,190 --> 00:40:02,370 Permettez-moi de zoom en ce qui passe ici. 827 00:40:02,370 --> 00:40:06,240 >> Alors d'abord, ces quelques premières lignes doivent être être obtenir assez familier. 828 00:40:06,240 --> 00:40:08,770 Je suis juste inviter l'utilisateur à l' nombre de personnes dans la salle. 829 00:40:08,770 --> 00:40:11,490 Ensuite, j'utilise obtenir int et faire tout pour le faire encore et encore et encore. 830 00:40:11,490 --> 00:40:15,780 Nous avons vu ce modèle avant, mais la ligne 27 est nouveau et fait assez 831 00:40:15,780 --> 00:40:18,160 utile, et deviendra de plus en plus utile. 832 00:40:18,160 --> 00:40:21,620 Notez que ce qui est différent de la ligne 27 c'est que je me présente à déclarer une 833 00:40:21,620 --> 00:40:23,960 int appelés les âges, mais attendez. 834 00:40:23,960 --> 00:40:27,140 Ce n'est pas seulement int âges. 835 00:40:27,140 --> 00:40:30,130 Il ya ces crochets, à l'intérieur duquel est n. 836 00:40:30,130 --> 00:40:35,150 >> Ainsi, le support n, dans ce contexte, ne à l'intérieur d'une instruction printf ici, mais 837 00:40:35,150 --> 00:40:44,370 dans cette seule ligne 27, cette ligne est dire, me n ints donner, chacun d'entre eux 838 00:40:44,370 --> 00:40:46,080 est de type int. 839 00:40:46,080 --> 00:40:49,870 Il s'agit donc d'un seau, pour ainsi dire, de, Dans ce cas, trois entiers revenir à 840 00:40:49,870 --> 00:40:52,770 dos à dos pour que je efficacement avoir trois variables. 841 00:40:52,770 --> 00:40:54,890 L'alternative, pour être clair, ne serait-ce. 842 00:40:54,890 --> 00:40:57,400 >> Si je voulais de la première étudiante âge, je pourrais le faire. 843 00:40:57,400 --> 00:40:59,520 Si je voulais de la deuxième étudiant âge, je pourrais le faire. 844 00:40:59,520 --> 00:41:01,860 Si je voulais de la troisième étudiant âge, je pourrais le faire. 845 00:41:01,860 --> 00:41:04,320 Et Dieu ne plaise, nous avons besoin de tout le monde âge dans cette salle - 846 00:41:04,320 --> 00:41:07,670 Je veux dire, c'est un diable de beaucoup de copie, coller encore et encore et encore. 847 00:41:07,670 --> 00:41:10,870 Et en plus une fois que je compile ce programme, si un autre élève se promène dans plus de rupture 848 00:41:10,870 --> 00:41:14,200 de cette porte, maintenant mon numéro de variables est incorrect. 849 00:41:14,200 --> 00:41:17,450 >> Alors qu'est-ce qui est bien sur un tableau est aussi Dès que vous commencez à vous sentir 850 00:41:17,450 --> 00:41:20,190 copier-coller, les chances sont que c'est pas la meilleure approche. 851 00:41:20,190 --> 00:41:22,240 Un tableau est dynamique potentiellement. 852 00:41:22,240 --> 00:41:24,610 Je ne sais pas à l'avance combien de personnes vont être dans la chambre, 853 00:41:24,610 --> 00:41:28,670 mais je sais que je dois n d'entre eux, et je vais n comprendre le moment venu. 854 00:41:28,670 --> 00:41:35,500 Cette ligne de code signifie maintenant, donnez-moi une morceau de mémoire qui ressemble à ceci 855 00:41:35,500 --> 00:41:40,380 où le nombre de cases sur l'écran est entièrement dépendant de n que 856 00:41:40,380 --> 00:41:42,010 l'utilisateur a tapé po 857 00:41:42,010 --> 00:41:44,850 >> Alors maintenant, le reste de ce programme est en fait assez similaire à ce que nous 858 00:41:44,850 --> 00:41:46,860 juste fait avec des caractères. 859 00:41:46,860 --> 00:41:49,970 Remarquez que je n'ai une boucle for à partir de la ligne 30. 860 00:41:49,970 --> 00:41:54,920 Donc, juste après je reçois le tableau, je itérer de y est égal à zéro sur un maximum de n. 861 00:41:54,920 --> 00:41:58,890 J'ai juste cette instructive printf message que vous venez dire, donnez-moi l'âge 862 00:41:58,890 --> 00:42:03,690 de personne #% i, alors numéro un, numéro deux, numéro trois. 863 00:42:03,690 --> 00:42:04,730 Et pourquoi ai-je fait cela? 864 00:42:04,730 --> 00:42:08,870 Franchement, les humains préfèrent compter de un sur place tandis que les informaticiens, 865 00:42:08,870 --> 00:42:09,620 zéro à la place. 866 00:42:09,620 --> 00:42:11,700 les informaticiens ne vont pas utiliser ce genre de programme, donc nous sommes 867 00:42:11,700 --> 00:42:13,990 va juste commencer à compter à un comme des gens normaux. 868 00:42:13,990 --> 00:42:17,630 >> Et maintenant, dans la ligne 33, notez la légère autre morceau de syntaxe. 869 00:42:17,630 --> 00:42:23,710 Le i-ième âge en ce que variable de type éventail va obtenir un int. 870 00:42:23,710 --> 00:42:25,770 Et maintenant, enfin, il s'agit juste d' arithmétique ici. 871 00:42:25,770 --> 00:42:29,200 J'ai décidé dans une boucle séparée la revendication un certain temps passe, et maintenant dans cette 872 00:42:29,200 --> 00:42:31,400 boucle séparée, ces lignes exécuter. 873 00:42:31,400 --> 00:42:35,810 >> Un an à partir de maintenant, personne je serai i ans, mais remarquez que ce n'est pas le 874 00:42:35,810 --> 00:42:36,500 variable i. 875 00:42:36,500 --> 00:42:38,390 C'est maintenant% i pour int. 876 00:42:38,390 --> 00:42:43,210 Et remarquez que le premier espace réservé, je brancher i + 1, donc nous comptons comme un 877 00:42:43,210 --> 00:42:44,250 personne normale. 878 00:42:44,250 --> 00:42:49,190 Et puis, pour la valeur de leur âge, pour i ans, je prends les âges support 879 00:42:49,190 --> 00:42:52,980 i - et pourquoi je fais plus un ici? 880 00:42:52,980 --> 00:42:53,760 Ils ont juste âgés. 881 00:42:53,760 --> 00:42:55,030 C'est mon choix stupide de programmes. 882 00:42:55,030 --> 00:42:56,810 Ils ont juste l'âge d'un an. 883 00:42:56,810 --> 00:42:59,770 Je pourrais taper dans n'importe quel nombre que Je veux vraiment là. 884 00:42:59,770 --> 00:43:02,430 >> Alors, quel est réellement l'ensemble des la pertinence ici? 885 00:43:02,430 --> 00:43:07,610 Eh bien, permettez-moi de réellement revenir en arrière ici et peindre une image 886 00:43:07,610 --> 00:43:10,830 de ce qui nous attend. 887 00:43:10,830 --> 00:43:15,720 Ce que nous allons faire avec notre prochain Problème Set Two est barboter dans l' 888 00:43:15,720 --> 00:43:17,070 monde de la cryptographie. 889 00:43:17,070 --> 00:43:22,500 Il s'agit donc d'une chaîne de caractères, de sorte qu'un séquence de plusieurs caractères, et ce 890 00:43:22,500 --> 00:43:23,750 cela nous dit? 891 00:43:23,750 --> 00:43:28,530 892 00:43:28,530 --> 00:43:30,600 Ce n'est pas dans la version en ligne des diapositives. 893 00:43:30,600 --> 00:43:35,880 >> Donc, je prétends que cela équivaut à cela, un annonce stupide de nombreuses années 894 00:43:35,880 --> 00:43:39,950 il ya qui pourraient effectivement se rappeler un de ses origines. 895 00:43:39,950 --> 00:43:42,740 Il s'agit donc d'un exemple de cryptage ou la cryptographie. 896 00:43:42,740 --> 00:43:46,150 Il s'avère que si vous voulez effectivement envoyer des informations ou partager 897 00:43:46,150 --> 00:43:49,310 informations avec quelqu'un en toute sécurité, comme un message comme celui-ci, vous pouvez 898 00:43:49,310 --> 00:43:50,500 brouiller les lettres. 899 00:43:50,500 --> 00:43:53,170 Mais généralement, les mots sont pas brouillés au hasard. 900 00:43:53,170 --> 00:43:56,365 Ils sont permutés d'une manière ou modifiés d'une certaine façon afin que - oups. 901 00:43:56,365 --> 00:43:59,040 C'est un spoiler de plaisir pour la prochaine fois. 902 00:43:59,040 --> 00:44:04,390 >> Ainsi, vous pouvez mapper ce qui est apparemment O à B. Notez que les lignes vers le haut 903 00:44:04,390 --> 00:44:05,420 capitalisation sage. 904 00:44:05,420 --> 00:44:07,960 Apparemment r devient e. 905 00:44:07,960 --> 00:44:14,000 Apparemment F-H-E-R devient S-U-R-E. Alors il s'avère qu'il ya une correspondance, et en 906 00:44:14,000 --> 00:44:18,720 ce cas, il ya une jolie bête cartographie si quelqu'un a pensé à elle? 907 00:44:18,720 --> 00:44:21,440 C'est ce qu'on appelle Rot 13, Rotation 13. 908 00:44:21,440 --> 00:44:24,760 Il est le plus stupide de cryptage mécanismes, car il littéralement juste 909 00:44:24,760 --> 00:44:29,160 ajoute 13 à chacune des lettres, stupide dans le sens que si vous venez 910 00:44:29,160 --> 00:44:31,890 avoir un peu de temps libre sur vos mains et un crayon, ou vous pensez juste qu'il 911 00:44:31,890 --> 00:44:35,260 à travers dans votre tête, vous pouvez essayer tous les ajouts possibles - un, deux, 912 00:44:35,260 --> 00:44:38,470 trois, point, point, point, 25 à un peu faire tourner l'ensemble de l'alphabet, et 913 00:44:38,470 --> 00:44:40,860 Finalement, vous allez découvrir ce que ce message est. 914 00:44:40,860 --> 00:44:43,700 Donc, si vous avez fait quelque chose de ce genre dans école primaire passer des messages à votre 915 00:44:43,700 --> 00:44:46,830 meilleur ami, si votre école primaire enseignant simple lecture de l' 916 00:44:46,830 --> 00:44:50,320 message et brute forcé la solution, vous auriez pu avoir 917 00:44:50,320 --> 00:44:52,550 une réponse par là. 918 00:44:52,550 --> 00:44:54,970 >> Maintenant, bien sûr, dans le monde réel, cryptographie est plus sophistiqué. 919 00:44:54,970 --> 00:45:00,120 Il s'agit d'un extrait de texte à partir d'un Système d'ordinateur ayant des noms d'utilisateur et 920 00:45:00,120 --> 00:45:03,630 mots de passe, comme presque tous les nôtres, et C'est ce que votre mot de passe pourrait 921 00:45:03,630 --> 00:45:07,260 ressembler si stocké sur votre disque conduire, mais sous une forme cryptée. 922 00:45:07,260 --> 00:45:11,050 Ce n'est pas seulement une rotation de lettres, A est B, et B est C. C'est 923 00:45:11,050 --> 00:45:15,620 beaucoup plus sophistiqué, mais il utilise ce qui est généralement connu comme clé secrète 924 00:45:15,620 --> 00:45:16,690 cryptographie. 925 00:45:16,690 --> 00:45:20,210 Cette image raconte ce qui suit histoire avec quelques icônes. 926 00:45:20,210 --> 00:45:22,250 >> Sur la gauche, nous avons ce nous appellerons texte. 927 00:45:22,250 --> 00:45:25,420 Dans le monde de la cryptographie, plaine texte est juste le message original 928 00:45:25,420 --> 00:45:29,050 écrit en anglais ou en français ou n'importe quelle langue. 929 00:45:29,050 --> 00:45:32,405 Si vous souhaitez crypter, nous passerons il imagée par un cadenas, afin 930 00:45:32,405 --> 00:45:35,580 une sorte de de l'algorithme, une fonction ou le programme que quelqu'un a écrit 931 00:45:35,580 --> 00:45:39,880 brouille les lettres que j'espère complicatedly plus que le simple ajout 13 932 00:45:39,880 --> 00:45:40,980 à chacun d'eux. 933 00:45:40,980 --> 00:45:43,780 >> Qu'est-ce que vous sortez de ce processus dans le milieu, il est appelé cryptogramme. 934 00:45:43,780 --> 00:45:44,850 Donc une sorte de mot sexy. 935 00:45:44,850 --> 00:45:47,630 Cela signifie simplement que c'est la crypté version du texte brut. 936 00:45:47,630 --> 00:45:52,570 Et seulement si vous avez ce même secret, 13 ou moins 13, êtes-vous en mesure de 937 00:45:52,570 --> 00:45:54,970 déchiffrer un message comme ça. 938 00:45:54,970 --> 00:45:57,770 >> Donc, dans le problème fixé deux, parmi les choses vous allez faire si dans le Hacker 939 00:45:57,770 --> 00:46:01,860 Édition, vous devrez écrire du code pour casser les mots de passe, calculer 940 00:46:01,860 --> 00:46:05,170 ce qu'ils étaient et comment ils ont été crypté, si nous vous donnons un peu 941 00:46:05,170 --> 00:46:06,460 d'orientation en cours de route. 942 00:46:06,460 --> 00:46:09,320 Dans l'édition standard, nous introduisons un couple de chiffrement, le chiffrement 943 00:46:09,320 --> 00:46:12,400 mécanismes, l'un appelé César, un appelé Vigenère, qui sont encore 944 00:46:12,400 --> 00:46:16,100 chiffrements rotation où A devient quelque chose, B devient quelque chose, mais 945 00:46:16,100 --> 00:46:18,820 vous devez le faire par programmation car il y aura en effet un secret 946 00:46:18,820 --> 00:46:22,840 clé impliquée qui est typiquement un nombre ou un mot-clé que seule l' 947 00:46:22,840 --> 00:46:26,420 expéditeur et le destinataire de ces messages doivent comprendre. 948 00:46:26,420 --> 00:46:28,660 >> Maintenant, cela a effectivement incarnations dans le monde réel. 949 00:46:28,660 --> 00:46:32,910 C'est, par exemple, est peu orphelin Anneau décodeur secret de Annie et vous 950 00:46:32,910 --> 00:46:35,180 peut effectivement mettre en œuvre ces chiffres de rotation - 951 00:46:35,180 --> 00:46:37,930 A devient quelque chose, B devient quelque chose - avec un couple de roues, 952 00:46:37,930 --> 00:46:40,840 une sur l'extérieur, une à l'intérieur de telle sorte que si vous tournez la roue ou 953 00:46:40,840 --> 00:46:44,170 l'anneau, vous pouvez réellement aligner le lettres avec des lettres différentes, 954 00:46:44,170 --> 00:46:45,430 l'obtention d'un code secret. 955 00:46:45,430 --> 00:46:48,110 Et comme le cliffhanger pour aujourd'hui, ce que j'ai pensé que je ferais un peu de 956 00:46:48,110 --> 00:46:52,170 retour en arrière que si vous allumez le téléviseur le 24 Décembre, vous pouvez regarder l' 957 00:46:52,170 --> 00:46:55,390 ad nauseam de film 24 heures dans une rangée. 958 00:46:55,390 --> 00:47:06,030 Mais pour aujourd'hui, je vais l'ouvrir ici et nous donner seulement deux minutes d'un 959 00:47:06,030 --> 00:47:13,493 Christmas Story pédagogiquement pertinente avec un petit bonhomme nommé Ralphie. 960 00:47:13,493 --> 00:47:14,400 >> [LECTURE VIDEO] 961 00:47:14,400 --> 00:47:17,420 >> -Qu'il soit connu à tout le monde que Ralph Parker est nommé 962 00:47:17,420 --> 00:47:20,650 membre de la Little Orphan Annie secrète cercle et a droit à tous 963 00:47:20,650 --> 00:47:23,460 les honneurs et les avantages celui-ci ne se produise. 964 00:47:23,460 --> 00:47:25,990 >> -Signé, Little Orphan Annie. 965 00:47:25,990 --> 00:47:30,100 Contresigné, Pierre André à l'encre. 966 00:47:30,100 --> 00:47:34,270 Honneurs et les avantages déjà à l'âge de neuf ans. 967 00:47:34,270 --> 00:47:39,440 >> [Criant RADIO] 968 00:47:39,440 --> 00:47:40,770 >> Allez, nous allons passer à autre chose. 969 00:47:40,770 --> 00:47:44,965 Je n'ai pas besoin de tout ce que le jazz sur contrebandiers et des pirates. 970 00:47:44,965 --> 00:47:48,270 >> Écoutez-demain soir pour le aventure conclusion du noir 971 00:47:48,270 --> 00:47:49,650 bateau pirate. 972 00:47:49,650 --> 00:47:53,320 Maintenant, il est temps pour le secret d'Annie Message pour vous les membres 973 00:47:53,320 --> 00:47:55,720 du cercle secret. 974 00:47:55,720 --> 00:47:56,580 Rappelez-vous, les enfants. 975 00:47:56,580 --> 00:48:01,720 Seuls les membres du Cercle Secret Annie peut décoder message secret d'Annie. 976 00:48:01,720 --> 00:48:05,872 Rappelez-vous, Annie dépend de vous. 977 00:48:05,872 --> 00:48:08,670 Réglez vos épingles à B2. 978 00:48:08,670 --> 00:48:11,000 Voici le message. 979 00:48:11,000 --> 00:48:12,335 12, 11, 2 - 980 00:48:12,335 --> 00:48:14,670 >> -Je suis à ma première réunion de secret. 981 00:48:14,670 --> 00:48:19,720 >> -25, 14, 11, 18, 16 - 982 00:48:19,720 --> 00:48:21,650 >> -Pierre était en grand ce soir de la voix. 983 00:48:21,650 --> 00:48:24,830 Je pourrais dire le message de ce soir était vraiment important. 984 00:48:24,830 --> 00:48:26,400 >> -3, 25. 985 00:48:26,400 --> 00:48:28,540 C'est un message d'Annie elle-même. 986 00:48:28,540 --> 00:48:30,086 Rappelez-vous, ne le dites à personne. 987 00:48:30,086 --> 00:48:34,370 988 00:48:34,370 --> 00:48:38,710 >> -90 Secondes plus tard, je suis dans la seule chambre dans la maison où un garçon de neuf ans 989 00:48:38,710 --> 00:48:42,668 pouvait s'asseoir dans l'intimité et décodage. 990 00:48:42,668 --> 00:48:47,628 Aha, B. Je suis allé à l'autre. 991 00:48:47,628 --> 00:48:53,060 E. Le premier mot est «être». S. Il venait plus facile maintenant. 992 00:48:53,060 --> 00:48:54,980 U. 25. 993 00:48:54,980 --> 00:48:55,940 C'est R. 994 00:48:55,940 --> 00:48:56,900 >> -Allez, Ralphie. 995 00:48:56,900 --> 00:48:57,860 Je dois y aller. 996 00:48:57,860 --> 00:48:59,780 >> -Je descends tout de suite, Ma. 997 00:48:59,780 --> 00:49:01,030 Gee whiz. 998 00:49:01,030 --> 00:49:04,300 999 00:49:04,300 --> 00:49:08,220 >> -T. O. Soyez sûr d'. 1000 00:49:08,220 --> 00:49:09,500 Assurez-vous de quoi? 1001 00:49:09,500 --> 00:49:11,660 Quel était Little Orphan Annie veux dire? 1002 00:49:11,660 --> 00:49:12,844 Assurez-vous de quoi? 1003 00:49:12,844 --> 00:49:14,732 >> -Ralphie, Randy a obtenu d'aller. 1004 00:49:14,732 --> 00:49:16,148 Voulez-vous s'il vous plaît de sortir? 1005 00:49:16,148 --> 00:49:17,092 >> -Très bien, maman. 1006 00:49:17,092 --> 00:49:18,510 Je serai tout de suite. 1007 00:49:18,510 --> 00:49:20,270 >> -Je me rapprochais maintenant. 1008 00:49:20,270 --> 00:49:21,823 La tension était terrible. 1009 00:49:21,823 --> 00:49:23,045 Quel était-il? 1010 00:49:23,045 --> 00:49:26,510 Le destin de la planète peut dans la balance. 1011 00:49:26,510 --> 00:49:28,985 >> -Ralphie, le go dois de Randy. 1012 00:49:28,985 --> 00:49:32,680 >> -Je vais être droit à des Bordel de merde. 1013 00:49:32,680 --> 00:49:33,956 >> -On y est presque. 1014 00:49:33,956 --> 00:49:35,140 Mes doigts volaient. 1015 00:49:35,140 --> 00:49:36,880 Mon esprit était un piège d'acier. 1016 00:49:36,880 --> 00:49:38,010 Chaque pore vibré. 1017 00:49:38,010 --> 00:49:39,878 Il était presque clair. 1018 00:49:39,878 --> 00:49:43,210 Oui, oui, oui, oui, oui. 1019 00:49:43,210 --> 00:49:49,030 >> -Assurez-vous de boire votre Ovomaltine. 1020 00:49:49,030 --> 00:49:50,280 Ovomaltine? 1021 00:49:50,280 --> 00:49:53,980 1022 00:49:53,980 --> 00:49:55,230 Un commercial minable? 1023 00:49:55,230 --> 00:49:58,572 1024 00:49:58,572 --> 00:50:00,694 Fils de pute. 1025 00:50:00,694 --> 00:50:01,900 >> [FIN LECTURE VIDÉO] 1026 00:50:01,900 --> 00:50:04,260 >> INTERLOCUTEUR 1: C'est CS50, et que sera Problème Set Two. 1027 00:50:04,260 --> 00:50:06,305 Rendez-vous la semaine prochaine. 1028 00:50:06,305 --> 00:50:08,800 >> ENCEINTE 2: Lors de la prochaine CS50, cela arrive. 1029 00:50:08,800 --> 00:50:11,060 >> INTERLOCUTEUR 1: Donc, un sujet que nous n'avons pas regardé ce jour est 1030 00:50:11,060 --> 00:50:12,220 que des pointeurs de fonction. 1031 00:50:12,220 --> 00:50:14,540 Maintenant, un pointeur de fonction est juste l'adresse d'une population 1032 00:50:14,540 --> 00:50:17,000 fonction, mais un peu comme - 1033 00:50:17,000 --> 00:50:18,250 fils d'un - 1034 00:50:18,250 --> 00:50:19,670