1 00:00:00,000 --> 00:00:10,920 >> [Jouer de la musique] 2 00:00:10,920 --> 00:00:14,680 >> DAVID J Malan: Très bien, bienvenue à CS50. 3 00:00:14,680 --> 00:00:16,500 C'est le début de la deuxième semaine. 4 00:00:16,500 --> 00:00:18,940 Un mot d'un de nos amis sur le campus - 5 00:00:18,940 --> 00:00:22,620 Si vous êtes intéressé, peut-être, que ce soit maintenant ou dans un avenir à long terme 6 00:00:22,620 --> 00:00:25,670 même, une fois de plus confortable, de l'enseignement les élèves de collège un peu 7 00:00:25,670 --> 00:00:27,680 quelque chose à propos de l'informatique, faire tête à cette URL. 8 00:00:27,680 --> 00:00:32,360 Ils sont dans le besoin particulier en ce moment de enseignants, surtout si vous avez 9 00:00:32,360 --> 00:00:34,700 eu une certaine exposition à l'informatique. 10 00:00:34,700 --> 00:00:38,060 >> Donc, rappelons que la dernière fois, nous avons introduit quelques types de données en C, et 11 00:00:38,060 --> 00:00:40,590 vous avez peut-être commencé à obtenir votre mains sales avec ces jusqu'ici 12 00:00:40,590 --> 00:00:41,940 dans un problème posé. 13 00:00:41,940 --> 00:00:43,230 Et nous avons eu un chevalier. 14 00:00:43,230 --> 00:00:49,100 Donc, en termes un peu techniques, ce qui est un char comme vous le savez aujourd'hui? 15 00:00:49,100 --> 00:00:51,050 >> Donc, c'est un personnage, mais nous allons être plus précis maintenant. 16 00:00:51,050 --> 00:00:53,735 Qu'entendons-nous par caractère ou personne Char? 17 00:00:53,735 --> 00:00:56,700 18 00:00:56,700 --> 00:00:59,500 Un caractère non numérique - 19 00:00:59,500 --> 00:01:00,670 donc pas nécessairement. 20 00:01:00,670 --> 00:01:04,580 Il s'avère que les nombres pairs, même la ponctuation et les lettres sont 21 00:01:04,580 --> 00:01:06,980 représentée avec ces données type connu comme un chevalier. 22 00:01:06,980 --> 00:01:09,440 Donc ce n'est pas nécessairement alphabétique. 23 00:01:09,440 --> 00:01:11,100 Ouais? 24 00:01:11,100 --> 00:01:12,275 >> C'est donc un caractère ASCII. 25 00:01:12,275 --> 00:01:15,510 Donc, si vous repensez à la semaine zéro, lorsque nous avons eu notre octet de bénévoles 26 00:01:15,510 --> 00:01:19,150 venir et soit tenir leurs mains ou pas tout, ils représentaient bits. 27 00:01:19,150 --> 00:01:22,450 Mais collectivement comme un groupe de huit, ils représentaient un octet. 28 00:01:22,450 --> 00:01:26,030 Et nous avons introduit la notion de ASCII à cette conférence, qui est tout simplement un 29 00:01:26,030 --> 00:01:28,170 cartographie entre chiffres et lettres. 30 00:01:28,170 --> 00:01:32,010 Et utilise ASCII, comme ces humains implicites, huit bits 31 00:01:32,010 --> 00:01:33,660 pour représenter un caractère. 32 00:01:33,660 --> 00:01:36,890 >> Donc, en conséquence, s'il huit bits peuvent chaque prise sur une des deux valeurs - 33 00:01:36,890 --> 00:01:38,010 zéro ou un - 34 00:01:38,010 --> 00:01:40,280 cela veut dire qu'il y avait deux possibilités pour cette personne - 35 00:01:40,280 --> 00:01:41,230 zéro ou un - 36 00:01:41,230 --> 00:01:44,070 deux pour cette personne, deux pour cette personne, deux pour celui-ci. 37 00:01:44,070 --> 00:01:47,450 Ainsi, un total de deux fois deux fois deux fois deux fois deux - 38 00:01:47,450 --> 00:01:49,700 si deux le huitième au total. 39 00:01:49,700 --> 00:01:54,320 Il ya donc un nombre total de caractères 256 possibles que vous pouvez 40 00:01:54,320 --> 00:01:55,750 représenter avec huit bits. 41 00:01:55,750 --> 00:01:59,210 >> Maintenant, ceux d'entre vous qui parlent asiatique langues pourraient savoir qu'il ya plus 42 00:01:59,210 --> 00:02:02,620 personnages dans le monde que juste Au fur et B et Cs et Ds. 43 00:02:02,620 --> 00:02:06,130 Et en effet, ASCII ne suffit pas pour beaucoup de langues du monde. 44 00:02:06,130 --> 00:02:07,760 Mais plus à ce sujet une autre fois. 45 00:02:07,760 --> 00:02:11,240 Pour l'instant, sachez que dans C si vous voulez pour représenter une lettre, un morceau de 46 00:02:11,240 --> 00:02:15,780 ponctuation, ou tout simplement quelque chose de caractère dans la nature, nous utilisons un chevalier. 47 00:02:15,780 --> 00:02:18,240 Et c'est un octet ou huit bits. 48 00:02:18,240 --> 00:02:19,690 >> Que diriez-vous d'un int? 49 00:02:19,690 --> 00:02:20,780 Eh bien, un int est un entier. 50 00:02:20,780 --> 00:02:23,175 Combien de bits, si vous vous souvenez, est un nombre entier généralement? 51 00:02:23,175 --> 00:02:25,930 52 00:02:25,930 --> 00:02:27,512 rappel de quelqu'un? 53 00:02:27,512 --> 00:02:29,600 Donc, c'est généralement 32. 54 00:02:29,600 --> 00:02:32,120 Cela dépend en fait sur l'ordinateur que vous utilisez. 55 00:02:32,120 --> 00:02:35,770 Mais dans l'appareil, et dans beaucoup de ordinateurs, il est 32 bits ou quatre 56 00:02:35,770 --> 00:02:37,140 octets - huit fois quatre. 57 00:02:37,140 --> 00:02:39,790 Et ints sont juste utilisés pour le stockage numéros, soit négatives, 58 00:02:39,790 --> 00:02:41,610 positif, ou nul. 59 00:02:41,610 --> 00:02:45,250 >> Et si vous avez 32 bits et vous ne soucient de nombres positifs, peut 60 00:02:45,250 --> 00:02:48,960 quelqu'un stade combien possible entiers d'un ordinateur peut représenter de 61 00:02:48,960 --> 00:02:51,820 zéro sur place? 62 00:02:51,820 --> 00:02:56,130 Donc, il serait deux à la 32, qui est environ quatre milliards de dollars. 63 00:02:56,130 --> 00:02:59,720 Ainsi, ces puissances de deux vont être des thèmes récurrents dans l'informatique. 64 00:02:59,720 --> 00:03:03,930 Comme nous le verrons, ils sont tout à fait commode de travailler avec, même si ce n'est pas assez 65 00:03:03,930 --> 00:03:05,790 facile de faire le calcul dans sa tête. 66 00:03:05,790 --> 00:03:07,000 >> Donc, nous allons dire environ quatre milliards de dollars. 67 00:03:07,000 --> 00:03:08,620 Maintenant, un long long - 68 00:03:08,620 --> 00:03:09,770 vous pouvez genre de supposition. 69 00:03:09,770 --> 00:03:10,480 C'est plus qu'un int. 70 00:03:10,480 --> 00:03:12,440 Combien de bits? 71 00:03:12,440 --> 00:03:14,250 Donc, 64 bits ou huit octets. 72 00:03:14,250 --> 00:03:17,480 Cela signifie simplement que vous pouvez représenter même des chiffres plus élevés, plus positive ou 73 00:03:17,480 --> 00:03:19,160 nombres négatifs plus importants. 74 00:03:19,160 --> 00:03:20,060 >> Et que diriez-vous flotter? 75 00:03:20,060 --> 00:03:22,260 C'est un point flottant la valeur de 32 bits. 76 00:03:22,260 --> 00:03:25,180 Ceci est juste un nombre réel, quelque chose avec un point décimal. 77 00:03:25,180 --> 00:03:30,100 Mais si vous avez besoin de plus d'endroits à la place après la virgule ou si vous voulez 78 00:03:30,100 --> 00:03:33,720 représenter un plus grand nombre avec une certaine fraction après, vous pouvez utiliser un 79 00:03:33,720 --> 00:03:36,260 double, qui est de 64 bits. 80 00:03:36,260 --> 00:03:38,240 >> Mais il ya un intéressant emporter ici. 81 00:03:38,240 --> 00:03:42,890 Donc, si ints sont limitées par 32 bits et même de longs longs sont limitées par 64 82 00:03:42,890 --> 00:03:46,180 morceaux, ce genre de se poser la question, Que faire si vous voulez vraiment compter 83 00:03:46,180 --> 00:03:48,790 supérieur à 4 milliards d'euros pour un int? 84 00:03:48,790 --> 00:03:50,330 Eh bien, il suffit d'utiliser un long long. 85 00:03:50,330 --> 00:03:54,200 Mais que faire si vous voulez compter supérieur de deux à la 64e, donner ou prendre? 86 00:03:54,200 --> 00:03:55,810 >> Maintenant, c'est un chiffre énorme. 87 00:03:55,810 --> 00:03:59,250 Mais finalement, vous pourriez effectivement préoccuper de ce genre de valeurs, 88 00:03:59,250 --> 00:04:03,070 surtout si vous utilisez une base de données et de commencer à recueillir des tas 89 00:04:03,070 --> 00:04:06,190 et beaucoup de données et d'attribuer uniques numéros à chaque morceau de ces données. 90 00:04:06,190 --> 00:04:07,430 Donc, nous sorte de avons un problème. 91 00:04:07,430 --> 00:04:10,700 Et de même, avec virgule flottante valeurs - flotteurs ou doubles - 92 00:04:10,700 --> 00:04:14,290 si vous avez seulement un nombre fini de morceaux, combien le nombre total pourrait vous 93 00:04:14,290 --> 00:04:16,980 éventuellement représenter? 94 00:04:16,980 --> 00:04:19,540 >> Eh bien, c'est moins clair lorsque vous impliquer une virgule. 95 00:04:19,540 --> 00:04:20,899 Mais c'est sûrement fini. 96 00:04:20,899 --> 00:04:24,390 Si vous avez un nombre fini de bits, un nombre fini de l'homme, un fini 97 00:04:24,390 --> 00:04:27,350 nombre d'ampoules, vous pouvez sûrement ne représentent qu'un nombre fini de 98 00:04:27,350 --> 00:04:28,510 valeurs à virgule flottante. 99 00:04:28,510 --> 00:04:33,170 Mais combien de nombres réels sont leurs dans le monde? 100 00:04:33,170 --> 00:04:33,680 Il ya un infini. 101 00:04:33,680 --> 00:04:37,280 C'est donc ce genre de problème parce que nous n'ont pas une quantité infinie d' 102 00:04:37,280 --> 00:04:39,970 mémoire RAM ou à l'intérieur de nos ordinateurs. 103 00:04:39,970 --> 00:04:41,780 Donc certaines choses difficiles peuvent se produire. 104 00:04:41,780 --> 00:04:43,900 >> Allons donc de l'avant et essayer d'exprimer cela ici. 105 00:04:43,900 --> 00:04:46,240 Permettez-moi d'aller de l'avant et d'ouvrir gedit. 106 00:04:46,240 --> 00:04:50,360 Je vais aller de l'avant et enregistrer un fichier appelé «floats0.c" juste pour être 107 00:04:50,360 --> 00:04:54,630 compatible avec un exemple qui est disponible en ligne, si vous le souhaitez. 108 00:04:54,630 --> 00:04:58,080 Et je vais aller de l'avant et définir comme suit: - 109 00:04:58,080 --> 00:05:01,540 Je vais aller de l'avant et de dire, int void main, comme nous le faisons souvent. 110 00:05:01,540 --> 00:05:07,190 >> Et puis, dans ce programme, je vais me déclare un flotteur, donc un 32-bit 111 00:05:07,190 --> 00:05:09,700 variable appelée f, arbitrairement. 112 00:05:09,700 --> 00:05:13,910 Et puis je vais y entreposer Je ne sais pas, un dixième, donc 0,1. 113 00:05:13,910 --> 00:05:16,590 Je vais donc exprimer que comme un divisé par 10, ce qui est parfaitement 114 00:05:16,590 --> 00:05:17,790 légitime C. 115 00:05:17,790 --> 00:05:20,460 >> Et puis sur la deuxième ligne, j'ai simplement souhaitez imprimer cette valeur. 116 00:05:20,460 --> 00:05:22,950 Donc, rappelons que nous pouvons utiliser le familier printf. 117 00:05:22,950 --> 00:05:25,420 Nous ne voulons pas utiliser% i pour un int. 118 00:05:25,420 --> 00:05:28,360 Nous voulons utiliser% f pour un flotteur. 119 00:05:28,360 --> 00:05:33,080 Et puis je vais faire backslash n, Fermer citation, virgule, f, point-virgule. 120 00:05:33,080 --> 00:05:34,400 >> Alors, voici mon programme. 121 00:05:34,400 --> 00:05:35,820 Il ya déjà un bug. 122 00:05:35,820 --> 00:05:38,640 Est-ce que quelqu'un pour qui cette cliqué veulent déjà faire remarquer au moins 123 00:05:38,640 --> 00:05:40,220 un bug que j'ai fait? 124 00:05:40,220 --> 00:05:42,470 Ouais? 125 00:05:42,470 --> 00:05:42,800 Ouais. 126 00:05:42,800 --> 00:05:47,860 J'ai oublié "# include" à l' haut, ils symptôme dont si j'essaie de 127 00:05:47,860 --> 00:05:50,490 compiler cela va être que le compilateur va me crier dessus, 128 00:05:50,490 --> 00:05:52,770 disant symbole indéfini ou quelque chose à cet effet. 129 00:05:52,770 --> 00:05:55,360 Il ne comprend pas quelque chose printf. 130 00:05:55,360 --> 00:05:59,380 >> Donc, je vais faire "# include ", Enregistrez le fichier. 131 00:05:59,380 --> 00:06:00,400 Et maintenant il est en meilleure forme. 132 00:06:00,400 --> 00:06:02,690 Mais je vais aussi faire remarquer sur un nouveau détail aujourd'hui. 133 00:06:02,690 --> 00:06:08,620 En plus de spécifier lieu titulaires comme% f% i% s, vous pouvez 134 00:06:08,620 --> 00:06:12,320 influencer le comportement parfois de cet espace réservé. 135 00:06:12,320 --> 00:06:15,540 Par exemple, dans le cas d'un flottant valeur du point, si je ne veux 136 00:06:15,540 --> 00:06:22,200 pour afficher une décimale après la période, je peux réellement faire 0.1f. 137 00:06:22,200 --> 00:06:26,830 Donc, en d'autres termes, je me sépare de la f et le signe pour cent à 0,1, juste 138 00:06:26,830 --> 00:06:30,200 printf dire, vous pourriez avoir un ensemble tas de chiffres après la virgule 139 00:06:30,200 --> 00:06:30,930 signaler pour moi. 140 00:06:30,930 --> 00:06:32,870 Mais je ne veux voir l'un d'eux. 141 00:06:32,870 --> 00:06:36,280 >> Donc, je vais aller de l'avant maintenant et économisez ce programme, allez dans mon terminal 142 00:06:36,280 --> 00:06:41,870 fenêtre, et je vais aller de l'avant et tapez make flotteur 0, entrez. 143 00:06:41,870 --> 00:06:44,930 Je vois que la ligne quelque peu énigmatique que va commencer à faire plus de sens que nous 144 00:06:44,930 --> 00:06:46,900 taquiner à part cette semaine et la suivante. 145 00:06:46,900 --> 00:06:50,480 Maintenant, je vais aller de l'avant et exécuter zéro du flotteur. 146 00:06:50,480 --> 00:06:52,020 Et, bon sang. 147 00:06:52,020 --> 00:06:54,880 >> Donc, il ya un autre bug ici pour une raison. 148 00:06:54,880 --> 00:07:02,490 Je suis sûr que d'un dixième, ou un divisé par 10, n'est pas 0.0. 149 00:07:02,490 --> 00:07:04,590 Peut-être que je ne suis pas à la recherche à suffisamment de chiffres. 150 00:07:04,590 --> 00:07:08,580 Alors pourquoi je ne dis pas deux .2 de voir deux décimales au lieu d'un seul. 151 00:07:08,580 --> 00:07:11,810 Permettez-moi de revenir à ma fenêtre de terminal ici et a frappé une couple de fois pour 152 00:07:11,810 --> 00:07:12,840 voir mon histoire. 153 00:07:12,840 --> 00:07:15,910 Ne faire flotter à nouveau à zéro, puis à nouveau. 154 00:07:15,910 --> 00:07:17,730 Et maintenant entrer. 155 00:07:17,730 --> 00:07:20,000 >> Et maintenant, je suis sûr que c'est faux. 156 00:07:20,000 --> 00:07:23,030 Et je pouvais faire trois et quatre, et je suis va probablement continuer à voir des zéros. 157 00:07:23,030 --> 00:07:24,880 Alors, où est le bug? 158 00:07:24,880 --> 00:07:27,910 Une divisé par 10 devrait être de 0,1. 159 00:07:27,910 --> 00:07:30,310 Quelqu'un veut prendre un coup de couteau à ce la question fondamentale est? 160 00:07:30,310 --> 00:07:32,400 Ouais? 161 00:07:32,400 --> 00:07:33,420 Ils sont tous deux des entiers. 162 00:07:33,420 --> 00:07:33,920 Alors quoi? 163 00:07:33,920 --> 00:07:37,820 Donc, avec un divisé par 10, c'est ce que je fais en arithmétique. 164 00:07:37,820 --> 00:07:41,185 Et je reçois 0.1. 165 00:07:41,185 --> 00:07:41,660 >> Ouais. 166 00:07:41,660 --> 00:07:43,240 Et c'est bien cette question. 167 00:07:43,240 --> 00:07:46,700 Lorsque vous prenez un entier dans un ordinateur et vous le divisez par un autre entier, 168 00:07:46,700 --> 00:07:50,430 l'ordinateur par défaut va supposons que vous souhaitiez un entier. 169 00:07:50,430 --> 00:07:54,620 Le problème cependant, bien sûr, est 0.1 qui n'est pas un nombre entier. 170 00:07:54,620 --> 00:07:55,680 Il s'agit d'un nombre réel. 171 00:07:55,680 --> 00:07:59,610 Et donc ce que l'ordinateur fait par défaut est qu'il se contente de jeter 172 00:07:59,610 --> 00:08:01,070 tout après la virgule. 173 00:08:01,070 --> 00:08:03,380 Il n'a pas arrondir vers le bas ou vers le haut en soi. 174 00:08:03,380 --> 00:08:06,480 Il se contente de jeter tout après la virgule. 175 00:08:06,480 --> 00:08:07,430 Et maintenant que fait sens. 176 00:08:07,430 --> 00:08:09,740 Parce que maintenant, nous sommes clairement laissé à zéro. 177 00:08:09,740 --> 00:08:10,250 >> Mais attendez une minute. 178 00:08:10,250 --> 00:08:11,840 Je ne vois pas un zéro int. 179 00:08:11,840 --> 00:08:14,910 Je suis en train de voir 0.00. 180 00:08:14,910 --> 00:08:16,340 Alors, comment puis-je concilier cela maintenant? 181 00:08:16,340 --> 00:08:22,850 Si l'on divise par 10 est égal à zéro, mais je suis voir 0.00, où est-il obtenir 182 00:08:22,850 --> 00:08:24,250 reconverti en un nombre réel? 183 00:08:24,250 --> 00:08:25,500 Ouais. 184 00:08:25,500 --> 00:08:29,850 185 00:08:29,850 --> 00:08:30,630 Exactement. 186 00:08:30,630 --> 00:08:35,600 >> Donc, ici, dans la ligne de cinq ans, quand j'ai fait magasin qui 0.1, qui est ensuite 187 00:08:35,600 --> 00:08:39,549 tronqué à zéro, à l'intérieur d'un flotteur, c'est effectivement l'équivalent de 188 00:08:39,549 --> 00:08:42,100 stockant pas comme un int mais, en effet, comme un flotteur. 189 00:08:42,100 --> 00:08:46,540 Par ailleurs, je puis en utilisant printf imprimer explicitement ce nombre à deux 190 00:08:46,540 --> 00:08:49,740 décimales même si peut-être pas vraiment une. 191 00:08:49,740 --> 00:08:51,020 >> Donc, ce genre de suce, non? 192 00:08:51,020 --> 00:08:53,640 Apparemment, vous ne pouvez pas faire des maths, au moins à ce niveau de 193 00:08:53,640 --> 00:08:55,600 précision, dans un ordinateur. 194 00:08:55,600 --> 00:08:56,930 Mais il ya sûrement une solution. 195 00:08:56,930 --> 00:09:00,410 Quelle est la solution la plus simple que nous pourrions peut-être faire, même intuitivement juste ici pour 196 00:09:00,410 --> 00:09:01,130 résoudre ce problème? 197 00:09:01,130 --> 00:09:02,380 Ouais? 198 00:09:02,380 --> 00:09:04,700 199 00:09:04,700 --> 00:09:06,574 Tournez les entiers en - 200 00:09:06,574 --> 00:09:06,976 ouais. 201 00:09:06,976 --> 00:09:10,420 Même si je ne suis pas tout à fait sûr de ce que c'est se passe réellement ici, si elle 202 00:09:10,420 --> 00:09:13,440 a fondamentalement à voir avec ces deux étant ints, eh bien, pourquoi ne pas 203 00:09:13,440 --> 00:09:18,230 faire que 10.0, ce qui en fait 1.0 réenregistrer le fichier. 204 00:09:18,230 --> 00:09:20,990 Permettez-moi de revenir vers le bas et recompiler. 205 00:09:20,990 --> 00:09:23,030 Permettez-moi maintenant RERUN. 206 00:09:23,030 --> 00:09:23,420 Et là - 207 00:09:23,420 --> 00:09:27,690 maintenant, j'ai mon dixième comme représenté 0,10. 208 00:09:27,690 --> 00:09:28,420 >> Très bien. 209 00:09:28,420 --> 00:09:29,220 Donc, ce n'est pas mauvais. 210 00:09:29,220 --> 00:09:31,730 Et permettez-moi de souligner une autre façon nous aurions pu résoudre cela. 211 00:09:31,730 --> 00:09:35,580 Permettez-moi de réellement roule dans le temps au moment où nous avons eu ce que l'un 212 00:09:35,580 --> 00:09:36,680 il ya un dixième moment. 213 00:09:36,680 --> 00:09:40,800 Et permettez-moi d'aller de l'avant et de réenregistrer ce fichier comme un nom de fichier différent, il suffit d' 214 00:09:40,800 --> 00:09:41,750 avoir un peu de contrôle. 215 00:09:41,750 --> 00:09:43,450 C'était donc la version ci. 216 00:09:43,450 --> 00:09:45,520 Et maintenant, laissez-moi aller de l'avant et faire une version plus. 217 00:09:45,520 --> 00:09:48,540 Nous appelons cette version deux zéro indexées. 218 00:09:48,540 --> 00:09:51,280 >> Et je vais faire à la place cela - vous savez quoi? 219 00:09:51,280 --> 00:09:54,400 Ajout de point zéro fonctionne dans ce cas. 220 00:09:54,400 --> 00:09:56,060 Mais si l'on devait une variable. 221 00:09:56,060 --> 00:09:57,680 Censé 10 étaient une variable. 222 00:09:57,680 --> 00:10:00,680 En d'autres termes, supposons que je ne pouvais pas juste coder en dur .0 à la fin 223 00:10:00,680 --> 00:10:02,340 de cette expression arithmétique. 224 00:10:02,340 --> 00:10:05,820 Eh bien, je peux faire quelque chose entre parenthèses appelé prépondérante. 225 00:10:05,820 --> 00:10:11,920 Je peux lancer ce nombre entier de 10 à un flotteur, et je peux lancer cet entier un à un 226 00:10:11,920 --> 00:10:12,800 flotter, aussi bien. 227 00:10:12,800 --> 00:10:17,190 Ensuite, le calcul qui va être fait effectivement 1,0 divisé par 10,0, 228 00:10:17,190 --> 00:10:19,250 le résultat de ce qui va en f comme avant. 229 00:10:19,250 --> 00:10:26,130 Donc, si je recompile ce que la fabrication de flotteurs 2, et flotte maintenant 2, j'obtiens la même 230 00:10:26,130 --> 00:10:27,020 répondre ainsi. 231 00:10:27,020 --> 00:10:29,640 >> Donc, c'est un exemple assez artificiel, pour résoudre ce problème 232 00:10:29,640 --> 00:10:31,400 par l'introduction de la coulée. 233 00:10:31,400 --> 00:10:34,410 Mais en général, casting va être une chose puissante, en particulier pour 234 00:10:34,410 --> 00:10:38,180 problème réglé deux dans le temps d'une semaine, lorsque vous voulez convertir un type de données à 235 00:10:38,180 --> 00:10:41,800 autre que à la fin de la journée sont représentés de la même manière. 236 00:10:41,800 --> 00:10:44,970 A la fin de la journée, chaque chose dont nous avons parlé jusqu'ici est 237 00:10:44,970 --> 00:10:46,710 ints seulement sous la hotte. 238 00:10:46,710 --> 00:10:48,950 Ou si c'est trop bas niveau pour vous, ils sont juste des nombres 239 00:10:48,950 --> 00:10:49,750 sous la hotte. 240 00:10:49,750 --> 00:10:52,850 Même les personnages, encore une fois, rappellent à partir de la semaine zéro, sont des nombres 241 00:10:52,850 --> 00:10:53,990 sous la hotte. 242 00:10:53,990 --> 00:10:57,240 >> C'est-à-dire, nous pouvons convertir entre différents types de nombres si 243 00:10:57,240 --> 00:10:58,060 ils sont juste bits. 244 00:10:58,060 --> 00:11:01,020 Nous pouvons convertir entre les numéros et des lettres si elles sont tout simplement 245 00:11:01,020 --> 00:11:02,580 bits, et vice versa. 246 00:11:02,580 --> 00:11:07,170 Et casting de cette façon est un mécanisme dans la programmation qui vous permet de force 247 00:11:07,170 --> 00:11:10,970 modifier un type de données à l'autre. 248 00:11:10,970 --> 00:11:14,570 Malheureusement, ce n'est pas aussi simple que j'aurais aimé. 249 00:11:14,570 --> 00:11:19,220 >> Je vais retourner dans flotteurs 1, ce qui était le plus simple, plus 250 00:11:19,220 --> 00:11:22,830 simple avec une 0,0 ajoutée à chacun. 251 00:11:22,830 --> 00:11:25,260 Et tout comme une remise à niveau rapide, laissez-moi aller de l'avant et de recompiler 252 00:11:25,260 --> 00:11:27,670 cela, assurez-flotteurs 2 - 253 00:11:27,670 --> 00:11:30,300 désolé, c'est fabriquer des flotteurs 1. 254 00:11:30,300 --> 00:11:32,050 Et maintenant nous allons courir flotteurs 1. 255 00:11:32,050 --> 00:11:34,810 Et dans le fond, notez que je reçois en effet 0.1. 256 00:11:34,810 --> 00:11:36,165 Donc, le problème est résolu. 257 00:11:36,165 --> 00:11:37,280 >> Mais pas encore. 258 00:11:37,280 --> 00:11:40,000 Je vais maintenant avoir un peu curieux, et je vais retourner dans mon 259 00:11:40,000 --> 00:11:41,620 printf et Dites, vous savez quoi? 260 00:11:41,620 --> 00:11:44,090 Je tiens à confirmer que cette C'est vraiment un dixième. 261 00:11:44,090 --> 00:11:47,890 Et je vais vouloir voir cette à, disons, cinq décimales. 262 00:11:47,890 --> 00:11:48,570 Ce n'est pas un problème. 263 00:11:48,570 --> 00:11:52,020 J'ai changer les deux à cinq, Je recompiler avec faire. 264 00:11:52,020 --> 00:11:53,770 Je le relancer en tant que flotte 1. 265 00:11:53,770 --> 00:11:54,990 Vous cherchez plutôt bien. 266 00:11:54,990 --> 00:11:58,570 Mes vérifications de cohérence pourrait s'arrêter là, mais Je suis un peu plus aventureux. 267 00:11:58,570 --> 00:12:00,330 Je vais changer de 0,5 à 0,10. 268 00:12:00,330 --> 00:12:03,440 Je veux voir 10 chiffres après la décimale. 269 00:12:03,440 --> 00:12:09,060 >> Et je vais aller de l'avant et de recompiler cette flotte et relancez 1. 270 00:12:09,060 --> 00:12:13,060 J'ai un peu de regret après avoir testé ce plus loin parce que mes calculs sont pas 271 00:12:13,060 --> 00:12:14,320 corriger plus, il semble. 272 00:12:14,320 --> 00:12:15,630 Mais attendez une minute, peut-être c'est juste un coup de chance. 273 00:12:15,630 --> 00:12:17,810 Peut-être que l'ordinateur agit un peu étrange. 274 00:12:17,810 --> 00:12:21,810 Permettez-moi d'aller de l'avant et faire 20 points décimaux et me rassurer que je sais 275 00:12:21,810 --> 00:12:22,540 comment faire des mathématiques. 276 00:12:22,540 --> 00:12:23,460 Je sais comment programmer. 277 00:12:23,460 --> 00:12:26,960 Faire flotteurs 1, recompiler, et bon sang. 278 00:12:26,960 --> 00:12:31,110 C'est vraiment, vraiment obtenir loin de la marque. 279 00:12:31,110 --> 00:12:32,490 >> Alors qu'est-ce qui se passe ici? 280 00:12:32,490 --> 00:12:36,050 Intuitivement, fondée sur nos hypothèses plus tôt au sujet de la taille des types de données, 281 00:12:36,050 --> 00:12:38,040 ce qui doit se passer ici sous le capot? 282 00:12:38,040 --> 00:12:39,290 Ouais? 283 00:12:39,290 --> 00:12:43,000 284 00:12:43,000 --> 00:12:43,590 Exactement. 285 00:12:43,590 --> 00:12:46,480 Si vous voulez autant de précision et c'est un diable de beaucoup de précision - 286 00:12:46,480 --> 00:12:48,770 20 chiffres après la virgule. 287 00:12:48,770 --> 00:12:51,990 Vous ne pouvez pas représenter une nombre arbitraire sauf si vous avez un 288 00:12:51,990 --> 00:12:52,930 nombre quelconque de bits. 289 00:12:52,930 --> 00:12:54,190 Mais nous ne le faisons pas. 290 00:12:54,190 --> 00:12:57,200 Pour un flotteur, nous ne disposons que de 32 bits. 291 00:12:57,200 --> 00:13:02,260 >> Donc, si 32 bits ne peut être permutées dans un manière - tout comme nos hommes sur, étape 292 00:13:02,260 --> 00:13:05,780 mains haut ou le bas - en un nombre fini d' façons, il n'y a qu'un nombre fini 293 00:13:05,780 --> 00:13:08,640 des nombres réels que vous pouvez représenter avec ces bits. 294 00:13:08,640 --> 00:13:10,500 Et si l'ordinateur finalement va avoir à 295 00:13:10,500 --> 00:13:11,730 commencer à couper les coins. 296 00:13:11,730 --> 00:13:15,500 L'ordinateur peut cacher ces détails chez nous pour un peu de temps. 297 00:13:15,500 --> 00:13:18,880 Mais si nous commençons à piquer les numéros et en regardant plus en plus loin à l' 298 00:13:18,880 --> 00:13:23,220 numéros de fuite dans le nombre entier, puis nous commençons à voir que c'est 299 00:13:23,220 --> 00:13:26,480 l'approximation de la réalité idée d'un dixième. 300 00:13:26,480 --> 00:13:29,860 >> Et il s'avère que, tragiquement, il ya un nombre infini de nombres 301 00:13:29,860 --> 00:13:35,060 nous ne pouvons pas représenter précisément dans un l'ordinateur, au moins avec un fini 302 00:13:35,060 --> 00:13:38,030 nombre de bits, un ensemble fini quantité de RAM. 303 00:13:38,030 --> 00:13:41,210 Maintenant, malheureusement, parfois a des conséquences dans le monde réel. 304 00:13:41,210 --> 00:13:45,980 Si les gens ne se rendent pas tout à fait ce ou sorte de prendre pour acquis le fait 305 00:13:45,980 --> 00:13:48,310 que leur ordinateur va juste faire ce que ils disent qu'il faut faire et ne pas faire 306 00:13:48,310 --> 00:13:51,430 comprendre ces sous-jacente détails de représentation - 307 00:13:51,430 --> 00:13:55,290 qui, franchement, dans certaines langues sont cachées à l'utilisateur, contrairement au C - 308 00:13:55,290 --> 00:13:56,500 quelques mauvaises choses peuvent arriver. 309 00:13:56,500 --> 00:13:58,650 >> Et ce que je pensais que nous ferions est de prendre un peu de recul. 310 00:13:58,650 --> 00:14:00,420 Et c'est sur un vidéo de huit minutes. 311 00:14:00,420 --> 00:14:04,200 Il a été diffusé il ya quelques années, et il donne aperçu réellement ce qui peut aller 312 00:14:04,200 --> 00:14:09,290 mal lorsque vous sous-apprécier ces sortes de détails dans la très bien trop 313 00:14:09,290 --> 00:14:10,080 monde réel. 314 00:14:10,080 --> 00:14:12,965 Si nous pouvions éteindre les lumières pendant quelques minutes. 315 00:14:12,965 --> 00:14:14,360 >> INTERLOCUTEUR 1: Nous revenons maintenant à l'ingénierie 316 00:14:14,360 --> 00:14:17,160 catastrophes sur Modern Marvels. 317 00:14:17,160 --> 00:14:18,680 >> Informatique - 318 00:14:18,680 --> 00:14:21,340 nous avons tous appris à accepter l' problèmes souvent frustrantes 319 00:14:21,340 --> 00:14:23,170 qui vont avec. 320 00:14:23,170 --> 00:14:27,570 Bugs, des virus et des pépins logiciels sont de petits prix à payer pour la 321 00:14:27,570 --> 00:14:28,960 commodité. 322 00:14:28,960 --> 00:14:32,040 Mais dans la haute technologie et à haute vitesse militaire et programme spatial 323 00:14:32,040 --> 00:14:38,650 applications, le plus petit problème peut être agrandie en cas de catastrophe. 324 00:14:38,650 --> 00:14:44,480 >> Le 4 Juin 1996, des scientifiques prêts à lancer une fusée sans pilote Ariane 5. 325 00:14:44,480 --> 00:14:48,700 Il transportait satellites scientifiques conçu pour établir précisément comment 326 00:14:48,700 --> 00:14:53,250 le champ magnétique de la Terre interagit avec des vents solaires. 327 00:14:53,250 --> 00:14:57,540 La fusée a été construit pour l'Union européenne Agence spatiale et décollé de son 328 00:14:57,540 --> 00:14:59,906 installation sur la côte de la Guyane française. 329 00:14:59,906 --> 00:15:03,660 >> JACK Ganssle: à environ 37 secondes dans le vol, ils ont d'abord remarqué 330 00:15:03,660 --> 00:15:04,910 quelque chose n'allait pas. 331 00:15:04,910 --> 00:15:08,130 Les buses sont pivotantes en d'une manière qu'ils devraient vraiment pas. 332 00:15:08,130 --> 00:15:12,380 Environ 40 secondes après le vol, clairement le véhicule était en difficulté. 333 00:15:12,380 --> 00:15:14,400 Et c'est quand ils ont fait une décision de la détruire. 334 00:15:14,400 --> 00:15:18,520 L'agent de sécurité de la gamme, avec courage énormes, appuyé sur la touche 335 00:15:18,520 --> 00:15:23,900 fait exploser la fusée avant de pouvoir devenir un danger pour la sécurité publique. 336 00:15:23,900 --> 00:15:27,810 >> INTERLOCUTEUR 1: Ce fut le voyage inaugural d'Ariane 5, et sa destruction 337 00:15:27,810 --> 00:15:32,020 a eu lieu en raison d'un défaut intégré dans le logiciel de la fusée. 338 00:15:32,020 --> 00:15:33,980 >> JACK Ganssle: Le problème de l'Ariane c'est qu'il y avait un certain nombre 339 00:15:33,980 --> 00:15:36,390 qui a exigé 64 bits à exprimer. 340 00:15:36,390 --> 00:15:39,420 Et ils voulaient convertir pour un nombre de 16 bits. 341 00:15:39,420 --> 00:15:43,130 Ils ont supposé que le nombre n'a jamais été va être très important, que la plupart des 342 00:15:43,130 --> 00:15:46,810 ces chiffres dans le 64 bits nombre sont des zéros. 343 00:15:46,810 --> 00:15:48,270 Ils avaient tort. 344 00:15:48,270 --> 00:15:51,380 >> INTERLOCUTEUR 1: L'incapacité d'un logiciel programme pour accepter le type de 345 00:15:51,380 --> 00:15:55,350 nombre généré par un autre était à l'origine de la défaillance. 346 00:15:55,350 --> 00:15:59,970 Le développement de logiciels est devenu un très partie coûteuse des nouvelles technologies. 347 00:15:59,970 --> 00:16:03,980 La fusée Ariane 4 avait été très succès, tant du logiciel 348 00:16:03,980 --> 00:16:07,480 créé car il était aussi utilisé dans le lanceur Ariane 5. 349 00:16:07,480 --> 00:16:11,980 >> PHILIP COYLE: Le problème de base était que l'Ariane 5 a été plus rapide, 350 00:16:11,980 --> 00:16:13,720 accélérée plus rapidement. 351 00:16:13,720 --> 00:16:17,250 Et le logiciel n'avait pas comptabilisées pour cela. 352 00:16:17,250 --> 00:16:20,770 >> INTERLOCUTEUR 1: La destruction de la fusée a été un énorme désastre financier, 353 00:16:20,770 --> 00:16:24,200 tout en raison d'une erreur de logiciel minutes. 354 00:16:24,200 --> 00:16:27,820 Mais ce n'était pas la première fois des données problèmes de conversion avaient souffert moderne 355 00:16:27,820 --> 00:16:30,620 la technologie des fusées. 356 00:16:30,620 --> 00:16:34,480 >> JACK Ganssle: En 1991, avec le début de la première guerre du Golfe, le Patriot 357 00:16:34,480 --> 00:16:38,610 missile a connu une sorte similaire d'un problème de conversion de nombres. 358 00:16:38,610 --> 00:16:44,910 En conséquence, 28 soldats américains ont été tuées et environ 100 autres blessés 359 00:16:44,910 --> 00:16:48,600 lorsque le Patriot, qui devait pour se protéger contre les Scud entrants, 360 00:16:48,600 --> 00:16:51,630 pas réussi à tirer un missile. 361 00:16:51,630 --> 00:16:55,110 >> INTERLOCUTEUR 1: Quand l'Irak a envahi le Koweït et Amérique lancé Desert Storm en 362 00:16:55,110 --> 00:17:00,570 Début 1991, les batteries de missiles Patriot ont été déployés pour protéger l'Arabie saoudite 363 00:17:00,570 --> 00:17:04,760 et en Israël du Scud irakien attaques de missiles. 364 00:17:04,760 --> 00:17:09,720 Le Patriot est un américain à moyenne portée système sol-air fabriqué par 365 00:17:09,720 --> 00:17:11,569 la société Raytheon. 366 00:17:11,569 --> 00:17:16,410 >> THEODORE Postol: La taille du Patriot intercepteur lui-même est à peu près 367 00:17:16,410 --> 00:17:17,710 20 pieds de long. 368 00:17:17,710 --> 00:17:20,800 Et il pèse environ 2000 livres. 369 00:17:20,800 --> 00:17:22,940 Et il porte une ogive d'environ - 370 00:17:22,940 --> 00:17:24,905 Je pense que c'est environ 150 livres. 371 00:17:24,905 --> 00:17:31,030 Et l'ogive est en soi un explosif puissant qui a 372 00:17:31,030 --> 00:17:33,270 fragments autour d'elle. 373 00:17:33,270 --> 00:17:37,490 L'enveloppe de la tête militaire est conçue d'agir comme chevrotine. 374 00:17:37,490 --> 00:17:40,720 >> INTERLOCUTEUR 1: Les missiles sont réalisées quatre par conteneur et sont transportés 375 00:17:40,720 --> 00:17:43,050 par un semi-remorque. 376 00:17:43,050 --> 00:17:47,490 >> PHILIP COYLE: The Patriot anti-missile système revient à 377 00:17:47,490 --> 00:17:50,710 les moins de 20 ans. 378 00:17:50,710 --> 00:17:54,350 Il a été initialement conçu comme une défense antimissile air 379 00:17:54,350 --> 00:17:56,190 abattre des avions ennemis. 380 00:17:56,190 --> 00:18:02,490 Dans la première guerre du Golfe, lorsque que la guerre est venu, l'armée voulait l'utiliser 381 00:18:02,490 --> 00:18:05,535 pour abattre des missiles Scud, pas des avions. 382 00:18:05,535 --> 00:18:09,310 L'armée de l'air irakienne n'était pas tant d'un problème. 383 00:18:09,310 --> 00:18:12,450 Mais l'armée était inquiet de Scud. 384 00:18:12,450 --> 00:18:15,950 Et alors ils ont essayé de mettre à niveau le Patriot. 385 00:18:15,950 --> 00:18:18,750 >> ENCEINTE 1: Intercepter un missile ennemi voyager à mach cinq était 386 00:18:18,750 --> 00:18:20,890 va être assez difficile. 387 00:18:20,890 --> 00:18:25,590 Mais quand le Patriot a été précipité dans publique, l'armée n'était pas au courant d'une 388 00:18:25,590 --> 00:18:31,710 Modification irakien qui a fait leur Scud presque impossible à atteindre. 389 00:18:31,710 --> 00:18:35,240 >> THEODORE Postol: Qu'est-il arrivé est le Scud qui étaient 390 00:18:35,240 --> 00:18:36,570 venir en étaient instables. 391 00:18:36,570 --> 00:18:37,532 Ils ont été vacillant. 392 00:18:37,532 --> 00:18:43,220 La raison en était que les Irakiens, en Afin d'obtenir 600 km sur un 393 00:18:43,220 --> 00:18:47,530 Missile de 300 kilomètres de portée, a pris poids de l'ogive avant. 394 00:18:47,530 --> 00:18:49,290 Ils ont fait l'ogive léger. 395 00:18:49,290 --> 00:18:53,110 Alors maintenant, le Patriot essaie à venir à la Scud. 396 00:18:53,110 --> 00:18:56,470 Et la plupart du temps, l'écrasante plupart du temps, il serait tout simplement 397 00:18:56,470 --> 00:18:58,730 voler par le Scud. 398 00:18:58,730 --> 00:19:01,760 >> INTERLOCUTEUR 1: Une fois que le système Patriot les opérateurs ont réalisé le Patriot raté 399 00:19:01,760 --> 00:19:06,690 sa cible, ils exploser les Patriots ogive pour éviter tout risque 400 00:19:06,690 --> 00:19:10,300 victimes si elle a été autorisée à tomber sur le sol. 401 00:19:10,300 --> 00:19:14,540 >> THEODORE Postol: C'est ce que la plupart les gens ont vu que de grandes boules de feu dans le ciel 402 00:19:14,540 --> 00:19:20,350 et incompris comme intercepte d'ogives Scud. 403 00:19:20,350 --> 00:19:23,320 >> INTERLOCUTEUR 1: Bien que dans le ciel __gVirt_NP_NN_NNPS<__ nuit Patriots semblaient être avec succès 404 00:19:23,320 --> 00:19:27,530 détruire les Scud, à Dhahran il pourrait se méprenne pas sur sa 405 00:19:27,530 --> 00:19:29,140 rendement. 406 00:19:29,140 --> 00:19:34,180 Là, le système radar du Patriot perdu suivi d'un Scud entrant et jamais 407 00:19:34,180 --> 00:19:36,380 lancé en raison d'un défaut de logiciel. 408 00:19:36,380 --> 00:19:39,890 409 00:19:39,890 --> 00:19:42,700 >> C'était les Israéliens qui découvrit le premier que plus le système 410 00:19:42,700 --> 00:19:48,020 était sur, plus la différence de temps est devenue due à une horloge 411 00:19:48,020 --> 00:19:50,470 intégré dans l'ordinateur du système. 412 00:19:50,470 --> 00:19:54,640 >> JACK Ganssle: Environ deux semaines avant la tragédie à Dhahran, les Israéliens 413 00:19:54,640 --> 00:19:58,440 rapporté au ministère de la Défense que le système était en train de perdre du temps. 414 00:19:58,440 --> 00:20:01,280 Après environ huit heures de course, ils ont remarqué que le système est 415 00:20:01,280 --> 00:20:03,530 devenir nettement moins précis. 416 00:20:03,530 --> 00:20:07,710 Le ministère de la Défense a répondu par dire toutes les batteries de Patriot 417 00:20:07,710 --> 00:20:10,500 de ne pas laisser les systèmes pendant une longue période. 418 00:20:10,500 --> 00:20:12,430 Ils n'ont jamais dit ce qui fut longtemps. 419 00:20:12,430 --> 00:20:13,330 Huit heures? 420 00:20:13,330 --> 00:20:13,810 10 heures? 421 00:20:13,810 --> 00:20:14,990 1000 heures? 422 00:20:14,990 --> 00:20:17,150 Personne ne savait. 423 00:20:17,150 --> 00:20:20,220 >> INTERLOCUTEUR 1: La batterie de Patriot stationnés à la caserne à Dhahran 424 00:20:20,220 --> 00:20:24,660 et son horloge interne défectueuse avait été sur plus de 100 heures dans la nuit du 425 00:20:24,660 --> 00:20:27,470 25 février. 426 00:20:27,470 --> 00:20:31,770 >> JACK Ganssle: Il suivies temps à une précision de l'ordre d'un dixième de seconde. 427 00:20:31,770 --> 00:20:34,480 Maintenant, un dixième de seconde est une nombre intéressant car il ne peut pas être 428 00:20:34,480 --> 00:20:39,940 exprimé en binaire exactement, ce qui signifie il ne peut pas être exprimée exactement dans 429 00:20:39,940 --> 00:20:42,500 n'importe quel ordinateur numérique moderne. 430 00:20:42,500 --> 00:20:46,920 C'est difficile à croire, mais l'utiliser comme un exemple. 431 00:20:46,920 --> 00:20:49,000 Prenons le numéro un tiers. 432 00:20:49,000 --> 00:20:53,150 Un tiers ne peut pas être exprimée en décimal exactement. 433 00:20:53,150 --> 00:20:57,500 Un tiers est 0,333 va sur l'infini. 434 00:20:57,500 --> 00:21:02,270 Il n'ya aucun moyen de le faire avec précision absolue en décimal. 435 00:21:02,270 --> 00:21:05,370 C'est exactement le même genre de problème ce qui s'est passé dans le Patriot. 436 00:21:05,370 --> 00:21:09,880 Plus le système a fonctionné, l' pire l'erreur de temps est devenu. 437 00:21:09,880 --> 00:21:13,840 >> INTERLOCUTEUR 1: Après 100 heures de fonctionnement, l'erreur dans le temps était seulement 438 00:21:13,840 --> 00:21:16,140 environ un tiers de seconde. 439 00:21:16,140 --> 00:21:20,800 Mais en termes de ciblage d'un missile voyager à mach cinq ans, il a donné lieu à 440 00:21:20,800 --> 00:21:24,410 un tracking error de plus de 600 mètres. 441 00:21:24,410 --> 00:21:27,670 Ce serait une erreur fatale pour les soldats à Dhahran. 442 00:21:27,670 --> 00:21:33,450 >> THEODORE Postol: Ce qui s'est passé est une Scud lancement a été détecté au début 443 00:21:33,450 --> 00:21:34,280 Les satellites d'alerte. 444 00:21:34,280 --> 00:21:38,550 Et ils savaient que le Scud venait dans leur direction générale. 445 00:21:38,550 --> 00:21:41,000 Ils ne savaient pas d'où ça venait. 446 00:21:41,000 --> 00:21:43,900 >> INTERLOCUTEUR 1: Il appartient maintenant au radar composant du système Patriot 447 00:21:43,900 --> 00:21:48,910 défendre Dhahran pour localiser et conserver suivi du missile ennemi entrant. 448 00:21:48,910 --> 00:21:50,580 >> JACK Ganssle: Le radar était très intelligent. 449 00:21:50,580 --> 00:21:53,770 Il serait effectivement suivre la position de le Scud, puis de prédire où il 450 00:21:53,770 --> 00:21:57,160 serait probablement la prochaine fois le radar envoie une impulsion sur. 451 00:21:57,160 --> 00:21:58,870 Qui a été appelé la porte de la gamme. 452 00:21:58,870 --> 00:22:04,020 >> THEODORE Postol: Puis, une fois le Patriot décide de suffisamment de temps s'est écoulé pour aller 453 00:22:04,020 --> 00:22:09,420 sauvegarder et vérifier l'emplacement suivant pour cet objet détecté, il remonte. 454 00:22:09,420 --> 00:22:14,450 Alors, quand il est retourné à la mauvaise place, il voit alors pas d'objet. 455 00:22:14,450 --> 00:22:18,200 Et il décide qu'il n'y a pas un objet, c'était une fausse détection, et 456 00:22:18,200 --> 00:22:19,680 gouttes de la piste. 457 00:22:19,680 --> 00:22:22,970 >> INTERLOCUTEUR 1: Le Scud entrant disparu à partir de l'écran radar, et 458 00:22:22,970 --> 00:22:26,050 secondes plus tard, il a claqué dans les casernes. 459 00:22:26,050 --> 00:22:31,950 Le Scud a tué 28 et était le dernier tiré lors de la première guerre du Golfe. 460 00:22:31,950 --> 00:22:37,700 Tragiquement, le logiciel mis à jour est arrivé à Dhahran le lendemain. 461 00:22:37,700 --> 00:22:41,800 La faille du logiciel avait été fixé, la fermeture d'un chapitre dans le trouble 462 00:22:41,800 --> 00:22:43,690 histoire du missile Patriot. 463 00:22:43,690 --> 00:22:46,780 464 00:22:46,780 --> 00:22:50,710 >> Patriot est en fait un acronyme pour progressive de suivi Array 465 00:22:50,710 --> 00:22:51,960 Intercepter la cible. 466 00:22:51,960 --> 00:22:54,650 467 00:22:54,650 --> 00:23:00,840 >> DAVID J Malan: D'accord, donc une exemple donne à réfléchir, pour être sûr. 468 00:23:00,840 --> 00:23:03,430 Et heureusement, ces niveau inférieur les bugs ne sont pas quelque chose que nous allons 469 00:23:03,430 --> 00:23:06,220 ont généralement pour apprécier, certainement pas avec certains de nos 470 00:23:06,220 --> 00:23:07,360 plus tôt des programmes. 471 00:23:07,360 --> 00:23:10,450 Au contraire, la plupart des bugs que vous aurez rencontre sera logique dans la nature, 472 00:23:10,450 --> 00:23:12,900 syntaxique dans laquelle la nature Code ne fonctionne tout simplement pas juste. 473 00:23:12,900 --> 00:23:14,140 Et vous le savez assez rapide. 474 00:23:14,140 --> 00:23:16,850 >> Mais surtout quand on arrive à la fin du semestre, il va 475 00:23:16,850 --> 00:23:20,620 devenir de plus en plus de la possibilité d' réfléchir sérieusement sur la conception 476 00:23:20,620 --> 00:23:22,960 de vos programmes et le sous-jacents représentation 477 00:23:22,960 --> 00:23:24,520 là aussi, des données. 478 00:23:24,520 --> 00:23:28,010 Par exemple, nous allons présenter MySQL, qui est un moteur de base de données populaire 479 00:23:28,010 --> 00:23:30,850 que vous pouvez utiliser avec les sites Web de stocker les données sur l'extrémité arrière. 480 00:23:30,850 --> 00:23:34,630 Et vous devrez commencer à décider à la fin du semestre, non seulement ce 481 00:23:34,630 --> 00:23:38,790 types de données le long de ces lignes à utiliser mais exactement combien de bits à utiliser, 482 00:23:38,790 --> 00:23:42,740 si oui ou non vous voulez stocker des dates que les dates et heures que les temps, et aussi 483 00:23:42,740 --> 00:23:46,890 des choses comme la taille que vous voulez le ID unique de faire pour, par exemple, les utilisateurs 484 00:23:46,890 --> 00:23:47,680 dans votre base de données. 485 00:23:47,680 --> 00:23:51,210 >> En fait, si certains d'entre vous ont eu Facebook représente un certain temps, 486 00:23:51,210 --> 00:23:53,680 et vous savez comment obtenir l'accès à votre ID utilisateur - 487 00:23:53,680 --> 00:23:57,930 ce qui montre parfois dans votre l'URL du profil, sauf si vous avez choisi une 488 00:23:57,930 --> 00:24:02,070 surnom de l'URL, ou si vous avez Graph API utilisé Facebook, l' 489 00:24:02,070 --> 00:24:05,510 API disposition du public par lequel vous peut demander à Facebook de données brutes - 490 00:24:05,510 --> 00:24:07,580 vous pouvez voir ce que votre ID numérique est. 491 00:24:07,580 --> 00:24:10,880 Et il ya quelques années, essentiellement Facebook dû changer d'utiliser 492 00:24:10,880 --> 00:24:15,980 l'équivalent de ints à l'utilisation à long longtemps, car au fil du temps que les utilisateurs viennent 493 00:24:15,980 --> 00:24:19,780 et va créer beaucoup de comptes et faux comptes, même ils très facilement 494 00:24:19,780 --> 00:24:24,630 étaient en mesure d'épuiser quelque chose comme un 4 milliards de valeur possible comme un int. 495 00:24:24,630 --> 00:24:28,340 >> Donc plus sur ce genre de questions sur la route, aussi bien. 496 00:24:28,340 --> 00:24:30,750 D'accord, donc ça a été prépondérante. 497 00:24:30,750 --> 00:24:31,670 C'était imprécision. 498 00:24:31,670 --> 00:24:32,730 Un couple d'annonces rapides. 499 00:24:32,730 --> 00:24:35,710 Alors sections commencent officiellement prochain Dimanche, lundi, mardi. 500 00:24:35,710 --> 00:24:39,080 Vous entendrez par email plus tard cette semaine quant à l'affectation de la section. 501 00:24:39,080 --> 00:24:42,570 Et vous aurez également ici à ce moment-là comment changer votre section si votre 502 00:24:42,570 --> 00:24:45,660 calendrier a changé ou votre niveau de confort a maintenant changé. 503 00:24:45,660 --> 00:24:49,380 Pendant ce temps P-set et un pirate celui-ci sont en raison de ce jeudi avec la possibilité d' 504 00:24:49,380 --> 00:24:52,450 prolonger ce délai par le spécifications au vendredi 505 00:24:52,450 --> 00:24:53,830 d'une manière classique. 506 00:24:53,830 --> 00:24:57,500 >> Sachez que comprenait le problème cahier des charges fixes sont des instructions sur la 507 00:24:57,500 --> 00:25:02,770 comment utiliser l'appareil CS50, faites, ainsi que des outils spécifiques CS50 508 00:25:02,770 --> 00:25:06,540 comme style des années 50, qui peut vous fournir avec les informations de manière dynamique sur l' 509 00:25:06,540 --> 00:25:10,230 qualité de votre style de code et aussi vérifier 50, qui peut vous fournir avec 510 00:25:10,230 --> 00:25:13,160 rétroaction dynamique à votre L'exactitude de code. 511 00:25:13,160 --> 00:25:16,850 Pardonnons à ceux qui nous travaillons encore sur quelques petits défauts avec chèque de 50. 512 00:25:16,850 --> 00:25:21,490 Quelques-uns de vos camarades de classe qui ne commencent autour de quatre heures le vendredi soir quand 513 00:25:21,490 --> 00:25:25,130 le spec monta ont remarqué depuis lors quelques bugs qui nous travaillons 514 00:25:25,130 --> 00:25:29,010 à travers, et des excuses pour n'importe qui a connu des frustrations inutiles. 515 00:25:29,010 --> 00:25:30,340 La faute en est à moi. 516 00:25:30,340 --> 00:25:34,080 Mais nous suivrons sur le CS50 discuter quand ce n'est pas résolue. 517 00:25:34,080 --> 00:25:35,700 >> Ainsi, un mot sur les résultats eux-mêmes. 518 00:25:35,700 --> 00:25:38,990 Donc, ça va être une semaine ou deux avant de vous commencer à obtenir des commentaires sur ensembles de problèmes 519 00:25:38,990 --> 00:25:40,640 parce que vous n'avez pas encore un adjoint à l'enseignement. 520 00:25:40,640 --> 00:25:44,510 Et même alors, nous allons commencer à évaluer le problème C met devant nous 521 00:25:44,510 --> 00:25:46,970 revenir en arrière et évaluer zéro si que vous obtenez plus pertinents 522 00:25:46,970 --> 00:25:48,150 informations plus rapidement. 523 00:25:48,150 --> 00:25:51,870 Mais, en général par le syllabus, CS50 ensembles de problèmes sont évalués sur la 524 00:25:51,870 --> 00:25:53,580 après quatre axes - 525 00:25:53,580 --> 00:25:55,760 la portée, la justesse, la conception et le style. 526 00:25:55,760 --> 00:25:59,210 >> Portée va être un certain nombre typiquement entre zéro et cinq qui 527 00:25:59,210 --> 00:26:01,830 saisit combien la pièce qui vous peu hors. 528 00:26:01,830 --> 00:26:03,750 En général, vous voulez que ce soit cinq ans. 529 00:26:03,750 --> 00:26:05,300 Vous au moins tout essayé. 530 00:26:05,300 --> 00:26:09,330 Et remarquez que c'est un facteur multiplicatif de sorte que, ce faisant seulement une partie de l' 531 00:26:09,330 --> 00:26:12,520 problème posé n'est pas la meilleure stratégie. 532 00:26:12,520 --> 00:26:15,610 >> Pendant ce temps, plus évidente est l' importance de la décision correcte - 533 00:26:15,610 --> 00:26:18,620 tout est correct avec votre programme respecter le cahier des charges? 534 00:26:18,620 --> 00:26:21,510 Elle est pondérée délibérément plus fortement que les deux autres axes par un 535 00:26:21,510 --> 00:26:24,450 facteur de trois, parce que nous reconnaissons qui généralement vous allez passer une 536 00:26:24,450 --> 00:26:28,600 beaucoup plus de temps à courir vers le bas quelques bugs, l'obtention de votre code fonctionne, alors vous 537 00:26:28,600 --> 00:26:31,540 sont en retrait et en choisissant les noms de variables appropriées et les 538 00:26:31,540 --> 00:26:33,800 analogue, qui est à l'autre extrémité du spectre de section. 539 00:26:33,800 --> 00:26:36,160 >> Cela ne veut pas dire que le style n'est pas importante, et nous prêchons plus 540 00:26:36,160 --> 00:26:37,920 temps à la fois dans des conférences et dans les sections. 541 00:26:37,920 --> 00:26:40,520 Le style se rapporte à l'esthétique de votre code. 542 00:26:40,520 --> 00:26:43,980 Avez-vous choisi porte bien son nom des variables qui sont courtes, mais un peu 543 00:26:43,980 --> 00:26:44,680 descriptif? 544 00:26:44,680 --> 00:26:47,840 Votre code est indenté comme vous l'avez vu dans conférence et d'une manière compatible 545 00:26:47,840 --> 00:26:49,070 avec style des années 50? 546 00:26:49,070 --> 00:26:51,220 >> Enfin conception est bonne là au milieu. 547 00:26:51,220 --> 00:26:54,090 Le design est la plus dure à mettre un Doigt sur parce que c'est beaucoup plus 548 00:26:54,090 --> 00:26:55,000 subjective. 549 00:26:55,000 --> 00:26:58,610 Mais c'est peut-être le plus important de les trois axes en termes de pédagogie 550 00:26:58,610 --> 00:27:02,050 valeur au fil du temps et que ce sera la possibilité pour l'enseignement compatriotes à 551 00:27:02,050 --> 00:27:04,110 vous fournissez des informations qualitatives. 552 00:27:04,110 --> 00:27:08,100 En effet, CS50, même si nous avons ces formules et les scores, à la fin 553 00:27:08,100 --> 00:27:11,350 de la journée, ils sont très délibérément très petits seaux - des valeurs de point 554 00:27:11,350 --> 00:27:13,460 entre zéro et trois et zéro et cinq. 555 00:27:13,460 --> 00:27:17,800 Nous ne cherchons pas à tracer des lignes très grossiers entre les séries de problèmes ou entre 556 00:27:17,800 --> 00:27:21,490 étudiants, mais plutôt se concentrer autant que nous pouvons le qualitatif, longhand 557 00:27:21,490 --> 00:27:25,490 informations, soit dactylographiés ou verbale votre compagnon d'enseignement particulier, 558 00:27:25,490 --> 00:27:27,050 vous aurez la chance de connaître assez bien. 559 00:27:27,050 --> 00:27:32,340 >> Mais en général, ce sont les poids que les différents axes auront. 560 00:27:32,340 --> 00:27:35,480 Pendant ce temps, aussi, c'est important de garder à l'esprit que vous ne devriez pas supposer qu'une 561 00:27:35,480 --> 00:27:38,870 trois sur cinq est de 60% et donc à peu près défaut. 562 00:27:38,870 --> 00:27:41,410 Trois est délibérément destinée à être sorte de milieu de la route bien. 563 00:27:41,410 --> 00:27:43,480 Si vous obtenez trois, à l' début du semestre, c'est 564 00:27:43,480 --> 00:27:46,340 en effet censé être une bonne endroit pour commencer. 565 00:27:46,340 --> 00:27:50,510 Si vous obtenez deux, foires, il ya certainement du travail à payer un peu 566 00:27:50,510 --> 00:27:53,250 une plus grande attention, afin de profiter des sections et des heures de bureau. 567 00:27:53,250 --> 00:27:54,590 >> Si vous obtenez quatre pattes et Fives, tant mieux. 568 00:27:54,590 --> 00:27:57,430 Mais vraiment, nous espérons voir des trajectoires parmi les étudiants - très 569 00:27:57,430 --> 00:28:00,575 individualisée par élève, mais à partir le semestre ici dans une sorte de 570 00:28:00,575 --> 00:28:04,100 les deux à la gamme de trois mais se terminant ici dans la gamme quatre à cinq. 571 00:28:04,100 --> 00:28:05,440 C'est ce que nous cherchons vraiment. 572 00:28:05,440 --> 00:28:09,590 Et nous gardons à l'esprit que le delta vous exposez entre la semaine et de la semaine zéro 573 00:28:09,590 --> 00:28:12,170 12 quand je fais grades. 574 00:28:12,170 --> 00:28:16,380 Il n'a pas d'importance pour nous absolument comment vous juste au début si votre 575 00:28:16,380 --> 00:28:19,330 trajectoire est en effet vers le haut et fort. 576 00:28:19,330 --> 00:28:24,000 >> Intégrité en milieu scolaire - alors laissez-moi mettre mon plus de voix grave pour un instant. 577 00:28:24,000 --> 00:28:28,510 Donc, ce cours a la particularité d' envoyer plus d'étudiants que toute autre 578 00:28:28,510 --> 00:28:30,950 dans l'histoire à la carte annonce, je crois. 579 00:28:30,950 --> 00:28:34,220 Nous avons en quelque sorte perdu le compte à cette point de combien de fois cela arrive. 580 00:28:34,220 --> 00:28:37,090 Et ce n'est pas parce que les étudiants dans 50 sont pas plus malhonnête que leur 581 00:28:37,090 --> 00:28:38,690 camarades d'ailleurs. 582 00:28:38,690 --> 00:28:42,800 Mais réalisons aussi que nous sommes très bons à détecter ce genre de chose. 583 00:28:42,800 --> 00:28:45,920 >> Et c'est l'avantage qu'un classe d'informatique a en nous 584 00:28:45,920 --> 00:28:49,110 pouvons et nous ne comparer l'ensemble des élèves problème définit par paire contre tous 585 00:28:49,110 --> 00:28:51,470 d'autre part, non seulement cette année mais toutes les années antérieures. 586 00:28:51,470 --> 00:28:55,080 Nous avons la capacité, comme les étudiants en la classe, de Google et de trouver le code 587 00:28:55,080 --> 00:28:57,440 sur des sites comme github et des forums de discussion. 588 00:28:57,440 --> 00:29:00,840 Il n'y a absolument solutions aux CS50 de p-fixe flottant autour de là. 589 00:29:00,840 --> 00:29:02,710 Mais si vous pouvez les trouver, nous pouvons les trouver. 590 00:29:02,710 --> 00:29:07,130 Et tout cela est très automatisé et facile et triste pour nous de trouver. 591 00:29:07,130 --> 00:29:10,990 >> Mais je tiens à souligner, aussi, que l' politique d'intégrité académique de cours est 592 00:29:10,990 --> 00:29:13,960 très censé être très à l'opposé de cet esprit. 593 00:29:13,960 --> 00:29:17,506 En effet, cette année, nous avons reformulé les choses dans le programme d'être présent, dot 594 00:29:17,506 --> 00:29:19,790 dot dot, avec plus de détails dans le programme. 595 00:29:19,790 --> 00:29:22,860 Mais le thème principal dans le cadre est vraiment raisonnable. 596 00:29:22,860 --> 00:29:26,160 Nous reconnaissons qu'il existe une importante quantité d'pédagogique 597 00:29:26,160 --> 00:29:30,550 valeur en collaborant, dans une certaine mesure, avec ses camarades de classe, par lequel vous 598 00:29:30,550 --> 00:29:33,700 deux ou trois vous ou vous êtes plus debout sur un tableau blanc 599 00:29:33,700 --> 00:29:35,670 tableau blanc, pour ainsi parler, vos idées - 600 00:29:35,670 --> 00:29:39,480 écrivant pseudo en images, Diagramming ce devrait être le cas Mario 601 00:29:39,480 --> 00:29:41,350 vous deviez écrire le premier en pseudo-code. 602 00:29:41,350 --> 00:29:43,240 Quel devrait être l'algorithme glouton - 603 00:29:43,240 --> 00:29:46,100 comment doit-elle se comporter par problème établit un? 604 00:29:46,100 --> 00:29:50,440 >> Et ainsi se rendre compte que le comportement que nous encourageons est très 605 00:29:50,440 --> 00:29:51,470 beaucoup le long de ces lignes. 606 00:29:51,470 --> 00:29:53,890 Et dans le programme, vous verrez une tas de balles en vertu d'un 607 00:29:53,890 --> 00:29:57,740 catégorie raisonnable et non raisonnable catégorie qui nous aide à aider 608 00:29:57,740 --> 00:30:00,740 vous envelopper votre esprit autour d'où nous ne tirons cette ligne. 609 00:30:00,740 --> 00:30:04,340 Et en général, une règle décent de pouce c'est que si vous avez du mal à résoudre 610 00:30:04,340 --> 00:30:07,990 quelques bugs et votre ami ou un camarade de classe est assis à côté de vous, il est 611 00:30:07,990 --> 00:30:11,530 raisonnable pour vous de lui montrer votre code et dites, hé, pouvez-vous aider 612 00:30:11,530 --> 00:30:13,700 moi à comprendre ce qui ne va pas ici? 613 00:30:13,700 --> 00:30:17,110 >> Nous n'avons pas embrasser typiquement du côté opposé. 614 00:30:17,110 --> 00:30:20,730 Ce n'est pas une réponse adaptée à votre ami ou un camarade de classe ici pour dire, oh, 615 00:30:20,730 --> 00:30:22,510 il suffit de regarder la mienne et la figure sortir de là. 616 00:30:22,510 --> 00:30:24,400 C'est en quelque sorte déraisonnable. 617 00:30:24,400 --> 00:30:27,750 Mais avoir quelqu'un d'autre, un autre cerveau, une autre paire d'yeux regardent 618 00:30:27,750 --> 00:30:31,620 votre écran ou de regarder votre code et dire, êtes-vous sûr que vous voulez 619 00:30:31,620 --> 00:30:32,760 d'avoir une boucle ici? 620 00:30:32,760 --> 00:30:34,800 Ou êtes-vous sûr que vous voulez qui virgule ici? 621 00:30:34,800 --> 00:30:37,090 Ou oh, ce message d'erreur signifie cela. 622 00:30:37,090 --> 00:30:39,580 Ce sont très raisonnables et comportements encouragés. 623 00:30:39,580 --> 00:30:44,010 >> Les cas auxquels je faisais allusion faire bouillir plus tôt vers le bas au moment où les élèves sont 624 00:30:44,010 --> 00:30:47,350 tard dans la nuit à faire un mauvais jugement décisions et emailing leur code pour 625 00:30:47,350 --> 00:30:50,130 quelqu'un d'autre ou tout simplement en disant: ici, c'est dans Dropbox ou 626 00:30:50,130 --> 00:30:51,610 Googler tard dans la nuit. 627 00:30:51,610 --> 00:30:54,880 Et je voudrais donc encourager et vous prie, si vous n'avez ceux inévitable 628 00:30:54,880 --> 00:30:58,450 des moments de stress, vous êtes cogner contre la date limite, vous n'avez pas de fin 629 00:30:58,450 --> 00:31:01,490 jour puisque c'est déjà vendredi à ce que Point, envoyez-les têtes des cours ou 630 00:31:01,490 --> 00:31:02,330 moi-même directement. 631 00:31:02,330 --> 00:31:04,790 Dis, écoute, je suis à mon point de rupture ici. 632 00:31:04,790 --> 00:31:06,660 Ayons une conversation et comprendre. 633 00:31:06,660 --> 00:31:10,400 Le recours à l'Internet ou un autre pas comportement raisonnable n'est jamais le 634 00:31:10,400 --> 00:31:13,070 solution, et trop de votre camarades de classe ne sont plus ici sur 635 00:31:13,070 --> 00:31:15,150 campus à cause de ce manque de jugement. 636 00:31:15,150 --> 00:31:17,840 Mais il est très facile de contourner cette ligne. 637 00:31:17,840 --> 00:31:22,950 >> Et voici une petite photo pour remonter le moral vous contre Reddit sorte que maintenant 638 00:31:22,950 --> 00:31:25,720 tout sera OK. 639 00:31:25,720 --> 00:31:30,210 >> Ainsi, un bref récapitulatif, puis, de l'endroit où nous nous sommes quittés. 640 00:31:30,210 --> 00:31:33,690 Donc, la semaine dernière, rappelons que nous introduisons conditions, pas dans Scratch 641 00:31:33,690 --> 00:31:34,880 mais en C cette fois. 642 00:31:34,880 --> 00:31:38,300 Et il y avait une nouvelle syntaxe mais vraiment aucune idée nouvelle en soi. 643 00:31:38,300 --> 00:31:42,630 Nous avons eu des expressions booléennes que nous pourrions ou forment ensemble avec deux colonnes 644 00:31:42,630 --> 00:31:46,490 bars ou et avec deux esperluette, en disant que tant la gauche 645 00:31:46,490 --> 00:31:49,990 et le droit doit être vrai Pour ce faire exécuter. 646 00:31:49,990 --> 00:31:53,150 Puis nous avons eu commutateurs, que nous regardions à brièvement, mais je propose sont vraiment 647 00:31:53,150 --> 00:31:56,830 juste une syntaxe différente pour atteindre l' même genre de but si vous savez à l' 648 00:31:56,830 --> 00:31:59,270 avancer ce que vos affaires vont être. 649 00:31:59,270 --> 00:32:00,160 >> Nous avons examiné les boucles. 650 00:32:00,160 --> 00:32:03,340 Une boucle est peut-être le plus commun, ou au moins l'une des personnes qui 651 00:32:03,340 --> 00:32:05,330 atteindre typiquement pour instinctivement. 652 00:32:05,330 --> 00:32:08,240 Même si elle semble un peu cryptique, vous verrez de nombreux exemples de cette 653 00:32:08,240 --> 00:32:11,590 avant longtemps, comme vous l'avez déjà en fin de semaine dernière. 654 00:32:11,590 --> 00:32:14,280 Alors que les boucles peuvent même réaliser la même chose. 655 00:32:14,280 --> 00:32:17,550 Mais si vous voulez faire toute incrémentation ou la mise à jour de 656 00:32:17,550 --> 00:32:20,230 Les valeurs des variables, vous devez faire manuellement plus que l' 657 00:32:20,230 --> 00:32:22,440 boucle for permet avant. 658 00:32:22,440 --> 00:32:25,310 Et puis il ya la boucle do-while, qui nous permet de faire quelque chose à 659 00:32:25,310 --> 00:32:28,460 moins une fois pendant que quelque chose le reste est vrai. 660 00:32:28,460 --> 00:32:31,550 Et ce qui est particulièrement bon pour des programmes ou des jeux où vous voulez 661 00:32:31,550 --> 00:32:33,810 pour inviter l'utilisateur à quelque chose au moins une fois. 662 00:32:33,810 --> 00:32:37,110 Et puis si il ou elle ne coopère pas, vous voudrez peut-être faire 663 00:32:37,110 --> 00:32:38,420 encore et encore. 664 00:32:38,420 --> 00:32:41,270 >> Avec les variables, quant à lui, nous avions des lignes de ce type de code, ce qui pourrait 665 00:32:41,270 --> 00:32:41,950 être deux lignes. 666 00:32:41,950 --> 00:32:44,830 Vous pouvez déclarer un int appelé compteur, point-virgule. 667 00:32:44,830 --> 00:32:47,660 Ou vous pouvez simplement déclarer et définir, pour ainsi dire. 668 00:32:47,660 --> 00:32:49,950 Lui donner une valeur à la fois. 669 00:32:49,950 --> 00:32:51,890 >> Et puis enfin, nous avons parlé sur les fonctions. 670 00:32:51,890 --> 00:32:54,270 Et ce fut un bel exemple dans ce sens qu'elle illustre 671 00:32:54,270 --> 00:32:55,840 deux types de fonctions. 672 00:32:55,840 --> 00:32:59,030 L'un est GetString (), qui, encore une fois, reçoit une chaîne de caractères à partir de l'utilisateur. 673 00:32:59,030 --> 00:33:02,040 Mais GetString () est assez intéressant, pour autant que nous l'avons utilisé, 674 00:33:02,040 --> 00:33:05,620 parce que nous avons toujours utilisé avec quelque chose sur le côté gauche de l' 675 00:33:05,620 --> 00:33:06,600 signe égal. 676 00:33:06,600 --> 00:33:09,830 C'est-à-dire que GetString () renvoie une valeur. 677 00:33:09,830 --> 00:33:11,970 Elle renvoie, bien sûr, d'une chaîne. 678 00:33:11,970 --> 00:33:15,130 Et puis sur le côté gauche, nous sommes simplement sauver cette chaîne à l'intérieur d'un 679 00:33:15,130 --> 00:33:16,580 variable appelée nom. 680 00:33:16,580 --> 00:33:21,100 >> Ceci est différent, dans un sens, à partir de printf printf parce que, au moins dans notre 681 00:33:21,100 --> 00:33:23,540 utilisation ici, ne renvoie rien. 682 00:33:23,540 --> 00:33:24,960 En aparté, elle ne retourne quelque chose. 683 00:33:24,960 --> 00:33:26,380 Nous ne soucions pas ce que c'est. 684 00:33:26,380 --> 00:33:29,090 Mais il a ce qui est appelé un effet secondaire. 685 00:33:29,090 --> 00:33:31,840 Et qu'est-ce que l'effet de côté dans chaque cas que nous avons vu jusqu'à présent? 686 00:33:31,840 --> 00:33:34,720 Qu'est-ce que printf faire? 687 00:33:34,720 --> 00:33:37,780 Elle imprime quelque chose à l'écran, affichages texte ou des nombres ou quelque chose 688 00:33:37,780 --> 00:33:38,380 sur l'écran. 689 00:33:38,380 --> 00:33:41,170 Et c'est justement considéré comme un effet secondaire parce que ce n'est pas vraiment remise 690 00:33:41,170 --> 00:33:41,900 de nouveau à moi. 691 00:33:41,900 --> 00:33:44,770 Ce n'est pas une réponse à l'intérieur de une boîte noire que je peux ensuite 692 00:33:44,770 --> 00:33:46,130 atteindre dans et saisir. 693 00:33:46,130 --> 00:33:49,160 Il est juste de le faire sur son propre, beaucoup comme Colton a été branché sur cette 694 00:33:49,160 --> 00:33:52,560 boîte noire de la semaine dernière, et il a en quelque sorte magiquement tirait sur la carte 695 00:33:52,560 --> 00:33:54,500 sans moi réellement impliqué. 696 00:33:54,500 --> 00:33:55,560 Ce serait un effet secondaire. 697 00:33:55,560 --> 00:33:59,100 Mais si j'ai dû remonter dans le ici et dire, oh, voici la chaîne 698 00:33:59,100 --> 00:34:02,040 à partir de l'utilisateur, qui serait une valeur de retour. 699 00:34:02,040 --> 00:34:05,650 >> Et jusqu'à présent, nous avons seulement des fonctions utilisées que les autres ont écrit. 700 00:34:05,650 --> 00:34:09,219 Mais nous pouvons réellement faire ces sortes de choses nous-mêmes. 701 00:34:09,219 --> 00:34:12,730 Donc, je vais aller dans le CS50 appareil en marche. 702 00:34:12,730 --> 00:34:16,020 Permettez-moi de conclure sur l'onglet que nous a ouvert il ya un instant. 703 00:34:16,020 --> 00:34:18,530 Et permettez-moi d'aller de l'avant et créer un nouveau fichier. 704 00:34:18,530 --> 00:34:22,400 Et je vais aller de l'avant et appeler cela un positive.c. 705 00:34:22,400 --> 00:34:24,770 Donc, je veux faire quelque chose avec nombres positifs ici. 706 00:34:24,770 --> 00:34:27,219 Donc, je vais aller de l'avant et faire int - 707 00:34:27,219 --> 00:34:28,000 désolé - 708 00:34:28,000 --> 00:34:31,840 # Include. 709 00:34:31,840 --> 00:34:34,280 Ne faisons pas la même erreur comme avant. 710 00:34:34,280 --> 00:34:40,020 Int main (void), ouvert bouclés accolade, accolade fermée. 711 00:34:40,020 --> 00:34:41,639 >> Et maintenant, je veux faire ce qui suit. 712 00:34:41,639 --> 00:34:44,600 Je veux écrire un programme qui insiste sur le fait que l'utilisateur donne 713 00:34:44,600 --> 00:34:46,770 moi un entier positif. 714 00:34:46,770 --> 00:34:50,969 Il n'y a donc pas de fonction GetPositiveInt dans la bibliothèque CS50. 715 00:34:50,969 --> 00:34:52,610 Il ya seulement getInt (). 716 00:34:52,610 --> 00:34:55,790 Mais ce n'est pas grave parce que j'ai l' constructions avec laquelle je peux imposer une 717 00:34:55,790 --> 00:34:59,360 peu plus de contrainte sur cette valeur. 718 00:34:59,360 --> 00:35:00,990 Je pouvais faire quelque chose comme ça. 719 00:35:00,990 --> 00:35:02,780 >> Alors int n - 720 00:35:02,780 --> 00:35:04,920 et si vous tapez le long, juste réaliser Je vais revenir en arrière et 721 00:35:04,920 --> 00:35:06,430 changer certaines choses dans un instant - 722 00:35:06,430 --> 00:35:09,960 si int n est égal à getInt (). 723 00:35:09,960 --> 00:35:11,780 Et cela va mettre une partie intérieure de n int. 724 00:35:11,780 --> 00:35:13,830 Et laissez-moi être un plus descriptive. 725 00:35:13,830 --> 00:35:23,270 Permettez-moi de dire quelque chose comme j'exige que vous me donnez un entier positif. 726 00:35:23,270 --> 00:35:23,550 >> Très bien. 727 00:35:23,550 --> 00:35:25,250 Alors, juste un peu d'instructions. 728 00:35:25,250 --> 00:35:26,270 Et maintenant, que puis-je faire? 729 00:35:26,270 --> 00:35:29,840 Eh bien, je sais déjà de mon simples conditions ou des branches, comme je 730 00:35:29,840 --> 00:35:36,100 avait Scratch, je pourrais dire quelque chose que si n est inférieur ou égal à 731 00:35:36,100 --> 00:35:44,460 zéro, alors je veux faire quelque chose aiment, ce n'est pas positif. 732 00:35:44,460 --> 00:35:45,560 Et puis je pourrais faire - 733 00:35:45,560 --> 00:35:47,310 OK, mais je veux vraiment que int. 734 00:35:47,310 --> 00:35:52,020 Je ne pouvais donc aller ici et je ne pouvais genre de cette copie et cette tiret. 735 00:35:52,020 --> 00:35:52,570 Et puis, sur OK. 736 00:35:52,570 --> 00:35:56,990 Donc, si n est inférieur ou égal à zéro le faire. 737 00:35:56,990 --> 00:35:58,900 >> Maintenant, si l'utilisateur ne pas coopérer? 738 00:35:58,900 --> 00:36:01,560 Eh bien, je vais Emprunter ici. 739 00:36:01,560 --> 00:36:03,130 Et puis je vais ici et ici et ici. 740 00:36:03,130 --> 00:36:06,420 Donc, ce n'est clairement pas la solution, non? 741 00:36:06,420 --> 00:36:07,810 Parce qu'il n'y a pas de fin en vue. 742 00:36:07,810 --> 00:36:13,100 Si je veux exiger que l'utilisateur donne moi un entier positif, je peux 743 00:36:13,100 --> 00:36:14,150 réellement obtenir le int. 744 00:36:14,150 --> 00:36:15,620 Je peux alors vérifier que int. 745 00:36:15,620 --> 00:36:18,570 Mais alors je veux vérifier encore et vérifier de nouveau et vérifier de nouveau. 746 00:36:18,570 --> 00:36:21,680 Alors, évidemment, ce qui est le mieux construire à l'aide ici? 747 00:36:21,680 --> 00:36:22,840 D'accord, donc une sorte de boucle. 748 00:36:22,840 --> 00:36:25,430 >> Donc, je vais vous débarrasser la quasi-totalité de cette. 749 00:36:25,430 --> 00:36:27,320 Et je veux obtenir cette int au moins une fois. 750 00:36:27,320 --> 00:36:28,890 Alors je vais dire faire - 751 00:36:28,890 --> 00:36:32,110 et je reviendrai à la tandis que dans un instant - 752 00:36:32,110 --> 00:36:33,050 Maintenant, quoi faire? 753 00:36:33,050 --> 00:36:35,860 Je vais faire int n obtient getInt (). 754 00:36:35,860 --> 00:36:36,080 OK. 755 00:36:36,080 --> 00:36:37,250 Donc, c'est très bon. 756 00:36:37,250 --> 00:36:39,750 Et maintenant, combien de fois Je veux faire ça? 757 00:36:39,750 --> 00:36:45,770 >> Permettez-moi de l'intérieur de la boucle printf donc je ne peux demander encore et encore, 758 00:36:45,770 --> 00:36:46,740 si besoin est. 759 00:36:46,740 --> 00:36:49,720 Et ce que je veux ce tout état de le faire? 760 00:36:49,720 --> 00:36:53,870 Je veux continuer à faire ça tout ce qui est le cas? 761 00:36:53,870 --> 00:36:54,125 Ouais. 762 00:36:54,125 --> 00:36:55,390 N est inférieur ou égal à zéro. 763 00:36:55,390 --> 00:36:58,180 Donc, déjà, nous avons considérablement nettoyé ce code vers le haut. 764 00:36:58,180 --> 00:37:00,700 Nous avons emprunté un très simple construire - la boucle do-while. 765 00:37:00,700 --> 00:37:04,690 J'ai volé quelques lignes importantes de code que j'ai commencé à copier 766 00:37:04,690 --> 00:37:05,960 coller, ce qui n'était pas sage. 767 00:37:05,960 --> 00:37:09,790 Et maintenant je vais coller réellement il ici et faites-le une fois. 768 00:37:09,790 --> 00:37:12,990 >> Et maintenant, qu'est-ce que je veux faire à la fin de ce programme? 769 00:37:12,990 --> 00:37:16,810 Je vais juste dire quelque chose de simple tiens, merci pour le - et 770 00:37:16,810 --> 00:37:18,980 Je ferai% i pour int - 771 00:37:18,980 --> 00:37:23,270 barre oblique inverse n, virgule, puis fiche n, point-virgule. 772 00:37:23,270 --> 00:37:23,910 >> Très bien. 773 00:37:23,910 --> 00:37:27,290 Voyons donc ce qui se passe maintenant quand je lance ce programme. 774 00:37:27,290 --> 00:37:30,600 Je vais aller de l'avant et ne faites positive. 775 00:37:30,600 --> 00:37:30,880 Merde. 776 00:37:30,880 --> 00:37:31,600 Quelques erreurs. 777 00:37:31,600 --> 00:37:32,960 Permettez-moi de revenir en arrière jusqu'à la première. 778 00:37:32,960 --> 00:37:34,020 Ne pas travailler à travers eux vers l'arrière. 779 00:37:34,020 --> 00:37:37,000 Travailler à travers eux, de haut en bas de peur qu'ils cascade et seulement 780 00:37:37,000 --> 00:37:38,630 Qu'une chose soit fausse. 781 00:37:38,630 --> 00:37:42,532 Déclaration implicite de getInt fonction (). 782 00:37:42,532 --> 00:37:43,020 Ouais. 783 00:37:43,020 --> 00:37:44,420 Donc ce n'était pas assez. 784 00:37:44,420 --> 00:37:46,760 J'ai un peu fait la même erreur, mais un peu différent cette fois. 785 00:37:46,760 --> 00:37:51,940 J'ai besoin de non seulement comprendre mais stdio.h également cs50.h, qui comprend l' 786 00:37:51,940 --> 00:37:56,770 dites déclarations d'obtenir int, qui enseigner l'appareil, ou enseigne 787 00:37:56,770 --> 00:37:58,760 C quoi getInt () est. 788 00:37:58,760 --> 00:37:59,550 >> Permettez-moi de réenregistrer. 789 00:37:59,550 --> 00:38:02,040 Je vais ignorer les autres erreurs parce que je vais espérer qu'ils sont 790 00:38:02,040 --> 00:38:05,210 en quelque sorte liés à l'erreur J'ai déjà fixé. 791 00:38:05,210 --> 00:38:08,710 Alors laissez-moi aller de l'avant et de recompiler à rendre positif, Entrée. 792 00:38:08,710 --> 00:38:09,020 Merde. 793 00:38:09,020 --> 00:38:09,985 Trois erreurs, encore. 794 00:38:09,985 --> 00:38:12,650 Permettez-moi de remonter jusqu'à la première. 795 00:38:12,650 --> 00:38:14,320 N variables inutilisées. 796 00:38:14,320 --> 00:38:15,850 Nous n'avons pas vu cela avant. 797 00:38:15,850 --> 00:38:17,200 Et cela, aussi, est un peu énigmatique. 798 00:38:17,200 --> 00:38:18,850 C'est la sortie du compilateur. 799 00:38:18,850 --> 00:38:23,610 Et qu'est-ce que la ligne en surbrillance là - positive.c :9:13 - 800 00:38:23,610 --> 00:38:28,960 n'est pas peu dire, il est dit sur la ligne neuf positive.c, au caractère 13, 801 00:38:28,960 --> 00:38:31,510 13ème colonne, vous avez fait cette erreur. 802 00:38:31,510 --> 00:38:34,230 >> Et en particulier, il est révélateur me utilisé n variable. 803 00:38:34,230 --> 00:38:35,790 Voyons donc - 804 00:38:35,790 --> 00:38:37,150 ligne de neuf. 805 00:38:37,150 --> 00:38:40,430 J'utilise n dans le sens où Je lui donnant une valeur. 806 00:38:40,430 --> 00:38:44,200 Mais ce que le compilateur n'aime pas, c'est que je ne suis pas apparemment l'utiliser. 807 00:38:44,200 --> 00:38:45,560 Mais attendez une minute, je m'en sers. 808 00:38:45,560 --> 00:38:48,170 Dans la ligne 11, je m'en sers ici. 809 00:38:48,170 --> 00:38:52,430 Mais si je fais défiler un niveau plus bas à positive.c :11 - 810 00:38:52,430 --> 00:38:56,230 donc à la ligne 11, caractère 12, le compilateur me dit, l'utilisation de 811 00:38:56,230 --> 00:38:58,670 non déclaré identifiant n. 812 00:38:58,670 --> 00:39:02,760 >> Alors moyens non déclarés j'ai pas spécifiée en tant que 813 00:39:02,760 --> 00:39:04,970 variable avec un type de données. 814 00:39:04,970 --> 00:39:05,500 Mais attendez une minute. 815 00:39:05,500 --> 00:39:09,150 J'ai fait exactement ce que en ligne neuf. 816 00:39:09,150 --> 00:39:11,100 Donc, quelqu'un est vraiment confus ici. 817 00:39:11,100 --> 00:39:14,900 C'est moi ou le compilateur car en ligne neuf, encore une fois, je déclarer une 818 00:39:14,900 --> 00:39:18,650 int n, et je lui attribuant le valeur de getInt () retourne. 819 00:39:18,650 --> 00:39:22,930 Ensuite, je suis en utilisant cette variable n de la ligne 11 et de vérifier si sa valeur est inférieure 820 00:39:22,930 --> 00:39:24,050 supérieure ou égale à zéro. 821 00:39:24,050 --> 00:39:27,430 Mais ce n'est apparemment mauvais et cassé pourquoi? 822 00:39:27,430 --> 00:39:30,630 823 00:39:30,630 --> 00:39:32,490 Dites-le à nouveau? 824 00:39:32,490 --> 00:39:35,690 >> Ah, je dois déclarer n avant entrer dans la boucle. 825 00:39:35,690 --> 00:39:36,370 Mais pourquoi? 826 00:39:36,370 --> 00:39:39,830 Je veux dire, nous avons juste proposé il ya un peu plus que c'est bien de déclarer des variables 827 00:39:39,830 --> 00:39:43,600 sur une seule ligne, puis leur attribuer une certaine valeur. 828 00:39:43,600 --> 00:39:46,790 Une variable globale - Revenons à cette idée dans un instant. 829 00:39:46,790 --> 00:39:48,690 Pourquoi voulez-vous me mettre à l'extérieur de la boucle? 830 00:39:48,690 --> 00:40:03,170 831 00:40:03,170 --> 00:40:03,830 Il est. 832 00:40:03,830 --> 00:40:06,780 Exactement. 833 00:40:06,780 --> 00:40:09,610 >> Ainsi, quoique quelque peu contre-intuitif, Permettez-moi de résumer. 834 00:40:09,610 --> 00:40:13,510 Lorsque vous déclarez n intérieur du bloc faire là-bas - 835 00:40:13,510 --> 00:40:16,320 spécifiquement l'intérieur d' ces accolades - 836 00:40:16,320 --> 00:40:19,210 cette variable n est ce qui est appelé un champ - 837 00:40:19,210 --> 00:40:23,210 rien à voir avec notre système de notation dans le bien sûr - mais a une portée qui est 838 00:40:23,210 --> 00:40:25,190 limité à ces accolades. 839 00:40:25,190 --> 00:40:28,460 En d'autres termes, typiquement si vous déclarez une variable à l'intérieur d'un ensemble de 840 00:40:28,460 --> 00:40:33,370 accolades, cette variable existe uniquement à l'intérieur de ces accolades. 841 00:40:33,370 --> 00:40:37,320 Alors que par la seule logique, même si J'ai déclaré n en ligne neuf, il 842 00:40:37,320 --> 00:40:41,910 disparaît essentiellement de portée, disparaisse de la mémoire, pour ainsi dire, 843 00:40:41,910 --> 00:40:43,370 au moment où j'ai touché la ligne 11. 844 00:40:43,370 --> 00:40:47,370 Parce que la ligne 11 est, malheureusement, en dehors de ces accolades. 845 00:40:47,370 --> 00:40:51,540 >> Donc, je ne peux malheureusement pas résoudre ce problème en revenir à ce que je faisais avant. 846 00:40:51,540 --> 00:40:53,370 Vous pourriez d'abord le faire. 847 00:40:53,370 --> 00:40:56,370 Mais que faites-vous pas maintenant faire cyclique? 848 00:40:56,370 --> 00:40:58,260 Vous n'êtes évidemment pas se l'int cyclique. 849 00:40:58,260 --> 00:41:01,320 Ainsi, nous pouvons quitter le getInt (), et nous devrait quitter le getInt () à l'intérieur du 850 00:41:01,320 --> 00:41:04,420 boucle parce que c'est ce que nous voulons harceler l'utilisateur pour encore et encore. 851 00:41:04,420 --> 00:41:08,660 Mais il ne suffit pas d'aller jusqu'à la ligne, disons, six. 852 00:41:08,660 --> 00:41:10,150 Int n, point-virgule. 853 00:41:10,150 --> 00:41:12,990 Ne pas lui donner encore une valeur, car vous n'avez pas besoin pour l'instant d'. 854 00:41:12,990 --> 00:41:16,220 >> Mais maintenant, ici-bas, avis - ce Ce serait une erreur très facile. 855 00:41:16,220 --> 00:41:19,440 Je ne veux pas occulter mon précédent déclaration de n. 856 00:41:19,440 --> 00:41:22,830 Je veux utiliser le n que existe réellement. 857 00:41:22,830 --> 00:41:25,780 Et donc maintenant à la ligne 10, J'attribue une valeur n. 858 00:41:25,780 --> 00:41:28,580 Mais, dans la sixième ligne, je déclare n. 859 00:41:28,580 --> 00:41:32,940 Et puis-je ou puis-je pas utiliser la ligne 12 maintenant? 860 00:41:32,940 --> 00:41:37,120 Je peux parce que, entre lesquelles bouclés accolades est n déclaré aujourd'hui? 861 00:41:37,120 --> 00:41:38,770 La seule ici en ligne de cinq ans. 862 00:41:38,770 --> 00:41:40,330 Pour un ici sur la ligne 14. 863 00:41:40,330 --> 00:41:49,770 Donc, si je zoome aujourd'hui sur, enregistrez ce fichier, allez sauvegarder en et lancez make positive, il 864 00:41:49,770 --> 00:41:50,820 compilé cette fois. 865 00:41:50,820 --> 00:41:51,940 Donc, c'est déjà un progrès. 866 00:41:51,940 --> 00:41:53,640 Slash. . / Positif, Entrée. 867 00:41:53,640 --> 00:41:56,060 >> J'exige que vous me donnez un nombre entier positif. 868 00:41:56,060 --> 00:41:57,750 Négatif 1. 869 00:41:57,750 --> 00:41:59,020 Négatif 2. 870 00:41:59,020 --> 00:42:00,680 Négatif 3. 871 00:42:00,680 --> 00:42:01,760 Zéro. 872 00:42:01,760 --> 00:42:03,000 One. 873 00:42:03,000 --> 00:42:05,130 Et merci pour l'un est ce qui est maintenant imprimé. 874 00:42:05,130 --> 00:42:07,400 >> Permettez-moi d'essayer quelque chose d'autre, par curiosité. 875 00:42:07,400 --> 00:42:09,600 On me dit d'entrer un entier. 876 00:42:09,600 --> 00:42:12,870 Mais que faire si je tape plutôt dans l'agneau? 877 00:42:12,870 --> 00:42:14,460 Donc, vous voyez maintenant un autre message - 878 00:42:14,460 --> 00:42:15,350 réessayez. 879 00:42:15,350 --> 00:42:17,670 Mais nulle part dans mon code ai-je écrit réessayer. 880 00:42:17,670 --> 00:42:22,320 Alors, où, sans doute, est-ce retry invite venant, diriez-vous? 881 00:42:22,320 --> 00:42:23,540 Oui, à partir de getInt () lui-même. 882 00:42:23,540 --> 00:42:26,650 Donc, une des choses personnel de CS50 ne pour vous, au moins dans les quelques premiers 883 00:42:26,650 --> 00:42:30,400 semaines, c'est que nous avons écrit une certaine quantité de contrôle d'erreur pour faire en sorte que si 884 00:42:30,400 --> 00:42:34,260 vous appelez getInt (), vous aurez au moins récupérer un int de l'utilisateur. 885 00:42:34,260 --> 00:42:35,460 Vous n'obtiendrez pas une chaîne. 886 00:42:35,460 --> 00:42:36,440 Vous n'obtiendrez pas un chevalier. 887 00:42:36,440 --> 00:42:39,660 Vous ne serez pas obtenir quelque chose d'autre tout à fait. 888 00:42:39,660 --> 00:42:40,510 Vous obtiendrez un int. 889 00:42:40,510 --> 00:42:41,890 >> Maintenant, il ne serait pas positive. 890 00:42:41,890 --> 00:42:42,770 Il pourrait ne pas être négatif. 891 00:42:42,770 --> 00:42:44,550 Nous ne donnons aucune garantie à ce sujet. 892 00:42:44,550 --> 00:42:48,960 Mais nous allons harceler l'utilisateur de relance, tentative, recommencez jusqu'à ce qu'il ou elle fait 893 00:42:48,960 --> 00:42:49,810 coopère. 894 00:42:49,810 --> 00:42:53,085 De même, si je fais 1,23, ce n'est pas un int. 895 00:42:53,085 --> 00:42:58,400 Mais si je ne tape dans, disons, 50 ans, qui me donne une valeur que je voulais. 896 00:42:58,400 --> 00:42:59,050 >> Très bien. 897 00:42:59,050 --> 00:43:01,380 Donc pas mal. 898 00:43:01,380 --> 00:43:04,780 Vous avez des questions sur ce que nous venons de faire? 899 00:43:04,780 --> 00:43:07,930 Les plats à emporter clé étant, pour être clair, pas tellement la boucle, que nous avons vu 900 00:43:07,930 --> 00:43:10,880 avant, même si nous n'avons pas vraiment utilisée, mais la question de la portée, où 901 00:43:10,880 --> 00:43:17,045 variables peuvent uniquement être ne peuvent être utilisés au sein de certains portée spécifiée. 902 00:43:17,045 --> 00:43:19,830 >> Très bien, permettez-moi d'aborder la suggestion vous avez fait plus tôt, celle d'un 903 00:43:19,830 --> 00:43:20,860 variable globale. 904 00:43:20,860 --> 00:43:24,880 En aparté, il s'avère que l'autre solution à ce problème, mais 905 00:43:24,880 --> 00:43:28,880 typiquement une solution erronée ou une solution mal conçue, est de 906 00:43:28,880 --> 00:43:31,670 déclarer votre variable que ce qui est appelé une variable globale. 907 00:43:31,670 --> 00:43:34,610 Maintenant, je suis une sorte de violer ma définition de portée, car il ya 908 00:43:34,610 --> 00:43:37,680 ni d'accolades tout en haut et en bas d'un fichier. 909 00:43:37,680 --> 00:43:40,190 Mais l'implication de cette c'est que maintenant dans la quatrième ligne, 910 00:43:40,190 --> 00:43:41,710 n est une variable globale. 911 00:43:41,710 --> 00:43:44,460 Et comme son nom l'indique, il est seulement accessible partout. 912 00:43:44,460 --> 00:43:45,790 >> Scratch a fait ces derniers. 913 00:43:45,790 --> 00:43:48,650 Si vous avez utilisé une variable, vous pouvez vous rappeler vous aviez à choisir si c'est pour 914 00:43:48,650 --> 00:43:50,780 sprite ou pour tous les sprites. 915 00:43:50,780 --> 00:43:54,270 Eh bien, tous les sprites est juste la plus claire façon de dire mondiale. 916 00:43:54,270 --> 00:43:55,520 Ouais? 917 00:43:55,520 --> 00:44:09,690 918 00:44:09,690 --> 00:44:10,990 Ah, bonne question. 919 00:44:10,990 --> 00:44:14,310 >> Donc rappeler que dans la toute première version de mon code, quand j'ai tort 920 00:44:14,310 --> 00:44:17,700 n déclarées et définies dans la ligne neuf - 921 00:44:17,700 --> 00:44:19,980 J'ai déclaré comme une variable et je lui ai donné une valeur à 922 00:44:19,980 --> 00:44:21,160 l'opérateur d'affectation - 923 00:44:21,160 --> 00:44:22,520 cela m'a donné deux erreurs. 924 00:44:22,520 --> 00:44:26,560 Premièrement, le fait que n n'a pas été utilisé, et deux, que, dans la ligne 11 925 00:44:26,560 --> 00:44:27,770 Ce n'était pas déclarée. 926 00:44:27,770 --> 00:44:31,120 Donc, le premier que je n'ai pas adresse à l'époque. 927 00:44:31,120 --> 00:44:35,130 Il n'est pas strictement une erreur de déclarer une variable mais ne pas l'utiliser. 928 00:44:35,130 --> 00:44:38,540 Mais l'une des choses que nous avons faites dans l'appareil CS50, délibérément, 929 00:44:38,540 --> 00:44:43,340 pédagogiquement, c'est que nous avons coudés l' attentes du compilateur à faire 930 00:44:43,340 --> 00:44:46,970 vous que vous faites des choses pas seulement correctement mais vraiment correctement. 931 00:44:46,970 --> 00:44:51,520 >> Parce que si vous déclarer une variable comme n et ne jamais l'utiliser, ou de l'utiliser 932 00:44:51,520 --> 00:44:53,700 correctement, alors ce fait-il là? 933 00:44:53,700 --> 00:44:55,650 Il sert vraiment à rien. 934 00:44:55,650 --> 00:44:58,980 Et il est très facile au fil du temps, si vous ne configurez votre propre ordinateur en 935 00:44:58,980 --> 00:45:01,960 Ainsi, pour avoir juste le code qui a petits restes ici, restes là-bas. 936 00:45:01,960 --> 00:45:04,390 Et puis des mois plus tard, vous regardez en arrière et vous êtes comme, pourquoi est-ce la ligne de 937 00:45:04,390 --> 00:45:05,060 Code là? 938 00:45:05,060 --> 00:45:07,940 Et s'il n'y a aucune bonne raison, il ne vous ou vos collègues bénéficieront pas 939 00:45:07,940 --> 00:45:10,650 sur la route du devoir trébucher alors. 940 00:45:10,650 --> 00:45:12,540 >> Soit dit en passant, où est qui vient? 941 00:45:12,540 --> 00:45:16,410 Eh bien, rappelons que chaque fois que nous compilons programme, toutes ces choses est 942 00:45:16,410 --> 00:45:17,380 en cours d'impression. 943 00:45:17,380 --> 00:45:18,350 Donc, nous allons revenir à cela. 944 00:45:18,350 --> 00:45:22,230 Mais encore une fois, faire est un utilitaire qui automatise le processus de compilation par 945 00:45:22,230 --> 00:45:24,830 l'exécution du compilateur réelle appelé clang. 946 00:45:24,830 --> 00:45:27,650 Cette chose, nous voyons finalement, a à voir avec le débogage avec une spéciale 947 00:45:27,650 --> 00:45:29,060 programme appelé le débogueur. 948 00:45:29,060 --> 00:45:32,150 Cela a à voir avec l'optimisation de la Code - plus à ce sujet à l'avenir. 949 00:45:32,150 --> 00:45:33,620 Std = c99 - 950 00:45:33,620 --> 00:45:37,870 cela signifie simplement utiliser la version 1999 de C. C a été encore plus longtemps que 951 00:45:37,870 --> 00:45:40,830 , mais ils ont fait quelques belles changements 10 Plus il ya des années. 952 00:45:40,830 --> 00:45:42,690 >> Et voici ceux qui sont pertinents. 953 00:45:42,690 --> 00:45:45,880 Nous disons faire tout ce qui précédemment aurait été un avertissement 954 00:45:45,880 --> 00:45:48,560 une erreur empêchant l'étudiant de la compilation. 955 00:45:48,560 --> 00:45:51,400 Et des moyens murales font que pour un tas de choses, pas 956 00:45:51,400 --> 00:45:53,060 uniquement liée à des variables. 957 00:45:53,060 --> 00:45:54,700 Et puis, permettez-moi de défilement pour l'extrémité de cette ligne. 958 00:45:54,700 --> 00:45:56,430 Et cela aussi, nous finirons revenir. 959 00:45:56,430 --> 00:45:59,040 C'est évidemment le nom de le fichier Je compile. 960 00:45:59,040 --> 00:46:02,160 Cela rappelle le nom du fichier Je suis sortie comme son nom l' 961 00:46:02,160 --> 00:46:04,070 de mon programme exécutable. 962 00:46:04,070 --> 00:46:08,970 Cela signifie-lcs50 il suffit d'utiliser le CS50 bibliothèque, et les zéros et de uns que les 963 00:46:08,970 --> 00:46:12,390 le personnel a écrit et compilé plus tôt cette année, d'intégrer 964 00:46:12,390 --> 00:46:13,490 eux dans mon programme. 965 00:46:13,490 --> 00:46:16,130 >> Et quelqu'un sait ce-lm est? 966 00:46:16,130 --> 00:46:18,150 C'est la bibliothèque de mathématiques, ce qui est juste là, même si vous êtes 967 00:46:18,150 --> 00:46:19,320 ne pas faire de mathématiques. 968 00:46:19,320 --> 00:46:22,620 C'est juste automatiquement fournie nous en faire. 969 00:46:22,620 --> 00:46:26,540 >> Eh bien, permettez-moi de faire un autre exemple ici par l'ouverture d'un nouveau fichier. 970 00:46:26,540 --> 00:46:30,560 Et laissez-moi à sauver celui-ci comme string.c. 971 00:46:30,560 --> 00:46:37,980 Il s'avère que nous parlons de données types aujourd'hui, il ya encore plus 972 00:46:37,980 --> 00:46:40,630 passe sous le capot que nous avons vu jusqu'à présent. 973 00:46:40,630 --> 00:46:42,290 Permettez-moi de faire rapidement un programme rapide. 974 00:46:42,290 --> 00:46:44,510 Inclure stdio.h. 975 00:46:44,510 --> 00:46:45,730 Et je vais garder. 976 00:46:45,730 --> 00:46:48,110 Et vous le savez, ne me laisse pas faire l' même erreur encore et encore. 977 00:46:48,110 --> 00:46:50,540 Inclure cs50.h. 978 00:46:50,540 --> 00:46:54,870 Et permettez-moi d'aller de l'avant maintenant et faire int main (void). 979 00:46:54,870 --> 00:46:58,790 >> Et maintenant, je veux simplement faire un programme qui fait cela - de déclarer une chaîne 980 00:46:58,790 --> 00:47:03,610 appelé s et obtenir une chaîne à partir de l'utilisateur. 981 00:47:03,610 --> 00:47:05,820 Et laissez-moi faire un peu instructions ici - 982 00:47:05,820 --> 00:47:09,960 s'il vous plaît donnez-moi une corde - si l'utilisateur sait ce qu'il faut faire. 983 00:47:09,960 --> 00:47:13,190 Et puis, ici-bas ce, Je veux faire ce qui suit - 984 00:47:13,190 --> 00:47:16,060 pour int i obtient zéro. 985 00:47:16,060 --> 00:47:18,580 Encore une fois, les informaticiens en général commencer à compter à zéro, mais nous ne pouvions 986 00:47:18,580 --> 00:47:20,340 faire qu'un si nous voulions vraiment. 987 00:47:20,340 --> 00:47:27,240 Maintenant, je vais faire i est inférieur que la longueur de la chaîne de l'art. 988 00:47:27,240 --> 00:47:28,430 Alors strlen - 989 00:47:28,430 --> 00:47:29,510 S-T-R-L-E-N - 990 00:47:29,510 --> 00:47:31,650 encore une fois, c'est concis, car il est plus facile à taper, même si c'est un 991 00:47:31,650 --> 00:47:32,590 peu cryptique. 992 00:47:32,590 --> 00:47:35,290 >> C'est une fonction que nous n'avons pas utilisé avant, mais ne littéralement que - 993 00:47:35,290 --> 00:47:37,810 revenez me voir un nombre qui représente la longueur de la chaîne 994 00:47:37,810 --> 00:47:38,690 que l'utilisateur a tapé. 995 00:47:38,690 --> 00:47:41,740 Si ils ont tapé dans bonjour, il reviendrait cinq parce qu'il ya cinq 996 00:47:41,740 --> 00:47:42,890 lettres Bonjour. 997 00:47:42,890 --> 00:47:45,390 Ensuite, à chaque itération de cette boucle, i plus plus. 998 00:47:45,390 --> 00:47:49,170 Encore une fois, une norme construire même si vous n'êtes pas encore trop à l'aise ou 999 00:47:49,170 --> 00:47:50,420 familier avec elle encore. 1000 00:47:50,420 --> 00:47:53,220 >> Mais maintenant, à chaque itération de cette boucle, Remarquez ce que je vais faire. 1001 00:47:53,220 --> 00:47:56,690 Je veux aller de l'avant et d'imprimer un caractère unique - 1002 00:47:56,690 --> 00:47:59,940 si c% backslash n sur une nouvelle ligne. 1003 00:47:59,940 --> 00:48:00,990 Et puis, vous savez ce que je veux faire? 1004 00:48:00,990 --> 00:48:05,090 Quel que soit le mot que l'utilisateur tape dans, comme bonjour, je veux imprimer 1005 00:48:05,090 --> 00:48:09,530 H-E-L-L-S, un caractère par ligne. 1006 00:48:09,530 --> 00:48:13,080 En d'autres termes, je veux arriver à la caractères individuels d'une chaîne de caractères, 1007 00:48:13,080 --> 00:48:16,770 où jusqu'à présent une chaîne vient eu une séquence de caractères. 1008 00:48:16,770 --> 00:48:21,690 >> Et il s'avère que je peux faire s, le support i, fermer la parenthèse, fermez 1009 00:48:21,690 --> 00:48:23,580 parenthèse, point-virgule. 1010 00:48:23,580 --> 00:48:25,640 Et je dois faire autre chose. 1011 00:48:25,640 --> 00:48:30,570 C'est dans un fichier appelé que strlen est déclarée. 1012 00:48:30,570 --> 00:48:33,190 Donc, si je veux utiliser cette fonction, Je dois dire que le compilateur, 1013 00:48:33,190 --> 00:48:34,450 s'attendre à utiliser. 1014 00:48:34,450 --> 00:48:37,040 Maintenant, laissez-moi aller de l'avant et faire le programme appelé chaîne. 1015 00:48:37,040 --> 00:48:39,150 Dot, slash, string. 1016 00:48:39,150 --> 00:48:40,130 >> S'il vous plaît donnez-moi une corde. 1017 00:48:40,130 --> 00:48:40,900 Je vais aller de l'avant et taper. 1018 00:48:40,900 --> 00:48:43,040 Bonjour, tout en majuscules, Entrée. 1019 00:48:43,040 --> 00:48:47,390 Et maintenant, remarque J'ai imprimé ce un caractère après l'autre. 1020 00:48:47,390 --> 00:48:51,450 Ainsi, le nouveau détail ici, c'est que d'une chaîne, à la fin de la journée, ne peuvent être 1021 00:48:51,450 --> 00:48:54,810 accès par le biais de son individu caractères en introduisant le carré 1022 00:48:54,810 --> 00:48:55,840 la notation crochets. 1023 00:48:55,840 --> 00:48:59,090 Et c'est parce que d'une chaîne sous le capot est en effet une séquence de 1024 00:48:59,090 --> 00:48:59,810 caractères. 1025 00:48:59,810 --> 00:49:02,010 Mais ce qui est propre à leur sujet est dans la mémoire vive de votre ordinateur - 1026 00:49:02,010 --> 00:49:05,300 Mac, PC, quel qu'il soit - ils sont littéralement dos à dos à dos - 1027 00:49:05,300 --> 00:49:06,225 H-E-L-L-O - 1028 00:49:06,225 --> 00:49:09,920 au niveau individuel, adjacent octets dans la mémoire. 1029 00:49:09,920 --> 00:49:13,210 >> Donc, si vous voulez obtenir à la huitième tels octet, qui, dans cette boucle serait 1030 00:49:13,210 --> 00:49:16,900 support de zéro, un support, un support à deux, support de trois, quatre patte - 1031 00:49:16,900 --> 00:49:18,890 ce n'est nulle indexés jusqu'à cinq - 1032 00:49:18,890 --> 00:49:23,330 qui va imprimer H-E-L-L-O sur sa propre ligne. 1033 00:49:23,330 --> 00:49:26,320 >> Maintenant, comme un teaser, permettez-moi de vous montrer l' sortes de choses vous finirez par être 1034 00:49:26,320 --> 00:49:31,950 capable de comprendre, au moins avec un peu étroite à la recherche. 1035 00:49:31,950 --> 00:49:35,610 D'une part, ce que nous avons inclus dans aujourd'hui exemples, si vous le souhaitez, est en fait 1036 00:49:35,610 --> 00:49:38,300 l'une des toutes premières évasions pour l'iPhone. 1037 00:49:38,300 --> 00:49:40,800 Signifie jailbreaking craquer le téléphone de sorte que vous pouvez réellement utiliser sur un 1038 00:49:40,800 --> 00:49:43,380 transporteur ou installation différent votre propre logiciel. 1039 00:49:43,380 --> 00:49:45,660 Et vous remarquerez cela semble complètement énigmatique, le plus probable. 1040 00:49:45,660 --> 00:49:46,520 Mais regardez ça. 1041 00:49:46,520 --> 00:49:50,420 L'iPhone a été apparemment craqué avec une boucle, une condition if, un autre 1042 00:49:50,420 --> 00:49:52,580 état, un tas de fonctions nous n'avons pas vu. 1043 00:49:52,580 --> 00:49:54,230 >> Et encore une fois, vous n'aurez pas à première vue, probablement 1044 00:49:54,230 --> 00:49:55,620 comprendre comment cela fonctionne. 1045 00:49:55,620 --> 00:49:58,940 Mais tout ce que nous prenons sorte d' pour acquis dans notre vie moderne 1046 00:49:58,940 --> 00:50:02,040 tend effectivement à réduire voire à une certaine de ces principes fondamentaux que nous avons été 1047 00:50:02,040 --> 00:50:02,820 regarder. 1048 00:50:02,820 --> 00:50:06,680 Permettez-moi d'aller de l'avant et ouvre une autre programme, holloway.c. 1049 00:50:06,680 --> 00:50:08,970 Donc, cela aussi, c'est quelque chose que vous ne devrait pas connaître vraiment. 1050 00:50:08,970 --> 00:50:12,440 Même qu'aucun membre du personnel ou je pouvais probablement comprendre cela en consultant d' 1051 00:50:12,440 --> 00:50:15,450 parce que c'était le code de quelqu'un qui a été soumis à ce qui est 1052 00:50:15,450 --> 00:50:19,630 historiquement connu comme un occulté C concours, où vous écrivez un programme 1053 00:50:19,630 --> 00:50:24,670 qui compile et s'exécute mais il est sacrément cryptique aucun humain ne peut comprendre ce que 1054 00:50:24,670 --> 00:50:27,530 ça va faire jusqu'à ce que ils réellement l'exécuter. 1055 00:50:27,530 --> 00:50:29,940 >> Donc, en effet, si vous regardez ce code, je vois un interrupteur. 1056 00:50:29,940 --> 00:50:30,870 Je vois principale. 1057 00:50:30,870 --> 00:50:33,800 Je vois ces crochets impliquant une sorte de tableau. 1058 00:50:33,800 --> 00:50:35,970 Quelqu'un veut-il deviner ce ce programme fait 1059 00:50:35,970 --> 00:50:37,220 t-il si je n'ai Holloway? 1060 00:50:37,220 --> 00:50:39,940 1061 00:50:39,940 --> 00:50:40,750 Oui. 1062 00:50:40,750 --> 00:50:43,050 OK. 1063 00:50:43,050 --> 00:50:44,690 Bien fait. 1064 00:50:44,690 --> 00:50:48,090 Alors que le personnel et je ne peux pas comprendre ce que ces choses font. 1065 00:50:48,090 --> 00:50:51,670 >> Et maintenant, enfin, permettez-moi d'aller de l'avant et d'ouvrir un autre programme. 1066 00:50:51,670 --> 00:50:53,440 Celui-ci - 1067 00:50:53,440 --> 00:50:55,550 encore une fois, nous ferons le code source disponible en ligne - celui-ci est juste 1068 00:50:55,550 --> 00:50:57,480 sorte de joli à regarder. 1069 00:50:57,480 --> 00:50:59,750 Tout ce qu'ils ont fait est de frapper l' barre d'espace tout à fait un peu. 1070 00:50:59,750 --> 00:51:01,320 Mais c'est vrai code. 1071 00:51:01,320 --> 00:51:04,790 Donc, si vous pensez que c'est assez, si nous effectivement exécuter ce à l'invite, 1072 00:51:04,790 --> 00:51:08,970 finalement, vous verrez comment nous pourrait faire des choses comme ça. 1073 00:51:08,970 --> 00:51:14,008 >> Donc, nous allons vous laisser sur cette note et rendez-vous le mercredi. 1074 00:51:14,008 --> 00:51:18,440 >> [Jouer de la musique] 1075 00:51:18,440 --> 00:51:23,380 >> ENCEINTE 2: Lors de la prochaine CS50, les fonds fiduciaires en scène une mutinerie. 1076 00:51:23,380 --> 00:51:24,112 >> Intervenant 3: Il est là. 1077 00:51:24,112 --> 00:51:25,362 Sortez-le! 1078 00:51:25,362 --> 00:51:29,912 1079 00:51:29,912 --> 00:51:32,074 >> [Jouer de la musique]