1 00:00:08,119 --> 00:00:11,630 [Powered by Google Translate] DAVID J. MALAN: Très bien, c'est CS50, et c'est la 2 00:00:11,630 --> 00:00:14,790 début de la deuxième semaine. 3 00:00:14,790 --> 00:00:16,300 Merci. 4 00:00:16,300 --> 00:00:19,000 Commençons ici par un appel téléphonique. 5 00:00:19,000 --> 00:00:30,005 Je suis sur le point de composer 617-BUG-CS50. 6 00:00:30,005 --> 00:00:31,230 CS50: C'est CS50. 7 00:00:31,230 --> 00:00:33,930 Pour Garçon Shuttle, appuyez sur 1. 8 00:00:33,930 --> 00:00:36,660 Pour recommencer, appuyez sur 9. 9 00:00:36,660 --> 00:00:38,180 DAVID J. MALAN: Alors il a dit pour le garçon Shuttle, appuyez sur 1. 10 00:00:38,180 --> 00:00:41,560 Nous allons donc d'appuyer sur 1. 11 00:00:41,560 --> 00:00:43,230 CS50: Quelle est votre origine? 12 00:00:43,230 --> 00:00:45,340 Pour le quad, appuyez sur 1. 13 00:00:45,340 --> 00:00:47,080 Mather, appuyez sur 2. 14 00:00:47,080 --> 00:00:49,240 Boylston, appuyez sur 3. 15 00:00:49,240 --> 00:00:51,280 Lamont, appuyez sur 4. 16 00:00:51,280 --> 00:00:53,210 Mem Hall, appuyez sur 5. 17 00:00:53,210 --> 00:00:55,660 Pour recommencer, appuyez sur 0. 18 00:00:55,660 --> 00:00:59,590 DAVID J. MALAN: Nous allons appuyez sur 1 pour le quad. 19 00:00:59,590 --> 00:01:03,610 CS50: navette Suivant quitte à l'instant même à PM 1:10, et 20 00:01:03,610 --> 00:01:09,820 puis à 13 heures 20, 1:30 PM, 1:40 PM. 21 00:01:09,820 --> 00:01:12,030 C'est CS50. 22 00:01:12,030 --> 00:01:15,570 >> DAVID J. MALAN: Donc, c'est la voix du CS50. 23 00:01:15,570 --> 00:01:18,030 Et c'est un exemple du genre de projets finaux, pour 24 00:01:18,030 --> 00:01:19,500 Par exemple, vous pouvez mordre vers 25 00:01:19,500 --> 00:01:20,600 la fin du semestre. 26 00:01:20,600 --> 00:01:23,840 Par exemple, que shuttleboy.cs50.net existe - 27 00:01:23,840 --> 00:01:28,200 en fait un projet que j'ai commencé à écrire après avoir pris CS51 28 00:01:28,200 --> 00:01:29,740 quand j'étais étudiant de premier cycle. 29 00:01:29,740 --> 00:01:32,250 Et l'inspiration ici était à l'époque, on n'avait rien 30 00:01:32,250 --> 00:01:34,320 les horaires imprimés navette, et il n'y avait pas de 31 00:01:34,320 --> 00:01:35,970 notion de regarder les choses en ligne. 32 00:01:35,970 --> 00:01:38,730 Et donc je sorte de colombe dans un week-end, versé par l' 33 00:01:38,730 --> 00:01:41,460 imprimer le calendrier, et l'ai porté à un programme informatique. 34 00:01:41,460 --> 00:01:43,790 À l'époque, le programme informatique qui est arrivé à écrire 35 00:01:43,790 --> 00:01:47,110 en C. Et vous avez réellement couru par Boy navette tapant à une 36 00:01:47,110 --> 00:01:48,600 invite clignote comme nous l'avons fait jusqu'à présent. 37 00:01:48,600 --> 00:01:50,450 Mais au fil des ans, il a évolué en un instant 38 00:01:50,450 --> 00:01:51,390 messagerie bot. 39 00:01:51,390 --> 00:01:53,970 Il a évolué plus récemment dans ce site, dans un 40 00:01:53,970 --> 00:01:57,720 SMS-outil, ainsi que dans l'outil basée sur la voix. 41 00:01:57,720 --> 00:02:00,170 Et c'est faire allusion à des tas de choses que vous pouvez 42 00:02:00,170 --> 00:02:02,380 faire vous-même à la fin du semestre. 43 00:02:02,380 --> 00:02:05,490 >> Par exemple, là-bas, la version SMS de Boy navette arrive 44 00:02:05,490 --> 00:02:06,510 à opérer comme suit. 45 00:02:06,510 --> 00:02:10,880 Si, sur votre téléphone portable, vous envoyez un message texte à 41411 et 46 00:02:10,880 --> 00:02:14,300 puis envoyez le sboy symbole spécial, pour le garçon de navette, 47 00:02:14,300 --> 00:02:18,350 suivi par A et B, où A est une origine et B est un 48 00:02:18,350 --> 00:02:19,070 destination - 49 00:02:19,070 --> 00:02:21,030 par exemple, l'espace Boylston Quad - 50 00:02:21,030 --> 00:02:23,330 ce que vous devriez retrouver en quelques secondes est un texte 51 00:02:23,330 --> 00:02:25,820 message de Boy navette vous dire exactement quand le 52 00:02:25,820 --> 00:02:28,990 prochaines années navettes sont, de ce point A va que 53 00:02:28,990 --> 00:02:29,640 point B. 54 00:02:29,640 --> 00:02:32,510 Et ceci est un exemple plus général de ce qui est connu comme 55 00:02:32,510 --> 00:02:33,920 à l'aide d'une API. 56 00:02:33,920 --> 00:02:36,930 >> Ainsi, par exemple, voir ici est juste shuttleboy.cs50.net, l' 57 00:02:36,930 --> 00:02:39,300 réelle sur le Web incarnation de cette. 58 00:02:39,300 --> 00:02:42,480 Mais les données qui souligne ceci et d'autres applications qui CS50 59 00:02:42,480 --> 00:02:45,560 a développé sommes tous exposés à tout le monde ici sous la forme 60 00:02:45,560 --> 00:02:49,340 d'API, les interfaces de programmation d'applications. 61 00:02:49,340 --> 00:02:52,220 Et c'est juste une façon élégante de dire que les gens que nous aimons le 62 00:02:52,220 --> 00:02:56,010 l'Internet et d'autres ont passé un certain temps à la création 63 00:02:56,010 --> 00:02:59,970 logiciels que vous pouvez utiliser pour récupérer des données à partir de nous et 64 00:02:59,970 --> 00:03:02,510 puis construire vos propres applications sur le dessus 65 00:03:02,510 --> 00:03:03,840 de cet ensemble de données. 66 00:03:03,840 --> 00:03:06,610 Ainsi, par exemple, cette page API navette Boy ici, ce qui 67 00:03:06,610 --> 00:03:09,390 se trouve être dans le mode CS50, essentiellement des documents 68 00:03:09,390 --> 00:03:13,080 comment vous pouvez suivre pour demander CS50 serveurs de données. 69 00:03:13,080 --> 00:03:16,240 Par exemple, si vous êtes familier avec les fichiers CSV, comma 70 00:03:16,240 --> 00:03:18,940 valeurs séparées, ce sont juste une sorte de rapide et sale 71 00:03:18,940 --> 00:03:20,310 Excel-comme les fichiers. 72 00:03:20,310 --> 00:03:23,110 Ainsi, vous pouvez demander Boy navette pour l'ensemble des données sur l'ensemble de la 73 00:03:23,110 --> 00:03:25,090 maisons et leurs coordonnées GPS, et vous obtiendrez 74 00:03:25,090 --> 00:03:27,300 dos, pour l'essentiel, une feuille de calcul comme celle que 75 00:03:27,300 --> 00:03:30,820 Vous pouvez alors lire dans un programme de votre choix, puis 76 00:03:30,820 --> 00:03:33,250 générer des résultats, comme Boy navette elle-même 77 00:03:33,250 --> 00:03:34,160 arrive à faire. 78 00:03:34,160 --> 00:03:37,030 Pour les plus familiers, les représentations de données les plus modernes 79 00:03:37,030 --> 00:03:39,420 comprennent JSON, JavaScript Object Notation. 80 00:03:39,420 --> 00:03:40,620 Quelque chose va revenir vers vous pour 81 00:03:40,620 --> 00:03:41,720 la fin du semestre. 82 00:03:41,720 --> 00:03:45,440 >> Mais encore une fois, ce n'est qu'un de plusieurs API propre CS50 l'. 83 00:03:45,440 --> 00:03:48,320 Et la chose la plus intéressante est, de nos jours, Facebook et 84 00:03:48,320 --> 00:03:51,110 Twitter et Google et à peu près tous les sites Web populaires sur 85 00:03:51,110 --> 00:03:54,130 il a une sorte d'API, ce qui signifie que si vous lisez le 86 00:03:54,130 --> 00:03:56,620 documentation sur leur site, vous vous inscrivez à un 87 00:03:56,620 --> 00:03:59,980 compte, vous pouvez alors commencer à écrire des logiciels sur le dessus de 88 00:03:59,980 --> 00:04:03,680 tous les outils ou les données de cette société il fournit. 89 00:04:03,680 --> 00:04:06,210 Et si l'un de nos compagnons d'enseignement propres quelques années en arrière 90 00:04:06,210 --> 00:04:07,620 a écrit une version Mac de ce. 91 00:04:07,620 --> 00:04:10,990 Ainsi, au lien intitulé Mac ici en haut à gauche, vous pouvez réellement 92 00:04:10,990 --> 00:04:13,940 télécharger un widget Mac OS qui tourne sur votre Mac pour faire le 93 00:04:13,940 --> 00:04:15,040 même genre de choses. 94 00:04:15,040 --> 00:04:17,970 Donc, il s'agit de construire au-dessus des ensembles de données comme celles-ci. 95 00:04:17,970 --> 00:04:21,839 Mais plus à ce sujet vers la fin du semestre. 96 00:04:21,839 --> 00:04:25,780 >> , Donc nous plonger dans réel rapide à un bug, juste pour obtenir genre de 97 00:04:25,780 --> 00:04:27,990 choses réchauffé aujourd'hui, et je pense revenir sur certains des 98 00:04:27,990 --> 00:04:29,660 les choses, nous avons examiné la semaine dernière. 99 00:04:29,660 --> 00:04:32,840 En particulier, laissez-moi aller de l'avant et tirer vers le haut, par exemple, 100 00:04:32,840 --> 00:04:34,080 cet exemple ici. 101 00:04:34,080 --> 00:04:37,500 Buggy1.c, il est disponible sur le site Web du cours si vous aviez 102 00:04:37,500 --> 00:04:40,250 tiens à le télécharger et à fouiller autour de vous. 103 00:04:40,250 --> 00:04:43,520 Mais nous allons zoomer ici à ce programme assez court, et juste 104 00:04:43,520 --> 00:04:46,550 un résumé ultra-rapide de certains des blocs de construction de base que les 105 00:04:46,550 --> 00:04:48,880 nous voulons vraiment juste de commencer à prendre pour acquis. 106 00:04:48,880 --> 00:04:51,860 >> Donc la substance bleue, aux lignes 1 à 9, ne sont que 107 00:04:51,860 --> 00:04:53,670 questions faciles. 108 00:04:53,670 --> 00:04:54,590 Donc, ce ne sont que des commentaires. 109 00:04:54,590 --> 00:04:56,230 Ils n'ont pas de signification fonctionnelle. 110 00:04:56,230 --> 00:04:58,460 Mais ils sont des commentaires dans le sens où ils sont des notes que 111 00:04:58,460 --> 00:05:02,010 Je, humaine, faite à moi-même ainsi que dans la conférence et après 112 00:05:02,010 --> 00:05:04,340 conférence, je peux réellement me souviens que ce programme 113 00:05:04,340 --> 00:05:07,120 fait sans avoir à lire ligne par ligne et 114 00:05:07,120 --> 00:05:08,990 recréer l'histoire dans mon esprit. 115 00:05:08,990 --> 00:05:11,000 Par ailleurs, si je remettre ce programme à quelqu'un d'autre comme 116 00:05:11,000 --> 00:05:14,420 vous, c'est beaucoup plus clair pour vous, parce que des commentaires de ce genre, 117 00:05:14,420 --> 00:05:16,680 ce que le programme est en train de faire, ou du moins ce que l' 118 00:05:16,680 --> 00:05:18,210 programme est censé faire. 119 00:05:18,210 --> 00:05:20,760 Que ce soit ou non c'est bon c'est autre chose. 120 00:05:20,760 --> 00:05:25,040 Maintenant, en C, avec commentaires sur plusieurs lignes, rappelons que sur la ligne 121 00:05:25,040 --> 00:05:27,880 on est ici le symbole de la magie, / *. 122 00:05:27,880 --> 00:05:30,380 Cela signifie ici est le début d'un commentaire. 123 00:05:30,380 --> 00:05:34,560 Et rien d'autre ne compte jusqu'à ce que vous atteignez la fin de terminaison, 124 00:05:34,560 --> 00:05:36,700 qui est * /, c'est le contraire. 125 00:05:36,700 --> 00:05:39,120 Donc, le fait que j'ai 80-quelques étoiles bizarres ici de 126 00:05:39,120 --> 00:05:41,550 de gauche à droite est vraiment juste un détail esthétique. 127 00:05:41,550 --> 00:05:43,370 Il n'a pas de signification fonctionnelle. 128 00:05:43,370 --> 00:05:44,490 >> Maintenant, que diriez-vous la ligne 11? 129 00:05:44,490 --> 00:05:46,940 Qu'est-ce que faire en termes simples? 130 00:05:51,560 --> 00:05:52,540 Qu'est-ce que c'est? 131 00:05:52,540 --> 00:05:54,280 PUBLIC: Comprend la norme. 132 00:05:54,280 --> 00:05:54,740 DAVID J. MALAN: OK, très bien. 133 00:05:54,740 --> 00:05:57,500 Ainsi, il inclut la bibliothèque stdio.h. 134 00:05:57,500 --> 00:05:58,230 Alors qu'est-ce que ça veut dire? 135 00:05:58,230 --> 00:06:01,570 Eh bien, dans ce fichier, stdio.h, ya tout un tas d' 136 00:06:01,570 --> 00:06:03,320 déclarations de fonctions - 137 00:06:03,320 --> 00:06:05,290 c'est-à-code que quelqu'un d'autre a écrit. 138 00:06:05,290 --> 00:06:08,160 Et un parfait exemple d'une fonction qui est déclarée dans 139 00:06:08,160 --> 00:06:10,250 stdio.h est - 140 00:06:10,250 --> 00:06:11,980 qui favori en ce moment? 141 00:06:11,980 --> 00:06:14,300 Donc, printf, l'une des plus courantes à utiliser, certainement 142 00:06:14,300 --> 00:06:15,840 dès le début, à partir de cette bibliothèque est là. 143 00:06:15,840 --> 00:06:19,290 Si j'exclus cette ligne de code, Clang va crier 144 00:06:19,290 --> 00:06:22,550 à me parler en utilisant un symbole non déclaré. 145 00:06:22,550 --> 00:06:24,930 Quelque chose non déclarés est probablement le mot-clé, parce 146 00:06:24,930 --> 00:06:27,770 nous n'avons pas informé le compilateur ce qui semble printf 147 00:06:27,770 --> 00:06:29,230 comme si nous ne comprennent cette ligne. 148 00:06:29,230 --> 00:06:31,830 Et plus terre à terre, vraiment, ce que veut dire, c'est la ligne 149 00:06:31,830 --> 00:06:34,890 ouvrir ce fichier, stdio.h, partout où il se trouve sur le serveur de 150 00:06:34,890 --> 00:06:38,200 disque dur ou un disque dur de l'appareil, et de copier-coller l' 151 00:06:38,200 --> 00:06:40,240 juste là dans mon dossier, sans que je 152 00:06:40,240 --> 00:06:41,730 avoir à le faire manuellement. 153 00:06:41,730 --> 00:06:44,420 >> Maintenant, une fois que nous recevons ici au menu principal, avant longtemps, nous allons commencer 154 00:06:44,420 --> 00:06:46,900 taquiner à part ce que int et ce vide est. 155 00:06:46,900 --> 00:06:48,430 Mais pour l'instant, regardons les trois lignes 156 00:06:48,430 --> 00:06:50,350 dans les 15 à 17 ans. 157 00:06:50,350 --> 00:06:52,250 Cette là je revendique comme buggy. 158 00:06:52,250 --> 00:06:54,900 Ligne 7 dans mes commentaires dit "Si Affichera 10 159 00:06:54,900 --> 00:06:59,410 astérisques, mais n'a pas. "Pourquoi cela ne s'imprime pas, en fait, 160 00:06:59,410 --> 00:07:01,097 Ces 10 étoiles? 161 00:07:01,097 --> 00:07:02,347 PUBLIC: [Inaudible]. 162 00:07:05,210 --> 00:07:05,800 DAVID J. MALAN: Exactement. 163 00:07:05,800 --> 00:07:08,720 Donc, remarquez que nous commençons à compter à partir de 0. 164 00:07:08,720 --> 00:07:10,780 Et c'est effectivement une convention dans la programmation et 165 00:07:10,780 --> 00:07:13,230 l'informatique, plus généralement, de commencer à compter 166 00:07:13,230 --> 00:07:14,610 de 0 au lieu de 1. 167 00:07:14,610 --> 00:07:16,690 Et c'est vraiment découle simplement du fait que, pour 168 00:07:16,690 --> 00:07:18,940 Par exemple, lorsque nous avons eu huit personnes sur la scène, lorsque 169 00:07:18,940 --> 00:07:20,680 personne ne levait la main, ils étaient 170 00:07:20,680 --> 00:07:22,340 tous les zéros de manière efficace. 171 00:07:22,340 --> 00:07:24,260 Et donc c'est juste une sorte de convention ordinateur afin, 172 00:07:24,260 --> 00:07:26,030 Par conséquent, à compter à partir de 0. 173 00:07:26,030 --> 00:07:29,130 Si c'est le nombre le plus bas vous pouvez représenter en binaire. 174 00:07:29,130 --> 00:07:32,270 >> Donc, ici, nous avons commencé i initialiser à 0. 175 00:07:32,270 --> 00:07:34,230 Nous avons mis i égal à 0. 176 00:07:34,230 --> 00:07:37,780 Mais ensuite, j'ai fait cette erreur ici, en disant i est inférieur ou 177 00:07:37,780 --> 00:07:38,820 égale à 10. 178 00:07:38,820 --> 00:07:41,700 Mais si vous pensez que par le biais, si je commence à 0 et puis je m'en vais 179 00:07:41,700 --> 00:07:46,410 jusqu'à 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, je vais en fait 180 00:07:46,410 --> 00:07:49,980 imprimer 11 étoiles à l'écran, parce que je suis allé jusqu'à 181 00:07:49,980 --> 00:07:52,410 à et égale à 10. 182 00:07:52,410 --> 00:07:55,090 Donc, la solution facile ici, c'est alors qu'est-ce? 183 00:07:55,090 --> 00:07:56,070 PUBLIC: [Inaudible]. 184 00:07:56,070 --> 00:07:57,350 DAVID J. MALAN: il suffit de changer à moins de. 185 00:07:57,350 --> 00:07:59,700 Si vous voulez vraiment, vous pouvez le faire. 186 00:07:59,700 --> 00:08:01,370 Mais en général, qui est mal vu. 187 00:08:01,370 --> 00:08:04,020 Et ainsi de commencer à compter à partir de 0 est juste quelque chose, vous devriez 188 00:08:04,020 --> 00:08:05,510 généralement s'habituer. 189 00:08:05,510 --> 00:08:07,810 Maintenant, qu'en est-il de cette construction entière en elle-même? 190 00:08:07,810 --> 00:08:10,640 Ces 15 lignes demarks une boucle for. 191 00:08:10,640 --> 00:08:12,510 Donc, c'est pas une fonction. 192 00:08:12,510 --> 00:08:13,640 C'est juste une déclaration. 193 00:08:13,640 --> 00:08:16,180 Il s'agit d'une construction de boucle, comme nous l'avons vu dans Scratch. 194 00:08:16,180 --> 00:08:17,600 Et il comporte trois parties. 195 00:08:17,600 --> 00:08:19,740 Notez qu'il ya la première partie de 196 00:08:19,740 --> 00:08:21,350 la gauche de la virgule. 197 00:08:21,350 --> 00:08:24,200 Il ya la partie centrale entre les deux points-virgules. 198 00:08:24,200 --> 00:08:26,250 Et puis il ya la partie droite vers la droite 199 00:08:26,250 --> 00:08:27,640 le point-virgule seconde. 200 00:08:27,640 --> 00:08:31,822 Maintenant, le premier d'entre eux fait quoi? 201 00:08:31,822 --> 00:08:33,679 PUBLIC: [Inaudible]. 202 00:08:33,679 --> 00:08:34,270 DAVID J. MALAN: Là-bas? 203 00:08:34,270 --> 00:08:34,816 Ouais? 204 00:08:34,816 --> 00:08:35,980 PUBLIC: Initialisation. 205 00:08:35,980 --> 00:08:36,850 >> DAVID J. MALAN: Initialisation. 206 00:08:36,850 --> 00:08:37,840 Alors qu'est-ce que cela signifie? 207 00:08:37,840 --> 00:08:40,690 Nous avons déclaré une variable appelée i. 208 00:08:40,690 --> 00:08:43,840 Il est de type int, parce que j'ai spécifié int i. 209 00:08:43,840 --> 00:08:46,470 Et je suis i initialiser à la valeur de 0. 210 00:08:46,470 --> 00:08:47,730 Alors, quel est ce vraiment dire? 211 00:08:47,730 --> 00:08:50,680 Il a effectivement dit à l'ordinateur hey, me donner assez 212 00:08:50,680 --> 00:08:53,660 mémoire, assez de RAM, pour s'adapter à un certain nombre, et ensuite mettre le 213 00:08:53,660 --> 00:08:56,130 numéro 0 dans ce morceau de RAM. 214 00:08:56,130 --> 00:08:59,100 Et en passant, quelle est la taille d'un int en général, au moins à l'intérieur 215 00:08:59,100 --> 00:09:00,280 de l'appareil? 216 00:09:00,280 --> 00:09:01,000 PUBLIC: 32 bits. 217 00:09:01,000 --> 00:09:01,670 DAVID J. MALAN: 32 bits. 218 00:09:01,670 --> 00:09:04,890 Cela signifie donc que me donner 32 bits, autrement connu comme 4 octets, 219 00:09:04,890 --> 00:09:07,250 et mettre la valeur 0 dans ce qui est assez facile, car 220 00:09:07,250 --> 00:09:09,110 il faut simplement mettre tous les bits à 0. 221 00:09:09,110 --> 00:09:11,690 >> Alors maintenant, la deuxième partie ici est la condition. 222 00:09:11,690 --> 00:09:14,590 Et la condition, comme son nom l'indique, est ce qui est vérifié 223 00:09:14,590 --> 00:09:18,100 encore et encore et encore quant à savoir si c'est vrai ou faux. 224 00:09:18,100 --> 00:09:21,410 Donc, c'est juste que font les lignes de code suivantes - 225 00:09:21,410 --> 00:09:23,950 à savoir la ligne 16, parce que c'est le seul retrait 226 00:09:23,950 --> 00:09:24,820 dessous - 227 00:09:24,820 --> 00:09:26,980 tant que i est inférieur à 10. 228 00:09:26,980 --> 00:09:30,520 Et après chaque itération de cette boucle, faire le 229 00:09:30,520 --> 00:09:33,840 incrémentation, qui dans ce cas est i + +. 230 00:09:33,840 --> 00:09:35,580 Maintenant, il ne doit pas être i + +. 231 00:09:35,580 --> 00:09:37,610 Il pourrait être i -. 232 00:09:37,610 --> 00:09:39,860 Mais si je faisais ça, ce qui va le comportement 233 00:09:39,860 --> 00:09:41,370 d'être de ce programme? 234 00:09:41,370 --> 00:09:42,290 PUBLIC: Il va y avoir une boucle infinie. 235 00:09:42,290 --> 00:09:44,060 DAVID J. MALAN: Il va y avoir une sorte de boucle infinie, 236 00:09:44,060 --> 00:09:47,720 sauf si nous sommes chanceux au bout de 2 milliards ou négative. 237 00:09:47,720 --> 00:09:51,320 Peut-être que les choses vont s'enrouler autour, juste par nature du fini 238 00:09:51,320 --> 00:09:53,930 nombre de bits que nous avons attribués pour un int. 239 00:09:53,930 --> 00:09:56,270 Mais il va certainement réitérer beaucoup plus que 10 et 240 00:09:56,270 --> 00:09:58,630 certainement plus de 11 fois ici. 241 00:09:58,630 --> 00:10:02,240 >> Et maintenant, juste en passant, sachez que i + + et i - 242 00:10:02,240 --> 00:10:04,420 sont vraiment juste du sucre syntaxique. 243 00:10:04,420 --> 00:10:07,210 C'est juste notation abrégée pour ce qui est d'un peu plus 244 00:10:07,210 --> 00:10:08,720 explicitement écrite comme suit: 245 00:10:08,720 --> 00:10:11,200 i = i + 1. 246 00:10:11,200 --> 00:10:13,460 Qui est identique à i + +. 247 00:10:13,460 --> 00:10:15,860 C'est en quelque sorte plus joli de dire i + +. 248 00:10:15,860 --> 00:10:17,490 Il est plus succinct, plus lisible. 249 00:10:17,490 --> 00:10:19,030 Et la plupart des gens le faire à la place. 250 00:10:19,030 --> 00:10:21,840 Mais ce n'est identiques fonctionnellement à 251 00:10:21,840 --> 00:10:22,900 ce que nous venons de voir. 252 00:10:22,900 --> 00:10:27,770 Donc, en résumé, la solution miracle ici est juste de dire que j'ai une itération 253 00:10:27,770 --> 00:10:30,690 de 0 sur toute la hauteur de moins de 10. 254 00:10:30,690 --> 00:10:32,700 Et puis nous allons en effet avoir 10 étoiles. 255 00:10:32,700 --> 00:10:33,430 >> Donc, nous allons essayer. 256 00:10:33,430 --> 00:10:35,310 Permettez-moi d'ouvrir le terminal vers le bas. 257 00:10:35,310 --> 00:10:37,420 Laissez-moi aller dans le répertoire que ce n'est po 258 00:10:37,420 --> 00:10:40,030 Et je vais le compiler manuellement avec Clang pour le moment. 259 00:10:40,030 --> 00:10:44,880 Et je vais le compiler comme buggy1.c, Entrée. 260 00:10:44,880 --> 00:10:50,280 Et maintenant buggy1, pourquoi y at-il aucun fichier ou répertoire 261 00:10:50,280 --> 00:10:52,026 appelé buggy1? 262 00:10:52,026 --> 00:10:53,850 PUBLIC: [Inaudible]. 263 00:10:53,850 --> 00:10:54,240 DAVID J. MALAN: Ouais. 264 00:10:54,240 --> 00:10:55,420 Donc, il est effectivement appelé a.out. 265 00:10:55,420 --> 00:10:57,480 Alors souvenez si vous lancez simplement Clang, où Clang est le 266 00:10:57,480 --> 00:11:00,420 compilateur, et que vous ne spécifiez pas le nom que vous souhaitez 267 00:11:00,420 --> 00:11:03,550 donner à votre programme, il va par défaut au format a.out. 268 00:11:03,550 --> 00:11:05,030 Donc, en effet, si je fais ls - 269 00:11:05,030 --> 00:11:05,510 oops. 270 00:11:05,510 --> 00:11:07,680 Et je didn't - la question noire et blanc quelques-uns des 271 00:11:07,680 --> 00:11:08,840 vous avez été confronté a été corrigé. 272 00:11:08,840 --> 00:11:10,670 Mais laissez-moi faire. 273 00:11:10,670 --> 00:11:14,570 Là, nous avons a.out sur le côté gauche là-bas. 274 00:11:14,570 --> 00:11:17,360 Donc, nous avons à exécuter a.out au lieu de buggy1. 275 00:11:17,360 --> 00:11:19,140 >> Alors laissez-moi aller de l'avant et de le faire. 276 00:11:19,140 --> 00:11:22,840 . / A.out, Entrée. 277 00:11:22,840 --> 00:11:26,160 Et je ne semble pas avoir fait quoi? 278 00:11:26,160 --> 00:11:26,620 PUBLIC: Enregistrer. 279 00:11:26,620 --> 00:11:27,390 DAVID J. MALAN: Sauvegarder mes fichiers. 280 00:11:27,390 --> 00:11:31,520 Alors qui est facilement résolu en appuyant sur S de contrôle, ou d'aller à 281 00:11:31,520 --> 00:11:33,450 Fichier, Enregistrer, comme dans la plupart des programmes. 282 00:11:33,450 --> 00:11:36,360 Permettez-moi de descendre ici, effacer l'écran, exécutez-le à nouveau. 283 00:11:36,360 --> 00:11:37,960 Et il ya encore un bug. 284 00:11:37,960 --> 00:11:41,618 Donc ce qui se passe - 285 00:11:41,618 --> 00:11:42,980 PUBLIC: Vous n'avez pas compiler. 286 00:11:42,980 --> 00:11:44,040 DAVID J. MALAN: Ah, bon. 287 00:11:44,040 --> 00:11:45,010 Je n'ai pas le compiler. 288 00:11:45,010 --> 00:11:47,250 Comme une idiote, je regarde le code pour voir ce qui ne va pas. 289 00:11:47,250 --> 00:11:51,275 Buggy1.c clang Donc, maintenant a.out. 290 00:11:51,275 --> 00:11:52,640 Et ouf, sauvé. 291 00:11:52,640 --> 00:11:55,090 >> Ainsi, il semble un peu laid parce qu'il n'y a pas de nouvelle ligne 292 00:11:55,090 --> 00:11:55,970 n'importe où dans le programme. 293 00:11:55,970 --> 00:11:57,390 Mais encore une fois, c'est juste un détail esthétique. 294 00:11:57,390 --> 00:11:59,430 Et au moins si l'on compte ceux sur, nous devrions 295 00:11:59,430 --> 00:12:01,160 maintenant voir 10 ces étoiles. 296 00:12:01,160 --> 00:12:03,260 Eh bien, que dire de cette deuxième warm-up par exemple? 297 00:12:03,260 --> 00:12:07,750 Donc, en buggy2, je prétends que cette version aussi, vous imprimez 298 00:12:07,750 --> 00:12:10,110 10 étoiles, une par ligne. 299 00:12:10,110 --> 00:12:12,340 Alors cette fois, j'ai un caractère de nouvelle ligne, juste pour faire 300 00:12:12,340 --> 00:12:13,520 les choses un peu plus joli. 301 00:12:13,520 --> 00:12:15,410 Mais au lieu que je reçois est le suivant. 302 00:12:15,410 --> 00:12:19,590 Alors laissez-moi faire buggy2.c clang, Entrée. 303 00:12:19,590 --> 00:12:21,790 Maintenant, il est à nouveau appelé a.out. 304 00:12:21,790 --> 00:12:23,130 Entrée. 305 00:12:23,130 --> 00:12:26,900 Je ne vois qu'une nouvelle ligne, seule la dernière ligne nouvelle 306 00:12:26,900 --> 00:12:29,370 déplace mon prompt à la ligne suivante. 307 00:12:29,370 --> 00:12:32,660 Et pourtant clairement que j'ai été l'impression *, puis une nouvelle ligne, 308 00:12:32,660 --> 00:12:33,990 *, Puis une nouvelle ligne. 309 00:12:33,990 --> 00:12:35,490 Mais quel est le bug ici? 310 00:12:35,490 --> 00:12:35,974 Ouais? 311 00:12:35,974 --> 00:12:37,224 PUBLIC: [Inaudible]. 312 00:12:39,850 --> 00:12:40,470 >> DAVID J. MALAN: Exactement. 313 00:12:40,470 --> 00:12:44,110 Donc, contrairement à certains langages, comme Python, où l'indentation 314 00:12:44,110 --> 00:12:46,030 a effectivement signification fonctionnelle, dans un 315 00:12:46,030 --> 00:12:47,150 langage comme le C - 316 00:12:47,150 --> 00:12:49,140 comme nous le verrons, PHP, JavaScript - 317 00:12:49,140 --> 00:12:51,940 l'indentation est vraiment juste pour le bénéfice des humains. 318 00:12:51,940 --> 00:12:55,690 Donc, le fait que je suis en retrait lignes 16 et 17 ressemble beaucoup, 319 00:12:55,690 --> 00:12:57,530 mais il n'a pas de signification fonctionnelle ici. 320 00:12:57,530 --> 00:13:00,700 Si je veux les deux lignes à exécuter dans le cadre de l'd' 321 00:13:00,700 --> 00:13:05,140 boucle, alors je dois les enfermer dans des accolades en faisant cela. 322 00:13:05,140 --> 00:13:08,540 Vous ne pouvez couper ce coin et omettre les accolades si 323 00:13:08,540 --> 00:13:10,036 ce qui est le cas? 324 00:13:10,036 --> 00:13:10,410 PUBLIC: Une seule ligne. 325 00:13:10,410 --> 00:13:11,130 DAVID J. MALAN: Une seule ligne. 326 00:13:11,130 --> 00:13:15,280 Donc, c'est juste une sorte de tri agréable de détail syntaxe afin de 327 00:13:15,280 --> 00:13:17,900 vous ne perdez pas de temps à écrire trois lignes, dont deux sont 328 00:13:17,900 --> 00:13:20,040 accolades, juste pour écrire une seule ligne de code. 329 00:13:20,040 --> 00:13:21,650 Mais si vous avez deux ou plusieurs lignes, nous 330 00:13:21,650 --> 00:13:22,860 en effet besoin de faire cela. 331 00:13:22,860 --> 00:13:24,210 >> Alors maintenant, laissez-moi sauver ce. 332 00:13:24,210 --> 00:13:27,140 Permettez-moi aller de l'avant et relancer Clang. 333 00:13:27,140 --> 00:13:31,375 Alors laissez-moi relancer a.out, et maintenant je reçois les un par ligne. 334 00:13:31,375 --> 00:13:33,670 Maintenant, a.out est de nouveau genre d'un nom stupide pour un programme. 335 00:13:33,670 --> 00:13:37,500 Comment puis-je savoir Clang réellement me donner un nom de fichier 336 00:13:37,500 --> 00:13:39,820 c'est plus convivial, comme buggy2 lui-même? 337 00:13:43,200 --> 00:13:44,466 Un peu plus clairement? 338 00:13:44,466 --> 00:13:45,220 PUBLIC: [Inaudible]. 339 00:13:45,220 --> 00:13:47,810 DAVID J. MALAN: OK, pour que je puisse prendre la très 340 00:13:47,810 --> 00:13:51,000 conviviale raccourci et il suffit d'écrire buggy2 faire. 341 00:13:51,000 --> 00:13:53,840 Je ne le précise pas. C dans ce cas, et appuyez sur Entrée. 342 00:13:53,840 --> 00:13:58,530 Et ce qui rend le fait est qu'il compile buggy2.c pour moi par 343 00:13:58,530 --> 00:14:00,260 Clang demandant de le faire. 344 00:14:00,260 --> 00:14:05,100 Plus précisément, il appelle Clang, il fonctionne Clang en utilisant de façon plus 345 00:14:05,100 --> 00:14:08,540 de ligne de commande arguments ou des commutateurs que je réellement besoin. 346 00:14:08,540 --> 00:14:11,270 Avec le temps, nous allons revenir à ce que l'ensemble de ces différents 347 00:14:11,270 --> 00:14:13,810 énigmatiques expressions trait d'union signifie. 348 00:14:13,810 --> 00:14:16,910 Mais pour l'instant, c'est juste de me sauver la peine de 349 00:14:16,910 --> 00:14:19,600 avoir à se rappeler et d'avoir à taper tous ceux 350 00:14:19,600 --> 00:14:21,150 diverses expressions trait d'union. 351 00:14:21,150 --> 00:14:23,240 Et la hausse de celui-ci est finalement 352 00:14:23,240 --> 00:14:25,900 que maintenant je dois buggy2. 353 00:14:25,900 --> 00:14:27,480 Si je veux le faire manuellement, cependant, je 354 00:14:27,480 --> 00:14:28,775 peuvent au contraire faire - 355 00:14:28,775 --> 00:14:34,110 clang-o buggy2 puis buggy2.c. 356 00:14:34,110 --> 00:14:37,980 Et cela même me donner un fichier appelé buggy2. 357 00:14:37,980 --> 00:14:39,710 >> Donc en bref, c'est le compilateur Clang. 358 00:14:39,710 --> 00:14:43,080 Assurez est juste un outil convivial que nous allons utiliser plus 359 00:14:43,080 --> 00:14:44,420 en plus, car il commence tout juste à 360 00:14:44,420 --> 00:14:47,330 simplifier les choses pour nous. 361 00:14:47,330 --> 00:14:49,430 Et nous retourner 0, enfin. 362 00:14:49,430 --> 00:14:51,890 Pour l'instant, parce que, mais nous allons commencer taquiner cette partie 363 00:14:51,890 --> 00:14:52,930 aujourd'hui et mercredi. 364 00:14:52,930 --> 00:14:55,560 Toutes les questions sur tout cela? 365 00:14:55,560 --> 00:14:56,450 Ouais? 366 00:14:56,450 --> 00:14:58,234 PUBLIC: [Inaudible] 367 00:14:58,234 --> 00:15:00,020 ls entre guillemets là-bas? 368 00:15:00,020 --> 00:15:01,710 DAVID J. MALAN: OK. 369 00:15:01,710 --> 00:15:05,880 Quand je ls typées entre guillemets, qui me font un peu de magie 370 00:15:05,880 --> 00:15:07,160 dans les coulisses pour corriger un bug. 371 00:15:07,160 --> 00:15:09,370 J'ai oublié, comme nous avons dit beaucoup d'entre vous sur le 372 00:15:09,370 --> 00:15:11,600 forums de discussion, à faire - 373 00:15:11,600 --> 00:15:17,220 nous allons le faire maintenant - sudo yum-y appliance50 mise à jour. 374 00:15:17,220 --> 00:15:19,790 Oups, que ce n'est orthographié. 375 00:15:19,790 --> 00:15:23,240 Ainsi, l'appareil est comme un système d'exploitation. 376 00:15:23,240 --> 00:15:25,650 Il fonctionne ce système d'exploitation appelé Fedora. 377 00:15:25,650 --> 00:15:27,450 Et maintenant, à cause de ma connexion Internet est lente, j'ai 378 00:15:27,450 --> 00:15:28,260 vraiment arrosé. 379 00:15:28,260 --> 00:15:31,620 Il faut donc lancer yum update sudo, comme nous vous disons de faire dans le 380 00:15:31,620 --> 00:15:34,080 problème posé, est essentiellement envie de courir mises à jour automatiques 381 00:15:34,080 --> 00:15:35,420 sous Mac OS ou Windows. 382 00:15:35,420 --> 00:15:37,280 Et la raison de l'exécution de ce dès le début de la 383 00:15:37,280 --> 00:15:39,640 ensemble de problèmes parce que quand nous avons créé l'appareil, je 384 00:15:39,640 --> 00:15:42,480 foiré, et j'ai accidentellement fait tous vos programmes regardent 385 00:15:42,480 --> 00:15:45,210 noir sur un écran noir, ce qui explique pourquoi vous ne les voyant pas 386 00:15:45,210 --> 00:15:45,860 par défaut. 387 00:15:45,860 --> 00:15:48,020 Mais la dernière version de l'appareil corrige cela. 388 00:15:48,020 --> 00:15:50,500 Et je vais arranger ça pendant la pause une fois que j'ai Internet 389 00:15:50,500 --> 00:15:51,280 connectivité. 390 00:15:51,280 --> 00:15:54,630 >> Ainsi, les devis simplement cache mon erreur, très discrètement, 391 00:15:54,630 --> 00:15:55,730 apparemment. 392 00:15:55,730 --> 00:15:56,980 D'autres questions? 393 00:15:59,750 --> 00:16:00,668 Oui? 394 00:16:00,668 --> 00:16:02,012 PUBLIC: Où va faire venir? 395 00:16:02,012 --> 00:16:03,810 [Inaudible] 396 00:16:03,810 --> 00:16:04,280 DAVID J. MALAN: Bonne question. 397 00:16:04,280 --> 00:16:05,460 Où faire venir? 398 00:16:05,460 --> 00:16:09,390 Il s'agit d'un programme Linux qui existe depuis de nombreuses années, à long 399 00:16:09,390 --> 00:16:10,570 avant CS50. 400 00:16:10,570 --> 00:16:12,930 Et il est livré avec un système d'exploitation comme Fedora. 401 00:16:12,930 --> 00:16:14,830 Il ne vient pas de la bibliothèque CS50. 402 00:16:14,830 --> 00:16:17,560 En fait, les seules choses qui viennent de la bibliothèque CS50 403 00:16:17,560 --> 00:16:20,470 à ce jour, que nous avons vu, sont GetString, getInt, tous 404 00:16:20,470 --> 00:16:25,550 Obtenez les fonctions, et la chaîne de mots, et dans une certaine 405 00:16:25,550 --> 00:16:26,575 mesure, le mot bool. 406 00:16:26,575 --> 00:16:29,180 Mais nous allons taquiner qu'en dehors quand nous plonger dans le CS50 407 00:16:29,180 --> 00:16:30,580 appareil lui-même. 408 00:16:30,580 --> 00:16:32,820 >> Alors oui, encore une question ici. 409 00:16:32,820 --> 00:16:36,636 PUBLIC: Quand vous dites faire et puis buggy, comment le 410 00:16:36,636 --> 00:16:39,980 ordinateur sait [inaudible]? 411 00:16:39,980 --> 00:16:40,520 DAVID J. MALAN: Bonne question. 412 00:16:40,520 --> 00:16:43,830 Alors, quand vous venez de lancer make buggy1 ou faire buggy2, comment 413 00:16:43,830 --> 00:16:45,220 ne faire connaître? 414 00:16:45,220 --> 00:16:49,900 Donc, par défaut, si vous tapez make buggy1, assurez-regards pour un 415 00:16:49,900 --> 00:16:52,330 fichier appelé buggy1.c. 416 00:16:52,330 --> 00:16:55,570 Et puis il exécute les commandes appropriées Clang, 417 00:16:55,570 --> 00:17:00,380 annulant ainsi le fichier de sortie par défaut appelé a.out. 418 00:17:00,380 --> 00:17:03,670 En fait, si on regarde ce que font, ce qui - 419 00:17:03,670 --> 00:17:04,839 nous allons quitter ce. 420 00:17:04,839 --> 00:17:09,530 Si nous regardons ce que font faisait en réalité, faire buggy2, 421 00:17:09,530 --> 00:17:10,470 il est déjà à jour. 422 00:17:10,470 --> 00:17:13,020 Alors laissez-moi retirer la commande rm, le 423 00:17:13,020 --> 00:17:14,319 programme que j'ai écrit auparavant. 424 00:17:14,319 --> 00:17:17,319 Taper Y-E-S pour confirmer que je veux l'enlever. 425 00:17:17,319 --> 00:17:20,480 Si je fais maintenant faire, notez que dans cette très longue ligne, 426 00:17:20,480 --> 00:17:22,980 il ya cette dernière chose ici,-o buggy2. 427 00:17:22,980 --> 00:17:26,959 Toutes les marque ne fait que passer cet argument, pour ainsi dire, à 428 00:17:26,959 --> 00:17:29,665 Clang, de sorte que je n'ai pas à le taper moi-même. 429 00:17:29,665 --> 00:17:32,660 >> D'accord, donc un couple rapide administrative 430 00:17:32,660 --> 00:17:33,470 annonces. 431 00:17:33,470 --> 00:17:36,940 Donc, pour les sections, qui a débuté officiellement prochain 432 00:17:36,940 --> 00:17:38,970 Dimanche, vous aurez toujours besoin d'apporter, si 433 00:17:38,970 --> 00:17:40,120 vous en avez un, un ordinateur portable. 434 00:17:40,120 --> 00:17:42,570 Si vous ne disposez pas d'un ordinateur portable, ne toucher à moi par 435 00:17:42,570 --> 00:17:43,580 tomber moi un email. 436 00:17:43,580 --> 00:17:44,810 Et nous allons trouver un workflow. 437 00:17:44,810 --> 00:17:47,100 Qu'est-ce généralement que vous trouverez dans la section est qu'ils font partie 438 00:17:47,100 --> 00:17:48,770 conceptuel, une partie pratique. 439 00:17:48,770 --> 00:17:52,190 Nous allons utiliser la section spécifiquement de questions, une partie de 440 00:17:52,190 --> 00:17:54,110 problème posé de la semaine, de marcher à travers une partie de la 441 00:17:54,110 --> 00:17:55,820 matériel conceptuel de conférence. 442 00:17:55,820 --> 00:17:57,480 Et c'est tout dans le jeu problématique actuelle. 443 00:17:57,480 --> 00:18:00,010 Et nous allons également plonger dans certaines activités mains sur, parfois 444 00:18:00,010 --> 00:18:02,190 qui devront être soumis, parfois de 445 00:18:02,190 --> 00:18:02,830 qui ne sera pas. 446 00:18:02,830 --> 00:18:04,630 Par exemple, cette première semaine, ils sont faits comme un 447 00:18:04,630 --> 00:18:05,780 exercice d'échauffement. 448 00:18:05,780 --> 00:18:07,800 Et vous verrez que ces problèmes sont vraiment juste cela. 449 00:18:07,800 --> 00:18:10,220 Ils sont censés être assez petite, mais pas nécessairement 450 00:18:10,220 --> 00:18:13,100 programmes trivial d'écrire, qui ne sont pas nécessairement 451 00:18:13,100 --> 00:18:16,230 intéressantes en elles-mêmes, mais sont de bonnes occasions pour 452 00:18:16,230 --> 00:18:19,620 pratiquer avec la syntaxe, avec de nouvelles fonctions, dans le confort d'un 453 00:18:19,620 --> 00:18:21,900 section où vous avez un peu de vos camarades de classe présentent comme 454 00:18:21,900 --> 00:18:22,870 ainsi que votre carte de TF. 455 00:18:22,870 --> 00:18:26,210 >> Et ce que nous ferons au cours du temps est d'utiliser un outil appelé CS50 espaces, 456 00:18:26,210 --> 00:18:28,940 où au lieu de simplement utiliser l'appareil CS50, vous aurez 457 00:18:28,940 --> 00:18:32,450 allez plutôt vers une page Web dans un navigateur, où vous pourrez 458 00:18:32,450 --> 00:18:35,610 écrire du code dans une fenêtre du navigateur pendant section. 459 00:18:35,610 --> 00:18:38,240 Et puis, si vous optez, votre adjoint à l'enseignement peut alors montrer 460 00:18:38,240 --> 00:18:40,980 quoi que ce soit que vous tapez sur votre écran dans votre navigateur 461 00:18:40,980 --> 00:18:43,930 fenêtre à l'avant de la classe, que ce soit anonyme ou 462 00:18:43,930 --> 00:18:47,250 publiquement, afin qu'il ou elle peut alors traverser avec 463 00:18:47,250 --> 00:18:50,080 tes camarades de classe que vous avez bien fait, ce que vous n'avez pas bien. 464 00:18:50,080 --> 00:18:52,750 Et encore une fois, rassurez-vous tout cela peut être bien anonymisée. 465 00:18:52,750 --> 00:18:54,410 Mais ce sera une belle occasion pour beaucoup plus 466 00:18:54,410 --> 00:18:56,810 l'interactivité que quelque chose comme exposé le permet. 467 00:18:56,810 --> 00:18:58,910 >> En attendant, nous aurons ces choses appelées super- 468 00:18:58,910 --> 00:19:01,610 sections, qui sont facultatives, mais sont ouverts à tout le monde dans 469 00:19:01,610 --> 00:19:04,030 la classe, de sorte que vous pouvez le faire plus collectivement pour 470 00:19:04,030 --> 00:19:05,190 problème défini un. 471 00:19:05,190 --> 00:19:06,010 Voici l'horaire. 472 00:19:06,010 --> 00:19:08,870 Ceci est également affiché sur la page d'accueil de cs50.net. 473 00:19:08,870 --> 00:19:10,850 Notez qu'il y aura un pirate spécifique 474 00:19:10,850 --> 00:19:12,430 un après-midi de demain. 475 00:19:12,430 --> 00:19:15,460 Et nous allons filmer un aujourd'hui et un demain et après les 476 00:19:15,460 --> 00:19:16,720 en ligne dans les 24 heures. 477 00:19:16,720 --> 00:19:19,370 Donc, si vous ne pouvez pas faire de l'une de ces fois, ne vous inquiétez pas. 478 00:19:19,370 --> 00:19:22,720 Et encore une fois, le calendrier est en ligne maintenant sur cs50.net. 479 00:19:22,720 --> 00:19:25,350 >> Pour ce qui est de lui-même la coupe, vous devriez avoir obtenu un 480 00:19:25,350 --> 00:19:28,520 courriel vous demandant d'aller à l'accueil du cours pour trouver 481 00:19:28,520 --> 00:19:29,610 sur votre article. 482 00:19:29,610 --> 00:19:32,890 Si la vie a changé et vous avez besoin de changer votre section, 483 00:19:32,890 --> 00:19:33,560 pas un problème. 484 00:19:33,560 --> 00:19:37,900 Retour à la même URL, cs50.net/section, singulier, 485 00:19:37,900 --> 00:19:40,090 et vous remplirez le formulaire de similaire afin que vous puissiez 486 00:19:40,090 --> 00:19:41,260 puis indiquer vos préférences. 487 00:19:41,260 --> 00:19:43,360 Et nous allons suivre jusqu'à la fin de semaine à ce que nous pouvons 488 00:19:43,360 --> 00:19:44,240 accueillir. 489 00:19:44,240 --> 00:19:49,530 La semaine dernière, rappelons que nous avons proposé d'utiliser CS50 discuter, 490 00:19:49,530 --> 00:19:51,370 outil de discussion du cours, dans la conférence. 491 00:19:51,370 --> 00:19:53,680 Donc, nous avons eu 40 questions qui ont été posées et 492 00:19:53,680 --> 00:19:54,720 réponse au cours de conférences. 493 00:19:54,720 --> 00:19:56,280 Ainsi, il semble bien fonctionner, donc nous allons continuer 494 00:19:56,280 --> 00:19:57,180 essayez de le faire. 495 00:19:57,180 --> 00:19:59,600 Si, au cours de conférence, vous ne vous sentez à l'aise élevage 496 00:19:59,600 --> 00:20:00,780 votre main, pas un problème. 497 00:20:00,780 --> 00:20:04,640 Aller à la cs50.net/discuss, y poster, et l'un de nos enseignements 498 00:20:04,640 --> 00:20:07,270 boursiers, soit y répondre par voie électronique ou augmenter leur 499 00:20:07,270 --> 00:20:10,620 main sur votre compte anonyme pour demander, selon 500 00:20:10,620 --> 00:20:12,470 de la nature de la cause. 501 00:20:12,470 --> 00:20:15,000 Et en termes de rétroaction, généralement psets sera 502 00:20:15,000 --> 00:20:16,760 retour dans une semaine. 503 00:20:16,760 --> 00:20:19,080 Parce que ça prend un peu de temps pour les sections d'atteindre 504 00:20:19,080 --> 00:20:22,430 équilibre, le pset abord, 0 et 1, sera un peu 505 00:20:22,430 --> 00:20:24,130 retardé les choses se calment. 506 00:20:24,130 --> 00:20:27,130 Mais restez à l'écoute pour que, dans les semaines à venir. 507 00:20:27,130 --> 00:20:29,750 >> Très bien, alors permettez-moi de mettre mon sérieux 508 00:20:29,750 --> 00:20:31,040 la voix pendant un moment. 509 00:20:31,040 --> 00:20:32,690 Donc, il s'agit en fait d'un climat intéressant de 510 00:20:32,690 --> 00:20:35,210 d'avoir cette discussion, ce avec tous les autres 511 00:20:35,210 --> 00:20:37,310 passe sur le campus qui y est associée. 512 00:20:37,310 --> 00:20:40,220 Mais CS50 a certainement eu son histoire particulière de cette 513 00:20:40,220 --> 00:20:43,360 sujet, dans la mesure où chaque année, ce parcours, pour beaucoup 514 00:20:43,360 --> 00:20:46,910 ans, Ad-conseils à peu près 3% de la classe. 515 00:20:46,910 --> 00:20:51,620 Cette année la plus récente, 2011, Ad-CS50 embarqué 35 élèves. 516 00:20:51,620 --> 00:20:54,120 Ce n'est pas, je pense, à cause du manque de clarté. 517 00:20:54,120 --> 00:20:56,760 N'oublie pas que dans syllabus du cours, il ya une page d' 518 00:20:56,760 --> 00:20:59,020 déclaration expliquant où les lignes sont. 519 00:20:59,020 --> 00:21:01,350 Cette déclaration est répété sur chacun des 520 00:21:01,350 --> 00:21:03,070 problème se couche sur la première page. 521 00:21:03,070 --> 00:21:05,760 >> Donc je mentionne cela aujourd'hui vraiment juste pour faire 522 00:21:05,760 --> 00:21:07,030 les gens conscients de cela. 523 00:21:07,030 --> 00:21:08,080 Et nous avons essayé différentes choses. 524 00:21:08,080 --> 00:21:10,630 Et ce que je pensais que nous ferions aujourd'hui est tout simplement prendre un moment pour 525 00:21:10,630 --> 00:21:13,830 effectivement regarder quelques-uns des cas antérieurs qui ont été soulevées. 526 00:21:13,830 --> 00:21:16,160 Plutôt que de garder ces secrets que sales petits, en fait 527 00:21:16,160 --> 00:21:19,170 souligner que les élèves ont fait et comment nous avons détecté 528 00:21:19,170 --> 00:21:21,630 il et vraiment ce que la motivation est primordiale pour 529 00:21:21,630 --> 00:21:23,950 même d'avoir cette conversation. 530 00:21:23,950 --> 00:21:27,060 Donc, avec cela dit, la ligne est essentiellement présent - 531 00:21:27,060 --> 00:21:29,200 par le programme, vous êtes les bienvenus, vous êtes encouragés à 532 00:21:29,200 --> 00:21:30,210 parler avec ses camarades de classe. 533 00:21:30,210 --> 00:21:31,910 C'est tout le but d'avoir ces collaborative 534 00:21:31,910 --> 00:21:34,470 les heures de bureau en Annenberg et d'encourager les gens à l' 535 00:21:34,470 --> 00:21:35,755 projet final de travailler ensemble. 536 00:21:35,755 --> 00:21:38,590 Mais la ligne est tracée lorsque vient le temps de réellement écrire 537 00:21:38,590 --> 00:21:39,790 votre solution finale. 538 00:21:39,790 --> 00:21:42,590 S'exprimant en anglais, tout à fait bien, parlant en pseudo-code, 539 00:21:42,590 --> 00:21:43,400 tout à fait bien. 540 00:21:43,400 --> 00:21:46,340 Emailing un camarade de classe de votre pset, les laisser regarder par-dessus 541 00:21:46,340 --> 00:21:48,610 l'écran, comme les mains continuez à taper, 542 00:21:48,610 --> 00:21:50,110 sur la ligne aussi bien. 543 00:21:50,110 --> 00:21:52,250 Ne se tourner vers le programme pour les lignes particulières. 544 00:21:52,250 --> 00:21:55,850 >> Mais juste pour brosser un tableau de la façon dont cela est malheureusement un 545 00:21:55,850 --> 00:21:58,370 réalité, se rendre compte que il ya des sites là-bas qui 546 00:21:58,370 --> 00:22:01,490 des solutions de cette classe et de nombreux autres classes. 547 00:22:01,490 --> 00:22:04,940 Le fait que vous ou quelque 3% d'entre vous savent que cela existe 548 00:22:04,940 --> 00:22:07,240 signifie que nous savons que cela existe. 549 00:22:07,240 --> 00:22:09,340 Le fait qu'il existe des sites comme celui-ci où vous 550 00:22:09,340 --> 00:22:11,540 pouvez payer quelqu'un pour réellement faire vos ensembles de problèmes - ce n'était 551 00:22:11,540 --> 00:22:13,450 un cas réel qui a été soulevée l'an dernier. 552 00:22:13,450 --> 00:22:15,790 Il s'agit d'un site Web appelé odesk.com. 553 00:22:15,790 --> 00:22:20,090 Et Tim était le nom de la personne ici qui a été affiché sur 554 00:22:20,090 --> 00:22:24,580 ce site et demandé à quelqu'un de faire son pset 7 en 555 00:22:24,580 --> 00:22:25,570 ce cas particulier. 556 00:22:25,570 --> 00:22:28,350 Eh bien, odesk.com Google est très faisable, et nous aussi nous sommes 557 00:22:28,350 --> 00:22:30,310 très bon à googler. 558 00:22:30,310 --> 00:22:32,360 Ici aussi, il ya des sites - et celui-ci est plutôt 559 00:22:32,360 --> 00:22:34,234 atroce, franchement. 560 00:22:34,234 --> 00:22:38,050 [RIRES] 561 00:22:38,050 --> 00:22:39,610 DAVID J. MALAN: La chose drôle au sujet de ce site est si 562 00:22:39,610 --> 00:22:41,970 vous lisez la page À propos, ils parlent de leur entreprise 563 00:22:41,970 --> 00:22:44,390 service à la clientèle de la culture et comment est leur principale 564 00:22:44,390 --> 00:22:46,190 priorité, afin de s'assurer que vos missions se 565 00:22:46,190 --> 00:22:47,890 tourné dans le temps. 566 00:22:47,890 --> 00:22:50,580 >> Mais en toute sincérité, encore une fois, le fait que ces sites 567 00:22:50,580 --> 00:22:52,910 existent, nous nous rendons compte, aussi, sont conscients de 568 00:22:52,910 --> 00:22:53,730 ces types de sites. 569 00:22:53,730 --> 00:22:55,890 Et pour vous donner une idée de ce que cette forme générale, 570 00:22:55,890 --> 00:22:58,570 prend, nous n'avons généralement pas de grands scandales où les gens 571 00:22:58,570 --> 00:23:01,080 collaborent à n'importe quel type de grande échelle, mais plutôt 572 00:23:01,080 --> 00:23:04,540 ce sont ces moments de fin de soirée de faiblesse, où vous avez tant 573 00:23:04,540 --> 00:23:07,550 beaucoup à faire, c'est 04h00, vous êtes épuisé, et vous 574 00:23:07,550 --> 00:23:09,770 pensez à vous-même, eh bien, laissez-moi juste jeter un oeil à mon 575 00:23:09,770 --> 00:23:11,770 colocataire ou un code de mon ami ou similaire. 576 00:23:11,770 --> 00:23:14,800 Et les manifestations de cette malheureusement impliquer des étudiants 577 00:23:14,800 --> 00:23:17,640 A quelque chose comme ceci soumettre et de soumettre l'élève B 578 00:23:17,640 --> 00:23:20,370 quelque chose comme ça, qui certainement, dans un ordinateur 579 00:23:20,370 --> 00:23:23,830 classe de science, est remarquablement facile pour les informaticiens 580 00:23:23,830 --> 00:23:25,690 à détecter avec un logiciel. 581 00:23:25,690 --> 00:23:28,410 Ceci est un autre paradigme commun, où vous avez sorte d' 582 00:23:28,410 --> 00:23:31,010 travaille aux côtés de quelqu'un, peut-être parler dans 583 00:23:31,010 --> 00:23:32,360 Anglais, très bien, pseudo-code. 584 00:23:32,360 --> 00:23:35,080 Mais alors vient le temps de soumettre effectivement, et les psets 585 00:23:35,080 --> 00:23:37,910 juste obtenir échangées via e-mail ou Dropbox ou similaire. 586 00:23:37,910 --> 00:23:41,120 Mais dans une tentative de le rendre moins évident que ce n'est 587 00:23:41,120 --> 00:23:44,830 ce qui s'est passé, alors c'est ce qui est présenté. 588 00:23:44,830 --> 00:23:47,880 Cela aussi ne se déclenche pas en place bien écrit des pièces de 589 00:23:47,880 --> 00:23:50,360 logiciel comme nous devons effectivement détecter 590 00:23:50,360 --> 00:23:51,280 ces sortes de choses. 591 00:23:51,280 --> 00:23:53,760 Et en effet, ce que nous faisons est un logiciel qui compare l'exécution de tous les 592 00:23:53,760 --> 00:23:55,540 cette année mémoires contre tous passé l'année 593 00:23:55,540 --> 00:23:57,380 mémoires, contre tout ce qu'on a trouvé sur le 594 00:23:57,380 --> 00:24:00,060 Internet, contre tous les sites d'emploi là-bas. 595 00:24:00,060 --> 00:24:01,710 Tout cela est très automatisé. 596 00:24:01,710 --> 00:24:05,665 Et si nous le faisons vraiment, en toute équité idéal pour les 97% qui 597 00:24:05,665 --> 00:24:07,760 travaillent vraiment leurs ânes off dans ce domaine et dans d'autres 598 00:24:07,760 --> 00:24:11,530 les classes et les mettre dans tous ces efforts afin que le travail 599 00:24:11,530 --> 00:24:13,030 ils finissent par présenter leur est propre. 600 00:24:13,030 --> 00:24:14,220 Et je peux continuer pendant des siècles. 601 00:24:14,220 --> 00:24:16,030 >> Ce ne sont que quelques cas l'an dernier. 602 00:24:16,030 --> 00:24:19,350 Quelques étudiants ont soumis ces fichiers de manière identique pour pset 2, 603 00:24:19,350 --> 00:24:22,460 pset 3, pset 4, pset 5, pset 6, pset 9. 604 00:24:22,460 --> 00:24:26,360 Dans ce cas, ce n'était quiz 0 et l'année dernière, où deux 605 00:24:26,360 --> 00:24:29,570 élèves soumis à l'identique cette phrase parmi tant d'autres 606 00:24:29,570 --> 00:24:32,210 d'autres, «La demande de type -" dot, dot, dot. 607 00:24:32,210 --> 00:24:34,530 Ainsi, même dans une classe de 600 en sommes-nous détecter ce 608 00:24:34,530 --> 00:24:36,310 sur des questionnaires soumis. 609 00:24:36,310 --> 00:24:39,080 Donc, en résumé, ce - franchement, je déteste avoir ce genre de 610 00:24:39,080 --> 00:24:41,300 conversation - mais c'est vraiment un effort délibéré 611 00:24:41,300 --> 00:24:43,540 cette année pour essayer de faire baisser ce nombre. 612 00:24:43,540 --> 00:24:45,650 Parce que même si on dit ce genre de choses tous les 613 00:24:45,650 --> 00:24:48,100 année, je pense que la réalité d'avoir appesanti sur elle pour quelques-uns 614 00:24:48,100 --> 00:24:50,800 Il reste secondes que d'habitude et fait simplement remarquer 615 00:24:50,800 --> 00:24:53,600 que ce qui peut sembler être, hein, pas une grosse affaire, au moins 616 00:24:53,600 --> 00:24:56,390 repense à ce moment particulier, à la fois en toute équité pour 617 00:24:56,390 --> 00:25:00,100 vous-même et à vos camarades de classe ici. 618 00:25:00,100 --> 00:25:02,480 Donc si jamais vous avez des questions sur l'endroit où la ligne 619 00:25:02,480 --> 00:25:04,290 est, s'il vous plaît juste tendre la main, à moi personnellement. 620 00:25:04,290 --> 00:25:07,190 Mais la réponse est toujours, complètement stressé à l' 621 00:25:07,190 --> 00:25:09,090 dernière minute, l'argent dans un jour de retard. 622 00:25:09,090 --> 00:25:11,080 Ou si c'est une question de ne pas avoir de jours de retard, 623 00:25:11,080 --> 00:25:12,900 Honnêtement, envoyez-moi personnellement. 624 00:25:12,900 --> 00:25:14,110 Nous allons trouver quelque chose. 625 00:25:14,110 --> 00:25:17,480 S'il vous plaît ne mettez pas votre temps ici à Harvard en danger. 626 00:25:17,480 --> 00:25:18,570 >> Maintenant, je pense que nous devrions alléger l'atmosphère, donc je 627 00:25:18,570 --> 00:25:20,264 inclus ce que la diapositive suivante. 628 00:25:20,264 --> 00:25:22,770 [RIRES] 629 00:25:22,770 --> 00:25:23,630 DAVID J. MALAN: Ce site est super. 630 00:25:23,630 --> 00:25:24,820 En fait, je suis un peu distrait. 631 00:25:24,820 --> 00:25:26,330 Il ya celui-ci. 632 00:25:26,330 --> 00:25:29,590 Et puis celui-ci était incroyable. 633 00:25:29,590 --> 00:25:35,190 Bon, alors pensez à ce chaton tard dans la nuit lors d' 634 00:25:35,190 --> 00:25:36,040 ces décisions. 635 00:25:36,040 --> 00:25:40,110 Bon, revenons donc à des trucs plus fun et moins graves, comme 636 00:25:40,110 --> 00:25:40,780 conditions. 637 00:25:40,780 --> 00:25:43,900 >> D'accord, donc nous avons parlé brièvement à ce sujet. 638 00:25:43,900 --> 00:25:46,080 C'est quelque chose qui est probablement assez familier de 639 00:25:46,080 --> 00:25:47,260 le monde de Scratch. 640 00:25:47,260 --> 00:25:49,860 Et dans le monde de Scratch, nous avons ce besoin parfois d' 641 00:25:49,860 --> 00:25:51,110 aller faire les fourches de la route. 642 00:25:51,110 --> 00:25:54,840 Soit faire ceci ou cela ou cette autre chose ici. 643 00:25:54,840 --> 00:25:58,990 Et quand nous voulons le faire, nous pouvons utiliser, en C maintenant, si ce 644 00:25:58,990 --> 00:26:00,860 else. 645 00:26:00,860 --> 00:26:06,420 Et puis ici, nous avons des expressions booléennes. 646 00:26:06,420 --> 00:26:09,260 Par exemple, les expressions booléennes ici, nous pouvons OU 647 00:26:09,260 --> 00:26:12,260 leur ensemble, dans le sens que nous avons cette condition OU 648 00:26:12,260 --> 00:26:13,200 à cette condition. 649 00:26:13,200 --> 00:26:15,100 Nous pouvons et nous leur ensemble, dans le sens que nous voulons 650 00:26:15,100 --> 00:26:17,710 vérifier cette condition et à cette condition. 651 00:26:17,710 --> 00:26:22,440 Et ici nous avons une instruction switch maintenant, ce qui n'est pas le cas 652 00:26:22,440 --> 00:26:26,040 syntaxiquement similaire à ce genre de conditions, mais il 653 00:26:26,040 --> 00:26:30,160 nous permet de faire l'équivalent de if, else if, else if, else 654 00:26:30,160 --> 00:26:34,990 si, et analogues par simple énumération cas par cas 655 00:26:34,990 --> 00:26:36,670 par au cas par cas. 656 00:26:36,670 --> 00:26:38,370 Donc, nous avons vu ceux dernière fois. 657 00:26:38,370 --> 00:26:40,430 Et puis nous avons commencé à toucher à des choses comme les boucles. 658 00:26:40,430 --> 00:26:42,070 Nous avons vu l'un de ces tout à l'heure. 659 00:26:42,070 --> 00:26:44,180 Mais il ya ces autres constructions en boucle. 660 00:26:44,180 --> 00:26:46,370 >> Par exemple, celui-là. 661 00:26:46,370 --> 00:26:50,140 Ainsi, alors que (condition), faire cette chose encore et encore. 662 00:26:50,140 --> 00:26:53,070 Donc, fondamentalement, ce qui semble être différente entre cette 663 00:26:53,070 --> 00:26:55,760 boucle for et cette boucle while ici? 664 00:27:00,810 --> 00:27:05,045 Cette boucle for et cette boucle while. 665 00:27:05,045 --> 00:27:07,840 Ouais? 666 00:27:07,840 --> 00:27:08,800 Qu'est-ce que c'est? 667 00:27:08,800 --> 00:27:10,050 PUBLIC: [Inaudible]. 668 00:27:14,632 --> 00:27:15,120 DAVID J. MALAN: Bon. 669 00:27:15,120 --> 00:27:17,130 Ainsi, alors que dans la condition de la boucle pour, il ya clairement 670 00:27:17,130 --> 00:27:17,940 syntaxe plus. 671 00:27:17,940 --> 00:27:20,560 Il ya cette initialisation, il ya cette mise à jour. 672 00:27:20,560 --> 00:27:23,820 Dans une boucle while, il ya juste cette condition. 673 00:27:23,820 --> 00:27:26,630 Il semble donc que c'est un peu rogné par rapport à l'd' 674 00:27:26,630 --> 00:27:28,770 boucle, ce qui signifie que si nous voulons avoir des variables et nous voulons 675 00:27:28,770 --> 00:27:30,800 d'avoir incrémentation, nous avons à 676 00:27:30,800 --> 00:27:32,500 faire cette chose nous-mêmes. 677 00:27:32,500 --> 00:27:34,420 >> Alors laissez-moi aller de l'avant et d'ouvrir gedit. 678 00:27:34,420 --> 00:27:36,320 Permettez-moi de passer à l'appareil. 679 00:27:36,320 --> 00:27:38,110 Et nous allons juste faire un petit exemple que peu 680 00:27:38,110 --> 00:27:40,550 distingue une d'entre elles à partir de l'autre. 681 00:27:40,550 --> 00:27:42,490 Et dans le fond de mon esprit ici, je dois dire une chose. 682 00:27:42,490 --> 00:27:44,120 J'ai spécifiquement mentionné le nom de Tim. 683 00:27:44,120 --> 00:27:47,740 Tim était effectivement quelqu'un que l'élève a essayé de trouver à faire 684 00:27:47,740 --> 00:27:48,680 leurs devoirs pour eux. 685 00:27:48,680 --> 00:27:51,280 Nous n'avions pas de Tim dans cette section particulière. 686 00:27:51,280 --> 00:27:53,690 Donc réaliser, de peur que je l'ai révélée un étudiant, ce n'était pas un étudiant. 687 00:27:53,690 --> 00:27:55,720 Il s'agissait d'une personne prise au hasard sur Internet faire les choses 688 00:27:55,720 --> 00:27:57,180 l'année dernière par procuration. 689 00:27:57,180 --> 00:27:58,670 Ainsi, nous constatons que, trop. 690 00:27:58,670 --> 00:28:00,630 Donc dans ce cas là, laissez-moi aller de l'avant et 691 00:28:00,630 --> 00:28:02,810 ouvrir un nouveau fichier. 692 00:28:02,810 --> 00:28:04,800 Fichier, Nouveau. 693 00:28:04,800 --> 00:28:06,050 Cela me donne un onglet ici. 694 00:28:06,050 --> 00:28:09,940 Permettez-moi aller de l'avant et de l'enregistrer en tant loop.c. 695 00:28:09,940 --> 00:28:11,810 Laisse-moi aller, puis cliquez sur Enregistrer. 696 00:28:11,810 --> 00:28:15,340 Et puis ici, nous allons aller de l'avant et commencer à écrire 697 00:28:15,340 --> 00:28:16,605 # Include. 698 00:28:19,116 --> 00:28:20,520 Permettez-moi de zoom avant 699 00:28:20,520 --> 00:28:23,410 Maintenant, nous ferons int main (void). 700 00:28:23,410 --> 00:28:30,020 Maintenant, laissez-moi aller de l'avant et de faire for (int i = 0; i < 701 00:28:30,020 --> 00:28:33,480 oh, 10; i + +). 702 00:28:33,480 --> 00:28:36,620 Et maintenant, je vais aller de l'avant et ne imprimer la star que je 703 00:28:36,620 --> 00:28:37,890 fait plus tôt. 704 00:28:37,890 --> 00:28:39,390 Et puis à la fin de ce programme, nous allons juste 705 00:28:39,390 --> 00:28:41,130 imprimer une nouvelle ligne, juste pour que mon prompt 706 00:28:41,130 --> 00:28:42,470 ne regarde pas tout désordre. 707 00:28:42,470 --> 00:28:45,170 retourner 0. 708 00:28:45,170 --> 00:28:47,610 Semblent syntaxiquement correct? 709 00:28:47,610 --> 00:28:48,040 Jusqu'ici. 710 00:28:48,040 --> 00:28:48,560 Alors voyons voir. 711 00:28:48,560 --> 00:28:51,290 >> Permettez-moi de faire un zoom arrière, aller dans ma fenêtre de terminal. 712 00:28:51,290 --> 00:28:54,570 Et laissez-moi aller de l'avant et d'exécuter la boucle, parce que j'ai appelé cette 713 00:28:54,570 --> 00:28:55,690 loop.c. chose 714 00:28:55,690 --> 00:28:56,780 Donc, assurez-boucle. 715 00:28:56,780 --> 00:28:57,840 Semble compiler OK. 716 00:28:57,840 --> 00:29:00,210 Permettez-moi de fonctionner en boucle, et maintenant sur Entrée. 717 00:29:00,210 --> 00:29:01,820 Et il semble avoir imprimé 10 étoiles. 718 00:29:01,820 --> 00:29:03,780 Alors disons simplement convertir cela en une boucle while et voir ce que 719 00:29:03,780 --> 00:29:05,220 sortes de questions que nous trébucher. 720 00:29:05,220 --> 00:29:11,290 Ainsi, au lieu de cela, laissez-moi aller ici et de dire tout i est 721 00:29:11,290 --> 00:29:12,760 moins de 10 - 722 00:29:12,760 --> 00:29:14,910 permettez-moi de vous débarrasser de la boucle for. 723 00:29:14,910 --> 00:29:17,170 OK, alors nous avons un couple de problèmes déjà. 724 00:29:17,170 --> 00:29:21,110 Ainsi, la condition est la même, mais je suis évidemment à côté de la 725 00:29:21,110 --> 00:29:21,680 l'initialisation. 726 00:29:21,680 --> 00:29:23,840 Il me manque l'incrémentation. 727 00:29:23,840 --> 00:29:28,020 Alors, que devez le compilateur probablement me dire quand j'essaie d' 728 00:29:28,020 --> 00:29:29,170 compiler ce programme? 729 00:29:29,170 --> 00:29:29,666 Ouais? 730 00:29:29,666 --> 00:29:31,154 PUBLIC: [Inaudible]. 731 00:29:31,154 --> 00:29:31,650 >> DAVID J. MALAN: Bon. 732 00:29:31,650 --> 00:29:34,180 Donc, il va dire quelque chose comme non déclaré - dans ce 733 00:29:34,180 --> 00:29:35,280 cas, la variable i. 734 00:29:35,280 --> 00:29:37,980 Et en effet, l'utilisation d'identificateur non déclaré i. 735 00:29:37,980 --> 00:29:40,960 Et si cela est en contraste avec des langages comme PHP et 736 00:29:40,960 --> 00:29:43,120 Python et Ruby, avec laquelle certains d'entre vous connaissent peut-être, 737 00:29:43,120 --> 00:29:44,820 où vous pouvez juste une sorte de début à l'aide des variables 738 00:29:44,820 --> 00:29:47,420 bon gré mal gré et ne pas avoir à vous soucier de les déclarer 739 00:29:47,420 --> 00:29:48,560 explicitement toujours. 740 00:29:48,560 --> 00:29:51,770 En C et dans des langages comme Java et C + +, vous devez être 741 00:29:51,770 --> 00:29:53,020 Super explicite. 742 00:29:53,020 --> 00:29:55,760 Et si vous voulez une variable appelée i, vous avez à me dire 743 00:29:55,760 --> 00:29:57,360 quel type de variable, il est. 744 00:29:57,360 --> 00:29:59,360 Donc, nous allons devoir résoudre ce problème comme suit. 745 00:29:59,360 --> 00:30:05,510 Je vais devoir aller ici et tapez int i; par conséquent, 746 00:30:05,510 --> 00:30:07,860 J'ai déclaré une variable appelée i. 747 00:30:07,860 --> 00:30:09,180 Maintenant, j'ai sauté une étape. 748 00:30:09,180 --> 00:30:11,340 J'ai évidemment pas initialisé, mais nous allons voir si cela au 749 00:30:11,340 --> 00:30:13,650 Au arrêt Clang marques plaindre. 750 00:30:13,650 --> 00:30:15,770 Permettez-moi de refaire ce programme. 751 00:30:15,770 --> 00:30:16,770 >> Très bien, maintenant c'est juste se plaindre 752 00:30:16,770 --> 00:30:17,870 pour une raison différente. 753 00:30:17,870 --> 00:30:21,130 "La variable 'i' n'est pas initialisé quand il est utilisé ici." D'accord, alors 754 00:30:21,130 --> 00:30:22,340 c'est assez explicite. 755 00:30:22,340 --> 00:30:25,510 Initialisé signifie simplement le définissant comme égal à une valeur. 756 00:30:25,510 --> 00:30:30,820 Et nous n'avons pas fait cela, mais laissez-moi est égal à 0. 757 00:30:30,820 --> 00:30:35,030 Maintenant, nous allons essayer encore et relancer Clang. 758 00:30:35,030 --> 00:30:36,140 Compilé pour le moment. 759 00:30:36,140 --> 00:30:37,210 Et je suis sur le point de le faire fonctionner. 760 00:30:37,210 --> 00:30:43,120 Mais gros ancienne boucle infinie, parce que j'ai fait l' 761 00:30:43,120 --> 00:30:45,530 l'initialisation, j'ai fait la condition, mais je n'ai jamais fait 762 00:30:45,530 --> 00:30:47,030 tout type d'incrémentation. 763 00:30:47,030 --> 00:30:48,780 Alors, comment puis-je faire l'incrémentation? 764 00:30:48,780 --> 00:30:51,170 Eh bien, dans une boucle while, on dirait que je vais devoir 765 00:30:51,170 --> 00:30:54,180 de le faire à l'intérieur de la boucle, car tout comme la première 766 00:30:54,180 --> 00:30:56,570 semaine exemples de constructions de boucles faisant, comme avec 767 00:30:56,570 --> 00:30:59,040 les chaussettes et avec l'auto-comptage, nous avons dû faire 768 00:30:59,040 --> 00:31:01,550 quelque chose de tout à la fin, comme revenir à la ligne suivante. 769 00:31:01,550 --> 00:31:05,040 Que faire si je aller de l'avant et de le faire i + + ici? 770 00:31:05,040 --> 00:31:06,030 Disons même pas compiler ce. 771 00:31:06,030 --> 00:31:06,890 Attrape-moi déjà. 772 00:31:06,890 --> 00:31:09,704 Qu'est-ce qui ne va pas ici? 773 00:31:09,704 --> 00:31:10,690 PUBLIC: [Inaudible]. 774 00:31:10,690 --> 00:31:11,770 >> DAVID J. MALAN: Donc ce n'est certainement pas int. 775 00:31:11,770 --> 00:31:13,080 C'est i. 776 00:31:13,080 --> 00:31:15,110 Et les accolades, comme avant, 777 00:31:15,110 --> 00:31:16,800 indentation n'est pas suffisant. 778 00:31:16,800 --> 00:31:18,410 Alors maintenant, j'ai cette construction. 779 00:31:18,410 --> 00:31:21,780 Ainsi, alors que i est inférieur à 10, imprimez une étoile, 780 00:31:21,780 --> 00:31:23,220 puis incrémenter i. 781 00:31:23,220 --> 00:31:25,680 Et la façon dont un alors que les travaux de boucle est que dès que vous appuyez sur la 782 00:31:25,680 --> 00:31:29,630 bas de la boucle, qui dans ce cas ressemble à la ligne 10, 783 00:31:29,630 --> 00:31:32,880 il va revenir à la ligne 6, à quel point la 784 00:31:32,880 --> 00:31:34,400 état sera vérifié à nouveau. 785 00:31:34,400 --> 00:31:37,500 Et si i est encore inférieur à 10, nous ferons lignes 8 et 786 00:31:37,500 --> 00:31:41,250 puis 9, puis nous allons frapper 10, et de revenir à 6, encore et 787 00:31:41,250 --> 00:31:45,580 à plusieurs reprises et à nouveau, tant que i est inférieur à 10. 788 00:31:45,580 --> 00:31:47,860 Nous allons donc relancer faire ici. 789 00:31:47,860 --> 00:31:48,940 >> Ok, nous avons compilé correct. 790 00:31:48,940 --> 00:31:50,300 Permettez-moi de ré-exécuter la boucle. 791 00:31:50,300 --> 00:31:52,620 Et maintenant, il semble effectivement au travail. 792 00:31:52,620 --> 00:31:55,100 Donc avantages et des inconvénients ici? 793 00:31:55,100 --> 00:31:58,910 Eh bien, jusqu'à présent, il s'agit en fait pas un ensemble de plo - 794 00:31:58,910 --> 00:31:59,420 si mignon. 795 00:31:59,420 --> 00:32:01,870 Bon, ça a été un - ah, que c'était un accident. 796 00:32:01,870 --> 00:32:05,200 Très bien, nous allons donc revenir à la boucle for. 797 00:32:05,200 --> 00:32:07,530 Donc pour les boucles sont bien car ils sont super explicite. 798 00:32:07,530 --> 00:32:09,720 Et même si elles sont un peu maladroit d'écrire, c'est 799 00:32:09,720 --> 00:32:11,500 très puissant et il vous permet de faire 800 00:32:11,500 --> 00:32:12,980 plusieurs choses à la fois. 801 00:32:12,980 --> 00:32:16,240 Alors que les boucles ne semble pas avoir une énorme quantité de juste valeur 802 00:32:16,240 --> 00:32:18,500 encore, car il se sent comme nous avons juste à faire plus de travail. 803 00:32:18,500 --> 00:32:20,670 Nous devons mettre l'initialisation ici, l' 804 00:32:20,670 --> 00:32:23,480 mettre à jour ici-bas, et nous devons nous rappeler de faire tout cela. 805 00:32:23,480 --> 00:32:26,260 Nous allons donc voir dans le temps qui fait prêter boucles while 806 00:32:26,260 --> 00:32:29,380 eux-mêmes à peine différents contextes, différentes données 807 00:32:29,380 --> 00:32:33,900 structures telles que les listes et les tables de hachage, les choses nous allons arriver à 808 00:32:33,900 --> 00:32:34,970 mi-semestre. 809 00:32:34,970 --> 00:32:37,900 Mais pour l'instant, de savoir qu'il ya ce troisième type connu sous le nom de do- 810 00:32:37,900 --> 00:32:38,480 boucle while. 811 00:32:38,480 --> 00:32:39,540 Et nous avons vu brièvement. 812 00:32:39,540 --> 00:32:41,830 Et cela pourrait être utile super avec pset 1. 813 00:32:41,830 --> 00:32:45,570 Chaque fois que vous voulez faire quelque chose, puis vérifier si 814 00:32:45,570 --> 00:32:48,940 l'utilisateur a coopéré, et s'ils le faisaient pas, le faire à nouveau, un do- 815 00:32:48,940 --> 00:32:51,460 boucle while se prête à ce genre de logique. 816 00:32:51,460 --> 00:32:55,640 Parce que l'ordre de haut en bas ici l'indique, 817 00:32:55,640 --> 00:32:57,750 ne signifie littéralement ce faire. 818 00:32:57,750 --> 00:32:59,830 Et cela encore et encore, ce pourrait-il être? 819 00:32:59,830 --> 00:33:03,000 Peut-être que cela signifie getInt appelant ou GetString puis 820 00:33:03,000 --> 00:33:05,830 vérifiant la valeur de getInt ou GetString puis crier 821 00:33:05,830 --> 00:33:08,260 à l'utilisateur si elles n'ont pas coopéré en leur demandant 822 00:33:08,260 --> 00:33:10,100 encore et encore et encore. 823 00:33:10,100 --> 00:33:11,730 Lorsque vous voulez faire quelque chose une fois, 824 00:33:11,730 --> 00:33:13,210 puis vérifier certaines conditions. 825 00:33:13,210 --> 00:33:14,110 >> Donc, nous allons essayer. 826 00:33:14,110 --> 00:33:17,130 Permettez-moi de réellement changer cela maintenant à une boucle do-while. 827 00:33:17,130 --> 00:33:18,830 Et je vais aller de l'avant et faire ce qui suit. 828 00:33:18,830 --> 00:33:21,830 Donc, procédez comme suit. 829 00:33:21,830 --> 00:33:26,870 Faisons int i = getInt (), mais nous allons d'abord indiquer à l'utilisateur 830 00:33:26,870 --> 00:33:27,410 ce qu'il faut faire. 831 00:33:27,410 --> 00:33:29,050 Donc un peu différent cette fois. 832 00:33:29,050 --> 00:33:31,270 «Donnez-moi un int". 833 00:33:31,270 --> 00:33:32,910 Donc je vais utiliser printf pour cela. 834 00:33:32,910 --> 00:33:35,740 Et maintenant, je vais descendre ici, et je vais le faire 835 00:33:35,740 --> 00:33:41,520 tandis que i est, disons, plus grand que - 836 00:33:41,520 --> 00:33:47,540 Voyons, i est, disons, moins de 0, ou i est 837 00:33:47,540 --> 00:33:48,730 supérieur à 10. 838 00:33:48,730 --> 00:33:51,810 En d'autres termes, je veux un nombre de 1 à 9, juste 839 00:33:51,810 --> 00:33:52,720 arbitrairement. 840 00:33:52,720 --> 00:33:55,290 Donc, je suis en utilisant une expression booléenne ici pour combiné 841 00:33:55,290 --> 00:33:59,930 faire en sorte que i est inférieur à 0 ou supérieur à 10, dans lequel 842 00:33:59,930 --> 00:34:02,530 cas, je vais faire cette boucle ici. 843 00:34:02,530 --> 00:34:04,400 Encore une fois, cela - 844 00:34:04,400 --> 00:34:08,480 tandis que i est inférieur à 0 ou i est supérieur à 10. 845 00:34:08,480 --> 00:34:11,440 >> Alors maintenant, nous allons aller de l'avant et de le faire une fois que nous avons fait. 846 00:34:11,440 --> 00:34:13,270 Disons simplement faire un test de cohérence rapide. 847 00:34:13,270 --> 00:34:18,929 printf ("Merci, i est% d", i). 848 00:34:18,929 --> 00:34:21,350 Ainsi, ce programme simple demande à l'utilisateur un int, 849 00:34:21,350 --> 00:34:24,000 fait en sorte que c'est au sein de certains intervalle de 1 à 9 inclusivement, 850 00:34:24,000 --> 00:34:26,280 puis grâce à l'utilisateur en leur rappelant ce qu'ils viennent 851 00:34:26,280 --> 00:34:27,940 tapé, tout comme un test de cohérence peu. 852 00:34:27,940 --> 00:34:30,659 Mais nous allons voir si cela fonctionne comme prévu. 853 00:34:30,659 --> 00:34:34,533 Laissez-moi aller tête baissée ici et ré-exécutez make boucle. 854 00:34:34,533 --> 00:34:35,350 Hmm. 855 00:34:35,350 --> 00:34:38,600 "L'utilisation de identificateur non déclaré" i "". C'est étrange. 856 00:34:38,600 --> 00:34:41,509 Je croyais que nous avons décidé que. 857 00:34:45,489 --> 00:34:47,560 Même symptôme, mais un code différent. 858 00:34:47,560 --> 00:34:47,899 Ouais? 859 00:34:47,899 --> 00:34:50,191 PUBLIC: [inaudible] à l'intérieur les deux, nous devons 860 00:34:50,191 --> 00:34:52,639 [Inaudible]. 861 00:34:52,639 --> 00:34:53,260 >> DAVID J. MALAN: Exactement. 862 00:34:53,260 --> 00:34:55,989 C'est ce qui conduit en fait nous un sujet connu comme portée. 863 00:34:55,989 --> 00:34:59,350 Il s'avère que C, encore une fois, il faut vraiment que vous littéralement. 864 00:34:59,350 --> 00:35:02,970 Et si vous faites quelque chose comme ça où vous déclarez un int 865 00:35:02,970 --> 00:35:06,120 et lui assigner une certaine valeur, mais vous le faites à l'intérieur d'un 866 00:35:06,120 --> 00:35:09,840 paire d'accolades, ce que C fait est qu'il suppose que vous 867 00:35:09,840 --> 00:35:14,800 que veulent ces 32 bits connus sous le nom i d'exister au sein de la 868 00:35:14,800 --> 00:35:18,200 contexte de ces accolades, dans le cadre de lignes 869 00:35:18,200 --> 00:35:22,420 6 à 9. Alors i est déclarée, et il se voit attribuer un 870 00:35:22,420 --> 00:35:26,530 valeur de la ligne 8, mais dès que vous sortez de 871 00:35:26,530 --> 00:35:30,270 ligne 9 ci-après l'accolade, i n'est plus en 872 00:35:30,270 --> 00:35:31,910 portée, pour ainsi dire. 873 00:35:31,910 --> 00:35:35,030 S-C-O-P-E. Il n'est plus dans le bon contexte. 874 00:35:35,030 --> 00:35:37,940 Alors maintenant, il n'ya pas de i, donc c'est comme si nous n'avions pas encore 875 00:35:37,940 --> 00:35:38,770 elle a déclaré tout. 876 00:35:38,770 --> 00:35:41,520 >> Alors qu'est-ce qu'un correctif, quelque chose comme ça, si le 877 00:35:41,520 --> 00:35:44,300 raison en est que i est déclarée entre les accolades, ce qui 878 00:35:44,300 --> 00:35:45,120 est apparemment mal? 879 00:35:45,120 --> 00:35:45,410 Ici? 880 00:35:45,410 --> 00:35:46,820 PUBLIC: [Inaudible]. 881 00:35:46,820 --> 00:35:47,150 DAVID J. MALAN: Ouais. 882 00:35:47,150 --> 00:35:48,710 Ainsi, nous pouvons l'initialiser à l'extérieur. 883 00:35:48,710 --> 00:35:53,530 Alors laissez-moi aller de l'avant et supprimer les parties déclaration par laquelle 884 00:35:53,530 --> 00:35:55,820 Je précise le type, et laissez-moi faire ici. 885 00:35:55,820 --> 00:36:00,220 Donc, à la ligne 5, il dit maintenant «Donnez-moi un int." Appelez-i. 886 00:36:00,220 --> 00:36:03,400 Avis à la ligne 9, je ne veux pas faire cela, parce que je 887 00:36:03,400 --> 00:36:04,830 déjà les 32 bits. 888 00:36:04,830 --> 00:36:06,140 Je ne veux pas demander à l'ordinateur d'un 889 00:36:06,140 --> 00:36:07,630 différents bits de 32. 890 00:36:07,630 --> 00:36:09,850 Je veux utiliser ces 32 mêmes bits. 891 00:36:09,850 --> 00:36:13,190 Et maintenant, parce que j'ai est déclaré à la ligne 5, il est toujours légitime 892 00:36:13,190 --> 00:36:16,550 de l'utiliser dans la ligne 11 et la ligne 12. 893 00:36:16,550 --> 00:36:19,310 >> Je vais donc essayer de recompiler et de voir ce 894 00:36:19,310 --> 00:36:20,490 si Clang arrête de crier. 895 00:36:20,490 --> 00:36:22,380 faire boucle. 896 00:36:22,380 --> 00:36:25,470 Alors maintenant, il est "implicit declaration of function 897 00:36:25,470 --> 00:36:29,880 «GetInt 'n'est pas valide dans C99." Qu'est-ce que c'est? 898 00:36:29,880 --> 00:36:30,400 Ouais? 899 00:36:30,400 --> 00:36:32,330 PUBLIC: [Inaudible]. 900 00:36:32,330 --> 00:36:32,690 DAVID J. MALAN: Ouais. 901 00:36:32,690 --> 00:36:35,520 Alors, maintenant que je suis en train utilisant getInt, ce n'est pas quelque chose 902 00:36:35,520 --> 00:36:38,190 qui vient juste de C. Cela vient de CS50. 903 00:36:38,190 --> 00:36:39,890 Il nous faut donc voir ici. 904 00:36:39,890 --> 00:36:41,450 Et permettez-moi de revenir à l'invite de bas 905 00:36:41,450 --> 00:36:43,500 ici et relancez faire. 906 00:36:43,500 --> 00:36:44,160 Bon, finalement. 907 00:36:44,160 --> 00:36:46,270 Maintenant, nous avons décidé que l'erreur et d'autres. 908 00:36:46,270 --> 00:36:48,930 Permettez-moi maintenant de fonctionner en boucle et de voir ce qui se passe. 909 00:36:48,930 --> 00:36:51,740 «Donnez-moi un int." Je vais lui donner 11. 910 00:36:51,740 --> 00:36:53,100 Je vais lui donner -1. 911 00:36:53,100 --> 00:36:54,470 Je vais lui donner foo. 912 00:36:54,470 --> 00:36:56,080 Je vais lui donner 5. 913 00:36:56,080 --> 00:36:57,450 Et maintenant il fonctionne bien. 914 00:36:57,450 --> 00:36:59,410 Mais l'invite a changé pour une raison ici. 915 00:36:59,410 --> 00:37:02,800 Pourquoi at-il dit réessayer un de ces moments, mais donnez-moi un 916 00:37:02,800 --> 00:37:03,920 int les trois autres fois? 917 00:37:03,920 --> 00:37:05,500 Pourquoi est-ce un comportement différent? 918 00:37:05,500 --> 00:37:06,980 PUBLIC: Gave une chaîne. 919 00:37:06,980 --> 00:37:07,830 DAVID J. MALAN: Pardon? 920 00:37:07,830 --> 00:37:08,570 PUBLIC: Vous avez donné une chaîne. 921 00:37:08,570 --> 00:37:08,990 DAVID J. MALAN: Ouais. 922 00:37:08,990 --> 00:37:11,450 Alors nous lui avons donné une chaîne dans cette troisième tentative, 923 00:37:11,450 --> 00:37:12,490 quand j'ai tapé foo. 924 00:37:12,490 --> 00:37:13,200 Foo est une chaîne. 925 00:37:13,200 --> 00:37:14,340 Ce n'est évidemment pas un int. 926 00:37:14,340 --> 00:37:17,500 Et la façon dont CS50 a mis en place getInt est que nous 927 00:37:17,500 --> 00:37:20,330 ne vérifient pas si quelque chose est inférieure à 0 ou supérieure à 10 928 00:37:20,330 --> 00:37:22,260 pour vous, car comment peut-on savoir à l'avance quel type de 929 00:37:22,260 --> 00:37:23,130 int que vous voulez? 930 00:37:23,130 --> 00:37:25,880 Mais nous pouvons au minimum vérifier pour vous, ne l'utilisateur au moins 931 00:37:25,880 --> 00:37:26,730 tapez un nombre entier? 932 00:37:26,730 --> 00:37:30,500 Et s'ils le faisaient pas, nous crions à l'utilisateur en tapant "retry" sur 933 00:37:30,500 --> 00:37:31,440 l'écran. 934 00:37:31,440 --> 00:37:34,210 >> Alors maintenant, nous avons un programme qui boucle. D'accord. 935 00:37:34,210 --> 00:37:37,070 Maintenant, lequel des deux est le meilleur type de construction? 936 00:37:37,070 --> 00:37:39,060 C'est donc là que les choses commencent à devenir un peu désordonné, l' 937 00:37:39,060 --> 00:37:42,360 fait que vous devez vous rappeler de déclarer une variable ici 938 00:37:42,360 --> 00:37:44,630 si vous voulez l'utiliser à l'intérieur de certains 939 00:37:44,630 --> 00:37:46,460 accolades et à l'extérieur. 940 00:37:46,460 --> 00:37:48,490 Mais même si cela semble un peu obscur au premier abord 941 00:37:48,490 --> 00:37:50,750 coup d'œil, juste encore une fois, n'oubliez pas la simple logique. 942 00:37:50,750 --> 00:37:54,630 Pour utiliser quoi que ce soit en C, qu'il s'agisse d'une fonction ou d' 943 00:37:54,630 --> 00:37:57,680 c'est une variable, vous devez le comprendre, si c'est une fonction 944 00:37:57,680 --> 00:37:59,770 dans une bibliothèque, ou si vous devez le déclarer. 945 00:37:59,770 --> 00:38:02,405 Mais maintenant, vous devez être conscient supplémentaire du fait que 946 00:38:02,405 --> 00:38:04,940 vous êtes le déclarant dans le cadre de droite. 947 00:38:04,940 --> 00:38:08,150 Vous n'êtes pas le mettre trop serré à l'intérieur des parenthèses. 948 00:38:08,150 --> 00:38:09,410 >> Permettez-moi donc fait reculer. 949 00:38:09,410 --> 00:38:12,660 Si nous revenons à notre exemple du début, et je vais 950 00:38:12,660 --> 00:38:19,245 pour revenir à int, int i = 0; i <10; i + +, et je 951 00:38:19,245 --> 00:38:26,370 faire printf étoiles, comme celui-ci, puis paren près, et maintenant 952 00:38:26,370 --> 00:38:30,410 printf i est maintenant - 953 00:38:30,410 --> 00:38:33,500 selon la même logique, ce qui se passera lorsque je tente de 954 00:38:33,500 --> 00:38:35,500 compiler ce programme? 955 00:38:35,500 --> 00:38:36,790 PUBLIC: identificateur non valide. 956 00:38:36,790 --> 00:38:38,560 DAVID J. MALAN: Donc, c'est un autre identifiant non valide, 957 00:38:38,560 --> 00:38:39,470 identificateur non déclaré. 958 00:38:39,470 --> 00:38:41,810 Maintenant, la raison pour laquelle c'est un peu différent. 959 00:38:41,810 --> 00:38:44,370 Il ya évidemment ni d'accolades ici, mais le même 960 00:38:44,370 --> 00:38:46,790 idée, la même histoire de la portée s'applique. 961 00:38:46,790 --> 00:38:50,340 Si vous avez déclaré une variable comme i à l'intérieur d'un 962 00:38:50,340 --> 00:38:53,960 pour la boucle, même si vous n'avez pas explicitement écrit le bouclés 963 00:38:53,960 --> 00:38:56,980 accolades, pensez à eux mentalement d'être encore là, dans lequel 964 00:38:56,980 --> 00:39:00,310 cas i est valide seulement à l'intérieur de la boucle for. 965 00:39:00,310 --> 00:39:03,080 Elle n'est pas valable une fois que vous obtenez à la ligne suivante, qui 966 00:39:03,080 --> 00:39:05,090 ce cas est maintenant de 10. 967 00:39:05,090 --> 00:39:09,060 Alors seulement quelques questions de portée, etc. 968 00:39:09,060 --> 00:39:12,620 Tout droit, des questions? 969 00:39:12,620 --> 00:39:15,310 >> D'accord, c'est un peu un programme trivial peu, 970 00:39:15,310 --> 00:39:17,450 l'impression de quelques petites étoiles. 971 00:39:17,450 --> 00:39:20,400 Mais attendons de voir si vous vous souvenez de cette chanson ici. 972 00:39:20,400 --> 00:39:22,530 C'est une chanson incroyablement ennuyeux que les enfants chantaient sur 973 00:39:22,530 --> 00:39:23,550 l'autobus scolaire, etc. 974 00:39:23,550 --> 00:39:25,990 Mais ce qui est bien, c'est que c'est a cette cyclicité, 975 00:39:25,990 --> 00:39:27,910 où il est "99 bouteilles de bière sur le mur, 976 00:39:27,910 --> 00:39:28,520 99 bouteilles de bière. 977 00:39:28,520 --> 00:39:31,030 Prenez-en un en bas, passez-le autour de 98 bouteilles de bière sur le 978 00:39:31,030 --> 00:39:34,330 mur. "Et puis la chanson reprend le 97, puis 96, puis 979 00:39:34,330 --> 00:39:38,040 95, puis 94, tout le chemin jusqu'à 0 si vous avez réellement obtenu que 980 00:39:38,040 --> 00:39:38,920 la mesure sur le bus. 981 00:39:38,920 --> 00:39:41,960 Donc, c'est un beau programme pour trier d'engin, parce que mon 982 00:39:41,960 --> 00:39:43,650 Dieu, si vous pouviez mettre en œuvre ce avec quelques-uns 983 00:39:43,650 --> 00:39:46,660 lignes de code, vous pouvez cracher les paroles entières à cette 984 00:39:46,660 --> 00:39:48,240 chanson assez rapidement. 985 00:39:48,240 --> 00:39:50,420 Mais en cours de route, nous pouvons commencer à démêler maintenant une certaine 986 00:39:50,420 --> 00:39:52,460 de ces constructions de base en boucle et maintenant aussi 987 00:39:52,460 --> 00:39:55,830 introduire des fonctions que nous nous écrire, retourner des valeurs 988 00:39:55,830 --> 00:39:57,020 que l'on passe autour. 989 00:39:57,020 --> 00:39:58,910 Mais d'abord, pourquoi ne pas aller de l'avant et de prendre notre de cinq minutes 990 00:39:58,910 --> 00:39:59,320 casser ici? 991 00:39:59,320 --> 00:40:01,480 Et quand nous reviendrons, nous allons chanter cette chanson. 992 00:40:05,680 --> 00:40:08,760 >> Très bien, alors nous sommes de retour. 993 00:40:08,760 --> 00:40:11,850 Et quand je dis que nous allons maintenant chanter cette chanson, je veux dire 994 00:40:11,850 --> 00:40:13,250 programme, non pas verbalement. 995 00:40:13,250 --> 00:40:19,370 Nous avons donc ici beer1.c, qui est une mise en œuvre de cette 996 00:40:19,370 --> 00:40:20,580 chanson en particulier. 997 00:40:20,580 --> 00:40:23,110 Et juste pour être clair, pour ceux peu familiers avec ce 998 00:40:23,110 --> 00:40:24,460 cette chose ressemble, laissez-moi aller de l'avant 999 00:40:24,460 --> 00:40:27,070 et de faire beer1, Entrée. 1000 00:40:27,070 --> 00:40:30,400 Permettez-moi maintenant de fonctionner beer1, et ce que nous allons voir - combien de bouteilles 1001 00:40:30,400 --> 00:40:31,140 de la bière seront-ils? 1002 00:40:31,140 --> 00:40:33,240 Je vais taper 99, comme le dit la chanson. 1003 00:40:33,240 --> 00:40:34,040 Entrée. 1004 00:40:34,040 --> 00:40:35,650 Et maintenant, si nous défiler - 1005 00:40:35,650 --> 00:40:38,280 oops - si nous défiler tout cela, nous verrons que 1006 00:40:38,280 --> 00:40:41,350 cela ne fait chanter toute la chanson. 1007 00:40:44,050 --> 00:40:44,540 Attendez une minute. 1008 00:40:44,540 --> 00:40:46,240 Ma barre de défilement est un peu foiré. 1009 00:40:46,240 --> 00:40:47,940 Profitons de la plus grande fenêtre. 1010 00:40:47,940 --> 00:40:53,500 Donc beer1, 99, voilà. 1011 00:40:53,500 --> 00:40:56,420 Nous avons donc ici toute la chanson, chantée beaucoup plus rapide par le 1012 00:40:56,420 --> 00:40:58,450 ordinateur que ça aurait pu être par nous. 1013 00:40:58,450 --> 00:41:00,340 Donc remarquer, cependant, la nature cyclique ici. 1014 00:41:00,340 --> 00:41:03,380 Il dit 99, puis 99, puis "on prendre vers le bas, passer 1015 00:41:03,380 --> 00:41:04,740 autour ", puis 98. 1016 00:41:04,740 --> 00:41:06,640 Et maintenant, il répète encore et encore. 1017 00:41:06,640 --> 00:41:08,840 >> Donc, c'est en fait une occasion parfaite pour une sorte de 1018 00:41:08,840 --> 00:41:10,400 boucle construire. 1019 00:41:10,400 --> 00:41:12,950 Notez que je suis une sorte de couper un coin ici. 1020 00:41:12,950 --> 00:41:15,960 Remarquez que je dis "98 bouteilles de bière sur le mur, 1021 00:41:15,960 --> 00:41:19,010 97 bouteilles de bière sur le mur », et que c'était tellement 1022 00:41:19,010 --> 00:41:21,640 que lorsque nous arriverons à une bouteille de bière, je n'ai pas 1023 00:41:21,640 --> 00:41:23,300 à vous soucier de la grammaire anglaise. 1024 00:41:23,300 --> 00:41:25,790 Mais on peut aussi résoudre ce problème avec un peu d'un si 1025 00:41:25,790 --> 00:41:26,910 condition, peut-être. 1026 00:41:26,910 --> 00:41:30,110 Si ce nombre est singulier, allez-y et dites "bouteille", 1027 00:41:30,110 --> 00:41:31,840 sinon, si c'est pluriel, dire "bouteilles". 1028 00:41:31,840 --> 00:41:34,150 Mais pour l'instant, je suis complètement couper ce coin. 1029 00:41:34,150 --> 00:41:35,520 Voyons donc ce que nous avons ici. 1030 00:41:35,520 --> 00:41:37,150 Donc, nous avons quelques commentaires au début. 1031 00:41:37,150 --> 00:41:39,450 J'inclus ces deux bibliothèques, 1032 00:41:39,450 --> 00:41:41,140 nous avons souvent eu. 1033 00:41:41,140 --> 00:41:43,610 Et maintenant, permettez-moi de faire défiler vers le bas pour le premier 1034 00:41:43,610 --> 00:41:44,990 lignes réelles de code. 1035 00:41:44,990 --> 00:41:47,020 Ligne 17 démarre principale. 1036 00:41:47,020 --> 00:41:50,610 Ligne 21 et 20 a combien de bouteilles de bière seront-ils? 1037 00:41:50,610 --> 00:41:52,060 Et puis j'appelle getInt. 1038 00:41:52,060 --> 00:41:53,800 Et maintenant, j'ai un peu un test de cohérence. 1039 00:41:53,800 --> 00:41:57,030 >> Il s'agit donc d'une convention que nous allons maintenant commencer à adopter pour 1040 00:41:57,030 --> 00:41:59,620 plus rigoureusement vérifier les entrées de l'utilisateur. 1041 00:41:59,620 --> 00:42:01,710 Parfois, vous n'avez tout simplement pas envie de les inviter à nouveau 1042 00:42:01,710 --> 00:42:02,630 et encore et encore. 1043 00:42:02,630 --> 00:42:05,620 Si l'utilisateur vis et ne coopère pas bien. 1044 00:42:05,620 --> 00:42:07,430 Quitter et n'ont tout simplement pas traiter avec eux. 1045 00:42:07,430 --> 00:42:08,990 Et c'est ce que je fais ici. 1046 00:42:08,990 --> 00:42:12,520 Si n est inférieur à 1, je vais hurler à l'utilisateur, 1047 00:42:12,520 --> 00:42:14,330 "Désolé, ça n'a aucun sens." Et puis je vais 1048 00:42:14,330 --> 00:42:16,650 arbitrairement retourner 1. 1049 00:42:16,650 --> 00:42:18,550 Encore une fois, c'est juste une convention pour s'y habituer. 1050 00:42:18,550 --> 00:42:19,850 Pour l'instant, prendre sur la foi. 1051 00:42:19,850 --> 00:42:22,700 Mais jusqu'à présent, nous avons toujours été de retourner 0, car 1052 00:42:22,700 --> 00:42:25,204 nous l'avons dit en renvoyant 0 représente quoi? 1053 00:42:25,204 --> 00:42:26,000 PUBLIC: Succès. 1054 00:42:26,000 --> 00:42:27,320 DAVID J. MALAN: Succès, c'est tout. 1055 00:42:27,320 --> 00:42:29,740 Alors, maintenant que nous commençons enfin à penser 1056 00:42:29,740 --> 00:42:31,330 non-succès - 1057 00:42:31,330 --> 00:42:33,760 en d'autres termes, les cas de coin, les conditions d'erreur - 1058 00:42:33,760 --> 00:42:37,520 maintenant j'ai un approvisionnement infini, ou au moins 4 milliards 1059 00:42:37,520 --> 00:42:39,790 choses possibles qui peuvent aller mal dans mes programmes. 1060 00:42:39,790 --> 00:42:42,300 Et je peux commencer leur attribuant des numéros individuels. 1061 00:42:42,300 --> 00:42:44,340 Or, généralement, il suffit de juste retour 1062 00:42:44,340 --> 00:42:45,730 autre que 0. 1063 00:42:45,730 --> 00:42:48,040 Donc, nous allons tout simplement renvoyer 1 pour le moment. 1064 00:42:48,040 --> 00:42:51,440 Mais la raison du retour 1 est que dès que vous revenez 1065 00:42:51,440 --> 00:42:55,110 1, devinez ce qui arrive au reste du programme? 1066 00:42:55,110 --> 00:42:55,720 Il s'arrête. 1067 00:42:55,720 --> 00:42:56,560 C'est tout. 1068 00:42:56,560 --> 00:42:59,150 Donc, le fait que je retourne 1 est efficace 1069 00:42:59,150 --> 00:43:02,950 court-circuitant l'exécution de ce programme afin que 1070 00:43:02,950 --> 00:43:06,780 rien en dessous de la ligne 27 continuera à exécuter. 1071 00:43:06,780 --> 00:43:09,210 Dès le retour principaux, c'est tout. 1072 00:43:09,210 --> 00:43:13,160 >> D'accord, donc si l'utilisateur ne coopérer et nous arrivons à la ligne 30 1073 00:43:13,160 --> 00:43:15,680 car ils ont tapé dans un certain nombre légitime, voici mon 1074 00:43:15,680 --> 00:43:16,990 mise en œuvre de cette chanson. 1075 00:43:16,990 --> 00:43:19,050 J'ai donc d'abord imprimer un caractère de nouvelle ligne, juste pour 1076 00:43:19,050 --> 00:43:19,880 esthétique. 1077 00:43:19,880 --> 00:43:21,500 J'ai maintenant une boucle for. 1078 00:43:21,500 --> 00:43:22,930 Et remarquez que je fais les choses un peu 1079 00:43:22,930 --> 00:43:23,880 d'une direction différente. 1080 00:43:23,880 --> 00:43:26,210 Je n'ai pas à faire moins que, je n'ai pas à le faire + +. 1081 00:43:26,210 --> 00:43:30,660 Je peux dire à la place d'initialiser une variable i, réglez-le égal à 1082 00:43:30,660 --> 00:43:35,080 n, le nombre l'utilisateur a tapé, puis procédez comme suit, afin 1083 00:43:35,080 --> 00:43:39,590 longtemps que i est supérieur à 0, alors i - 1084 00:43:39,590 --> 00:43:42,070 une fois que vous avez terminé une itération de cette boucle. 1085 00:43:42,070 --> 00:43:44,310 Ainsi, nous pouvons compter à rebours à l'aide d'une boucle for ainsi. 1086 00:43:44,310 --> 00:43:47,520 Maintenant, c'est la semaine à peu près une étoffe maintenant, avec printf. 1087 00:43:47,520 --> 00:43:51,770 Donc impression "bouteilles de bière% d sur le mur." Imprimer "% d 1088 00:43:51,770 --> 00:43:54,990 bouteilles de bière. "" Prenez vers le bas, le faire circuler. "Imprimer 1089 00:43:54,990 --> 00:43:58,880 "% D bouteilles de bière sur le mur." Donc, c'est toujours d%, mais 1090 00:43:58,880 --> 00:44:02,770 constater que l'argument de printf est en mutation. 1091 00:44:02,770 --> 00:44:05,840 Après la virgule, i have, parce que je veux dire 99. 1092 00:44:05,840 --> 00:44:08,590 Après cette virgule, i have, parce que je veux dire 99. 1093 00:44:08,590 --> 00:44:14,030 Après cette virgule, i have - 1, parce que je veux dire 98 en 1094 00:44:14,030 --> 00:44:16,260 cette première itération, et ainsi de suite. 1095 00:44:16,260 --> 00:44:18,520 Et maintenant, ici-bas, j'ai juste une remarque stupide petite. 1096 00:44:18,520 --> 00:44:22,270 Et puis la ligne 42, je retourne 0 par convention, ce qui signifie que 1097 00:44:22,270 --> 00:44:23,650 tout va bien. 1098 00:44:23,650 --> 00:44:24,490 >> Alors, que si je fait une gaffe? 1099 00:44:24,490 --> 00:44:26,350 Ce qui pourrait une erreur commune ici être? 1100 00:44:26,350 --> 00:44:29,200 Eh bien, si j'ai accidentellement dit bien, je ne veux compter 1101 00:44:29,200 --> 00:44:31,640 à 0, je veux 0 bouteilles de bière sur le mur? 1102 00:44:31,640 --> 00:44:34,620 Alors je dis, i est supérieur ou égal à 0. 1103 00:44:34,620 --> 00:44:38,920 Quel va être le symptôme que je vois maintenant si je recompiler 1104 00:44:38,920 --> 00:44:41,173 beer1 et l'exécuter? 1105 00:44:41,173 --> 00:44:42,120 PUBLIC: Négatif. 1106 00:44:42,120 --> 00:44:43,590 DAVID J. MALAN: Ouais, ça va être négatif. 1107 00:44:43,590 --> 00:44:45,950 Il s'agit d'une erreur off-by-one, incroyablement 1108 00:44:45,950 --> 00:44:47,270 erreur commune à faire. 1109 00:44:47,270 --> 00:44:48,960 Nous allons effectivement revenir à la fenêtre de terminal et de le faire 1110 00:44:48,960 --> 00:44:50,620 ici, afin que nous puissions voir plusieurs à la fois. 1111 00:44:50,620 --> 00:44:53,280 Entrez, 99 bouteilles de bière. 1112 00:44:53,280 --> 00:44:56,580 Fermer, mais nous sommes allés un tant soit peu trop loin. 1113 00:44:56,580 --> 00:45:00,500 Nous avons chanté la chanson trop bas, de sorte que nous avons maintenant atteint le 1114 00:45:00,500 --> 00:45:01,510 nombre négatif. 1115 00:45:01,510 --> 00:45:03,680 Donc, il ne fonctionne pas vraiment. 1116 00:45:03,680 --> 00:45:06,450 >> D'accord, donc on peut facilement résoudre ce problème en revenant à l' 1117 00:45:06,450 --> 00:45:07,650 comme il l'était autrefois. 1118 00:45:07,650 --> 00:45:10,360 Mais quelles sont les possibilités maintenant pour 1119 00:45:10,360 --> 00:45:11,190 amélioration? 1120 00:45:11,190 --> 00:45:17,200 Eh bien, permettez-moi d'ouvrir beer2.c et descendez ici et prendre un 1121 00:45:17,200 --> 00:45:19,310 regardez cette version. 1122 00:45:19,310 --> 00:45:21,370 Quelle est la première chose qui vous saute au visage comme différent 1123 00:45:21,370 --> 00:45:23,715 dans cette version ici? 1124 00:45:23,715 --> 00:45:24,190 PUBLIC: [Inaudible]. 1125 00:45:24,190 --> 00:45:26,510 DAVID J. MALAN: Ouais, donc pas plus de i, parce qu'il est survenu à 1126 00:45:26,510 --> 00:45:29,350 moi, vous savez quoi, je vais demander à l'utilisateur pour n, et puis je suis 1127 00:45:29,350 --> 00:45:33,580 la mise i égal à n, et puis je suis i changer, mais je ne suis jamais 1128 00:45:33,580 --> 00:45:34,590 n nouveau contact. 1129 00:45:34,590 --> 00:45:37,390 Donc, ce que le diable a été le point de vous allouer 32 autres 1130 00:45:37,390 --> 00:45:45,210 je viens de bits appelée pour que je puisse avoir une variable différente? 1131 00:45:45,210 --> 00:45:47,960 Donc dans ce cas, j'ai en quelque sorte reconnu que nécessaire 1132 00:45:47,960 --> 00:45:49,190 caractéristique de conception. 1133 00:45:49,190 --> 00:45:52,730 Et je vais maintenant vous dire tout n est supérieur à 0, passez 1134 00:45:52,730 --> 00:45:56,180 avance et imprimer la même chanson, en passant un n printf comme le 1135 00:45:56,180 --> 00:46:00,210 Le deuxième argument, et n - 1 comme second argument ici. 1136 00:46:00,210 --> 00:46:02,930 Et puis, à chaque itération de cette boucle, aller de l'avant et juste 1137 00:46:02,930 --> 00:46:05,080 décrémenter n elle-même. 1138 00:46:05,080 --> 00:46:06,960 Maintenant, fonctionnellement, ce programme 1139 00:46:06,960 --> 00:46:08,010 va être identiques. 1140 00:46:08,010 --> 00:46:10,730 Si je tape en 99, n commence à 99. 1141 00:46:10,730 --> 00:46:12,890 Je décrémentation, décrémentation, décrémentation, décrémentation. 1142 00:46:12,890 --> 00:46:15,875 Je vais faire tout le chemin vers le bas pour "Une bouteille de bière sur 1143 00:46:15,875 --> 00:46:16,740 le mur, une bouteille de bière. 1144 00:46:16,740 --> 00:46:18,020 Prenez-en un en bas, le faire circuler. 1145 00:46:18,020 --> 00:46:21,480 0 bouteilles de bière sur le mur. "La fin, parce que je n'ai 1146 00:46:21,480 --> 00:46:23,200 obtenir le bon état. 1147 00:46:23,200 --> 00:46:24,280 Il est supérieur à 0. 1148 00:46:24,280 --> 00:46:26,220 Je n'ai pas fait cette erreur. 1149 00:46:26,220 --> 00:46:28,470 >> Donc, ce qui est mieux, version simple ou version deux? 1150 00:46:31,380 --> 00:46:33,480 Donc, j'ai entendu un tas de murmures pour deux. 1151 00:46:33,480 --> 00:46:34,730 Pourquoi deux? 1152 00:46:37,210 --> 00:46:38,225 Qu'est-ce que c'est? 1153 00:46:38,225 --> 00:46:39,215 PUBLIC: [Inaudible]. 1154 00:46:39,215 --> 00:46:40,070 DAVID J. MALAN: Oh, d'accord. 1155 00:46:40,070 --> 00:46:42,870 Donc, il ne sera pas descendre en dessous de 0, mais rappelez-vous, dans une version, l' 1156 00:46:42,870 --> 00:46:45,870 version originale correcte n'a pas descendre en dessous de 0 soit. 1157 00:46:45,870 --> 00:46:48,340 Alors rappelez-vous que c'est la bonne version. 1158 00:46:48,340 --> 00:46:51,630 Nous allons donc au moins de comparer les deux versions correctes. 1159 00:46:51,630 --> 00:46:53,300 Ce qui est un argument en faveur de la version 1160 00:46:53,300 --> 00:46:55,146 deux étant, mmm, mieux? 1161 00:46:55,146 --> 00:46:55,642 Ouais? 1162 00:46:55,642 --> 00:46:57,630 PUBLIC: Il utilise moins d'espace. 1163 00:46:57,630 --> 00:46:59,530 DAVID J. MALAN: D'accord, donc il utilise moins d'espace, non? 1164 00:46:59,530 --> 00:47:02,900 Alors que d'une version 32 bits utilisé pour n, et puis un autre 1165 00:47:02,900 --> 00:47:07,680 32 bits pour i. 1166 00:47:07,680 --> 00:47:10,060 Version utilise seulement deux 32 bits pour n, de sorte que 1167 00:47:10,060 --> 00:47:11,700 semble être un plus. 1168 00:47:11,700 --> 00:47:12,950 D'autres pensées? 1169 00:47:18,070 --> 00:47:21,520 Quelqu'un veut-il plaider en faveur de celui-ci? 1170 00:47:21,520 --> 00:47:22,070 Ouais? 1171 00:47:22,070 --> 00:47:25,240 PUBLIC: Vous devez utiliser la ligne de code supplémentaire pour n -. 1172 00:47:25,240 --> 00:47:26,090 >> DAVID J. MALAN: D'accord, bien sûr. 1173 00:47:26,090 --> 00:47:26,960 Alors que c'est juste. 1174 00:47:26,960 --> 00:47:29,040 Donc, ce que, au moins pour moi - 1175 00:47:29,040 --> 00:47:31,940 Je veux dire, cela se sent effectivement un peu désordonnée, le fait que 1176 00:47:31,940 --> 00:47:35,120 Je ne peux pas trier de résumer toute ma logique dans un 1177 00:47:35,120 --> 00:47:38,030 belle ligne, la boucle for, comme la boucle for peut. 1178 00:47:38,030 --> 00:47:40,240 Ici, je sorte de devoir virer sur ce n - 1179 00:47:40,240 --> 00:47:41,120 à la fin de la boucle, car 1180 00:47:41,120 --> 00:47:42,550 il est logiquement nécessaire. 1181 00:47:42,550 --> 00:47:45,190 Mais il sorte de frotte-moi le mauvais sens, tout simplement parce qu'il 1182 00:47:45,190 --> 00:47:48,260 semble distincte de la logique de place ici, même si, 1183 00:47:48,260 --> 00:47:49,430 encore une fois, c'est nécessaire. 1184 00:47:49,430 --> 00:47:50,990 D'autres pensées? 1185 00:47:50,990 --> 00:47:51,490 Ouais? 1186 00:47:51,490 --> 00:47:52,740 PUBLIC: [Inaudible]. 1187 00:47:57,990 --> 00:47:58,350 >> DAVID J. MALAN: Ouais. 1188 00:47:58,350 --> 00:48:00,730 Alors que faire si vous avez la place, à la fin de la chanson, a voulu 1189 00:48:00,730 --> 00:48:02,950 imprimer à nouveau le nom de la chanson? 1190 00:48:02,950 --> 00:48:05,660 Comme "Merci d'avoir joué 99 bouteilles de bière", ou quelque chose 1191 00:48:05,660 --> 00:48:06,690 bête comme ça? 1192 00:48:06,690 --> 00:48:09,750 Mais le fait est, que vous vouliez accéder à la valeur d'origine. 1193 00:48:09,750 --> 00:48:13,180 Le fait que vous avez muté ou modifié n sur chaque 1194 00:48:13,180 --> 00:48:16,330 itération et donc ont détruit sa valeur initiale 1195 00:48:16,330 --> 00:48:18,650 Cela signifie que vous ne pouvez pas le faire à la fin. 1196 00:48:18,650 --> 00:48:20,660 Maintenant, sans doute, nous avons clairement ne pas vouloir faire 1197 00:48:20,660 --> 00:48:21,450 que dans ce programme. 1198 00:48:21,450 --> 00:48:22,350 Alors, qui s'en soucie? 1199 00:48:22,350 --> 00:48:23,630 Mais c'est un point très valable. 1200 00:48:23,630 --> 00:48:25,520 Et pour être honnête, il n'y a vraiment personne 1201 00:48:25,520 --> 00:48:26,630 bonne réponse ici. 1202 00:48:26,630 --> 00:48:28,740 Ils sont tous deux également correctes. 1203 00:48:28,740 --> 00:48:30,210 Je pourrais être convaincu de toute façon. 1204 00:48:30,210 --> 00:48:33,310 Je dirai que, de manière générale, c'est un bon principe, si vous 1205 00:48:33,310 --> 00:48:36,030 demandé à l'utilisateur pour une certaine valeur et vous avez stocké dans une variable 1206 00:48:36,030 --> 00:48:38,730 comme n, juste une sorte de principe sur, c'est probablement une bonne 1207 00:48:38,730 --> 00:48:40,160 pour maintenir cette tendance. 1208 00:48:40,160 --> 00:48:43,400 Et toutes les données que vous voulez muter encore et encore, tout simplement 1209 00:48:43,400 --> 00:48:46,030 offrez-vous une copie de cette variable, juste pour que vous 1210 00:48:46,030 --> 00:48:47,830 avoir accès à l'original. 1211 00:48:47,830 --> 00:48:51,040 Vous dépensez plus de 32 bits, mais la réalité est la suivante 1212 00:48:51,040 --> 00:48:53,490 ordinateur, comme, deux gigaoctets de mémoire vive de nos jours, 1213 00:48:53,490 --> 00:48:55,310 et nous chicaner sur 32 bits? 1214 00:48:55,310 --> 00:48:56,320 Vraiment pas une grosse affaire. 1215 00:48:56,320 --> 00:48:58,550 Et même sur cet appareil ici, avec un demi-concert ou d'un 1216 00:48:58,550 --> 00:49:01,700 gigaoctet de RAM, 32 bits contre 64 bits, 1217 00:49:01,700 --> 00:49:02,920 pas une grosse affaire. 1218 00:49:02,920 --> 00:49:05,890 Certes, aujourd'hui, ça va être beaucoup dépassés par la taille 1219 00:49:05,890 --> 00:49:08,400 du programme lui-même, qui va être plusieurs centaines de 1220 00:49:08,400 --> 00:49:10,890 kilo-octets, voire quelques mégaoctets, ces jours-ci. 1221 00:49:10,890 --> 00:49:13,550 >> Ainsi, les préoccupations raisonnables, pas une seule bonne réponse. 1222 00:49:13,550 --> 00:49:15,490 Mais au moins, ce sont les pensées qui devraient commencer à 1223 00:49:15,490 --> 00:49:16,790 passer par votre esprit? 1224 00:49:16,790 --> 00:49:19,600 Parce que dans pset 0, même si nous avons vraiment ne devrait 1225 00:49:19,600 --> 00:49:22,340 exactitude, ou tout au moins déclinant les divers bugs que 1226 00:49:22,340 --> 00:49:25,440 vous pourriez avoir rencontré, alors que nous avançons, le design est 1227 00:49:25,440 --> 00:49:27,910 va être un autre aspect important, à la fois d'écrire du code 1228 00:49:27,910 --> 00:49:29,770 et également notre évaluation de code. 1229 00:49:29,770 --> 00:49:32,310 Et si au moins réfléchir à ce genre de choses. 1230 00:49:32,310 --> 00:49:35,590 Et juste parce que quelque chose fonctionne ne veut pas dire que c'est bon, 1231 00:49:35,590 --> 00:49:37,130 ne signifie pas qu'il est bien conçu. 1232 00:49:37,130 --> 00:49:38,820 Et c'est l'une des choses les boursiers d'enseignement et de 1233 00:49:38,820 --> 00:49:41,990 ensembles de problèmes nous aidera à taquiner partie au fil du temps. 1234 00:49:41,990 --> 00:49:45,020 >> Eh bien, qu'en est-il, disons, cette version ici? 1235 00:49:45,020 --> 00:49:49,090 Permettez-moi de faire quelque chose de sexy ici dans un instant. 1236 00:49:49,090 --> 00:49:50,740 D'abord laissez moi vous débarrasser de cela. 1237 00:49:50,740 --> 00:49:54,120 Et maintenant, nous allons résoudre ce problème grammatical. 1238 00:49:54,120 --> 00:49:58,780 Donc, dans cette version, je tiens à corriger la grammaire de sorte que, 1239 00:49:58,780 --> 00:50:02,460 plutôt que de simplement dire s entre parenthèses, comme "bouteille" 1240 00:50:02,460 --> 00:50:03,360 ou "bouteilles" - 1241 00:50:03,360 --> 00:50:04,900 Je ne veux pas couper ce coin - 1242 00:50:04,900 --> 00:50:08,350 Je veux aussi dynamique imprimer le mot "bouteilles" 1243 00:50:08,350 --> 00:50:12,820 ou "bouteille", utilisant ainsi des espaces réservés ci% s aujourd'hui. 1244 00:50:12,820 --> 00:50:16,550 J'ai donc besoin de vérifier ce qui est conditionnellement la valeur de i. 1245 00:50:16,550 --> 00:50:19,590 Et si c'est 1, je veux dire "bouteille", et si c'est quelque chose 1246 00:50:19,590 --> 00:50:23,115 d'autre, je veux dire "bouteilles". Donc, nous allons essayer de le faire. 1247 00:50:23,115 --> 00:50:31,340 Donc, si i == 1, alors laissez-moi aller de l'avant et de déclarer - 1248 00:50:31,340 --> 00:50:34,080 J'ai besoin d'une chaîne de caractères, alors laissez-moi faire la chaîne s1, parce que c'est la 1249 00:50:34,080 --> 00:50:36,070 première chaîne Je me soucie de ce moment. 1250 00:50:36,070 --> 00:50:40,980 Je vais dire "bouteille". Et puis, voyons, string 1251 00:50:40,980 --> 00:50:43,110 s2 - et je vais vous expliquer où je vais dans un instant - 1252 00:50:43,110 --> 00:50:47,650 "Bouteilles". Ainsi, rappelons que, dans cette chanson, nous devons être en mesure 1253 00:50:47,650 --> 00:50:50,580 d'imprimer des choses, deux mots différents potentiellement. 1254 00:50:50,580 --> 00:50:53,590 Donc, si nous regardons en arrière ici, vous remarquerez que lorsque nous arriverons à 1255 00:50:53,590 --> 00:50:56,440 cet exemple ici ", deux bouteilles de bière sur le mur, 1256 00:50:56,440 --> 00:50:59,490 deux bouteilles de bière, une seule prise vers le bas, le faire circuler », je veux 1257 00:50:59,490 --> 00:51:02,380 cette quatrième ligne de dire maintenant "une bouteille de bière sur la 1258 00:51:02,380 --> 00:51:04,900 mur ". J'ai donc besoin de décider, ce que je veux dire" bouteilles "ou 1259 00:51:04,900 --> 00:51:07,780 "Bouteille"? Donc je vais dire arbitrairement, tous les droits, 1260 00:51:07,780 --> 00:51:10,530 Je vais maintenant déclarer une variable appelée s1, string 1261 00:51:10,530 --> 00:51:13,830 un, qui va se brancher ici et ici aussi, 1262 00:51:13,830 --> 00:51:16,070 parce que ces mots sont toujours identiques, simplement en raison de la 1263 00:51:16,070 --> 00:51:17,290 nature de la chanson. 1264 00:51:17,290 --> 00:51:20,100 Et je vais appeler s2 n'importe quel mot je veux 1265 00:51:20,100 --> 00:51:21,560 éventuellement apparaître ici. 1266 00:51:21,560 --> 00:51:25,530 Maintenant, littéralement, 99 fois sur 100, ça va être la 1267 00:51:25,530 --> 00:51:28,820 même dans ces deux cas, car 3 est pluriel, 2 est 1268 00:51:28,820 --> 00:51:30,200 pluriel, 4 est pluriel. 1269 00:51:30,200 --> 00:51:34,640 Mais dans ce cas coin, où nous arrivons à 2, puis 1, ou 1270 00:51:34,640 --> 00:51:37,250 même 1 puis 0, j'ai besoin de cette logique. 1271 00:51:37,250 --> 00:51:41,020 Je dois donc passer un peu de temps dans mon code par rapport à ce droit. 1272 00:51:41,020 --> 00:51:47,530 Donc, si je fais cela, si i == 1, alors s1 égal à "bouteille" 1273 00:51:47,530 --> 00:51:52,010 et s2 égal à "bouteilles", parce que ce sera pour 1 1274 00:51:52,010 --> 00:51:56,340 bouteille, et ce sera pour 0 bouteilles. 1275 00:51:56,340 --> 00:51:58,250 Et c'est ici, qu'est-ce que cela représente? 1276 00:51:58,250 --> 00:51:59,780 Juste pour être clair. 1277 00:51:59,780 --> 00:52:00,620 C'est juste un commentaire. 1278 00:52:00,620 --> 00:52:03,730 Donc, le fait que vous pouvez avoir une seule ligne signifie commentaires que vous 1279 00:52:03,730 --> 00:52:06,110 peuvent commenter votre code comme ceci, mais une autre commune 1280 00:52:06,110 --> 00:52:09,050 paradigme, aussi, c'est que si vous avez une phrase super-court qui 1281 00:52:09,050 --> 00:52:11,410 vous voulez vous mettre et c'est juste plus lisible pour mettre 1282 00:52:11,410 --> 00:52:13,270 il droit à la fin de la ligne de code, vous pouvez 1283 00:52:13,270 --> 00:52:15,230 absolument faire quelque chose comme ça. 1284 00:52:15,230 --> 00:52:20,150 >> Alors maintenant, que si je fais ça? Sinon, si i n'est pas égal à 1. 1285 00:52:20,150 --> 00:52:21,620 Donc Bang est égale à - 1286 00:52:21,620 --> 00:52:23,150 point d'exclamation est connu comme "bang". 1287 00:52:23,150 --> 00:52:25,080 Donc Bang = 1. 1288 00:52:25,080 --> 00:52:28,530 Donc, si i n'est pas égal à 1, que dois-je plutôt envie de faire? 1289 00:52:28,530 --> 00:52:31,700 Eh bien, le premier mot que je veux être quoi? 1290 00:52:34,620 --> 00:52:40,030 Alors chaîne 1 devrait être «bouteilles» des bouteilles multiples, 1291 00:52:40,030 --> 00:52:42,440 puis ce sera au pluriel "bouteilles" ainsi, pour l'instant. 1292 00:52:42,440 --> 00:52:43,800 Et nous verrons si cela devient réellement nous 1293 00:52:43,800 --> 00:52:44,870 où nous voulons aller. 1294 00:52:44,870 --> 00:52:47,680 Alors maintenant, si je descendez ici, vous remarquerez que je suis brancher 1295 00:52:47,680 --> 00:52:50,170 pas seulement moi, mais s1. 1296 00:52:50,170 --> 00:52:51,860 Je suis brancher i et s1. 1297 00:52:51,860 --> 00:52:54,440 Puis ici, je suis moins 1, qui est la même que 1298 00:52:54,440 --> 00:52:55,920 avant, mais s2. 1299 00:52:55,920 --> 00:52:58,730 En d'autres termes, je veux le mot anglais pour évoluer en fonction 1300 00:52:58,730 --> 00:52:59,930 Dans cette logique. 1301 00:52:59,930 --> 00:53:03,310 Maintenant, il ya déjà des problèmes dans ce code. 1302 00:53:03,310 --> 00:53:08,460 Ce qui est brisé déjà hors de la porte ici? 1303 00:53:08,460 --> 00:53:10,796 Ouais? 1304 00:53:10,796 --> 00:53:13,210 PUBLIC: [Inaudible]. 1305 00:53:13,210 --> 00:53:13,800 >> DAVID J. MALAN: Exactement. 1306 00:53:13,800 --> 00:53:16,030 Donc je l'ai déjà violé la leçon de portée. 1307 00:53:16,030 --> 00:53:19,610 J'ai donc déclaré s1 et s2, mais je l'ai fait à l'intérieur de 1308 00:53:19,610 --> 00:53:22,980 accolades, ce qui signifie oui, ce code va travailler jusqu'à 1309 00:53:22,980 --> 00:53:27,430 jusqu'à ce que la ligne 42, mais dès que j'ai touché la ligne 43, devinez quoi pas 1310 00:53:27,430 --> 00:53:28,900 n'existe plus? 1311 00:53:28,900 --> 00:53:32,600 Eh bien, devinez ce qui est plus dans le domaine - ni s1 ou s2. 1312 00:53:32,600 --> 00:53:33,780 Nous devons donc résoudre ce problème. 1313 00:53:33,780 --> 00:53:36,180 Permettez-moi donc de supprimer les déclarations. 1314 00:53:36,180 --> 00:53:39,320 Et je vais laisser les noms de variables et de supprimer ce ici 1315 00:53:39,320 --> 00:53:40,120 et supprimer les voir ici. 1316 00:53:40,120 --> 00:53:43,557 Et dans quel sens devrait-je vraiment déclarer ces choses? 1317 00:53:43,557 --> 00:53:44,960 PUBLIC: [Inaudible]. 1318 00:53:44,960 --> 00:53:45,410 DAVID J. MALAN: Ouais, alors, probablement, 1319 00:53:45,410 --> 00:53:46,850 juste ici, 33-ish. 1320 00:53:46,850 --> 00:53:50,670 Ainsi, la chaîne s1 et s2 chaîne. 1321 00:53:50,670 --> 00:53:51,950 Et il se trouve, je peux le faire. 1322 00:53:51,950 --> 00:53:54,260 Si vous êtes déclarer deux variables de même type, 1323 00:53:54,260 --> 00:53:57,420 vous pouvez effectivement il suffit d'utiliser une virgule et faire en C. Toutes les 1324 00:53:57,420 --> 00:53:58,970 Bon, maintenant j'ai deux variables - 1325 00:53:58,970 --> 00:53:59,860 s1 et s2. 1326 00:53:59,860 --> 00:54:02,000 Je leur attribuant des valeurs dans ces 1327 00:54:02,000 --> 00:54:04,210 conditions ici, ou ici. 1328 00:54:04,210 --> 00:54:06,690 Et puis je les utiliser en bas. 1329 00:54:06,690 --> 00:54:10,960 Dans quelle mesure est-ce maintenant d'aller travailler? 1330 00:54:10,960 --> 00:54:12,740 >> Eh bien, c'est encore un peu buggé, mais il faut au moins voir 1331 00:54:12,740 --> 00:54:13,730 dans quelle mesure nous avons obtenu. 1332 00:54:13,730 --> 00:54:16,500 Alors laissez-moi aller de l'avant et de faire beer3. 1333 00:54:16,500 --> 00:54:17,695 Est-ce beer3? 1334 00:54:17,695 --> 00:54:19,410 Yep, c'est beer3. 1335 00:54:19,410 --> 00:54:21,510 Et maintenant, laissez-moi aller de l'avant et exécutez beer3. 1336 00:54:21,510 --> 00:54:23,820 399 99. 1337 00:54:23,820 --> 00:54:25,840 Nous pouvons probablement passer plupart d'entre eux. 1338 00:54:25,840 --> 00:54:29,100 Et ici, regardez ça. 1339 00:54:29,100 --> 00:54:31,110 "Une bouteille de bière sur le mur, une bouteille de bière, de prendre 1340 00:54:31,110 --> 00:54:34,306 un vers le bas, le faire circuler, 0 bouteilles de bière sur le mur. " 1341 00:54:34,306 --> 00:54:37,570 Mais je attirer votre attention sur seulement la moitié de la solution. 1342 00:54:37,570 --> 00:54:39,620 Type de foiré ici. 1343 00:54:39,620 --> 00:54:43,030 Il semble donc que les cas marginaux se posent lorsque i est égal à ce 1344 00:54:43,030 --> 00:54:44,030 deux valeurs? 1345 00:54:44,030 --> 00:54:45,020 PUBLIC: 2, 1. 1346 00:54:45,020 --> 00:54:46,190 DAVID J. MALAN: 2 et 1. 1347 00:54:46,190 --> 00:54:48,180 Ce n'est pas 1, et non 1. 1348 00:54:48,180 --> 00:54:51,890 C'est vraiment juste ces deux dernières strophes de cette chanson. 1349 00:54:51,890 --> 00:54:53,890 Alors qu'est-ce que je veux faire à la place? 1350 00:54:53,890 --> 00:54:58,890 Donc, il me semble avoir pris le cas où si i est à 1 ==, 1351 00:54:58,890 --> 00:55:02,240 puis le premier mot est "bouteille", mais le deuxième mot 1352 00:55:02,240 --> 00:55:07,230 est "bouteilles". Mais ici, je veux changer cela soit == 2. 1353 00:55:07,230 --> 00:55:08,570 Et si c'est le cas, qu'est-ce que je veux que le 1354 00:55:08,570 --> 00:55:09,620 premier mot de l'être? 1355 00:55:09,620 --> 00:55:10,430 PUBLIC: "Bottles". 1356 00:55:10,430 --> 00:55:12,890 DAVID J. MALAN: "Bottles", si pour deux bouteilles. 1357 00:55:12,890 --> 00:55:14,690 Et puis ce mot ici, devrait être - 1358 00:55:14,690 --> 00:55:15,340 PUBLIC: "Bouteille". 1359 00:55:15,340 --> 00:55:17,316 DAVID J. MALAN: "Bouteille", au singulier. 1360 00:55:20,430 --> 00:55:25,160 >> Très bien, nous allons effectuer un zoom arrière, revenir ici, ré-exécutez make, 1361 00:55:25,160 --> 00:55:28,590 re-run beer3, tapez 99 fois. 1362 00:55:28,590 --> 00:55:30,710 Ok, "Segmentation fault (core dumped)". 1363 00:55:30,710 --> 00:55:32,780 Qu'ai-je fait de mal? 1364 00:55:36,050 --> 00:55:38,722 PUBLIC: Vous n'avez pas une valeur [inaudible]. 1365 00:55:38,722 --> 00:55:40,480 DAVID J. MALAN: Ah, très bon point. 1366 00:55:40,480 --> 00:55:43,310 D'accord, alors quel est le problème ici? 1367 00:55:43,310 --> 00:55:45,450 Donc, faute de segmentation, et nous allons en fait voir 1368 00:55:45,450 --> 00:55:49,020 ce à quelques reprises à l'avenir, délibérément. 1369 00:55:49,020 --> 00:55:51,030 Mais pour l'instant, qu'est-ce que cela signifie réellement? 1370 00:55:51,030 --> 00:55:53,620 Une erreur de segmentation signifie presque toujours que vous avez 1371 00:55:53,620 --> 00:55:56,760 en quelque sorte tenté d'accéder à la mémoire, RAM dans votre ordinateur, 1372 00:55:56,760 --> 00:56:00,600 que vous ne possédez pas, que vous n'avez pas fait la demande 1373 00:56:00,600 --> 00:56:02,050 le système d'exploitation pour. 1374 00:56:02,050 --> 00:56:04,440 Donc dans ce cas, notez ce que j'ai fait, ce qui est 1375 00:56:04,440 --> 00:56:05,870 vicié dans ma logique. 1376 00:56:05,870 --> 00:56:09,500 J'ai assigné s1 et s2 une valeur si i est égal à 1. 1377 00:56:09,500 --> 00:56:11,590 J'ai aussi fait que si i est égal à 2. 1378 00:56:11,590 --> 00:56:13,710 Mais je ne l'ai pas fait dans le nombre infini d'autres 1379 00:56:13,710 --> 00:56:14,690 possibilités - 1380 00:56:14,690 --> 00:56:17,940 en particulier, 3 ou 4 ou un point, point, point, 99. 1381 00:56:17,940 --> 00:56:20,100 Alors un correctif pour ce pourrait être simplement de let 1382 00:56:20,100 --> 00:56:22,190 souffrez d'une maladie autre. 1383 00:56:22,190 --> 00:56:26,780 Et laissez-moi aller ici et dire s1 est égal à - 1384 00:56:26,780 --> 00:56:28,180 quel serait-il ici? 1385 00:56:28,180 --> 00:56:28,750 PUBLIC: [Inaudible]. 1386 00:56:28,750 --> 00:56:30,460 >> DAVID J. MALAN: «Bouteilles», parce que dans le cas le plus courant, 1387 00:56:30,460 --> 00:56:32,020 c'est juste la même chose. 1388 00:56:32,020 --> 00:56:35,580 Donc égale entre guillemets, "bouteilles". Donc, pour le pluriel 1389 00:56:35,580 --> 00:56:41,010 bouteilles, puis ici, pour les bouteilles pluriel. 1390 00:56:41,010 --> 00:56:44,580 Bon, alors maintenant je voudrais revenir à ma fenêtre de terminal, 1391 00:56:44,580 --> 00:56:47,200 recompiler, il re-courir. 1392 00:56:47,200 --> 00:56:48,440 99. 1393 00:56:48,440 --> 00:56:49,150 Ouf. 1394 00:56:49,150 --> 00:56:50,610 Et nous allons faire un rapide test de cohérence. 1395 00:56:50,610 --> 00:56:52,400 Techniquement, nous avions envie de lire toutes les questions pour s'assurer 1396 00:56:52,400 --> 00:56:53,370 qu'ils sont corrects, mais penchons-nous sur 1397 00:56:53,370 --> 00:56:54,640 moins les coupables connus. 1398 00:56:54,640 --> 00:56:57,370 3 bouteilles, 2 bouteilles, 2 bouteilles, 1 1399 00:56:57,370 --> 00:57:00,380 bouteille, 1 bouteille, 0 bouteilles. 1400 00:57:00,380 --> 00:57:03,080 Nous semblons avoir au moins il fixé pour l'instant. 1401 00:57:03,080 --> 00:57:06,010 Mais le hic, c'est que ce dieu terrible gâchis ce n'est 1402 00:57:06,010 --> 00:57:07,470 juste pour résoudre un stupide 1403 00:57:07,470 --> 00:57:09,540 un caractère détail grammatical. 1404 00:57:09,540 --> 00:57:11,150 Il ya donc une sorte de raison que je coupe ce coin 1405 00:57:11,150 --> 00:57:14,090 plus tôt, car il est juste complètement ennuyeux d'avoir à 1406 00:57:14,090 --> 00:57:15,020 écrire ce code beaucoup. 1407 00:57:15,020 --> 00:57:17,530 Mais il s'avère qu'il ya des moyens un peu plus élégants de 1408 00:57:17,530 --> 00:57:20,110 exprimer exactement la même chose. 1409 00:57:20,110 --> 00:57:22,040 Et nous pouvons le faire comme suit. 1410 00:57:22,040 --> 00:57:23,890 >> Permettez-moi de le laisser sur l'écran pendant un moment et 1411 00:57:23,890 --> 00:57:27,320 introduire quelque chose de connu comme un opérateur ternaire. 1412 00:57:27,320 --> 00:57:29,600 Il s'agit d'une sorte de one-liner qui est juste destinée à faire de notre 1413 00:57:29,600 --> 00:57:31,880 vit un peu plus sexy, comme promis. 1414 00:57:31,880 --> 00:57:33,130 Et je vais faire ce qui suit. 1415 00:57:33,130 --> 00:57:35,810 Donne-moi une chaîne appelée s1, et laissez-moi 1416 00:57:35,810 --> 00:57:37,200 céder comme suit. 1417 00:57:37,200 --> 00:57:39,900 (I == 1)? 1418 00:57:39,900 --> 00:57:47,820 "Bouteille", sinon "bouteilles". String s2 obtient (i == 2)? 1419 00:57:47,820 --> 00:57:52,670 "Bouteille", sinon "bouteilles". 1420 00:57:52,670 --> 00:57:57,050 Alors, quelle est donc la différence? 1421 00:57:57,050 --> 00:57:59,370 Ces deux lignes de code, selon moi, peut 1422 00:57:59,370 --> 00:58:02,200 remplacer tout ce gâchis. 1423 00:58:02,200 --> 00:58:04,280 Alors je l'appelle un gâchis, juste parce qu'il sorte de frotte-moi le 1424 00:58:04,280 --> 00:58:05,940 le mauvais sens que c'est autant de lignes de code. 1425 00:58:05,940 --> 00:58:06,650 Pas tort. 1426 00:58:06,650 --> 00:58:07,700 Ce n'est pas une mauvaise conception. 1427 00:58:07,700 --> 00:58:10,140 Comme, c'est tout à fait correct et parfaitement bien. 1428 00:58:10,140 --> 00:58:12,970 Mais codage devient fastidieux si vous avez de vous exprimer de manière 1429 00:58:12,970 --> 00:58:15,530 damner précisément encore et encore et encore avec un simple 1430 00:58:15,530 --> 00:58:16,620 tel scénario. 1431 00:58:16,620 --> 00:58:19,470 Donc C a quelques raccourcis, comme celui-ci. 1432 00:58:19,470 --> 00:58:24,270 Donc, c'est essentiellement à dire déclarer une chaîne appelée s1 et 1433 00:58:24,270 --> 00:58:32,610 l'attribuer soit cette valeur ou cette valeur si i est == - 1434 00:58:32,610 --> 00:58:35,290 désolé, je dois dire que c'est plus clair. 1435 00:58:35,290 --> 00:58:41,680 Déclarer une variable s1, lui attribuer cette valeur si cela est vrai. 1436 00:58:41,680 --> 00:58:44,280 Sinon, affectez-lui cette valeur. 1437 00:58:44,280 --> 00:58:47,220 Donc, en d'autres termes, il s'agit d'une sorte de façon d'une ligne de 1438 00:58:47,220 --> 00:58:51,490 dire si d'autre que de faire un travail en cours de route. 1439 00:58:51,490 --> 00:58:55,540 Donc, si i est 1, alors allez-y et appelez cette "bouteille". Et 1440 00:58:55,540 --> 00:58:59,830 alors cette chose, appelez-le "bouteilles". Pendant ce temps, s2, la 1441 00:58:59,830 --> 00:59:04,060 deuxième mot que nous avons besoin de définir, si i est égal à 2, nous allons 1442 00:59:04,060 --> 00:59:08,350 s2 mis à "bouteille". Dans le cas contraire, réglez-le sur "bouteilles". Et qu'est-ce 1443 00:59:08,350 --> 00:59:11,460 cela signifie maintenant est que je peux passer par ceci et supprimer tous 1444 00:59:11,460 --> 00:59:12,860 ces lignes de code. 1445 00:59:12,860 --> 00:59:17,220 Et quand je dis, un peu ridicule, que c'est maintenant 1446 00:59:17,220 --> 00:59:20,060 sexy, c'est plus sexy dans le genre de sens stylistique. 1447 00:59:20,060 --> 00:59:22,660 Le fait que fonctionnellement, ce code va effectivement 1448 00:59:22,660 --> 00:59:24,610 faire exactement la même chose. 1449 00:59:24,610 --> 00:59:26,890 Et même si cela peut paraître un peu obscur au premier abord 1450 00:59:26,890 --> 00:59:29,250 coup d'oeil, parce que nous n'avons pas vu cette construction avant, je serais 1451 00:59:29,250 --> 00:59:31,850 soutiennent que c'est en fin de compte va être d'autant plus 1452 00:59:31,850 --> 00:59:34,820 lisible et donc beaucoup plus facile pour nous, les humains pour trier des 1453 00:59:34,820 --> 00:59:36,830 comprendre, parce que maintenant vous pouvez simplement lire l' 1454 00:59:36,830 --> 00:59:38,830 Code sur une seule ligne. 1455 00:59:38,830 --> 00:59:41,550 C'est toujours dans le même esprit à un si l', lorsque cela est 1456 00:59:41,550 --> 00:59:44,920 condition et c'est ce qui est le cas dans le présent et 1457 00:59:44,920 --> 00:59:46,480 c'est ce qui est à l'intérieur du monde. 1458 00:59:46,480 --> 00:59:49,450 Mais nous ne pouvons le faire juste beaucoup plus élégamment. 1459 00:59:49,450 --> 00:59:52,650 >> Et si je reviens à mon terminal, après avoir supprimé tous 1460 00:59:52,650 --> 00:59:55,530 de ces lignes et de les remplacer par tout les deux, 1461 00:59:55,530 --> 01:00:00,150 recompilation, ré-exécuter des bouteilles de bière avec 99, vous remarquerez que mon 1462 01:00:00,150 --> 01:00:03,350 la grammaire est, en fait, toujours correct. 1463 01:00:03,350 --> 01:00:06,160 Encore une fois, quelque chose pour commencer. 1464 01:00:06,160 --> 01:00:08,840 2 bouteilles de bière, 1 bouteille de bière. 1465 01:00:08,840 --> 01:00:09,370 On dirait bien. 1466 01:00:09,370 --> 01:00:10,100 Ouais. 1467 01:00:10,100 --> 01:00:13,900 Voilà donc une solution beaucoup plus succinct. 1468 01:00:13,900 --> 01:00:16,020 Donc, cela, aussi, que vous devenez plus à l'aise avec C, pas 1469 01:00:16,020 --> 01:00:18,630 nécessairement avec le pset première ou même la deuxième, mais 1470 01:00:18,630 --> 01:00:21,170 se rendre compte que ces constructions peuvent nous permettre de faire des choses jamais 1471 01:00:21,170 --> 01:00:22,810 plus d'élégance. 1472 01:00:22,810 --> 01:00:25,200 Maintenant, nous allons faire autre chose ici. 1473 01:00:25,200 --> 01:00:31,460 Permettez-moi aller de l'avant et d'ouvrir return1.c. 1474 01:00:31,460 --> 01:00:34,340 Maintenant, nous allons commencer à résoudre un autre problème d'une manière qui 1475 01:00:34,340 --> 01:00:37,140 nous permet d'écrire du code plus sophistiqué. 1476 01:00:37,140 --> 01:00:39,960 >> Alors, voici un programme simple petit dont le but dans la vie 1477 01:00:39,960 --> 01:00:41,870 est d'incrémenter les valeurs. 1478 01:00:41,870 --> 01:00:43,100 Et en fait, prenons un peu de recul. 1479 01:00:43,100 --> 01:00:44,400 Permettez-moi de le faire manuellement. 1480 01:00:44,400 --> 01:00:52,200 Permettez-moi de faire inclure et int main (void). 1481 01:00:52,200 --> 01:00:53,450 Et laissez-moi appeler cette increment.c. 1482 01:00:57,150 --> 01:00:58,570 Et qu'est-ce que je veux faire? 1483 01:00:58,570 --> 01:01:02,240 Je vais aller de l'avant et dire quelque chose comme - 1484 01:01:02,240 --> 01:01:04,280 allons-nous appeler les numéros de la même - 1485 01:01:04,280 --> 01:01:04,980 x int. 1486 01:01:04,980 --> 01:01:13,670 Donc x int obtient 2; printf x est% d, nouvelle ligne, x. 1487 01:01:13,670 --> 01:01:16,780 Alors que je tape vite, mais genre de choses maintenant familier. 1488 01:01:16,780 --> 01:01:18,830 Alors je vais faire x + +. 1489 01:01:18,830 --> 01:01:21,710 Ensuite, je vais imprimer cette même phrase. 1490 01:01:21,710 --> 01:01:24,550 Et puis je vais retourner 0 juste pour quitter le programme. 1491 01:01:24,550 --> 01:01:25,960 D'accord, c'est un programme qui 1492 01:01:25,960 --> 01:01:26,960 incrémente un numéro. 1493 01:01:26,960 --> 01:01:29,830 C'est allons d'abord initialiser quelque chose à 2, puis c'est 1494 01:01:29,830 --> 01:01:33,470 aller à l'incrémenter et l'imprimer à nouveau. 1495 01:01:33,470 --> 01:01:36,930 >> Nous allons donc lancer incrément, programme incroyablement simple. 1496 01:01:36,930 --> 01:01:40,940 Mais supposons maintenant que je veux cube de la valeur, il ne faut 1497 01:01:40,940 --> 01:01:42,490 quelque chose de quelque peu arbitraire. 1498 01:01:42,490 --> 01:01:45,140 Et j'ai vraiment envie de faire x obtient le cube de celle-ci. 1499 01:01:45,140 --> 01:01:47,570 Donc je pourrais utiliser ce qu'on appelle la fonction pow, mais je ne 1500 01:01:47,570 --> 01:01:48,650 sais vraiment pas où c'est le moment. 1501 01:01:48,650 --> 01:01:50,580 Donc je vais faire de cette façon à l'ancienne. 1502 01:01:50,580 --> 01:01:54,550 x fois, cela équivaut à x fois x fois x. 1503 01:01:54,550 --> 01:01:56,880 Donc, je suis cubage la valeur, en le multipliant par lui-même à nouveau 1504 01:01:56,880 --> 01:02:00,440 et encore et encore, afin que nous ayons le pouvoir 1505 01:02:00,440 --> 01:02:02,050 de 3 dans ce cas. 1506 01:02:02,050 --> 01:02:06,000 Alors maintenant, les chiffres que je doit imprimer doit être, comme nous le verrons 1507 01:02:06,000 --> 01:02:08,450 ici - incrément faire, il s'agit en fait pas vraiment incrémenter 1508 01:02:08,450 --> 01:02:10,260 plus, mais nous allons laisser le nom seul - 1509 01:02:10,260 --> 01:02:11,590 2 puis 8. 1510 01:02:11,590 --> 01:02:17,670 Maintenant, nous avons les prémices de l'occasion pour le raffinement 1511 01:02:17,670 --> 01:02:21,570 ici, où cette chose de cubage de la multiplication d'un nombre 1512 01:02:21,570 --> 01:02:24,680 par lui-même par lui-même par lui-même se sent comme ce pourrait bien être 1513 01:02:24,680 --> 01:02:27,920 utile de disposer d'une fonction, un peu comme quelqu'un a décidé 1514 01:02:27,920 --> 01:02:30,430 ans - vous savez, un peu utile si l'un de nous s'assoit 1515 01:02:30,430 --> 01:02:33,120 printf et écrit afin que le reste du monde peut l'utiliser, 1516 01:02:33,120 --> 01:02:36,160 pourquoi ne pas s'asseoir et d'écrire une fonction appelée cube 1517 01:02:36,160 --> 01:02:39,250 que le fait de cubage pour nous, nous n'avons pas manuellement 1518 01:02:39,250 --> 01:02:41,500 mettre en œuvre la notion de cubage des valeurs ici? 1519 01:02:41,500 --> 01:02:44,040 >> Ainsi, un exemple simple, mais il faut aller de l'avant et de l'utiliser est comme un 1520 01:02:44,040 --> 01:02:46,280 possibilité d'écrire notre propre fonction. 1521 01:02:46,280 --> 01:02:49,110 Donc, jusqu'à présent, nous avons seulement utilisé principale, et nous avons utilisé d'autres 1522 01:02:49,110 --> 01:02:51,780 fonctions des gens, mais nous n'avons pas écrit le nôtre. 1523 01:02:51,780 --> 01:02:52,650 Alors on y va. 1524 01:02:52,650 --> 01:02:56,330 Je vais aller de l'avant et écrire une fonction appelée cube. 1525 01:02:56,330 --> 01:02:58,490 Et je vais devoir prendre une entrée. 1526 01:02:58,490 --> 01:03:02,070 Donc, son entrée va être un entier. 1527 01:03:02,070 --> 01:03:03,570 Et qu'est-ce qu'il va faire? 1528 01:03:03,570 --> 01:03:08,500 Il va déclarer int sortie = entrée fois entrée 1529 01:03:08,500 --> 01:03:09,880 entrée fois. 1530 01:03:09,880 --> 01:03:12,190 Et puis ça va revenir cette sortie. 1531 01:03:12,190 --> 01:03:14,500 Et puis je dois être plus précis maintenant. 1532 01:03:14,500 --> 01:03:16,820 Cette fonction va retourner un int. 1533 01:03:16,820 --> 01:03:19,130 Donc ici, alors est de savoir comment vous pouvez écrire vos propres fonctions. 1534 01:03:19,130 --> 01:03:20,850 Vous devez d'abord décider ce qui est le nom de votre 1535 01:03:20,850 --> 01:03:21,720 fonction va être. 1536 01:03:21,720 --> 01:03:23,964 Et généralement, quelque chose explicative est bon, donc je vais 1537 01:03:23,964 --> 01:03:25,060 appeler cube. 1538 01:03:25,060 --> 01:03:27,180 Ensuite, vous devez spécifier ce que ça va revenir, ce qui est 1539 01:03:27,180 --> 01:03:28,240 sa production va être. 1540 01:03:28,240 --> 01:03:29,595 Et nous n'avons pas beaucoup d'options encore. 1541 01:03:29,595 --> 01:03:32,260 Int, char, float, bool, string. 1542 01:03:32,260 --> 01:03:34,260 Pour l'instant, je vais rester avec un int, parce que je le veux 1543 01:03:34,260 --> 01:03:35,880 pour retourner un entier. 1544 01:03:35,880 --> 01:03:38,770 Ensuite, vous devez spécifier les entrées, le cas échéant, sont. 1545 01:03:38,770 --> 01:03:41,570 Et si cube prend un argument, prend quelque chose entre 1546 01:03:41,570 --> 01:03:44,970 parenthèses, vous devez donner cet argument un nom, afin que 1547 01:03:44,970 --> 01:03:47,860 vous pouvez appeler ce quelque chose que vous avez mise en œuvre ou l'écriture 1548 01:03:47,860 --> 01:03:50,550 cette fonction et vous devez lui donner un type qui, dans ce 1549 01:03:50,550 --> 01:03:51,810 cas va être int. 1550 01:03:51,810 --> 01:03:54,690 Donc en bref, le cube est une fonction qui prend un entier 1551 01:03:54,690 --> 01:03:57,560 en entrée et renvoie un entier comme résultat. 1552 01:03:57,560 --> 01:03:59,240 >> Alors, que faut-il faire avec cette entrée? 1553 01:03:59,240 --> 01:04:03,710 Eh bien, à la ligne 14, je déclare une variable appelée sortie, et je 1554 01:04:03,710 --> 01:04:07,410 attribuez-lui la valeur, entrée entrée entrée fois fois. 1555 01:04:07,410 --> 01:04:11,490 Et puis je reviens de sortie. 1556 01:04:11,490 --> 01:04:14,890 Alors, comment puis-je utiliser ce alors? 1557 01:04:14,890 --> 01:04:19,210 Que dois-je changer ces caractères en surbrillance sur la ligne 1558 01:04:19,210 --> 01:04:21,006 7 à être, pensez-vous? 1559 01:04:21,006 --> 01:04:21,800 PUBLIC: [Inaudible]. 1560 01:04:21,800 --> 01:04:25,570 DAVID J. MALAN: Ouais, donc cube de x. 1561 01:04:25,570 --> 01:04:28,290 Si x est une variable, ce qui signifie qu'il possède une certaine valeur. 1562 01:04:28,290 --> 01:04:30,190 Heureusement, il est de type integer. 1563 01:04:30,190 --> 01:04:34,280 Et parce que x est un entier, cela signifie que je peux le passer dans le cube. 1564 01:04:34,280 --> 01:04:39,500 Et même si je suis remplaçant la valeur de x avec la valeur 1565 01:04:39,500 --> 01:04:42,780 de x cube, comme cela a été le cas jusqu'à présent, chaque fois que vous 1566 01:04:42,780 --> 01:04:46,150 ont signe égal et une ligne de code, les trucs sur le droit 1567 01:04:46,150 --> 01:04:49,090 est exécuté et obtient ensuite affecté à la 1568 01:04:49,090 --> 01:04:50,150 valeur sur la gauche. 1569 01:04:50,150 --> 01:04:52,950 Ainsi, l'ordre des opérations est que nous le voudrions. 1570 01:04:52,950 --> 01:04:56,620 Donc ça marche? 1571 01:04:56,620 --> 01:04:58,410 Eh bien, laissez-moi descendre ici. 1572 01:04:58,410 --> 01:04:59,970 Permettez-moi d'ouvrir ma fenêtre de terminal. 1573 01:04:59,970 --> 01:05:03,610 Permettez-moi de ne faire incrément, Entrée. 1574 01:05:03,610 --> 01:05:07,140 "Déclaration implicite de" cube "fonction n'est pas disponible dans 1575 01:05:07,140 --> 01:05:13,700 C99. "Soit dit en passant, C99 se réfère à la langue C tel qu'il était 1576 01:05:13,700 --> 01:05:16,790 définie en 1999, qui était une mise à jour sur la version de 1577 01:05:16,790 --> 01:05:19,360 1989, qui est une mise à jour sur l'original. 1578 01:05:19,360 --> 01:05:21,740 Donc, c'est tout ce que cela signifie. 1579 01:05:21,740 --> 01:05:24,250 >> Alors qu'est-ce que ça veut dire "déclaration implicite de 1580 01:05:24,250 --> 01:05:26,790 "cube" fonction n'est pas disponible? "C'est juste ici. 1581 01:05:26,790 --> 01:05:28,430 C'est là, dans la ligne 12. 1582 01:05:28,430 --> 01:05:30,460 PUBLIC: [Inaudible]. 1583 01:05:30,460 --> 01:05:30,730 DAVID J. MALAN: Qu'est-ce que c'est? 1584 01:05:30,730 --> 01:05:32,470 PUBLIC: Ce n'est pas avant. 1585 01:05:32,470 --> 01:05:33,540 DAVID J. MALAN: Ce n'est pas avant. 1586 01:05:33,540 --> 01:05:34,740 Donc, c'est la seule chose. 1587 01:05:34,740 --> 01:05:38,190 C est un peu stupide, ou compilateurs C sont un peu stupide. 1588 01:05:38,190 --> 01:05:41,060 Ils ont vraiment seulement faire ce que vous leur dites de faire. 1589 01:05:41,060 --> 01:05:44,770 Et eux, en particulier, que lire votre code de haut en bas, 1590 01:05:44,770 --> 01:05:45,620 de gauche à droite. 1591 01:05:45,620 --> 01:05:49,140 Donc, si le compilateur, Clang, est la lecture de votre code, ligne 1, il 1592 01:05:49,140 --> 01:05:50,120 Chiffres sur la façon de procéder. 1593 01:05:50,120 --> 01:05:50,940 Oh, voici principale. 1594 01:05:50,940 --> 01:05:53,000 Bon, je vais aller de l'avant et de déclarer une variable x. 1595 01:05:53,000 --> 01:05:54,160 Permettez-moi d'imprimer quelque chose. 1596 01:05:54,160 --> 01:05:55,890 Ligne 7, ce que le diable est cube? 1597 01:05:55,890 --> 01:05:58,230 Ce n'est pas déclarée dans stdio.h. 1598 01:05:58,230 --> 01:06:00,950 Il ne vient pas avec C. Je n'ai aucune idée de ce qu'il faut faire. 1599 01:06:00,950 --> 01:06:03,960 Et si Clang renfloue juste et quitte avec ce message d'erreur. 1600 01:06:03,960 --> 01:06:05,850 Ainsi, nous pouvons résoudre ce problème dans un couple des manières. 1601 01:06:05,850 --> 01:06:10,530 Nous pouvons apprendre à Clang ce cube est en déplaçant simplement où l' 1602 01:06:10,530 --> 01:06:11,820 déclaration. 1603 01:06:11,820 --> 01:06:14,640 Alors j'ai coupé et collé au sommet principal. 1604 01:06:14,640 --> 01:06:17,770 Se rendent compte maintenant que juste parce principal n'est plus d'abord, il est 1605 01:06:17,770 --> 01:06:19,150 toujours exécuté par défaut. 1606 01:06:19,150 --> 01:06:20,060 Principale est le principal. 1607 01:06:20,060 --> 01:06:21,022 C'est le nom de la fonction par défaut. 1608 01:06:21,022 --> 01:06:22,930 Il n'a pas d'importance où il est dans un fichier. 1609 01:06:22,930 --> 01:06:26,910 Mais au moins maintenant Clang a vu cube avant de l'utiliser. 1610 01:06:26,910 --> 01:06:28,500 Donc, nous allons voir si Clang est plus heureux maintenant. 1611 01:06:28,500 --> 01:06:31,410 Assurez-incrémentation, il ne compiler ce moment. 1612 01:06:31,410 --> 01:06:33,060 >> Permettez-moi de lancer incrément. 1613 01:06:33,060 --> 01:06:34,810 Et en effet, il semble fonctionner. 1614 01:06:34,810 --> 01:06:36,810 Maintenant, vous pouvez trouver des scénarios où finalement 1615 01:06:36,810 --> 01:06:38,650 il n'est pas possible de mettre toutes les fonctions 1616 01:06:38,650 --> 01:06:39,740 au-dessus de toute autre fonction. 1617 01:06:39,740 --> 01:06:42,140 Vous êtes coincé dans cette boucle infinie dans la réalité, 1618 01:06:42,140 --> 01:06:43,480 où ce gars veut être ici, mais ce 1619 01:06:43,480 --> 01:06:44,390 homme a besoin d'être là. 1620 01:06:44,390 --> 01:06:45,830 Donc, cela ne fonctionne pas toujours. 1621 01:06:45,830 --> 01:06:49,020 Donc, heureusement, C a une solution plus élégante. 1622 01:06:49,020 --> 01:06:50,790 Je vais mettre ce là où il était, tout simplement parce que je 1623 01:06:50,790 --> 01:06:53,390 préfèrent, comme une question de principe, que le principal toujours 1624 01:06:53,390 --> 01:06:55,550 en haut, parce que c'est juste agréable de voir ce que ce programme 1625 01:06:55,550 --> 01:06:56,920 fait par défaut. 1626 01:06:56,920 --> 01:06:58,950 Et ce que je vais faire ici est de déclarer ce qu'on appelle 1627 01:06:58,950 --> 01:07:00,250 un prototype. 1628 01:07:00,250 --> 01:07:05,730 Je vais re-déclarer ma fonction cube par littéralement 1629 01:07:05,730 --> 01:07:07,180 copier-coller. 1630 01:07:07,180 --> 01:07:08,290 En fait, ce n'est pas littéralement. 1631 01:07:08,290 --> 01:07:13,060 Donc littéralement copier-coller la ligne 15 1632 01:07:13,060 --> 01:07:15,160 au-dessus de la ligne 6. 1633 01:07:15,160 --> 01:07:17,010 Il n'a pas d'importance ce que cette ligne se termine sur. 1634 01:07:17,010 --> 01:07:18,380 Il se trouve sur la ligne 4. 1635 01:07:18,380 --> 01:07:19,950 Mais il ne faut être avant la partie principale. 1636 01:07:19,950 --> 01:07:21,150 Mais la différence. 1637 01:07:21,150 --> 01:07:24,100 Ligne 4 se termine par un point-virgule, ce qui signifie bon, 1638 01:07:24,100 --> 01:07:27,510 Clang, prendre mon mot pour lui qu'il existe une fonction 1639 01:07:27,510 --> 01:07:31,350 appelé cube qui prend un int et renvoie un int. 1640 01:07:31,350 --> 01:07:33,020 Mais je ne vais pas vous dire ce que c'est le moment. 1641 01:07:33,020 --> 01:07:35,180 Il suffit de savoir que je vous promets de vous raconter la suite. 1642 01:07:35,180 --> 01:07:38,490 Et en effet, maintenant, il est normal que cela est en bas. 1643 01:07:38,490 --> 01:07:41,275 >> Donc, ce qui est généralement mieux, car alors au sommet de 1644 01:07:41,275 --> 01:07:44,240 votre dossier, il vous suffit de débiter, à tir rapide, une ligne 1645 01:07:44,240 --> 01:07:46,470 chacun, quels sont les noms de vos fonctions, quelle est leur 1646 01:07:46,470 --> 01:07:49,120 entrées, quelles sont leurs sorties sont. 1647 01:07:49,120 --> 01:07:52,210 Et pour être plus clair, des moyens d'entrée généralement argument ou 1648 01:07:52,210 --> 01:07:54,110 paramètre, synonymes. 1649 01:07:54,110 --> 01:07:56,890 Des moyens de sortie de valeur de retour, ce qu'il fait 1650 01:07:56,890 --> 01:07:58,700 la main vers moi. 1651 01:07:58,700 --> 01:08:03,420 Donc dans ce cas là, le cube a été déclarée en haut, mais 1652 01:08:03,420 --> 01:08:06,940 défini, autrement dit en oeuvre, à la partie inférieure. 1653 01:08:06,940 --> 01:08:09,620 Alors maintenant, nous allons revenir ici et relancer cette. 1654 01:08:09,620 --> 01:08:13,430 Alors maintenant, laissez-moi aller de l'avant et de faire exécuter à nouveau, relancez l'incrément. 1655 01:08:13,430 --> 01:08:16,500 Et il semble maintenant fonctionner très bien. 1656 01:08:16,500 --> 01:08:19,450 Alors maintenant, nous pouvons aller de l'avant et prendre en compte quelque chose comme la 1657 01:08:19,450 --> 01:08:23,720 par exemple de la bière dans cette quatrième version. 1658 01:08:23,720 --> 01:08:25,590 Permettez-moi de faire défiler vers le bas ici. 1659 01:08:25,590 --> 01:08:28,149 Et remarquez que je sorte de cette leçon a pris à cœur en ce moment. 1660 01:08:28,149 --> 01:08:31,140 Le fait que je chantais la même strophe encore et 1661 01:08:31,140 --> 01:08:34,130 encore et encore, la ligne même refrain dans la chanson, a estimé 1662 01:08:34,130 --> 01:08:36,439 Comme pourquoi n'ai-je pas sur des facteurs qui dans une fonction? 1663 01:08:36,439 --> 01:08:38,470 Et en effet, cela devrait être une des motivations. 1664 01:08:38,470 --> 01:08:40,960 Outre le fait que quelqu'un d'autre dans le monde voudrez peut-être 1665 01:08:40,960 --> 01:08:42,390 d'utiliser une fonction cube - 1666 01:08:42,390 --> 01:08:44,560 c'est une bonne raison de tenir compte quelque chose et rédigez votre 1667 01:08:44,560 --> 01:08:45,720 propre fonction personnalisée - 1668 01:08:45,720 --> 01:08:48,720 s'il ya un morceau de code dans votre programme qui fait juste 1669 01:08:48,720 --> 01:08:51,370 point de vue conceptuel, que vous souhaitez sorte de lui donner une 1670 01:08:51,370 --> 01:08:53,740 nom - comme dans ce cas, chorus - 1671 01:08:53,740 --> 01:08:57,380 alors vous pouvez même écrire que comme une fonction distincte. 1672 01:08:57,380 --> 01:08:59,560 Vous n'avez pas besoin de tout écrire en principal si elle vient 1673 01:08:59,560 --> 01:09:02,609 sent plus propre de le séparer et de lui donner un nom. 1674 01:09:02,609 --> 01:09:05,529 >> Donc dans ce cas là, vous remarquerez que j'ai un commentaire sommet 1675 01:09:05,529 --> 01:09:06,859 cette fonction qui chante à peu près le 1676 01:09:06,859 --> 01:09:08,630 nombre de bouteilles spécifiées. 1677 01:09:08,630 --> 01:09:10,609 Notez ici que je n'ai pas besoin d'appeler ces 1678 01:09:10,609 --> 01:09:12,520 choses entrée et de sortie. 1679 01:09:12,520 --> 01:09:16,090 En fait, cette fois, je viens d'appeler mon entrée b pour bouteille. 1680 01:09:16,090 --> 01:09:19,960 Et remarquez ici, nulle suggère quoi? 1681 01:09:19,960 --> 01:09:21,309 Ce refrain - 1682 01:09:21,309 --> 01:09:22,660 PUBLIC: N'est-il pas revenir. 1683 01:09:22,660 --> 01:09:23,870 DAVID J. MALAN: Ne renvoie pas de valeur. 1684 01:09:23,870 --> 01:09:26,800 Et en effet, les fonctions n'ont pas à retourner des valeurs. 1685 01:09:26,800 --> 01:09:28,060 Ils peuvent juste faire quelque chose. 1686 01:09:28,060 --> 01:09:30,270 Ils peuvent avoir ce qu'on appelle des effets secondaires, qui, dans ce 1687 01:09:30,270 --> 01:09:33,109 cas est juste un tas d'imprimer sur l'écran. 1688 01:09:33,109 --> 01:09:36,580 Donc remarquerez que ce code ici, je me suis littéralement juste volé 1689 01:09:36,580 --> 01:09:37,680 l'exemple précédent. 1690 01:09:37,680 --> 01:09:39,930 La seule différence est la place de i à l'aide de mon 1691 01:09:39,930 --> 01:09:42,890 variable, je suis maintenant en utilisant b comme ma variable. 1692 01:09:42,890 --> 01:09:45,880 J'ai donc b ici-bas, je n'ai b ici-bas, j'ai b 1693 01:09:45,880 --> 01:09:47,109 moins 1 ici-bas. 1694 01:09:47,109 --> 01:09:49,279 Mais le code est exactement le même. 1695 01:09:49,279 --> 01:09:52,529 Mais juste pour vous montrer maintenant comment nous pouvons l'utiliser, laissez-moi aller 1696 01:09:52,529 --> 01:09:56,780 l'avant et de changer réellement que cela soit une boucle for. 1697 01:09:56,780 --> 01:10:03,850 for (int i = n; i> n; i -). 1698 01:10:03,850 --> 01:10:06,230 >> Donc, j'ai volé que de notre exemple précédent. 1699 01:10:06,230 --> 01:10:08,970 Auparavant, c'est dans la ligne 37 que j'aurais commencé 1700 01:10:08,970 --> 01:10:10,640 chanter cette chanson ennuyeux. 1701 01:10:10,640 --> 01:10:15,810 Mais à la place, je vais maintenant appeler chœur de i. 1702 01:10:15,810 --> 01:10:16,870 Terminé. 1703 01:10:16,870 --> 01:10:20,260 Alors maintenant, à chaque itération de cette boucle, j'appelle cet autre 1704 01:10:20,260 --> 01:10:22,220 fonction, chorus, qu'il m'est arrivé d'écrire. 1705 01:10:22,220 --> 01:10:24,110 Il n'a pas été écrit par quelqu'un d'autre d'années. 1706 01:10:24,110 --> 01:10:27,930 Mais chœur, quant à lui, utilise printf pour imprimer 1707 01:10:27,930 --> 01:10:29,840 sur ces quatre lignes. 1708 01:10:29,840 --> 01:10:32,720 Mais le fait que je vais appeler refrain encore et encore dans un 1709 01:10:32,720 --> 01:10:35,900 boucle signifie que je vais avoir, à la fin, le 1710 01:10:35,900 --> 01:10:39,310 exacte même chanson que j'ai à ce jour. 1711 01:10:39,310 --> 01:10:42,130 Donc en bref, maintenant, si je repense à mon code, même si 1712 01:10:42,130 --> 01:10:44,240 ce qui équivaut fonctionnellement, vous remarquerez que c'est 1713 01:10:44,240 --> 01:10:46,020 commence à être encore plus lisible. 1714 01:10:46,020 --> 01:10:48,410 Je ne sais pas exactement comment getInt 1715 01:10:48,410 --> 01:10:49,250 est mis en œuvre. 1716 01:10:49,250 --> 01:10:52,050 Franchement, je ne sais pas comment chorus est mis en œuvre. 1717 01:10:52,050 --> 01:10:52,970 Mais il n'a pas d'importance pour moi. 1718 01:10:52,970 --> 01:10:55,620 Je ne m'inquiète pas, parce que maintenant je peux presque, comme un être humain, lisez 1719 01:10:55,620 --> 01:10:57,050 ce fond de haut en. 1720 01:10:57,050 --> 01:10:59,950 Et parce que les fonctions sont nommés en fonction de ce qu'ils 1721 01:10:59,950 --> 01:11:02,910 faire, mon code est plus lisible. 1722 01:11:02,910 --> 01:11:05,190 Et comme nos programmes obtiennent beaucoup plus complexe - 1723 01:11:05,190 --> 01:11:07,220 d'ici la fin du semestre, vous devrez écrire des centaines de lignes 1724 01:11:07,220 --> 01:11:10,970 du code dans les langages comme PHP et JavaScript et autres - 1725 01:11:10,970 --> 01:11:13,550 vous verrez que c'est tellement plus facile que de garder une trace de 1726 01:11:13,550 --> 01:11:14,080 ce que vous avez fait. 1727 01:11:14,080 --> 01:11:15,810 Et quand vous commencer à collaborer avec des amis ou 1728 01:11:15,810 --> 01:11:19,010 partenaires ou collègues, vous serez capable d'écrire beaucoup plus 1729 01:11:19,010 --> 01:11:22,910 des programmes massifs en commençant à exercer ces principes de base 1730 01:11:22,910 --> 01:11:23,990 blocs de construction. 1731 01:11:23,990 --> 01:11:25,550 >> Donc, avec cela dit, pourquoi ne pas l'appeler un jour? 1732 01:11:25,550 --> 01:11:27,190 Et nous allons vous voir mercredi. 1733 01:11:27,190 --> 01:11:33,611 [Applaudissements]