1 00:00:00,000 --> 00:00:10,940 2 00:00:10,940 --> 00:00:13,060 >> DAVID Malan J: Todos dereita, de xeito que este é CS50. 3 00:00:13,060 --> 00:00:15,040 E esta é claramente unha venres. 4 00:00:15,040 --> 00:00:16,850 E este é o final dunha semana. 5 00:00:16,850 --> 00:00:21,020 Entón podes recordar que paramos, última vez, cun cliffhanger das sortes. 6 00:00:21,020 --> 00:00:25,020 En que expomos esa mentira, que non importa o que foi ensino crecente 7 00:00:25,020 --> 00:00:31,610 up, 1 dividido por 10 non é, en traxe, 0,1 ou 0,100 ou 0,10 mil. 8 00:00:31,610 --> 00:00:35,270 En realidade, se nós compilamos esta programa, como fixemos onte, con, 9 00:00:35,270 --> 00:00:39,770 facer imprecisión, e, a continuación, facer dot, slash, imprecisión, 10 00:00:39,770 --> 00:00:43,600 aprendemos que iso é o que é 1 dividido por 10 é realmente. 11 00:00:43,600 --> 00:00:46,140 Entón iso non é realmente así o caso. 12 00:00:46,140 --> 00:00:49,014 Pero iso non fai alusión a algúns limitación fundamental de ordenadores. 13 00:00:49,014 --> 00:00:50,930 E, de feito, entre os cousas que nós imos facer 14 00:00:50,930 --> 00:00:55,130 hoxe é dar un ollo porque este ten pasou, o que implicacións que ten, 15 00:00:55,130 --> 00:00:58,430 como a humanidade fallou de comprender isto nalgúns moi 16 00:00:58,430 --> 00:01:00,410 situations-- serio o resultado de que o 17 00:01:00,410 --> 00:01:03,141 foi bastante tráxico e e tamén expensive-- 18 00:01:03,141 --> 00:01:04,849 Bótalle un ollo a como nós realmente defender 19 00:01:04,849 --> 00:01:06,530 contra estes tipos de limitacións. 20 00:01:06,530 --> 00:01:10,940 Entón intuitivamente quizais por iso que está dividido por 1 10, 21 00:01:10,940 --> 00:01:15,480 segundo o meu ordenador aquí, non só 1/10, 0,10? 22 00:01:15,480 --> 00:01:15,980 Si. 23 00:01:15,980 --> 00:01:16,530 ¿Que pensas? 24 00:01:16,530 --> 00:01:17,860 >> PARTICIPANTE: A raíz é diferente? 25 00:01:17,860 --> 00:01:18,550 >> DAVID Malan J: Qué é? 26 00:01:18,550 --> 00:01:19,730 Oh, a raíz é diferente? 27 00:01:19,730 --> 00:01:20,720 Polo tanto, non é ben así. 28 00:01:20,720 --> 00:01:23,200 É realmente máis fundamental para o hardware. 29 00:01:23,200 --> 00:01:23,980 Outros pensamentos? 30 00:01:23,980 --> 00:01:24,584 Si. 31 00:01:24,584 --> 00:01:26,750 PARTICIPANTE: Eles representar números de forma diferente? 32 00:01:26,750 --> 00:01:27,880 DAVID Malan J: Entón they-- dereito. 33 00:01:27,880 --> 00:01:29,338 Representan números de forma diferente. 34 00:01:29,338 --> 00:01:30,700 Inaccurately, aparentemente. 35 00:01:30,700 --> 00:01:33,190 Así que é-- Ben, a diferenza do que? 36 00:01:33,190 --> 00:01:34,490 Ou de quen? 37 00:01:34,490 --> 00:01:35,050 De nós? 38 00:01:35,050 --> 00:01:35,966 PARTICIPANTE: Si. 39 00:01:35,966 --> 00:01:38,930 Eles non usan o decimal sistema para [inaudível]. 40 00:01:38,930 --> 00:01:39,680 DAVID Malan J: Aceptar. 41 00:01:39,680 --> 00:01:41,560 Así, en certo sentido, non usar o sistema decimal. 42 00:01:41,560 --> 00:01:43,720 Debaixo do capó, todo é, de feito, binario, 43 00:01:43,720 --> 00:01:45,510 e iso é relacionado, en realidade. 44 00:01:45,510 --> 00:01:48,135 Pero é aínda máis sinxela explicación do que iso. 45 00:01:48,135 --> 00:01:48,635 Si. 46 00:01:48,635 --> 00:01:49,970 >> PARTICIPANTE: Eles só ten tantas anacos. 47 00:01:49,970 --> 00:01:52,370 Eles só poden almacenar ata un certo extensión, como cos decimais. 48 00:01:52,370 --> 00:01:52,780 >> DAVID Malan J: Si. 49 00:01:52,780 --> 00:01:54,420 Isto é o que está realmente quedando para el. 50 00:01:54,420 --> 00:01:57,180 Acontece que os ordenadores normalmente, será sempre soa 51 00:01:57,180 --> 00:01:59,690 utilizar unha cantidade finita de información para representar algo. 52 00:01:59,690 --> 00:01:59,870 Non? 53 00:01:59,870 --> 00:02:02,110 Despois de todo, nós só temos un fixo cantidade de espazo no disco duro. 54 00:02:02,110 --> 00:02:04,210 Nós só temos unha cantidade fixa de memoria RAM, ou memoria de ordenador. 55 00:02:04,210 --> 00:02:06,251 E se só ten un importe fixo de algo, 56 00:02:06,251 --> 00:02:09,611 certamente non pode realmente contar-se ao infinito ou calquera número que sexa. 57 00:02:09,611 --> 00:02:11,610 Ti, tipo, ten que escoller o intervalo 58 00:02:11,610 --> 00:02:13,220 de valores que vai apoiar. 59 00:02:13,220 --> 00:02:18,100 >> E así, por exemplo, unha semana ou dúas atrás, cando falamos de ASCII, 60 00:02:18,100 --> 00:02:21,610 e nós falamos sobre 8 bits, ou un byte, por así dicir, 61 00:02:21,610 --> 00:02:26,360 o maior número puidésemos representar con 8 bits foi o que? 62 00:02:26,360 --> 00:02:28,350 255. 63 00:02:28,350 --> 00:02:31,850 E podemos representar 256 valores totais pero non se pasarmos un deles 64 00:02:31,850 --> 00:02:34,190 en 0-- Ben, pero se nós pasar un deles en 0, 65 00:02:34,190 --> 00:02:36,830 a continuación, o maior número é, por suposto, 255. 66 00:02:36,830 --> 00:02:39,410 >> Así, verifícase, que se trata o caso tamén, neste contexto. 67 00:02:39,410 --> 00:02:42,350 Comezamos a falar, a última vez, sobre números de punto flotante, que 68 00:02:42,350 --> 00:02:44,640 son diferentes dos números enteiros, en que teñen un punto decimal 69 00:02:44,640 --> 00:02:47,056 e, esperamos, algúns números Despois diso, pero son demasiado. 70 00:02:47,056 --> 00:02:51,730 Un ordenador só vai tipicamente usar 32 bits, 64 bits quizais 71 00:02:51,730 --> 00:02:53,497 para representar un valor de punto flotante. 72 00:02:53,497 --> 00:02:56,080 Así, aínda que nós medran aprendizaxe da matemática e saber 73 00:02:56,080 --> 00:02:58,750 que pode absolutamente ter un número infinito de números 74 00:02:58,750 --> 00:03:01,650 despois do punto decimal, non se ten memoria finita. 75 00:03:01,650 --> 00:03:03,930 Ti, tipo, ten que redondear, ou seleccionar 76 00:03:03,930 --> 00:03:05,346 números que vai representar. 77 00:03:05,346 --> 00:03:08,710 E así que pode pensar, en certo sentido, sendo este o máis próximo ao ordenador 78 00:03:08,710 --> 00:03:14,050 aproximación ao valor que 1/10 pode obter, con só 32 ou máis anacos. 79 00:03:14,050 --> 00:03:15,300 E non é só 1/10. 80 00:03:15,300 --> 00:03:19,820 >> Por exemplo, se eu cambiar isto para 1/3, o que nós pensamos que é aínda máis sinxela. 81 00:03:19,820 --> 00:03:21,300 Entón 1 dividido por tres. 82 00:03:21,300 --> 00:03:22,355 Déixeme gardar o ficheiro. 83 00:03:22,355 --> 00:03:24,680 Deixe-me ir adiante e recompilar-lo. 84 00:03:24,680 --> 00:03:25,820 E déixeme re-executar-lo. 85 00:03:25,820 --> 00:03:30,000 Aquí tamén, ao parecer, 1/3 non é 0,3 e, a continuación, un número infinito de 3'S 86 00:03:30,000 --> 00:03:30,770 despois diso. 87 00:03:30,770 --> 00:03:32,540 Ten esa imprecisión ao final. 88 00:03:32,540 --> 00:03:35,544 Entón, nós, seres humanos son correctos e que aprendeu é, de feito, correcto, 89 00:03:35,544 --> 00:03:37,460 pero estamos esbarrando contra algunhas limitacións. 90 00:03:37,460 --> 00:03:39,420 >> E o que eu pensaba fariamos hoxe, é comezar 91 00:03:39,420 --> 00:03:42,190 mirando, a verdade, o tráxicas consecuencias desta 92 00:03:42,190 --> 00:03:45,490 ás veces, cando a humanidade non chega a aplicar 93 00:03:45,490 --> 00:03:48,460 para esta realidade e estas limitacións. 94 00:03:48,460 --> 00:03:52,360 E nós imos ver unha serie de viñetas do History Channel que leva 95 00:03:52,360 --> 00:03:53,950 Un ollar sobre como as cousas deron mal. 96 00:03:53,950 --> 00:03:56,340 É preto de 8 minutos de duración, e imos volver despois de este 97 00:03:56,340 --> 00:03:59,439 e dar un ollo a exactamente o que máis pode dar mal. 98 00:03:59,439 --> 00:04:00,605 Se puidésemos diminuír a intensidade da lights-- 99 00:04:00,605 --> 00:04:02,350 >> [REPRODUCIÓN DE VIDEO] 100 00:04:02,350 --> 00:04:06,310 >> -Computadores, Todos temos que chegou a aceptar os problemas que moitas veces frustrante 101 00:04:06,310 --> 00:04:07,750 ir con eles. 102 00:04:07,750 --> 00:04:11,370 Erros, virus e software glitches son pequenos os prezos 103 00:04:11,370 --> 00:04:13,230 a pagar para o barrio. 104 00:04:13,230 --> 00:04:17,519 Pero, en alta tecnoloxía e de alta velocidade aplicacións militares do programa espacial e, 105 00:04:17,519 --> 00:04:22,130 o menor problema pode ser ampliada en desastre. 106 00:04:22,130 --> 00:04:27,750 O 04 de xuño de 1996, os científicos preparado para lanzar un foguete non tripulado Ariane 5. 107 00:04:27,750 --> 00:04:29,890 Estaba cargando científica satélites deseñados 108 00:04:29,890 --> 00:04:33,030 para establecer con precisión o xeito no que o Interactúa campo magnético da Terra 109 00:04:33,030 --> 00:04:35,600 con ventos solares. 110 00:04:35,600 --> 00:04:37,930 O foguete foi construído para a Axencia Espacial Europea 111 00:04:37,930 --> 00:04:41,620 e despegou da súa instalación na costa de Guayana Francesa. 112 00:04:41,620 --> 00:04:44,924 >> -e Preto de 30 segundos en o voo, eles primeiro 113 00:04:44,924 --> 00:04:46,340 notado que algo estaba a suceder de malo. 114 00:04:46,340 --> 00:04:49,280 Que os bocais foron xiratorio de forma que non debería. 115 00:04:49,280 --> 00:04:53,042 Preto de 40 segundos de voo, claramente o vehículo estaba en apuros, 116 00:04:53,042 --> 00:04:55,250 e é aí onde fixeron a decisión de destruílo. 117 00:04:55,250 --> 00:04:58,970 A Safety Officer Franxa con coraxe tremendas apertou o botón, 118 00:04:58,970 --> 00:05:03,940 estoupou o foguete antes de que puidese ser un perigo para a seguridade pública. 119 00:05:03,940 --> 00:05:06,600 >> -Esta Foi a doncela viaxe do Ariane 5, 120 00:05:06,600 --> 00:05:09,270 ea súa destrución levou poñer debido a un fallo 121 00:05:09,270 --> 00:05:10,992 incorporado en software do foguete. 122 00:05:10,992 --> 00:05:12,700 -O Problema na Ariane era que hai 123 00:05:12,700 --> 00:05:15,370 foi un número necesario 64 bits para expresar, 124 00:05:15,370 --> 00:05:18,150 e el quería converter a un número de 16 bits. 125 00:05:18,150 --> 00:05:21,160 Eles asumiron que o número nunca ía ser moi grande, 126 00:05:21,160 --> 00:05:25,020 que a maioría destes números en o número de 64 bits eran de 0. 127 00:05:25,020 --> 00:05:26,310 Estaban equivocados. 128 00:05:26,310 --> 00:05:28,680 >> -O Incapacidade dun programa de software para aceptar 129 00:05:28,680 --> 00:05:32,820 o tipo de número xerado pola outra estaba na orixe do fallo. 130 00:05:32,820 --> 00:05:37,190 Desenvolvemento de software chegou a ser un parte moi cara de nova tecnoloxía. 131 00:05:37,190 --> 00:05:40,760 O Ariane 4 foguete fora moi éxito, tanto do software 132 00:05:40,760 --> 00:05:43,990 creado por iso tamén foi usado no Ariane 5. 133 00:05:43,990 --> 00:05:49,750 >> -O Problema básico era que o Ariane 5 foi máis rápido, máis rápido acelerada. 134 00:05:49,750 --> 00:05:53,000 E o software non que representaron. 135 00:05:53,000 --> 00:05:56,330 >> -A Destrución do foguete foi un enorme desastre financeiro, 136 00:05:56,330 --> 00:05:59,670 todo debido a un erro de software minuto. 137 00:05:59,670 --> 00:06:01,990 Pero este non foi o primeiro problemas de conversión de datos de cando 138 00:06:01,990 --> 00:06:05,310 había atormentado a tecnoloxía de foguetes moderna. 139 00:06:05,310 --> 00:06:08,300 >> -En 1991, co inicio da Primeira Guerra do Golfo, 140 00:06:08,300 --> 00:06:10,650 o mísil Patriot experimentaron un tipo semellante 141 00:06:10,650 --> 00:06:12,650 do problema de conversión de número. 142 00:06:12,650 --> 00:06:15,620 Como resultado, 28 persoas, 28 soldados norteamericanos 143 00:06:15,620 --> 00:06:18,440 morreron e preto de 100 outras resultaron feridas, 144 00:06:18,440 --> 00:06:21,900 cando o Patriot, que debería para protexer contra scuds recibidas, 145 00:06:21,900 --> 00:06:24,630 non puido disparar un misil. 146 00:06:24,630 --> 00:06:29,440 >> -Cando Iraq invadiu Kuwait e América Desert Storm lanzado a comezos de 1991, 147 00:06:29,440 --> 00:06:33,800 Baterías de mísiles Patriot foron implantados para protexer a Arabia Saudita e Israel 148 00:06:33,800 --> 00:06:37,000 de ataques de mísiles Scud iraquís. 149 00:06:37,000 --> 00:06:40,610 O Patriot é un norteamericano, de medio alcance superficie-aire do sistema 150 00:06:40,610 --> 00:06:43,010 fabricado pola empresa Raytheon. 151 00:06:43,010 --> 00:06:49,080 >> -O Tamaño do interceptor Patriot, en si, é aproximadamente, un 20 pés de longo. 152 00:06:49,080 --> 00:06:51,250 E pesa preto de 2000 libras. 153 00:06:51,250 --> 00:06:55,195 E el leva unha ogiva de about-- Creo que é máis ou menos 150 libras. 154 00:06:55,195 --> 00:06:59,500 E a ogiva, en si, é un explosivo, 155 00:06:59,500 --> 00:07:02,570 que ten fragmentos en torno a el. 156 00:07:02,570 --> 00:07:06,890 O invólucro da ogiva é deseñado para actuar como chumbo groso. 157 00:07:06,890 --> 00:07:09,130 >> -Os Mísiles son realizado, 4 por contedores, 158 00:07:09,130 --> 00:07:12,080 e son transportados por un semi-remolque. 159 00:07:12,080 --> 00:07:19,100 >> -O Sistema de mísiles anti Patriot remonta polo menos 20 anos. 160 00:07:19,100 --> 00:07:22,320 El foi orixinalmente deseñado como un mísil de defensa aérea 161 00:07:22,320 --> 00:07:24,180 para abater avións inimigos. 162 00:07:24,180 --> 00:07:27,860 Na Primeira Guerra do Golfo, cando esa guerra veu xunto, 163 00:07:27,860 --> 00:07:32,745 Exército quería usalo para abater scuds, non avións. 164 00:07:32,745 --> 00:07:36,150 A Forza iraquí non foi tanto dun problema, 165 00:07:36,150 --> 00:07:39,110 pero o Exército estaba preocupado sobre scuds. 166 00:07:39,110 --> 00:07:42,340 E así intentaron actualizar o Patriot. 167 00:07:42,340 --> 00:07:44,760 >> -Intercepting Un inimigo mísil viaxando a macho cinco 168 00:07:44,760 --> 00:07:47,250 ía ser moi difícil. 169 00:07:47,250 --> 00:07:50,000 Pero cando o Patriot foi levado ás présas en servizo, 170 00:07:50,000 --> 00:07:54,030 o Exército non tiña coñecemento dun Modificación iraquí que fixo 171 00:07:54,030 --> 00:07:56,840 scuds seus case imposible de bater. 172 00:07:56,840 --> 00:08:01,020 >> -O Que pasou, é que os scuds foron chegando, eran inestables, 173 00:08:01,020 --> 00:08:02,310 estaban bailando. 174 00:08:02,310 --> 00:08:05,140 A razón para isto, era os iraquís, a fin 175 00:08:05,140 --> 00:08:09,450 para 600 quilómetros fóra da un mísil gama 300 quilómetros, 176 00:08:09,450 --> 00:08:12,930 levou para fóra peso da ogiva fronte e fixo a ogiva máis lixeiro. 177 00:08:12,930 --> 00:08:17,710 Entón, agora, o Patriot está intentando chegar no Scud, e na maioría das veces, 178 00:08:17,710 --> 00:08:21,700 a esmagadora maioría da tempo, sería só voar polo Scud. 179 00:08:21,700 --> 00:08:25,700 >> -Unha Vez os operadores do sistema Patriot entender que o Patriot errou o seu obxectivo, 180 00:08:25,700 --> 00:08:29,790 que detonada ogiva do Patriot, para evitar posibles accidentes se 181 00:08:29,790 --> 00:08:32,380 Deixouse caer ao chan. 182 00:08:32,380 --> 00:08:36,340 >> -Iso Era o que a maioría da xente viu, aqueles grandes bolas de lume no ceo, 183 00:08:36,340 --> 00:08:41,289 e mal interpretado como intercepta de oxivas Scud. 184 00:08:41,289 --> 00:08:43,590 Aínda durante a noite ceos, Patriots apareceu 185 00:08:43,590 --> 00:08:47,020 para ser correctamente destruíndo scuds, en Dhahran, 186 00:08:47,020 --> 00:08:49,730 non podería haber erro sobre o seu funcionamento. 187 00:08:49,730 --> 00:08:53,990 Alí, sistema de radar do Patriot perdeu o control dun Scud de entrada, 188 00:08:53,990 --> 00:08:56,650 e nunca lanzado, debido a un fallo do software. 189 00:08:56,650 --> 00:08:59,650 190 00:08:59,650 --> 00:09:04,100 Foron os israelís que descuberto por primeira vez que canto máis tempo o sistema foi ligado, 191 00:09:04,100 --> 00:09:07,510 canto maior sexa o tempo de discrepancia tornouse, debido a un reloxo incorporado 192 00:09:07,510 --> 00:09:09,490 no ordenador do sistema. 193 00:09:09,490 --> 00:09:12,670 >> -Cerca A dúas semanas antes a traxedia en Dhahran, 194 00:09:12,670 --> 00:09:15,010 os israelís informar para o Departamento de Defensa, 195 00:09:15,010 --> 00:09:17,940 que o sistema estaba perdendo tempo, que despois de preto de 8 horas de funcionamento, 196 00:09:17,940 --> 00:09:21,410 eles notaron que o sistema foi converténdose no visiblemente menos precisas. 197 00:09:21,410 --> 00:09:25,290 O Departamento de Defensa respondeu contando todas as baterías Patriot 198 00:09:25,290 --> 00:09:28,070 para non deixar os sistemas por un longo período de tempo. 199 00:09:28,070 --> 00:09:29,960 Nunca dixeron que hai moito tempo era. 200 00:09:29,960 --> 00:09:30,460 8 horas? 201 00:09:30,460 --> 00:09:30,960 10 horas? 202 00:09:30,960 --> 00:09:31,870 1000 horas? 203 00:09:31,870 --> 00:09:33,734 Ninguén sabía. 204 00:09:33,734 --> 00:09:35,650 -A Batería Patriot estacionados no cuartel 205 00:09:35,650 --> 00:09:40,410 en Dhahran, ea súa falla interna reloxo, fora en máis de 100 horas 206 00:09:40,410 --> 00:09:43,041 na noite do 25 de febreiro. 207 00:09:43,041 --> 00:09:47,416 >> -É Ruta tempo cunha precisión duns 1/10 dun segundo. 208 00:09:47,416 --> 00:09:49,290 Agora 1/10 dun segundo é un número interesante 209 00:09:49,290 --> 00:09:52,700 porque non se pode expresado en binario, exactamente. 210 00:09:52,700 --> 00:09:54,820 O que significa, non pode ser expresado, exactamente, 211 00:09:54,820 --> 00:09:57,420 en calquera ordenador dixital moderno. 212 00:09:57,420 --> 00:10:01,460 É difícil de crer, pero usar isto como un exemplo. 213 00:10:01,460 --> 00:10:03,520 Imos dar o número, 1/3. 214 00:10:03,520 --> 00:10:07,110 1/3 non pode ser expresada en decimal, exactamente. 215 00:10:07,110 --> 00:10:11,490 1/3 é 0,333 suceder ao infinito. 216 00:10:11,490 --> 00:10:15,486 Non hai ningunha forma de facelo, con precisión absoluta, en decimal. 217 00:10:15,486 --> 00:10:18,360 Iso é o mesmo tipo de problema que aconteceu o Patriot. 218 00:10:18,360 --> 00:10:22,510 Canto máis tempo o sistema funciona, o converteuse en peor o erro de tempo. 219 00:10:22,510 --> 00:10:28,420 >> -Despois De 100 horas de traballo, o erro o tempo foi só preto de 1/3 de segundo. 220 00:10:28,420 --> 00:10:31,830 Pero en termos de segmentación un mísil viaxando a Mach 5, 221 00:10:31,830 --> 00:10:35,890 isto resultou nunha seguimento erro de máis de 600 metros. 222 00:10:35,890 --> 00:10:38,970 Sería un erro grave para os soldados en Dhahran. 223 00:10:38,970 --> 00:10:45,035 >> -O Que pasou, é un lanzamento de Scud foi detectados por satélites de alerta temperá, 224 00:10:45,035 --> 00:10:48,930 e novo que o Scud foi está na súa dirección xeral. 225 00:10:48,930 --> 00:10:51,170 Eles non sabían de onde viña. 226 00:10:51,170 --> 00:10:53,990 >> -Foi Agora ao radar compoñente do sistema Patriot, 227 00:10:53,990 --> 00:10:58,520 defender Dhahran, para localizar e manter o control do mísil inimigo de entrada. 228 00:10:58,520 --> 00:10:59,690 >> -O Radar era moi intelixente. 229 00:10:59,690 --> 00:11:01,710 Sería, de feito, visite a posición do Scud 230 00:11:01,710 --> 00:11:04,040 e, a continuación, prever onde probablemente sería, 231 00:11:04,040 --> 00:11:06,140 a próxima vez, o radar enviou un pulso para fóra. 232 00:11:06,140 --> 00:11:07,660 Que foi chamado ao portón intervalo. 233 00:11:07,660 --> 00:11:11,870 >> -Entón, Xa que o Patriot decide ten tempo suficiente 234 00:11:11,870 --> 00:11:16,280 pasado para volver e comprobar o seguinte localización para este obxecto detectado, 235 00:11:16,280 --> 00:11:17,280 vai volver. 236 00:11:17,280 --> 00:11:21,690 Así, cando se volveu para o mal lugar, a continuación, ve ningún obxecto 237 00:11:21,690 --> 00:11:25,230 e decide que non houbo obxecto, que era unha falsa detección, 238 00:11:25,230 --> 00:11:26,650 e deixa a pista. 239 00:11:26,650 --> 00:11:29,690 A entrada Scud desapareceu da pantalla do radar, 240 00:11:29,690 --> 00:11:32,670 e segundos despois, chocou contra o cuartel. 241 00:11:32,670 --> 00:11:38,100 O Scud matou 28 e foi a última unha despedido durante a Primeira Guerra do Golfo. 242 00:11:38,100 --> 00:11:43,460 Traxicamente, o software actualizado Dhahran chegou o día seguinte. 243 00:11:43,460 --> 00:11:46,150 O fallo de software tivo foi fixado, de peche 244 00:11:46,150 --> 00:11:48,940 un capítulo na conturbada historia do mísil Patriot. 245 00:11:48,940 --> 00:11:50,220 >> [FIN DE REPRODUCIÓN] 246 00:11:50,220 --> 00:11:54,340 >> DAVID Malan J: Entón imos dar un ollo algunhas limitacións semellantes en só un pouco. 247 00:11:54,340 --> 00:11:58,470 Pero primeiro, imos transición para algúns FYI é. 248 00:11:58,470 --> 00:12:01,575 Entón um-- este fin de semana, hai será seccións de super, 249 00:12:01,575 --> 00:12:04,200 que están destinadas a suplantar seccións regulares, que 250 00:12:04,200 --> 00:12:05,460 iniciarase unha semana, polo tanto. 251 00:12:05,460 --> 00:12:08,204 Bótalle un ollo no sitio web do CS50 para máis información sobre aqueles. 252 00:12:08,204 --> 00:12:11,120 Tamén será filmado e transmitido vivir para os que non poidan comparecer. 253 00:12:11,120 --> 00:12:12,980 Conxunto de problemas 1 é o o sitio web do curso xa, 254 00:12:12,980 --> 00:12:15,105 e imos dar un ollo que, en só un pouco. 255 00:12:15,105 --> 00:12:18,350 E o horario de oficina tamén, terá poña este luns a xoves. 256 00:12:18,350 --> 00:12:20,960 >> Polo tanto, este foi o máis canónico programa nós miramos última vez. 257 00:12:20,960 --> 00:12:23,590 É como o máis simple programa pode escribir en C, 258 00:12:23,590 --> 00:12:25,250 e mesmo que é un pouco de unha afirmación ousada. 259 00:12:25,250 --> 00:12:25,750 Non? 260 00:12:25,750 --> 00:12:28,070 Porque hai unha morea de aparente complexidade desta. 261 00:12:28,070 --> 00:12:30,445 Entón, imos dar un ollo rápida no o que algúns destes elementos 262 00:12:30,445 --> 00:12:33,080 eran e, a continuación, tentar achegar un modelo mental de como 263 00:12:33,080 --> 00:12:35,710 estes máis simple de programas traballar, e entón nós imos comezar 264 00:12:35,710 --> 00:12:38,050 mirar para as cousas cada vez máis complexo. 265 00:12:38,050 --> 00:12:41,280 Entón esta liña aquí, destaque agora, en amarelo, o que podemos dicir, a última vez, 266 00:12:41,280 --> 00:12:43,200 que este fai a nós? 267 00:12:43,200 --> 00:12:45,220 Cal é a finalidade a que serve? 268 00:12:45,220 --> 00:12:46,984 Calquera persoa de máis para atrás? 269 00:12:46,984 --> 00:12:47,483 Si. 270 00:12:47,483 --> 00:12:48,649 >> PARTICIPANTE: [inaudível] 271 00:12:48,649 --> 00:12:50,871 272 00:12:50,871 --> 00:12:51,704 DAVID Malan J: Bo. 273 00:12:51,704 --> 00:12:53,537 Por iso, dálle acceso a comandos, ou imos 274 00:12:53,537 --> 00:12:56,750 chamalos de funcións, que alguén persoa escribiu, que son declaradas, 275 00:12:56,750 --> 00:12:58,350 por así dicir, nalgún outro ficheiro. 276 00:12:58,350 --> 00:13:02,370 Entón, imos ver o que un arquivo .h é contra un ficheiro .c, eventualmente. 277 00:13:02,370 --> 00:13:04,710 Pero, por agora, só sei printf que, por exemplo, 278 00:13:04,710 --> 00:13:08,370 está entre as funcións que foron declarada nalgún outro arquivo, nalgún lugar 279 00:13:08,370 --> 00:13:12,930 outra cousa no disco duro da nube que permítenos acceder printf e usalo 280 00:13:12,930 --> 00:13:15,240 sen ter que reinventar que nós mesmos roda. 281 00:13:15,240 --> 00:13:16,930 Mentres tanto, a principal. 282 00:13:16,930 --> 00:13:19,690 Cal foi o análogo do principal, a semana pasada? 283 00:13:19,690 --> 00:13:20,190 Si. 284 00:13:20,190 --> 00:13:21,460 >> PARTICIPANTE: Bandeira verde é premendo. 285 00:13:21,460 --> 00:13:21,740 >> DAVID Malan J: Si. 286 00:13:21,740 --> 00:13:23,490 Scratch, cando bandeira verde premendo. 287 00:13:23,490 --> 00:13:25,560 É como a peza do puzzle que xuta as cousas fóra. 288 00:13:25,560 --> 00:13:28,306 E así, de forma semellante, fixo o mundo decidiu hai uns anos que en C, 289 00:13:28,306 --> 00:13:30,930 e unha morea de outras linguas, se quere escribir un programa, 290 00:13:30,930 --> 00:13:33,410 súa primeira función ten que ser chamado, principal. 291 00:13:33,410 --> 00:13:34,641 E ten que mirar como esta. 292 00:13:34,641 --> 00:13:36,640 Pero imos volver, outra vez, para o que, int, 293 00:13:36,640 --> 00:13:38,690 e, baleiro, significa neste contexto. 294 00:13:38,690 --> 00:13:42,860 De momento, as claves son tipo de como a forma da parte do enigma do cero 295 00:13:42,860 --> 00:13:45,080 que encapsulado un determinado número de liñas. 296 00:13:45,080 --> 00:13:47,070 E entre as liñas aquí, é este aquí. 297 00:13:47,070 --> 00:13:51,610 printf é unha función cuxo propósito na a vida é para imprimir unha secuencia de caracteres formatada. 298 00:13:51,610 --> 00:13:55,010 E por formatada, quero dicir que pode conectar o espazo reservado valores, 299 00:13:55,010 --> 00:13:58,360 e pode especificar cantos decimal puntos, cantos números para imprimir 300 00:13:58,360 --> 00:14:00,040 despois dun punto decimal e similares. 301 00:14:00,040 --> 00:14:05,040 E printf, por suposto, unha toma ou máis argumentos ou parámetros, 302 00:14:05,040 --> 00:14:06,770 doutro xeito coñecido, máis simplemente, como entradas. 303 00:14:06,770 --> 00:14:09,230 >> Entón printf, como unha morea de funcións, leva entradas. 304 00:14:09,230 --> 00:14:12,730 E esas entradas son abrazados por ambos os parénteses aquí. 305 00:14:12,730 --> 00:14:15,180 E dentro desas é unha entrada. 306 00:14:15,180 --> 00:14:18,600 É unha cadea, como xa o chamou, que é só unha secuencia de caracteres, 307 00:14:18,600 --> 00:14:22,310 como unha palabra ou unha frase, é un todo ensaio mesmo, entre comiñas dobres. 308 00:14:22,310 --> 00:14:25,712 E iso é o que vai influír no comportamento printf porque, obviamente, 309 00:14:25,712 --> 00:14:27,170 é só unha función de impresión xenérico. 310 00:14:27,170 --> 00:14:29,600 Non vai saber o que para imprimir, a menos que diga a el. 311 00:14:29,600 --> 00:14:31,000 E, a continuación, algunhas minúcias. 312 00:14:31,000 --> 00:14:34,056 O que nós dicimos isto estraño secuencia de símbolos é? 313 00:14:34,056 --> 00:14:34,556 Si. 314 00:14:34,556 --> 00:14:35,410 >> PARTICIPANTE: Nova liña. 315 00:14:35,410 --> 00:14:35,990 >> DAVID Malan J: Nova liña. 316 00:14:35,990 --> 00:14:39,340 Así, verifícase, non pode simplemente bater, entrar, cando está escribindo o programa. 317 00:14:39,340 --> 00:14:42,590 Xeralmente, o compilador se ve un pouco confuso en canto ao que quere dicir. 318 00:14:42,590 --> 00:14:45,340 Pola contra, ten que, literalmente, dicir, dáme unha nova liña aquí. 319 00:14:45,340 --> 00:14:49,506 E así / n é o que xeralmente chamar un carácter de escape. 320 00:14:49,506 --> 00:14:50,870 Entón n, para a nova liña. 321 00:14:50,870 --> 00:14:53,810 E o compilador sabe que, cando se ve / n, 322 00:14:53,810 --> 00:14:57,420 debe, en realidade, inducir o ordenador, en definitiva, é printf, neste caso, 323 00:14:57,420 --> 00:15:00,260 para imprimir un novo real liña, como bater a, entrar, 324 00:15:00,260 --> 00:15:01,480 tecla no teclado. 325 00:15:01,480 --> 00:15:05,620 E, por último, o que fixo dicimos este anaco de sintaxe é para? 326 00:15:05,620 --> 00:15:06,591 O que isto supón? 327 00:15:06,591 --> 00:15:07,090 Si. 328 00:15:07,090 --> 00:15:07,490 >> PARTICIPANTE: [inaudível] 329 00:15:07,490 --> 00:15:08,660 >> DAVID Malan J: É só o fin da liña. 330 00:15:08,660 --> 00:15:09,909 É o fin da instrución. 331 00:15:09,909 --> 00:15:11,890 E entender que non poñelos en todas partes. 332 00:15:11,890 --> 00:15:13,900 Nós seguramente non poñer-los cos lados de cada liña. 333 00:15:13,900 --> 00:15:16,680 Por exemplo, non hai ningún en primeira liña, non hai nada na liña 334 00:15:16,680 --> 00:15:18,680 con, principal, non hai ningún tras as chaves, 335 00:15:18,680 --> 00:15:21,740 pero vai comezar a ver e obter familiarizado co lugar onde se chama a. 336 00:15:21,740 --> 00:15:26,014 E é case sempre despois dunha función chame ou unha declaración, algunha acción 337 00:15:26,014 --> 00:15:27,180 que realmente está tomando. 338 00:15:27,180 --> 00:15:29,520 >> E sei agora, sobre todo se entre os menos cómodo, 339 00:15:29,520 --> 00:15:32,540 estes son os tipos de cousas estúpidas que vai acabar batendo accidentalmente 340 00:15:32,540 --> 00:15:33,873 súa cabeza contra a parede máis. 341 00:15:33,873 --> 00:15:36,107 Porque vai ser loxicamente confiado en algún problema 342 00:15:36,107 --> 00:15:38,440 vostede resolveu a un problema set, ea maldita cousa só 343 00:15:38,440 --> 00:15:40,187 non compilar ou incluso realizar. 344 00:15:40,187 --> 00:15:43,270 E así, moitas veces, en principio, que vai ser porque perdeu un paréntese, 345 00:15:43,270 --> 00:15:44,455 ou perdeu un punto e coma. 346 00:15:44,455 --> 00:15:46,547 E entón só estar atento destes tipos de cousas, 347 00:15:46,547 --> 00:15:49,380 e probe non estar errado por eles, porque moi rapidamente fai 348 00:15:49,380 --> 00:15:50,640 chegar a ser vello sombreiro. 349 00:15:50,640 --> 00:15:53,910 Pero é moi fácil chegar frustrado en principio, como resultado. 350 00:15:53,910 --> 00:15:57,020 >> Entón, agora, imos dar un ollo a como esta liña está realmente traballando 351 00:15:57,020 --> 00:15:59,170 e despois ollar para algo unha máis complicada. 352 00:15:59,170 --> 00:16:02,017 Polo tanto, temos aquí, o habilidade para deseñar na pantalla. 353 00:16:02,017 --> 00:16:04,100 E imos supor que esta é a miña pantalla de ordenador, 354 00:16:04,100 --> 00:16:08,589 pero eu estou escribindo o programa Ola ,, e eu non ter aplicado, printf. 355 00:16:08,589 --> 00:16:10,130 Alguén máis ten aplicado, printf. 356 00:16:10,130 --> 00:16:12,420 Quen quere reivindicar Implementar, printf? 357 00:16:12,420 --> 00:16:12,920 Se podemos? 358 00:16:12,920 --> 00:16:13,830 Todo ben, cal é o seu nome? 359 00:16:13,830 --> 00:16:14,155 >> ESTUDANTE 1: [? Copal. ?] 360 00:16:14,155 --> 00:16:15,529 >> DAVID Malan J: Copal, imos alí cara arriba. 361 00:16:15,529 --> 00:16:16,430 Imos cara arriba. 362 00:16:16,430 --> 00:16:17,070 Todo ben. 363 00:16:17,070 --> 00:16:22,260 Polo tanto, temos, aquí, algunhas etiquetas de nome, xa que nós imos facer un pequeno xogo deste. 364 00:16:22,260 --> 00:16:26,270 E imos chamalo, printf. 365 00:16:26,270 --> 00:16:30,170 E se queres vir aquí, o que eu acaba deseñado na pantalla, 366 00:16:30,170 --> 00:16:32,340 é pura e simplemente, non son eu, iso. 367 00:16:32,340 --> 00:16:35,550 >> Todo ben, entón, Ola meu nome é, printf, se quere poñer iso diante. 368 00:16:35,550 --> 00:16:35,740 Todo ben. 369 00:16:35,740 --> 00:16:37,360 E se pode ir posto pola pantalla do ordenador 370 00:16:37,360 --> 00:16:39,730 como se é a función que veu con este sistema informático. 371 00:16:39,730 --> 00:16:42,063 E o seu propósito na vida é para realmente imprimir algo. 372 00:16:42,063 --> 00:16:44,560 Pero moi parecido ao programa, só tiña na pantalla, aquí, 373 00:16:44,560 --> 00:16:47,060 nós imos ter que realmente darlle algunha entrada. 374 00:16:47,060 --> 00:16:51,810 >> E así, a miña entrada, aquí, é Ao parecer, o que é pasado para printf, 375 00:16:51,810 --> 00:16:53,730 imos tipo de mofar-lo como esta. 376 00:16:53,730 --> 00:16:58,720 Vou escribir literalmente en un anaco de papel, "Ola, mundo" 377 00:16:58,720 --> 00:17:03,020 barra invertida N. E para quedar claro, o que Acaba deseñada sobre este anaco de papel, 378 00:17:03,020 --> 00:17:04,020 parece iso. 379 00:17:04,020 --> 00:17:08,730 Entón, cando executar este programa, e este liña amarela do código é executado, 380 00:17:08,730 --> 00:17:12,970 é como se eu, o programa Ola, estou entregando algunha entrada fóra a unha función 381 00:17:12,970 --> 00:17:13,970 que outra persoa escribiu. 382 00:17:13,970 --> 00:17:16,595 >> E se, co dedo, podería, en realidade, co dedo, 383 00:17:16,595 --> 00:17:21,520 deseñar na pantalla o que quere é vostede ser entregado, 384 00:17:21,520 --> 00:17:27,465 o efecto, en definitiva, é a ver o que, na pantalla. 385 00:17:27,465 --> 00:17:29,140 E un caso de canto pequeno aquí. 386 00:17:29,140 --> 00:17:31,540 E bo, non debemos ver o, nova liña, neste punto. 387 00:17:31,540 --> 00:17:33,900 Sería incorrecto para ti deseñar explicitamente a nova liña. 388 00:17:33,900 --> 00:17:36,810 Pero, se continuase a escribir palabras en pantalla, eles acaban por baixo diso. 389 00:17:36,810 --> 00:17:39,560 >> Entón, moitas grazas, pero vara por aquí por só un momento. 390 00:17:39,560 --> 00:17:42,860 Necesitamos agora de outro voluntario, se puidésemos, 391 00:17:42,860 --> 00:17:46,830 que vai ter para desempeñar o papel de-- É só a xente na orquesta 392 00:17:46,830 --> 00:17:47,355 agora. 393 00:17:47,355 --> 00:17:47,980 Como about-- Aceptar. 394 00:17:47,980 --> 00:17:48,480 Ben aquí. 395 00:17:48,480 --> 00:17:49,180 Imos cara arriba. 396 00:17:49,180 --> 00:17:49,955 Cal é o seu nome? 397 00:17:49,955 --> 00:17:50,922 >> ESTUDANTE 2: [? Ivay. ?] 398 00:17:50,922 --> 00:17:51,796 DAVID Malan J: Sentímolo? 399 00:17:51,796 --> 00:17:52,990 ESTUDANTE 2: [? Ivay. ?] 400 00:17:52,990 --> 00:17:55,320 DAVID Malan J: Ethan, imos cara arriba. 401 00:17:55,320 --> 00:17:55,820 Non? 402 00:17:55,820 --> 00:17:58,390 Eu obtiven esta mal, mesmo despois que dixo iso dúas veces? 403 00:17:58,390 --> 00:17:58,890 Imos cara arriba. 404 00:17:58,890 --> 00:18:00,030 É difícil escoitar-se aquí. 405 00:18:00,030 --> 00:18:05,240 406 00:18:05,240 --> 00:18:05,740 Aceptar. 407 00:18:05,740 --> 00:18:07,190 E eu sinto moito, cal é o seu nome? 408 00:18:07,190 --> 00:18:07,680 >> ESTUDANTE 2: [? Ivay. ?] 409 00:18:07,680 --> 00:18:08,790 >> [? DAVID Malan J: Ivay. ?] Aceptar. 410 00:18:08,790 --> 00:18:10,430 Por agora, se non mente, está GetString. 411 00:18:10,430 --> 00:18:11,013 >> ESTUDANTE 2: Aceptar. 412 00:18:11,013 --> 00:18:11,797 Legal. 413 00:18:11,797 --> 00:18:14,630 DAVID Malan J: Entón, se quere estar aquí por só un momento, 414 00:18:14,630 --> 00:18:17,100 imos dar un ollo a un pouco programa máis complexo, que 415 00:18:17,100 --> 00:18:18,670 agora ten tres liñas de código. 416 00:18:18,670 --> 00:18:24,080 Polo tanto, temos un, indicar o seu nome a usar printf; dúas, unha chamada a GetString, 417 00:18:24,080 --> 00:18:28,060 seguido por unha asignación a unha variable chamada, corda s, ou chamado s; 418 00:18:28,060 --> 00:18:31,260 e, a continuación, outra chamada para, printf, pero esta vez con dúas entradas. 419 00:18:31,260 --> 00:18:33,646 >> Entón, estado que xa fixemos o seu nome, ou mellor, temos 420 00:18:33,646 --> 00:18:34,770 xa feito unha chamada printf. 421 00:18:34,770 --> 00:18:38,960 Entón eu vou escribir, Diga o seu nome. 422 00:18:38,960 --> 00:18:42,089 E así, o que eu vou pasar, printf, en só un momento, 423 00:18:42,089 --> 00:18:43,005 é pura e simplemente, este. 424 00:18:43,005 --> 00:18:47,760 Entón, se quere ir adiante e deseñar ese na pantalla, esa é a súa entrada agora. 425 00:18:47,760 --> 00:18:48,260 Todo ben. 426 00:18:48,260 --> 00:18:51,160 E esquecer secuencia, temos agora nosa propia liña de código aquí. 427 00:18:51,160 --> 00:18:54,470 Así, en, GetString, necesitamos para realmente chamar, GetString. 428 00:18:54,470 --> 00:18:57,920 Polo tanto, o seu propósito na vida é só andar fóra da orquestra, se puidese, 429 00:18:57,920 --> 00:18:58,980 e obter o nome de alguén. 430 00:18:58,980 --> 00:19:00,860 Pero imos darlle algo para poñelas. 431 00:19:00,860 --> 00:19:02,908 Se quere, vai adiante e obter unha cadea, 432 00:19:02,908 --> 00:19:05,241 O nome de alguén que anaco de papel, se puidese. 433 00:19:05,241 --> 00:19:12,940 434 00:19:12,940 --> 00:19:13,530 >> Todo ben. 435 00:19:13,530 --> 00:19:15,250 E veremos, en só un momento, cuxo nome estamos recibindo. 436 00:19:15,250 --> 00:19:17,630 Mentres tanto, o que eu vou ter listo, é unha peza en branco 437 00:19:17,630 --> 00:19:21,340 de papel, no que, eu vou para almacenar o valor que 438 00:19:21,340 --> 00:19:25,752 é que GetString volve a min, Eu, sendo unha variable de cadea chamado, s. 439 00:19:25,752 --> 00:19:26,252 Todo ben. 440 00:19:26,252 --> 00:19:27,293 Entón o que ten aquí? 441 00:19:27,293 --> 00:19:27,950 Nik. 442 00:19:27,950 --> 00:19:28,450 Todo ben. 443 00:19:28,450 --> 00:19:30,910 Entón temos o nome de Nik aquí. 444 00:19:30,910 --> 00:19:33,750 Entón é iso que literalmente foi devolto 445 00:19:33,750 --> 00:19:35,810 para min, por así dicir, por GetString. 446 00:19:35,810 --> 00:19:38,720 >> Eu, agora, vou executar á esquerda 447 00:19:38,720 --> 00:19:43,440 de que a expresión, onde simplemente copiar abaixo, para fins de hoxe, Nik. 448 00:19:43,440 --> 00:19:46,470 Entón, agora, eu teño unha variable chamado, s, almacenando o nome de Nik. 449 00:19:46,470 --> 00:19:49,520 Eu xa entregado a printf, un argumento anterior. 450 00:19:49,520 --> 00:19:52,800 Pero na nosa terceira e última liña de código, realmente teño que printf man 451 00:19:52,800 --> 00:19:58,500 que un simple diferente-- "Ola,% s," barra invertida n. 452 00:19:58,500 --> 00:20:01,510 >> E así a última liña eu vou para send-- o último que eu son 453 00:20:01,510 --> 00:20:03,060 vai escribir para abaixo agora, é esta. 454 00:20:03,060 --> 00:20:06,310 Así, as dúas liñas de código, ou no canto da última liña de código, 455 00:20:06,310 --> 00:20:10,690 chamadas a dous insumos un, este, e dous, presente. 456 00:20:10,690 --> 00:20:13,330 Entón, se a nosa función printf agora pode toma-los como entrada, 457 00:20:13,330 --> 00:20:16,000 déixeme limpar a pantalla para ti. 458 00:20:16,000 --> 00:20:17,250 En realidade non, pode ir adiante. 459 00:20:17,250 --> 00:20:19,333 Imos deixalo, xa que é o mesmo programa. 460 00:20:19,333 --> 00:20:21,760 461 00:20:21,760 --> 00:20:27,380 Debemos ver, Ola, Nik. 462 00:20:27,380 --> 00:20:27,880 Todo ben. 463 00:20:27,880 --> 00:20:29,670 Polo tanto, este foi moi poucos marcos para ir a través, só 464 00:20:29,670 --> 00:20:31,620 para escribir, indicar o seu nome, e, Ola, Nik. 465 00:20:31,620 --> 00:20:37,210 Pero esta simple idea de paso de mensaxes, do paso de entrada e saída de recepción, 466 00:20:37,210 --> 00:20:40,430 é o modelo que nós imos ter incluso para as funcións máis complexas. 467 00:20:40,430 --> 00:20:41,804 Entón, moitas grazas a vostedes dous. 468 00:20:41,804 --> 00:20:43,730 Temos un fermoso estrés balón aquí para vostede. 469 00:20:43,730 --> 00:20:48,890 E grazas ao noso GetString e voluntarios printf igual. 470 00:20:48,890 --> 00:20:49,551 Grazas. 471 00:20:49,551 --> 00:20:50,050 Todo ben. 472 00:20:50,050 --> 00:20:50,966 Grazas a vostedes dous. 473 00:20:50,966 --> 00:20:56,640 474 00:20:56,640 --> 00:21:00,430 >> Entón, nós falamos sobre ata agora, sobre todo sobre cadeas. 475 00:21:00,430 --> 00:21:06,550 E parece que C realmente entender algúns tipos de datos. 476 00:21:06,550 --> 00:21:08,860 De feito, imos dar un ollar para estes aquí. 477 00:21:08,860 --> 00:21:12,490 Entón C, e unha morea de linguas, entender as cousas chamados carácteres. 478 00:21:12,490 --> 00:21:16,852 Un char é xeralmente un byte único, ou oito bits. 479 00:21:16,852 --> 00:21:19,810 E representa un único carácter, como a letra A, ou a capital 480 00:21:19,810 --> 00:21:21,990 letra A, ou a letra minúscula A, ou un punto de exclamación, 481 00:21:21,990 --> 00:21:25,440 ou calquera carácter que podes escribir en teclado, e ás veces ata máis. 482 00:21:25,440 --> 00:21:26,795 Tamén terá lugar a ver coches alegóricos. 483 00:21:26,795 --> 00:21:31,160 Un flotador é, xeralmente, unha 32 bits valor ou catro bytes 484 00:21:31,160 --> 00:21:33,660 porque unha vez máis, un byte ten oito bits. 485 00:21:33,660 --> 00:21:36,675 >> Así, un flotador é un valor de punto flotante, algo cun punto decimal. 486 00:21:36,675 --> 00:21:38,550 E, de feito, é o que a película estaba falando 487 00:21:38,550 --> 00:21:42,240 sobre cando falaron sobre flotante valores de punto, un número fixo de bits 488 00:21:42,240 --> 00:21:43,940 sendo utilizada para representar un número real. 489 00:21:43,940 --> 00:21:45,740 Pero hai tamén cousas chamadas dobres. 490 00:21:45,740 --> 00:21:47,860 Estes existen en Java, se tomou APCS, 491 00:21:47,860 --> 00:21:51,540 e un dobre, como o nome sorte suxire, é dúas veces tan grande como un float. 492 00:21:51,540 --> 00:21:54,540 Aínda é un número real, el só ten máis bits 493 00:21:54,540 --> 00:21:58,390 co cal a ser cada vez máis precisa, ou para almacenar un número aínda maior. 494 00:21:58,390 --> 00:21:58,890 int é doado. 495 00:21:58,890 --> 00:22:00,181 Nós falamos sobre iso da última vez. 496 00:22:00,181 --> 00:22:01,160 É só un número enteiro. 497 00:22:01,160 --> 00:22:03,980 E é xeralmente 32 de bits, ou catro bytes. 498 00:22:03,980 --> 00:22:07,850 >> E así, se ten, imos ver agora, 32 bits-- e fixemos iso a semana 0, 499 00:22:07,850 --> 00:22:10,820 sempre tan briefly-- se ten 32 bits, o que é o maior 500 00:22:10,820 --> 00:22:13,580 número pode representar como un número enteiro? 501 00:22:13,580 --> 00:22:16,080 Máis ou menos? 502 00:22:16,080 --> 00:22:18,380 É como 4 millóns, e iso é só estivermos 503 00:22:18,380 --> 00:22:20,690 representando só números positivos. 504 00:22:20,690 --> 00:22:23,930 Se tes 32 bits, e quere representar números negativos, así como, 505 00:22:23,930 --> 00:22:27,100 seu alcance é, esencialmente, negativo 2 millóns para positivo 2 millóns. 506 00:22:27,100 --> 00:22:29,250 Pero, xeralmente, imos comezar 0 ir ata 4 millóns. 507 00:22:29,250 --> 00:22:32,400 >> Non ten que saber con precisión, pero vemos que, en realidade, se eu só 508 00:22:32,400 --> 00:22:36,400 abrir un pouco calculadora, aquí. 509 00:22:36,400 --> 00:22:41,070 Podo facer 2 a 32, e iso é o quão grande, 510 00:22:41,070 --> 00:22:43,190 cantos valores podes representar, con 32 bits. 511 00:22:43,190 --> 00:22:44,442 E é máis ou menos 4 millóns. 512 00:22:44,442 --> 00:22:46,900 Entón, imos seguir vendo ese número nalgúns lugares diferentes. 513 00:22:46,900 --> 00:22:48,890 Pero se precisa de máis tempo números que iso, 514 00:22:48,890 --> 00:22:51,670 Acontece que hai de algo chamado un longo tempo. 515 00:22:51,670 --> 00:22:54,005 E un longo tempo é xeralmente 64 bits, que 516 00:22:54,005 --> 00:22:56,380 significa que é unha orde de magnitude aínda maior que un int. 517 00:22:56,380 --> 00:22:59,510 >> Entón, eu non podo nin pronunciar o maior número que pode representar, 518 00:22:59,510 --> 00:23:01,340 pero é marcadamente maior. 519 00:23:01,340 --> 00:23:05,190 Agora, como un aparte, historicamente, un int é de 32 bits, 520 00:23:05,190 --> 00:23:12,780 e un longo, longo é de 64 bits, como grande é moito, non un longo, longo? 521 00:23:12,780 --> 00:23:16,500 522 00:23:16,500 --> 00:23:20,330 Vostede pensar que é máis que un int pero quizais menos longo que un longo, longo, 523 00:23:20,330 --> 00:23:21,400 pero, en realidade, depende. 524 00:23:21,400 --> 00:23:23,400 >> E así acontece que un das frustracións tamén, 525 00:23:23,400 --> 00:23:26,830 coa escrita de código en determinados sistemas, é que non todos estes tipos de datos 526 00:23:26,830 --> 00:23:28,440 teñen valores predeterminados. 527 00:23:28,440 --> 00:23:29,771 Ás veces iso moitos anacos. 528 00:23:29,771 --> 00:23:31,020 Ás veces, é que moitos bits. 529 00:23:31,020 --> 00:23:32,750 Entón, o que realmente ten que saber, ás veces, o hardware 530 00:23:32,750 --> 00:23:34,083 está executando o seu programa en. 531 00:23:34,083 --> 00:23:36,960 Afortunadamente, outras linguas e outros tipos de datos que xa existen, 532 00:23:36,960 --> 00:23:38,400 permiten que sexa máis preciso. 533 00:23:38,400 --> 00:23:41,220 Ben, nós vimos corda, e vimos bool, tamén, 534 00:23:41,220 --> 00:23:43,960 pero resulta que os vir só coa biblioteca de CS50. 535 00:23:43,960 --> 00:23:46,240 Polo tanto, os non son construídas C. Os no seu lugar, 536 00:23:46,240 --> 00:23:49,340 veñen que ficheiro chamado CS50.h, que imos finalmente 537 00:23:49,340 --> 00:23:51,831 pelar as capas de. 538 00:23:51,831 --> 00:23:53,830 Pero, de momento, só tipos de datos adicionais. 539 00:23:53,830 --> 00:23:57,060 Un bool é un verdadeiro ou falso, e unha cadea é unha secuencia de caracteres, 540 00:23:57,060 --> 00:23:57,970 como unha palabra. 541 00:23:57,970 --> 00:24:01,690 Agora printf, que xa vimos, ten espazos reservados,% s é un deles. 542 00:24:01,690 --> 00:24:05,430 E pode ser capaz, agora, inferir a partir destes exemplos, como outros 543 00:24:05,430 --> 00:24:07,720 podería ter un espazo reservado para os distintos tipos de datos. 544 00:24:07,720 --> 00:24:11,150 Por exemplo, dar un palpite, se quería imprimir un único carácter usando 545 00:24:11,150 --> 00:24:15,270 printf, o espazo reservado pode ser% c. 546 00:24:15,270 --> 00:24:19,650 E se queres imprimir un integer co espazo reservado,% i. 547 00:24:19,650 --> 00:24:25,150 % LLD é un valor decimal longo, longo, pero long long, de xeito que mapea para iso. 548 00:24:25,150 --> 00:24:28,640 E, a continuación,% f para flotante valor de punto ou unha parella, 549 00:24:28,640 --> 00:24:31,270 polo que ás veces son reutilizados en diferentes contextos. 550 00:24:31,270 --> 00:24:33,350 Entón, imos ver e usar algúns dos que co paso do tempo. 551 00:24:33,350 --> 00:24:36,420 E printf e outras funcións tamén secuencias de escape de apoio dos outros, 552 00:24:36,420 --> 00:24:38,080 e, por veces, estes son necesarios. 553 00:24:38,080 --> 00:24:39,770 Así barra invertida n é unha nova liña. 554 00:24:39,770 --> 00:24:42,886 Barra invertida t, calquera quere tomar unha facada? 555 00:24:42,886 --> 00:24:43,760 PARTICIPANTE: Tab. 556 00:24:43,760 --> 00:24:44,551 DAVID Malan J: Tab. 557 00:24:44,551 --> 00:24:46,810 Entón, se o quere para imprimir unha guía, non 558 00:24:46,810 --> 00:24:49,940 un número fixo de espazos, pero un real carácter de tabulación, non acertar o seu, 559 00:24:49,940 --> 00:24:53,490 guía, tecla no teclado, xeralmente, realmente fai barra invertida t. 560 00:24:53,490 --> 00:24:57,750 Cita dobre barra invertida, Por que eu ía querer iso? 561 00:24:57,750 --> 00:24:58,250 Non? 562 00:24:58,250 --> 00:25:00,417 Por que non podo eu só escriba un comiñas dobres no meu teclado? 563 00:25:00,417 --> 00:25:02,124 PARTICIPANTE: Porque, se non, é 564 00:25:02,124 --> 00:25:04,830 vai pensar que é o fin do gusto da súa impresión [? texto. ?] 565 00:25:04,830 --> 00:25:05,420 >> DAVID Malan J: Exactamente. 566 00:25:05,420 --> 00:25:07,211 Teña en conta que, coa nosa exemplos printf, cando 567 00:25:07,211 --> 00:25:10,075 estaban pasando para printf na entrada, na parte esquerda da cadea de entrada que 568 00:25:10,075 --> 00:25:12,950 e sobre o dereito de que a entrada primavera, por suposto, foi unha cita de parella. 569 00:25:12,950 --> 00:25:16,270 Se a súa propia entrada ten un dobre Cita no medio do que, 570 00:25:16,270 --> 00:25:18,920 o ordenador pode potencialmente se confunden, como a, 571 00:25:18,920 --> 00:25:20,760 fai comiñas dobres pertence no medio? 572 00:25:20,760 --> 00:25:22,150 Pertence co esquerdo? 573 00:25:22,150 --> 00:25:23,566 Pertence co camiño correcto? 574 00:25:23,566 --> 00:25:26,780 E así, se quere facelo super suposto, fai barra invertida comiñas dobres, 575 00:25:26,780 --> 00:25:30,480 de xeito que escapou, por así dicir, e non é confundida por algo máis. 576 00:25:30,480 --> 00:25:34,400 E hai algúns outros aquí, r barra invertida, aspas, 0, 577 00:25:34,400 --> 00:25:36,510 para que poidamos ver ao longo do tempo, tamén. 578 00:25:36,510 --> 00:25:37,760 E agora, o que pasa con funcións? 579 00:25:37,760 --> 00:25:41,630 >> Así, as accións que podemos tomar, ata agora, nesta lingua, C, así, nós vimos, 580 00:25:41,630 --> 00:25:44,320 printf, por suposto, e todos dos outros na pantalla, 581 00:25:44,320 --> 00:25:47,140 aquí, que imos usar para o do curso primeiras semanas só, 582 00:25:47,140 --> 00:25:48,485 vir cando a biblioteca CS50. 583 00:25:48,485 --> 00:25:51,850 E eles fan isto moito máis fácil, en C, para realmente obter a entrada do usuario. 584 00:25:51,850 --> 00:25:54,200 Acontece que en C, e francamente nalgunhas linguas, 585 00:25:54,200 --> 00:25:57,450 é unha dor real no pescozo para facer algo simple, como alerta ao usuario 586 00:25:57,450 --> 00:26:01,310 para o teclado, para a súa entrada. 587 00:26:01,310 --> 00:26:03,240 E así estas funcións facelo máis fácil. 588 00:26:03,240 --> 00:26:05,472 >> E tamén ten erro comprobando todo, 589 00:26:05,472 --> 00:26:07,180 de xeito que, cando recordar o mércores, nós 590 00:26:07,180 --> 00:26:09,740 viu a, proba de novo, aviso, cando non cooperar, 591 00:26:09,740 --> 00:26:11,700 e eu escriba a palabra, en vez de un número? 592 00:26:11,700 --> 00:26:15,402 Nós fixemos o traballo pesado inicio para asegurarse de que o usuario coopera. 593 00:26:15,402 --> 00:26:17,860 Pero estes son só adestramento rodas que imos finalmente, 594 00:26:17,860 --> 00:26:19,640 e axiña, despegar. 595 00:26:19,640 --> 00:26:22,630 >> Entón, para recapitular, entón, imos dar un ollo rápida, 596 00:26:22,630 --> 00:26:26,620 moi como fixemos co Scratch, en algunhas construcións canónicas en C. 597 00:26:26,620 --> 00:26:28,580 Este destino se a, tipo de, ser un rápido tour, 598 00:26:28,580 --> 00:26:30,990 só para que teña unha referencia e que xa viu as cousas en primeiro lugar. 599 00:26:30,990 --> 00:26:34,100 Pero, a continuación, imos ollar para codificación real usar algúns destes bloques de construción. 600 00:26:34,100 --> 00:26:36,710 Tanto como no scratch, cando tiñamos declaracións gusta, 601 00:26:36,710 --> 00:26:41,570 dicir ou, espera, en C, temos funcións, así como printf. 602 00:26:41,570 --> 00:26:45,350 >> Se queremos expresar unha condición en C, é semellante, en espírito, 603 00:26:45,350 --> 00:26:47,840 para que parte do enigma que mirou como este en Scratch. 604 00:26:47,840 --> 00:26:49,850 Pero en vez diso, literalmente só escribir, se. 605 00:26:49,850 --> 00:26:51,830 E, a continuación, entre parénteses, poñemos unha condición, 606 00:26:51,830 --> 00:26:54,807 cando esta condición é o que nós imos chamar, unha vez máis, unha expresión booleana. 607 00:26:54,807 --> 00:26:56,390 E unha vez máis, esta é unha especie de pseudo-código. 608 00:26:56,390 --> 00:26:58,830 E, de feito, o // é un comentario. 609 00:26:58,830 --> 00:27:00,550 É só palabras en inglés para min mesmo. 610 00:27:00,550 --> 00:27:03,000 Pero esta é a xeral estrutura dun si, condición. 611 00:27:03,000 --> 00:27:05,220 Pero imos ver formigón exemplos en só un momento. 612 00:27:05,220 --> 00:27:07,960 >> Se quere ter un garfo de dúas vías na estrada, 613 00:27:07,960 --> 00:27:11,740 moi como fixemos co noso voluntario Mércores, pode ter un, else if. 614 00:27:11,740 --> 00:27:16,020 E se quere ter unha terceira e condición final, ou situación de incumprimento, 615 00:27:16,020 --> 00:27:19,006 pode que só un bloque de máis, hai. 616 00:27:19,006 --> 00:27:21,880 E do mesmo xeito, con expresións booleanas, pode, e, Los xuntos. 617 00:27:21,880 --> 00:27:24,296 E vimos o mércores, que non é un único e comercial, 618 00:27:24,296 --> 00:27:28,220 é dous, por razóns de nivel inferior que imos finalmente ver e xogar. 619 00:27:28,220 --> 00:27:30,410 Ou-ing cousas xuntos é de 2 barras verticais. 620 00:27:30,410 --> 00:27:32,240 Nun teclado de Estados Unidos, esta é xeralmente unha tecla 621 00:27:32,240 --> 00:27:35,730 coa tecla Maiús riba súa chave tecla Intro ou Retorno. 622 00:27:35,730 --> 00:27:38,620 >> Despois, hai estas cousas que imos usar quizais unha ou dúas veces. 623 00:27:38,620 --> 00:27:42,570 Son funcionalmente equivalentes aos o que pode facer un, if, else se, 624 00:27:42,570 --> 00:27:44,950 else if outra cousa, construír, pero son chamados de unha chave. 625 00:27:44,950 --> 00:27:48,020 Eles parecen moi diferentes, pero imos ver nalgúns dos noso código de distribución, 626 00:27:48,020 --> 00:27:51,890 para un conxunto de problemas futuros, probablemente, que ás veces é só unha máis bonita 627 00:27:51,890 --> 00:27:54,060 modo de expresar un enteiro banda de condicións, 628 00:27:54,060 --> 00:27:57,590 sen ter unha chea de claves e un lote de parénteses e recuar. 629 00:27:57,590 --> 00:28:01,910 Pero non nos dan máis poder do que xa temos. 630 00:28:01,910 --> 00:28:02,550 E agora lazos. 631 00:28:02,550 --> 00:28:05,020 E este, imos dar un ollo en algo máis lentamente. 632 00:28:05,020 --> 00:28:08,470 Pero entón, nós imos comezar a usalos, especialmente para quen xa está familiarizado. 633 00:28:08,470 --> 00:28:13,830 Esta é a forma canónica, se incrible xeito misterioso, para escribir un loop en C. 634 00:28:13,830 --> 00:28:15,896 >> Agora un lazo no scratch foi moi sinxelo. 635 00:28:15,896 --> 00:28:17,020 Ten un, para sempre, bloque. 636 00:28:17,020 --> 00:28:19,760 Ten un, repetir, con bloque só un número que ten que escribir. 637 00:28:19,760 --> 00:28:22,220 E co, por loop, pode aplicar estas dúas ideas, 638 00:28:22,220 --> 00:28:23,595 pero é un pouco máis técnico. 639 00:28:23,595 --> 00:28:25,994 Pero, a verdade, é tamén relativamente simple. 640 00:28:25,994 --> 00:28:28,160 Despois de saber a orde de operacións, vostede literalmente 641 00:28:28,160 --> 00:28:30,910 está indo só para conectar valores e dicir ao ordenador que facer. 642 00:28:30,910 --> 00:28:32,800 Entón, aquí está un exemplo. 643 00:28:32,800 --> 00:28:38,040 Este é un circuíto que, bastante simplemente, cóntase a partir dun número 644 00:28:38,040 --> 00:28:40,187 a través dun outro. 645 00:28:40,187 --> 00:28:42,020 E só polos ollos para el, mesmo se ten 646 00:28:42,020 --> 00:28:44,660 ningunha experiencia previa con esta linguaxe, que número 647 00:28:44,660 --> 00:28:46,920 probablemente comezar a contar a? 648 00:28:46,920 --> 00:28:47,730 OK, 0. 649 00:28:47,730 --> 00:28:50,240 E eu estou supondo que é porque ver que hai un int e un i, 650 00:28:50,240 --> 00:28:51,073 que é unha variable. 651 00:28:51,073 --> 00:28:52,390 É iniciar a 0. 652 00:28:52,390 --> 00:28:55,670 >> E, a continuación, máis tarde, parece que estamos pasando printf, un valor. 653 00:28:55,670 --> 00:28:58,000 E, de feito, eu fixen un pequeno erro de dixitación aquí. 654 00:28:58,000 --> 00:28:59,850 Pero iso é facilmente modificado. 655 00:28:59,850 --> 00:29:02,390 Deixe-me engadir, eu aquí. 656 00:29:02,390 --> 00:29:06,150 Temos, agora, ser printf pasado ese valor de espazo reservado. 657 00:29:06,150 --> 00:29:08,299 E o que vai contar a través? 658 00:29:08,299 --> 00:29:08,840 Audiencia: 50. 659 00:29:08,840 --> 00:29:09,340 50. 660 00:29:09,340 --> 00:29:10,160 49. 661 00:29:10,160 --> 00:29:10,910 DAVID Malan J: 49. 662 00:29:10,910 --> 00:29:13,340 Entón, 50, a primeira vista, parece correcto. 663 00:29:13,340 --> 00:29:16,990 Pero que, ao parecer, será nosa condición que manter a verificación. 664 00:29:16,990 --> 00:29:21,740 E imos parar xa Xa non sexa inferior a 50. 665 00:29:21,740 --> 00:29:24,920 Polo tanto, este loop, por outra banda, debería executar, sempre que i é inferior a 50. 666 00:29:24,920 --> 00:29:28,891 Pero así que se fai 50 ou 51, ou peor, debe deixar automaticamente. 667 00:29:28,891 --> 00:29:29,390 Todo ben. 668 00:29:29,390 --> 00:29:31,200 >> Entón, o que realmente acontece aquí? 669 00:29:31,200 --> 00:29:33,160 Entón que é o fin de operacións a un loop. 670 00:29:33,160 --> 00:29:35,440 Un, ten a así-chamada arranque. 671 00:29:35,440 --> 00:29:38,264 Este anaco destaque amarelo de código execútase en primeiro lugar, 672 00:29:38,264 --> 00:29:40,930 e ten o efecto de que, por Mércores, probablemente imaxinar. 673 00:29:40,930 --> 00:29:45,500 El crea unha variable denominada i e tendas en que o valor variable 0. 674 00:29:45,500 --> 00:29:47,560 Entón i é 0, neste punto da historia. 675 00:29:47,560 --> 00:29:49,680 >> A seguinte cousa que acontece nesta construción, 676 00:29:49,680 --> 00:29:51,540 é que a condición checado. 677 00:29:51,540 --> 00:29:54,325 Entón eu comprobar inmediatamente, i é menos de 50? 678 00:29:54,325 --> 00:29:57,700 E, por suposto, a resposta polo de agora é, con certeza, si. 679 00:29:57,700 --> 00:30:00,710 Si, porque i é 0, e iso é certamente inferior a 50. 680 00:30:00,710 --> 00:30:03,866 Entón o que ocorre é que este liña de código é executado. 681 00:30:03,866 --> 00:30:06,740 E, de feito, se hai múltiple liñas de código nesas claves, 682 00:30:06,740 --> 00:30:09,020 todos eles son executados un despois do outro. 683 00:30:09,020 --> 00:30:11,450 >> E no efecto aquí, é parecer para imprimir 684 00:30:11,450 --> 00:30:15,365 o número de i, o que vai ser 0, e, a continuación, 1, 2 e, a continuación. 685 00:30:15,365 --> 00:30:15,865 Pero por que? 686 00:30:15,865 --> 00:30:17,410 Por que se incrementou? 687 00:30:17,410 --> 00:30:20,680 Ben, a cuarta cousa que pasa é que esta sintaxe 688 00:30:20,680 --> 00:30:22,610 corre, despois do punto e coma. 689 00:30:22,610 --> 00:30:27,506 i ++ é unha forma abreviada de dicir; tomar o valor de i, e engadir 1 a ela; 690 00:30:27,506 --> 00:30:30,380 e, a continuación, a próxima vez, engade 1 a ela; e a próxima vez, 691 00:30:30,380 --> 00:30:31,330 engadir 1 a ela. 692 00:30:31,330 --> 00:30:33,640 >> Entón, se esperamos que continúe, o que vai pasar 693 00:30:33,640 --> 00:30:35,890 ao lado é que eu non vou iniciar nunca máis. 694 00:30:35,890 --> 00:30:38,290 Se eu continuase o arranque I a 0, este exemplo 695 00:30:38,290 --> 00:30:41,110 que nunca ía acabar, porque Quere ser preso a 0. 696 00:30:41,110 --> 00:30:43,870 Pero o que vai pasar é que a condición verificarase, 697 00:30:43,870 --> 00:30:54,280 a liña de código serán executados, o i será incrementado, 698 00:30:54,280 --> 00:30:56,970 condición verificarase, código serán executados. 699 00:30:56,970 --> 00:30:59,790 E mantivo-se andar en bicicleta de novo, e unha vez máis, e de novo, 700 00:30:59,790 --> 00:31:03,340 ata i ++ induce a un valor de 50. 701 00:31:03,340 --> 00:31:05,870 >> A condición, a continuación, di, 50 é inferior a 50? 702 00:31:05,870 --> 00:31:09,360 A resposta, claro, é que non, e de xeito que o código enteiro para a execución. 703 00:31:09,360 --> 00:31:13,020 E se tes máis código da pantalla a continuación, isto é o que pasa a continuación. 704 00:31:13,020 --> 00:31:17,530 Salta para fóra destas claves e segue a imprimir máis que despois. 705 00:31:17,530 --> 00:31:20,470 >> Entón unha broma agora, dende foxtrot, que quizais agora entender. 706 00:31:20,470 --> 00:31:30,810 707 00:31:30,810 --> 00:31:31,560 É sempre divertido. 708 00:31:31,560 --> 00:31:34,110 É como as risas tipo de coar, 709 00:31:34,110 --> 00:31:38,370 e entón entender que non debe estar rindo de humor como este. 710 00:31:38,370 --> 00:31:41,160 Pero hai algúns takeaway aquí, pedagoxicamente, tamén. 711 00:31:41,160 --> 00:31:43,577 Así, verifícase que eu son falta unha peza de sintaxe, 712 00:31:43,577 --> 00:31:45,410 ou Foxtrot de perder unha peza de sintaxe aquí. 713 00:31:45,410 --> 00:31:48,076 O que falta, que tivemos en todos os outros exemplo, ata agora? 714 00:31:48,076 --> 00:31:51,599 715 00:31:51,599 --> 00:31:53,390 Retorno, está aí, entón iso é outra cousa, 716 00:31:53,390 --> 00:31:54,440 que imos volver antes de tempo. 717 00:31:54,440 --> 00:31:55,398 O que falta, con todo? 718 00:31:55,398 --> 00:31:55,908 Si. 719 00:31:55,908 --> 00:31:58,150 >> PARTICIPANTE: O inicio do [inaudível]. 720 00:31:58,150 --> 00:31:58,470 >> DAVID Malan J: Aceptar. 721 00:31:58,470 --> 00:31:58,980 Entón, si. 722 00:31:58,980 --> 00:32:03,210 Entón, en realidade, iso é-- Ben, e conta é inicializar 723 00:32:03,210 --> 00:32:05,470 enriba, ou mellor, declarou-se por riba. 724 00:32:05,470 --> 00:32:06,960 Polo tanto, esta é outra forma de facelo. 725 00:32:06,960 --> 00:32:08,685 Pero non en liña recta é válida aínda. 726 00:32:08,685 --> 00:32:09,310 E aquí? 727 00:32:09,310 --> 00:32:10,196 >> PARTICIPANTE: É as claves? 728 00:32:10,196 --> 00:32:10,640 >> DAVID Malan J: Si. 729 00:32:10,640 --> 00:32:12,080 Así, as claves están en falta. 730 00:32:12,080 --> 00:32:15,495 Pero este código, quero dicir, para o seu crédito, é, en realidade, sintaticamente válido. 731 00:32:15,495 --> 00:32:17,610 Acontece, non precisa das claves 732 00:32:17,610 --> 00:32:21,691 se ten só unha liña de código que quere realizar dentro do loop. 733 00:32:21,691 --> 00:32:24,190 Agora, sempre, en clase e na todo o noso código de distribución, 734 00:32:24,190 --> 00:32:26,730 inclúen as claves de calquera xeito, só por unha cuestión de claridade. 735 00:32:26,730 --> 00:32:29,010 Pero entendo que en libros de texto e exemplos en liña, 736 00:32:29,010 --> 00:32:31,300 pode moi ben ver rizado cintas falta algún día. 737 00:32:31,300 --> 00:32:34,850 E iso é OK, se o que ter recuado e destinados 738 00:32:34,850 --> 00:32:38,650 é só unha soa liña de código, e non varias liñas de código, potencialmente. 739 00:32:38,650 --> 00:32:39,150 Todo ben. 740 00:32:39,150 --> 00:32:44,500 Entón, en relación coa cuestión da imprecisión, é un problema de estourido, 741 00:32:44,500 --> 00:32:48,560 no sentido de que, de forma semellante, enteiros non teñen límites para eles 742 00:32:48,560 --> 00:32:49,970 así como valores de punto flotante? 743 00:32:49,970 --> 00:32:53,120 No mundo dun punto flotante valores, só podemos ser tan preciso, 744 00:32:53,120 --> 00:32:55,710 tras o que, ás veces, cousas malas poden ocorrer, 745 00:32:55,710 --> 00:32:57,760 e os nosos programas poden ser buggy e erro. 746 00:32:57,760 --> 00:33:00,050 Agora, mesmo con números enteiros, pode realizar en problemas. 747 00:33:00,050 --> 00:33:03,820 Agora un número enteiro non ten un punto decimal ou números tras el. 748 00:33:03,820 --> 00:33:07,130 É só un número natural, normalmente. 749 00:33:07,130 --> 00:33:09,430 Entón, o que podería dar mal con un int? 750 00:33:09,430 --> 00:33:12,210 Se está a usar un int para contar, o que podería dar mal? 751 00:33:12,210 --> 00:33:13,230 Parece moito máis simple. 752 00:33:13,230 --> 00:33:13,873 Si. 753 00:33:13,873 --> 00:33:16,240 >> PARTICIPANTE: O número queda [inaudível] 754 00:33:16,240 --> 00:33:17,073 >> DAVID Malan J: Si. 755 00:33:17,073 --> 00:33:20,820 E se contar tan alto, que Non podo expresar que realmente gran número. 756 00:33:20,820 --> 00:33:21,320 Non? 757 00:33:21,320 --> 00:33:23,910 Nalgún momento, vai a superar os límites 758 00:33:23,910 --> 00:33:27,077 dun valor de 32 bits ou un valor de 64 bits. 759 00:33:27,077 --> 00:33:29,410 Agora, de novo, eu non sei como pronuncia un valor de 64 bits, 760 00:33:29,410 --> 00:33:32,230 pero sei que cun enteiro de 32 bits, o maior valor que pode ser, 761 00:33:32,230 --> 00:33:35,490 se é só positivo valores, é de aproximadamente 4 millóns. 762 00:33:35,490 --> 00:33:39,000 Entón, se eu tentar contar ata 5 millóns, algo que vai ocorrer. 763 00:33:39,000 --> 00:33:41,050 Pero imos ver o que, de feito, pode pasar. 764 00:33:41,050 --> 00:33:44,570 No mundo de enteiro estourido, onde, en certo sentido, 765 00:33:44,570 --> 00:33:48,270 rebosar a capacidade dun enteiro, o que podería ocorrer? 766 00:33:48,270 --> 00:33:51,190 >> Entón aquí está un número binario, é un retroceso para 0. 767 00:33:51,190 --> 00:33:54,630 É todo 1 do e os espazos reservados alí, son potencias de 2, 768 00:33:54,630 --> 00:33:55,980 polo que este é binario. 769 00:33:55,980 --> 00:33:59,416 Entón, estas son 8, os bits 1 na pantalla. 770 00:33:59,416 --> 00:34:01,290 E se se lembra ou rapidamente facer a matemática, 771 00:34:01,290 --> 00:34:06,074 o valor que está a ser representado aquí con estes oito bits de 1? 772 00:34:06,074 --> 00:34:06,950 255. 773 00:34:06,950 --> 00:34:09,260 E mesmo se non ben seguro da matemática, podería facelo para fóra. 774 00:34:09,260 --> 00:34:10,550 Ou podería só especie da razón a través del, 775 00:34:10,550 --> 00:34:12,633 agarde un minuto, se eu son representando un valor de 8 bits, 776 00:34:12,633 --> 00:34:17,750 e eu teño 256 valores posibles, pero o primeiro dos cales é 0, 777 00:34:17,750 --> 00:34:19,909 Eu só sei que o maior será 255, 778 00:34:19,909 --> 00:34:21,510 e iso é o que este podería ser. 779 00:34:21,510 --> 00:34:26,060 >> Entón supoño que eu tente engadir 1 a este valor. 780 00:34:26,060 --> 00:34:28,750 O que faría no grao escola cando engadir a 1, e 781 00:34:28,750 --> 00:34:31,139 non encaixa porque ten que levar o 1? 782 00:34:31,139 --> 00:34:34,380 ¿Que é este número vai para facer-se cando engadir un? 783 00:34:34,380 --> 00:34:37,030 Vai facer se 0. 784 00:34:37,030 --> 00:34:37,530 Non? 785 00:34:37,530 --> 00:34:41,139 Porque se tivese máis bits-- e eu vou tentar, tipo de, escriba-o para fora aqui-- 786 00:34:41,139 --> 00:34:44,710 se tivésemos máis bits, o que podería facer aquí é engadir a 1, 787 00:34:44,710 --> 00:34:47,370 e entón teriamos iso. 788 00:34:47,370 --> 00:34:48,739 Whoops. 789 00:34:48,739 --> 00:34:52,250 Teriamos un 1 bit por todo o camiño ata aquí. 790 00:34:52,250 --> 00:34:55,530 >> Pero se se trata dun finito valor, é só 8 bits, 791 00:34:55,530 --> 00:34:57,480 e iso é pre-determinada polo ordenador, 792 00:34:57,480 --> 00:34:59,370 1 que é eficaz non existe. 793 00:34:59,370 --> 00:35:00,980 É só unha especie de cae dun penedo. 794 00:35:00,980 --> 00:35:05,480 E por iso, se engadir 1 a 255, o que valor que aparentemente chegar? 795 00:35:05,480 --> 00:35:06,180 0. 796 00:35:06,180 --> 00:35:09,700 E así as cifras accidentalmente, e, se cadra, sen querer, 797 00:35:09,700 --> 00:35:12,040 acabar inclúen en torno a como este. 798 00:35:12,040 --> 00:35:14,079 Entón, o que pode ser a implicación diso? 799 00:35:14,079 --> 00:35:15,620 Así, hai algunhas cousas diferentes. 800 00:35:15,620 --> 00:35:18,751 Entón, un, non acaban buscando como 0, sen querer, 801 00:35:18,751 --> 00:35:20,750 pero pode tipo de ver, mentres que no mundo real, 802 00:35:20,750 --> 00:35:23,416 para mellor ou para peor, manifestacións desa idea dun límite. 803 00:35:23,416 --> 00:35:26,630 Por exemplo, calquera de vostedes que Xa xogou Lego Star Wars, 804 00:35:26,630 --> 00:35:28,880 Alguén por casualidade sabe o número máximo de moedas 805 00:35:28,880 --> 00:35:32,032 pode recoller en Lego Star Wars? 806 00:35:32,032 --> 00:35:35,640 Tomé un palpite baseado cuestións principais de hoxe. 807 00:35:35,640 --> 00:35:39,140 É maior que 256 ou 255. 808 00:35:39,140 --> 00:35:40,330 É 4 millóns. 809 00:35:40,330 --> 00:35:42,080 Así, ao parecer, e hai algunhas pessoas-- 810 00:35:42,080 --> 00:35:46,080 algúns googling confirmou última noite-- comezar 4 millóns de moedas de ouro, 811 00:35:46,080 --> 00:35:47,730 ou outros adornos, en Lego Star Wars. 812 00:35:47,730 --> 00:35:49,860 Aínda que, ao parecer, non hai unha forma de enganar o xogo, 813 00:35:49,860 --> 00:35:53,222 hai un erro ou recurso, que permite a vostede só acumular lotes e lotes de puntos. 814 00:35:53,222 --> 00:35:54,930 Pero a maior posible valor, segundo 815 00:35:54,930 --> 00:35:58,360 a esta captura de pantalla de alguén que eu atopados en liña, é de feito, 4 millóns. 816 00:35:58,360 --> 00:35:59,240 >> Agora, por que é isto? 817 00:35:59,240 --> 00:36:03,040 É precisamente 4 millóns, probablemente porque alguén decidiu, 818 00:36:03,040 --> 00:36:05,500 que estaba escribindo este xogo, que poderían facer 4 millóns, 819 00:36:05,500 --> 00:36:07,340 algo, algo, algo, como o valor engada 820 00:36:07,340 --> 00:36:10,256 co calculador anterior, pero é só un pouco máis limpo para o ser humano 821 00:36:10,256 --> 00:36:12,610 para dicir o número máximo de coins-- ou cravos, 822 00:36:12,610 --> 00:36:14,860 como eles chaman eles-- que pode recoller é 4 millóns. 823 00:36:14,860 --> 00:36:16,290 E así, por que é isto? 824 00:36:16,290 --> 00:36:20,310 Como é o xogo LEGO o contador de execución 825 00:36:20,310 --> 00:36:23,420 que está mantendo o control da número de moedas que ten? 826 00:36:23,420 --> 00:36:24,266 Eles están a usar o que? 827 00:36:24,266 --> 00:36:26,390 PARTICIPANTE: El deixa contando tras 4 millóns. 828 00:36:26,390 --> 00:36:27,720 DAVID Malan J: El deixa contando tras 4 millóns, 829 00:36:27,720 --> 00:36:29,525 que significa que pode inferir, como un programador, 830 00:36:29,525 --> 00:36:31,960 que son, probablemente, usando un número enteiro de 32 bits. 831 00:36:31,960 --> 00:36:35,380 Como o programador literalmente só ingresaran, int, no seu código, 832 00:36:35,380 --> 00:36:39,620 e ese é o tipo de variable que eles están a usar para almacenar o código de alguén. 833 00:36:39,620 --> 00:36:42,230 Polo tanto, hai outras manifestacións destes tipos de límites. 834 00:36:42,230 --> 00:36:45,063 >> Entón eu non xogar este game-- e eu estaba lendo sobre a historia 835 00:36:45,063 --> 00:36:48,470 para confirmar como much-- pero no versión orixinal da Civilización, onde 836 00:36:48,470 --> 00:36:53,240 vostede parecer interactúan uns cos outros e poden facer a guerra ou a paz, 837 00:36:53,240 --> 00:36:56,590 Gandhi era quere que sexa un dos os personaxes máis pacíficos, como eu 838 00:36:56,590 --> 00:36:59,280 comprende-lo, en primeiro versión de Civilization. 839 00:36:59,280 --> 00:37:03,250 E, de feito, nunha escala de 1 a 10, súa agresividade era só un 1. 840 00:37:03,250 --> 00:37:05,620 Entón, sempre tan lixeiramente agresivo, aparentemente. 841 00:37:05,620 --> 00:37:11,590 >> Pero nalgún momento, pode, ao parecer, instalar a democracia na súa xeografía. 842 00:37:11,590 --> 00:37:14,900 E se instalar a democracia na súa versión do xogo, 843 00:37:14,900 --> 00:37:17,320 a continuación, o seu nivel de agresión vai para abaixo. 844 00:37:17,320 --> 00:37:18,460 É unha cousa boa. 845 00:37:18,460 --> 00:37:20,890 A xente está máis tranquilo aparentemente, nesa situación. 846 00:37:20,890 --> 00:37:23,190 Pero, ao parecer, alguén fixo non ten unha, que, condición 847 00:37:23,190 --> 00:37:24,780 na versión orixinal do código. 848 00:37:24,780 --> 00:37:30,650 >> Entón nivel agresión de Gandhi pasou de positiva 1, menos 2, para un negativo, 849 00:37:30,650 --> 00:37:33,840 pero o xogo non fai entender os números negativos. 850 00:37:33,840 --> 00:37:38,680 Entón, o que pasou foi a agresión de Gandhi nivel pasou de 1 a 0, a 1 negativo, 851 00:37:38,680 --> 00:37:40,900 que tivo o efecto de envolvendo en torno a ser 852 00:37:40,900 --> 00:37:44,690 o personaxe máis agresivo no xogo, a un valor de 255, 853 00:37:44,690 --> 00:37:46,630 nunha escala de 1 a 10. 854 00:37:46,630 --> 00:37:49,887 E, desde entón, houbo máis encarnações deste xogo, 855 00:37:49,887 --> 00:37:51,720 e mantivéronse como unha especie de ovo de Pascua, 856 00:37:51,720 --> 00:37:53,870 Gandhi que é aparentemente tan terriblemente agresiva. 857 00:37:53,870 --> 00:37:56,740 Pero foi o resultado dun erro de programación moi simple 858 00:37:56,740 --> 00:37:58,630 nesa versión moi inicial do xogo. 859 00:37:58,630 --> 00:38:02,860 >> Agora, máis perturbador, máis recentemente, o Boeing 787 860 00:38:02,860 --> 00:38:05,720 foi documentada como tendo unha erro, non o tipo de dispositivo 861 00:38:05,720 --> 00:38:07,340 vostede particularmente quero ter un erro. 862 00:38:07,340 --> 00:38:10,130 E os síntomas, que eu vou ler aquí, a partir dun artigo en liña, 863 00:38:10,130 --> 00:38:13,840 Foi este, un modelo 787 avións que foi continuamente alimentado 864 00:38:13,840 --> 00:38:18,030 para 248 días pode perder todo corrente alterna, AC, 865 00:38:18,030 --> 00:38:20,850 enerxía eléctrica, debido as unidades de control do xerador, 866 00:38:20,850 --> 00:38:23,330 GCUs, simultaneamente entrar no modo de fallos. 867 00:38:23,330 --> 00:38:26,790 Polo tanto, este foi un aviso emitido cando este problema foi detectado. 868 00:38:26,790 --> 00:38:28,750 Esta condición é causada por un contador de software, 869 00:38:28,750 --> 00:38:32,230 interno ao GCUs, así un número enteiro ou unha variable, 870 00:38:32,230 --> 00:38:36,850 que rebordan vontade tras 248 días de potencia continua. 871 00:38:36,850 --> 00:38:40,350 Boeing é o proceso de desenvolvemento dunha actualización de software que GCU 872 00:38:40,350 --> 00:38:42,350 vai resolver a condición insegura. 873 00:38:42,350 --> 00:38:44,226 >> Tan parecido ao mísil escenario, no que 874 00:38:44,226 --> 00:38:46,850 tiñan algún tipo de variable que contaba, e contando, 875 00:38:46,850 --> 00:38:50,720 e contar, pero transbordador gradualmente os límites da súa capacidade, 876 00:38:50,720 --> 00:38:54,890 fixo do mesmo xeito que o avión de maldición ter un estourido de variable 877 00:38:54,890 --> 00:38:56,410 despois de bastante tempo de execución. 878 00:38:56,410 --> 00:38:59,240 E así o camiño tongue-in-Cheek de traballar en torno a esta cuestión 879 00:38:59,240 --> 00:39:04,400 é, en realidade, reiniciar, o avión toda 247 días, para que a memoria é eliminada 880 00:39:04,400 --> 00:39:06,100 ea variable vai cara atrás a 0. 881 00:39:06,100 --> 00:39:09,410 Pero entender, este é un moi gran encarnación de software, 882 00:39:09,410 --> 00:39:14,070 pero sobre todo porque escoitamos falar sobre Apple sistemas operativos de entrar en coches, 883 00:39:14,070 --> 00:39:18,030 e coches de auto-condución de Google, e calquera número de encarnações de software 884 00:39:18,030 --> 00:39:21,000 Na nosa vida diaria, TVs e reloxos, e moito máis, 885 00:39:21,000 --> 00:39:24,950 entender foron cercados por software, todo o que está escrito por nós seres humanos. 886 00:39:24,950 --> 00:39:28,150 >> E, como todos nós imos descubrir en breve, é moi doado e moi típico 887 00:39:28,150 --> 00:39:30,250 a cometer erros ao escribir software. 888 00:39:30,250 --> 00:39:32,745 E se non pegá-los, algunhas cousas malas poden ocorrer. 889 00:39:32,745 --> 00:39:35,400 Agora, ás veces, algúns cousas divertido poden acontecer, 890 00:39:35,400 --> 00:39:38,280 ou, polo menos, ás veces saber esperar algunha maldade. 891 00:39:38,280 --> 00:39:41,550 Así 0 dividido por 0, dende o grao escola, xeralmente é unha cousa mala. 892 00:39:41,550 --> 00:39:43,050 É indefinida. 893 00:39:43,050 --> 00:39:46,440 E resulta out-- e imos ver se meu micrófono pode escoller este up-- que Apple 894 00:39:46,440 --> 00:39:47,790 tivo un desfrute con este pouco. 895 00:39:47,790 --> 00:39:48,850 Entón, eu teño un iPhone aquí. 896 00:39:48,850 --> 00:39:54,160 Vou falar con Siri e pedirlle para me dar a resposta a 0 dividido por 0. 897 00:39:54,160 --> 00:39:55,850 O que está dividido por 0 0? 898 00:39:55,850 --> 00:39:59,350 899 00:39:59,350 --> 00:40:02,230 >> Siri: Imaxina que ten 0 cookies, e división las uniformemente 900 00:40:02,230 --> 00:40:03,540 entre 0 amigos. 901 00:40:03,540 --> 00:40:05,810 Cantos as cookies que cada persoa recibe? 902 00:40:05,810 --> 00:40:06,350 Ve? 903 00:40:06,350 --> 00:40:07,660 Non ten sentido. 904 00:40:07,660 --> 00:40:10,540 E Cookie Monster é triste que non existen galletas. 905 00:40:10,540 --> 00:40:13,987 E está triste que non ten amigos. 906 00:40:13,987 --> 00:40:15,570 DAVID Malan J: É unha especie de desagradable. 907 00:40:15,570 --> 00:40:17,550 Polo tanto, este é só o que se dixo alí. 908 00:40:17,550 --> 00:40:21,380 É indeterminado, non é definida, E de feito, moitas linguaxes de programación 909 00:40:21,380 --> 00:40:24,950 ou, realmente, compiladores detectar cando, nun programa, 910 00:40:24,950 --> 00:40:27,050 tentar dividir 0 por 0. 911 00:40:27,050 --> 00:40:29,830 Máis divertido do que iso, con todo, é que, ao parecer, Cookie Monster 912 00:40:29,830 --> 00:40:31,270 está en Twitter estes días. 913 00:40:31,270 --> 00:40:37,610 E el respondeu a esta, con iso, que é absolutamente encantador. 914 00:40:37,610 --> 00:40:40,110 Pero imos dar unha rápida ollo a un par de outras construcións, 915 00:40:40,110 --> 00:40:43,459 e logo poñer algunhas destas código de usar, en boas maneiras. 916 00:40:43,459 --> 00:40:45,250 Entón non é que, ademais de loops, hai 917 00:40:45,250 --> 00:40:49,174 algo chamado un loop while, que parece diferente e é aplicado 918 00:40:49,174 --> 00:40:51,590 un pouco e differently-- imos finalmente ver examples-- 919 00:40:51,590 --> 00:40:53,500 pero, en certo sentido, é máis simple porque 920 00:40:53,500 --> 00:40:56,670 non permite que para arrincar e actualizar dentro do límite do circuíto. 921 00:40:56,670 --> 00:40:57,794 Aínda pode implementar lo. 922 00:40:57,794 --> 00:41:01,219 Para que poida facer exactamente as mesmas cousas cun loop while, como con un loop for, 923 00:41:01,219 --> 00:41:03,260 pero a súa sintaxe, ultimately-- como imos finalmente 924 00:41:03,260 --> 00:41:04,551 see-- vai ser diferente. 925 00:41:04,551 --> 00:41:07,450 Hai incluso un loop Do While, que é realmente un pouco diferente, 926 00:41:07,450 --> 00:41:09,640 en que, mentres un loop e un loop while sempre 927 00:41:09,640 --> 00:41:13,005 comprobar a súa condición de primeira, se ler esa cousa de arriba abaixo, 928 00:41:13,005 --> 00:41:16,440 que tipo de parece que vai comprobar-lo da condición do último porque é 929 00:41:16,440 --> 00:41:17,910 verdadeiramente a última liña de código. 930 00:41:17,910 --> 00:41:20,580 E, de feito, que vai ser útil en determinados programas que escribimos, 931 00:41:20,580 --> 00:41:23,746 se quere só facer algo cegamente e, finalmente, comprobar a condición. 932 00:41:23,746 --> 00:41:25,205 Iso non é necesariamente unha cousa mala. 933 00:41:25,205 --> 00:41:27,912 Se queremos variables, podemos facer Lo nun par de formas diferentes. 934 00:41:27,912 --> 00:41:30,290 E vimos no Foxtrot debuxos animados, un xeito de facelo, 935 00:41:30,290 --> 00:41:33,400 onde declarar a variable, como int contador de punto e coma, 936 00:41:33,400 --> 00:41:36,570 e, a continuación, later-- quizais o próximo liña, quizais 10 liñas later-- 937 00:41:36,570 --> 00:41:37,800 realmente arrincar-lo. 938 00:41:37,800 --> 00:41:42,230 Así estas 2 liñas de código declarar unha variable de tipo int 939 00:41:42,230 --> 00:41:44,930 e chamalo de balcón, polo que dá- min abondo bits para realizar un int. 940 00:41:44,930 --> 00:41:48,230 E, a continuación, finalmente, el pon o valor 0 para esa variable. 941 00:41:48,230 --> 00:41:51,250 Ela organiza os 0 e 1 nun dos estándar, que sabemos que desde a semana pasada, 942 00:41:51,250 --> 00:41:53,260 representa o número que coñecemos como 0. 943 00:41:53,260 --> 00:41:56,920 Ou, francamente, pode facelo moi de forma máis sucinta, como esta. 944 00:41:56,920 --> 00:41:59,390 >> Agora temos tamén a capacidade de chamar funcións. 945 00:41:59,390 --> 00:42:03,070 E, de feito, aquí está unha liña 2 programa, ou unha parte do mesmo, 946 00:42:03,070 --> 00:42:06,157 que nos permite, de feito, escribir un código que 947 00:42:06,157 --> 00:42:08,990 recibe unha cadea do user-- moi como o noso voluntario nun momento ago-- 948 00:42:08,990 --> 00:42:11,320 almacenando o resultado unha variable chamada nome, 949 00:42:11,320 --> 00:42:15,470 e entăo-- moi parecido ao noso voluntario con estampas printf-- fóra eses valores 950 00:42:15,470 --> 00:42:19,180 pasando en dous argumentos, o cadea, seguida da variable 951 00:42:19,180 --> 00:42:20,781 chamado, nome, en si. 952 00:42:20,781 --> 00:42:23,155 Entón, imos dar un ollo, antes de queremos volver a Mario alí, 953 00:42:23,155 --> 00:42:26,010 nun par de agora, exemplos diso. 954 00:42:26,010 --> 00:42:30,537 >> Eu estou indo a ir adiante e aberto ata, imos dicir, a función-0.c. 955 00:42:30,537 --> 00:42:33,120 E como sempre, este código é dispoñible na páxina web do curso, 956 00:42:33,120 --> 00:42:35,660 para que poida tocar xunto con casa e mirar para el máis tarde. 957 00:42:35,660 --> 00:42:40,400 Pero aquí está o programa no que é Esencialmente, a partir da liña 17 a 22. 958 00:42:40,400 --> 00:42:43,270 O programa principal é onde a programa é sempre vai comezar. 959 00:42:43,270 --> 00:42:46,980 Este programa, ao parecer, vai para imprimir o seu nome, colon. 960 00:42:46,980 --> 00:42:50,320 É, a continuación, vai chamar GetString, tal como fixemos cos nosos voluntarios. 961 00:42:50,320 --> 00:42:53,365 E entón, iso é interesante, vai chamar PrintName. 962 00:42:53,365 --> 00:42:56,490 Acontece que, durante todo este tempo, non parece ser unha función chamada PrintName. 963 00:42:56,490 --> 00:42:57,614 Que amosa o nome de alguén. 964 00:42:57,614 --> 00:43:01,210 Non precisa utilizar printf de pasado, hai PrintName. 965 00:43:01,210 --> 00:43:03,500 >> Pero iso é enganoso porque non fai PrintName 966 00:43:03,500 --> 00:43:06,760 veñen con C. A xente non inventar lo o 40 ou 50 anos, 967 00:43:06,760 --> 00:43:07,990 Eu fixen, no seu lugar. 968 00:43:07,990 --> 00:43:10,330 E, de feito, se eu rolar aínda máis para abaixo, aviso 969 00:43:10,330 --> 00:43:14,200 como podo escribir o meu propio funcións en C. imos finalmente 970 00:43:14,200 --> 00:43:16,319 explicar por que seguimos dicindo: baleiro, nalgúns lugares, 971 00:43:16,319 --> 00:43:18,110 pero para hoxe, imos basta ollar para o nome. 972 00:43:18,110 --> 00:43:20,905 >> Na liña 24, se quere crear a súa propia función, 973 00:43:20,905 --> 00:43:22,780 vostede literalmente escribir o nome da función. 974 00:43:22,780 --> 00:43:24,340 Eu escollín PrintName. 975 00:43:24,340 --> 00:43:26,159 En parénteses, vostede a continuación, especificar que tipo 976 00:43:26,159 --> 00:43:28,450 de insumos, e cantos quere esta función para tirar. 977 00:43:28,450 --> 00:43:31,906 Neste caso, quero leva 1 variable chamada, nome, 978 00:43:31,906 --> 00:43:34,030 e que será de Tipo, corda, polo que vai 979 00:43:34,030 --> 00:43:35,780 para ser unha secuencia de caracteres. 980 00:43:35,780 --> 00:43:39,170 E entón, este program-- así como no scratch, 981 00:43:39,170 --> 00:43:42,590 pode que puzzle personalizado pieces-- vai ter ese comportamento personalizado. 982 00:43:42,590 --> 00:43:46,760 Vai chamar printf pasando, Ola, espazo reservado, 983 00:43:46,760 --> 00:43:49,110 e, a continuación, que vai liga en todo o que o usuario chamado. 984 00:43:49,110 --> 00:43:51,450 >> Polo tanto, este é un exemplo do que un científico da computación sería 985 00:43:51,450 --> 00:43:55,090 abstracción chamada ou funcional descomposición, que son só 986 00:43:55,090 --> 00:43:58,110 formas extravagantes de dizendo-- é desexa desa idea de alto nivel, 987 00:43:58,110 --> 00:44:01,569 como quero funcionalidade que imprime o nome de alguén, absolutamente ten 988 00:44:01,569 --> 00:44:04,360 Pode literalmente escribir printf e despois pasar os argumentos que quere, 989 00:44:04,360 --> 00:44:07,340 o programa pode funcionar, como foi desde mércores. 990 00:44:07,340 --> 00:44:10,510 Pero pode comezar a abstraerse a noción de impresión dun nome. 991 00:44:10,510 --> 00:44:13,270 Pode darlle un nome, como PrintName, e este 992 00:44:13,270 --> 00:44:15,280 é esa idea de capas de semana 0. 993 00:44:15,280 --> 00:44:19,910 >> De agora en diante, eu e vostede non ten que saber ou lle importa como PrintName é aplicado. 994 00:44:19,910 --> 00:44:22,470 Si usa printf, é posible que non, quen sabe o que usa? 995 00:44:22,470 --> 00:44:23,410 Quen lle importa? 996 00:44:23,410 --> 00:44:26,034 Agora eu estou falando aquí, en vez de baixar aquí. 997 00:44:26,034 --> 00:44:28,700 E, de feito, como os nosos programas de obter máis avanzada e sofisticada, 998 00:44:28,700 --> 00:44:32,550 imos seguir a tomar para concedida que hai máis baixas pezas do puzzle nivel. 999 00:44:32,550 --> 00:44:34,780 Porque escribimos los ou alguén fixo, entón 1000 00:44:34,780 --> 00:44:36,910 que podemos, entón, construír enriba deles. 1001 00:44:36,910 --> 00:44:39,430 Imos dar un ollo neste variante, funciona un. 1002 00:44:39,430 --> 00:44:41,780 >> Entón, este é un pouco máis avanzado, pero verifícase se 1003 00:44:41,780 --> 00:44:44,570 que na biblioteca de CS50, hai só unha función GetInt. 1004 00:44:44,570 --> 00:44:47,720 Non pensamos que, anos atrás, para aplicar unha función GetPositiveInt. 1005 00:44:47,720 --> 00:44:50,970 E iso é un pouco aburrido, porque se vostedes están escribindo un programa no que 1006 00:44:50,970 --> 00:44:53,325 Quere ter un positivo número enteiro do usuario, 1007 00:44:53,325 --> 00:44:55,010 pode perfectamente usar GetInt. 1008 00:44:55,010 --> 00:44:57,840 E pode absolutamente comprobar a condición e quizais un loop 1009 00:44:57,840 --> 00:45:00,320 Se é maior que int que 0 e berrar co usuario 1010 00:45:00,320 --> 00:45:02,699 se el ou ela non dá vostede un número positivo. 1011 00:45:02,699 --> 00:45:04,740 Pero imos construír este edificio bloquear a nós mesmos, un, 1012 00:45:04,740 --> 00:45:06,555 peza Raspadinha costume, se quere. 1013 00:45:06,555 --> 00:45:08,680 Vou ter un programa aquí que, en definitiva, Eu 1014 00:45:08,680 --> 00:45:11,780 quero ser capaz de chamá- GetPositiveInt, e quero ser 1015 00:45:11,780 --> 00:45:14,200 capaz de imprimir o que quere que é int. 1016 00:45:14,200 --> 00:45:16,240 Pero iso é abstraída agora. 1017 00:45:16,240 --> 00:45:19,050 El acaba de ser dado un alto nivel nome que di que fai, 1018 00:45:19,050 --> 00:45:21,780 que é marabilloso porque é moi intuitiva agora de ler. 1019 00:45:21,780 --> 00:45:24,710 E se eu me importa o que está por baixo o capó, déixeme rolar para abaixo. 1020 00:45:24,710 --> 00:45:27,140 E é un pouco intimidante en primeiro lugar, especialmente 1021 00:45:27,140 --> 00:45:29,470 se este é o seu primeiro programa, pero imos dar un ollo. 1022 00:45:29,470 --> 00:45:32,860 >> Eu non estou dicindo, baleiro, pois parece que funcións, 1023 00:45:32,860 --> 00:45:34,777 moi parecido GetString, pode voltar un valor para min. 1024 00:45:34,777 --> 00:45:36,610 Non só teñen para imprimir en pantalla, 1025 00:45:36,610 --> 00:45:38,410 realmente poden entregar me algo de volta. 1026 00:45:38,410 --> 00:45:41,535 E que antes PrintName, Eu non teño nada de volta. 1027 00:45:41,535 --> 00:45:44,160 Eu precisaba do efecto colateral de algo aparecendo na pantalla, 1028 00:45:44,160 --> 00:45:46,570 pero eu non teño un home darme algo de volta. 1029 00:45:46,570 --> 00:45:48,840 Aquí, con GetPositiveInt, como con GetInt, 1030 00:45:48,840 --> 00:45:50,640 Quero ser entregado algo de volta. 1031 00:45:50,640 --> 00:45:53,220 Entón, eu estou dicindo non, baleiro, na liña 23, pero int, 1032 00:45:53,220 --> 00:45:55,570 que di, esta función que estou escribindo, 1033 00:45:55,570 --> 00:45:58,860 chamado GetPositiveInt vai entregar-me de volta un enteiro, non nada, 1034 00:45:58,860 --> 00:45:59,890 non baleiro. 1035 00:45:59,890 --> 00:46:03,280 >> Mentres tanto, que vai tomar ningunha entradas, así que, tipo, inverteu-lo. 1036 00:46:03,280 --> 00:46:08,280 Non estou dando calquera GetPositiveInt entrada, quero que me dea a súa saída. 1037 00:46:08,280 --> 00:46:09,800 E entón o que pasa agora? 1038 00:46:09,800 --> 00:46:11,640 Entón aquí está como eu pode declarar unha variable. 1039 00:46:11,640 --> 00:46:15,090 Xa fixen iso fóra do loop, por razóns imos finalmente ver, 1040 00:46:15,090 --> 00:46:17,700 pero iso só dá me 32 bits chamado, N, 1041 00:46:17,700 --> 00:46:20,952 e eu teño pre-determinación los para almacenar enteiro. 1042 00:46:20,952 --> 00:46:23,660 E aquí é que, facer mentres construción, e é por iso que é útil. 1043 00:46:23,660 --> 00:46:26,700 Literalmente iso, mentres N é inferior a 1. 1044 00:46:26,700 --> 00:46:28,030 Entón imos ver o que acontece. 1045 00:46:28,030 --> 00:46:30,760 Eu imprimir, por favor déame un int positivo. 1046 00:46:30,760 --> 00:46:34,300 Eu, entón, obter un int, usando de CS50 funcionar e almacenado N. 1047 00:46:34,300 --> 00:46:38,990 >> E entón, o que liña de código, probablemente, corre preto, loxicamente? 1048 00:46:38,990 --> 00:46:41,890 Cal o número da liña? 1049 00:46:41,890 --> 00:46:42,571 Si, entón 31. 1050 00:46:42,571 --> 00:46:45,320 Non sabería diso ata que teña se dixo ou tipo de inferir que, 1051 00:46:45,320 --> 00:46:45,986 pero iso é verdade. 1052 00:46:45,986 --> 00:46:48,280 Vai de arriba abaixo e, a continuación, segue a repetir. 1053 00:46:48,280 --> 00:46:55,840 Entón, se eu ter escrito por exemplo, o número 1 negativo, é n menos do 1 negativo? 1054 00:46:55,840 --> 00:46:56,340 Si. 1055 00:46:56,340 --> 00:46:58,470 Porque negativa 1 é inferior a 1. 1056 00:46:58,470 --> 00:46:59,510 Entón, o que debe ocorrer? 1057 00:46:59,510 --> 00:47:03,260 Eu vou facelo mentres N é inferior a 1, 1058 00:47:03,260 --> 00:47:05,760 entón eu vou volver á liña 28. 1059 00:47:05,760 --> 00:47:09,530 >> E cada un tempo-- e imos correr isto-- facer a función de 1 a compilalo lo, 1060 00:47:09,530 --> 00:47:11,340 e agora dot cortar función 1. 1061 00:47:11,340 --> 00:47:14,280 Se eu escribir un negativo, é seguirá berrando comigo 1062 00:47:14,280 --> 00:47:17,530 ata que eu cooperar porque cada das miñas entradas é inferior a 1 1063 00:47:17,530 --> 00:47:20,070 e se é inferior a 1, mentres que, Vou continuar facendo iso. 1064 00:47:20,070 --> 00:47:24,240 Se finalmente darlle un número como 50, por sorte, el di que, grazas ao 50. 1065 00:47:24,240 --> 00:47:24,970 Por que? 1066 00:47:24,970 --> 00:47:30,640 Porque así que n non sexa inferior a 1, eu paro de estar preso neste loop, 1067 00:47:30,640 --> 00:47:33,840 e esta nova contrasinal hoxe, retorno, literalmente fai iso. 1068 00:47:33,840 --> 00:47:36,800 Entón eu acaba aplicado, nunha sentido, o equivalente a GetString, 1069 00:47:36,800 --> 00:47:40,590 onde estou devolvendo a quen me a usar, algún valor. 1070 00:47:40,590 --> 00:47:42,820 Non ten que ser unha corda, é un int. 1071 00:47:42,820 --> 00:47:44,990 Así, un simple, rápido exemplo, pero nós imos en breve 1072 00:47:44,990 --> 00:47:47,930 ver un pouco máis sofisticado versións aínda. 1073 00:47:47,930 --> 00:47:53,882 De feito, imos dar un ollo a un un numérico, que se chama return.c. 1074 00:47:53,882 --> 00:47:55,590 E este é, en realidade, un pouco máis simple. 1075 00:47:55,590 --> 00:47:59,010 Así, o propósito deste programa en vida-- imos compilar e executalo, 1076 00:47:59,010 --> 00:48:03,090 polo que asegúrese retorno, dot barra, aviso return-- 1077 00:48:03,090 --> 00:48:05,530 o programa simplemente cubos o valor 2. 1078 00:48:05,530 --> 00:48:08,410 É moi estúpido, é difícil código, non hai que ningún entradas, 1079 00:48:08,410 --> 00:48:12,220 pero iso demostra outro función que me escrito. 1080 00:48:12,220 --> 00:48:15,760 Entón aquí, eu teño declarado variable, chamado x, do tipo int, 1081 00:48:15,760 --> 00:48:17,840 igual ao número 2, completamente arbitraria. 1082 00:48:17,840 --> 00:48:19,530 Este é só algunha impresión gordo. 1083 00:48:19,530 --> 00:48:23,070 Di x é agora, e tal tal, cubing dot dot dot. 1084 00:48:23,070 --> 00:48:26,390 E a maxia está aparentemente en liña 21. 1085 00:48:26,390 --> 00:48:30,120 Estou chamando unha función chamada, cubo, Estou entregándolle unha folla de papel 1086 00:48:30,120 --> 00:48:32,890 co número 2 escrita nel, e que o valor que matematicamente, 1087 00:48:32,890 --> 00:48:34,860 quero saír dela? 1088 00:48:34,860 --> 00:48:36,570 Así como unha comprobación de sanidade? 1089 00:48:36,570 --> 00:48:37,070 8. 1090 00:48:37,070 --> 00:48:37,570 Non? 1091 00:48:37,570 --> 00:48:40,160 Quero dous cubos de volta, 2 a a potencia de 3, de xeito 8 de volta. 1092 00:48:40,160 --> 00:48:42,570 >> Entón, onde está cubo aplicado? 1093 00:48:42,570 --> 00:48:44,349 Ben, a notificación é aplicado aquí debaixo. 1094 00:48:44,349 --> 00:48:47,140 E, así como antes, loxicamente, aínda que a sintaxe é probablemente 1095 00:48:47,140 --> 00:48:49,320 moi novo para moitos de vós, Quero esa función 1096 00:48:49,320 --> 00:48:51,780 para me devolver unha folla de papel cun int nel. 1097 00:48:51,780 --> 00:48:53,990 Entón, eu teño un int, o nome é arbitrariamente, 1098 00:48:53,990 --> 00:48:55,530 pero convenientemente denominado cubo. 1099 00:48:55,530 --> 00:48:58,430 A entrada para el, n é de tipo enteiro, o que é 1100 00:48:58,430 --> 00:49:00,800 Como eu pasar no número 2 nunha folla de papel. 1101 00:49:00,800 --> 00:49:03,910 E, a continuación, comproba-se soportes C matemáticas, así que non ten x para os tempos, 1102 00:49:03,910 --> 00:49:06,680 só usar o asterisco para a multiplicación. 1103 00:49:06,680 --> 00:49:11,070 E iso volve n veces n veces n, o cal é simplemente un valor ao cubo. 1104 00:49:11,070 --> 00:49:12,840 >> Entón, a onde estamos indo con todo isto? 1105 00:49:12,840 --> 00:49:14,570 Este é sempre un tour lóstrego, seguro, 1106 00:49:14,570 --> 00:49:16,410 que as seccións de super en e no conxunto de problemas 1, 1107 00:49:16,410 --> 00:49:18,368 vai ser orientado polo todo isto aínda máis. 1108 00:49:18,368 --> 00:49:22,490 E nun conxunto de problemas, imos transición do mundo gráfica do Scratch 1109 00:49:22,490 --> 00:49:25,640 para algo máis na liña de comandos en C. Pero imos inspirar- 1110 00:49:25,640 --> 00:49:27,680 a partir deste xogo aquí doutros tempos, en que 1111 00:49:27,680 --> 00:49:31,591 usando C ea edición estándar do p set ti implementará pirámide de Mario. 1112 00:49:31,591 --> 00:49:34,340 E na edición de hackers do p set, se así o desexan elixir, 1113 00:49:34,340 --> 00:49:38,280 vostede implementará un pouco máis desafiando pirámide con dous picos. 1114 00:49:38,280 --> 00:49:41,239 Tamén vai implantar un algoritmo, un algoritmo lambón. 1115 00:49:41,239 --> 00:49:43,030 Acontece que hai algunha lóxica interesante 1116 00:49:43,030 --> 00:49:45,640 detrás do proceso de executando unha estación de cashier 1117 00:49:45,640 --> 00:49:47,410 e, de feito, entregando- alguén cambio de volta. 1118 00:49:47,410 --> 00:49:50,410 Existe un algoritmo que é moi simple, que pode ata 1119 00:49:50,410 --> 00:49:53,576 comprender intuitivamente cando lin por primeira vez ele-- entendendo que é o que eu sempre 1120 00:49:53,576 --> 00:49:57,110 feito en calquera momento eu teño dado a alguén nalgún traseira-- diñeiro que lle permite sempre 1121 00:49:57,110 --> 00:50:00,679 minimizar o número de notas de papel ou moedas 1122 00:50:00,679 --> 00:50:02,220 que está entregando ao seu usuario. 1123 00:50:02,220 --> 00:50:04,610 E iso, por suposto, é convincente porque se vai a CVS ou outros enfeites, 1124 00:50:04,610 --> 00:50:06,430 non quere ser handed unha morea de os 1125 00:50:06,430 --> 00:50:07,596 ou unha morea de moedas de un centavo. 1126 00:50:07,596 --> 00:50:10,120 Quere que o menor moedas probablemente posible. 1127 00:50:10,120 --> 00:50:13,070 >> Por último, tamén será reto a involucrarse no mundo da auga 1128 00:50:13,070 --> 00:50:17,220 e realmente obter unha valoración para un mapeamento entre os tipos de fluxo, 1129 00:50:17,220 --> 00:50:19,890 de gusto, de auga nun ducha, canta auga é usada. 1130 00:50:19,890 --> 00:50:22,640 E a alusión nel, será este clip aquí, 1131 00:50:22,640 --> 00:50:24,840 que imos acabar só 60 segundos, que 1132 00:50:24,840 --> 00:50:29,070 pinta un cadro de cabezas de ducha de baixo fluxo. 1133 00:50:29,070 --> 00:50:30,886 >> [REPRODUCIÓN DE VIDEO] 1134 00:50:30,886 --> 00:50:31,385 -Está Ben. 1135 00:50:31,385 --> 00:50:32,774 Eu teño todo aquí. 1136 00:50:32,774 --> 00:50:35,800 Eu teño o Cyclone F series, Hydra, Jetflow, Estocolmo 1137 00:50:35,800 --> 00:50:37,660 Supersteam, o nome del. 1138 00:50:37,660 --> 00:50:39,265 >> -E O que recomenda? 1139 00:50:39,265 --> 00:50:40,460 >> -O Que está a buscar? 1140 00:50:40,460 --> 00:50:41,300 >> -Power Home. 1141 00:50:41,300 --> 00:50:42,285 Potencia. 1142 00:50:42,285 --> 00:50:42,910 -Como Silkwood. 1143 00:50:42,910 --> 00:50:44,520 -Iso É a radiación. 1144 00:50:44,520 --> 00:50:46,335 -É Correcto. 1145 00:50:46,335 --> 00:50:48,275 -Agora ¿Que é iso? 1146 00:50:48,275 --> 00:50:49,704 -Iso É o Comando 450. 1147 00:50:49,704 --> 00:50:50,620 Non vendo aquel. 1148 00:50:50,620 --> 00:50:51,700 >> -mais Iso é o que queremos. 1149 00:50:51,700 --> 00:50:52,680 É un comandos 450. 1150 00:50:52,680 --> 00:50:53,882 >> -Non Pensa en min. 1151 00:50:53,882 --> 00:50:55,090 El só se usa no circo. 1152 00:50:55,090 --> 00:50:56,512 É para elefantes. 1153 00:50:56,512 --> 00:50:59,356 >> -Vou Pagar nada. 1154 00:50:59,356 --> 00:51:01,252 >> -E Jerry? 1155 00:51:01,252 --> 00:51:02,760 >> -El Non podía tratar con isto. 1156 00:51:02,760 --> 00:51:04,910 É delicado. 1157 00:51:04,910 --> 00:51:05,750 Oh yeah. 1158 00:51:05,750 --> 00:51:36,737 1159 00:51:36,737 --> 00:51:37,320 [FIN DE REPRODUCIÓN] 1160 00:51:37,320 --> 00:51:37,700 DAVID Malan J: Todo ben. 1161 00:51:37,700 --> 00:51:38,820 Isto é, para CS50. 1162 00:51:38,820 --> 00:51:40,050 Imos velo a próxima semana. 1163 00:51:40,050 --> 00:51:45,910 1164 00:51:45,910 --> 00:51:49,029 >> COLUMNA 1: [? Scully?] [? Ian ,?] na medida en que este proxecto Outro, 1165 00:51:49,029 --> 00:51:50,362 o que vostedes chegar a? 1166 00:51:50,362 --> 00:51:51,990 >> COLUMNA 2: Ben, nós demos unha variedade de pensamento, 1167 00:51:51,990 --> 00:51:53,250 e pensamos que a mellor maneira a-- 1168 00:51:53,250 --> 00:51:53,660 >> COLUMNA 3: Podo? 1169 00:51:53,660 --> 00:51:54,326 >> COLUMNA 2: Si. 1170 00:51:54,326 --> 00:51:56,360 Por todos os medios, en realidade. 1171 00:51:56,360 --> 00:51:59,425 >> COLUMNA 3: Entón eu creo que podemos resumir a nosa idea 1172 00:51:59,425 --> 00:52:05,450 para os Outros, cunha nada word--. 1173 00:52:05,450 --> 00:52:08,950 1174 00:52:08,950 --> 00:52:10,409 >> DAVID Malan J: Nada? 1175 00:52:10,409 --> 00:52:11,200 COLUMNA 3: Nada. 1176 00:52:11,200 --> 00:52:12,990 DAVID Malan J: Que significa isto? 1177 00:52:12,990 --> 00:52:16,260 COLUMNA 3: Os Outros son sobre nada. 1178 00:52:16,260 --> 00:52:21,720 COLUMNA 2: Ben, quero dicir, en filosofía, Quero dicir, nada é sempre algo. 1179 00:52:21,720 --> 00:52:24,200 COLUMNA 1: Entón what's-- o que é a premisa? 1180 00:52:24,200 --> 00:52:25,720 COLUMNA 3: Entón é como a vida. 1181 00:52:25,720 --> 00:52:26,680 Aceptar. 1182 00:52:26,680 --> 00:52:28,294 O que fixo hoxe? 1183 00:52:28,294 --> 00:52:31,811 >> DAVID Malan J: Eu me levantei, tiven almorzo, e veu para traballar. 1184 00:52:31,811 --> 00:52:34,056 >> COLUMNA 3: Isto é unha chamada outro. 1185 00:52:34,056 --> 00:52:36,806 COLUMNA 2: Pero, quero dicir, non debería algo ocorrer con el en as-- 1186 00:52:36,806 --> 00:52:37,889 COLUMNA 3: Non, non, non, non. 1187 00:52:37,889 --> 00:52:40,220 Nada acontece. 1188 00:52:40,220 --> 00:52:42,910 >> COLUMNA 1: Entón por que estamos asistindo? 1189 00:52:42,910 --> 00:52:46,956 >> COLUMNA 3: Por é un Outro para CS50. 1190 00:52:46,956 --> 00:52:48,652 >> DAVID Malan J: Aínda non. 1191 00:52:48,652 --> 00:52:49,151