1 00:00:07,590 --> 00:00:09,920 [Powered by Google Translate] DAVID J. MALAN: Très bien, c'est CS50 et c'est la 2 00:00:09,920 --> 00:00:15,250 la fin de la semaine 1, les cartes sont en étude ainsi et le nombre total de 3 00:00:15,250 --> 00:00:18,640 camarades de classe que vous avez cette année est de 745. 4 00:00:18,640 --> 00:00:20,920 Et nous sommes tellement heureux d'avoir un si grand nombre d'entre vous au cours 5 00:00:20,920 --> 00:00:23,680 ce semestre, mais même si ce cours est si grand, 6 00:00:23,680 --> 00:00:26,090 se rendre compte que ce sont ces choses comme des déjeuners vendredi, comme 7 00:00:26,090 --> 00:00:29,020 les heures de bureau, 15 personne sections, et ainsi de suite que les 8 00:00:29,020 --> 00:00:30,590 sont vraiment destinées à créer ce plus intime 9 00:00:30,590 --> 00:00:31,140 environnement. 10 00:00:31,140 --> 00:00:34,070 Ainsi, même si nous pouvons recueillir une ou deux fois par semaine, ici à 11 00:00:34,070 --> 00:00:36,420 Sanders, sachez que beaucoup de votre expérience dans ce cours 12 00:00:36,420 --> 00:00:39,330 va très bien être pratique sur les côtés de vos camarades de classe 13 00:00:39,330 --> 00:00:40,730 et le personnel enseignant. 14 00:00:40,730 --> 00:00:43,960 >> Alors nous y voilà, Automne 2012. 15 00:00:43,960 --> 00:00:47,530 Ainsi, rappelons que la dernière fois nous avons fini sur une note de 16 00:00:47,530 --> 00:00:50,460 imprécision, parle de la représentation des nombres. 17 00:00:50,460 --> 00:00:52,950 Et nous avons regardé l'un des échecs qui ont eu lieu, dans le 18 00:00:52,950 --> 00:00:54,920 monde réel, quand il est venu à l'incompréhension 19 00:00:54,920 --> 00:00:55,890 comment les ordinateurs fonctionnent. 20 00:00:55,890 --> 00:00:58,590 Eh bien, aujourd'hui, nous nous pencherons sur un autre de ces idées 21 00:00:58,590 --> 00:01:01,410 ainsi que de continuer notre discussion sur le client CS50 22 00:01:01,410 --> 00:01:04,090 et C et ce que cela signifie vraiment au programme. 23 00:01:04,090 --> 00:01:06,430 Mais d'abord, juste un couple des annonces tourbillon. 24 00:01:06,430 --> 00:01:08,930 >> Les articles commencent ce dimanche, et la première semaine est toujours un 25 00:01:08,930 --> 00:01:11,030 peu d'avance rapide, parce que nous avons juste eu à 26 00:01:11,030 --> 00:01:12,620 vos formulaires section. 27 00:01:12,620 --> 00:01:14,450 Nous faisons la même chose, maintenant, avec les boursiers d'enseignement, maintenant 28 00:01:14,450 --> 00:01:16,410 qu'ils connaissent leurs horaires, de sorte que nous visons, par 29 00:01:16,410 --> 00:01:19,380 Samedi matin, pour assurer le suivi avec vous avec votre section 30 00:01:19,380 --> 00:01:20,760 missions et TF. 31 00:01:20,760 --> 00:01:22,770 Sachez que ils vont commencer le lendemain, dimanche 32 00:01:22,770 --> 00:01:24,510 ou le lundi ou le mardi. 33 00:01:24,510 --> 00:01:27,730 Et puis, nous allons tenir compte des changements de section qui se présentent 34 00:01:27,730 --> 00:01:28,690 dans les jours à venir. 35 00:01:28,690 --> 00:01:31,590 Les heures de bureau, en attendant, sont, encore une fois, ce soir, à 20 heures 11, en 36 00:01:31,590 --> 00:01:33,740 Annenberg, ainsi que demain soir. 37 00:01:33,740 --> 00:01:36,150 Même si les ensembles de problèmes sont généralement dus les jeudis 38 00:01:36,150 --> 00:01:39,020 à midi, réalisez que vous avez jusqu'à cinq jours de retard à dépenser, 39 00:01:39,020 --> 00:01:42,430 par conséquent, la disponibilité des heures de bureau le jeudi si 40 00:01:42,430 --> 00:01:45,930 vous encaissez un de ces jours de retard et, par conséquent, présenter 41 00:01:45,930 --> 00:01:47,070 quelque chose le vendredi. 42 00:01:47,070 --> 00:01:50,850 Permettez-moi de suggérer que Scratch est l'un des plus amusant, parmi les 43 00:01:50,850 --> 00:01:52,390 plus faibles séries de problèmes clés. 44 00:01:52,390 --> 00:01:55,160 Et je voudrais accrocher ces jours de retard, de façon stratégique, juste 45 00:01:55,160 --> 00:01:57,380 plus tard dans le semestre quand la vie commence à obtenir de la manière 46 00:01:57,380 --> 00:01:59,470 avec midterms et d'autres classes. 47 00:01:59,470 --> 00:02:01,580 1 Set problème, quant à lui, sera affiché sur le cours de 48 00:02:01,580 --> 00:02:06,080 site ce vendredi, comme ce sera au pied du cours 49 00:02:06,080 --> 00:02:08,789 grâce à la vidéo, qui sera filmé à 2:30 h le vendredi 50 00:02:08,789 --> 00:02:11,890 puis mis en ligne dès le lendemain. 51 00:02:11,890 --> 00:02:13,880 >> Nous avons donc pris fin lundi. 52 00:02:13,880 --> 00:02:15,450 Je veux - en fait, une note ici. 53 00:02:15,450 --> 00:02:18,870 Parce que les classes - parce que Sanders ne prêtent pas exactement 54 00:02:18,870 --> 00:02:22,220 lui-même occasionnel Q & A dans les deux sens terriblement bien, nous sommes 55 00:02:22,220 --> 00:02:24,030 va essayer quelque chose de nouveau cette année, lequel 56 00:02:24,030 --> 00:02:26,160 si vous n'êtes pas à l'aise de votre main ou que vous venez de 57 00:02:26,160 --> 00:02:28,800 préfèrent ne pas lever la main dans une salle comme ça, 58 00:02:28,800 --> 00:02:30,710 nous allons avoir quelques-uns des compagnons d'enseignement et AR 59 00:02:30,710 --> 00:02:33,260 effectifs cs50.net/discuss cours de lecture. 60 00:02:33,260 --> 00:02:35,440 Donc, si vous avez une question, parce que j'étais complètement 61 00:02:35,440 --> 00:02:37,510 sait pas quelque chose ou si vous êtes curieux au sujet de certains 62 00:02:37,510 --> 00:02:39,640 sujet, essayez de poster sur la liste. 63 00:02:39,640 --> 00:02:42,670 L'étiqueter avec une étiquette de conférence, et nous ferons de notre mieux 64 00:02:42,670 --> 00:02:45,430 aujourd'hui et la semaine prochaine - nous allons essayer cela - pour aligner 65 00:02:45,430 --> 00:02:47,990 soit par voie électronique, en ligne, ou si elle se sent comme nous le devrions 66 00:02:47,990 --> 00:02:50,430 vraiment répondre en masse, l'un des compagnons d'enseignement ou de 67 00:02:50,430 --> 00:02:52,080 CA va lever la main et demander 68 00:02:52,080 --> 00:02:53,480 anonyme en votre nom. 69 00:02:53,480 --> 00:02:55,650 Donc, nous allons opter pour cette solution et voir comment cela fonctionne. 70 00:02:55,650 --> 00:02:58,540 Mais, par tous les moyens, continuer à lever les mains que vous le souhaitez. 71 00:02:58,540 --> 00:03:11,420 >> Donc, la dernière fois que nous a révélé que 10% ou un dixième n'est pas, en 72 00:03:11,420 --> 00:03:13,840 fait, 0,1, comme vous avez appris il ya plusieurs années. 73 00:03:13,840 --> 00:03:15,390 C'est en fait, une valeur comme ça. 74 00:03:15,390 --> 00:03:16,970 Mais ce n'est pas tout à fait vrai, pas vrai? 75 00:03:16,970 --> 00:03:19,585 Nous venons d'avoir cette contrainte dans les ordinateurs grâce à quoi, si vous 76 00:03:19,585 --> 00:03:22,450 seulement une quantité limitée de mémoire, RAM ou plus 77 00:03:22,450 --> 00:03:25,220 spécifiquement bits, eh bien, il n'y a qu'un nombre fini 78 00:03:25,220 --> 00:03:26,980 des choses que vous pouvez représenter. 79 00:03:26,980 --> 00:03:29,780 Par exemple, si nous avons le nombre zéro, et nous voulons 80 00:03:29,780 --> 00:03:32,790 représenter en binaire, en utilisant huit bits, où un bit, 81 00:03:32,790 --> 00:03:34,710 encore une fois, est un zéro ou un, nous pourrions 82 00:03:34,710 --> 00:03:39,240 le représenter comme 00000000. 83 00:03:39,240 --> 00:03:41,160 Et c'est un peu inutilement verbeux. 84 00:03:41,160 --> 00:03:43,700 Tout comme dans le système décimal dans le monde réel, 85 00:03:43,700 --> 00:03:47,040 généralement, si vous voulez écrire le nombre 123, nous 86 00:03:47,040 --> 00:03:52,240 les humains n'ont probablement pas écrire 00000123 même si, 87 00:03:52,240 --> 00:03:53,940 fonctionnellement, c'est exactement le même nombre. 88 00:03:53,940 --> 00:03:56,580 Nous venons de déposer des zéros, pour ainsi dire. 89 00:03:56,580 --> 00:03:58,270 >> En binaire, nous pouvons faire la même chose. 90 00:03:58,270 --> 00:04:01,440 Binaire et zéro, zéro et zéro binaire est juste. 91 00:04:01,440 --> 00:04:02,870 Vous avez seulement besoin d'un seul bit. 92 00:04:02,870 --> 00:04:05,020 Mais encore une fois, l'unité la plus commune de mesure dans le monde 93 00:04:05,020 --> 00:04:07,820 de l'informatique est l'octet, huit bits. 94 00:04:07,820 --> 00:04:09,720 Tout simplement parce que un bit, assez inutile. 95 00:04:09,720 --> 00:04:12,020 Huit bits, pas très utiles, mais au moins c'est plus 96 00:04:12,020 --> 00:04:14,280 utile qu'une seule unité de mesure. 97 00:04:14,280 --> 00:04:17,100 Donc, avec huit bits, nous allons représentent généralement binaire. 98 00:04:17,100 --> 00:04:20,459 Nous avons donc ici les chiffres de zéro, un, deux, et puis, comme 99 00:04:20,459 --> 00:04:24,200 Nate a fait dans notre vidéo mercredi dernier, nous pouvons continuer 100 00:04:24,200 --> 00:04:25,940 compter jusqu'à sept, de huit. 101 00:04:25,940 --> 00:04:27,860 Et puis, si l'on utilise les bits de plus en plus, nous 102 00:04:27,860 --> 00:04:29,880 peut compter jusqu'à l'infini. 103 00:04:29,880 --> 00:04:32,800 Mais si vous avez seulement un nombre fini de ces bits, comme c'est 104 00:04:32,800 --> 00:04:35,030 le cas dans tout système informatique, ou même des missiles 105 00:04:35,030 --> 00:04:36,670 système, eh bien, en effet, vous avez seulement une 106 00:04:36,670 --> 00:04:37,900 quantité finie de précision. 107 00:04:37,900 --> 00:04:41,290 Donc, si vous voulez représenter le nombre comme 0,1, ainsi, le 108 00:04:41,290 --> 00:04:43,410 ordinateur doit choisir. 109 00:04:43,410 --> 00:04:45,970 Et si elle ne dispose que d'un nombre fini de chiffres, il peut 110 00:04:45,970 --> 00:04:50,490 représentent, il peut se rapprocher de 0,1 pour vous, mais il ne peut pas 111 00:04:50,490 --> 00:04:53,730 nécessairement vous donner exactement la valeur que vous souhaitez. 112 00:04:53,730 --> 00:04:55,660 Et ce n'est que l'un des défis de l'informatique, 113 00:04:55,660 --> 00:04:57,090 sous le capot, heureusement. 114 00:04:57,090 --> 00:04:59,110 >> Alors que nous allons plus loin dans le semestre, ce niveau inférieur 115 00:04:59,110 --> 00:05:02,310 détails deviennent beaucoup moins intéressant, mais certainement l' 116 00:05:02,310 --> 00:05:05,700 application de ces idées peuvent avoir un monde très réel 117 00:05:05,700 --> 00:05:06,760 ramifications. 118 00:05:06,760 --> 00:05:08,190 L'un est un amusant petit. 119 00:05:08,190 --> 00:05:12,150 Combien d'entre vous avez vu le film étonnant espace de bureau? 120 00:05:12,150 --> 00:05:13,620 Si vous n'avez pas, c'est votre non-officiel 121 00:05:13,620 --> 00:05:14,370 devoirs pour la semaine. 122 00:05:14,370 --> 00:05:16,730 Mais en l'espace de bureau, les boursiers dans ce film se 123 00:05:16,730 --> 00:05:19,900 avantage de précisément cette idée, mais en fait ils ont volé 124 00:05:19,900 --> 00:05:21,270 partir d'un autre film que vous pourriez avoir 125 00:05:21,270 --> 00:05:22,760 vu, même des années avant. 126 00:05:22,760 --> 00:05:24,920 Alors laissez-moi vous donner quelques secondes de cette bande-annonce de 127 00:05:24,920 --> 00:05:27,470 ce film incroyable et c'est très bien 128 00:05:27,470 --> 00:05:28,340 académique pertinente. 129 00:05:28,340 --> 00:05:30,310 >> [JOUE MOVIE] 130 00:05:30,310 --> 00:05:32,240 En fait, je suis d'être promu. 131 00:05:32,240 --> 00:05:33,360 Je peux programmer un virus qui va déchirer ce que 132 00:05:33,360 --> 00:05:34,460 placer beaucoup de temps. 133 00:05:34,460 --> 00:05:35,770 Eh bien, comment ça marche? 134 00:05:35,770 --> 00:05:37,836 Chaque fois qu'il ya une transaction bancaire où l'intérêt est 135 00:05:37,836 --> 00:05:40,154 calculée, il ya des milliers par jour, l'ordinateur se retrouve 136 00:05:40,154 --> 00:05:41,040 avec ces fractions de cent. 137 00:05:41,040 --> 00:05:43,050 Mais je ne vais pas faire quelque chose d'illégal. 138 00:05:43,050 --> 00:05:46,730 Illégal? Samir, c'est l'Amérique. 139 00:05:46,730 --> 00:05:48,010 Vous devez le jure devant Dieu. 140 00:05:48,010 --> 00:05:51,870 Si personne ne sait à ce sujet mais nous, tout va bien? Aucun membre de la famille, pas de 141 00:05:51,870 --> 00:05:52,490 copines, personne. 142 00:05:52,490 --> 00:05:53,882 [Inaudible]. 143 00:05:53,882 --> 00:05:57,594 Ne vous inquiétez pas, mec, je ne dirai rien non plus. 144 00:05:57,594 --> 00:05:59,680 [FILM FIN] 145 00:05:59,680 --> 00:06:01,900 >> Très bien, alors peut-être que j'ai trouvé ce film mieux que la plupart 146 00:06:01,900 --> 00:06:05,530 les gens d'ici, mais en tout cas, le virus qui ils étaient 147 00:06:05,530 --> 00:06:06,400 essayant de créer - 148 00:06:06,400 --> 00:06:08,410 et dans les films, à tout moment qu'ils allaient appeler quelque chose d'un virus, 149 00:06:08,410 --> 00:06:09,770 ce n'est généralement pas réellement un virus. 150 00:06:09,770 --> 00:06:11,600 C'est juste un programme que quelqu'un a écrit pour faire quelque chose. 151 00:06:11,600 --> 00:06:13,800 Et dans ce cas, les gars étaient en train d'écrire un programme 152 00:06:13,800 --> 00:06:16,610 qui ont profité de leur société appelée Innotech 153 00:06:16,610 --> 00:06:19,740 système informatique, grâce à quoi les ordinateurs, aussi, même si elle 154 00:06:19,740 --> 00:06:21,350 qui concerne l'argent, ne peuvent pas nécessairement 155 00:06:21,350 --> 00:06:23,490 représentent de l'argent avec précision. 156 00:06:23,490 --> 00:06:27,630 Donc, même si vous avez 0,10 $ dans votre compte bancaire, 157 00:06:27,630 --> 00:06:31,060 0,10, ainsi, l'ordinateur peut effectivement penser que vous avez 158 00:06:31,060 --> 00:06:33,560 ce cents nombreux dans votre compte bancaire. 159 00:06:33,560 --> 00:06:35,750 Et donc ce que ces gars-là qui aspirent à faire - et ils 160 00:06:35,750 --> 00:06:38,240 volé l'idée, il s'avère de Superman III, où 161 00:06:38,240 --> 00:06:41,210 Richard Pryor fait la même chose - ils étaient essentiellement 162 00:06:41,210 --> 00:06:44,880 l'écriture de programmes qui aspirent à prendre tous les fuite 163 00:06:44,880 --> 00:06:46,930 numéros, toutes les minuscules, minuscules, minuscules fractions de 164 00:06:46,930 --> 00:06:50,160 penny, et siphonner ceux hors de sorte que les humains juste 165 00:06:50,160 --> 00:06:52,620 pensée, oh, c'est seulement 0,10 $, mais tous ceux 166 00:06:52,620 --> 00:06:54,410 numéros de suivi éventuellement s'accumuler. 167 00:06:54,410 --> 00:06:57,490 Ainsi, une merveilleuse idée et ça s'est retourné contre hilarante dans ce 168 00:06:57,490 --> 00:06:58,250 film en particulier. 169 00:06:58,250 --> 00:07:01,800 >> Mais dans le monde réel, aussi, il ya beaucoup plus en ce qui concerne 170 00:07:01,800 --> 00:07:03,190 implications de ces sortes de choses. 171 00:07:03,190 --> 00:07:05,450 Et l'une des raisons pour plonger dans le domaine de l'informatique 172 00:07:05,450 --> 00:07:07,620 la science est, encore une fois, son applicabilité ne pas l' 173 00:07:07,620 --> 00:07:09,740 sciences de l'ingénieur seul, mais juste pour 174 00:07:09,740 --> 00:07:10,650 d'autres domaines aussi. 175 00:07:10,650 --> 00:07:14,760 Il s'agit donc d'un aspect moins enjoué sur ce qui peut aller mal, mais 176 00:07:14,760 --> 00:07:17,630 c'est aussi l'ouverture des yeux tout à fait, je pense que, quand il s'agit de 177 00:07:17,630 --> 00:07:20,760 comprendre exactement comment omniprésente des technologies telles que 178 00:07:20,760 --> 00:07:22,870 ordinateurs et la programmation ou de nos jours, 179 00:07:22,870 --> 00:07:23,930 sous la forme d'un logiciel. 180 00:07:23,930 --> 00:07:26,500 Donc ce clip suivant est à peu près six minutes, continue 181 00:07:26,500 --> 00:07:30,320 où nous nous sommes quittés la dernière fois, mais qui nous permet de regarder un peu 182 00:07:30,320 --> 00:07:33,370 plus en profondeur à celle de ces questions. 183 00:07:33,370 --> 00:07:35,270 Permettez-moi de passer directement à l'endroit où nous nous sommes quittés, 184 00:07:35,270 --> 00:07:37,780 qui était juste ici. 185 00:07:37,780 --> 00:07:41,580 Et nous avons une partie de deux, pendant environ six minutes ici. 186 00:07:41,580 --> 00:07:41,980 >> [JEU VIDEO] 187 00:07:41,980 --> 00:07:45,430 En proie à la technologie moderne des fusées. 188 00:07:45,430 --> 00:07:49,280 En 1991, avec le début de la première guerre du Golfe, le Patriot 189 00:07:49,280 --> 00:07:51,350 missile a connu le même genre de 190 00:07:51,350 --> 00:07:52,645 problème de conversion de nombre. 191 00:07:52,645 --> 00:07:57,460 Et, par conséquent, 20 personnes, 20 soldats américains ont été tués 192 00:07:57,460 --> 00:08:01,130 et environ 100 autres blessés, lorsque la Patriot Act, qui devait 193 00:08:01,130 --> 00:08:03,400 pour se protéger contre les Scud entrants, 194 00:08:03,400 --> 00:08:06,020 n'a pas réussi à tirer un missile. 195 00:08:06,020 --> 00:08:09,350 >> Quand l'Irak a envahi le Koweït et l'Amérique a lancé un désert 196 00:08:09,350 --> 00:08:13,530 Tempête au début de 1991, batteries de missiles Patriot ont été 197 00:08:13,530 --> 00:08:16,970 déployés pour protéger l'Arabie saoudite et en Israël du irakienne 198 00:08:16,970 --> 00:08:19,810 Attaques de missiles Scud. 199 00:08:19,810 --> 00:08:23,740 Le Patriot est un américain à moyenne portée sol-air système, 200 00:08:23,740 --> 00:08:26,370 fabriqué par la société Raytheon. 201 00:08:26,370 --> 00:08:30,860 La taille de l'intercepteur Patriot lui-même, il s'agit de 202 00:08:30,860 --> 00:08:35,650 environ 20 pieds de long et pèse environ 2.000 livres. 203 00:08:35,650 --> 00:08:38,809 Et il porte une ogive d'environ - je pense que c'est à peu près 204 00:08:38,809 --> 00:08:40,169 150 livres. 205 00:08:40,169 --> 00:08:45,820 Et l'ogive lui-même est un explosif puissant qui a 206 00:08:45,820 --> 00:08:48,120 des fragments autour de lui. 207 00:08:48,120 --> 00:08:51,870 Le boîtier de l'ogive est conçu pour fonctionner comme des chevrotines. 208 00:08:51,870 --> 00:08:54,920 Les missiles sont effectuées quatre par conteneur et sont 209 00:08:54,920 --> 00:08:57,850 transporté par un semi-remorque. 210 00:08:57,850 --> 00:09:02,940 >> Le Patriot système anti-missile remonte au moins à 211 00:09:02,940 --> 00:09:05,530 20 ans. 212 00:09:05,530 --> 00:09:09,150 Il a été initialement conçu comme un missile de défense aérienne à 213 00:09:09,150 --> 00:09:12,920 abattre les avions ennemis, dans la première guerre du Golfe. 214 00:09:12,920 --> 00:09:17,700 Lorsque la guerre est arrivée, l'armée a voulu l'utiliser pour tirer 215 00:09:17,700 --> 00:09:19,880 Scud vers le bas, et non pas les avions. 216 00:09:19,880 --> 00:09:24,860 L'armée de l'air irakienne n'était pas tant d'un problème, mais l'armée 217 00:09:24,860 --> 00:09:27,260 s'inquiétait de Scuds. 218 00:09:27,260 --> 00:09:30,810 Et alors ils ont essayé de mettre à niveau le Patriot. 219 00:09:30,810 --> 00:09:33,770 Intercepter un missile ennemi se déplaçant à Mach 5 allait 220 00:09:33,770 --> 00:09:35,790 être assez difficile. 221 00:09:35,790 --> 00:09:39,460 Mais quand le Patriot a été transporté en service, l'Armée 222 00:09:39,460 --> 00:09:43,730 n'était pas au courant d'une modification irakienne qui ont fait leur 223 00:09:43,730 --> 00:09:46,510 Scuds presque impossible à atteindre. 224 00:09:46,510 --> 00:09:50,040 >> Ce qui s'est passé est le Scud qui étaient 225 00:09:50,040 --> 00:09:51,360 venir en étaient instables. 226 00:09:51,360 --> 00:09:52,266 Ils ont été vacillant. 227 00:09:52,266 --> 00:09:56,300 La raison en était que les Irakiens, afin d'obtenir 600 228 00:09:56,300 --> 00:10:00,650 kilomètres à l'extérieur d'un missile large de 300 kilomètres, a pris 229 00:10:00,650 --> 00:10:02,423 poids de l'ogive avant et 230 00:10:02,423 --> 00:10:03,990 fait l'ogive briquet. 231 00:10:03,990 --> 00:10:08,700 Alors maintenant, le Patriot essaie de venir à la Scud, et la plupart des 232 00:10:08,700 --> 00:10:11,192 l'époque, la grande majorité du temps, il serait 233 00:10:11,192 --> 00:10:13,450 juste voler par le Scud. 234 00:10:13,450 --> 00:10:16,300 Une fois que les gestionnaires de réseau Patriot réalisé le Patriot 235 00:10:16,300 --> 00:10:20,160 a raté sa cible, ils exploser l'ogive Patriot. 236 00:10:20,160 --> 00:10:22,760 Pour éviter les pertes possibles, il a été autorisé 237 00:10:22,760 --> 00:10:25,100 à tomber par terre. 238 00:10:25,100 --> 00:10:29,400 C'est ce que la plupart des gens ont vu, comme des boules de feu de gros dans le ciel, 239 00:10:29,400 --> 00:10:34,930 et mal compris l'interception de communications d'ogives Scud. 240 00:10:34,930 --> 00:10:37,490 >> Bien que, dans le ciel nocturne, les Patriots semblent être 241 00:10:37,490 --> 00:10:41,570 Scud a réussi à détruire, à Dhahran, il n'y aurait pas 242 00:10:41,570 --> 00:10:43,730 erreur sur ses performances. 243 00:10:43,730 --> 00:10:46,370 Là, le système radar Patriot perdu la trace d'un 244 00:10:46,370 --> 00:10:50,090 entrant Scud et jamais lancé en raison 245 00:10:50,090 --> 00:10:51,340 d'une faille logicielle. 246 00:10:54,030 --> 00:10:57,050 C'était les Israéliens qui le premier a découvert que la plus 247 00:10:57,050 --> 00:11:02,000 le système était élevé, plus l'écart de temps est devenu, 248 00:11:02,000 --> 00:11:05,530 en raison d'une horloge incorporée dans l'ordinateur du système. 249 00:11:05,530 --> 00:11:09,060 Environ deux semaines avant la tragédie de Dhahran, l' 250 00:11:09,060 --> 00:11:11,730 Israéliens signalés au ministère de la Défense que le 251 00:11:11,730 --> 00:11:13,250 système a été une perte de temps. 252 00:11:13,250 --> 00:11:15,610 Après environ huit heures de course, ils ont remarqué que le 253 00:11:15,610 --> 00:11:18,330 système devenait nettement moins précis. 254 00:11:18,330 --> 00:11:20,910 Le ministère de la Défense a répondu en disant tout 255 00:11:20,910 --> 00:11:23,710 les batteries Patriot de ne pas laisser les systèmes 256 00:11:23,710 --> 00:11:25,450 pendant une longue période. 257 00:11:25,450 --> 00:11:28,010 Ils n'ont jamais dit ce que fut longtemps - 8 heures, 10 258 00:11:28,010 --> 00:11:29,690 heures, 1000 heures. 259 00:11:29,690 --> 00:11:31,940 Personne ne savait. 260 00:11:31,940 --> 00:11:35,020 >> La batterie Patriot stationnés à la caserne à Dhahran 261 00:11:35,020 --> 00:11:39,030 et son horloge interne défectueuse avait été sur plus de 100 heures sur 262 00:11:39,030 --> 00:11:42,240 Dans la nuit du 25 Février. 263 00:11:42,240 --> 00:11:46,580 Il suivies temps avec une précision d'environ un dixième de seconde. 264 00:11:46,580 --> 00:11:48,830 Maintenant, un dixième de la seconde est un nombre intéressant parce 265 00:11:48,830 --> 00:11:52,660 il ne peut pas être exprimé en binaire, exactement, ce qui signifie 266 00:11:52,660 --> 00:11:54,940 il ne peut pas être exprimé exactement l'une quelconque 267 00:11:54,940 --> 00:11:57,330 moderne numérique ordinateur. 268 00:11:57,330 --> 00:11:59,130 C'est difficile à croire. 269 00:11:59,130 --> 00:12:01,720 Mais l'utiliser comme un exemple. 270 00:12:01,720 --> 00:12:04,090 >> Prenons le nombre d'un tiers. 271 00:12:04,090 --> 00:12:07,950 Un tiers ne peut pas être exprimée en décimal, exactement. 272 00:12:07,950 --> 00:12:12,710 Un tiers est de 0,333 passait à l'infini. 273 00:12:12,710 --> 00:12:17,050 Il n'y a aucun moyen de le faire avec une précision absolue en décimal. 274 00:12:17,050 --> 00:12:19,340 C'est exactement le même genre de problème qui s'est produit dans 275 00:12:19,340 --> 00:12:20,190 le Patriot. 276 00:12:20,190 --> 00:12:24,680 Plus le système a fonctionné, pire le temps est devenu l'erreur. 277 00:12:24,680 --> 00:12:28,640 Après 100 heures de fonctionnement, l'erreur dans le temps n'est 278 00:12:28,640 --> 00:12:29,870 environ un tiers de seconde. 279 00:12:29,870 --> 00:12:34,790 Mais en termes de ciblage d'un missile se déplaçant à Mach 5, 280 00:12:34,790 --> 00:12:39,140 il a provoqué une erreur de suivi de plus de 600 mètres. 281 00:12:39,140 --> 00:12:42,510 Ce serait une erreur fatale pour les soldats à Dhahran. 282 00:12:42,510 --> 00:12:48,680 >> Ce qui s'est passé est un lancement Scud a été détectée par l'alerte précoce 283 00:12:48,680 --> 00:12:52,440 satellites et ils savaient que le Scud était venue dans leur 284 00:12:52,440 --> 00:12:53,350 direction générale. 285 00:12:53,350 --> 00:12:55,470 Ils ne savaient pas d'où ça venait. 286 00:12:55,470 --> 00:12:58,210 Il appartient maintenant à la composante radar de la Patriot 287 00:12:58,210 --> 00:13:01,920 système, la défense de Dhahran, de localiser et de suivre le 288 00:13:01,920 --> 00:13:03,700 missile ennemi entrant. 289 00:13:03,700 --> 00:13:05,390 Le radar était très intelligent. 290 00:13:05,390 --> 00:13:07,570 Vous serait effectivement suivre la position du Scud, puis 291 00:13:07,570 --> 00:13:10,340 prédire où il serait sans doute la prochaine fois que l' 292 00:13:10,340 --> 00:13:12,040 radar envoyé une impulsion en sortie. 293 00:13:12,040 --> 00:13:13,730 Cela s'appelait la porte en distance. 294 00:13:13,730 --> 00:13:18,820 Puis, une fois que le Patriot décide temps a passé pour aller 295 00:13:18,820 --> 00:13:22,600 sauvegarder et vérifier l'emplacement suivant pour cette détectée 296 00:13:22,600 --> 00:13:24,190 objet, il remonte. 297 00:13:24,190 --> 00:13:27,940 Alors, quand il est retourné à la mauvaise place, il voit alors pas 298 00:13:27,940 --> 00:13:31,000 s'opposer, et il décide qu'il n'y a pas d'objet. 299 00:13:31,000 --> 00:13:34,370 Il s'agissait d'une fausse détection et laisse tomber la piste. 300 00:13:34,370 --> 00:13:37,630 >> Le Scud entrant disparu de l'écran radar. 301 00:13:37,630 --> 00:13:41,300 Et quelques secondes plus tard, il a percuté la caserne. Le Scud 302 00:13:41,300 --> 00:13:44,730 28 et tué était le dernier tiré pendant 303 00:13:44,730 --> 00:13:46,450 la première guerre du Golfe. 304 00:13:46,450 --> 00:13:50,570 Malheureusement, le logiciel mis à jour est arrivé à Dhahran 305 00:13:50,570 --> 00:13:52,060 le jour suivant. 306 00:13:52,060 --> 00:13:56,210 Et la faille du logiciel avait été fixé, la fermeture d'un chapitre dans 307 00:13:56,210 --> 00:13:58,370 l'histoire mouvementée du missile Patriot. 308 00:14:01,790 --> 00:14:04,990 PATRIOT est en fait un acronyme pour "Tracking multiéléments 309 00:14:04,990 --> 00:14:08,516 Intercepter la cible. " 310 00:14:08,516 --> 00:14:13,390 >> D'accord, donc un résultat beaucoup plus triste de ne pas tout à fait 311 00:14:13,390 --> 00:14:14,430 la compréhension de ce monde. 312 00:14:14,430 --> 00:14:18,180 Et les plats à emporter, vraiment, dans le film, c'est que la solution 313 00:14:18,180 --> 00:14:20,790 il a été redémarrez votre système de défense antimissile 314 00:14:20,790 --> 00:14:21,770 chaque fois dans un tout. 315 00:14:21,770 --> 00:14:24,280 Et à nouveau, l'un des objectifs de ce cours, certainement 316 00:14:24,280 --> 00:14:26,900 à une échelle plus modeste que ces applications, est de 317 00:14:26,900 --> 00:14:30,710 tout le monde vraiment ouvert les yeux à exactement comment vous allez 318 00:14:30,710 --> 00:14:34,380 machines à fabriquer faire ce que vous voulez faire et comment vous allez 319 00:14:34,380 --> 00:14:37,180 à faire cela correctement, tandis que le long de la façon dont il fait 320 00:14:37,180 --> 00:14:38,810 ainsi, élégante, et ainsi de suite. 321 00:14:38,810 --> 00:14:41,680 Et aujourd'hui, nous allons plonger dans un peu plus de ceci, mais 322 00:14:41,680 --> 00:14:44,210 de sorte que nous n'avons pas aller trop vite, en particulier pour ceux qui sont moins 323 00:14:44,210 --> 00:14:46,590 confortable, mais aussi pour que nous puissions conserver l'intérêt des 324 00:14:46,590 --> 00:14:49,390 ceux qui sont plus à l'aise, nous allons juste commencer rapidement avec un peu 325 00:14:49,390 --> 00:14:50,970 de récapitulation de certaines de ces idées. 326 00:14:50,970 --> 00:14:53,710 Et encore une fois, demandez à l'écart, en personne ou en ligne, si vous avez 327 00:14:53,710 --> 00:14:56,320 des questions afin que nous puissions garder tout le monde sur la même page. 328 00:14:56,320 --> 00:14:58,820 >> Ainsi, l'appareil CS50, quick step arrière, est 329 00:14:58,820 --> 00:15:02,360 ce qui, dans vos propres mots? 330 00:15:02,360 --> 00:15:06,454 Ce n'est pas grave si vous n'avez aucune idée de ce que ces mots peuvent être encore. 331 00:15:06,454 --> 00:15:07,830 [Inaudible] 332 00:15:07,830 --> 00:15:10,950 Ok, donc une interface universelle pour - 333 00:15:10,950 --> 00:15:11,900 que nous pouvons tous partager. 334 00:15:11,900 --> 00:15:12,470 Tout à fait. 335 00:15:12,470 --> 00:15:14,840 Donc, on pourrait, par exemple, vous dira d'aller dans une certaine 336 00:15:14,840 --> 00:15:16,910 site web, télécharger ce logiciel pour Mac OS. 337 00:15:16,910 --> 00:15:19,140 Télécharger gratuitement ce logiciel pour Windows, configurer dans 338 00:15:19,140 --> 00:15:20,100 de cette façon et que. 339 00:15:20,100 --> 00:15:22,370 Mais la réalité est alors nous nous heurtons à d'innombrables techniques 340 00:15:22,370 --> 00:15:23,200 appuyer les questions. 341 00:15:23,200 --> 00:15:26,630 Et aussi ces jours-ci, une grande partie de ce qui se fait côté serveur, 342 00:15:26,630 --> 00:15:28,490 dans le monde de l'informatique, en particulier quand il s'agit de 343 00:15:28,490 --> 00:15:31,460 le développement web et les applications Web, est en fait 344 00:15:31,460 --> 00:15:35,110 fait très souvent sur les ordinateurs Unix ou Linux, par opposition à 345 00:15:35,110 --> 00:15:36,800 Mac ou PC Windows. 346 00:15:36,800 --> 00:15:39,240 >> Ainsi, parmi les bons côtés, puis, à l'aide de ce qu'on appelle le 347 00:15:39,240 --> 00:15:41,500 CS50 Appliance est que nous aurons tous le même environnement. 348 00:15:41,500 --> 00:15:43,670 Donc tout le monde est sur la même page, peu importe le matériel dont vous 349 00:15:43,670 --> 00:15:46,650 venue sur le campus, mais aussi avec les barboteurs seront exactement 350 00:15:46,650 --> 00:15:48,230 le même environnement que vous allez utiliser pour 351 00:15:48,230 --> 00:15:51,080 semestre de fin ainsi pour le développement web, et aussi dans l' 352 00:15:51,080 --> 00:15:53,580 avenir pour les applications du monde réel de celui-ci. 353 00:15:53,580 --> 00:15:56,350 Ainsi, plus concrètement, l'appliance CS50 est une pièce exempte de 354 00:15:56,350 --> 00:15:59,400 un logiciel qui vous permet de lancer un autre système d'exploitation, 355 00:15:59,400 --> 00:16:02,670 Linux, dans ce cas, sur votre propre ordinateur, dans une fenêtre. 356 00:16:02,670 --> 00:16:04,750 Maintenant, vous ne pouvez pas télécharger de l'appareil. 357 00:16:04,750 --> 00:16:08,170 Vous avez besoin d'un programme avec lequel jouer ou courir l'appareil. 358 00:16:08,170 --> 00:16:11,220 Et ce morceau de logiciel est généralement connu comme un 359 00:16:11,220 --> 00:16:11,520 hyperviseur. 360 00:16:11,520 --> 00:16:14,050 Hyperviseurs se présentent sous la forme de produits tels que VMware, 361 00:16:14,050 --> 00:16:15,820 Virtual Box, Parallels. 362 00:16:15,820 --> 00:16:18,390 Toutes sortes de sociétés rendre les logiciels, libres et 363 00:16:18,390 --> 00:16:19,310 commerciale, de même. 364 00:16:19,310 --> 00:16:21,480 Ce que vous verrez dans un problème Set 1 sont des instructions sur la façon de 365 00:16:21,480 --> 00:16:23,440 obtenir un logiciel gratuit avec lequel 366 00:16:23,440 --> 00:16:25,000 exécuter l'appliance CS50. 367 00:16:25,000 --> 00:16:28,060 Et une fois que vous le faites, vous aurez, dans une fenêtre sur votre Mac ou PC, 368 00:16:28,060 --> 00:16:30,710 un environnement de bureau qui ressemble tout à fait comme ça, où 369 00:16:30,710 --> 00:16:33,100 il a un menu Démarrer-comme la chose dans le 370 00:16:33,100 --> 00:16:34,510 en bas à gauche. 371 00:16:34,510 --> 00:16:38,030 Il dispose d'un dossier d'accueil, ou d'un répertoire d'accueil, en haut à gauche 372 00:16:38,030 --> 00:16:40,280 là, une poubelle, et ainsi de suite. 373 00:16:40,280 --> 00:16:43,450 Donc, nous allons démêler les détails nécessaires que nous allons. 374 00:16:43,450 --> 00:16:46,430 >> Mais maintenant, nous allons commencer à plonger dans C. 375 00:16:46,430 --> 00:16:49,200 Donc C est ce langage de programmation, dans le même esprit de 376 00:16:49,200 --> 00:16:52,390 Scratch, mais beaucoup moins graphique, mais, ironiquement, loin 377 00:16:52,390 --> 00:16:54,730 plus puissant une fois que vous avertis avec elle. 378 00:16:54,730 --> 00:16:58,970 Donc, en C, on écrit des programmes en écrivant du code source, ce qui est 379 00:16:58,970 --> 00:17:01,640 cette syntaxe anglaise, similaire aux chaussettes 380 00:17:01,640 --> 00:17:05,609 démonstration que nous avons fait la dernière fois qui vous permet de 381 00:17:05,609 --> 00:17:07,910 vous exprimer avec assez de précision, si 382 00:17:07,910 --> 00:17:09,760 arcanely, à l'ordinateur. 383 00:17:09,760 --> 00:17:11,960 >> Alors, quel genre de logiciel ne produit que vous avez réellement besoin 384 00:17:11,960 --> 00:17:15,520 d'écrire des programmes dans un langage comme C, basée sur notre 385 00:17:15,520 --> 00:17:17,492 conversation, le lundi? 386 00:17:17,492 --> 00:17:19,650 [Inaudible] 387 00:17:19,650 --> 00:17:21,079 OK, vous avez juste besoin d'un éditeur de texte. 388 00:17:21,079 --> 00:17:22,890 Vous n'avez pas besoin d'un logiciel spécial 389 00:17:22,890 --> 00:17:24,460 en soi d'écrire des programmes. 390 00:17:24,460 --> 00:17:27,220 Vous avez juste besoin d'un éditeur de texte comme le Bloc-notes, sous Windows, 391 00:17:27,220 --> 00:17:30,450 TextEdit sur Mac, ou quelque chose qui s'appelle gedit, dans le monde de 392 00:17:30,450 --> 00:17:32,020 Linux, que nous allons utiliser ici. 393 00:17:32,020 --> 00:17:33,750 Et c'est tout, pour écrire les programmes. 394 00:17:33,750 --> 00:17:35,480 >> Mais l'écriture n'est que la moitié de l'équation. 395 00:17:35,480 --> 00:17:36,630 Vous devez ensuite pour les faire fonctionner. 396 00:17:36,630 --> 00:17:38,320 Mais pour exécuter des programmes - 397 00:17:38,320 --> 00:17:39,600 vous ne pouvez pas exécuter du code source. 398 00:17:39,600 --> 00:17:41,500 Vous avez au lieu de faire ce qu'il faut en premier? 399 00:17:41,500 --> 00:17:41,900 Ouais. 400 00:17:41,900 --> 00:17:43,200 DAVID J. MALAN: Vous devez vous 401 00:17:43,200 --> 00:17:44,130 le compiler. 402 00:17:44,130 --> 00:17:49,010 Et quelqu'un d'autre, la compilation du code source signifie - 403 00:17:49,010 --> 00:17:50,260 [Inaudible] 404 00:17:52,300 --> 00:17:52,700 DAVID J. MALAN: Exactement. 405 00:17:52,700 --> 00:17:54,430 Le traduire en zéros et de uns. 406 00:17:54,430 --> 00:17:57,150 Parce que chacun de nous, de nos jours, ont des ordinateurs qui ont UC, 407 00:17:57,150 --> 00:18:00,350 dont presque tous sont fabriqués par une société appelée Intel, et 408 00:18:00,350 --> 00:18:03,320 Intel Inside, signifie qu'il ya ceci à l'intérieur de votre cerveau 409 00:18:03,320 --> 00:18:04,990 informatique, connu sous le nom de la CPU. 410 00:18:04,990 --> 00:18:07,570 Et l'une des choses que ce que le cerveau fait est, il sait 411 00:18:07,570 --> 00:18:10,390 comment comprendre les modèles de zéros et de uns. 412 00:18:10,390 --> 00:18:13,240 Il sait ce motif de bits représente une addition, ce qui 413 00:18:13,240 --> 00:18:15,500 modèle représente soustractions, ce modèle de 414 00:18:15,500 --> 00:18:18,890 bits représentent l'impression, et la création d'un son audible. 415 00:18:18,890 --> 00:18:22,450 >> Donc en bref, le processeur, couplé avec le système d'exploitation, 416 00:18:22,450 --> 00:18:25,230 qui est une partie de logiciel qui s'exécute sur le processeur, 417 00:18:25,230 --> 00:18:26,050 pour ainsi dire. 418 00:18:26,050 --> 00:18:29,850 Ensemble, ces deux éléments savez comment faire fonctionner des programmes qui 419 00:18:29,850 --> 00:18:31,070 nous, les humains écrire. 420 00:18:31,070 --> 00:18:34,040 >> Donc, si je vais dans l'appliance CS50 ici, j'ai besoin d'ouvrir 421 00:18:34,040 --> 00:18:35,660 un éditeur de texte et je ne peux accéder à cette 422 00:18:35,660 --> 00:18:36,560 dans un couple des manières. 423 00:18:36,560 --> 00:18:39,060 Je peux soit aller dans le menu, la programmation, 424 00:18:39,060 --> 00:18:40,230 et puis je peux choisir - 425 00:18:40,230 --> 00:18:40,810 nope, pas ce menu. 426 00:18:40,810 --> 00:18:43,860 Je peux aller Accessoires / gedit ici pour ouvrir 427 00:18:43,860 --> 00:18:45,090 mon éditeur de texte peu. 428 00:18:45,090 --> 00:18:48,030 Ou, plus simplement, je peux cliquer sur cette petite icône en bas 429 00:18:48,030 --> 00:18:48,970 coin supérieur gauche. 430 00:18:48,970 --> 00:18:50,430 Et maintenant, je reçois cet environnement ici. 431 00:18:50,430 --> 00:18:52,590 C'est assez penser à un éditeur de texte simple, avec juste 432 00:18:52,590 --> 00:18:53,820 une ou deux différences. 433 00:18:53,820 --> 00:18:56,420 Dans la partie supérieure, où se trouve le curseur clignote maintenant, c'est là que 434 00:18:56,420 --> 00:18:57,900 Je peux commencer à écrire mon code. 435 00:18:57,900 --> 00:19:00,415 Dans le fond est cette chose appelée la fenêtre du terminal. 436 00:19:00,415 --> 00:19:03,400 Et ce genre de choses que je peux faire dans ce 437 00:19:03,400 --> 00:19:04,960 dite fenêtre de terminal? 438 00:19:04,960 --> 00:19:06,680 [Inaudible] 439 00:19:06,680 --> 00:19:07,890 >> Ok, donc je vais exécuter des commandes. 440 00:19:07,890 --> 00:19:10,300 Et certaines des commandes que nous avons rencontrés le lundi étaient un peu 441 00:19:10,300 --> 00:19:15,070 cryptiques au début, mais ls pour la liste, cd pour changer de répertoire, 442 00:19:15,070 --> 00:19:16,540 rm pour supprimer. 443 00:19:16,540 --> 00:19:19,680 Donc, c'est une sorte de façon vieille école de navigation de votre 444 00:19:19,680 --> 00:19:22,310 ordinateur, en utilisant uniquement le clavier et commandes textuelles, 445 00:19:22,310 --> 00:19:24,130 et non pas, en général, à l'aide d'une souris. 446 00:19:24,130 --> 00:19:25,960 Mais nous allons voir, d'ici peu, ce nous donne en fait une 447 00:19:25,960 --> 00:19:28,520 peu plus de puissance et un peu plus de précision avec lequel 448 00:19:28,520 --> 00:19:29,600 nous exprimer. 449 00:19:29,600 --> 00:19:31,330 Et puis là-bas, à gauche, nous allons juste pour voir, 450 00:19:31,330 --> 00:19:34,360 que nous commençons logiciel d'écriture, un petit résumé de l' 451 00:19:34,360 --> 00:19:36,350 programme que nous avons écrit en haut à gauche. 452 00:19:36,350 --> 00:19:38,360 Mais nous allons voir que de nouveau avant longtemps. 453 00:19:38,360 --> 00:19:40,050 >> Alors, faisons quelque chose d'assez simple ici. 454 00:19:40,050 --> 00:19:43,440 Permettez-moi d'abord aller de l'avant et aller dans Fichier, Enregistrer, et je suis juste 455 00:19:43,440 --> 00:19:45,970 allez cliquer sur jharvard ici, plus à gauche, et 456 00:19:45,970 --> 00:19:48,930 jharvard est, encore une fois, le nom de mon dossier, mon 457 00:19:48,930 --> 00:19:52,110 fichiers personnels, moi, maintenant étant John Harvard, comme vous tous, 458 00:19:52,110 --> 00:19:54,230 sera bientôt John Harvard dans cet environnement. 459 00:19:54,230 --> 00:19:57,360 Il a un répertoire d'accueil, Mes documents et ainsi de suite, 460 00:19:57,360 --> 00:19:58,900 que je veux sauver, maintenant, ce fichier po 461 00:19:58,900 --> 00:20:01,520 Donc, je vais l'appeler hello.c. Ensuite, je vais aller 462 00:20:01,520 --> 00:20:05,770 l'avant et cliquez sur Enregistrer, et maintenant que j'ai ici est un onglet 463 00:20:05,770 --> 00:20:09,440 appelé hello.c, tellement comme un autre type d'éditeur. 464 00:20:09,440 --> 00:20:11,760 >> Alors maintenant, laissez-moi aller de l'avant et commencer à écrire un programme. 465 00:20:11,760 --> 00:20:14,440 int main (void). 466 00:20:14,440 --> 00:20:18,150 Et puis je viens de faire la dernière fois, printf, pour l'impression formatés, 467 00:20:18,150 --> 00:20:22,120 («Bonjour, monde!" 468 00:20:22,120 --> 00:20:24,500 );. 469 00:20:24,500 --> 00:20:25,630 Presque complète. 470 00:20:25,630 --> 00:20:27,130 Mais il me manque quelques détails. 471 00:20:27,130 --> 00:20:30,210 Ce qui manque à ce programme que j'ai vraiment besoin d' 472 00:20:30,210 --> 00:20:31,890 il fait de compiler? 473 00:20:31,890 --> 00:20:32,130 Ouais. 474 00:20:32,130 --> 00:20:33,980 [Inaudible]? 475 00:20:33,980 --> 00:20:35,770 >> DAVID J. MALAN: Ouais, donc j'ai besoin d'inclure la norme 476 00:20:35,770 --> 00:20:36,700 I / O bibliothèque. 477 00:20:36,700 --> 00:20:39,470 Donc, cela doit aller au-delà principal, donc je vais juste 478 00:20:39,470 --> 00:20:40,790 faire de la place pour lui là-bas. 479 00:20:40,790 --> 00:20:44,420 Et je vais faire # include. 480 00:20:44,420 --> 00:20:46,570 Et remarquez les chevrons là. 481 00:20:46,570 --> 00:20:49,410 Et en passant, gedit est un utilisateur peu favorable, si 482 00:20:49,410 --> 00:20:52,420 parfois un peu confus, en ce qu'elle tente d'aider votre 483 00:20:52,420 --> 00:20:54,770 yeux remarqué ce qui s'aligne avec quoi. 484 00:20:54,770 --> 00:20:57,760 Donc, le fait que mon curseur se trouve juste à côté de cet angle 485 00:20:57,760 --> 00:21:00,600 support, remarquez comment il est soulignant l'angle autre 486 00:21:00,600 --> 00:21:01,920 support de plus celui-ci. 487 00:21:01,920 --> 00:21:03,770 Et c'est juste pour attirer mon attention sur le fait que je 488 00:21:03,770 --> 00:21:04,460 une symétrie. 489 00:21:04,460 --> 00:21:07,010 Et la symétrie dans la programmation est généralement une bonne chose. 490 00:21:07,010 --> 00:21:10,270 De même, si je déplace mon curseur à la fin, remarquez comment le 491 00:21:10,270 --> 00:21:13,630 accolades ligne pour montrer que, oui, j'ai un processus ouvert 492 00:21:13,630 --> 00:21:15,160 et un système fermé, pour ainsi dire. 493 00:21:15,160 --> 00:21:16,640 >> Très bien, et je peux faire autre chose. 494 00:21:16,640 --> 00:21:20,090 Il n'est pas strictement nécessaire, mais les bonnes pratiques, de dire 495 00:21:20,090 --> 00:21:21,250 retourner 0. 496 00:21:21,250 --> 00:21:24,140 Et 0 retour fait quoi pour nous ici? 497 00:21:24,140 --> 00:21:25,584 Ou signifie quoi? 498 00:21:25,584 --> 00:21:27,480 [Inaudible] 499 00:21:27,480 --> 00:21:28,300 DAVID J. MALAN: Mais tout va bien. 500 00:21:28,300 --> 00:21:30,280 Et franchement, il est difficile pour beaucoup de se tromper dans un 501 00:21:30,280 --> 00:21:31,250 programmer ce court. 502 00:21:31,250 --> 00:21:33,930 Donc, je vais être super-explicite que tout va bien. 503 00:21:33,930 --> 00:21:36,740 I, l'être humain, quand je lance ce programme, sera probablement jamais 504 00:21:36,740 --> 00:21:38,150 voir que 0. 505 00:21:38,150 --> 00:21:41,070 En règle générale, ces chiffres qui sont retournés à partir de principal 506 00:21:41,070 --> 00:21:43,540 seulement élever leurs têtes pour les humains quand 507 00:21:43,540 --> 00:21:44,360 quelque chose va mal. 508 00:21:44,360 --> 00:21:46,640 Et vous obtenez un peu de pop up disant erreur système, un, 509 00:21:46,640 --> 00:21:48,760 deux, trois, ou quel que soit le nombre, c'est que 510 00:21:48,760 --> 00:21:50,100 a effectivement été retourné. 511 00:21:50,100 --> 00:21:52,870 Donc, tout chose ne va pas avec ça? 512 00:21:52,870 --> 00:21:55,300 [Inaudible] 513 00:21:55,300 --> 00:21:58,100 >> DAVID J. MALAN: Donc, ce n'est pas tant une erreur fonctionnelle 514 00:21:58,100 --> 00:21:59,240 mais une esthétique. 515 00:21:59,240 --> 00:22:02,340 Je devrais probablement mettre dans un caractère de nouvelle ligne là à l' 516 00:22:02,340 --> 00:22:05,240 fin de cette chaîne afin que nous fait déplacer le curseur vers 517 00:22:05,240 --> 00:22:08,340 la ligne suivante, et le programme va chercher un peu plus joli. 518 00:22:08,340 --> 00:22:10,340 >> Alors maintenant, laissez-moi descendre dans la fenêtre de terminal 519 00:22:10,340 --> 00:22:11,490 et, Save money 520 00:22:11,490 --> 00:22:13,390 Et cette chose ici, ça s'appelle l'invite. 521 00:22:13,390 --> 00:22:16,760 Il vient de me rappeler qui je suis, jharvard @ appareil, où 522 00:22:16,760 --> 00:22:18,850 appareil est le nom de l'ordinateur que je suis sur. 523 00:22:18,850 --> 00:22:22,380 Entre parenthèses est ce tilde, le symbole tilde, qui 524 00:22:22,380 --> 00:22:24,160 représente quoi? 525 00:22:24,160 --> 00:22:25,590 PUBLIC: répertoire d'accueil. 526 00:22:25,590 --> 00:22:26,350 DAVID J. MALAN: répertoire d'accueil. 527 00:22:26,350 --> 00:22:29,350 Donc c'est juste une notation abrégée pour dire que vous êtes dans 528 00:22:29,350 --> 00:22:32,780 votre dossier personnel où tous vos fichiers vont par défaut. 529 00:22:32,780 --> 00:22:36,080 Alors maintenant, ici, je peux taper ls pour la liste. 530 00:22:36,080 --> 00:22:40,020 Et la seule chose que je vois ici en ce moment est hello.c. 531 00:22:40,020 --> 00:22:41,770 Et c'est bien parce que je viens d'écrire cela. 532 00:22:41,770 --> 00:22:44,380 >> Alors laissez-moi aller de l'avant et ne font bonjour. 533 00:22:44,380 --> 00:22:46,830 Et notez que je ne suis pas taper make hello.c. 534 00:22:46,830 --> 00:22:50,300 Au lieu de cela, je suis seulement en tapant le nom de base du fichier, bonjour. 535 00:22:50,300 --> 00:22:53,690 Et de faire, comme nous l'avons vu lundi, sera juste en déduire que je veux 536 00:22:53,690 --> 00:22:54,920 le fichier. c. 537 00:22:54,920 --> 00:22:56,820 Alors maintenant, j'ai tapé font bonjour. 538 00:22:56,820 --> 00:22:59,280 Maintenant, je vois cette commande assez longue et continuera 539 00:22:59,280 --> 00:23:00,480 voir encore et encore. 540 00:23:00,480 --> 00:23:03,620 Mais pour être clair, clang, le mot qui vient de paraître, 541 00:23:03,620 --> 00:23:05,340 c'est le compilateur actuel. 542 00:23:05,340 --> 00:23:08,200 Assurez est juste un utilitaire de compilation. 543 00:23:08,200 --> 00:23:11,900 C'est juste un programme plus convivial qui me sauve, dans le 544 00:23:11,900 --> 00:23:15,310 long terme, d'avoir à taper incroyablement fastidieux à long 545 00:23:15,310 --> 00:23:17,020 commandes comme celle-là. 546 00:23:17,020 --> 00:23:18,950 Ainsi, vous pouvez exécuter manuellement Clang. 547 00:23:18,950 --> 00:23:20,530 Vous pouvez taper tout cela manuellement. 548 00:23:20,530 --> 00:23:21,580 Obtient juste très ennuyeux. 549 00:23:21,580 --> 00:23:24,720 Et ainsi de faire est tout simplement un programme qui simplifie notre vie et 550 00:23:24,720 --> 00:23:27,120 exécute des commandes plus complexes pour nous. 551 00:23:27,120 --> 00:23:29,410 >> Bon, alors maintenant quel fichier dois-je avoir 552 00:23:29,410 --> 00:23:31,540 dans mon répertoire courant? 553 00:23:31,540 --> 00:23:36,310 Pas seulement hello.c, mais aussi bonjour. 554 00:23:36,310 --> 00:23:39,710 Donc, si je veux courir bonjour, rappeler que je dis point slash, 555 00:23:39,710 --> 00:23:42,220 où les moyens dot aller dans le dossier en cours, où que vous soyez 556 00:23:42,220 --> 00:23:46,060 sont, puis exécutez le programme appelé bonjour, et bien, maintenant, 557 00:23:46,060 --> 00:23:48,080 J'ai Bonjour tout le monde. 558 00:23:48,080 --> 00:23:51,640 Tout droit, des questions sur le flux de travail ou la syntaxe d' 559 00:23:51,640 --> 00:23:52,890 ce que nous venons de faire? 560 00:23:55,380 --> 00:23:57,040 >> Très bien, nous allons donc prendre les choses d'un cran encore. 561 00:23:57,040 --> 00:24:00,430 Donc, ce n'était vraiment pas terrible juste écrire un programme qui ne 562 00:24:00,430 --> 00:24:01,790 dit jamais bonjour, monde. 563 00:24:01,790 --> 00:24:03,920 Nous avons donc changé, le lundi, de dire bonjour, David. 564 00:24:03,920 --> 00:24:06,560 C'est un peu plus personnelle, mais tout aussi codé en dur comme le 565 00:24:06,560 --> 00:24:07,410 première version. 566 00:24:07,410 --> 00:24:08,780 Donc, pas tout à fait convaincante. 567 00:24:08,780 --> 00:24:13,120 Mais il existe, en C, en plus des fonctions certainement 568 00:24:13,120 --> 00:24:15,700 d'impression, les fonctions qui vous permettent d'obtenir les commentaires de l'utilisateur. 569 00:24:15,700 --> 00:24:17,990 Et la façon dont nous l'avons fait, l'autre jour, était la suivante. 570 00:24:17,990 --> 00:24:21,440 Avant que je fait imprimer quelque chose, je suis arrivé 571 00:24:21,440 --> 00:24:22,410 quelque chose de l'utilisateur. 572 00:24:22,410 --> 00:24:23,370 Permettez-moi de faire cela à nouveau. 573 00:24:23,370 --> 00:24:26,580 >> String s, où s est juste un nom arbitraire, ici, pour un 574 00:24:26,580 --> 00:24:30,600 chaîne, est égal à GetString. 575 00:24:30,600 --> 00:24:32,070 Donc, ce qui a été GetString? 576 00:24:32,070 --> 00:24:34,630 Il obtient évidemment une chaîne, basée sur son nom. 577 00:24:34,630 --> 00:24:37,560 Mais qu'est-ce, plus techniquement? 578 00:24:37,560 --> 00:24:38,440 Il s'agit d'une fonction. 579 00:24:38,440 --> 00:24:41,790 Donc, c'est une fonction qui ne vient pas avec C en soi. 580 00:24:41,790 --> 00:24:43,660 CS50 personnel a écrit cela. 581 00:24:43,660 --> 00:24:46,940 Et donc pour l'utiliser, vous ne pouvez pas inclure stdio.h, 582 00:24:46,940 --> 00:24:49,630 Vous devez également inclure quoi? 583 00:24:49,630 --> 00:24:50,060 Ouais. 584 00:24:50,060 --> 00:24:54,210 Donc cs50.h, qui est juste un fichier que nous avons écrit il ya quelques années. 585 00:24:54,210 --> 00:24:57,130 Nous l'avons installé sur l'appareil pour vous à côté 586 00:24:57,130 --> 00:24:58,490 tous les fichiers standard. 587 00:24:58,490 --> 00:25:00,500 Et si dans ces premières semaines de la classe, nous allons utiliser 588 00:25:00,500 --> 00:25:02,820 cela juste pour simplifier le processus de faire très basique 589 00:25:02,820 --> 00:25:04,600 des choses comme entrée de l'utilisateur obtenir. 590 00:25:04,600 --> 00:25:07,370 Parce que, comme nous le verrons dans quelques semaines, saisie de l'utilisateur obtenir dans un 591 00:25:07,370 --> 00:25:10,180 langage comme C est en fait étonnamment complexe, 592 00:25:10,180 --> 00:25:14,360 en particulier parce que vous ne savez pas à l'avance, en général, comment 593 00:25:14,360 --> 00:25:17,030 beaucoup de choses que l'utilisateur va taper po 594 00:25:17,030 --> 00:25:20,340 Et quand vous ne savez pas combien de données vous attendre, vous ne 595 00:25:20,340 --> 00:25:22,380 savoir combien de mémoire à allouer. 596 00:25:22,380 --> 00:25:25,480 Et si vous avez réellement un utilisateur contradictoire qui essaie 597 00:25:25,480 --> 00:25:28,180 de pirater votre système, planter votre ordinateur, eh bien, 598 00:25:28,180 --> 00:25:31,600 généralement la première méthode d'attaque est, comme je l'ai fait 599 00:25:31,600 --> 00:25:34,950 Lundi, saisir une séquence tout au long de caractères aléatoires, 600 00:25:34,950 --> 00:25:37,020 appuyez sur Entrée, et voir ce qui se casse. 601 00:25:37,020 --> 00:25:40,800 Parce que généralement, en cas de rupture du programme, qui fait allusion à 602 00:25:40,800 --> 00:25:42,650 une faille de sécurité, potentiellement. 603 00:25:42,650 --> 00:25:45,250 Il fait allusion certainement à vous, le programmeur, ayant fait un 604 00:25:45,250 --> 00:25:49,050 erreur, mais plus dangereusement, vous auriez pu faire un 605 00:25:49,050 --> 00:25:52,430 erreur liée à la sécurité, et en général, nous verrons que 606 00:25:52,430 --> 00:25:54,840 c'est comme ça que les machines sont compromises à ce jour, à la fois 607 00:25:54,840 --> 00:25:56,620 dans le monde du web et des programmes à l' 608 00:25:56,620 --> 00:25:58,070 ligne de commande, comme ceci. 609 00:25:58,070 --> 00:25:58,350 >> Très bien. 610 00:25:58,350 --> 00:26:00,460 Ainsi, la chaîne s est égal à GetString. 611 00:26:00,460 --> 00:26:03,380 Ainsi, plus concrètement maintenant, qu'est-ce que la ligne 6 faire ici? 612 00:26:03,380 --> 00:26:05,640 Ainsi, la fonction sur la droite obtient chaîne, 613 00:26:05,640 --> 00:26:06,890 prend combien d'arguments? 614 00:26:09,458 --> 00:26:09,900 D'accord. 615 00:26:09,900 --> 00:26:10,400 Donc, aucun. 616 00:26:10,400 --> 00:26:11,360 Un peu de raison vérifier. 617 00:26:11,360 --> 00:26:15,380 Un argument, encore une fois, c'est juste une entrée à une fonction pour modifier 618 00:26:15,380 --> 00:26:17,250 son comportement par défaut en quelque sorte. 619 00:26:17,250 --> 00:26:19,540 Mais dans ce cas, je ne veux pas de modifier 620 00:26:19,540 --> 00:26:20,650 le comportement des GetString. 621 00:26:20,650 --> 00:26:22,430 Je voulais juste avoir une chaîne. 622 00:26:22,430 --> 00:26:25,190 Alors, j'ai mis rien dans les parenthèses, puis j'ai mis un 623 00:26:25,190 --> 00:26:27,550 virgule demarking la fin de la ligne de code. 624 00:26:27,550 --> 00:26:29,840 Maintenant, le signe égal ne signifie pas l'égalité, en tant que tel. 625 00:26:29,840 --> 00:26:32,690 Cela signifie que l'affectation, ce qui signifie mettre ce que devient 626 00:26:32,690 --> 00:26:36,060 émise à l'intérieur de tout ce qui est à droite sur la gauche. 627 00:26:36,060 --> 00:26:39,400 >> Ainsi, sur la gauche, nous disons que nous avons déclaré un 628 00:26:39,400 --> 00:26:41,630 chaîne appelée s. 629 00:26:41,630 --> 00:26:44,240 Et plus précisément, nous avons alloué la mémoire interne de 630 00:26:44,240 --> 00:26:46,340 que nous allons mettre les bits qui représente une séquence de 631 00:26:46,340 --> 00:26:46,850 caractères. 632 00:26:46,850 --> 00:26:49,400 Mais aujourd'hui, nous avons alloué 633 00:26:49,400 --> 00:26:51,450 ou déclaré une chaîne. 634 00:26:51,450 --> 00:26:51,790 Très bien. 635 00:26:51,790 --> 00:26:54,760 Alors maintenant, une fois que j'ai fait cela, je veux brancher la valeur de 636 00:26:54,760 --> 00:26:56,535 s, et non pas la valeur de David. 637 00:26:56,535 --> 00:27:00,200 Donc, ce n'est pas bien pourquoi? 638 00:27:03,060 --> 00:27:04,870 Donc, c'est juste littéralement l'art codé en dur. 639 00:27:04,870 --> 00:27:06,870 C'est-à-dire "bonjour, s", ce qui n'est pas ce que je veux. 640 00:27:06,870 --> 00:27:07,790 Donc, je peux le faire. 641 00:27:07,790 --> 00:27:10,330 Le signe pour cent est un espace réservé, mais maintenant j'ai besoin de 642 00:27:10,330 --> 00:27:12,520 imprimer passer dans un second argument. 643 00:27:12,520 --> 00:27:15,160 Rappelons que les arguments des fonctions sont séparées par 644 00:27:15,160 --> 00:27:20,300 virgules, de sorte que la prochaine virgule ici j'ai mis après cette s la lettre. 645 00:27:20,300 --> 00:27:23,740 Et dans ce contexte, aujourd'hui, s est la variable, et printf, 646 00:27:23,740 --> 00:27:25,550 lors de la réception de ces deux entrées - 647 00:27:25,550 --> 00:27:29,440 la chaîne du côté gauche et le nom de la variable sur la droite - 648 00:27:29,440 --> 00:27:32,750 il sera brancher ce dernier dans l'ancien pour nous, et 649 00:27:32,750 --> 00:27:34,600 Il suffit d'imprimer une chaîne contenant belle belle 650 00:27:34,600 --> 00:27:36,770 que ce soit que nous avons tapé po 651 00:27:36,770 --> 00:27:37,560 >> Donc, nous allons essayer. 652 00:27:37,560 --> 00:27:38,860 Aller de l'avant et un zoom arrière, arrière 653 00:27:38,860 --> 00:27:40,250 à ma fenêtre de terminal. 654 00:27:40,250 --> 00:27:41,840 Zoomer en bas ici. 655 00:27:41,840 --> 00:27:44,070 Retapez faire bonjour. 656 00:27:44,070 --> 00:27:45,870 Clang semble avoir été relancé. 657 00:27:45,870 --> 00:27:49,280 Je vais taper. / Bonjour, Entrée. 658 00:27:49,280 --> 00:27:52,145 Rien ne semble être encore le cas, mais c'est à cette invite 659 00:27:52,145 --> 00:27:55,700 que je peux taper quelque chose comme Nate, Enter, et maintenant nous avons 660 00:27:55,700 --> 00:27:56,380 Bonjour, Nate. 661 00:27:56,380 --> 00:27:59,600 Et je peux le refaire avec Rob, et ainsi de suite. 662 00:27:59,600 --> 00:28:03,410 Donc, j'espère que maintenant ce programme se comporte comme j'ai l'intention. 663 00:28:03,410 --> 00:28:05,720 >> Maintenant, tout ce qui n'est pas facile à utiliser. 664 00:28:05,720 --> 00:28:07,930 Je n'ai aucune idée de ce qui est attendu de moi. 665 00:28:07,930 --> 00:28:09,620 Ainsi, nous pouvons certainement nettoyer tout ça un peu. 666 00:28:09,620 --> 00:28:13,270 Permettez-moi de revenir ici, et au lieu de simplement plonger et 667 00:28:13,270 --> 00:28:16,480 demandant à l'utilisateur une chaîne, permettez-moi de dire explicitement l' 668 00:28:16,480 --> 00:28:17,750 l'utilisateur ce que j'attends. 669 00:28:17,750 --> 00:28:21,610 Donc printf ("Entrez une chaîne:" 670 00:28:21,610 --> 00:28:24,080 ); 671 00:28:24,080 --> 00:28:25,510 Donc pas de variables ici. 672 00:28:25,510 --> 00:28:26,750 Pas de signes de pourcentage. 673 00:28:26,750 --> 00:28:28,550 Juste une simple phrase en anglais. 674 00:28:28,550 --> 00:28:34,030 Permettez-moi maintenant aller au fond ici et relancer mon programme. 675 00:28:34,030 --> 00:28:35,380 Mais rien ne semble avoir changé. 676 00:28:35,380 --> 00:28:37,350 Pourquoi? 677 00:28:37,350 --> 00:28:38,380 Je dois le recompiler. 678 00:28:38,380 --> 00:28:39,570 Donc, erreur facile à faire. 679 00:28:39,570 --> 00:28:41,700 Mais il faut non seulement enregistrer le fichier, mais 680 00:28:41,700 --> 00:28:43,260 recompiler le programme. 681 00:28:43,260 --> 00:28:46,640 Et si je ré-exécutez make bonjour, maintenant Clang s'exécute. 682 00:28:46,640 --> 00:28:51,800 Maintenant, je peux courir. / Bonjour. Et maintenant je vois "Entrez une chaîne:". 683 00:28:51,800 --> 00:28:52,050 D'accord. 684 00:28:52,050 --> 00:28:53,440 Maintenant c'est un peu plus convivial. 685 00:28:53,440 --> 00:28:55,850 Nate, Entrée, bonjour, Nate. 686 00:28:55,850 --> 00:28:57,310 >> Eh bien, nous allons essayer encore et commencer à penser 687 00:28:57,310 --> 00:28:58,080 sur les cas marginaux. 688 00:28:58,080 --> 00:29:00,520 Ainsi, tout comme dans Scratch, vous êtes encouragé ou sont en cours 689 00:29:00,520 --> 00:29:03,180 encouragée dans la spécification de type de réfléchir à ce qui pourrait aller 690 00:29:03,180 --> 00:29:06,610 mal si vous ne prévoyez pas tout ce que l'utilisateur peut faire. 691 00:29:06,610 --> 00:29:08,050 Bugs, par conséquent, pourrait s'ensuivre. 692 00:29:08,050 --> 00:29:09,710 Alors entrez une chaîne - 693 00:29:09,710 --> 00:29:11,130 ce qui est un cas coin ici? 694 00:29:11,130 --> 00:29:13,320 Qu'est-ce qu'un scénario I, le programmeur, peut-être pas 695 00:29:13,320 --> 00:29:16,070 prévu? 696 00:29:16,070 --> 00:29:17,600 Ouais. 697 00:29:17,600 --> 00:29:17,920 D'accord. 698 00:29:17,920 --> 00:29:22,060 Alors que faire si je tape dans un certain nombre comme ça? 699 00:29:22,060 --> 00:29:22,500 Très bien. 700 00:29:22,500 --> 00:29:24,490 Donc, il fonctionne toujours. 701 00:29:24,490 --> 00:29:25,880 Fait aucun sens grammaticalement. 702 00:29:25,880 --> 00:29:27,180 Mais au moins, le programme fonctionne. 703 00:29:27,180 --> 00:29:28,650 >> Ce qui est une autre affaire coin? 704 00:29:28,650 --> 00:29:29,610 Quelque chose que je ne m'attendais pas. 705 00:29:29,610 --> 00:29:31,590 Ouais? 706 00:29:31,590 --> 00:29:31,940 D'accord. 707 00:29:31,940 --> 00:29:34,950 Donc, nous pourrions faire quelque chose comme un nombre vraiment, vraiment grand. 708 00:29:34,950 --> 00:29:37,270 Donc, nous allons faire ici. 709 00:29:37,270 --> 00:29:40,880 Permettez-moi de faire un zoom arrière pour une seconde, permettez-moi de souligner. 710 00:29:40,880 --> 00:29:42,250 Impossible de copier et coller ici. 711 00:29:42,250 --> 00:29:42,470 Très bien. 712 00:29:42,470 --> 00:29:44,440 Donc je ne peux pas copier et coller dans cette fenêtre de terminal, donc nous allons 713 00:29:44,440 --> 00:29:46,950 il suffit de simuler. 714 00:29:46,950 --> 00:29:51,340 Permettez-moi de faire un zoom arrière, allons conclure. 715 00:29:51,340 --> 00:29:52,700 Je ne vais pas le faire trop longtemps, car il ne sera pas 716 00:29:52,700 --> 00:29:54,440 rompre effectivement dans ce programme. 717 00:29:54,440 --> 00:29:55,260 Mais c'est possible. 718 00:29:55,260 --> 00:29:55,830 Entrée. 719 00:29:55,830 --> 00:29:56,580 Mais il n'a pas fait. 720 00:29:56,580 --> 00:29:57,050 Très bien. 721 00:29:57,050 --> 00:29:58,440 Mais c'est un cas authentique coin. 722 00:29:58,440 --> 00:30:01,610 Et la seule raison qui se comportent correctement, de sorte à 723 00:30:01,610 --> 00:30:05,820 parler, c'est parce que l'GetString CS50 fonction est en fait 724 00:30:05,820 --> 00:30:08,040 conçue sous le capot, comme nous le verrons dans quelques semaines, 725 00:30:08,040 --> 00:30:11,570 pour allouer automatiquement RAM de plus en plus, de plus en plus 726 00:30:11,570 --> 00:30:14,330 mémoire du système d'exploitation, quand il se rend compte, wow, 727 00:30:14,330 --> 00:30:16,670 vous avez vraiment tapé dans quelque chose d'assez longue. 728 00:30:16,670 --> 00:30:18,500 Maintenant, c'est un peu un mensonge. 729 00:30:18,500 --> 00:30:22,020 Si l'on fait une pause pendant un bon moment et j'ai tapé dans 730 00:30:22,020 --> 00:30:24,640 quelque chose comme 5 milliards de caractères au clavier 731 00:30:24,640 --> 00:30:28,060 ici, ou vraiment touché copier-coller un peu, nous avons très probablement 732 00:30:28,060 --> 00:30:29,730 pourrait entraîner un plantage du programme. 733 00:30:29,730 --> 00:30:32,130 Juste un peu plus difficile à simuler avec un fini 734 00:30:32,130 --> 00:30:33,740 laps de temps. 735 00:30:33,740 --> 00:30:37,320 >> Ce qui est une autre affaire coin, nous pourrions essayer? 736 00:30:37,320 --> 00:30:38,730 Ouais? 737 00:30:38,730 --> 00:30:39,020 Ouais. 738 00:30:39,020 --> 00:30:40,360 Alors pourquoi ne pas nous répondons rien? 739 00:30:40,360 --> 00:30:43,130 Donc, nous avons à prendre des mesures, parce que sinon, 740 00:30:43,130 --> 00:30:45,060 le programme va rester là toute la journée à clignoter. 741 00:30:45,060 --> 00:30:46,860 Mais si je viens de taper Entrée - 742 00:30:46,860 --> 00:30:48,780 OK, maintenant, semble toujours mal. 743 00:30:48,780 --> 00:30:51,670 Ne s'est pas écrasé, mais peut-être il ya maintenant une possibilité de 744 00:30:51,670 --> 00:30:54,190 commencer à mettre en œuvre un programme plus rigoureux 745 00:30:54,190 --> 00:30:55,290 qui vérifie en fait. 746 00:30:55,290 --> 00:30:57,640 Et si la chaîne, la phrase, le mot que je 747 00:30:57,640 --> 00:31:00,890 a tapé dans longueur 0, eh bien, j'aurais peut-être crier à l' 748 00:31:00,890 --> 00:31:03,770 utilisateur, ou lui dire d'entrer une chaîne à nouveau, de sorte que 749 00:31:03,770 --> 00:31:06,560 nous obtenons réellement ce qui ressemble à un comportement correct et pas 750 00:31:06,560 --> 00:31:08,570 juste une surveillance complète de ma part. 751 00:31:08,570 --> 00:31:11,130 >> Question à l'arrière? 752 00:31:11,130 --> 00:31:11,970 Nombre décimal. 753 00:31:11,970 --> 00:31:13,120 Donc, nous pourrions essayer ça aussi. 754 00:31:13,120 --> 00:31:16,840 1,10000005. 755 00:31:16,840 --> 00:31:19,470 On dirait que ça va juste travailler réellement bien. 756 00:31:19,470 --> 00:31:21,160 Et qui est réellement prévu. 757 00:31:21,160 --> 00:31:24,550 Même si nous aurions pu tapé ce nombre là-bas, ou d'un 758 00:31:24,550 --> 00:31:28,200 plus grand nombre précédemment, se rendre compte que quand on frappe utilisateur 759 00:31:28,200 --> 00:31:31,070 d'entrée et nous utilisons la fonction GetString, ne 760 00:31:31,070 --> 00:31:34,380 importe si ce que je tape ressemble à un numéro. 761 00:31:34,380 --> 00:31:36,720 Rappelons que selon ASCII, tout sur votre 762 00:31:36,720 --> 00:31:39,920 clavier a une valeur numérique qui peut être mis en correspondance avec un 763 00:31:39,920 --> 00:31:41,480 caractère, un char. 764 00:31:41,480 --> 00:31:44,490 Donc dans ce cas, même si je pourrais taper un numéro, le 765 00:31:44,490 --> 00:31:48,190 ordinateur va penser que c'est, pour ainsi dire, comme une chaîne - 766 00:31:48,190 --> 00:31:49,870 quelque chose qui ressemble à un certain nombre, mais il est 767 00:31:49,870 --> 00:31:51,090 pas réellement un certain nombre. 768 00:31:51,090 --> 00:31:53,450 Mais c'est en réalité un enchaînement parfait, parce que maintenant nous pouvons 769 00:31:53,450 --> 00:31:55,450 fait la transition vers l'écriture de programmes qui 770 00:31:55,450 --> 00:31:56,730 utiliser d'autres types de données. 771 00:31:56,730 --> 00:32:01,840 >> Donc, en plus d'utiliser les caractères, ou plutôt, en plus de l'aide de chaînes, 772 00:32:01,840 --> 00:32:04,510 se rendre compte que nous avons d'autres types de données dans C ainsi que dans 773 00:32:04,510 --> 00:32:05,230 d'autres langues. 774 00:32:05,230 --> 00:32:08,480 Un char, comme son nom l'indique, est un caractère unique. 775 00:32:08,480 --> 00:32:12,150 Un flotteur est une valeur à virgule flottante, et c'est juste une fantaisie 776 00:32:12,150 --> 00:32:14,470 façon de dire un nombre réel - quelque chose qui a un nombre décimal 777 00:32:14,470 --> 00:32:17,410 sert à rien avec des nombres à gauche et / ou droite. 778 00:32:17,410 --> 00:32:21,370 Un int est un entier, qui est juste un nombre comme 123. 779 00:32:21,370 --> 00:32:24,170 Et maintenant, plus intéressant encore sont des choses comme double. 780 00:32:24,170 --> 00:32:28,540 Qu'avons-nous dit une chambre double était la dernière fois? 781 00:32:28,540 --> 00:32:30,050 C'est 64, à droite. 782 00:32:30,050 --> 00:32:33,560 Ainsi, alors que généralement un flotteur est 32-bit - 783 00:32:33,560 --> 00:32:37,340 il est donc aussi longtemps dans la mémoire, il utilise 32 zéros et de uns aux 784 00:32:37,340 --> 00:32:40,530 représentent des valeurs - un double est littéralement deux fois, ce qui 785 00:32:40,530 --> 00:32:43,810 signifie que vous pouvez représenter des chiffres plus élevés, ou 786 00:32:43,810 --> 00:32:45,810 vous pouvez représenter des chiffres plus précis. 787 00:32:45,810 --> 00:32:48,690 Ainsi, vous pouvez avoir plus de chiffres après la virgule, mais 788 00:32:48,690 --> 00:32:51,520 comme le gars dit dans la vidéo, même quelque chose de simple 789 00:32:51,520 --> 00:32:55,360 conceptuellement comme 1/3 ne peut pas être représenté précisément par une 790 00:32:55,360 --> 00:32:58,330 ordinateur, parce que finalement vous n'avez plus de bits, et 791 00:32:58,330 --> 00:33:02,510 donc vous ne pouvez faire .33333333 tant de fois, à 792 00:33:02,510 --> 00:33:05,050 quel point vous avez juste à dire que je suis sorti de la représentation 793 00:33:05,050 --> 00:33:08,120 l'espace, je dois juste l'appeler un jour et de le représenter 794 00:33:08,120 --> 00:33:10,200 quelque peu imprécise comme ça. 795 00:33:10,200 --> 00:33:11,110 Et un long long - 796 00:33:11,110 --> 00:33:13,880 nom stupide, mais c'est parce qu'il ya un type de données connue sous le nom 797 00:33:13,880 --> 00:33:19,350 longtemps dans C qui est souvent coïncidence 32 bits, tout comme un 798 00:33:19,350 --> 00:33:21,670 int est de 32 bits, mais un long long est 799 00:33:21,670 --> 00:33:23,560 généralement 64 bits. 800 00:33:23,560 --> 00:33:25,740 Donc, cela signifie juste que vous pouvez représenter plus 801 00:33:25,740 --> 00:33:26,990 nombreux que cela. 802 00:33:26,990 --> 00:33:27,410 >> Très bien. 803 00:33:27,410 --> 00:33:29,390 Donc, si nous voulons réellement commencer à représenter les choses, nous 804 00:33:29,390 --> 00:33:31,030 peut-être besoin de plus de formes sophistiquées et 805 00:33:31,030 --> 00:33:32,340 c'est pourquoi nous avons chaîne. 806 00:33:32,340 --> 00:33:36,450 Ainsi, dans la bibliothèque CS50, ce fichier s'appelle cs50.h, nous avons 807 00:33:36,450 --> 00:33:41,110 effectivement déclaré un type de données, pour ainsi dire, appelée chaîne, 808 00:33:41,110 --> 00:33:42,710 mais chaîne n'existe pas réellement. 809 00:33:42,710 --> 00:33:44,780 Il s'agit, encore une fois, une de ces couches que nous allons éplucher 810 00:33:44,780 --> 00:33:47,490 de retour dans une semaine ou deux et jetez-le, et fait 811 00:33:47,490 --> 00:33:49,640 regarder sous le capot ce qui est en fait une chaîne, et 812 00:33:49,640 --> 00:33:50,840 comment il est représenté. 813 00:33:50,840 --> 00:33:53,520 Nous allons aussi examiner les valeurs booléennes. 814 00:33:53,520 --> 00:33:56,040 >> Donc, ce qui était un bool dans le contexte de Scratch? 815 00:33:59,154 --> 00:34:00,300 Il est vrai ou faux. 816 00:34:00,300 --> 00:34:03,900 Donc, c'est juste une valeur qui est vrai ou faux, allumé ou éteint, 1 ou 817 00:34:03,900 --> 00:34:06,140 0, mais vous voulez voir dans le monde. 818 00:34:06,140 --> 00:34:09,739 Donc, en C, grâce à la bibliothèque CS50, qui à son tour 819 00:34:09,739 --> 00:34:12,179 comprend une autre bibliothèque sous le capot, nous avons 820 00:34:12,179 --> 00:34:14,909 l'accès à un type de données que l'on appelle bool, qui sera 821 00:34:14,909 --> 00:34:18,730 littéralement nous permettent d'assigner les valeurs true ou false pour 822 00:34:18,730 --> 00:34:20,219 choses dans un programme. 823 00:34:20,219 --> 00:34:23,880 >> Donc, nous allons aller de l'avant ici et d'écrire un petit programme qui 824 00:34:23,880 --> 00:34:26,330 fait quelque chose impliquant des nombres à la place. 825 00:34:26,330 --> 00:34:29,840 Permettez-moi de revenir sur l'Appliance CS50, laissez-moi aller de l'avant et 826 00:34:29,840 --> 00:34:32,770 créer un nouveau fichier appelé ici - 827 00:34:32,770 --> 00:34:35,460 disons juste quelque chose de simple, comme math.c. 828 00:34:38,270 --> 00:34:38,710 Très bien. 829 00:34:38,710 --> 00:34:41,600 Et maintenant, allez jusqu'au sommet de mon programme, je suis 830 00:34:41,600 --> 00:34:42,510 va faire l'habituel - 831 00:34:42,510 --> 00:34:44,780 # Include, de sorte que je peux utiliser 832 00:34:44,780 --> 00:34:46,860 printf, int main (void) - 833 00:34:46,860 --> 00:34:49,270 nous y reviendrons, par la suite, ce qui signifie int 834 00:34:49,270 --> 00:34:52,389 ici, ce qui signifie que nul ici, mais pour l'instant, sachez simplement que 835 00:34:52,389 --> 00:34:54,270 vous devez lancer des programmes de ce genre. 836 00:34:54,270 --> 00:34:56,280 Maintenant, je vais aller de l'avant et de dire quelque chose d'un peu 837 00:34:56,280 --> 00:35:02,110 différente - printf ("Donnez-moi un nombre:" 838 00:35:02,110 --> 00:35:03,570 );. 839 00:35:03,570 --> 00:35:09,220 Alors je vais faire int n = getInt, car il 840 00:35:09,220 --> 00:35:12,770 Il s'avère que getInt est une autre fonction dans la bibliothèque CS50 841 00:35:12,770 --> 00:35:14,060 en plus GetString. 842 00:35:14,060 --> 00:35:17,340 Et maintenant, je vais faire quelque chose de stupide, comme "merci 843 00:35:17,340 --> 00:35:25,760 pour l'% d ", pour l'entier décimal, puis par des virgules n, et 844 00:35:25,760 --> 00:35:26,620 elle renvoie 0. 845 00:35:26,620 --> 00:35:28,940 Encore une fois, retourne 0 n'a rien à voir avec le nombre, je suis 846 00:35:28,940 --> 00:35:30,080 demandant à l'utilisateur. 847 00:35:30,080 --> 00:35:33,620 Signifie seulement à la fin que tous, sans doute, est bien. 848 00:35:33,620 --> 00:35:36,290 >> Alors laissez-moi descendre dans la fenêtre du terminal ici. 849 00:35:36,290 --> 00:35:39,590 Permettez-moi de saisir rendre les mathématiques, entrez. 850 00:35:39,590 --> 00:35:41,360 Et quelque chose qui ne va pas. 851 00:35:41,360 --> 00:35:44,620 Faire des mathématiques n'a pas fonctionné. 852 00:35:44,620 --> 00:35:46,170 Voici le premier de nos messages d'erreur. 853 00:35:46,170 --> 00:35:46,570 Pourquoi? 854 00:35:46,570 --> 00:35:49,720 Un peu cryptique, mais - 855 00:35:49,720 --> 00:35:50,060 Ouais. 856 00:35:50,060 --> 00:35:51,240 Donc cs50.h. 857 00:35:51,240 --> 00:35:53,900 Encore une fois, surtout au début, vous allez écrire votre premier 858 00:35:53,900 --> 00:35:56,590 programme pour pset 1 dans les sections, dans les heures de bureau, et 859 00:35:56,590 --> 00:35:59,050 franchement, ça va être écrasante parfois ce que ces choses 860 00:35:59,050 --> 00:36:00,000 sont en train de dire. 861 00:36:00,000 --> 00:36:01,890 Mais vous vous rendrez compte très vite ils commencent à tomber 862 00:36:01,890 --> 00:36:06,120 dans des seaux où celui-ci signifie que vous avez laissé une 863 00:36:06,120 --> 00:36:08,290 de l'# includes dans la partie supérieure du dossier. 864 00:36:08,290 --> 00:36:10,960 Et Clang, le compilateur, désire vous informer du présent 865 00:36:10,960 --> 00:36:14,090 dire, assez fantaisiste, déclaration implicite de 866 00:36:14,090 --> 00:36:15,990 getInt fonction est invalide. 867 00:36:15,990 --> 00:36:16,310 >> Très bien. 868 00:36:16,310 --> 00:36:17,520 Alors qu'est-ce que ça veut dire? 869 00:36:17,520 --> 00:36:22,080 Cela signifie simplement que vous avez implicitement déclaré dans getInt 870 00:36:22,080 --> 00:36:24,850 le sens que vous n'avez pas explicitement déclarée. 871 00:36:24,850 --> 00:36:27,300 Pour déclarer explicitement int, il faut apprendre à 872 00:36:27,300 --> 00:36:28,740 Clang qu'il existe. 873 00:36:28,740 --> 00:36:32,020 Et la solution très simple pour cela est de l'enseigner par 874 00:36:32,020 --> 00:36:34,780 y compris cette autre fichier, cs50.h, à 875 00:36:34,780 --> 00:36:35,850 le haut de votre fichier. 876 00:36:35,850 --> 00:36:40,380 Parce que littéralement, ce # include ne s'agit-il dit Clang 877 00:36:40,380 --> 00:36:44,030 à peu près à aller trouver le fichier appelé cs50.h, copie, 878 00:36:44,030 --> 00:36:48,150 collez automatiquement dans le haut de mon programme pour moi, 879 00:36:48,150 --> 00:36:50,850 puis de convertir le code source de zéros et de uns. 880 00:36:50,850 --> 00:36:52,850 Mais ce serait évidemment très fastidieux si nous, les humains ont 881 00:36:52,850 --> 00:36:55,370 d'aller copier et de coller ces fichiers volumineux tout le temps, 882 00:36:55,370 --> 00:36:58,540 si # include fait juste tout ce qui automatiquement sans 883 00:36:58,540 --> 00:37:01,550 troubler mon code avec quelqu'un d'autre bibliothèque. 884 00:37:01,550 --> 00:37:06,370 Et une bibliothèque est juste un autre fichier contenant des fonctions et 885 00:37:06,370 --> 00:37:08,340 d'autres choses que quelqu'un d'autre a écrit, que nous sommes 886 00:37:08,340 --> 00:37:10,270 levier pour notre propre bien. 887 00:37:10,270 --> 00:37:10,580 >> Très bien. 888 00:37:10,580 --> 00:37:11,200 Essayons encore une fois. 889 00:37:11,200 --> 00:37:12,250 Faire des mathématiques. 890 00:37:12,250 --> 00:37:13,120 Entrée. 891 00:37:13,120 --> 00:37:13,530 Bon. 892 00:37:13,530 --> 00:37:14,880 Donc, cela semble avoir fonctionné. 893 00:37:14,880 --> 00:37:18,330 Alors laissez-moi courir mathématiques;. / Math. 894 00:37:18,330 --> 00:37:21,100 Saisissez me donne un certain nombre, 123. 895 00:37:21,100 --> 00:37:22,620 Merci pour le 123. 896 00:37:22,620 --> 00:37:24,490 Maintenant, nous allons essayer une autre affaire coin. 897 00:37:24,490 --> 00:37:26,530 Une chaîne est très généreux, car une 898 00:37:26,530 --> 00:37:27,620 chaîne peut être n'importe quoi. 899 00:37:27,620 --> 00:37:28,910 Peut ressembler à numéros, ressemblent 900 00:37:28,910 --> 00:37:30,600 caractères, ressemblent à des mots. 901 00:37:30,600 --> 00:37:31,900 Mais un int est un entier. 902 00:37:31,900 --> 00:37:34,370 Alors maintenant, si je suis difficile à l'utilisateur, et il est dit «Donnez-moi 903 00:37:34,370 --> 00:37:38,730 un certain nombre, «et si je tente de faire quelque chose comme 0,1? 904 00:37:38,730 --> 00:37:41,510 Eh bien, c'est un nombre, et il est compatible avec la 905 00:37:41,510 --> 00:37:44,180 grammaire que j'ai utilisé ici, mais sous le capot, je suis d' 906 00:37:44,180 --> 00:37:45,610 Bien sûr, utiliser la fonction getInt. 907 00:37:45,610 --> 00:37:46,610 >> Alors voyons voir ce qui se passe. 908 00:37:46,610 --> 00:37:48,250 Entrez, réessayez. 909 00:37:48,250 --> 00:37:48,560 Très bien. 910 00:37:48,560 --> 00:37:50,570 Laissez-moi être difficile et appuyez simplement de nouveau sur Entrée. 911 00:37:50,570 --> 00:37:51,700 Entrez, entrez. 912 00:37:51,700 --> 00:37:53,890 Alors maintenant, il semble que getInt est un peu plus 913 00:37:53,890 --> 00:37:55,240 puissant que GetString. 914 00:37:55,240 --> 00:37:58,540 Nous, le personnel, mis en œuvre de telle manière que, si nous remarquons 915 00:37:58,540 --> 00:38:02,100 vous n'avez pas donné un int - et un int est un nombre décimal 916 00:38:02,100 --> 00:38:04,785 zéros contenant, ceux, deux, trois, quatre, cinq, six, 917 00:38:04,785 --> 00:38:05,540 sept, huit, ou de neuf. 918 00:38:05,540 --> 00:38:06,310 Et c'est tout. 919 00:38:06,310 --> 00:38:08,810 Pas de chiffres après la virgule, pas de personnages, pas de ponctuation. 920 00:38:08,810 --> 00:38:10,390 Il semble que nous devons coopérer. 921 00:38:10,390 --> 00:38:13,680 Je vais donc essayer quatre, cinq, six, et ça me passe au travers. 922 00:38:13,680 --> 00:38:16,760 Alors, vraiment, d'être ici anale, je devrais probablement dire «Donnez-moi 923 00:38:16,760 --> 00:38:20,310 un nombre entier ", afin de transmettre à l'utilisateur 924 00:38:20,310 --> 00:38:22,620 exactement ce que j'ai l'intention. 925 00:38:22,620 --> 00:38:24,090 >> Maintenant, nous allons réfléchir sous le capot. 926 00:38:24,090 --> 00:38:27,930 Nous n'allons pas voir comment cs50.h est mis en œuvre aujourd'hui, 927 00:38:27,930 --> 00:38:29,080 cette bibliothèque. 928 00:38:29,080 --> 00:38:33,600 Mais si elle n'arrête pas de dire recommencer, recommencer, recommencer, ce que la programmation 929 00:38:33,600 --> 00:38:36,970 construire sans doute suis-je utiliser sous le capot d' 930 00:38:36,970 --> 00:38:39,000 mettre en œuvre ce? 931 00:38:39,000 --> 00:38:39,980 Il suffit donc d'une boucle, non? 932 00:38:39,980 --> 00:38:41,930 L'une des idées les plus simples que nous avons vu sur Scratch. 933 00:38:41,930 --> 00:38:45,050 The Forever construire, la répétition de la construction. 934 00:38:45,050 --> 00:38:47,320 On peut supposer que, dans ce programme, sous le capot, même 935 00:38:47,320 --> 00:38:49,470 mais il est écrit en C et se raye pas, c'est faire 936 00:38:49,470 --> 00:38:54,300 quelque chose qui s'appelle équivalent à jamais si l'utilisateur n'a pas 937 00:38:54,300 --> 00:38:58,710 tapé dans un entier, disons relance, relance, relance, relance, de sorte 938 00:38:58,710 --> 00:39:01,220 puis enfin, quand nous recevons un nombre entier, alors vous 939 00:39:01,220 --> 00:39:02,970 sortir de cette boucle. 940 00:39:02,970 --> 00:39:05,610 >> Alors quelles sont les autres fonctions peuvent nous utilisons ici dans la bibliothèque du CS50? 941 00:39:05,610 --> 00:39:07,880 Eh bien, en quelque sorte les plus évidents, du moins sur la base du 942 00:39:07,880 --> 00:39:09,570 les types de données que nous connaissons maintenant exister. 943 00:39:09,570 --> 00:39:12,900 Nous avons mis en GetString, getInt, mais tout au long du 944 00:39:12,900 --> 00:39:15,680 premières semaines de la durée, vous pouvez également utiliser GetFloat et 945 00:39:15,680 --> 00:39:18,870 GetDouble et GetLongLong afin d'obtenir précisément le 946 00:39:18,870 --> 00:39:20,030 les types de données que vous souhaitez. 947 00:39:20,030 --> 00:39:24,030 Parce que le détail clé ici est que, contrairement à certaines langues, 948 00:39:24,030 --> 00:39:26,630 comme Python et Ruby, où vous n'avez pas nécessairement besoin d' 949 00:39:26,630 --> 00:39:29,730 déclarer le type de données d'une variable - 950 00:39:29,730 --> 00:39:32,390 vous n'avez pas à indiquer à l'ordinateur ce genre de choses 951 00:39:32,390 --> 00:39:34,000 vous allez mettre dans la variable - 952 00:39:34,000 --> 00:39:36,640 en C, vous devez être toujours aussi précis. 953 00:39:36,640 --> 00:39:40,060 Donc, si vous voulez une variable appelée n, un morceau de stockage 954 00:39:40,060 --> 00:39:42,900 que, dans ce cas, se trouve être de 32 bits par convention, vous 955 00:39:42,900 --> 00:39:45,660 doivent indiquer à l'ordinateur que ces bits sont 956 00:39:45,660 --> 00:39:47,840 allez stocker un certain nombre - 957 00:39:47,840 --> 00:39:50,630 pas un personnage, pas une chaîne, pas un char. 958 00:39:50,630 --> 00:39:52,620 Et cela répond à la question que nous efficacement 959 00:39:52,620 --> 00:39:53,760 rencontré la semaine dernière. 960 00:39:53,760 --> 00:39:57,050 Si nous utilisons les zéros et les numéros de celles à ne représentent pas seulement 961 00:39:57,050 --> 00:40:00,770 chiffres, mais tant et B et Cs, comment dans le monde est un 962 00:40:00,770 --> 00:40:03,460 l'ordinateur va savoir que ce modèle de bits réellement 963 00:40:03,460 --> 00:40:07,650 représente le nombre 65, par opposition à la représentation du 964 00:40:07,650 --> 00:40:09,860 lettre A, qui coïncide, selon 965 00:40:09,860 --> 00:40:13,440 ASCII, rappeler, était équivalent à 65? 966 00:40:13,440 --> 00:40:16,550 >> Ainsi, ces types de données fournissent un contexte à l'ordinateur, de sorte 967 00:40:16,550 --> 00:40:18,810 qu'il sait si ces bits doit être interprété comme une 968 00:40:18,810 --> 00:40:23,660 int ou comme une chaîne. 969 00:40:23,660 --> 00:40:26,500 Toutes les questions, alors, à ce sujet? 970 00:40:26,500 --> 00:40:28,149 Ouais? 971 00:40:34,780 --> 00:40:35,270 DAVID J. MALAN: Bonne question. 972 00:40:35,270 --> 00:40:39,140 Si nous prenons sur stdio.h, nous enregistrer le fichier - 973 00:40:39,140 --> 00:40:44,360 laissez-moi aller à la fenêtre de terminal et exécutez make mathématiques, zoom 974 00:40:44,360 --> 00:40:45,530 et entrer - 975 00:40:45,530 --> 00:40:47,700 maintenant je reçois une erreur différente, parce que je suis implicitement 976 00:40:47,700 --> 00:40:49,650 déclarant ce qui fonctionne maintenant? 977 00:40:49,650 --> 00:40:50,700 Printf. 978 00:40:50,700 --> 00:40:52,970 Alors maintenant, j'ai créé un nouveau problème, dont la solution est 979 00:40:52,970 --> 00:40:53,890 essentiellement les mêmes. 980 00:40:53,890 --> 00:40:55,365 J'ai besoin de remettre ça. 981 00:40:55,365 --> 00:40:56,615 PUBLIC: [Inaudible] 982 00:41:03,534 --> 00:41:04,030 DAVID J. MALAN: Oh. 983 00:41:04,030 --> 00:41:04,850 Donc, si je sors - 984 00:41:04,850 --> 00:41:05,360 Ok, ouais. 985 00:41:05,360 --> 00:41:08,960 Donc, si je retire l'inclusion E / S standard bibliothèque jusqu'à 986 00:41:08,960 --> 00:41:12,020 ici, puis vous dites que si je me débarrasser de printf, obtenir 987 00:41:12,020 --> 00:41:13,450 débarrasser de printf? 988 00:41:13,450 --> 00:41:13,810 Oui. 989 00:41:13,810 --> 00:41:18,450 Cela devrait fonctionner, parce que je ne suis plus toute aide - oups. 990 00:41:18,450 --> 00:41:20,110 Que je viens de mentir? 991 00:41:20,110 --> 00:41:21,650 Oh, d'accord. 992 00:41:21,650 --> 00:41:25,640 Cela ne fonctionnera pas à cause d'une nouvelle erreur, nous avons introduit. 993 00:41:25,640 --> 00:41:28,390 Et celui-ci est un peu plus explicite. 994 00:41:28,390 --> 00:41:29,440 >> Quel est le problème? 995 00:41:29,440 --> 00:41:30,680 Inutilisés n variables. 996 00:41:30,680 --> 00:41:34,040 Donc, cette erreur est le résultat de notre avoir configuré l' 997 00:41:34,040 --> 00:41:36,640 appareil à être particulièrement pédants, pour vraiment crier à 998 00:41:36,640 --> 00:41:39,060 vous pour chaque erreur possible, même si c'est un peu 999 00:41:39,060 --> 00:41:41,950 une erreur non fatale comme cela - est-ce vraiment un grand 1000 00:41:41,950 --> 00:41:44,820 face que je attribuer un int, mettez un numéro en elle, puis 1001 00:41:44,820 --> 00:41:46,030 seulement n'a rien fait avec elle? 1002 00:41:46,030 --> 00:41:47,020 Donc, fonctionnellement, non. 1003 00:41:47,020 --> 00:41:50,410 Cela ne va pas à briser le programme. 1004 00:41:50,410 --> 00:41:51,490 C'est juste un peu stupide, non? 1005 00:41:51,490 --> 00:41:54,220 Il n'y a pas de valeur pour avoir demandé ce nombre, stockée 1006 00:41:54,220 --> 00:41:56,370 dans une variable, si vous n'allez jamais à faire quoi que ce soit 1007 00:41:56,370 --> 00:41:58,000 avec elle, que ce soit l'imprimer ou l'enregistrer. 1008 00:41:58,000 --> 00:42:00,270 Donc dans ce cas, Clang est de reconnaître que beaucoup, et 1009 00:42:00,270 --> 00:42:02,010 c'est dire inutilisés n variables. 1010 00:42:02,010 --> 00:42:05,380 >> Ainsi, nous pouvons résoudre ce problème si nous voulons vraiment. 1011 00:42:05,380 --> 00:42:07,250 Mais encore une fois, ce n'est pas une bonne programmation maintenant. 1012 00:42:07,250 --> 00:42:09,310 Alors seulement je pouvais le faire - 1013 00:42:09,310 --> 00:42:12,060 descendre ici, laissez-moi éclaircir l'écran, rendre les mathématiques. 1014 00:42:12,060 --> 00:42:13,090 Qui fonctionne. 1015 00:42:13,090 --> 00:42:18,110 Maintenant, je peux lancer mon programme de mathématiques, prend en entrée - 1016 00:42:18,110 --> 00:42:18,700 eh bien, c'était mauvais. 1017 00:42:18,700 --> 00:42:23,450 Prend en entrée, et c'est tout ce qu'il fait, dans ce cas. 1018 00:42:23,450 --> 00:42:25,220 >> Donc en fait, essayons un cas autre coin que nous 1019 00:42:25,220 --> 00:42:26,300 ne pas penser plus tôt. 1020 00:42:26,300 --> 00:42:28,220 Dans ce cas - là, nous allons revenir à celui qui est un 1021 00:42:28,220 --> 00:42:29,500 peu plus convivial. 1022 00:42:29,500 --> 00:42:32,580 Permettez-moi de revenir ici et exécutez make à nouveau les mathématiques. 1023 00:42:32,580 --> 00:42:34,190 Oups, qu'ai-je fait de mal? 1024 00:42:34,190 --> 00:42:35,400 Vous avez à faire reculer plus loin. 1025 00:42:35,400 --> 00:42:36,390 D'accord. 1026 00:42:36,390 --> 00:42:38,490 Maintenant, nous sommes de retour à l'état initial, où tous les 1027 00:42:38,490 --> 00:42:39,990 on l'espère bien. 1028 00:42:39,990 --> 00:42:43,360 Et maintenant, si je n'ai mathématiques, 123 semble fonctionner. 1029 00:42:43,360 --> 00:42:46,010 Mais ce n'est pas vraiment une preuve effective, de dire simplement 1030 00:42:46,010 --> 00:42:47,930 ok, ça marche. 1031 00:42:47,930 --> 00:42:49,120 789, qui fonctionne. 1032 00:42:49,120 --> 00:42:50,100 Temps de se soumettre. 1033 00:42:50,100 --> 00:42:51,870 Parce qu'il ya quelques cas rares d'autres ici. 1034 00:42:51,870 --> 00:42:55,040 Une chaîne n'a pas vraiment nous donner beaucoup de peine en tapant un 1035 00:42:55,040 --> 00:42:56,510 beaucoup de caractères. 1036 00:42:56,510 --> 00:42:59,580 Mais que faire si je tape dans tout cela? 1037 00:42:59,580 --> 00:43:04,850 Frapper le numéro 1 grand-chose, beaucoup ici - 1038 00:43:04,850 --> 00:43:06,300 Tout va bien, ça devient un peu ennuyeux, alors je vais 1039 00:43:06,300 --> 00:43:10,040 arrêter ici, et je vais appuyez sur Entrée. 1040 00:43:10,040 --> 00:43:11,290 >> Qu'est-ce qui s'est passé? 1041 00:43:14,110 --> 00:43:17,680 Donc, cela peut effectivement être expliquée. 1042 00:43:17,680 --> 00:43:18,920 Ainsi at-il le prendre comme binaire? 1043 00:43:18,920 --> 00:43:21,130 Une bonne pensée, mais non, ce n'est pas le fait qu'il a pris 1044 00:43:21,130 --> 00:43:22,815 sous forme binaire, car en effet, c'était juste une sorte de 1045 00:43:22,815 --> 00:43:23,080 coïncidence. 1046 00:43:23,080 --> 00:43:23,930 Nous pouvons le faire à nouveau. 1047 00:43:23,930 --> 00:43:26,530 Il n'y a donc pas de 2 dans le système binaire, c'est 1048 00:43:26,530 --> 00:43:27,420 probablement assez de toute façon. 1049 00:43:27,420 --> 00:43:28,780 Entrée. 1050 00:43:28,780 --> 00:43:30,140 Donc, ce n'était pas le problème. 1051 00:43:30,140 --> 00:43:31,390 Quoi d'autre? 1052 00:43:34,650 --> 00:43:35,400 Exactement. 1053 00:43:35,400 --> 00:43:37,830 >> Alors, pensez à revenir à ce que un int est en réalité. 1054 00:43:37,830 --> 00:43:40,970 Il est 32 bits qui, collectivement, sont interprétés 1055 00:43:40,970 --> 00:43:42,090 comme un nombre. 1056 00:43:42,090 --> 00:43:44,730 Si vous avez 32 bits, cela signifie que chacun des bits peuvent être 1057 00:43:44,730 --> 00:43:46,690 un 0 ou un 1., 0 ou un 1 1058 00:43:46,690 --> 00:43:49,090 Donc, cela signifie qu'il ya deux possibilités pour ce bit, 1059 00:43:49,090 --> 00:43:51,140 deux possibilités pour cela, deux possibilités pour ce 1060 00:43:51,140 --> 00:43:52,570 peu - si c'est 2 fois 2 fois - 1061 00:43:52,570 --> 00:43:55,480 de sorte que les 2 à la puissance 32 est le nombre total d' 1062 00:43:55,480 --> 00:43:58,960 permutations de zéros et de uns, si vous avez 32 1063 00:43:58,960 --> 00:44:01,400 espaces réservés zéros ou de uns, en face de vous. 1064 00:44:01,400 --> 00:44:04,250 Donc, si j'ai 2 au 32, mathématiquement, c'est quoi? 1065 00:44:07,080 --> 00:44:07,840 Donc, c'est beaucoup. 1066 00:44:07,840 --> 00:44:09,910 Il est 4 milliards de dollars, donner ou prendre. 1067 00:44:09,910 --> 00:44:13,510 Et 4 milliards ne semble pas être ce qui a été imprimé ici. 1068 00:44:13,510 --> 00:44:16,290 En fait, cela ressemble plus près de 2 milliards d'euros. 1069 00:44:16,290 --> 00:44:17,970 Mais ce n'est pas une coïncidence. 1070 00:44:17,970 --> 00:44:21,590 Le fait que l'ordinateur a mal interprété mon très grand nombre, 1071 00:44:21,590 --> 00:44:24,260 ma séquence énorme de celles et puis ma séquence énorme de groupes de deux, 1072 00:44:24,260 --> 00:44:26,880 que près de 2 milliards de dollars, est expliqué comment? 1073 00:44:30,250 --> 00:44:32,180 Il ya un plafond sur le int. 1074 00:44:32,180 --> 00:44:34,970 Il ya une certainement une valeur maximale que vous pouvez représenter. 1075 00:44:34,970 --> 00:44:36,370 Mais il est généralement de 4 milliards d'euros, non? 1076 00:44:36,370 --> 00:44:39,100 Si 2 au 32 est d'environ 4 milliards de dollars, qui semble comme 1077 00:44:39,100 --> 00:44:40,350 c'est le plus grand nombre. 1078 00:44:42,420 --> 00:44:45,240 Donc, pas un reste, mais une bonne pensée. 1079 00:44:45,240 --> 00:44:46,340 Les nombres négatifs. 1080 00:44:46,340 --> 00:44:49,570 Donc, si vous avez 4 milliards choses possibles que vous pouvez 1081 00:44:49,570 --> 00:44:52,970 représentent ces diverses permutations de 32 0 et 1082 00:44:52,970 --> 00:44:55,600 1s, eh bien, il va de soi que nous, les humains pourraient vouloir 1083 00:44:55,600 --> 00:44:57,110 représentent non seulement des nombres entiers positifs 1084 00:44:57,110 --> 00:44:58,240 mais entiers négatifs. 1085 00:44:58,240 --> 00:45:00,410 Et en effet, c'est l'hypothèse que C fait. 1086 00:45:00,410 --> 00:45:03,550 Donc, avec 32 bits, vous pouvez représenter à peu près négatif 2 1087 00:45:03,550 --> 00:45:06,630 milliards sur toute la hauteur de positif 2 milliards d'euros. 1088 00:45:06,630 --> 00:45:08,750 Et dans ce cas, ce que nous sommes vraiment voir est juste 1089 00:45:08,750 --> 00:45:13,600 la frange de la capacité de notre entier, et nous avons donc 1090 00:45:13,600 --> 00:45:15,860 de parler, débordait d'un entier. 1091 00:45:15,860 --> 00:45:19,180 Nous avons essayé de caser plus de bits en elle que peut réellement s'adapter. 1092 00:45:19,180 --> 00:45:22,960 Ainsi, le résultat final est que nous avons essentiellement tous les bits à 1. 1093 00:45:22,960 --> 00:45:25,280 Nous avons basculé l'ensemble de nos morceaux sur, nous avons essayé de représenter 1094 00:45:25,280 --> 00:45:27,630 le plus grand nombre possible, mais ce n'est clairement pas près d' 1095 00:45:27,630 --> 00:45:30,960 assez grand pour représenter les deux choses que je viens de tapé po 1096 00:45:30,960 --> 00:45:31,730 Ouais? 1097 00:45:31,730 --> 00:45:32,980 PUBLIC: [Inaudible] 1098 00:45:37,230 --> 00:45:37,830 >> DAVID J. MALAN: Bonne question. 1099 00:45:37,830 --> 00:45:40,080 Pourquoi ne pouvons-nous pas simplement représenter que négative 1100 00:45:40,080 --> 00:45:41,500 signer en tant que juste un personnage? 1101 00:45:41,500 --> 00:45:44,200 Donc, nous ne pouvions absolument, et nous pourrions ensuite enregistrer 1102 00:45:44,200 --> 00:45:45,470 un bit supplémentaire. 1103 00:45:45,470 --> 00:45:49,100 Mais vous allez encore avoir à représenter ce tableau de bord, et 1104 00:45:49,100 --> 00:45:50,700 qui va vous coûter au moins quelque chose, 1105 00:45:50,700 --> 00:45:52,220 sans doute un peu. 1106 00:45:52,220 --> 00:45:55,610 Alors oui, nous pourrions avoir 32 bits utilisés pour notre nombre, mais maintenant 1107 00:45:55,610 --> 00:45:57,610 nous avons besoin d'un autre bit utilisé pour notre tableau de bord 1108 00:45:57,610 --> 00:45:58,810 symbole, le signe moins. 1109 00:45:58,810 --> 00:46:01,470 Alors maintenant, nous avons 33 valeurs binaires, que nous pourrions faire, mais il est 1110 00:46:01,470 --> 00:46:02,570 tout simplement pas la façon dont c'est fait. 1111 00:46:02,570 --> 00:46:05,140 Nous avons fait appel d'un jugement année, il ya 32 bits est une sorte de 1112 00:46:05,140 --> 00:46:06,170 unité de mesure ici. 1113 00:46:06,170 --> 00:46:08,120 Nous allons donc utiliser l'un de ces bits efficacement à 1114 00:46:08,120 --> 00:46:12,950 représentent la négativité et 31 bits pour représenter le nombre. 1115 00:46:12,950 --> 00:46:15,550 D'autres questions? 1116 00:46:15,550 --> 00:46:15,670 Très bien. 1117 00:46:15,670 --> 00:46:16,030 C'est beaucoup. 1118 00:46:16,030 --> 00:46:17,930 Pourquoi ne pas aller de l'avant et de prendre notre pause de cinq minutes ici? 1119 00:46:23,580 --> 00:46:24,270 >> Très bien. 1120 00:46:24,270 --> 00:46:31,250 Encore une fois, de ne pas trop insister sur les applications des mathématiques 1121 00:46:31,250 --> 00:46:33,840 de la programmation, nous allons simplement arracher ce seul exemple 1122 00:46:33,840 --> 00:46:36,590 avant de passer à d'autres constructions, juste parce qu'il 1123 00:46:36,590 --> 00:46:39,430 allons illustrer quelques points habituels d'achoppement sur certains 1124 00:46:39,430 --> 00:46:41,520 les bases quand il s'agit de l'écriture de programmes. 1125 00:46:41,520 --> 00:46:44,360 Dans ce cas, faites expressions arithmétiques qui ont une certaine 1126 00:46:44,360 --> 00:46:48,010 pertinence intéressant de la syntaxe. 1127 00:46:48,010 --> 00:46:50,430 >> Donc, c'est juste une formule avec laquelle nous pouvons convertir 1128 00:46:50,430 --> 00:46:52,690 températures de Fahrenheit à Celsius. 1129 00:46:52,690 --> 00:46:54,600 Si vous ne me souviens pas, c'est juste la formule. 1130 00:46:54,600 --> 00:46:58,870 Donc, si nous brancher Fahrenheit valeur de 32 degrés, ce qui est 1131 00:46:58,870 --> 00:47:02,850 gel, qui va être 32 moins 32 est 0, et en effet, 1132 00:47:02,850 --> 00:47:05,130 0 à Celsius est également congélation. 1133 00:47:05,130 --> 00:47:08,210 Ainsi, la santé mentale vérification rapide là-bas - c'est la formule familière. 1134 00:47:08,210 --> 00:47:10,880 Permettez-moi de passer à l'appareil, cependant, et commencer à 1135 00:47:10,880 --> 00:47:13,920 écrit un programme appelé, comme, f2c; "Fahrenheit 1136 00:47:13,920 --> 00:47:15,920 Celsius point c ". 1137 00:47:15,920 --> 00:47:18,930 Et au sommet ici, je vais commencer avec # include 1138 00:47:18,930 --> 00:47:22,190 stdio.h, et je vais faire int main (void), et 1139 00:47:22,190 --> 00:47:24,680 encore une fois, nous reviendrons à l'avenir à ce que signifie int 1140 00:47:24,680 --> 00:47:26,820 là et ce vide signifie qu'il. 1141 00:47:26,820 --> 00:47:28,770 Et maintenant, laissez-moi aller de l'avant et mettre en œuvre un programme qui 1142 00:47:28,770 --> 00:47:31,170 fait essentiellement cette conversion pour nous. 1143 00:47:31,170 --> 00:47:36,830 >> Donc, printf, disons, de la température en degrés Fahrenheit. 1144 00:47:36,830 --> 00:47:40,140 Et puis, laissez-moi aller de l'avant et obtenir la valeur de l'utilisateur. 1145 00:47:40,140 --> 00:47:43,120 Quelle valeur dois-je obtenir de l'utilisateur, si je veux 1146 00:47:43,120 --> 00:47:45,620 qu'ils me donnent une température en degrés Fahrenheit? 1147 00:47:45,620 --> 00:47:48,090 Ouais? 1148 00:47:48,090 --> 00:47:50,090 Que proposeriez-vous? 1149 00:47:50,090 --> 00:47:50,410 Ouais. 1150 00:47:50,410 --> 00:47:51,960 Donc flotteur se sent assez raisonnable. 1151 00:47:51,960 --> 00:47:53,950 Nous avons, encore une fois, que quelques options que 1152 00:47:53,950 --> 00:47:55,310 nous avons vu jusqu'à présent. 1153 00:47:55,310 --> 00:48:00,100 Nous avons des choses comme char, double, float, int, long terme, 1154 00:48:00,100 --> 00:48:01,150 bool, string. 1155 00:48:01,150 --> 00:48:03,510 Donc, de ce nombre, flotteur se sent assez raisonnable. 1156 00:48:03,510 --> 00:48:06,340 Nous pourrions utiliser un double, à droite, parce que si nous voulons vraiment 1157 00:48:06,340 --> 00:48:07,580 représentent la température d'un être humain - 1158 00:48:07,580 --> 00:48:10,730 98,60000 - 1159 00:48:10,730 --> 00:48:12,990 nous pourrions utiliser 64 bits pour le faire, mais il se sent comme 1160 00:48:12,990 --> 00:48:14,200 exagéré pour la température. 1161 00:48:14,200 --> 00:48:16,380 Alors allons-y avec flotteur. 1162 00:48:16,380 --> 00:48:18,100 Maintenant, j'ai besoin d'une variable. 1163 00:48:18,100 --> 00:48:20,500 Juste pour garder les choses simples, je vais l'appeler f, mais je 1164 00:48:20,500 --> 00:48:23,370 pourrait tout aussi bien l'appeler température, 1165 00:48:23,370 --> 00:48:24,600 mais est soit très bien. 1166 00:48:24,600 --> 00:48:27,610 Donc flotter f = GetFloat. 1167 00:48:27,610 --> 00:48:30,220 Dès que j'ai maintenant décidé d'utiliser GetFloat, cependant, je 1168 00:48:30,220 --> 00:48:33,340 besoin de faire une correction. 1169 00:48:33,340 --> 00:48:33,720 Ouais. 1170 00:48:33,720 --> 00:48:37,460 Nous avons donc besoin de # include , sinon le compilateur est 1171 00:48:37,460 --> 00:48:39,000 va nous crier dessus. 1172 00:48:39,000 --> 00:48:41,720 Maintenant que j'ai un flotteur, laissez-moi aller de l'avant et de faire le 1173 00:48:41,720 --> 00:48:42,460 conversion. 1174 00:48:42,460 --> 00:48:44,980 >> Alors d'abord, permettez-moi de prendre l'habitude ici de 1175 00:48:44,980 --> 00:48:46,310 commenter mon code. 1176 00:48:46,310 --> 00:48:49,820 Encore une fois, un commentaire est juste une notation à l'être humain qui est 1177 00:48:49,820 --> 00:48:52,600 ne fait pas partie du programme en soi, mais l'un, vous aide 1178 00:48:52,600 --> 00:48:55,010 comprendre ce que vous avez fait le lendemain matin, ou le prochain 1179 00:48:55,010 --> 00:48:57,570 mois, il permet à votre adjoint à l'enseignement comprendre ce que vous avez fait 1180 00:48:57,570 --> 00:48:59,230 ou ce que vous aviez l'intention de le faire, il est donc 1181 00:48:59,230 --> 00:49:00,950 pratique généralement très bon. 1182 00:49:00,950 --> 00:49:02,940 Tous les quelques lignes de code, écrire un commentaire 1183 00:49:02,940 --> 00:49:04,490 vous-même ou votre collègue. 1184 00:49:04,490 --> 00:49:08,460 Donc ici, je vais dire: «Demander à l'utilisateur pour la température." 1185 00:49:08,460 --> 00:49:10,890 Ne doit pas être une phrase complète, juste une courte phrase. 1186 00:49:10,890 --> 00:49:14,270 Mais l'idée derrière commenter en C, c'est que chacun de vos 1187 00:49:14,270 --> 00:49:17,980 commentaires devraient vous donner les moyens - ou, disons, un TF ou un collègue - 1188 00:49:17,980 --> 00:49:21,290 de parcourir votre programme et de savoir exactement ce qu'il fait, en ne 1189 00:49:21,290 --> 00:49:24,650 tant la lecture du code, mais en lisant les commentaires, ce qui 1190 00:49:24,650 --> 00:49:26,220 doit être concise et claire. 1191 00:49:26,220 --> 00:49:29,030 Très bien, alors maintenant laissez-moi aller de l'avant et de dire: «Autre 1192 00:49:29,030 --> 00:49:32,660 Fahrenheit en Celsius. "Alors, je vais aller de l'avant et de faire, 1193 00:49:32,660 --> 00:49:34,340 disons, float c. 1194 00:49:34,340 --> 00:49:36,610 Nous vous tiendrons Celsius comme une valeur à virgule flottante. 1195 00:49:36,610 --> 00:49:37,630 >> Et permettez-moi de prendre un coup de couteau à la présente. 1196 00:49:37,630 --> 00:49:40,350 La formule est, encore une fois, ici. 1197 00:49:40,350 --> 00:49:45,510 Comme 9.5 fois F de moins 32. 1198 00:49:45,510 --> 00:49:46,360 Alors allons-y. 1199 00:49:46,360 --> 00:49:50,450 Donc, 5 divisé par 9, moins - 1200 00:49:50,450 --> 00:49:52,330 oups, je l'ai déjà foiré. 1201 00:49:52,330 --> 00:49:53,070 Fois. 1202 00:49:53,070 --> 00:49:56,550 Donc, 9.5 fois moins F 32. 1203 00:49:56,550 --> 00:49:59,650 Donc F moins 32, point-virgule. 1204 00:49:59,650 --> 00:50:02,000 Et maintenant, ici-bas, je vais aller de l'avant 1205 00:50:02,000 --> 00:50:03,220 et dire, imprimez résultat. 1206 00:50:03,220 --> 00:50:05,160 Et cette partie est facile. Printf. 1207 00:50:05,160 --> 00:50:07,980 Comment dois-je faire imprimer ce? 1208 00:50:07,980 --> 00:50:16,890 Eh bien, je pourrais dire "Ce nombre en degrés Celsius est:% f \ n", 1209 00:50:16,890 --> 00:50:18,060 juste pour quelques esthétique. 1210 00:50:18,060 --> 00:50:20,450 Et puis, quelle est la valeur que je veux brancher ici comme le printf 1211 00:50:20,450 --> 00:50:21,360 Le deuxième argument? 1212 00:50:21,360 --> 00:50:21,650 D'accord. 1213 00:50:21,650 --> 00:50:22,540 Il suffit donc de c. 1214 00:50:22,540 --> 00:50:24,760 Nous allons donc commencer avec cela et puis il suffit de retourner 0. 1215 00:50:24,760 --> 00:50:25,960 Encore une fois, cela n'a rien à voir avec les mathématiques. 1216 00:50:25,960 --> 00:50:27,610 Cela signifie simplement que tout va bien. 1217 00:50:27,610 --> 00:50:31,210 >> Maintenant, est-ce correct, ce programme? 1218 00:50:31,210 --> 00:50:31,520 Très bien. 1219 00:50:31,520 --> 00:50:33,630 Donc j'ai fait quelques erreurs. 1220 00:50:33,630 --> 00:50:35,980 Même si vous n'avez aucune idée de ce que la programmation est, vous pouvez trier 1221 00:50:35,980 --> 00:50:37,120 de retour à l'école primaire en déduire ce que l' 1222 00:50:37,120 --> 00:50:38,740 erreurs ici peut-être. 1223 00:50:38,740 --> 00:50:40,050 Quel est l'un des premiers? 1224 00:50:40,050 --> 00:50:41,256 PUBLIC: [Inaudible] 1225 00:50:41,256 --> 00:50:41,660 DAVID J. MALAN: Ouais. 1226 00:50:41,660 --> 00:50:42,940 Donc, il nous manque des parenthèses. 1227 00:50:42,940 --> 00:50:45,420 C'était délibéré que j'ai fait entre parenthèses dans le discours 1228 00:50:45,420 --> 00:50:48,130 glisser ici, car il ya en fait cette notion d'ordre 1229 00:50:48,130 --> 00:50:51,590 des opérations, ou de préséance, par lequel certaines opérations - 1230 00:50:51,590 --> 00:50:52,890 multiplication - 1231 00:50:52,890 --> 00:50:56,000 ont plus contraignant, ont une priorité plus élevée, que les choses 1232 00:50:56,000 --> 00:50:58,050 comme l'addition ou la soustraction. 1233 00:50:58,050 --> 00:51:00,550 Donc, nous avons fait cela pendant des années juste pour préciser exactement 1234 00:51:00,550 --> 00:51:02,840 quelle opération mathématique doit être fait en premier. 1235 00:51:02,840 --> 00:51:05,010 Donc, je devrais sans doute imiter exactement cela. 1236 00:51:05,010 --> 00:51:08,990 Sinon, l'ordinateur est sans doute va essayer de faire 1237 00:51:08,990 --> 00:51:13,090 quelque chose comme fracture 5 par 9, puis multipliez F, puis soustraire 1238 00:51:13,090 --> 00:51:14,850 32 à partir de l'ensemble. 1239 00:51:14,850 --> 00:51:16,480 Ce qui n'est pas, en fait, ce que nous voulons faire. 1240 00:51:16,480 --> 00:51:17,340 Donc, nous allons parenthèses. 1241 00:51:17,340 --> 00:51:20,860 Ajoutons entre parenthèses mes ici, les parenthèses ici. 1242 00:51:20,860 --> 00:51:22,670 Mettons cela ici. 1243 00:51:22,670 --> 00:51:25,130 Ici, je viens de remarquer une autre erreur que j'ai faite le long du chemin. 1244 00:51:25,130 --> 00:51:25,680 Ouais? 1245 00:51:25,680 --> 00:51:26,930 PUBLIC: [Inaudible] 1246 00:51:29,632 --> 00:51:30,130 >> DAVID J. MALAN: Ah. 1247 00:51:30,130 --> 00:51:30,470 Bon. 1248 00:51:30,470 --> 00:51:32,400 Donc, nous avons effectivement le même entier 1249 00:51:32,400 --> 00:51:34,020 question de la division d'avant. 1250 00:51:34,020 --> 00:51:35,800 Je corriger cela, nous allons voir ce que le symptôme est. 1251 00:51:35,800 --> 00:51:36,990 Mais nous allons devoir corriger une 1252 00:51:36,990 --> 00:51:37,680 autre erreur ici. 1253 00:51:37,680 --> 00:51:38,015 Ouais? 1254 00:51:38,015 --> 00:51:39,540 PUBLIC: [Inaudible] 1255 00:51:39,540 --> 00:51:40,070 DAVID J. MALAN: Oui. 1256 00:51:40,070 --> 00:51:43,130 Donc, j'ai fait erreur stupide, mais extrêmement important. 1257 00:51:43,130 --> 00:51:45,870 L'ordinateur ne va pas tout simplement fermer les yeux et laisser 1258 00:51:45,870 --> 00:51:48,770 m'utiliser F majuscule, quand j'ai effectivement déclaré la variable 1259 00:51:48,770 --> 00:51:51,360 comme un f minuscule ici, à la ligne 8. 1260 00:51:51,360 --> 00:51:54,470 J'ai donc besoin de corriger la ligne 11 mon capitalisation, ce qui a 1261 00:51:54,470 --> 00:51:56,820 l'heure était un F majuscule par erreur. 1262 00:51:56,820 --> 00:51:57,610 Qu'en est-il ici? 1263 00:51:57,610 --> 00:51:59,980 Si tel est minuscule aussi? 1264 00:51:59,980 --> 00:52:02,260 Il devrait être, mais c'est une coïncidence. 1265 00:52:02,260 --> 00:52:05,070 Que f% n'a rien à voir avec la variable. 1266 00:52:05,070 --> 00:52:07,980 Donc, juste pour être super clair ici, laissez-moi aller de l'avant et 1267 00:52:07,980 --> 00:52:10,710 renommer ce, en bref, "la température". Permettez-moi de renommer 1268 00:52:10,710 --> 00:52:15,050 cette "température". Permettez-moi de ne pas renommer ce. 1269 00:52:15,050 --> 00:52:18,180 Parce que, encore une fois, f% signifie globalement, "flottant valeur du point." 1270 00:52:18,180 --> 00:52:19,950 N'a rien à voir avec ma variable. 1271 00:52:19,950 --> 00:52:23,080 Mais «température» dans tous les sens est un peu verbeux, 1272 00:52:23,080 --> 00:52:25,370 donc je vais retourner dans mon minuscule «f» s. 1273 00:52:25,370 --> 00:52:27,890 >> Maintenant, laissez-moi aller de l'avant vers le bas de ma fenêtre ici. 1274 00:52:27,890 --> 00:52:29,190 Assurez-f2c - 1275 00:52:29,190 --> 00:52:31,200 qui était, encore une fois, le nom arbitraire que je 1276 00:52:31,200 --> 00:52:32,590 a donné à ce fichier. 1277 00:52:32,590 --> 00:52:33,690 Semble avoir compilé. 1278 00:52:33,690 --> 00:52:35,080 Permettez-moi de lancer f2c. 1279 00:52:35,080 --> 00:52:35,780 Entrée. 1280 00:52:35,780 --> 00:52:37,786 Température en degrés Fahrenheit - faisons une tâche facile. 1281 00:52:37,786 --> 00:52:39,370 32. 1282 00:52:39,370 --> 00:52:40,910 OK, c'est exact. 1283 00:52:40,910 --> 00:52:45,910 Mais, si je fais maintenant 212 pour bouillante - 1284 00:52:45,910 --> 00:52:46,630 putain. 1285 00:52:46,630 --> 00:52:47,030 Très bien. 1286 00:52:47,030 --> 00:52:50,780 Donc, clairement pas corriger, si votre tente TF 1287 00:52:50,780 --> 00:52:51,800 au moins deux valeurs. 1288 00:52:51,800 --> 00:52:53,340 Alors, quel est le problème ici? 1289 00:52:53,340 --> 00:52:55,970 Eh bien, vous avez déjà mis le doigt sur la nature du problème. 1290 00:52:55,970 --> 00:52:57,600 Mais pourquoi est-ce le cas? 1291 00:52:57,600 --> 00:53:00,630 Là-haut, quand je fais le calcul de 5 divisé par 9. 1292 00:53:00,630 --> 00:53:02,190 Donc, théoriquement, c'est tout à fait correct. 1293 00:53:02,190 --> 00:53:03,690 Totalement compatible avec la formule. 1294 00:53:03,690 --> 00:53:05,940 Mais les ordinateurs ne font précisément ce que vous 1295 00:53:05,940 --> 00:53:06,760 leur dire de faire. 1296 00:53:06,760 --> 00:53:08,940 Et ce que nous disent efficacement l'ordinateur est ici 1297 00:53:08,940 --> 00:53:12,320 diviser l'entier 5 par le 9 entier 1298 00:53:12,320 --> 00:53:13,670 et me donner le résultat. 1299 00:53:13,670 --> 00:53:16,230 Le problème est, cependant, si vous n'avez division à l'aide de données 1300 00:53:16,230 --> 00:53:20,220 types, la sortie est du même type que les entrées de données. 1301 00:53:20,220 --> 00:53:23,670 Et si les deux entrées sont deux entiers, la sortie va 1302 00:53:23,670 --> 00:53:25,110 d'être un int. 1303 00:53:25,110 --> 00:53:28,770 Et ainsi de 5 divisé par 9 est quelque chose de point. 1304 00:53:28,770 --> 00:53:32,320 Mais quel est l'entier le plus proche pour signaler quelque chose? 1305 00:53:32,320 --> 00:53:33,630 Donc, c'est en fait 0. 1306 00:53:33,630 --> 00:53:36,620 Donc, comme nous en avons discuté, lundi, tout ce qui suit la virgule 1307 00:53:36,620 --> 00:53:37,940 point de est tronqué. 1308 00:53:37,940 --> 00:53:39,495 Il obtient juste jeté. 1309 00:53:39,495 --> 00:53:42,760 Donc, c'est une erreur complète, parce que je pourrais tout aussi bien 1310 00:53:42,760 --> 00:53:44,700 multiplier par 0 tout ici. 1311 00:53:44,700 --> 00:53:46,550 >> Maintenant, je peux résoudre ce problème dans un couple des manières. 1312 00:53:46,550 --> 00:53:48,080 Je pourrais le faire. 1313 00:53:48,080 --> 00:53:50,490 5,0 divisé par 9,0. 1314 00:53:50,490 --> 00:53:52,110 Techniquement, je n'ai même pas besoin de le faire. 1315 00:53:52,110 --> 00:53:55,780 Il ne suffit pas de faire juste l'un des numéros un flotteur - 1316 00:53:55,780 --> 00:53:58,290 ou double - en mettant la virgule ici. 1317 00:53:58,290 --> 00:54:01,740 Parce que ce qui se passe maintenant, c'est quand on divise un entier par 1318 00:54:01,740 --> 00:54:04,670 un flotteur ou un double, l'ordinateur va réaliser 1319 00:54:04,670 --> 00:54:06,830 oh, un de ceux qui est plus précis. 1320 00:54:06,830 --> 00:54:09,420 Permettez-moi de pécher par excès de vous donner plus de précision que 1321 00:54:09,420 --> 00:54:10,310 vous aviez l'intention. 1322 00:54:10,310 --> 00:54:12,700 Donc, il va convertir le résultat - 1323 00:54:12,700 --> 00:54:16,240 elle retourne le résultat sous forme de valeur à virgule flottante ainsi. 1324 00:54:16,240 --> 00:54:17,330 Alors que cela fonctionnerait. 1325 00:54:17,330 --> 00:54:18,060 Ce serait travailler. 1326 00:54:18,060 --> 00:54:20,010 Et il ya un autre mécanisme que nous allons voir dans 1327 00:54:20,010 --> 00:54:21,390 plus en détail la semaine prochaine. 1328 00:54:21,390 --> 00:54:24,690 Vous pouvez réellement, en tant que programmeur, indiquer à l'ordinateur 1329 00:54:24,690 --> 00:54:27,930 à traiter réellement un type de données que 1330 00:54:27,930 --> 00:54:29,260 s'il s'agissait d'une autre. 1331 00:54:29,260 --> 00:54:30,990 >> Donc, je pouvais le faire. 1332 00:54:30,990 --> 00:54:35,280 Entre parenthèses, je peux dire quelque chose comme (float), ouvert 1333 00:54:35,280 --> 00:54:36,350 parenthèse, parenthèse ouvrante. 1334 00:54:36,350 --> 00:54:39,050 Et c'est ce qu'on appelle "casting". Encore une fois, plus 1335 00:54:39,050 --> 00:54:39,940 sur la semaine prochaine. 1336 00:54:39,940 --> 00:54:42,280 Mais ce n'est que le moyen de programmation de dire 1337 00:54:42,280 --> 00:54:45,910 l'ordinateur, ouais je sais 9 est un entier ou un long. 1338 00:54:45,910 --> 00:54:47,700 Je sais que ce n'est pas une valeur en virgule flottante. 1339 00:54:47,700 --> 00:54:49,420 Mais le traiter comme tel en tout cas. 1340 00:54:49,420 --> 00:54:52,000 Donc, pour jeter un type de données des moyens pour convertir 1341 00:54:52,000 --> 00:54:53,310 de l'un à l'autre. 1342 00:54:53,310 --> 00:54:55,790 Franchement, c'est un peu moche, donc je propose que nous aller 1343 00:54:55,790 --> 00:54:58,830 sauvegarder à la proposition initiale de la conversion de tout 1344 00:54:58,830 --> 00:55:00,770 ces choses à virgule flottante manuellement. 1345 00:55:00,770 --> 00:55:02,890 Parce que maintenant c'est juste super clair ce qui se passe, et 1346 00:55:02,890 --> 00:55:04,280 ce n'est pas tout ce qui distrait. 1347 00:55:04,280 --> 00:55:06,710 >> Donc, nous allons maintenant retourner dans ma fenêtre de terminal. 1348 00:55:06,710 --> 00:55:07,990 Assurez-f2c. 1349 00:55:07,990 --> 00:55:09,430 Laissez-moi aller de l'avant et de lancer ça. 1350 00:55:09,430 --> 00:55:12,340 Et, soit dit en passant, on s'ennuie tapant ces commandes 1351 00:55:12,340 --> 00:55:14,910 encore et encore, se rendre compte que les ordinateurs, comme Linux ici, 1352 00:55:14,910 --> 00:55:16,010 ont tendance à être très intelligent. 1353 00:55:16,010 --> 00:55:18,890 Et si je frappe le haut, on peut passer par toute mon histoire d' 1354 00:55:18,890 --> 00:55:20,380 commandes, Haut et Bas. 1355 00:55:20,380 --> 00:55:23,840 Donc, dans ce cas-ci, je peux simplement aller jusqu'à lancer make f2c. 1356 00:55:23,840 --> 00:55:25,830 Je me fais engueuler parce que je viens de faire ce que il ya une seconde. 1357 00:55:25,830 --> 00:55:27,030 Il est déjà à jour. 1358 00:55:27,030 --> 00:55:30,720 Alors maintenant, je peux courir f2c nouveau. 1359 00:55:30,720 --> 00:55:33,260 Essayons 32, Fahrenheit. 1360 00:55:33,260 --> 00:55:36,720 Maintenant, essayons de 212 degrés Fahrenheit. 1361 00:55:36,720 --> 00:55:37,250 >> Ouf. 1362 00:55:37,250 --> 00:55:38,250 Semble fonctionner. 1363 00:55:38,250 --> 00:55:41,760 Maintenant, c'est bon, mais il se sent un peu arbitraire 1364 00:55:41,760 --> 00:55:44,890 Je montrant six chiffres après la virgule. 1365 00:55:44,890 --> 00:55:45,070 Pas vrai? 1366 00:55:45,070 --> 00:55:47,830 Si vous êtes la personne la météo à la télévision, vous êtes une sorte de crétin 1367 00:55:47,830 --> 00:55:49,150 si vous lisez la température à 1368 00:55:49,150 --> 00:55:50,070 ce degré de précision. 1369 00:55:50,070 --> 00:55:51,270 Donc, nous allons simplifier cela. 1370 00:55:51,270 --> 00:55:53,880 Donc, nous allons effectivement aller ici, à mon printf. 1371 00:55:53,880 --> 00:55:55,490 Et ouais, je tiens à flotter. 1372 00:55:55,490 --> 00:55:57,570 Mais je veux maintenant spécifier la précision. 1373 00:55:57,570 --> 00:55:59,070 Et je vais être un peu succinct. 1374 00:55:59,070 --> 00:56:03,090 Je vais vous dire, donnez-moi un point après la virgule. 1375 00:56:03,090 --> 00:56:07,590 Ainsi, plutôt que de dire f%, je vais dire% .1 f. 1376 00:56:07,590 --> 00:56:09,760 Et cela signifie juste me donner une position 1377 00:56:09,760 --> 00:56:11,410 après la virgule. 1378 00:56:11,410 --> 00:56:11,700 Très bien. 1379 00:56:11,700 --> 00:56:12,570 Essayons encore une fois. 1380 00:56:12,570 --> 00:56:15,590 Permettez-moi de ré-exécuter l'après compilation. 1381 00:56:15,590 --> 00:56:18,160 Et maintenant, je tape 32, et je serai de retour d'un 1382 00:56:18,160 --> 00:56:19,310 valeur plus succinct. 1383 00:56:19,310 --> 00:56:22,480 Et je peux taper, désormais, 212, et obtenir un plus succincte 1384 00:56:22,480 --> 00:56:23,260 valeur aussi bien. 1385 00:56:23,260 --> 00:56:25,190 Et il ya d'autres choses que vous pouvez faire avec printf. 1386 00:56:25,190 --> 00:56:27,950 Vous pouvez réellement spécifier la largeur du nombre doit être. 1387 00:56:27,950 --> 00:56:30,900 Si vous voulez un rembourrage sur elle, de sorte que vous pouvez d'ores-align ou 1388 00:56:30,900 --> 00:56:32,360 gauche aligner l'ensemble de vos numéros ou 1389 00:56:32,360 --> 00:56:33,400 essayez de choses du centre. 1390 00:56:33,400 --> 00:56:35,340 Alors rends compte qu'il ya des petits trucs que vous pouvez faire là-bas. 1391 00:56:35,340 --> 00:56:38,420 Mais ils se résument à des codes de format, 1392 00:56:38,420 --> 00:56:39,600 comme nous avons là-bas. 1393 00:56:39,600 --> 00:56:41,090 >> Donc, en termes de cette question de préséance. 1394 00:56:41,090 --> 00:56:43,820 Il s'agit d'un tableau très ennuyeux de passer par méthodiquement. 1395 00:56:43,820 --> 00:56:46,780 Mais se rendre compte que les auteurs de C ont mis au point le 1396 00:56:46,780 --> 00:56:50,190 règles qui spécifient les opérateurs ont une plus grande 1397 00:56:50,190 --> 00:56:53,680 priorité, la puissance plus contraignant que d'autres. 1398 00:56:53,680 --> 00:56:55,890 Ainsi, alors que l'école primaire, nous avons généralement savais que c'était 1399 00:56:55,890 --> 00:56:58,930 multiplication et la division, puis addition et la soustraction, 1400 00:56:58,930 --> 00:56:59,950 puis quelques autres trucs. 1401 00:56:59,950 --> 00:57:01,720 Dans un monde de la programmation, il ya une grande 1402 00:57:01,720 --> 00:57:03,360 longue liste de choses. 1403 00:57:03,360 --> 00:57:05,150 Et ce n'est pas quelque chose d'intéressant mémoriser maintenant. 1404 00:57:05,150 --> 00:57:07,310 Vous s'acclimater à elle avant longtemps. 1405 00:57:07,310 --> 00:57:10,690 Mais tout comme à l'école primaire, entre parenthèses généralement résoudre 1406 00:57:10,690 --> 00:57:12,990 les questions de préséance, en faisant super clair à l' 1407 00:57:12,990 --> 00:57:15,620 ordinateur et humaine aussi bien ce qui est prévu. 1408 00:57:15,620 --> 00:57:17,770 Considérons donc ce juste une feuille de triche peu là. 1409 00:57:17,770 --> 00:57:21,690 Mais la plupart de ces détails que nous n'arriverons pas à un certain temps. 1410 00:57:21,690 --> 00:57:21,900 >> Très bien. 1411 00:57:21,900 --> 00:57:24,120 Maintenant, nous allons mettre en place et de s'éloigner de ces petites bête 1412 00:57:24,120 --> 00:57:25,460 exemples mathématiques. 1413 00:57:25,460 --> 00:57:27,500 Toujours utiliser les mêmes principes, mais commencer 1414 00:57:27,500 --> 00:57:29,960 nous exprimer un peu plus comme Scratch. 1415 00:57:29,960 --> 00:57:31,660 Ainsi, dans Scratch, nous avons eu ces expressions booléennes. 1416 00:57:31,660 --> 00:57:34,890 Et en anglais, une expression booléenne, c'est quoi? 1417 00:57:34,890 --> 00:57:35,580 Vrai ou faux. 1418 00:57:35,580 --> 00:57:38,300 C'est quelque chose qui renvoie true ou false. 1419 00:57:38,300 --> 00:57:39,060 1 ou 0. 1420 00:57:39,060 --> 00:57:39,870 Sous ou hors tension. 1421 00:57:39,870 --> 00:57:41,000 Tout ce que vous voulez l'appeler. 1422 00:57:41,000 --> 00:57:43,210 Maintenant dans Scratch, les pièces du puzzle ressemblait à ceci. 1423 00:57:43,210 --> 00:57:45,850 Et c'est la combinaison, sur le fond là-bas, de trois 1424 00:57:45,850 --> 00:57:47,980 des pièces de puzzle. 1425 00:57:47,980 --> 00:57:48,980 Un concert - 1426 00:57:48,980 --> 00:57:51,710 quelque chose qui n'a vierge et vierge. 1427 00:57:51,710 --> 00:57:53,970 Et puis deux expressions booléennes à l'intérieur de celui-ci. 1428 00:57:53,970 --> 00:57:56,460 Ainsi, vous pouvez imbriquer des expressions booléennes pour obtenir plus d' 1429 00:57:56,460 --> 00:57:59,360 compliqué expressions booléennes. 1430 00:57:59,360 --> 00:58:03,930 Par exemple, si c'est samedi, et il est agréable 1431 00:58:03,930 --> 00:58:06,180 temps, puis aller à l'extérieur. 1432 00:58:06,180 --> 00:58:07,500 Ou quelque chose d'arbitraire comme ça. 1433 00:58:07,500 --> 00:58:10,090 Ainsi, vous pouvez rejoindre les expressions booléennes pour arriver à un 1434 00:58:10,090 --> 00:58:12,780 valeur plus grande vérité, dont la réponse est basée 1435 00:58:12,780 --> 00:58:13,800 sur les plus petites. 1436 00:58:13,800 --> 00:58:15,770 >> Maintenant, en C, heureusement, cette application est 1437 00:58:15,770 --> 00:58:16,720 en fait assez simple. 1438 00:58:16,720 --> 00:58:18,820 Parenthèses aider à clarifier les choses ici. 1439 00:58:18,820 --> 00:58:21,700 && C'est ce que signifie «et». C'est comme ça que 1440 00:58:21,700 --> 00:58:24,700 nous allons convertir ces blocs à partir de zéro à C. 1441 00:58:24,700 --> 00:58:27,590 Et pour les conditions que nous avons vu dans Scratch, sur la main gauche 1442 00:58:27,590 --> 00:58:31,150 côté là, je peux même les empiler en C. Si x est inférieur 1443 00:58:31,150 --> 00:58:32,970 à y, puis le faire. 1444 00:58:32,970 --> 00:58:35,100 Sinon, si x est supérieur à y, puis le faire. 1445 00:58:35,100 --> 00:58:38,030 Sinon logiquement, ils doivent être égaux, disent 1446 00:58:38,030 --> 00:58:39,140 qu'ils sont égaux. 1447 00:58:39,140 --> 00:58:41,210 Ainsi, nous pouvons maintenant commencer à construire ces choses. 1448 00:58:41,210 --> 00:58:42,170 >> Alors, faisons un exemple. 1449 00:58:42,170 --> 00:58:45,550 Permettez-moi d'ouvrir un fichier qui se trouve sur le site Web du cours qui 1450 00:58:45,550 --> 00:58:47,270 J'ai écrit à l'avance. 1451 00:58:47,270 --> 00:58:50,540 C'est ce qu'on appelle nonswitch.c. 1452 00:58:50,540 --> 00:58:52,270 Et nous verrons pourquoi dans un instant. 1453 00:58:52,270 --> 00:58:54,770 Donc, dans ce fichier - nonswitch.c-- 1454 00:58:54,770 --> 00:58:56,830 d'abord prendre conscience qu'il ya un tas de 1455 00:58:56,830 --> 00:58:58,460 commentaires au début. 1456 00:58:58,460 --> 00:59:00,110 C'est juste expliquer le nom du fichier, ce qu'il 1457 00:59:00,110 --> 00:59:01,260 t, et ainsi de suite. 1458 00:59:01,260 --> 00:59:04,390 Et il démontre apparemment l'utilisation de booléen ET-tion - 1459 00:59:04,390 --> 00:59:06,220 conjoindre deux expressions. 1460 00:59:06,220 --> 00:59:07,670 >> Donc, nous allons voir comment fonctionne ce programme. 1461 00:59:07,670 --> 00:59:10,840 Je inclure mes deux fichiers, cs50.h et stdio.h. 1462 00:59:10,840 --> 00:59:13,180 Si je défiler vers le bas, maintenant, pour le programme, c'est un peu plus 1463 00:59:13,180 --> 00:59:15,730 que nous avons écrit précédemment, mais assez lisible. 1464 00:59:15,730 --> 00:59:18,360 J'ai donc d'abord imprimer à l'utilisateur, à la ligne 18, 1465 00:59:18,360 --> 00:59:20,460 «Donnez-moi un entier compris entre 1 et 10." Si 1466 00:59:20,460 --> 00:59:21,530 Il ya tout ici. 1467 00:59:21,530 --> 00:59:23,410 Maintenant, je reçois l'entier. 1468 00:59:23,410 --> 00:59:25,380 Mais n'oubliez pas que getInt - assez simple. 1469 00:59:25,380 --> 00:59:26,510 Il va juste pour obtenir un int. 1470 00:59:26,510 --> 00:59:28,830 Il va s'assurer qu'il ne obtenir un int et non pas un 1471 00:59:28,830 --> 00:59:30,060 chaîne ou un flotteur. 1472 00:59:30,060 --> 00:59:32,390 Mais ça ne va pas faire n'importe quel type de vérifications de limites. 1473 00:59:32,390 --> 00:59:34,750 Il ne va pas filtrer les numéros se situer entre un 1474 00:59:34,750 --> 00:59:35,630 certaine plage. 1475 00:59:35,630 --> 00:59:37,730 Nous devons donc mettre en place nous-mêmes. 1476 00:59:37,730 --> 00:59:40,680 Ainsi, tout comme dans Scratch, où je pouvais faire une conjonction de 1477 00:59:40,680 --> 00:59:43,560 deux expressions, je peux le faire en C comme suit. 1478 00:59:43,560 --> 00:59:48,660 Si n est supérieur ou égal à 1, et n est inférieur à et 1479 00:59:48,660 --> 00:59:52,220 ou égal à 3, je vais très arbitrairement arrêté que 1480 00:59:52,220 --> 00:59:53,830 nombre à un petit nombre. 1481 00:59:53,830 --> 00:59:56,730 Juste pour le plaisir d'une déclaration. 1482 00:59:56,730 --> 01:00:00,210 Sinon, si n est compris entre 4 et 6, print "Vous avez choisi un support 1483 01:00:00,210 --> 01:00:03,440 nombre. "Sinon, si n est compris entre 7 et 10, print" Vous avez choisi une 1484 01:00:03,440 --> 01:00:06,390 grand nombre. "else print" Vous choisissez un numéro non valide. " 1485 01:00:06,390 --> 01:00:07,900 Parce que logiquement, qui suit si nous avons 1486 01:00:07,900 --> 01:00:09,230 épuisé notre gamme. 1487 01:00:09,230 --> 01:00:12,400 >> Donc sais que ce n'est pas tout à fait la façon dont nous écrivons supérieur ou 1488 01:00:12,400 --> 01:00:15,000 égale à une classe de mathématiques. 1489 01:00:15,000 --> 01:00:15,160 Pas vrai? 1490 01:00:15,160 --> 01:00:17,430 En général, vous le dessiner comme ça, avec la ligne en dessous. 1491 01:00:17,430 --> 01:00:19,250 Mais il n'existe aucune clef sur mon clavier. 1492 01:00:19,250 --> 01:00:22,390 Ainsi, le symbole C pour exprimer supérieure ou 1493 01:00:22,390 --> 01:00:25,770 est égal à deux caractères, et le symbole de moins de 1494 01:00:25,770 --> 01:00:29,100 ou est égale à deux caractères de même. 1495 01:00:29,100 --> 01:00:29,330 Très bien. 1496 01:00:29,330 --> 01:00:31,910 Donc, si je lance ce programme, vous pouvez probablement le deviner ce que c'est 1497 01:00:31,910 --> 01:00:32,650 va faire. 1498 01:00:32,650 --> 01:00:36,180 Si je vais de l'avant et faire nonswitch, Entrée. 1499 01:00:36,180 --> 01:00:38,130 Et puis exécutez nonswitch. 1500 01:00:38,130 --> 01:00:39,530 Donnez-moi un chiffre entre 1 et 10. 1501 01:00:39,530 --> 01:00:40,870 Je vais lui donner 11. 1502 01:00:40,870 --> 01:00:42,280 J'ai pris un nombre non valide. 1503 01:00:42,280 --> 01:00:44,090 Je vais essayer le numéro 3. 1504 01:00:44,090 --> 01:00:45,990 J'ai choisi un petit nombre. 1505 01:00:45,990 --> 01:00:48,360 Donc, il ya assez simple. 1506 01:00:48,360 --> 01:00:52,230 >> Que faire si je veux changer le comportement de ce programme et 1507 01:00:52,230 --> 01:00:54,250 faire quelque chose d'un peu différent à la place? 1508 01:00:54,250 --> 01:00:57,620 Permettez-moi aller de l'avant et de dire ceci. 1509 01:00:57,620 --> 01:00:59,480 Permettez-moi de vous débarrasser de tout cela. 1510 01:00:59,480 --> 01:01:03,780 Et laissez-moi vous dire if (n == 42). 1511 01:01:03,780 --> 01:01:08,730 Et puis je vais aller de l'avant et de dire print "Vous avez choisi le 1512 01:01:08,730 --> 01:01:16,340 bonne réponse. "Sinon, nous allons aller de l'avant et de dire, 1513 01:01:16,340 --> 01:01:18,460 printf ("Vous avez choisi le 1514 01:01:18,460 --> 01:01:21,170 mauvaise réponse »);. Okay. 1515 01:01:21,170 --> 01:01:22,040 Juste parce que. 1516 01:01:22,040 --> 01:01:23,890 >> Maintenant, quelques points nous pouvons faire ici. 1517 01:01:23,890 --> 01:01:26,570 D'abord, je n'ai pas taper le symbole que vous pensez est le 1518 01:01:26,570 --> 01:01:27,390 plus raisonnable. 1519 01:01:27,390 --> 01:01:30,110 Lorsque je veux vérifier l'égalité, s'avère que vous n'utilisez pas le 1520 01:01:30,110 --> 01:01:30,910 signe égal. 1521 01:01:30,910 --> 01:01:34,000 Vous utilisez plutôt le signe égal égale. 1522 01:01:34,000 --> 01:01:36,440 Et pourquoi cela pourrait-il être, juste intuitivement? 1523 01:01:36,440 --> 01:01:37,030 Ouais. 1524 01:01:37,030 --> 01:01:39,330 PUBLIC: [Inaudible] 1525 01:01:39,330 --> 01:01:39,615 DAVID J. MALAN: C'est exact. 1526 01:01:39,615 --> 01:01:41,630 Le signe égal est déjà utilisé pour l'affectation. 1527 01:01:41,630 --> 01:01:43,020 Quelqu'un n'a pas vraiment y réfléchir. 1528 01:01:43,020 --> 01:01:45,820 Et maintenant, quand il s'agit de tests de l'égalité, nous devons 1529 01:01:45,820 --> 01:01:48,850 être plus explicite, et dire égal à égal. 1530 01:01:48,850 --> 01:01:52,110 Une erreur très commune est de le faire. 1531 01:01:52,110 --> 01:01:54,800 Et si, dans les heures de bureau ou la semaine prochaine ou parfois dans le 1532 01:01:54,800 --> 01:01:58,340 cours des deux prochaines semaines, vous faire quelque chose comme ça, et puis 1533 01:01:58,340 --> 01:02:00,920 lutter avec elle pendant 10 à 20 minutes à essayer de comprendre 1534 01:02:00,920 --> 01:02:03,330 ce que le bug est foutu, sachez que vous êtes un de ceux 1535 01:02:03,330 --> 01:02:04,470 gens qui ont fait cette erreur. 1536 01:02:04,470 --> 01:02:06,030 Donc, super facile à faire. 1537 01:02:06,030 --> 01:02:08,240 Mais l'objectif est maintenant de parer à cette erreur. 1538 01:02:08,240 --> 01:02:11,840 Cela pourrait évaluer, parce que ce qui est-ce vraiment dire? 1539 01:02:11,840 --> 01:02:15,010 Si n obtient 42. 1540 01:02:15,010 --> 01:02:18,250 Donc, les gens utilisent des verbes, verbalement, pour exprimer la 1541 01:02:18,250 --> 01:02:21,800 notion d'affectation est "reçoit". Donc, si n obtient 42. 1542 01:02:21,800 --> 01:02:24,060 Cela signifie donc que 42 à assigner n. 1543 01:02:24,060 --> 01:02:26,250 Maintenant, j'ai une expression booléenne entre parenthèses, 1544 01:02:26,250 --> 01:02:30,230 à l'intérieur de cette condition, la valeur de ce qui est 42. 1545 01:02:30,230 --> 01:02:30,390 Pas vrai? 1546 01:02:30,390 --> 01:02:32,690 Parce que si vous l'évaluer à partir de l'intérieur dehors, le total 1547 01:02:32,690 --> 01:02:34,100 réponse, maintenant, est de 42. 1548 01:02:34,100 --> 01:02:37,360 >> Donc, si je vous pose la question, "si (42),« ce qui est 1549 01:02:37,360 --> 01:02:38,410 que dit vraiment? 1550 01:02:38,410 --> 01:02:40,990 Eh bien, les expressions booléennes ne peut être vraie ou fausse. 1551 01:02:40,990 --> 01:02:42,010 1 ou 0. 1552 01:02:42,010 --> 01:02:43,010 Sous ou hors tension. 1553 01:02:43,010 --> 01:02:45,240 Donc, il semble que nous avons un cas coin ici, où tout d'un 1554 01:02:45,240 --> 01:02:50,060 Soudain, je dis "si (42)". Ce n'est pas une valeur booléenne. 1555 01:02:50,060 --> 01:02:54,500 Alors que les ordinateurs font, cependant, est qu'il confond pour l'essentiel 1556 01:02:54,500 --> 01:02:58,620 tout ce qui n'est pas égale à 0 est interprétée comme étant vrai. 1557 01:02:58,620 --> 01:02:59,340 1. 1558 01:02:59,340 --> 01:02:59,690 Sur. 1559 01:02:59,690 --> 01:03:01,510 Ils sont tous fonctionnellement équivalents. 1560 01:03:01,510 --> 01:03:05,070 Seule la valeur 0, ou le mot-clé faux, comme nous allons 1561 01:03:05,070 --> 01:03:07,860 finalement le voir, est faux. 1562 01:03:07,860 --> 01:03:15,040 Ainsi, «si (42)" serait en fait vrai, car il est non-nul. 1563 01:03:15,040 --> 01:03:18,620 Donc, pour être plus précis ici, une valeur booléenne n'est vraiment pas si 1564 01:03:18,620 --> 01:03:20,680 bien vraie ou fausse, mais pour ce 1565 01:03:20,680 --> 01:03:24,650 cas, si la valeur 0 ou différent de zéro. 1566 01:03:24,650 --> 01:03:26,330 Alors faux ou pas faux. 1567 01:03:26,330 --> 01:03:28,640 Et cela nous permet d'englober autant plus 1568 01:03:28,640 --> 01:03:30,980 possibilités dans l'expression entre parenthèses. 1569 01:03:30,980 --> 01:03:33,840 Il nous faut donc, bien que très prudemment, dis - 1570 01:03:33,840 --> 01:03:35,620 if (n == 42). 1571 01:03:35,620 --> 01:03:39,100 Tout simplement parce que nous avons besoin de spécifier un test d'égalité, 1572 01:03:39,100 --> 01:03:40,930 pas une affectation d'une valeur. 1573 01:03:40,930 --> 01:03:42,830 >> Que vaut la peine de noter ici? 1574 01:03:42,830 --> 01:03:46,030 Ces accolades sont en fait pas nécessaire. 1575 01:03:46,030 --> 01:03:48,650 Je les ai fait juste pour être tatillon ici. 1576 01:03:48,650 --> 01:03:51,350 Mais quand vous avez une condition qui ne dispose que d'une seule ligne de 1577 01:03:51,350 --> 01:03:55,100 code, par souci de commodité, les programmeurs n'ont pas besoin d'utiliser 1578 01:03:55,100 --> 01:03:56,030 les accolades. 1579 01:03:56,030 --> 01:03:59,370 Il suffit juste tiret, pour des raisons esthétiques, et 1580 01:03:59,370 --> 01:04:01,050 puis rédigez votre ligne de code. 1581 01:04:01,050 --> 01:04:04,160 Ce n'est que lorsque vous voulez écrire deux lignes de code - pour 1582 01:04:04,160 --> 01:04:08,230 Par exemple, else printf ("Bye!"). Si vous voulez faire 1583 01:04:08,230 --> 01:04:09,540 que, ce n'est rompu. 1584 01:04:09,540 --> 01:04:11,700 Vous pouvez mettre en retrait tout ce que vous voulez, mais le fait que vous avez 1585 01:04:11,700 --> 01:04:14,600 tapé deux lignes de code sans utiliser des accolades 1586 01:04:14,600 --> 01:04:16,860 moyen que ce programme fonctionne pas correctement ou pourrait 1587 01:04:16,860 --> 01:04:18,530 même pas compiler correctement. 1588 01:04:18,530 --> 01:04:21,040 Donc pour l'instant, pour être honnête, je pense que la meilleure habitude est simplement 1589 01:04:21,040 --> 01:04:24,460 utiliser les accolades, et vous verrez qu'ils font 1590 01:04:24,460 --> 01:04:25,750 super clair ce qui se passe. 1591 01:04:25,750 --> 01:04:29,410 >> Par ailleurs, en aparté - surtout si vous êtes parmi ceux qui utilisent 1592 01:04:29,410 --> 01:04:31,700 les livres recommandés ou des ressources en ligne - 1593 01:04:31,700 --> 01:04:33,480 réaliser qu'il ya cette notion de style dans 1594 01:04:33,480 --> 01:04:34,130 programmation. 1595 01:04:34,130 --> 01:04:37,280 Et certaines personnes préfèrent mettre l'accolade 1596 01:04:37,280 --> 01:04:38,720 ici sur une ligne. 1597 01:04:38,720 --> 01:04:41,520 Certaines personnes préfèrent faire des choses ridicules, 1598 01:04:41,520 --> 01:04:43,830 comme les mettre ici. 1599 01:04:43,830 --> 01:04:45,140 Il n'ya pas de mauvaise réponse quand il s'agit de 1600 01:04:45,140 --> 01:04:46,710 style, mais c'est faux. 1601 01:04:46,710 --> 01:04:47,700 Mais certaines personnes le font. 1602 01:04:47,700 --> 01:04:49,160 [RIRES] 1603 01:04:49,160 --> 01:04:51,760 DAVID J. MALAN: Je mentionne cela maintenant, simplement parce que 1604 01:04:51,760 --> 01:04:54,400 vous lisez sur les choses dans les livres ou sur Internet, vous allez obtenir 1605 01:04:54,400 --> 01:04:55,990 différents messages de différents professeurs et 1606 01:04:55,990 --> 01:04:56,730 différents auteurs. 1607 01:04:56,730 --> 01:04:58,640 Et juste réaliser que, fonctionnellement, ils sont 1608 01:04:58,640 --> 01:05:00,740 généralement équivalent, mais être cohérent. 1609 01:05:00,740 --> 01:05:02,850 Donc, dans ce cas, nous allons normaliser le bouclés 1610 01:05:02,850 --> 01:05:04,650 accolades queue ici sur la gauche. 1611 01:05:04,650 --> 01:05:04,910 >> Très bien. 1612 01:05:04,910 --> 01:05:07,040 Alors allons-y maintenant et exécuter cette commande, et voir ce qui se passe 1613 01:05:07,040 --> 01:05:07,780 avec ce programme. 1614 01:05:07,780 --> 01:05:09,970 Assurez-nonswitch. 1615 01:05:09,970 --> 01:05:11,040 Ensuite, exécutez nonswitch. 1616 01:05:11,040 --> 01:05:13,900 Donnez-moi un entier compris entre 0 et - ce n'est donc pas pertinente 1617 01:05:13,900 --> 01:05:16,480 plus, mais je vais juste dire arbitrairement 42. 1618 01:05:16,480 --> 01:05:17,850 Et j'ai pris la bonne réponse. 1619 01:05:17,850 --> 01:05:20,430 Eh bien maintenant, nous allons effectivement prendre cela dans une direction différente. 1620 01:05:20,430 --> 01:05:22,070 Il s'avère qu'il ya une autre syntaxe que nous 1621 01:05:22,070 --> 01:05:23,480 pouvez utiliser dans un programme. 1622 01:05:23,480 --> 01:05:27,310 Voici une nouvelle pièce de la syntaxe qui est fonctionnellement le même, 1623 01:05:27,310 --> 01:05:30,680 mais simplement introduit une autre façon de nous exprimer. 1624 01:05:30,680 --> 01:05:32,830 Donc, c'est ce qu'on appelle un "switch". Et un 1625 01:05:32,830 --> 01:05:34,820 instruction switch fonctionne comme suit. 1626 01:05:34,820 --> 01:05:37,580 Il faut, entre parenthèses, une valeur que vous souhaitez 1627 01:05:37,580 --> 01:05:38,860 "Switch" sur. 1628 01:05:38,860 --> 01:05:41,490 Vous voulez à se comporter différemment en fonction de sa valeur. 1629 01:05:41,490 --> 01:05:44,360 Si ce moyen de commutation sur la valeur de n. 1630 01:05:44,360 --> 01:05:45,480 Et qu'est-ce que cela signifie? 1631 01:05:45,480 --> 01:05:50,530 Eh bien, si n est 1, 2 ou 3, aller de l'avant et d'imprimer "Vous 1632 01:05:50,530 --> 01:05:52,680 pris un grand nombre "et puis se briser. 1633 01:05:52,680 --> 01:05:55,720 La raison de la rupture, c'est que la façon dont fonctionne est que C 1634 01:05:55,720 --> 01:05:59,790 dès qu'il trouve un cas qui correspond, il commence à exécuter 1635 01:05:59,790 --> 01:06:01,610 l'ensemble du code en dessous. 1636 01:06:01,610 --> 01:06:04,580 Donc, si j'ai une ligne de code, comme je le fais ici, à la ligne 27, il 1637 01:06:04,580 --> 01:06:05,360 est exécuté. 1638 01:06:05,360 --> 01:06:07,520 Si je ajouter une autre ligne ici, il est exécuté. 1639 01:06:07,520 --> 01:06:09,350 Une autre ligne ici, il est exécuté. 1640 01:06:09,350 --> 01:06:12,460 Le programme ne s'arrête que l'exécution de ce qui est en dessous de la 1641 01:06:12,460 --> 01:06:14,680 instruction case applicable lorsque j'ai explicitement 1642 01:06:14,680 --> 01:06:17,210 dire «casser». Si mal. 1643 01:06:17,210 --> 01:06:19,220 Droit, dans ce cas, à la suite. 1644 01:06:19,220 --> 01:06:22,130 Cas n ° 4, 5 ou 6, de même, va 1645 01:06:22,130 --> 01:06:23,160 d'imprimer un message. 1646 01:06:23,160 --> 01:06:24,410 Dans ce cas, le nombre moyen terme. 1647 01:06:24,410 --> 01:06:25,200 Pause. 1648 01:06:25,200 --> 01:06:28,160 Cas n ° 7, 8, 9, 10, ça va imprimer "Vous avez choisi un grand 1649 01:06:28,160 --> 01:06:28,950 nombre. "Break. 1650 01:06:28,950 --> 01:06:31,290 Et puis il ya littéralement un mot clé appelé "default" 1651 01:06:31,290 --> 01:06:34,090 C'est effectivement comme le "else" construire. 1652 01:06:34,090 --> 01:06:36,010 Ainsi, une nouvelle syntaxe, mais intellectuellement, 1653 01:06:36,010 --> 01:06:37,060 rien du tout nouveau ici. 1654 01:06:37,060 --> 01:06:38,280 C'est un peu comme le Scratch. 1655 01:06:38,280 --> 01:06:41,040 Si, d'autre si, d'autre si, sorte de bloc. 1656 01:06:41,040 --> 01:06:44,560 >> Donc, c'est la version de commutation de ce programme. 1657 01:06:44,560 --> 01:06:46,280 Mais remarquez que nous l'avons fait avec les chiffres ici. 1658 01:06:46,280 --> 01:06:49,040 Permettez-moi d'ouvrir une deuxième version, juste pour montrer 1659 01:06:49,040 --> 01:06:50,670 quelque chose d'un peu plus concret. 1660 01:06:50,670 --> 01:06:52,840 Nous avons donc ici les grades à la place. 1661 01:06:52,840 --> 01:06:55,540 Il s'avère que vous pouvez utiliser des commutateurs non seulement sur des entiers, mais 1662 01:06:55,540 --> 01:06:56,340 caractères. 1663 01:06:56,340 --> 01:06:58,930 Pas dans tous les types de données, mais au moins sur les personnages. 1664 01:06:58,930 --> 01:07:02,670 Donc, ici, nous pourrions faire quelque chose comme si la valeur de C qui 1665 01:07:02,670 --> 01:07:06,230 l'utilisateur a tapé, à la ligne 19, en utilisant la fonction GetChar, 1666 01:07:06,230 --> 01:07:09,410 est la capitale de A ou minuscules a, il faut bien l'interpréter comme une année, 1667 01:07:09,410 --> 01:07:11,340 et dire ils ont choisi une note excellente. 1668 01:07:11,340 --> 01:07:14,690 Et le long de l'instruction switch, avons-nous d'autres 1669 01:07:14,690 --> 01:07:17,950 cas de «B» et «C», et ainsi de suite. 1670 01:07:17,950 --> 01:07:19,780 Mais nous allons maintenant compléter une autre chose. 1671 01:07:19,780 --> 01:07:21,130 Et encore une fois, une sorte de volant à travers 1672 01:07:21,130 --> 01:07:22,200 certains de ces exemples. 1673 01:07:22,200 --> 01:07:26,990 Mais c'est vraiment pour que nous puissions les appliquer, maintenant - 1674 01:07:26,990 --> 01:07:28,880 ou bien, il suffit de les traduire maintenant - 1675 01:07:28,880 --> 01:07:32,220 à C. 1676 01:07:32,220 --> 01:07:33,310 >> Alors laissez-moi aller de l'avant et de le faire. 1677 01:07:33,310 --> 01:07:34,830 Je vais ouvrir un nouveau fichier. 1678 01:07:34,830 --> 01:07:39,430 Et je vais faire include. 1679 01:07:39,430 --> 01:07:42,770 Et puis je vais faire int main (void). 1680 01:07:42,770 --> 01:07:46,390 Permettez-moi de sauvegarder ce fichier en tant que loop.c. 1681 01:07:46,390 --> 01:07:48,280 À titre d'exemple. 1682 01:07:48,280 --> 01:07:49,910 Et je vais aller de l'avant et faire ce qui suit. 1683 01:07:49,910 --> 01:07:54,180 Je veux écrire un programme très fastidieux. 1684 01:07:54,180 --> 01:07:56,170 Donc, 10. 1685 01:07:56,170 --> 01:07:58,862 Faisons-le. 1686 01:07:58,862 --> 01:07:59,320 9. 1687 01:07:59,320 --> 01:08:00,360 Très bien. 1688 01:08:00,360 --> 01:08:02,120 Dès que vous commencez à faire cela dans la programmation, vous êtes 1689 01:08:02,120 --> 01:08:03,490 probablement fait quelque chose de mal. 1690 01:08:03,490 --> 01:08:04,950 Mais nous allons commencer par là de toute façon. 1691 01:08:04,950 --> 01:08:05,430 Oops. 1692 01:08:05,430 --> 01:08:06,950 En fait, c'est faux. 1693 01:08:06,950 --> 01:08:08,230 7. 1694 01:08:08,230 --> 01:08:09,440 6. 1695 01:08:09,440 --> 01:08:10,750 5. 1696 01:08:10,750 --> 01:08:11,200 4. 1697 01:08:11,200 --> 01:08:12,450 Rien ne va se passer quand on arrive à 0. 1698 01:08:12,450 --> 01:08:13,290 3. 1699 01:08:13,290 --> 01:08:14,590 2. 1700 01:08:14,590 --> 01:08:15,630 1. 1701 01:08:15,630 --> 01:08:16,020 D'accord. 1702 01:08:16,020 --> 01:08:17,560 0. 1703 01:08:17,560 --> 01:08:18,689 Supprimer. 1704 01:08:18,689 --> 01:08:19,029 >> Très bien. 1705 01:08:19,029 --> 01:08:20,029 Donc, retour à 0. 1706 01:08:20,029 --> 01:08:22,010 Ainsi, ce programme va évidemment de faire ce qu'il est très 1707 01:08:22,010 --> 01:08:23,310 dit péniblement que ça va le faire. 1708 01:08:23,310 --> 01:08:24,060 Il va imprimer tous ceux 1709 01:08:24,060 --> 01:08:25,290 valeurs, de haut en bas. 1710 01:08:25,290 --> 01:08:27,140 Permettez-moi de faire faire des boucles. 1711 01:08:27,140 --> 01:08:28,640 Et puis - oups. 1712 01:08:28,640 --> 01:08:29,700 Assurez-boucle. 1713 01:08:29,700 --> 01:08:31,479 J'étais dans le mauvais répertoire. 1714 01:08:31,479 --> 01:08:33,300 Et maintenant, permettez-moi de fonctionner en boucle. 1715 01:08:33,300 --> 01:08:34,140 Entrée. 1716 01:08:34,140 --> 01:08:34,620 Woohoo. 1717 01:08:34,620 --> 01:08:35,270 Très agréable. 1718 01:08:35,270 --> 01:08:36,279 Nice, programme long. 1719 01:08:36,279 --> 01:08:38,109 >> D'accord, mais maintenant nous allons faire mieux. 1720 01:08:38,109 --> 01:08:40,810 Tout comme dans Scratch, quand vous avez commencé à l'aide d'une boucle 1721 01:08:40,810 --> 01:08:43,149 construire, au lieu de simplement copier et coller l'ensemble de la 1722 01:08:43,149 --> 01:08:45,580 pièces de puzzle, laissez-moi vous présenter cette chose. 1723 01:08:45,580 --> 01:08:48,609 Donc, en C, il existe diverses structures de boucle, 1724 01:08:48,609 --> 01:08:50,540 dont l'un ressemble à ceci. 1725 01:08:50,540 --> 01:08:55,069 Une boucle "for" a trois choses, séparés par deux points-virgules. 1726 01:08:55,069 --> 01:08:57,770 Et puis, à l'intérieur du corps de la boucle, pour ainsi dire - l' 1727 01:08:57,770 --> 01:08:59,390 l'intérieur des trucs des accolades - 1728 01:08:59,390 --> 01:09:01,010 nous pouvons faire quelque chose encore et encore. 1729 01:09:01,010 --> 01:09:02,310 Donc ce que j'ai ici sur l'écran, c'est 1730 01:09:02,310 --> 01:09:03,300 littéralement juste un commentaire. 1731 01:09:03,300 --> 01:09:05,380 Le / / signifie ici est un commentaire. 1732 01:09:05,380 --> 01:09:06,180 Ce n'est pas un code. 1733 01:09:06,180 --> 01:09:08,890 C'est juste description en anglais, pour moi, l'être humain. 1734 01:09:08,890 --> 01:09:11,300 >> Initialisations Donc, les conditions et les mises à jour. 1735 01:09:11,300 --> 01:09:12,770 Eh bien, nous allons voir comment cela fonctionne. 1736 01:09:12,770 --> 01:09:15,520 Cela me permet de réécrire ce programme comme suit. 1737 01:09:15,520 --> 01:09:16,399 Pour - 1738 01:09:16,399 --> 01:09:18,029 donc voici ma boucle - 1739 01:09:18,029 --> 01:09:19,439 int i - 1740 01:09:19,439 --> 01:09:21,330 voici une variable appelée "i" - 1741 01:09:21,330 --> 01:09:23,140 est initialisé à 10. 1742 01:09:23,140 --> 01:09:25,260 Donc, il est de mon initialisation. 1743 01:09:25,260 --> 01:09:29,450 Je veux faire cette boucle tant que "i" est supérieur ou 1744 01:09:29,450 --> 01:09:30,899 égal à 0. 1745 01:09:30,899 --> 01:09:32,880 Et à chaque itération de cette boucle, je veux 1746 01:09:32,880 --> 01:09:34,979 pour i do -. 1747 01:09:34,979 --> 01:09:36,310 Nous avons donc vu + + le lundi. 1748 01:09:36,310 --> 01:09:37,660 - Est à l'opposé. 1749 01:09:37,660 --> 01:09:39,410 Il décrémente la valeur de 1. 1750 01:09:39,410 --> 01:09:43,319 A l'intérieur de cette boucle, je veux vraiment faire quelque chose. 1751 01:09:43,319 --> 01:09:46,390 Donc je vais dire quelque chose comme printf. 1752 01:09:46,390 --> 01:09:48,939 Je ne veux pas dire 10 maintenant, parce que c'est évidemment tout 1753 01:09:48,939 --> 01:09:50,000 aller à la même valeur. 1754 01:09:50,000 --> 01:09:52,246 Qu'est-ce que je veux imprimer à la place, sans doute? 1755 01:09:52,246 --> 01:09:52,590 Ouais. 1756 01:09:52,590 --> 01:09:55,270 Donc, «i». D% Donc, i. 1757 01:09:55,270 --> 01:09:57,340 >> Donc, je vais voler une de ces idées à partir plus tôt - 1758 01:09:57,340 --> 01:09:59,640 cette substitution pour les codes de format - 1759 01:09:59,640 --> 01:10:01,620 et puis ici-bas, au fond, je vais retourner 0, tout 1760 01:10:01,620 --> 01:10:02,710 pour faire bonne mesure. 1761 01:10:02,710 --> 01:10:04,740 Mais maintenant, j'ai un programme plus concis. 1762 01:10:04,740 --> 01:10:07,490 Ce n'est que quelques lignes, et non pas il ya 10 ou 11 lignes. 1763 01:10:07,490 --> 01:10:09,440 Permettez-moi aller à mon invite ici-bas. 1764 01:10:09,440 --> 01:10:10,630 Remake boucle. 1765 01:10:10,630 --> 01:10:12,140 Exécutez à nouveau la boucle. 1766 01:10:12,140 --> 01:10:13,570 Et il semble être le même. 1767 01:10:13,570 --> 01:10:15,550 Maintenant, le programme n'est pas plus intéressant. 1768 01:10:15,550 --> 01:10:17,180 Mais maintenant, je peux taper quelque chose comme ça. 1769 01:10:17,180 --> 01:10:18,970 Je peux changer ce paramètre sur 100. 1770 01:10:18,970 --> 01:10:21,400 Je peux ensuite recompiler mon programme. 1771 01:10:21,400 --> 01:10:23,360 Et puis je peux ré-exécuter mon programme. 1772 01:10:23,360 --> 01:10:26,390 Et maintenant, il va super vite sur les ordinateurs d'aujourd'hui. 1773 01:10:26,390 --> 01:10:27,820 Mais là, j'ai - 1774 01:10:27,820 --> 01:10:29,620 et en fait, mon tampon de la ne 1775 01:10:29,620 --> 01:10:30,890 même aller aussi loin. 1776 01:10:30,890 --> 01:10:31,680 Nous y voilà. 1777 01:10:31,680 --> 01:10:34,090 Ainsi, nous l'avons tous 100. 1778 01:10:34,090 --> 01:10:35,880 Mais il est facile de faire des erreurs ici. 1779 01:10:35,880 --> 01:10:37,920 Quel va être le comportement attendu si je 1780 01:10:37,920 --> 01:10:41,150 accidentellement le faire? 1781 01:10:41,150 --> 01:10:42,550 Alors il se sent comme infinie. 1782 01:10:42,550 --> 01:10:44,670 Donc, nous allons voir si l'ordinateur se comporte. 1783 01:10:44,670 --> 01:10:47,020 >> Alors laissez-moi aller de l'avant et de faire la boucle. 1784 01:10:47,020 --> 01:10:48,355 Et permettez-moi de fonctionner en boucle. 1785 01:10:53,590 --> 01:10:55,210 Donc, revenons à ce que dans un instant. 1786 01:10:55,210 --> 01:10:56,720 Nous allons laisser cette manche. 1787 01:10:56,720 --> 01:10:59,520 Parce que faut-il compter jusqu'à, au minimum? 1788 01:10:59,520 --> 01:11:02,200 Probablement au moins 2 milliards de dollars, si nous avons que le nombre de bits, et 1789 01:11:02,200 --> 01:11:03,660 nous utilisons des valeurs positives. 1790 01:11:03,660 --> 01:11:04,890 Donc, nous allons revenir ici. 1791 01:11:04,890 --> 01:11:07,810 En plus de ces types de boucles, nous avons ce qu'on appelle alors 1792 01:11:07,810 --> 01:11:09,430 boucles. Ainsi, tout comme dans Scratch, vous aviez toujours 1793 01:11:09,430 --> 01:11:11,240 blocs, et vous avez eu des blocs de répétition. 1794 01:11:11,240 --> 01:11:13,270 De même, en C, il suffit de d'autres façons 1795 01:11:13,270 --> 01:11:14,260 de vous exprimer. 1796 01:11:14,260 --> 01:11:17,110 Vous avez donc cette notion d'une boucle while qui vous permet de 1797 01:11:17,110 --> 01:11:18,860 exprimez-vous un peu différemment. 1798 01:11:18,860 --> 01:11:21,490 Et puis vous avez quelque chose qui s'appelle une boucle do-while, 1799 01:11:21,490 --> 01:11:24,200 qui fonctionne un peu différemment. 1800 01:11:24,200 --> 01:11:25,320 Et nous allons taquiner les différencier au fil du temps. 1801 01:11:25,320 --> 01:11:28,630 >> Mais nous allons jeter un oeil à ce dernier ici. 1802 01:11:28,630 --> 01:11:30,160 Si nous allons dans - 1803 01:11:30,160 --> 01:11:31,466 toujours en cours. 1804 01:11:31,466 --> 01:11:32,770 Il est assez infinie. 1805 01:11:32,770 --> 01:11:36,870 Alors laissez-moi aller en positif, et de montrer comment nous pouvons effectivement 1806 01:11:36,870 --> 01:11:39,410 régissent entrée de l'utilisateur un peu plus efficacement. 1807 01:11:39,410 --> 01:11:40,910 C'est un programme assez court. 1808 01:11:40,910 --> 01:11:43,730 Et nous avons ici, en principal, un int n déclaration. 1809 01:11:43,730 --> 01:11:46,570 Alors, donnez-moi une variable appelée n. Maintenant, je me suis littéralement dire 1810 01:11:46,570 --> 01:11:48,340 «Faire». Et puis j'ai ouvert bouclés 1811 01:11:48,340 --> 01:11:49,630 accolade, accolade proche. 1812 01:11:49,630 --> 01:11:52,000 Et puis, remarquez, juste après cela, elle dit tout n 1813 01:11:52,000 --> 01:11:53,790 est inférieur à 1. 1814 01:11:53,790 --> 01:11:55,300 Donc noter que ces lignes - 1815 01:11:55,300 --> 01:11:56,740 19 à 24 - 1816 01:11:56,740 --> 01:11:59,450 composer collectivement une boucle do-while. 1817 01:11:59,450 --> 01:12:01,280 Et encore une fois, une nouvelle syntaxe, pas une idée nouvelle. 1818 01:12:01,280 --> 01:12:03,740 C'est juste une autre façon de boucle, syntaxiquement. 1819 01:12:03,740 --> 01:12:04,890 Alors qu'est-ce que cela fait? 1820 01:12:04,890 --> 01:12:08,000 Procédez comme suit tandis que n est inférieur à 1. 1821 01:12:08,000 --> 01:12:09,080 Alors qu'est-ce que je veux faire? 1822 01:12:09,080 --> 01:12:11,390 J'exige que vous me donnez un entier positif. 1823 01:12:11,390 --> 01:12:14,110 Ensuite, j'ai fait essayer d'obtenir un nombre entier de l'utilisateur. 1824 01:12:14,110 --> 01:12:16,740 Mais en termes de l'ordre des opérations ici, parce que le 1825 01:12:16,740 --> 01:12:21,850 tant que la condition est ici-bas, je suis ensuite aller vérifier, est n 1826 01:12:21,850 --> 01:12:23,100 moins de 1? 1827 01:12:23,100 --> 01:12:24,600 Donc, supposons que l'utilisateur - 1828 01:12:24,600 --> 01:12:26,450 après avoir exigé de cette façon - 1829 01:12:26,450 --> 01:12:29,190 types de la valeur 0. 1830 01:12:29,190 --> 01:12:34,510 Cette condition sera vraie ou fausse? 1831 01:12:34,510 --> 01:12:35,820 Eh bien, il va vraiment être vrai. 1832 01:12:35,820 --> 01:12:38,700 Parce que n est 0, et 0 est inférieur à 1. 1833 01:12:38,700 --> 01:12:40,140 Alors qu'est-ce que cela implique? 1834 01:12:40,140 --> 01:12:41,160 Le faire de nouveau. 1835 01:12:41,160 --> 01:12:41,990 Le faire de nouveau. 1836 01:12:41,990 --> 01:12:42,640 Le faire de nouveau. 1837 01:12:42,640 --> 01:12:46,080 Ce n'est qu'une fois cette condition est évaluée à false. 1838 01:12:46,080 --> 01:12:47,510 Si je tape dans 42. 1839 01:12:47,510 --> 01:12:49,690 Bien non, 42 n'est pas inférieur à 1. 1840 01:12:49,690 --> 01:12:52,320 Par conséquent, cette boucle est faite d'exécution. 1841 01:12:52,320 --> 01:12:54,650 Et donc à ce stade, le programme va dire, merci pour 1842 01:12:54,650 --> 01:12:57,530 le 42, dans ce cas. 1843 01:12:57,530 --> 01:13:00,320 Maintenant que vous avez cette façon de s'exprimer - 1844 01:13:00,320 --> 01:13:02,360 Nous ne devrions pas attendre que cela se termine. 1845 01:13:02,360 --> 01:13:03,620 Ça va prendre un certain temps. 1846 01:13:03,620 --> 01:13:04,990 A suivre la prochaine fois, peut-être. 1847 01:13:04,990 --> 01:13:08,050 >> Mais maintenant, vous avez la possibilité de nous l'espérons pour comprendre un 1848 01:13:08,050 --> 01:13:09,060 peu d'humour geek. 1849 01:13:09,060 --> 01:13:11,560 Toutes mes excuses. 1850 01:13:11,560 --> 01:13:13,620 Ce n'est pas représentatif de l'humour dans l'informatique 1851 01:13:13,620 --> 01:13:14,870 monde, mais il est mignon. 1852 01:13:21,020 --> 01:13:23,890 [RIRES] Faisons fin sur cette note. 1853 01:13:23,890 --> 01:13:25,750 Et nous allons vous voir lundi. 1854 01:13:25,750 --> 01:13:31,629 [Applaudissements]