1 00:00:00,000 --> 00:00:10,920 >> [Reproducció de música] 2 00:00:10,920 --> 00:00:14,680 >> DAVID J Malan: Molt bé, benvinguts a CS50. 3 00:00:14,680 --> 00:00:16,500 Aquest és el començament de la segona setmana. 4 00:00:16,500 --> 00:00:18,940 Una paraula d'un dels nostres amics al campus - 5 00:00:18,940 --> 00:00:22,620 si vostè està interessat, possiblement, ja sigui ara o en algun futur a llarg termini 6 00:00:22,620 --> 00:00:25,670 fins i tot, un cop més còmode, l'ensenyament els estudiants de secundària una mica 7 00:00:25,670 --> 00:00:27,680 alguna cosa sobre la informàtica, fer el cap a aquesta URL. 8 00:00:27,680 --> 00:00:32,360 Ells tenen una especial necessitat en aquest moment de mestres, sobretot si vostè té 9 00:00:32,360 --> 00:00:34,700 tingut algun contacte amb la informàtica. 10 00:00:34,700 --> 00:00:38,060 >> Així que recorda que l'última vegada, es va introduir uns tipus de dades en C, i 11 00:00:38,060 --> 00:00:40,590 és possible que hagi començat a obtenir el seu mans brutes amb aquests fins al moment 12 00:00:40,590 --> 00:00:41,940 al problema d'establir un. 13 00:00:41,940 --> 00:00:43,230 I vam tenir una xerrada. 14 00:00:43,230 --> 00:00:49,100 Així que en termes una mica tècnics, el que és un char com la coneixen avui en dia? 15 00:00:49,100 --> 00:00:51,050 >> Així que és un personatge, però anem a ser més precisos moments. 16 00:00:51,050 --> 00:00:53,735 Què s'entén per caràcter o individu carbó? 17 00:00:53,735 --> 00:00:56,700 18 00:00:56,700 --> 00:00:59,500 Un caràcter no numèric - 19 00:00:59,500 --> 00:01:00,670 pel que no necessàriament. 20 00:01:00,670 --> 00:01:04,580 Resulta que els nombres parells, fins i tot puntuació i lletres estan 21 00:01:04,580 --> 00:01:06,980 representat amb aquestes dades tipus conegut com un char. 22 00:01:06,980 --> 00:01:09,440 Així que no és necessàriament alfabètic. 23 00:01:09,440 --> 00:01:11,100 Sí? 24 00:01:11,100 --> 00:01:12,275 >> Així que és un caràcter ASCII. 25 00:01:12,275 --> 00:01:15,510 Així que si penses en la setmana zero, quan vam tenir el nostre byte de voluntaris 26 00:01:15,510 --> 00:01:19,150 venir i siguin titulars de les mans en alt o no tots, que representaven bits. 27 00:01:19,150 --> 00:01:22,450 Però en conjunt com un grup de vuit, que representaven un byte. 28 00:01:22,450 --> 00:01:26,030 I hem introduït la noció d'ASCII en aquesta conferència, que simplement és una 29 00:01:26,030 --> 00:01:28,170 mapatge entre nombres i lletres. 30 00:01:28,170 --> 00:01:32,010 I utilitza ASCII, com els éssers humans implícites, vuit bits 31 00:01:32,010 --> 00:01:33,660 per representar un caràcter. 32 00:01:33,660 --> 00:01:36,890 >> Així doncs, si vuit bits pot cada presa en un de dos valors - 33 00:01:36,890 --> 00:01:38,010 zero o un - 34 00:01:38,010 --> 00:01:40,280 Això vol dir que hi ha dues possibilitats per aquesta persona - 35 00:01:40,280 --> 00:01:41,230 zero o un - 36 00:01:41,230 --> 00:01:44,070 per a esta persona, dues per a aquest persona, dos per a aquest. 37 00:01:44,070 --> 00:01:47,450 Així, un total de dues vegades dues vegades dues vegades dues vegades 2 - 38 00:01:47,450 --> 00:01:49,700 així que dos al vuitè en total. 39 00:01:49,700 --> 00:01:54,320 Així que hi ha un nombre total de caràcters 256 possibles que pot 40 00:01:54,320 --> 00:01:55,750 representar amb vuit bits. 41 00:01:55,750 --> 00:01:59,210 >> Ara, aquells de vostès que parlen d'Àsia idiomes poden saber que hi ha més 42 00:01:59,210 --> 00:02:02,620 personatges del món que només As i Bs i Cs i Ds. 43 00:02:02,620 --> 00:02:06,130 I, en efecte, ASCII no és suficient per una gran quantitat d'idiomes del món. 44 00:02:06,130 --> 00:02:07,760 Però més sobre això en un altre moment. 45 00:02:07,760 --> 00:02:11,240 Per ara, sap que a C si vol per representar una lletra, un tros de 46 00:02:11,240 --> 00:02:15,780 puntuació, o simplement una mica de caràcters a la natura, s'utilitza un char. 47 00:02:15,780 --> 00:02:18,240 I és un byte o vuit bits. 48 00:02:18,240 --> 00:02:19,690 >> Què tal un int? 49 00:02:19,690 --> 00:02:20,780 Bé, un int és un nombre enter. 50 00:02:20,780 --> 00:02:23,175 Quants bits, si vostè recorda, era un nombre enter típicament? 51 00:02:23,175 --> 00:02:25,930 52 00:02:25,930 --> 00:02:27,512 Recordo que ningú? 53 00:02:27,512 --> 00:02:29,600 Així que és en general 32. 54 00:02:29,600 --> 00:02:32,120 En realitat, depèn de l'ordinador que utilitzeu. 55 00:02:32,120 --> 00:02:35,770 No obstant això, en l'aparell, i en una gran quantitat de ordinadors, és 32 bits o quatre 56 00:02:35,770 --> 00:02:37,140 bytes - vuit vegades 4. 57 00:02:37,140 --> 00:02:39,790 I ints només són utilitzades per emmagatzemar números, ja sigui negatius, 58 00:02:39,790 --> 00:02:41,610 positiu, o zero. 59 00:02:41,610 --> 00:02:45,250 >> I si vostè té 32 bits i només es preocupen pels números positius, pot 60 00:02:45,250 --> 00:02:48,960 qualsevol estadi quants possible sencers d'un ordinador pot representar de 61 00:02:48,960 --> 00:02:51,820 zero en un màxim? 62 00:02:51,820 --> 00:02:56,130 Pel que seria 2 a la 32, que és més o baix, quatre mil milions. 63 00:02:56,130 --> 00:02:59,720 Així doncs, aquestes potències de dos seran temes recurrents en la informàtica. 64 00:02:59,720 --> 00:03:03,930 Com veurem, són bastant convenients treballar amb fins i tot si no és prou 65 00:03:03,930 --> 00:03:05,790 fàcil de fer els càlculs al cap. 66 00:03:05,790 --> 00:03:07,000 >> Així que anem a dir més o baix, quatre mil milions. 67 00:03:07,000 --> 00:03:08,620 Ara, des de fa molt de temps - 68 00:03:08,620 --> 00:03:09,770 pot tipus de conjectura. 69 00:03:09,770 --> 00:03:10,480 És més que un int. 70 00:03:10,480 --> 00:03:12,440 Quants bits? 71 00:03:12,440 --> 00:03:14,250 Per tant 64 bits o bytes de vuit. 72 00:03:14,250 --> 00:03:17,480 Això només vol dir que vostè pot representar fins i tot nombres més grans, positiu més gran o 73 00:03:17,480 --> 00:03:19,160 grans nombres negatius. 74 00:03:19,160 --> 00:03:20,060 >> I què hi ha de surar? 75 00:03:20,060 --> 00:03:22,260 Això és un punt flotant valor de 32 bits. 76 00:03:22,260 --> 00:03:25,180 Això és només un nombre real, alguna cosa amb un punt decimal. 77 00:03:25,180 --> 00:03:30,100 Però si en canvi necessita més llocs després de la coma decimal o desitja 78 00:03:30,100 --> 00:03:33,720 representar un nombre més gran amb alguns fracció després d'ella, es pot utilitzar un 79 00:03:33,720 --> 00:03:36,260 doble, que és de 64 bits. 80 00:03:36,260 --> 00:03:38,240 >> Però hi ha una interessant portar aquí. 81 00:03:38,240 --> 00:03:42,890 Així que si ints estan limitats per 32 bits i fins i tot llargs llargs estan limitats per 64 82 00:03:42,890 --> 00:03:46,180 trossets, aquest tipus de planteja la pregunta, I si en realitat es vol explicar 83 00:03:46,180 --> 00:03:48,790 superior a 4 milions de dòlars per a un int? 84 00:03:48,790 --> 00:03:50,330 Bé, només ha d'utilitzar molt de temps. 85 00:03:50,330 --> 00:03:54,200 Però el que si voleu comptar més alta de dos a la 64, més o menys? 86 00:03:54,200 --> 00:03:55,810 >> Ara, això és un nombre enorme. 87 00:03:55,810 --> 00:03:59,250 Però amb el temps, és possible que en realitat es preocupen per aquest tipus de valors, 88 00:03:59,250 --> 00:04:03,070 especialment si vostè està utilitzant una base de dades i començant a recollir munts i munts 89 00:04:03,070 --> 00:04:06,190 i un munt de dades i assignació única nombres a cada peça de les dades. 90 00:04:06,190 --> 00:04:07,430 Així que tipus de tenir un problema. 91 00:04:07,430 --> 00:04:10,700 I de la mateixa manera, amb el punt flotant valors - flotadors o dobles - 92 00:04:10,700 --> 00:04:14,290 si només té un nombre finit de trossets, quants nombres totals vas poder 93 00:04:14,290 --> 00:04:16,980 possiblement representi? 94 00:04:16,980 --> 00:04:19,540 >> Bé, és menys clar quan es involucrar a un punt decimal. 95 00:04:19,540 --> 00:04:20,899 Però és sens dubte finit. 96 00:04:20,899 --> 00:04:24,390 Si vostè té un nombre finit de bits, un nombre finit dels éssers humans, un finita 97 00:04:24,390 --> 00:04:27,350 nombre de bombetes, segur que pot només representar un nombre finit de 98 00:04:27,350 --> 00:04:28,510 valors de coma flotant. 99 00:04:28,510 --> 00:04:33,170 Però, quants nombres reals són la part del món? 100 00:04:33,170 --> 00:04:33,680 Hi ha un infinit. 101 00:04:33,680 --> 00:04:37,280 Així que és una mena de problema, ja que no tenen una quantitat infinita de 102 00:04:37,280 --> 00:04:39,970 de memòria o la memòria RAM en l'interior dels nostres ordinadors. 103 00:04:39,970 --> 00:04:41,780 Així que algunes coses difícils poden ocórrer. 104 00:04:41,780 --> 00:04:43,900 >> Així que seguirem endavant i tractar d' expressar això aquí. 105 00:04:43,900 --> 00:04:46,240 Déjame anar per davant i obrir gedit. 106 00:04:46,240 --> 00:04:50,360 Vaig a seguir endavant i desar un fitxer anomenat "floats0.c" només per estar 107 00:04:50,360 --> 00:04:54,630 coherent amb un exemple que és disponible en línia, si vol. 108 00:04:54,630 --> 00:04:58,080 I jo seguiré endavant i definir de la següent manera - 109 00:04:58,080 --> 00:05:01,540 Vaig a seguir endavant i dir, int principal buit, com fem sovint. 110 00:05:01,540 --> 00:05:07,190 >> I després, en aquest programa, vaig a declaro un flotador, de manera que una de 32 bits 111 00:05:07,190 --> 00:05:09,700 variable anomenada f, de manera arbitrària. 112 00:05:09,700 --> 00:05:13,910 I després em vaig a guardar-hi No sé, una dècima, pel que 0,1. 113 00:05:13,910 --> 00:05:16,590 Així que vaig a expressar que com una dividit per 10, que és perfectament 114 00:05:16,590 --> 00:05:17,790 legítim en C. 115 00:05:17,790 --> 00:05:20,460 >> I després a la segona línia, simplement voleu imprimir aquest valor. 116 00:05:20,460 --> 00:05:22,950 Així recordem que podem utilitzar el familiar printf. 117 00:05:22,950 --> 00:05:25,420 No volem utilitzar% i per a un int. 118 00:05:25,420 --> 00:05:28,360 Volem utilitzar% f per un flotador. 119 00:05:28,360 --> 00:05:33,080 I llavors em vaig a fer barra invertida n, Tancament de cometes, comes, f, punt i coma. 120 00:05:33,080 --> 00:05:34,400 >> Així que aquí està el meu programa. 121 00:05:34,400 --> 00:05:35,820 Ja hi ha un error. 122 00:05:35,820 --> 00:05:38,640 Algú per qui aquest fet clic Ja vull assenyalar almenys 123 00:05:38,640 --> 00:05:40,220 un error que he fet? 124 00:05:40,220 --> 00:05:42,470 Sí? 125 00:05:42,470 --> 00:05:42,800 Si. 126 00:05:42,800 --> 00:05:47,860 Em vaig oblidar "# include" a la cim, símptoma que si intento 127 00:05:47,860 --> 00:05:50,490 compilar aquest serà que el compilador va a cridar a mi, 128 00:05:50,490 --> 00:05:52,770 dient símbol indefinit o alguna cosa per l'estil. 129 00:05:52,770 --> 00:05:55,360 No entén alguna cosa com printf. 130 00:05:55,360 --> 00:05:59,380 >> Així que vaig a fer "# include ", Deseu el fitxer. 131 00:05:59,380 --> 00:06:00,400 I ara està en millor forma. 132 00:06:00,400 --> 00:06:02,690 Però també vaig a assenyalar a terme un nou detall a l'actualitat. 133 00:06:02,690 --> 00:06:08,620 A més d'especificar el lloc titulars com a% f% i% s, es pot 134 00:06:08,620 --> 00:06:12,320 de vegades influir en el comportament d'aquest marcador de posició. 135 00:06:12,320 --> 00:06:15,540 Per exemple, en el cas d'un flotant valor del punt, si només vull 136 00:06:15,540 --> 00:06:22,200 per mostrar un decimal després de la període, puc fer realitat 0.1f. 137 00:06:22,200 --> 00:06:26,830 En altres paraules, em separo de la f i el signe de percentatge amb 0,1, només 138 00:06:26,830 --> 00:06:30,200 dient printf, és possible que tingui un tot grup de nombres després de la coma decimal 139 00:06:30,200 --> 00:06:30,930 punt per a mi. 140 00:06:30,930 --> 00:06:32,870 Però jo només vull veure a un d'ells. 141 00:06:32,870 --> 00:06:36,280 >> Així que seguiré endavant ara i estalviï aquest programa, entrar al meu terminal 142 00:06:36,280 --> 00:06:41,870 finestra, i jo seguiré endavant i el tipus de fer surar 0, entrar. 143 00:06:41,870 --> 00:06:44,930 Veig aquesta línia un tant críptic que començarà a tenir més sentit, ja que 144 00:06:44,930 --> 00:06:46,900 es burlen d'ell, a part aquesta setmana i la vinent. 145 00:06:46,900 --> 00:06:50,480 Ara vaig a seguir endavant i executar zero flotador. 146 00:06:50,480 --> 00:06:52,020 I, maleïda sigui. 147 00:06:52,020 --> 00:06:54,880 >> Així que hi ha un altre error aquí per alguna raó. 148 00:06:54,880 --> 00:07:02,490 Estic bastant segur que una desena part, o un dividit per 10, no és 0.0. 149 00:07:02,490 --> 00:07:04,590 Potser estic sense mirar a suficients dígits. 150 00:07:04,590 --> 00:07:08,580 Per què no puc dir dues 0.2 per veure dos decimals en lloc d'un de sol. 151 00:07:08,580 --> 00:07:11,810 Deixa tornar a la meva finestra de terminal aquí i va colpejar un parell de vegades per 152 00:07:11,810 --> 00:07:12,840 veure a la meva història. 153 00:07:12,840 --> 00:07:15,910 No fer surar zero una altra vegada, i després de nou. 154 00:07:15,910 --> 00:07:17,730 I ara entrar. 155 00:07:17,730 --> 00:07:20,000 >> I ara estic bastant segur que això és un error. 156 00:07:20,000 --> 00:07:23,030 I el que podia fer tres i quatre, i estic probablement seguirà veient a zeros. 157 00:07:23,030 --> 00:07:24,880 Llavors, ¿on és l'error? 158 00:07:24,880 --> 00:07:27,910 Una dividit per 10 hauria de ser 0,1. 159 00:07:27,910 --> 00:07:30,310 Algú vol prendre una punyalada en el la qüestió fonamental és? 160 00:07:30,310 --> 00:07:32,400 Sí? 161 00:07:32,400 --> 00:07:33,420 Tots dos són nombres enters. 162 00:07:33,420 --> 00:07:33,920 ¿I què? 163 00:07:33,920 --> 00:07:37,820 Així que amb un dividit per 10, que és el que faig a l'aritmètica. 164 00:07:37,820 --> 00:07:41,185 I em fa 0.1. 165 00:07:41,185 --> 00:07:41,660 >> Si. 166 00:07:41,660 --> 00:07:43,240 I el que és realment la qüestió. 167 00:07:43,240 --> 00:07:46,700 Quan vostè pren un sencer en un ordinador i ho divideixes per un altre nombre enter, 168 00:07:46,700 --> 00:07:50,430 l'ordinador per defecte va a suposem que desitja un sencer. 169 00:07:50,430 --> 00:07:54,620 El problema, però, és clar, és 0,1 que no és un nombre enter. 170 00:07:54,620 --> 00:07:55,680 És un nombre real. 171 00:07:55,680 --> 00:07:59,610 I així, el que l'equip fa per per defecte és simplement llença a les escombraries 172 00:07:59,610 --> 00:08:01,070 sobretot després del punt decimal. 173 00:08:01,070 --> 00:08:03,380 No arrodonir cap amunt o avall en si. 174 00:08:03,380 --> 00:08:06,480 Simplement tira a les escombraries tot el que després del punt decimal. 175 00:08:06,480 --> 00:08:07,430 I ara que té sentit. 176 00:08:07,430 --> 00:08:09,740 Perquè ara estem clarament va deixar amb zero. 177 00:08:09,740 --> 00:08:10,250 >> Però espereu un minut. 178 00:08:10,250 --> 00:08:11,840 No estic veient un zero int. 179 00:08:11,840 --> 00:08:14,910 En realitat estic veient 0.00. 180 00:08:14,910 --> 00:08:16,340 Llavors, com conciliar això ara? 181 00:08:16,340 --> 00:08:22,850 Si un dividit per 10 és igual a zero, però estic veure 0.00, on està rebent 182 00:08:22,850 --> 00:08:24,250 convertit de nou en un nombre real? 183 00:08:24,250 --> 00:08:25,500 Si. 184 00:08:25,500 --> 00:08:29,850 185 00:08:29,850 --> 00:08:30,630 Exactament. 186 00:08:30,630 --> 00:08:35,600 >> Així que aquí, en línia de cinc, quan en realitat botiga que 0.1, el qual és 187 00:08:35,600 --> 00:08:39,549 truncat a zero, a l'interior d'un flotador, això és efectivament equivalent a 188 00:08:39,549 --> 00:08:42,100 emmagatzemar no com un int, però, de fet, com un flotador. 189 00:08:42,100 --> 00:08:46,540 D'altra banda, estic a continuació, utilitzant printf per explícitament imprimir aquest nombre a dues 190 00:08:46,540 --> 00:08:49,740 decimals tot i que hi ha podria no ser en realitat cap. 191 00:08:49,740 --> 00:08:51,020 >> Així que aquest tipus de merda, no? 192 00:08:51,020 --> 00:08:53,640 Pel que sembla, no es pot fer matemàtiques, almenys en aquest nivell de 193 00:08:53,640 --> 00:08:55,600 de precisió, en un ordinador. 194 00:08:55,600 --> 00:08:56,930 Però sens dubte hi ha una solució. 195 00:08:56,930 --> 00:09:00,410 Quina és la solució més simple que podria potser fer, encara que sigui intuïtiva per 196 00:09:00,410 --> 00:09:01,130 solucionar això? 197 00:09:01,130 --> 00:09:02,380 Sí? 198 00:09:02,380 --> 00:09:04,700 199 00:09:04,700 --> 00:09:06,574 Gireu els sencers en - 200 00:09:06,574 --> 00:09:06,976 si. 201 00:09:06,976 --> 00:09:10,420 Encara que no estic molt segur del que és realment està passant aquí, si 202 00:09:10,420 --> 00:09:13,440 fonamentalment té a veure amb aquests dos estar sencers, bé, per què no ho faig jo 203 00:09:13,440 --> 00:09:18,230 fer que el 10,0, de manera que aquest 1.0, torneu a desar el fitxer. 204 00:09:18,230 --> 00:09:20,990 Permetin-me tornar a la inferior i recompilar. 205 00:09:20,990 --> 00:09:23,030 Permetin-me ara tornar a executar. 206 00:09:23,030 --> 00:09:23,420 I allà - 207 00:09:23,420 --> 00:09:27,690 Ara, tinc la meva desena representats com 0,10. 208 00:09:27,690 --> 00:09:28,420 >> Està bé. 209 00:09:28,420 --> 00:09:29,220 Així que això no és dolent. 210 00:09:29,220 --> 00:09:31,730 I permetin-me assenyalar una altra manera podríem haver resolt això. 211 00:09:31,730 --> 00:09:35,580 Permetin-me realment aconseguir la regressió en el temps que quan vam haver aquest és un 212 00:09:35,580 --> 00:09:36,680 Fa desè d'un moment. 213 00:09:36,680 --> 00:09:40,800 I m'ho dius a mi seguir endavant i tornar a guardar l'arxiu com un nom de fitxer diferent, només per 214 00:09:40,800 --> 00:09:41,750 tenir una mica de control. 215 00:09:41,750 --> 00:09:43,450 Així que va ser una versió. 216 00:09:43,450 --> 00:09:45,520 I ara me n'aniré endavant i dugui a terme una versió més. 217 00:09:45,520 --> 00:09:48,540 Anem a trucar a aquesta versió 02:00 zero indexats. 218 00:09:48,540 --> 00:09:51,280 >> I que faré en lloc això - saps què? 219 00:09:51,280 --> 00:09:54,400 Addició de punt zero funciona en aquest cas. 220 00:09:54,400 --> 00:09:56,060 Però suposem que fos una variable. 221 00:09:56,060 --> 00:09:57,680 Supòsit 10 van ser una variable. 222 00:09:57,680 --> 00:10:00,680 En altres paraules, suposem que no podia hard-codi només 0,0 al final 223 00:10:00,680 --> 00:10:02,340 d'aquesta expressió aritmètica. 224 00:10:02,340 --> 00:10:05,820 Bé, jo puc fer realitat una cosa entre parèntesis es diu fosa. 225 00:10:05,820 --> 00:10:11,920 Puc llançar aquest nombre enter de 10 a un flotador, i puc llançar que un sencer en un 226 00:10:11,920 --> 00:10:12,800 surar, també. 227 00:10:12,800 --> 00:10:17,190 A continuació, els càlculs que va a fer 1.0 està efectivament dividit per 10,0, 228 00:10:17,190 --> 00:10:19,250 el resultat que va en f com abans. 229 00:10:19,250 --> 00:10:26,130 Així que si a compilar això com fan carrosses 2, i ara sura 2, amb si mateix 230 00:10:26,130 --> 00:10:27,020 respondre, també. 231 00:10:27,020 --> 00:10:29,640 >> Així que aquest és un exemple bastant artificial, per resoldre aquest problema 232 00:10:29,640 --> 00:10:31,400 mitjançant la introducció de fosa. 233 00:10:31,400 --> 00:10:34,410 Però, en general, de fosa serà una cosa molt poderós, especialment per 234 00:10:34,410 --> 00:10:38,180 problema va fixar dos en el termini d'una setmana, quan Per convertir un tipus de dades 235 00:10:38,180 --> 00:10:41,800 un altre que al final de la dia es representen de la mateixa manera. 236 00:10:41,800 --> 00:10:44,970 Al final del dia, cadascun dels El que hem parlat fins ara és 237 00:10:44,970 --> 00:10:46,710 només sencers sota la campana. 238 00:10:46,710 --> 00:10:48,950 O si això és massa baix nivell per et, són només números 239 00:10:48,950 --> 00:10:49,750 sota de la caputxa. 240 00:10:49,750 --> 00:10:52,850 Fins i tot els personatges, de nou, recorden des de la setmana zero, són nombres 241 00:10:52,850 --> 00:10:53,990 sota de la caputxa. 242 00:10:53,990 --> 00:10:57,240 >> Què vol dir, que pot convertir entre diferents tipus de nombres si 243 00:10:57,240 --> 00:10:58,060 són només bits. 244 00:10:58,060 --> 00:11:01,020 Podem convertir entre nombres i si les cartes són només 245 00:11:01,020 --> 00:11:02,580 bits, i viceversa. 246 00:11:02,580 --> 00:11:07,170 I de fosa d'aquesta manera és un mecanisme de programació que permet a la força 247 00:11:07,170 --> 00:11:10,970 canviar un tipus de dades a un altre. 248 00:11:10,970 --> 00:11:14,570 Per desgràcia, això no és tan senzill com podria haver agradat. 249 00:11:14,570 --> 00:11:19,220 >> Vaig a tornar a entrar en carrosses 1, que era la més simple, més 250 00:11:19,220 --> 00:11:22,830 un de senzill amb 0.0 s'afegeix a cada un. 251 00:11:22,830 --> 00:11:25,260 I així com un repàs ràpid, m'ho dius a mi seguir endavant i tornar a compilar 252 00:11:25,260 --> 00:11:27,670 això, fan carrosses 2 - 253 00:11:27,670 --> 00:11:30,300 Lamentablement, això és fer carrosses 1. 254 00:11:30,300 --> 00:11:32,050 I ara anem a córrer carrosses 1. 255 00:11:32,050 --> 00:11:34,810 I a la part inferior, observi que de fet entenc 0.1. 256 00:11:34,810 --> 00:11:36,165 Així, problema resolt. 257 00:11:36,165 --> 00:11:37,280 >> Però encara no. 258 00:11:37,280 --> 00:11:40,000 Ara seré una mica curiós, i vaig a tornar al meu 259 00:11:40,000 --> 00:11:41,620 sentència printf i dir, saps què? 260 00:11:41,620 --> 00:11:44,090 M'agradaria confirmar que aquesta és realment una desena part. 261 00:11:44,090 --> 00:11:47,890 I vaig a voler veure aquesta a, diguem, 5 decimals. 262 00:11:47,890 --> 00:11:48,570 No és un problema. 263 00:11:48,570 --> 00:11:52,020 Com canvi el dos per cinc, I recompileu amb maquillatge. 264 00:11:52,020 --> 00:11:53,770 Em torna a executar com a flota gener. 265 00:11:53,770 --> 00:11:54,990 Mirant bastant bo. 266 00:11:54,990 --> 00:11:58,570 Els meus revisions podria acabar allà, però M'estic posant una mica més aventurer. 267 00:11:58,570 --> 00:12:00,330 Jo canviaré 0,5-0,10. 268 00:12:00,330 --> 00:12:03,440 Vull veure 10 dígits després el lloc decimal. 269 00:12:03,440 --> 00:12:09,060 >> I jo vaig a seguir endavant i tornar a compilar això i tornar a executar flota gener. 270 00:12:09,060 --> 00:12:13,060 Que tipus de penediment d'haver provat aquest més perquè els meus matemàtiques no és tan 271 00:12:13,060 --> 00:12:14,320 corregir més, sembla. 272 00:12:14,320 --> 00:12:15,630 Però espereu un minut, potser això és només una casualitat. 273 00:12:15,630 --> 00:12:17,810 Potser l'equip està actuant una mica estrany. 274 00:12:17,810 --> 00:12:21,810 Deixin-me seguir endavant i fer 20 punts decimals i assegurar-me que sé 275 00:12:21,810 --> 00:12:22,540 com fer matemàtiques. 276 00:12:22,540 --> 00:12:23,460 Sé com programar. 277 00:12:23,460 --> 00:12:26,960 Feu carrosses 1, recompilar, i maleïda sigui. 278 00:12:26,960 --> 00:12:31,110 Això és realment, realment arribar lluny de la marca. 279 00:12:31,110 --> 00:12:32,490 >> Llavors, què està passant aquí? 280 00:12:32,490 --> 00:12:36,050 Intuïtivament, en base als supòsits abans sobre la mida dels tipus de dades, 281 00:12:36,050 --> 00:12:38,040 que ha d'estar passant aquí sota de la caputxa? 282 00:12:38,040 --> 00:12:39,290 Sí? 283 00:12:39,290 --> 00:12:43,000 284 00:12:43,000 --> 00:12:43,590 Exactament. 285 00:12:43,590 --> 00:12:46,480 Si desitja que aquest gran precisió, i això és una diables d'un munt de precisió - 286 00:12:46,480 --> 00:12:48,770 20 números després del punt decimal. 287 00:12:48,770 --> 00:12:51,990 Vostè no pot representar una nombre arbitrari menys que tingui una 288 00:12:51,990 --> 00:12:52,930 nombre arbitrari de bits. 289 00:12:52,930 --> 00:12:54,190 Però no ho fem. 290 00:12:54,190 --> 00:12:57,200 Per a un flotador, només tenim 32 bits. 291 00:12:57,200 --> 00:13:02,260 >> Així que si 32 bits només poden ser permutats en un manera - igual que els nostres éssers humans en, etapa 292 00:13:02,260 --> 00:13:05,780 mans amunt o cap avall - en un nombre finit de maneres, només hi ha un nombre finit 293 00:13:05,780 --> 00:13:08,640 dels nombres reals es poden representar amb aquests bits. 294 00:13:08,640 --> 00:13:10,500 I així, l'equip amb el temps haurà de 295 00:13:10,500 --> 00:13:11,730 començar a tallar cantonades. 296 00:13:11,730 --> 00:13:15,500 L'ordinador pot ocultar els detalls de nosaltres per una mica de temps. 297 00:13:15,500 --> 00:13:18,880 Però si comencem a ficar els números i mirant cada vegada més lluny en el 298 00:13:18,880 --> 00:13:23,220 posterior números al nombre enter, llavors comencem a veure que és 299 00:13:23,220 --> 00:13:26,480 en realitat s'aproxima a la idea d'una desena part. 300 00:13:26,480 --> 00:13:29,860 >> I així resulta que, tràgicament, hi ha un nombre infinit de nombres 301 00:13:29,860 --> 00:13:35,060 no podem representar amb precisió en un ordinador, almenys amb un finit 302 00:13:35,060 --> 00:13:38,030 nombre de bits, un nombre finit quantitat de RAM. 303 00:13:38,030 --> 00:13:41,210 Ara, per desgràcia, això a vegades té conseqüències en el món real. 304 00:13:41,210 --> 00:13:45,980 Si les persones no arriben a apreciar aquest o una espècie de donar per fet el fet 305 00:13:45,980 --> 00:13:48,310 que el seu equip s'acaba de fer el que que diuen que fer i no fer 306 00:13:48,310 --> 00:13:51,430 entendre aquests subjacent detalls de representació - 307 00:13:51,430 --> 00:13:55,290 que, francament, en algunes llengües són ocultes per a l'usuari, a diferència de C - 308 00:13:55,290 --> 00:13:56,500 algunes coses dolentes poden succeir. 309 00:13:56,500 --> 00:13:58,650 >> I el que jo pensava que faríem és fer un pas enrere. 310 00:13:58,650 --> 00:14:00,420 I es tracta d'una vídeo de vuit minuts. 311 00:14:00,420 --> 00:14:04,200 Es va emetre fa uns anys, i dóna penetracions en realitat el que pot sortir 312 00:14:04,200 --> 00:14:09,290 malament quan menors d'apreciar aquestes tipus de detalls en el tot-massa 313 00:14:09,290 --> 00:14:10,080 món real. 314 00:14:10,080 --> 00:14:12,965 Si poguéssim apagar els llums durant uns pocs minuts. 315 00:14:12,965 --> 00:14:14,360 >> ALTAVEU 1: Ara tornem a l'enginyeria 316 00:14:14,360 --> 00:14:17,160 desastres en Meravelles Modernes. 317 00:14:17,160 --> 00:14:18,680 >> Ordinadors - 318 00:14:18,680 --> 00:14:21,340 tots hem arribat a acceptar la problemes sovint frustrants 319 00:14:21,340 --> 00:14:23,170 d'anar amb ells. 320 00:14:23,170 --> 00:14:27,570 Errors, virus i errors de programari són petits preus a pagar pel 321 00:14:27,570 --> 00:14:28,960 conveniència. 322 00:14:28,960 --> 00:14:32,040 Però en l'alta tecnologia i d'alta velocitat programa espacial militar i 323 00:14:32,040 --> 00:14:38,650 aplicacions, el problema més petit pot ser ampliada cap al desastre. 324 00:14:38,650 --> 00:14:44,480 >> El 4 de juny de 1996, els científics disposats a llançar un coet no tripulat Ariane 5. 325 00:14:44,480 --> 00:14:48,700 Portava satèl · lits científics dissenyats per establir amb precisió com 326 00:14:48,700 --> 00:14:53,250 camp magnètic de la Terra interactua amb els vents solars. 327 00:14:53,250 --> 00:14:57,540 El coet va ser construït per a l'Europeu Agència Espacial i tret de la seva 328 00:14:57,540 --> 00:14:59,906 instal · lació a la costa de la Guaiana Francesa. 329 00:14:59,906 --> 00:15:03,660 >> JACK Ganssle: En uns 37 segons d'iniciat el vol, que va notar per primera vegada 330 00:15:03,660 --> 00:15:04,910 alguna cosa anava malament. 331 00:15:04,910 --> 00:15:08,130 Els filtres es gira sobre un eix en de manera que en realitat no hauria. 332 00:15:08,130 --> 00:15:12,380 Al voltant de 40 segons de vol, clarament que el vehicle estava en problemes. 333 00:15:12,380 --> 00:15:14,400 I va ser llavors quan es va fer una decisió de destruir. 334 00:15:14,400 --> 00:15:18,520 L'oficial de seguretat de gamma, amb enormes budells, pressiona el botó, 335 00:15:18,520 --> 00:15:23,900 explotar el coet abans que pogués convertir-se en un perill per a la seguretat pública. 336 00:15:23,900 --> 00:15:27,810 >> ALTAVEU 1: Aquest va ser el primer viatge l'Ariane 5, i la seva destrucció 337 00:15:27,810 --> 00:15:32,020 es va dur a terme a causa d'un defecte incorporat en el programari del coet. 338 00:15:32,020 --> 00:15:33,980 >> JACK Ganssle: El problema a l'Ariane era que no hi havia un nombre 339 00:15:33,980 --> 00:15:36,390 que va requerir 64 bits per expressar. 340 00:15:36,390 --> 00:15:39,420 I volien convertir a un nombre de 16 bits. 341 00:15:39,420 --> 00:15:43,130 Se suposa que el nombre mai va ser serà molt gran, que la majoria dels 342 00:15:43,130 --> 00:15:46,810 els dígits en el de 64 bits nombre eren zeros. 343 00:15:46,810 --> 00:15:48,270 Es van equivocar. 344 00:15:48,270 --> 00:15:51,380 >> ALTAVEU 1: La incapacitat d'un programari programa per acceptar el tipus de 345 00:15:51,380 --> 00:15:55,350 nombre generat per altra era en l'arrel de la falla. 346 00:15:55,350 --> 00:15:59,970 El desenvolupament de programari s'havia convertit en un part costosa de la nova tecnologia. 347 00:15:59,970 --> 00:16:03,980 El coet Ariane 4 ha estat molt èxit, pel que gran part del programari 348 00:16:03,980 --> 00:16:07,480 creat per a ella també era utilitzat en el Ariane 5. 349 00:16:07,480 --> 00:16:11,980 >> PHILIP COYLE: El problema bàsic era que l'Ariane 5 va ser més ràpid, 350 00:16:11,980 --> 00:16:13,720 accelerat més ràpid. 351 00:16:13,720 --> 00:16:17,250 I el programari no tenia representar per això. 352 00:16:17,250 --> 00:16:20,770 >> ALTAVEU 1: La destrucció del coet va ser un gran desastre financer, 353 00:16:20,770 --> 00:16:24,200 tot es deu a un error de programari minuts. 354 00:16:24,200 --> 00:16:27,820 Però aquesta no era la primera vegada que les dades problemes de conversió havien plagat moderna 355 00:16:27,820 --> 00:16:30,620 tecnologia de coets. 356 00:16:30,620 --> 00:16:34,480 >> JACK Ganssle: El 1991, amb l'inici de la primera Guerra del Golf, la Patriot 357 00:16:34,480 --> 00:16:38,610 míssils experimentar una classe similar d'un problema de conversió de nombre. 358 00:16:38,610 --> 00:16:44,910 Com a resultat, 28 soldats nord-americans van ser van morir i unes 100 van resultar ferits 359 00:16:44,910 --> 00:16:48,600 quan el Patriot, que se suposava per protegir contra els Scud entrants, 360 00:16:48,600 --> 00:16:51,630 deixat de disparar un míssil. 361 00:16:51,630 --> 00:16:55,110 >> ALTAVEU 1: Quan l'Iraq va envair Kuwait i America va llançar Tempesta del Desert a 362 00:16:55,110 --> 00:17:00,570 principis de 1991, les bateries de míssils Patriot van ser desplegats per protegir l'Aràbia Saudita 363 00:17:00,570 --> 00:17:04,760 i Israel de l'Scud iraquià atacs amb míssils. 364 00:17:04,760 --> 00:17:09,720 El Patriot és un mitjà abast EUA sistema de míssils terra-aire fabricats per 365 00:17:09,720 --> 00:17:11,569 l'empresa Raytheon. 366 00:17:11,569 --> 00:17:16,410 >> Teodoro Postol: La mida de la Patriot si interceptor és més o menys 367 00:17:16,410 --> 00:17:17,710 20 peus de llarg. 368 00:17:17,710 --> 00:17:20,800 I pesa al voltant de 2000 lliures. 369 00:17:20,800 --> 00:17:22,940 I porta una ogiva d'al voltant de - 370 00:17:22,940 --> 00:17:24,905 Crec que és al voltant de 150 lliures. 371 00:17:24,905 --> 00:17:31,030 I el propi cap de combat és un alt explosiu que té 372 00:17:31,030 --> 00:17:33,270 fragments al seu voltant. 373 00:17:33,270 --> 00:17:37,490 La carcassa del cap de combat està dissenyada actuar com perdigons. 374 00:17:37,490 --> 00:17:40,720 >> ALTAVEU 1: Els míssils es van realitzar quatre per contenidor i són transportats 375 00:17:40,720 --> 00:17:43,050 per un semiremolc. 376 00:17:43,050 --> 00:17:47,490 >> PHILIP COYLE: The Patriot antimíssils sistema torna al 377 00:17:47,490 --> 00:17:50,710 menys de 20 anys. 378 00:17:50,710 --> 00:17:54,350 Va ser dissenyat originalment com un míssil de defensa aèria per 379 00:17:54,350 --> 00:17:56,190 enderrocar avions enemics. 380 00:17:56,190 --> 00:18:02,490 A la primera Guerra del Golf, quan la guerra va arribar, l'Exèrcit volia usar 381 00:18:02,490 --> 00:18:05,535 per enderrocar míssils Scud, no avions. 382 00:18:05,535 --> 00:18:09,310 La força aèria iraquiana no era tant d'un problema. 383 00:18:09,310 --> 00:18:12,450 Però l'exèrcit estava preocupat per míssils Scud. 384 00:18:12,450 --> 00:18:15,950 I pel que va tractar de millorar la Patriot. 385 00:18:15,950 --> 00:18:18,750 >> ALTAVEU 1: interceptar un míssil enemic viatjant a Mach cinc anys era 386 00:18:18,750 --> 00:18:20,890 serà un repte suficient. 387 00:18:20,890 --> 00:18:25,590 Però quan el Patriot es va precipitar en servei, l'exèrcit no estava al tant d'un 388 00:18:25,590 --> 00:18:31,710 Modificació de l'Iraq que va fer la seva Scud gairebé impossible d'assolir. 389 00:18:31,710 --> 00:18:35,240 >> Teodoro Postol: El que va passar és els Scud que eren 390 00:18:35,240 --> 00:18:36,570 venir a eren inestables. 391 00:18:36,570 --> 00:18:37,532 Van ser desplaçament. 392 00:18:37,532 --> 00:18:43,220 La raó d'això era que els iraquians, en per obtenir 600 quilòmetres d'un 393 00:18:43,220 --> 00:18:47,530 Míssils de 300 quilòmetres de distància, es pes de l'ogiva davantera. 394 00:18:47,530 --> 00:18:49,290 Van prendre el cap més lleugera. 395 00:18:49,290 --> 00:18:53,110 Així que ara la Patriot està tractant venir al Scud. 396 00:18:53,110 --> 00:18:56,470 I la major part del temps, l'aclaparadora majoria de les vegades, ho faria igual 397 00:18:56,470 --> 00:18:58,730 volar per l'Scud. 398 00:18:58,730 --> 00:19:01,760 >> ALTAVEU 1: Una vegada que el sistema Patriot els operadors es van adonar de la Patriot es va perdre 399 00:19:01,760 --> 00:19:06,690 el seu objectiu, que va detonar els Patriots cap per evitar possibles 400 00:19:06,690 --> 00:19:10,300 baixes si es permetia a caure a terra. 401 00:19:10,300 --> 00:19:14,540 >> Teodoro Postol: Això va ser el que més persones van veure com a grans boles de foc al cel 402 00:19:14,540 --> 00:19:20,350 i incomprès com intercepta d'ogives Scud. 403 00:19:20,350 --> 00:19:23,320 >> ALTAVEU 1: Encara que en el cel nocturn Patriots semblaven ser èxit 404 00:19:23,320 --> 00:19:27,530 destruir míssils Scud, en Dhahran no podria haver error sobre el seu 405 00:19:27,530 --> 00:19:29,140 rendiment. 406 00:19:29,140 --> 00:19:34,180 No, el sistema de radar del Patriot perdut seguiment d'un Scud entrant i mai 407 00:19:34,180 --> 00:19:36,380 posat en marxa a causa d'un defecte de programari. 408 00:19:36,380 --> 00:19:39,890 409 00:19:39,890 --> 00:19:42,700 >> Va ser als israelians que va descobrir per primera vegada que el més llarg és el sistema de 410 00:19:42,700 --> 00:19:48,020 estava en, més gran és el temps de discrepància es va fer a causa d'un rellotge 411 00:19:48,020 --> 00:19:50,470 incrustat a l'ordinador del sistema. 412 00:19:50,470 --> 00:19:54,640 >> JACK Ganssle: Unes dues setmanes abans de la tragèdia en Dhahran, els israelians 413 00:19:54,640 --> 00:19:58,440 informar al Departament de Defensa que el sistema estava perdent el temps. 414 00:19:58,440 --> 00:20:01,280 Després de vuit hores de funcionament, es van adonar que el sistema està 415 00:20:01,280 --> 00:20:03,530 que es vegi amb menys precisa. 416 00:20:03,530 --> 00:20:07,710 El Departament de Defensa va respondre comptant totes les bateries Patriot 417 00:20:07,710 --> 00:20:10,500 per no deixar els sistemes durant molt de temps. 418 00:20:10,500 --> 00:20:12,430 Mai van dir el que molt temps va ser. 419 00:20:12,430 --> 00:20:13,330 Vuit hores? 420 00:20:13,330 --> 00:20:13,810 10 hores? 421 00:20:13,810 --> 00:20:14,990 1000 hores? 422 00:20:14,990 --> 00:20:17,150 Ningú ho sabia. 423 00:20:17,150 --> 00:20:20,220 >> ALTAVEU 1: La bateria Patriot estacionat a la caserna de Dhahran 424 00:20:20,220 --> 00:20:24,660 i el rellotge intern defectuós havia estat en més de 100 hores en la nit del 425 00:20:24,660 --> 00:20:27,470 25 de febrer. 426 00:20:27,470 --> 00:20:31,770 >> JACK Ganssle: Es va rastrejar el temps a una precisió d'una dècima de segon. 427 00:20:31,770 --> 00:20:34,480 Ara, una dècima de segon és un nombre interessant, ja que no pot ser 428 00:20:34,480 --> 00:20:39,940 expressar en binari exactament, el que significa no es pot expressar exactament en 429 00:20:39,940 --> 00:20:42,500 qualsevol ordinador digital moderna. 430 00:20:42,500 --> 00:20:46,920 És difícil de creure, però utilitzar això com un exemple. 431 00:20:46,920 --> 00:20:49,000 Donarem el nombre d'un terç. 432 00:20:49,000 --> 00:20:53,150 Una tercera no es pot expressar exactament en decimal. 433 00:20:53,150 --> 00:20:57,500 Una tercera va 0.333 en l'infinit. 434 00:20:57,500 --> 00:21:02,270 No hi ha manera de fer això amb la precisió absoluta en decimal. 435 00:21:02,270 --> 00:21:05,370 Aquest és exactament el mateix tipus de problema que va passar al Patriot. 436 00:21:05,370 --> 00:21:09,880 Com més temps el sistema va funcionar, la va esdevenir el pitjor error de temps. 437 00:21:09,880 --> 00:21:13,840 >> ALTAVEU 1: Després de 100 hores de funcionament, l'error en el temps només era 438 00:21:13,840 --> 00:21:16,140 aproximadament un terç d'un segon. 439 00:21:16,140 --> 00:21:20,800 Però en termes de focalització d'un míssil viatjant a Mach cinc, que va donar lloc a 440 00:21:20,800 --> 00:21:24,410 un error de seguiment de més de 600 metres. 441 00:21:24,410 --> 00:21:27,670 Seria un error fatal per als els soldats en Dhahran. 442 00:21:27,670 --> 00:21:33,450 >> Teodoro Postol: El que va passar és un Scud llançament va ser detectat per primera 443 00:21:33,450 --> 00:21:34,280 satèl · lits d'advertència. 444 00:21:34,280 --> 00:21:38,550 I sabien que el Scud venia en la seva direcció general. 445 00:21:38,550 --> 00:21:41,000 No sabien d'on venia. 446 00:21:41,000 --> 00:21:43,900 >> ALTAVEU 1: Correspon ara al radar component del sistema Patriot 447 00:21:43,900 --> 00:21:48,910 defensa de Dhahran per localitzar i mantenir seguiment del míssil enemic entrant. 448 00:21:48,910 --> 00:21:50,580 >> JACK Ganssle: El radar era molt intel · ligent. 449 00:21:50,580 --> 00:21:53,770 Seria realment un seguiment de la posició de el Scud i després predir on 450 00:21:53,770 --> 00:21:57,160 probablement seria la propera vegada el radar envia un pols a terme. 451 00:21:57,160 --> 00:21:58,870 Això es deia la porta de distància. 452 00:21:58,870 --> 00:22:04,020 >> Teodoro Postol: Llavors una vegada que el Patriot decideix, ha passat prou temps per anar 453 00:22:04,020 --> 00:22:09,420 enrere i comprovar la ubicació per aquest objecte detectat, torna. 454 00:22:09,420 --> 00:22:14,450 Així que quan va tornar al mal lloc, a continuació, veu cap objecte. 455 00:22:14,450 --> 00:22:18,200 I es decideix que no hi havia cap objecte, que era una falsa detecció, i 456 00:22:18,200 --> 00:22:19,680 gotes de la pista. 457 00:22:19,680 --> 00:22:22,970 >> ALTAVEU 1: El Scud entrant desaparèixer a la pantalla de radar, i 458 00:22:22,970 --> 00:22:26,050 segons més tard es va estavellar a la fortalesa. 459 00:22:26,050 --> 00:22:31,950 El Scud va matar 28 i va ser l'últim disparat durant la primera Guerra del Golf. 460 00:22:31,950 --> 00:22:37,700 Tràgicament, el programari actualitzat arribar en Dhahran l'endemà. 461 00:22:37,700 --> 00:22:41,800 La falla de programari s'havia fixat, tancant un capítol en la problemàtica 462 00:22:41,800 --> 00:22:43,690 història dels míssils Patriot. 463 00:22:43,690 --> 00:22:46,780 464 00:22:46,780 --> 00:22:50,710 >> Patriot és en realitat un acrònim Fases per al seguiment de matriu 465 00:22:50,710 --> 00:22:51,960 Intercepció de la meta. 466 00:22:51,960 --> 00:22:54,650 467 00:22:54,650 --> 00:23:00,840 >> DAVID J Malan: Molt bé, de manera que un exemple alliçonador, per estar segur. 468 00:23:00,840 --> 00:23:03,430 I, afortunadament, aquests nivell inferior els errors no són una cosa que anem a 469 00:23:03,430 --> 00:23:06,220 normalment han de apreciar, sens dubte no amb alguns de la nostra 470 00:23:06,220 --> 00:23:07,360 més primerenca dels programes. 471 00:23:07,360 --> 00:23:10,450 Per contra, la majoria dels errors que vaig a trobada serà lògic en la natura, 472 00:23:10,450 --> 00:23:12,900 sintàctica en la naturalesa per la qual cosa el codi no funciona bé. 473 00:23:12,900 --> 00:23:14,140 I tu ho saps molt ràpid. 474 00:23:14,140 --> 00:23:16,850 >> Però, sobretot quan arribem a la final del semestre, es va a 475 00:23:16,850 --> 00:23:20,620 tornat més i més d'una possibilitat de realment pensar molt en el disseny 476 00:23:20,620 --> 00:23:22,960 dels seus programes i la subjacent representació 477 00:23:22,960 --> 00:23:24,520 allà, també, de les dades. 478 00:23:24,520 --> 00:23:28,010 Per exemple, anem a introduir MySQL, que és un motor de base de dades populars 479 00:23:28,010 --> 00:23:30,850 que es pot utilitzar amb els llocs web de emmagatzemar dades en el back-end. 480 00:23:30,850 --> 00:23:34,630 I vostè haurà de començar a decidir en Al final del semestre, no només el que 481 00:23:34,630 --> 00:23:38,790 tipus de dades al llarg d'aquestes línies per utilitzar però exactament la quantitat de bits d'usar, 482 00:23:38,790 --> 00:23:42,740 si voleu emmagatzemar dates com a dates i hores com vegades, i també 483 00:23:42,740 --> 00:23:46,890 coses com què tan gran és el que desitja que el identificadors únics a ser per a, per exemple, els usuaris 484 00:23:46,890 --> 00:23:47,680 a la base de dades. 485 00:23:47,680 --> 00:23:51,210 >> De fet, si alguns de vostès han tingut Facebook representa des de fa força temps, 486 00:23:51,210 --> 00:23:53,680 i vostè sap com accedir amb el seu identificador d'usuari - 487 00:23:53,680 --> 00:23:57,930 que de vegades apareix en el seu URL del perfil llevat que hi hagi triat un 488 00:23:57,930 --> 00:24:02,070 sobrenom de la URL, o si vostè té utilitza Facebook Gràfic API, el 489 00:24:02,070 --> 00:24:05,510 API a disposició del públic pel qual es pot demanar Facebook per dades en brut - 490 00:24:05,510 --> 00:24:07,580 es pot veure el que la seva identificació numèrica és. 491 00:24:07,580 --> 00:24:10,880 I fa uns anys, Facebook essencialment va haver de canviar l'ús de 492 00:24:10,880 --> 00:24:15,980 l'equivalent d'enters a l'ús a llarg llarg perquè amb el temps ja que els usuaris vénen 493 00:24:15,980 --> 00:24:19,780 i anar a crear un munt de comptes i comptes falses, fins i tot ells amb molta facilitat 494 00:24:19,780 --> 00:24:24,630 van ser capaços d'esgotar una cosa així com un 4 MIL MILIONS de valor possible com un int. 495 00:24:24,630 --> 00:24:28,340 >> Així que més en aquest tipus de qüestions en el camí, també. 496 00:24:28,340 --> 00:24:30,750 Molt bé, així que estava fent. 497 00:24:30,750 --> 00:24:31,670 Aquesta va ser la imprecisió. 498 00:24:31,670 --> 00:24:32,730 Un parell d'anunciar. 499 00:24:32,730 --> 00:24:35,710 Així seccions comencen oficialment Diumenge, dilluns, dimarts. 500 00:24:35,710 --> 00:24:39,080 Vostè escoltarà per correu electrònic aquesta setmana quant a la seva assignació de secció. 501 00:24:39,080 --> 00:24:42,570 I vostè també aquí en aquest moment com per canviar la seva secció si el seu 502 00:24:42,570 --> 00:24:45,660 horari ha canviat o el seu nivell de comoditat ara ha canviat. 503 00:24:45,660 --> 00:24:49,380 Mentrestant P-conjunt i un pirata informàtic són un per aquest dijous amb l'opció de 504 00:24:49,380 --> 00:24:52,450 ampliar aquest termini pel especificacions a divendres 505 00:24:52,450 --> 00:24:53,830 d'una manera típica. 506 00:24:53,830 --> 00:24:57,500 >> Adonar-se que s'inclou amb el problema especificacions establertes són les instruccions de 507 00:24:57,500 --> 00:25:02,770 com utilitzar l'aparell CS50, marca, , Així com alguns CS50 eines específiques 508 00:25:02,770 --> 00:25:06,540 com l'estil 50, que pot proporcionar amb realimentació dinàmicament en el 509 00:25:06,540 --> 00:25:10,230 la qualitat del seu estil de codi i també comprovar 50, que pot proporcionar 510 00:25:10,230 --> 00:25:13,160 retroalimentació dinàmica quant a la seva correcció de codi. 511 00:25:13,160 --> 00:25:16,850 Forgive que encara estem planxar uns pocs problemes amb el control 50. 512 00:25:16,850 --> 00:25:21,490 Alguns dels seus companys de classe que s'ha iniciat al voltant de les quatre hores de divendres nit 513 00:25:21,490 --> 00:25:25,130 l'especificació pujar notat des de llavors alguns errors que estem treballant 514 00:25:25,130 --> 00:25:29,010 a través, i es disculpa per qualsevol persona que ha experimentat frustracions innecessàries. 515 00:25:29,010 --> 00:25:30,340 La culpa és meva. 516 00:25:30,340 --> 00:25:34,080 Però seguirem fins al CS50 discutir quan això es resolgui. 517 00:25:34,080 --> 00:25:35,700 >> Així que una paraula en els propis resultats. 518 00:25:35,700 --> 00:25:38,990 Així que serà una o dues setmanes abans de començar a obtenir informació sobre els butlletins de problemes 519 00:25:38,990 --> 00:25:40,640 perquè encara no té un tipus d'ensenyament. 520 00:25:40,640 --> 00:25:44,510 I tot i així, anem a començar a avaluar el problema C estableix abans que 521 00:25:44,510 --> 00:25:46,970 tornar enrere i avaluar zero, per la que s'obté més rellevant 522 00:25:46,970 --> 00:25:48,150 retroalimentació més ràpida. 523 00:25:48,150 --> 00:25:51,870 Però, en general, pel pla d'estudis, CS50 butlletins de problemes s'avaluen al llarg del 524 00:25:51,870 --> 00:25:53,580 després de quatre eixos - 525 00:25:53,580 --> 00:25:55,760 àmbit d'aplicació, correcció, disseny i estil. 526 00:25:55,760 --> 00:25:59,210 >> Àmbit d'aplicació serà un nombre normalment entre zero i cinc que 527 00:25:59,210 --> 00:26:01,830 capta la quantitat de la peça que va mossegar. 528 00:26:01,830 --> 00:26:03,750 En general, vostè vol que això és cinc. 529 00:26:03,750 --> 00:26:05,300 Vostè almenys intentat tot. 530 00:26:05,300 --> 00:26:09,330 I noti que és un factor multiplicador pel que el fer només una part de la 531 00:26:09,330 --> 00:26:12,520 conjunt de problemes no és la millor estratègia. 532 00:26:12,520 --> 00:26:15,610 >> Mentrestant, més obvi és el importància de correcció - 533 00:26:15,610 --> 00:26:18,620 només és el programa correcte amb pel que fa a l'especificació? 534 00:26:18,620 --> 00:26:21,510 Això es pondera deliberadament més pesadament que els altres dos eixos per un 535 00:26:21,510 --> 00:26:24,450 factor de tres, ja que reconeixem que en general passarà 536 00:26:24,450 --> 00:26:28,600 molt més temps a perseguir alguns errors, aconseguir que el codi funcioni, llavors 537 00:26:28,600 --> 00:26:31,540 són sangria i triant noms de variables adequades i els 538 00:26:31,540 --> 00:26:33,800 agrada, que és a l'altre extrem l'espectre d'estil. 539 00:26:33,800 --> 00:26:36,160 >> Això no vol dir que l'estil no és important, i anem a predicar la volta 540 00:26:36,160 --> 00:26:37,920 temps, tant en les classes teòriques i en les seccions. 541 00:26:37,920 --> 00:26:40,520 Estil es refereix a l'estètica del seu codi. 542 00:26:40,520 --> 00:26:43,980 Has triat bé-nomenades les variables que són curts, però alguna cosa 543 00:26:43,980 --> 00:26:44,680 descriptiva? 544 00:26:44,680 --> 00:26:47,840 És el codi amb sagnia com s'ha vist en de conferències i d'una manera consistent 545 00:26:47,840 --> 00:26:49,070 amb estil de 50? 546 00:26:49,070 --> 00:26:51,220 >> Finalment és disseny adequat allà al mig. 547 00:26:51,220 --> 00:26:54,090 El disseny és el més dur d'un a posar un El dit a perquè és molt més 548 00:26:54,090 --> 00:26:55,000 subjectiva. 549 00:26:55,000 --> 00:26:58,610 Però és potser el més important de els tres eixos en termes de pedagogia 550 00:26:58,610 --> 00:27:02,050 valor amb el temps i que serà oportunitat del becari docent per 551 00:27:02,050 --> 00:27:04,110 li proporcionen informació qualitativa. 552 00:27:04,110 --> 00:27:08,100 De fet, en CS50 tot i que tenen aquestes fórmules i resultats, al final 553 00:27:08,100 --> 00:27:11,350 del dia aquests són molt deliberadament molt petits cubs - els valors en punts 554 00:27:11,350 --> 00:27:13,460 entre zero i tres i zero-cinc. 555 00:27:13,460 --> 00:27:17,800 No tractem de traçar línies molt gruixudes entre sèries d'exercicis o entre 556 00:27:17,800 --> 00:27:21,490 estudiants sinó centrar-se tant com podem en qualitatius, escriptura a mà 557 00:27:21,490 --> 00:27:25,490 retroalimentació, ja sigui escrit o verbal per part de el seu company d'ensenyament en particular, 558 00:27:25,490 --> 00:27:27,050 vostè arribarà a conèixer molt bé. 559 00:27:27,050 --> 00:27:32,340 >> Però, en general, aquests són els pesos que els diversos eixos tindran. 560 00:27:32,340 --> 00:27:35,480 Mentrestant, també, val la pena tenir en importa que vostè no ha de suposar que un 561 00:27:35,480 --> 00:27:38,870 tres de cada cinc és un 60% i per tant, més o menys si no. 562 00:27:38,870 --> 00:27:41,410 Tres està destinat deliberadament a ser tipus de mitjà de la carretera bona. 563 00:27:41,410 --> 00:27:43,480 Si vostè està rebent grups de tres en el inici del semestre, és 564 00:27:43,480 --> 00:27:46,340 de fet la intenció de ser un bon lloc per començar. 565 00:27:46,340 --> 00:27:50,510 Si vostè està rebent dos en dos, fires, hi ha definitivament un treball per pagar una mica 566 00:27:50,510 --> 00:27:53,250 més atenció, per aprofitar de seccions i hores d'oficina. 567 00:27:53,250 --> 00:27:54,590 >> Si vostè està rebent quatre potes i els cinc primers, grans. 568 00:27:54,590 --> 00:27:57,430 Però en realitat, esperem veure trajectòries entre els alumnes - molt 569 00:27:57,430 --> 00:28:00,575 individualitzat per alumne, però a partir el semestre aquí a una mena de 570 00:28:00,575 --> 00:28:04,100 els dos a la tres gamma però acabant aquí al rang de quatre a cinc. 571 00:28:04,100 --> 00:28:05,440 Això és el que realment estem buscant. 572 00:28:05,440 --> 00:28:09,590 I tingui present que el delta que exposes entre la setmana zero i la setmana 573 00:28:09,590 --> 00:28:12,170 12 quan estic fent notes. 574 00:28:12,170 --> 00:28:16,380 No ens importa en absolut com que just al començament si el seu 575 00:28:16,380 --> 00:28:19,330 trajectòria és de fet cap amunt i fort. 576 00:28:19,330 --> 00:28:24,000 >> Probitat acadèmica - així que em vaig posar el veu més greu per un moment. 577 00:28:24,000 --> 00:28:28,510 Així que aquest curs compta amb la distinció de enviant més estudiants que qualsevol altra 578 00:28:28,510 --> 00:28:30,950 a la història en el tauler d'anuncis, crec. 579 00:28:30,950 --> 00:28:34,220 Tenim sort de recompte perduda en aquest punt de la freqüència amb que això passi. 580 00:28:34,220 --> 00:28:37,090 I això no és perquè els estudiants en el 50 són més deshonestos que el seu 581 00:28:37,090 --> 00:28:38,690 companys de classe en altres parts. 582 00:28:38,690 --> 00:28:42,800 Però adonem, també, que som molt bons en la detecció d'aquest tipus de coses. 583 00:28:42,800 --> 00:28:45,920 >> I aquesta és l'avantatge que un classe de ciències de la computació té que 584 00:28:45,920 --> 00:28:49,110 podem i fem comparar tots els estudiants butlletins de problemes de parells contra tot 585 00:28:49,110 --> 00:28:51,470 altres, no només aquest any però tots els anys anteriors. 586 00:28:51,470 --> 00:28:55,080 Tenim la capacitat, igual que els estudiants de la classe, a Google i buscar el codi 587 00:28:55,080 --> 00:28:57,440 en llocs com GitHub i fòrums de discussió. 588 00:28:57,440 --> 00:29:00,840 No hi ha absolutament solucions a CS50 d' p-estableix flotant per aquí. 589 00:29:00,840 --> 00:29:02,710 Però si vostè pot trobar-los, podem trobar-los. 590 00:29:02,710 --> 00:29:07,130 I tot això és molt automatitzat i fàcil i trist per a nosaltres de trobar. 591 00:29:07,130 --> 00:29:10,990 >> Però vull destacar, també, que el política d'honestedat acadèmica del curs és 592 00:29:10,990 --> 00:29:13,960 molt destinat a ser molt el contrari d'aquest esperit. 593 00:29:13,960 --> 00:29:17,506 De fet, aquest any hem reformulat les coses en el pla d'estudis que sigui aquest, punt 594 00:29:17,506 --> 00:29:19,790 punt punt amb més detall en el pla d'estudis. 595 00:29:19,790 --> 00:29:22,860 Però el tema principal en el curs realment és ser raonable. 596 00:29:22,860 --> 00:29:26,160 Reconeixem que hi ha una significativa quantitat de pedagògica 597 00:29:26,160 --> 00:29:30,550 valor a col · laborar, en certa mesura, amb els seus companys, per la qual cosa 598 00:29:30,550 --> 00:29:33,700 dos o tres o més és de peu en un tauler blanc 599 00:29:33,700 --> 00:29:35,670 pissarres, així parlar, les seves idees - 600 00:29:35,670 --> 00:29:39,480 escriure pseudocodi en imatges, Diagramació que hauria de ser si Mario 601 00:29:39,480 --> 00:29:41,350 hagués de escriure primer en pseudocodi. 602 00:29:41,350 --> 00:29:43,240 Què ha de fer l'algorisme cobdiciós - 603 00:29:43,240 --> 00:29:46,100 ¿Com s'ha de comportar per problema estableix una? 604 00:29:46,100 --> 00:29:50,440 >> I adonar-se que el comportament que fomentem és molt 605 00:29:50,440 --> 00:29:51,470 molt en aquest sentit. 606 00:29:51,470 --> 00:29:53,890 I en el programa, veureu una manat sencer de bales sota una 607 00:29:53,890 --> 00:29:57,740 categoria raonable i no raonable categoria que ens ajuda a ajudar 608 00:29:57,740 --> 00:30:00,740 vostè envolta la seva ment al voltant d'on nosaltres vam treure aquesta línia. 609 00:30:00,740 --> 00:30:04,340 I, en general, una regla d'or decent és que si vostè està lluitant per resoldre 610 00:30:04,340 --> 00:30:07,990 alguns errors i el teu amic o company de classe està assegut al seu costat, es 611 00:30:07,990 --> 00:30:11,530 raonable per tu mostrar- el seu codi i dir, hey, em poden ajudar 612 00:30:11,530 --> 00:30:13,700 M'agradaria saber el que va malament aquí? 613 00:30:13,700 --> 00:30:17,110 >> No solen comprendre el costat oposat. 614 00:30:17,110 --> 00:30:20,730 No és una resposta correcta per a la seva amic o company aquí per dir, oh, 615 00:30:20,730 --> 00:30:22,510 només cal mirar a la mina ia la figura cap a fora d'això. 616 00:30:22,510 --> 00:30:24,400 Això és una mena de irraonable. 617 00:30:24,400 --> 00:30:27,750 Però tenir algú més, un altre cervell, un altre parell d'ulls mira 618 00:30:27,750 --> 00:30:31,620 la pantalla o mirar el seu codi i diuen, estàs segur que voleu 619 00:30:31,620 --> 00:30:32,760 tenir un bucle aquí? 620 00:30:32,760 --> 00:30:34,800 O estàs segur que voleu que mengi aquí? 621 00:30:34,800 --> 00:30:37,090 O oh, aquest missatge d'error significa això. 622 00:30:37,090 --> 00:30:39,580 Aquests són molt raonables i encoratja comportaments. 623 00:30:39,580 --> 00:30:44,010 >> Els casos als quals estava al · ludint a anteriorment es redueixen a que els estudiants són 624 00:30:44,010 --> 00:30:47,350 a altes hores de la nit fent mal judici decisions i enviament per correu electrònic el seu codi de 625 00:30:47,350 --> 00:30:50,130 altra persona o simplement dient: aquí, és a Dropbox o 626 00:30:50,130 --> 00:30:51,610 Cerca a Google a la nit. 627 00:30:51,610 --> 00:30:54,880 Així que animo i prec, si vostè té els inevitables 628 00:30:54,880 --> 00:30:58,450 moments d'estrès, estan xocant en contra de la data límit, no tens caps de 629 00:30:58,450 --> 00:31:01,490 dia, ja que és ja divendres en què punt, el correu electrònic caps del curs o 630 00:31:01,490 --> 00:31:02,330 jo directament. 631 00:31:02,330 --> 00:31:04,790 Diguem, escolta, estic en el meu punt de ruptura aquí. 632 00:31:04,790 --> 00:31:06,660 Tindrem una conversa i entendre-ho. 633 00:31:06,660 --> 00:31:10,400 Recórrer al web o algun altre no comportament raonable no és el 634 00:31:10,400 --> 00:31:13,070 solució, i molts dels seus companys de classe ja no són aquí a 635 00:31:13,070 --> 00:31:15,150 campus causa d'aquesta manca de criteri. 636 00:31:15,150 --> 00:31:17,840 Però és molt fàcil d'eludir aquesta línia. 637 00:31:17,840 --> 00:31:22,950 >> I aquí hi ha una petita imatge per animar Aparteu-vos de Reddit manera que ara 638 00:31:22,950 --> 00:31:25,720 tot estarà bé. 639 00:31:25,720 --> 00:31:30,210 >> Així, un resum ràpid, llavors, d'on ho deixem. 640 00:31:30,210 --> 00:31:33,690 Així que la setmana passada, recordem que introduïm condicions, no en zero 641 00:31:33,690 --> 00:31:34,880 però en C aquest temps. 642 00:31:34,880 --> 00:31:38,300 I hi havia alguna cosa de nova sintaxi, però realment no hi ha noves idees en si. 643 00:31:38,300 --> 00:31:42,630 Vam expressions booleanes que podríem o juntament amb dos verticals 644 00:31:42,630 --> 00:31:46,490 bars o i, juntament amb dos símbols d'unió, dient que tant l'esquerra 645 00:31:46,490 --> 00:31:49,990 i el dret ha de ser veritat perquè això executar. 646 00:31:49,990 --> 00:31:53,150 Després vam interruptors, que busquem en poques paraules, però jo proposo són molt 647 00:31:53,150 --> 00:31:56,830 només sintaxi diferent per aconseguir el mateix tipus d'objectiu si vostè sap d' 648 00:31:56,830 --> 00:31:59,270 avançar en el que els seus casos seran. 649 00:31:59,270 --> 00:32:00,160 >> Ens fixem en els bucles. 650 00:32:00,160 --> 00:32:03,340 Un bucle és potser el més comú, o almenys l'un que la gent 651 00:32:03,340 --> 00:32:05,330 solen arribar instintivament. 652 00:32:05,330 --> 00:32:08,240 Tot i que sembla una mica críptic, veuràs molts, molts exemples d'aquest 653 00:32:08,240 --> 00:32:11,590 en poc temps, ja que tens ia finals de la setmana passada. 654 00:32:11,590 --> 00:32:14,280 Mentre que els bucles poden igualment aconseguir el mateix. 655 00:32:14,280 --> 00:32:17,550 Però si vostè vol fer qualsevol incrementación o actualització de 656 00:32:17,550 --> 00:32:20,230 els valors de variables, que han de fer-ho manualment més que l' 657 00:32:20,230 --> 00:32:22,440 per al bucle abans permet. 658 00:32:22,440 --> 00:32:25,310 I després hi ha el do-while, el que ens permet fer alguna 659 00:32:25,310 --> 00:32:28,460 almenys una vegada, mentre que una mica la resta és cert. 660 00:32:28,460 --> 00:32:31,550 I això és particularment bo per programes o per als jocs en què voleu 661 00:32:31,550 --> 00:32:33,810 per sol · licitar a l'usuari que alguna cosa almenys una vegada. 662 00:32:33,810 --> 00:32:37,110 I llavors, si ell o ella no és capaç de cooperar, és possible que vulgueu fer-ho 663 00:32:37,110 --> 00:32:38,420 una i altra vegada. 664 00:32:38,420 --> 00:32:41,270 >> Amb les variables, per la seva banda, teníem línies de codi com aquest, el que podria 665 00:32:41,270 --> 00:32:41,950 de dues línies. 666 00:32:41,950 --> 00:32:44,830 Vostè podria declarar un int anomenada comptador, punt i coma. 667 00:32:44,830 --> 00:32:47,660 O simplement pot declarar i definir-lo, per així dir-ho. 668 00:32:47,660 --> 00:32:49,950 Donar-li un valor alhora. 669 00:32:49,950 --> 00:32:51,890 >> I després, finalment, parlem sobre les funcions. 670 00:32:51,890 --> 00:32:54,270 I aquest és un bon exemple de la el sentit que il · lustra 671 00:32:54,270 --> 00:32:55,840 dos tipus de funcions. 672 00:32:55,840 --> 00:32:59,030 Un d'ells és GetString (), que, de nou, crear una cadena de l'usuari. 673 00:32:59,030 --> 00:33:02,040 Però GetString () és força interessant, la mesura en què ho hem utilitzat, 674 00:33:02,040 --> 00:33:05,620 perquè sempre hem fet servir amb alguna cosa a la banda esquerra d'un 675 00:33:05,620 --> 00:33:06,600 signe igual. 676 00:33:06,600 --> 00:33:09,830 És a dir que GetString () retorna un valor. 677 00:33:09,830 --> 00:33:11,970 Retorna, per descomptat, una cadena. 678 00:33:11,970 --> 00:33:15,130 I després a la banda esquerra, estem simplement salvar aquesta cadena a l'interior d'un 679 00:33:15,130 --> 00:33:16,580 variable anomenada nom. 680 00:33:16,580 --> 00:33:21,100 >> Això és diferent, en un sentit, des printf printf perquè, almenys en el nostre 681 00:33:21,100 --> 00:33:23,540 ús aquí, no retorna res. 682 00:33:23,540 --> 00:33:24,960 Com acotació al marge, sí retorn alguna cosa. 683 00:33:24,960 --> 00:33:26,380 Simplement no importa el que és. 684 00:33:26,380 --> 00:33:29,090 Però té el que hi ha anomenat un efecte secundari. 685 00:33:29,090 --> 00:33:31,840 ¿I quin és aquest efecte secundari en tots els cas que hem vist fins ara? 686 00:33:31,840 --> 00:33:34,720 El que printf fer? 687 00:33:34,720 --> 00:33:37,780 S'imprimeix alguna cosa a la pantalla, pantalles de text o números, o alguna cosa 688 00:33:37,780 --> 00:33:38,380 a la pantalla. 689 00:33:38,380 --> 00:33:41,170 I això és només considerat com un efecte secundari perquè en realitat no és el lliurament 690 00:33:41,170 --> 00:33:41,900 de nou a mi. 691 00:33:41,900 --> 00:33:44,770 No és una resposta dins de les un quadre negre que es pugui 692 00:33:44,770 --> 00:33:46,130 arribar a entrar i prendre. 693 00:33:46,130 --> 00:33:49,160 És només que ho fa pel seu compte, i molt com Colton estava connectat a aquesta 694 00:33:49,160 --> 00:33:52,560 quadre negre la setmana passada, i d'alguna manera màgicament va anar dibuixant a la pissarra 695 00:33:52,560 --> 00:33:54,500 sense que jo realment involucrats. 696 00:33:54,500 --> 00:33:55,560 Això seria un efecte secundari. 697 00:33:55,560 --> 00:33:59,100 Però si en realitat havia d'arribar de tornada a aquí i dir, oh, aquí hi ha la cadena 698 00:33:59,100 --> 00:34:02,040 per part de l'usuari, que ser un valor de retorn. 699 00:34:02,040 --> 00:34:05,650 >> I fins al moment, només hem fet servir funcions que altres persones han escrit. 700 00:34:05,650 --> 00:34:09,219 Però en realitat podem fer aquestes tipus de coses nosaltres mateixos. 701 00:34:09,219 --> 00:34:12,730 Així que vaig a anar a la CS50 aparell nou. 702 00:34:12,730 --> 00:34:16,020 Permetin-me tancar la pestanya que havia obert fa un moment. 703 00:34:16,020 --> 00:34:18,530 I m'ho dius a mi seguir endavant i crear un nou arxiu. 704 00:34:18,530 --> 00:34:22,400 I jo seguiré endavant i anomenar això positive.c. 705 00:34:22,400 --> 00:34:24,770 Així que el que vull fer alguna cosa amb nombres positius aquí. 706 00:34:24,770 --> 00:34:27,219 Així que seguiré endavant i fer int - 707 00:34:27,219 --> 00:34:28,000 ho sento - 708 00:34:28,000 --> 00:34:31,840 # Include. 709 00:34:31,840 --> 00:34:34,280 No fem que la mateixa error com abans. 710 00:34:34,280 --> 00:34:40,020 Int main (void), obert arrissat clau, clau de tall. 711 00:34:40,020 --> 00:34:41,639 >> I ara vull fer el següent. 712 00:34:41,639 --> 00:34:44,600 Vull escriure un programa que insisteix que l'usuari dóna 713 00:34:44,600 --> 00:34:46,770 m'assabento positiu. 714 00:34:46,770 --> 00:34:50,969 Així que no hi ha cap funció GetPositiveInt a la biblioteca CS50. 715 00:34:50,969 --> 00:34:52,610 Només hi ha GetInt (). 716 00:34:52,610 --> 00:34:55,790 Però això està bé perquè tinc la construccions amb les que puc imposar una 717 00:34:55,790 --> 00:34:59,360 poc més restricció en aquest valor. 718 00:34:59,360 --> 00:35:00,990 Jo podria fer alguna cosa com això. 719 00:35:00,990 --> 00:35:02,780 >> Així int n - 720 00:35:02,780 --> 00:35:04,920 i si vostè està escrivint al llarg, només s'adonen Vaig a tornar i 721 00:35:04,920 --> 00:35:06,430 canviar algunes coses en un moment - 722 00:35:06,430 --> 00:35:09,960 així que int n és igual GetInt (). 723 00:35:09,960 --> 00:35:11,780 I això posarà un interior d'int n. 724 00:35:11,780 --> 00:35:13,830 I permetin-me ser una més descriptiva. 725 00:35:13,830 --> 00:35:23,270 Permetin-me dir alguna cosa així com exigeixo que vostè em dóna un nombre enter positiu. 726 00:35:23,270 --> 00:35:23,550 >> Està bé. 727 00:35:23,550 --> 00:35:25,250 Així que una mica d'instruccions. 728 00:35:25,250 --> 00:35:26,270 I ara què puc fer? 729 00:35:26,270 --> 00:35:29,840 Bé, ja sé de la meva senzilla condicions o branques, igual que 730 00:35:29,840 --> 00:35:36,100 tenia en Scratch, que pogués dir alguna cosa com si n és menor o igual que 731 00:35:36,100 --> 00:35:44,460 zero, llavors vull fer alguna cosa agrada, això no és positiu. 732 00:35:44,460 --> 00:35:45,560 I llavors jo podria fer - 733 00:35:45,560 --> 00:35:47,310 Bé, però realment vull aconseguir aquest int. 734 00:35:47,310 --> 00:35:52,020 Així podria seguir aquí i vaig poder tipus de la còpia d'això i aquest guió. 735 00:35:52,020 --> 00:35:52,570 I després, a D'acord. 736 00:35:52,570 --> 00:35:56,990 Així que si n és menor que o igual a zero fer això. 737 00:35:56,990 --> 00:35:58,900 >> Ara, què passa si l'usuari no coopera? 738 00:35:58,900 --> 00:36:01,560 Bé, llavors em vaig a prestat això aquí. 739 00:36:01,560 --> 00:36:03,130 I després vaig per aquí i aquí i aquí. 740 00:36:03,130 --> 00:36:06,420 Així que això no és clarament la solució, no? 741 00:36:06,420 --> 00:36:07,810 Perquè no hi ha final a la vista. 742 00:36:07,810 --> 00:36:13,100 Si vull demanar que l'usuari dóna m'assabento positiu, puc 743 00:36:13,100 --> 00:36:14,150 aconseguir realment el int. 744 00:36:14,150 --> 00:36:15,620 Llavors puc comprovar que int. 745 00:36:15,620 --> 00:36:18,570 Però després vull veure-ho una altra vegada i comprovar de nou i torni a comprovar. 746 00:36:18,570 --> 00:36:21,680 Així que, òbviament, quin és el millor construcció a utilitzar aquí? 747 00:36:21,680 --> 00:36:22,840 D'acord, una mena de bucle. 748 00:36:22,840 --> 00:36:25,430 >> Així que vaig a desfer de gairebé tot això. 749 00:36:25,430 --> 00:36:27,320 I vull aconseguir aquest int almenys una vegada. 750 00:36:27,320 --> 00:36:28,890 Així que vaig a dir que fer - 751 00:36:28,890 --> 00:36:32,110 i vaig a tornar a la mentre que en un moment - 752 00:36:32,110 --> 00:36:33,050 ara, què? 753 00:36:33,050 --> 00:36:35,860 Jo faré GetInt int n gets (). 754 00:36:35,860 --> 00:36:36,080 D'acord. 755 00:36:36,080 --> 00:36:37,250 Així que això és bastant bo. 756 00:36:37,250 --> 00:36:39,750 I ara, ¿amb quina freqüència Jo vull fer això? 757 00:36:39,750 --> 00:36:45,770 >> Permetin-me posar l'interior printf del bucle pel que puc demanar una vegada i una altra, 758 00:36:45,770 --> 00:36:46,740 si sigui necessari. 759 00:36:46,740 --> 00:36:49,720 I què és el que vull aquesta mentre la condició de fer? 760 00:36:49,720 --> 00:36:53,870 Vull seguir fent això mentre que el que és el cas? 761 00:36:53,870 --> 00:36:54,125 Si. 762 00:36:54,125 --> 00:36:55,390 N és menor que o igual a zero. 763 00:36:55,390 --> 00:36:58,180 Així que ja, hem significativament netejat el codi dalt. 764 00:36:58,180 --> 00:37:00,700 Hem prestat construir una molt simple - el do-while. 765 00:37:00,700 --> 00:37:04,690 Jo he robat només les grans línies de codi que vaig començar a copiar i 766 00:37:04,690 --> 00:37:05,960 enganxar, que no era prudent. 767 00:37:05,960 --> 00:37:09,790 I ara em vaig a enganxar en realitat que aquí i fes-ho una vegada. 768 00:37:09,790 --> 00:37:12,990 >> I ara, ¿què és el que vull fer en el al final d'aquest programa? 769 00:37:12,990 --> 00:37:16,810 Només diré una cosa simple igual que, gràcies pel - i 770 00:37:16,810 --> 00:37:18,980 Faré% i per int - 771 00:37:18,980 --> 00:37:23,270 barra invertida n, coma, i després endoll n, punt i coma. 772 00:37:23,270 --> 00:37:23,910 >> Està bé. 773 00:37:23,910 --> 00:37:27,290 Així que anem a veure què passa ara quan executo aquest programa. 774 00:37:27,290 --> 00:37:30,600 Vaig a seguir endavant i no faci comentaris. 775 00:37:30,600 --> 00:37:30,880 Damn. 776 00:37:30,880 --> 00:37:31,600 Uns pocs errors. 777 00:37:31,600 --> 00:37:32,960 Així que permetin-me retrocedir fins a la primera. 778 00:37:32,960 --> 00:37:34,020 No treballar a través d'ells cap enrere. 779 00:37:34,020 --> 00:37:37,000 Treballar a través d'ells, de dalt a baix no sigui que en cascada i només 780 00:37:37,000 --> 00:37:38,630 una cosa estar equivocat. 781 00:37:38,630 --> 00:37:42,532 Declaració implícita de la GetInt function (). 782 00:37:42,532 --> 00:37:43,020 Si. 783 00:37:43,020 --> 00:37:44,420 Així que no va ser suficient. 784 00:37:44,420 --> 00:37:46,760 Jo com que vaig cometre el mateix error, però una mica diferent aquesta vegada. 785 00:37:46,760 --> 00:37:51,940 Necessito no només incloure stdio.h però També cs50.h, que inclou la 786 00:37:51,940 --> 00:37:56,770 les anomenades declaracions d'aconseguir int, que ensenyar l'aparell, o ensenya 787 00:37:56,770 --> 00:37:58,760 C el GetInt () és. 788 00:37:58,760 --> 00:37:59,550 >> Així que permetin-me tornar a desar. 789 00:37:59,550 --> 00:38:02,040 Vaig a passar per alt els errors d'altres perquè esperaré que ells són 790 00:38:02,040 --> 00:38:05,210 d'alguna manera relacionats amb l'error Ja vaig arreglar. 791 00:38:05,210 --> 00:38:08,710 Així que permetin-me anar per davant i tornar a compilar amb fer positiu, Enter. 792 00:38:08,710 --> 00:38:09,020 Damn. 793 00:38:09,020 --> 00:38:09,985 Tres errors, encara. 794 00:38:09,985 --> 00:38:12,650 Permetin-me desplaço fins al primer. 795 00:38:12,650 --> 00:38:14,320 La variable n Nous. 796 00:38:14,320 --> 00:38:15,850 No hem vist això abans. 797 00:38:15,850 --> 00:38:17,200 I això, també, és una mica críptic. 798 00:38:17,200 --> 00:38:18,850 Aquesta és la sortida del compilador. 799 00:38:18,850 --> 00:38:23,610 I el que la línia ressaltada allà - positive.c: 09:13 - 800 00:38:23,610 --> 00:38:28,960 és a dir, s'està dient en la línia nou de positive.c, en el caràcter 13, 801 00:38:28,960 --> 00:38:31,510 La columna 13, que va cometre aquest error. 802 00:38:31,510 --> 00:38:34,230 >> I en particular, s'està dient jo no utilitzada variable n. 803 00:38:34,230 --> 00:38:35,790 Així que anem a veure - 804 00:38:35,790 --> 00:38:37,150 línia de nou. 805 00:38:37,150 --> 00:38:40,430 Estic usant n en el sentit que Li vaig a donar un valor. 806 00:38:40,430 --> 00:38:44,200 Però el que el compilador no li agrada és que no em sembla usar-lo. 807 00:38:44,200 --> 00:38:45,560 Però espereu un minut, ho estic fent servir. 808 00:38:45,560 --> 00:38:48,170 En la línia 11, que estic fent servir aquí. 809 00:38:48,170 --> 00:38:52,430 Però si em desplaço cap avall encara més en positive.c: 11 - 810 00:38:52,430 --> 00:38:56,230 pel que en la línia 11, caràcter 12, la compilador em diu, ús de 811 00:38:56,230 --> 00:38:58,670 identificador no declarat n. 812 00:38:58,670 --> 00:39:02,760 >> Significa no declarats que tinc no s'especifica com un 813 00:39:02,760 --> 00:39:04,970 variable amb un tipus de dades. 814 00:39:04,970 --> 00:39:05,500 Però espereu un minut. 815 00:39:05,500 --> 00:39:09,150 Vaig fer exactament això en la línia nou. 816 00:39:09,150 --> 00:39:11,100 Així que algú està realment confós aquí. 817 00:39:11,100 --> 00:39:14,900 És o jo o el compilador perquè en la línia de nou, de nou, estic declarant un 818 00:39:14,900 --> 00:39:18,650 int n, i estic assignant-li el tornar el valor GetInt (). 819 00:39:18,650 --> 00:39:22,930 Llavors estic fent servir aquesta variable n en línia 11 i comprovar si el seu valor és menor 820 00:39:22,930 --> 00:39:24,050 que o igual a zero. 821 00:39:24,050 --> 00:39:27,430 Però pel que sembla, és dolent i trencat per què? 822 00:39:27,430 --> 00:39:30,630 823 00:39:30,630 --> 00:39:32,490 Digues-ho una altra vegada? 824 00:39:32,490 --> 00:39:35,690 >> Ah, he de declarar núm abans entrar al bucle. 825 00:39:35,690 --> 00:39:36,370 Però per què? 826 00:39:36,370 --> 00:39:39,830 Vull dir, només vam proposar fa poc que està bé per declarar variables 827 00:39:39,830 --> 00:39:43,600 tot en una línia i després assignar-los un valor. 828 00:39:43,600 --> 00:39:46,790 Una variable global - Tornem a aquesta idea en un moment. 829 00:39:46,790 --> 00:39:48,690 Per què vols que em posi fora del bucle? 830 00:39:48,690 --> 00:40:03,170 831 00:40:03,170 --> 00:40:03,830 És. 832 00:40:03,830 --> 00:40:06,780 Exactament. 833 00:40:06,780 --> 00:40:09,610 >> Així que, encara, una mica contradictori, permetin-me resumir. 834 00:40:09,610 --> 00:40:13,510 Quan es declara n interior del bloc do allà - 835 00:40:13,510 --> 00:40:16,320 específicament dins les claus - 836 00:40:16,320 --> 00:40:19,210 aquesta variable n té el que hi ha anomenat un àmbit - 837 00:40:19,210 --> 00:40:23,210 sense relació amb el sistema de puntuació en el per descomptat - però té un abast que és 838 00:40:23,210 --> 00:40:25,190 limitat a aquelles claus. 839 00:40:25,190 --> 00:40:28,460 En altres paraules, en general si es declara una variable dins d'un conjunt de 840 00:40:28,460 --> 00:40:33,370 claus, aquesta variable només existeix dins d'aquestes claus. 841 00:40:33,370 --> 00:40:37,320 Així que per aquest sol lògica, tot i que He declarat n en consonància 9, que 842 00:40:37,320 --> 00:40:41,910 essencialment desapareix l'àmbit d'aplicació, desapareix de la memòria, per dir-ho, 843 00:40:41,910 --> 00:40:43,370 pel temps vaig arribar a la línia 11. 844 00:40:43,370 --> 00:40:47,370 A causa de la línia 11, per desgràcia, és fora d'aquestes claus. 845 00:40:47,370 --> 00:40:51,540 >> Així que, lamentablement, no puc solucionar aquest problema que es remunta al que vaig fer abans. 846 00:40:51,540 --> 00:40:53,370 Vostè pot fer això al principi. 847 00:40:53,370 --> 00:40:56,370 Però, què estàs ara no fent cíclicament? 848 00:40:56,370 --> 00:40:58,260 Òbviament estàs no aconseguir el int cíclicament. 849 00:40:58,260 --> 00:41:01,320 Així que podem deixar la GetInt (), i s'absentin de la GetInt () dins de la 850 00:41:01,320 --> 00:41:04,420 bucle perquè això és el que volem molestar a l'usuari i una altra. 851 00:41:04,420 --> 00:41:08,660 No obstant això, n'hi ha prou que anar fins a la línia, per exemple, sis. 852 00:41:08,660 --> 00:41:10,150 Int n, punt i coma. 853 00:41:10,150 --> 00:41:12,990 No li donis un valor encara, perquè que no cal de moment. 854 00:41:12,990 --> 00:41:16,220 >> Però ara aquí, avís - això seria un error molt fàcil. 855 00:41:16,220 --> 00:41:19,440 No vull a l'ombra del meu anterior declaració de n. 856 00:41:19,440 --> 00:41:22,830 Vull fer servir el que n realment existeix. 857 00:41:22,830 --> 00:41:25,780 I ara, en la línia 10, Assigno un valor n. 858 00:41:25,780 --> 00:41:28,580 No obstant això, en línia de sis, declaro n. 859 00:41:28,580 --> 00:41:32,940 I jo també puc o no puc utilitzar-lo en la línia 12 ara? 860 00:41:32,940 --> 00:41:37,120 Perquè puc entre els quals arrissat claus és N declarat ara? 861 00:41:37,120 --> 00:41:38,770 El que aquí a la línia cinc. 862 00:41:38,770 --> 00:41:40,330 Per un aquí a la línia 14. 863 00:41:40,330 --> 00:41:49,770 Així que si ara puc ampliar, guardar l'arxiu, vagi una còpia en i executar make positiu, 864 00:41:49,770 --> 00:41:50,820 compilat aquest moment. 865 00:41:50,820 --> 00:41:51,940 Així que això és ja el progrés. 866 00:41:51,940 --> 00:41:53,640 Retallar. . / Positiva, Enter. 867 00:41:53,640 --> 00:41:56,060 >> Exigeixo que em dones un enter positiu. 868 00:41:56,060 --> 00:41:57,750 Negatiu 1. 869 00:41:57,750 --> 00:41:59,020 Negatiu 2. 870 00:41:59,020 --> 00:42:00,680 Negatiu 3. 871 00:42:00,680 --> 00:42:01,760 Zero. 872 00:42:01,760 --> 00:42:03,000 Una. 873 00:42:03,000 --> 00:42:05,130 I gràcies pel qual el que ara s'imprimeix. 874 00:42:05,130 --> 00:42:07,400 >> Déjame intentar una altra cosa, per curiositat. 875 00:42:07,400 --> 00:42:09,600 M'ha informat al'entrada un enter. 876 00:42:09,600 --> 00:42:12,870 Però i si en comptes escric en be? 877 00:42:12,870 --> 00:42:14,460 Així que ara veu un prompt diferent - 878 00:42:14,460 --> 00:42:15,350 torneu a intentar. 879 00:42:15,350 --> 00:42:17,670 Però enlloc de la meva codi Què vaig escriure torneu a intentar. 880 00:42:17,670 --> 00:42:22,320 Així que, probablement, és el reintent prompt ve, què li diries? 881 00:42:22,320 --> 00:42:23,540 Sí, des GetInt () en si. 882 00:42:23,540 --> 00:42:26,650 Així que una de les coses que fa el personal de CS50 per vostè, almenys en aquests primers 883 00:42:26,650 --> 00:42:30,400 setmana, és que hem escrit alguna quantitat de comprovació d'errors per assegurar-se que si 884 00:42:30,400 --> 00:42:34,260 truqui GetInt (), vostè almenys tornar a un int de l'usuari. 885 00:42:34,260 --> 00:42:35,460 No rebrà una cadena. 886 00:42:35,460 --> 00:42:36,440 No rebrà un char. 887 00:42:36,440 --> 00:42:39,660 No va a aconseguir alguna cosa més en conjunt. 888 00:42:39,660 --> 00:42:40,510 Rebreu un int. 889 00:42:40,510 --> 00:42:41,890 >> Ara, potser no sigui positiu. 890 00:42:41,890 --> 00:42:42,770 Potser no és negatiu. 891 00:42:42,770 --> 00:42:44,550 Nosaltres no garantim voltant d'això. 892 00:42:44,550 --> 00:42:48,960 Però anem a molestar a l'usuari que torni a intentar, reintent, torneu a intentar fins que ell o ella realment 893 00:42:48,960 --> 00:42:49,810 coopera. 894 00:42:49,810 --> 00:42:53,085 De la mateixa manera, si ho faig 1.23, això no és un enter. 895 00:42:53,085 --> 00:42:58,400 Però si jo escric en, diguem, 50, que em dóna un valor que jo volia. 896 00:42:58,400 --> 00:42:59,050 >> Està bé. 897 00:42:59,050 --> 00:43:01,380 Així que no està malament. 898 00:43:01,380 --> 00:43:04,780 Teniu preguntes sobre el que acabem de fer? 899 00:43:04,780 --> 00:43:07,930 La conclusió clau és, per ser clars, no tant el bucle, el que hem vist 900 00:43:07,930 --> 00:43:10,880 abans tot i que no tenim realment utilitzat, però el tema d'abast, on 901 00:43:10,880 --> 00:43:17,045 les variables només poden ser només poden utilitzar dins d'un cert marge especificat. 902 00:43:17,045 --> 00:43:19,830 >> Bé, permetin-me abordar el suggeriment que va fer prèviament, la d'un 903 00:43:19,830 --> 00:43:20,860 variable global. 904 00:43:20,860 --> 00:43:24,880 Com acotació al marge, resulta que una altra solució a aquest problema, però 905 00:43:24,880 --> 00:43:28,880 típicament una solució incorrecta o una solució mal dissenyat, és 906 00:43:28,880 --> 00:43:31,670 declarar la variable com el que és cridada una variable global. 907 00:43:31,670 --> 00:43:34,610 Ara estic una mica de violar la meva definició d'abast perquè hi ha 908 00:43:34,610 --> 00:43:37,680 ni claus a la part superior i la part inferior d'un arxiu. 909 00:43:37,680 --> 00:43:40,190 Però la implicació que és que ara, en línia de quatre, 910 00:43:40,190 --> 00:43:41,710 n és una variable global. 911 00:43:41,710 --> 00:43:44,460 I com el seu nom indica, és només accessible a tot arreu. 912 00:43:44,460 --> 00:43:45,790 >> Rasguño en realitat té aquestes. 913 00:43:45,790 --> 00:43:48,650 Si ha utilitzat una variable, es pot recordar has de triar si és per 914 00:43:48,650 --> 00:43:50,780 aquest element sprite, o per a tots els sprites. 915 00:43:50,780 --> 00:43:54,270 Bé, tots els sprites és només el més clar manera de dir global. 916 00:43:54,270 --> 00:43:55,520 Sí? 917 00:43:55,520 --> 00:44:09,690 918 00:44:09,690 --> 00:44:10,990 Ah, bona pregunta. 919 00:44:10,990 --> 00:44:14,310 >> Així recordar que en la primera versió del meu codi, quan incorrectament 920 00:44:14,310 --> 00:44:17,700 n declarats i definits en la línia de nou - 921 00:44:17,700 --> 00:44:19,980 Jo vaig declarar com una variable i jo li vaig donar un valor amb 922 00:44:19,980 --> 00:44:21,160 l'operador d'assignació - 923 00:44:21,160 --> 00:44:22,520 això em va donar dos errors. 924 00:44:22,520 --> 00:44:26,560 Un d'ells, el fet que n no es va utilitzar, i dos, que en la línia 11 925 00:44:26,560 --> 00:44:27,770 només que no va ser declarat. 926 00:44:27,770 --> 00:44:31,120 Així que el primer que jo no ho vaig fer direcció en el moment. 927 00:44:31,120 --> 00:44:35,130 No és estrictament un error declarar una variable, però no la fem servir. 928 00:44:35,130 --> 00:44:38,540 Però una de les coses que hem fet en el CS50 aparell, deliberadament, 929 00:44:38,540 --> 00:44:43,340 pedagògicament, és que hem barri puja el expectatives que el compilador crea 930 00:44:43,340 --> 00:44:46,970 Assegureu-vos que està fent les coses no només correctament, però molt bé. 931 00:44:46,970 --> 00:44:51,520 >> Perquè si vostè està declarant una variable com n i mai utilitzar o fer-lo servir 932 00:44:51,520 --> 00:44:53,700 correctament, el que es fa aquí? 933 00:44:53,700 --> 00:44:55,650 Realment no serveix per a res. 934 00:44:55,650 --> 00:44:58,980 I és molt fàcil amb el temps, si no configuri el seu propi ordinador en 935 00:44:58,980 --> 00:45:01,960 d'aquesta manera, a només ha codi que té petits romanents aquí, les restes allà. 936 00:45:01,960 --> 00:45:04,390 I mesos després, un mira cap enrere i vostè és com, per què és aquesta línia de 937 00:45:04,390 --> 00:45:05,060 Codi d'allà? 938 00:45:05,060 --> 00:45:07,940 I si no hi ha una bona raó, no beneficia a vostè o els seus col · legues 939 00:45:07,940 --> 00:45:10,650 en el camí a haver de ensopegaran llavors. 940 00:45:10,650 --> 00:45:12,540 >> Com acotació al marge, on està que ve? 941 00:45:12,540 --> 00:45:16,410 Bé, recorda que cada vegada que compilem programa, totes aquestes coses són 942 00:45:16,410 --> 00:45:17,380 sent impresa. 943 00:45:17,380 --> 00:45:18,350 Així que anem a tornar a aquest. 944 00:45:18,350 --> 00:45:22,230 Però, de nou, fer és una utilitat que automatitza el procés de recopilació de 945 00:45:22,230 --> 00:45:24,830 executar el compilador real anomenat so metàl · lic. 946 00:45:24,830 --> 00:45:27,650 Aquesta cosa, veurem amb el temps, té a veure amb la depuració amb un especial 947 00:45:27,650 --> 00:45:29,060 programa que es diu el depurador. 948 00:45:29,060 --> 00:45:32,150 Això té a veure amb l'optimització de la Codi - més sobre això en el futur. 949 00:45:32,150 --> 00:45:33,620 Std = C99 - 950 00:45:33,620 --> 00:45:37,870 això només significa utilitzar la versió de 1999 de C. C ha estat present més temps que 951 00:45:37,870 --> 00:45:40,830 això, però van fer algunes bones canvis 10 més fa anys. 952 00:45:40,830 --> 00:45:42,690 >> I aquí els rellevants. 953 00:45:42,690 --> 00:45:45,880 Estem dient que fer tot el que prèviament hauria estat una advertència 954 00:45:45,880 --> 00:45:48,560 un error que impedeix l'estudiant de compilació. 955 00:45:48,560 --> 00:45:51,400 I mitjans de paret fan que per a un manat sencer de les coses, no 956 00:45:51,400 --> 00:45:53,060 només en relació amb les variables. 957 00:45:53,060 --> 00:45:54,700 I llavors m'ho dius desplaçar-se fins Al final d'aquesta línia. 958 00:45:54,700 --> 00:45:56,430 I això, també, que finalment va a tornar. 959 00:45:56,430 --> 00:45:59,040 Això és, òbviament, el nom de l'arxiu que estic compilant. 960 00:45:59,040 --> 00:46:02,160 Això recorda el nom del fitxer Estic sortida com el nom 961 00:46:02,160 --> 00:46:04,070 del meu programa executable. 962 00:46:04,070 --> 00:46:08,970 Aquesta-lcs50 només significa utilitzar el CS50 biblioteca i els zeros i uns que 963 00:46:08,970 --> 00:46:12,390 el personal va escriure i compilar abans aquest any, integrar 964 00:46:12,390 --> 00:46:13,490 que en el meu programa. 965 00:46:13,490 --> 00:46:16,130 >> I ningú sap el que és-lm? 966 00:46:16,130 --> 00:46:18,150 És la biblioteca de matemàtiques, que és aquí, fins i tot si ets 967 00:46:18,150 --> 00:46:19,320 sense fer res de matemàtiques. 968 00:46:19,320 --> 00:46:22,620 És només proporciona automàticament que ens fan. 969 00:46:22,620 --> 00:46:26,540 >> Bé, deixa fer un altre exemple aquí mitjançant l'obertura d'un nou arxiu. 970 00:46:26,540 --> 00:46:30,560 I m'ho dius salvar aquest com string.c. 971 00:46:30,560 --> 00:46:37,980 Resulta que mentre parlem de les dades tipus actuals, hi ha fins i tot més 972 00:46:37,980 --> 00:46:40,630 passant per sota de la campana el que hem vist fins al moment. 973 00:46:40,630 --> 00:46:42,290 Així que permetin-me ràpidament fer un programa ràpid. 974 00:46:42,290 --> 00:46:44,510 Inclogui stdio.h. 975 00:46:44,510 --> 00:46:45,730 I vaig a guardar això. 976 00:46:45,730 --> 00:46:48,110 I ja saps, no em deixis fer l' mateix error una i altra vegada. 977 00:46:48,110 --> 00:46:50,540 Inclogui cs50.h. 978 00:46:50,540 --> 00:46:54,870 I me n'aniré endavant ara i fer int main (void). 979 00:46:54,870 --> 00:46:58,790 >> I ara simplement vull fer un programa que fa això - declarar una cadena 980 00:46:58,790 --> 00:47:03,610 anomenada s i obtenir una cadena per part de l'usuari. 981 00:47:03,610 --> 00:47:05,820 I permetin-me fer una mica de instruccions aquí - 982 00:47:05,820 --> 00:47:09,960 si us plau dóna'm una cadena - així l'usuari sap què fer. 983 00:47:09,960 --> 00:47:13,190 I llavors aquí sota d'aquest, Vull fer el següent - 984 00:47:13,190 --> 00:47:16,060 per int i en zero. 985 00:47:16,060 --> 00:47:18,580 Un cop més, els informàtics solen començarà a comptar des de zero, però podríem 986 00:47:18,580 --> 00:47:20,340 fer que un si realment volíem. 987 00:47:20,340 --> 00:47:27,240 Ara em faré i és menor que la longitud de la cadena del s. 988 00:47:27,240 --> 00:47:28,430 Així 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 de nou, és concisa perquè és més fàcil per escriure, tot i que es tracta d'un 991 00:47:31,650 --> 00:47:32,590 poc críptic. 992 00:47:32,590 --> 00:47:35,290 >> Aquesta és una funció que no hem fet servir abans, però literalment fa això - 993 00:47:35,290 --> 00:47:37,810 tornarà a mi un nombre que representa la longitud de la cadena 994 00:47:37,810 --> 00:47:38,690 que l'usuari escriu. 995 00:47:38,690 --> 00:47:41,740 Si s'escriuen en hola, tornaria cinc perquè hi ha cinc 996 00:47:41,740 --> 00:47:42,890 lletres en hola. 997 00:47:42,890 --> 00:47:45,390 Llavors, en cada iteració de aquest bucle, i plus plus. 998 00:47:45,390 --> 00:47:49,170 Així que de nou, un estàndard de construcció, fins i tot si vostè no està molt molt còmode o 999 00:47:49,170 --> 00:47:50,420 familiaritzats amb ella encara. 1000 00:47:50,420 --> 00:47:53,220 >> Però ara en cada iteració d'aquest bucle, compte del que faré. 1001 00:47:53,220 --> 00:47:56,690 Vull seguir endavant i imprimir un sol personatge - 1002 00:47:56,690 --> 00:47:59,940 per% c barra invertida n en una nova línia. 1003 00:47:59,940 --> 00:48:00,990 I després, ja saps el que vull fer? 1004 00:48:00,990 --> 00:48:05,090 Qualsevol que sigui la paraula és que l'usuari escriu en, com a hola, vull imprimir 1005 00:48:05,090 --> 00:48:09,530 H-I-L-L-O, un caràcter per línia. 1006 00:48:09,530 --> 00:48:13,080 En altres paraules, vull arribar a la caràcters individuals d'una cadena, 1007 00:48:13,080 --> 00:48:16,770 el qual fins ara una cadena acaba estat una seqüència de caràcters. 1008 00:48:16,770 --> 00:48:21,690 >> I resulta que jo puc fer s, suport, I, claudàtor de tancament, tancament 1009 00:48:21,690 --> 00:48:23,580 entre parèntesis, punt i coma. 1010 00:48:23,580 --> 00:48:25,640 I jo he de fer una cosa més. 1011 00:48:25,640 --> 00:48:30,570 Està en un arxiu anomenat string.h strlen que es declara. 1012 00:48:30,570 --> 00:48:33,190 Així que si vull fer servir aquesta funció, He de dir-li al compilador, 1013 00:48:33,190 --> 00:48:34,450 esperar per usar-lo. 1014 00:48:34,450 --> 00:48:37,040 Ara vaig a seguir endavant i fer el programa anomenat cadena. 1015 00:48:37,040 --> 00:48:39,150 Dot, barra, cadena. 1016 00:48:39,150 --> 00:48:40,130 >> Si us plau, dóna'm una cadena. 1017 00:48:40,130 --> 00:48:40,900 Vaig a seguir endavant i escriu. 1018 00:48:40,900 --> 00:48:43,040 Hola, en majúscules, Enter. 1019 00:48:43,040 --> 00:48:47,390 I ara noto He imprès el un caràcter després de l'altra. 1020 00:48:47,390 --> 00:48:51,450 Així el nou detall aquí és que una cadena, al final del dia, pot ser 1021 00:48:51,450 --> 00:48:54,810 visitada per mitjà de la seva individu personatges mitjançant la introducció de la plaça 1022 00:48:54,810 --> 00:48:55,840 notació de claudàtors. 1023 00:48:55,840 --> 00:48:59,090 I és que una cadena sota el capó és de fet una seqüència de 1024 00:48:59,090 --> 00:48:59,810 personatges. 1025 00:48:59,810 --> 00:49:02,010 Però el millor d'ells és en la memòria RAM de l'ordinador - 1026 00:49:02,010 --> 00:49:05,300 Mac, PC, el que sigui - són literalment, d'esquena a l'esquena - 1027 00:49:05,300 --> 00:49:06,225 H-I-L-L-O - 1028 00:49:06,225 --> 00:49:09,920 a nivell individual, al costat bytes en la memòria. 1029 00:49:09,920 --> 00:49:13,210 >> Així que si vol aconseguir en la vuitena tals bytes, que en aquest bucle hauria 1030 00:49:13,210 --> 00:49:16,900 suport de zero, suport d'un, suport de dos, Suport de tres, quatre bracket - 1031 00:49:16,900 --> 00:49:18,890 això és zero indexats fins a cinc - 1032 00:49:18,890 --> 00:49:23,330 que s'imprimeixi H-I-L-L-O en la seva pròpia línia. 1033 00:49:23,330 --> 00:49:26,320 >> Ara, com un teaser, deixa mostrar-te el tipus de coses que finalment serà 1034 00:49:26,320 --> 00:49:31,950 capaç d'entendre, almenys amb una mica de mirar proper. 1035 00:49:31,950 --> 00:49:35,610 D'una banda, el que inclou en l'actual exemples, si ho desitja, és en realitat 1036 00:49:35,610 --> 00:49:38,300 una de les primeres fugides de la presó per l'iPhone. 1037 00:49:38,300 --> 00:49:40,800 Jailbreaking significa formació d'esquerdes al telèfon el que en realitat es pot utilitzar en un 1038 00:49:40,800 --> 00:49:43,380 divers portador o instal · lació seu propi programari. 1039 00:49:43,380 --> 00:49:45,660 I t'adonaràs que això sembla completament críptica, el més probable. 1040 00:49:45,660 --> 00:49:46,520 Però mira això. 1041 00:49:46,520 --> 00:49:50,420 L'iPhone va ser aparentment va trencar amb un bucle, si un estat, una persona 1042 00:49:50,420 --> 00:49:52,580 condicions, un manat de funcions no hem vist. 1043 00:49:52,580 --> 00:49:54,230 >> I de nou, no ho farà en primera vista, probablement 1044 00:49:54,230 --> 00:49:55,620 entendre com funciona. 1045 00:49:55,620 --> 00:49:58,940 Però tot el que tenim sort de prendre per fet en la nostra vida moderna 1046 00:49:58,940 --> 00:50:02,040 en realitat tendeix a reduir, fins i tot a alguns d'aquests fonaments que hem estat 1047 00:50:02,040 --> 00:50:02,820 mirar. 1048 00:50:02,820 --> 00:50:06,680 Deixin-me seguir endavant i obrir una altre programa, holloway.c. 1049 00:50:06,680 --> 00:50:08,970 Així que això, també, és una cosa que en realitat no hauria de saber. 1050 00:50:08,970 --> 00:50:12,440 Encara que cap dels empleats o que pogués Probablement resoldre això observant 1051 00:50:12,440 --> 00:50:15,450 perquè aquest era el codi d'una altra que es va presentar al que és 1052 00:50:15,450 --> 00:50:19,630 històricament conegut com un ofuscat C concurs, en el qual escriu un programa 1053 00:50:19,630 --> 00:50:24,670 que compila i s'executa, però és tan condemnadament críptica cap ésser humà pot entendre el que 1054 00:50:24,670 --> 00:50:27,530 que farà fins que que en realitat executa. 1055 00:50:27,530 --> 00:50:29,940 >> Així que de fet, si ens fixem en aquest codi, veure un switch. 1056 00:50:29,940 --> 00:50:30,870 Veig principal. 1057 00:50:30,870 --> 00:50:33,800 Veig aquests claudàtors implicant algun tipus d'arranjament. 1058 00:50:33,800 --> 00:50:35,970 Algú vol endevinar el que aquest programa en realitat 1059 00:50:35,970 --> 00:50:37,220 Que si em quedo Holloway? 1060 00:50:37,220 --> 00:50:39,940 1061 00:50:39,940 --> 00:50:40,750 Sí 1062 00:50:40,750 --> 00:50:43,050 D'acord. 1063 00:50:43,050 --> 00:50:44,690 Ben fet. 1064 00:50:44,690 --> 00:50:48,090 Tan sols el personal i jo no pot entendre el que aquestes coses fan. 1065 00:50:48,090 --> 00:50:51,670 >> I ara, finalment, deixa que em vagi per davant i obrir un altre programa. 1066 00:50:51,670 --> 00:50:53,440 Aquest - 1067 00:50:53,440 --> 00:50:55,550 una vegada més, farem el codi font disponible en línia - això és només 1068 00:50:55,550 --> 00:50:57,480 tipus d'agradable a la vista. 1069 00:50:57,480 --> 00:50:59,750 Tot el que van fer és prémer el barra d'espai una mica. 1070 00:50:59,750 --> 00:51:01,320 Però aquest és el codi real. 1071 00:51:01,320 --> 00:51:04,790 Així que si vostè pensa que és bastant, si realment executar aquest en el sistema, 1072 00:51:04,790 --> 00:51:08,970 finalment veurà el que pot fer coses com aquesta. 1073 00:51:08,970 --> 00:51:14,008 >> Així que us deixem en aquesta nota i ens veiem dimecres. 1074 00:51:14,008 --> 00:51:18,440 >> [Reproducció de música] 1075 00:51:18,440 --> 00:51:23,380 >> ALTAVEU 2: En la següent CS50, la TFS en escena un motí. 1076 00:51:23,380 --> 00:51:24,112 >> ALTAVEU 3: Aquí està. 1077 00:51:24,112 --> 00:51:25,362 Posa-ho! 1078 00:51:25,362 --> 00:51:29,912 1079 00:51:29,912 --> 00:51:32,074 >> [Reproducció de música]