1 00:00:00,000 --> 00:00:10,940 2 00:00:10,940 --> 00:00:13,060 >> DAVID J MALAN: Todas derecha, por lo que este es CS50. 3 00:00:13,060 --> 00:00:15,040 Y esto es claramente un viernes. 4 00:00:15,040 --> 00:00:16,850 Y este es el final de la primera semana. 5 00:00:16,850 --> 00:00:21,020 Así que usted puede recordar que lo dejamos, la última vez, con un cliffhanger de clases. 6 00:00:21,020 --> 00:00:25,020 Por el cual exponemos esta mentira, que no importa lo que te han enseñado creciente 7 00:00:25,020 --> 00:00:31,610 arriba, 1 dividido por 10 no es, en De hecho, 0,1 o 0,100 o 0,10000. 8 00:00:31,610 --> 00:00:35,270 De hecho, si compilamos este programa, como lo hicimos ayer, con, 9 00:00:35,270 --> 00:00:39,770 hacer imprecisión, y luego hacer punto, raya vertical, imprecisión, 10 00:00:39,770 --> 00:00:43,600 nos enteramos de que esto es lo que hay 1 dividido por 10 es en realidad. 11 00:00:43,600 --> 00:00:46,140 Así que eso no es realmente el caso. 12 00:00:46,140 --> 00:00:49,014 Pero esto no hace alusión en algún limitación fundamental de las computadoras. 13 00:00:49,014 --> 00:00:50,930 Y, de hecho, entre los cosas que van a hacer 14 00:00:50,930 --> 00:00:55,130 hoy es echar un vistazo a por qué esto tiene sucedido, ¿qué implicaciones que esto tiene, 15 00:00:55,130 --> 00:00:58,430 cómo la humanidad ha fracasado comprender esto en algunos muy 16 00:00:58,430 --> 00:01:00,410 situaciones-grave el resultado de la cual 17 00:01:00,410 --> 00:01:03,141 ha sido bastante trágica y expensive-- y también 18 00:01:03,141 --> 00:01:04,849 echar un vistazo a la forma en que en realidad puede defender 19 00:01:04,849 --> 00:01:06,530 contra estos tipos de limitaciones. 20 00:01:06,530 --> 00:01:10,940 Así que de manera intuitiva, tal vez, por eso es 1 dividido por 10, 21 00:01:10,940 --> 00:01:15,480 de acuerdo a mi equipo aquí, no sólo 1.10, 0.10? 22 00:01:15,480 --> 00:01:15,980 Sí. 23 00:01:15,980 --> 00:01:16,530 ¿Qué piensas? 24 00:01:16,530 --> 00:01:17,860 >> MIEMBRO DE LA AUDIENCIA: La raíz es diferente? 25 00:01:17,860 --> 00:01:18,550 >> DAVID J MALAN: El lo que es? 26 00:01:18,550 --> 00:01:19,730 ¡Oh, la raíz es diferente? 27 00:01:19,730 --> 00:01:20,720 Así que no del todo. 28 00:01:20,720 --> 00:01:23,200 En realidad es más fundamental para el hardware. 29 00:01:23,200 --> 00:01:23,980 ¿Otros pensamientos? 30 00:01:23,980 --> 00:01:24,584 Sí. 31 00:01:24,584 --> 00:01:26,750 MIEMBRO DE LA AUDIENCIA: Ellos representar los números de manera diferente? 32 00:01:26,750 --> 00:01:27,880 DAVID J MALAN: Así ellos-- Derecho. 33 00:01:27,880 --> 00:01:29,338 Ellos representan números diferente. 34 00:01:29,338 --> 00:01:30,700 Inexacta, al parecer. 35 00:01:30,700 --> 00:01:33,190 Así que es-- Bueno, diferente a lo que? 36 00:01:33,190 --> 00:01:34,490 O ¿de quién? 37 00:01:34,490 --> 00:01:35,050 ¿De nosotros? 38 00:01:35,050 --> 00:01:35,966 MIEMBRO DE LA AUDIENCIA: Sí. 39 00:01:35,966 --> 00:01:38,930 No utilizan el decimal sistema para [inaudible]. 40 00:01:38,930 --> 00:01:39,680 DAVID J MALAN: OK. 41 00:01:39,680 --> 00:01:41,560 Así que en cierto sentido, no lo hacen utilizar el sistema decimal. 42 00:01:41,560 --> 00:01:43,720 Debajo del capó, todo lo que es, de hecho, binario, 43 00:01:43,720 --> 00:01:45,510 y eso es relacionado, de hecho. 44 00:01:45,510 --> 00:01:48,135 Pero es aún más simple explicación que eso. 45 00:01:48,135 --> 00:01:48,635 Sí. 46 00:01:48,635 --> 00:01:49,970 >> MIEMBRO DE LA AUDIENCIA: Ellos sólo tienen tantos bits. 47 00:01:49,970 --> 00:01:52,370 Sólo pueden almacenar hasta un cierto medida, al igual que con los decimales. 48 00:01:52,370 --> 00:01:52,780 >> DAVID J MALAN: Sí. 49 00:01:52,780 --> 00:01:54,420 Esto es lo que realmente está consiguiendo en ella. 50 00:01:54,420 --> 00:01:57,180 Resulta que los ordenadores generalmente, siempre lo hará solamente 51 00:01:57,180 --> 00:01:59,690 utilizar una cantidad finita de información para representar algo. 52 00:01:59,690 --> 00:01:59,870 ¿Correcto? 53 00:01:59,870 --> 00:02:02,110 Después de todo, sólo tenemos un fijo cantidad de espacio en disco duro. 54 00:02:02,110 --> 00:02:04,210 Sólo tenemos una cantidad fija de RAM, o memoria de la computadora. 55 00:02:04,210 --> 00:02:06,251 Y si sólo tiene un cantidad fija de algo, 56 00:02:06,251 --> 00:02:09,611 Seguramente usted no puede realmente contar hasta hasta el infinito o cualquier número que desee. 57 00:02:09,611 --> 00:02:11,610 Usted, clase de, tiene que escoger y elegir qué rango 58 00:02:11,610 --> 00:02:13,220 de los valores que van a apoyar. 59 00:02:13,220 --> 00:02:18,100 >> Y así, por ejemplo, una o dos semanas atrás, cuando hablamos de ASCII, 60 00:02:18,100 --> 00:02:21,610 Y hablamos de 8 bits o un byte, por así decirlo, 61 00:02:21,610 --> 00:02:26,360 el mayor número que pudimos representar con 8 bits fue qué? 62 00:02:26,360 --> 00:02:28,350 255. 63 00:02:28,350 --> 00:02:31,850 Y podemos representar 256 valores totales pero no si pasamos a uno de ellos 64 00:02:31,850 --> 00:02:34,190 en 0-- Bueno, pero si pasar uno de ellos en 0, 65 00:02:34,190 --> 00:02:36,830 entonces el mayor número es, por supuesto, 255. 66 00:02:36,830 --> 00:02:39,410 >> Así que resulta, que esto es el caso también, en este contexto. 67 00:02:39,410 --> 00:02:42,350 Empezamos a hablar, la última vez, acerca de los números de punto flotante, que 68 00:02:42,350 --> 00:02:44,640 son diferentes de números enteros, en que tienen un punto decimal 69 00:02:44,640 --> 00:02:47,056 y, con suerte, algunos números después de eso, pero son demasiado. 70 00:02:47,056 --> 00:02:51,730 Una computadora es solamente normalmente va para utilizar 32 bits, tal vez 64 bits 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í que, aunque hemos crecido aprendizaje de las matemáticas y el conocimiento 73 00:02:56,080 --> 00:02:58,750 que puede tener absolutamente un número infinito de números 74 00:02:58,750 --> 00:03:01,650 después del punto decimal, no si tiene memoria finita. 75 00:03:01,650 --> 00:03:03,930 Usted, clase de, tiene que redondear, o elegir qué 76 00:03:03,930 --> 00:03:05,346 números que van a representar. 77 00:03:05,346 --> 00:03:08,710 Y por lo que se pueda imaginar, en cierto sentido, siendo este de la computadora más cercana 78 00:03:08,710 --> 00:03:14,050 aproximación al valor que décimo que puede conseguir, con tan sólo 32 o menos bits. 79 00:03:14,050 --> 00:03:15,300 Y no es sólo un décimo. 80 00:03:15,300 --> 00:03:19,820 >> Por ejemplo, si cambio esto 03.01, que creemos que es aún más simple. 81 00:03:19,820 --> 00:03:21,300 Así que 1 dividido por 3. 82 00:03:21,300 --> 00:03:22,355 Déjame guardar el archivo. 83 00:03:22,355 --> 00:03:24,680 Déjame ir por delante y recompilarlo. 84 00:03:24,680 --> 00:03:25,820 Y permítanme volver a ejecutarlo. 85 00:03:25,820 --> 00:03:30,000 También en este caso, al parecer, un tercio no es 0.3 y luego un número infinito de 3 de 86 00:03:30,000 --> 00:03:30,770 a partir de entonces. 87 00:03:30,770 --> 00:03:32,540 Usted tiene esta imprecisión al final. 88 00:03:32,540 --> 00:03:35,544 Así que nosotros, los humanos son correctas, y qué que aprendió es, de hecho, correcta, 89 00:03:35,544 --> 00:03:37,460 pero estamos chocando contra algunas limitaciones. 90 00:03:37,460 --> 00:03:39,420 >> Y lo que yo pensaba haríamos hoy, está empezamos 91 00:03:39,420 --> 00:03:42,190 examinado, francamente, el trágicas consecuencias de esta 92 00:03:42,190 --> 00:03:45,490 a veces, cuando la humanidad no acaba de poner en práctica 93 00:03:45,490 --> 00:03:48,460 de esta realidad y de estas limitaciones. 94 00:03:48,460 --> 00:03:52,360 Y vamos a ver una serie de viñetas desde el canal de la historia que se lleva a 95 00:03:52,360 --> 00:03:53,950 Una mirada a cómo las cosas han ido mal. 96 00:03:53,950 --> 00:03:56,340 Se trata de 8 minutos de duración, y vamos a volver después de este 97 00:03:56,340 --> 00:03:59,439 y echar un vistazo a exactamente ¿qué otra cosa puede ir mal. 98 00:03:59,439 --> 00:04:00,605 Si pudiéramos atenuar la lights-- 99 00:04:00,605 --> 00:04:02,350 >> [REPRODUCCIÓN DE VÍDEO] 100 00:04:02,350 --> 00:04:06,310 >> -Informática, Todos hemos llegado a aceptar los problemas a menudo frustrantes que 101 00:04:06,310 --> 00:04:07,750 ir con ellos. 102 00:04:07,750 --> 00:04:11,370 Errores, virus y software fallos son precios pequeños 103 00:04:11,370 --> 00:04:13,230 a pagar por la comodidad. 104 00:04:13,230 --> 00:04:17,519 Pero en la alta tecnología y de alta velocidad aplicaciones militares y programa espacial, 105 00:04:17,519 --> 00:04:22,130 el problema más pequeño posible magnificarse en el desastre. 106 00:04:22,130 --> 00:04:27,750 El 4 de junio de 1996, los científicos prepararon para lanzar un cohete Ariane 5 no tripulado. 107 00:04:27,750 --> 00:04:29,890 Llevaba científica satélites diseñados 108 00:04:29,890 --> 00:04:33,030 establecer con precisión cómo el Interactúa del campo magnético de la Tierra 109 00:04:33,030 --> 00:04:35,600 con vientos solares. 110 00:04:35,600 --> 00:04:37,930 El cohete fue construido para la Agencia Espacial Europea 111 00:04:37,930 --> 00:04:41,620 y despegó de su instalación en la costa de la Guayana Francesa. 112 00:04:41,620 --> 00:04:44,924 >> -Y Unos 30 segundos en el vuelo, primero 113 00:04:44,924 --> 00:04:46,340 algo notado iba mal. 114 00:04:46,340 --> 00:04:49,280 Que las boquillas se giratorio de una manera que realmente no debería. 115 00:04:49,280 --> 00:04:53,042 Alrededor de 40 segundos de vuelo, claramente el vehículo estaba en problemas, 116 00:04:53,042 --> 00:04:55,250 y eso es cuando hicieron la decisión de destruirlo. 117 00:04:55,250 --> 00:04:58,970 Un oficial de seguridad Serie compuesta enormes tripas presiona el botón, 118 00:04:58,970 --> 00:05:03,940 explotó el cohete antes de que pudiera convertirse en un peligro para la seguridad pública. 119 00:05:03,940 --> 00:05:06,600 >> -Esta Era la doncella viaje del Ariane 5, 120 00:05:06,600 --> 00:05:09,270 y su destrucción se llevó lugar debido a un defecto 121 00:05:09,270 --> 00:05:10,992 integrado en el software del cohete. 122 00:05:10,992 --> 00:05:12,700 -El Problema de la Ariane fue que no 123 00:05:12,700 --> 00:05:15,370 era un número que requiere 64 bits para expresar, 124 00:05:15,370 --> 00:05:18,150 y él quería convertir a un número de 16 bits. 125 00:05:18,150 --> 00:05:21,160 Asumieron que el número Nunca iba a ser muy grande, 126 00:05:21,160 --> 00:05:25,020 que la mayoría de esos dígitos en el número de 64 bits eran de 0. 127 00:05:25,020 --> 00:05:26,310 Ellos estaban equivocados. 128 00:05:26,310 --> 00:05:28,680 >> -La Incapacidad de un solo programa de software para aceptar 129 00:05:28,680 --> 00:05:32,820 el tipo de número generado por otro estaba en la raíz de la falla. 130 00:05:32,820 --> 00:05:37,190 El desarrollo de software se había convertido en un muy costoso parte de la nueva tecnología. 131 00:05:37,190 --> 00:05:40,760 El Ariane 4 cohete había sido muy éxito, por lo que gran parte del software 132 00:05:40,760 --> 00:05:43,990 creado para ella era también utilizado en el Ariane 5. 133 00:05:43,990 --> 00:05:49,750 >> -El Problema básico era que el Ariane 5 era más rápido, más rápido acelerado. 134 00:05:49,750 --> 00:05:53,000 Y el software no tenía representaron para eso. 135 00:05:53,000 --> 00:05:56,330 >> -La Destrucción del cohete fue un gran desastre financiero, 136 00:05:56,330 --> 00:05:59,670 todo se debe a un error de software minutos. 137 00:05:59,670 --> 00:06:01,990 Pero este no fue el primero problemas de conversión de datos de tiempo 138 00:06:01,990 --> 00:06:05,310 había plagado la tecnología moderna de cohetes. 139 00:06:05,310 --> 00:06:08,300 >> -En 1991, con el inicio de la primera guerra del Golfo, 140 00:06:08,300 --> 00:06:10,650 el misil Patriot experimentado una clase similar 141 00:06:10,650 --> 00:06:12,650 problema de la conversión de número. 142 00:06:12,650 --> 00:06:15,620 Como resultado, 28 personas, 28 soldados estadounidenses 143 00:06:15,620 --> 00:06:18,440 murieron y alrededor Otras 100 resultaron heridas, 144 00:06:18,440 --> 00:06:21,900 cuando el Patriot, que se suponía para proteger contra scuds entrantes, 145 00:06:21,900 --> 00:06:24,630 dejado de disparar un misil. 146 00:06:24,630 --> 00:06:29,440 >> -Cuando Irak invadió Kuwait y América lanzado Tormenta del Desierto a principios de 1991, 147 00:06:29,440 --> 00:06:33,800 Baterías de misiles Patriot fueron desplegados para proteger a Arabia Saudita e Israel 148 00:06:33,800 --> 00:06:37,000 de los ataques iraquíes misiles Scud. 149 00:06:37,000 --> 00:06:40,610 El Patriot es un estadounidense, de mediano alcance tierra-aire del sistema 150 00:06:40,610 --> 00:06:43,010 fabricado por la empresa Raytheon. 151 00:06:43,010 --> 00:06:49,080 >> -El Tamaño del interceptor Patriota, sí, se trata de, aproximadamente 20 pies de largo. 152 00:06:49,080 --> 00:06:51,250 Y pesa alrededor de 2,000 libras. 153 00:06:51,250 --> 00:06:55,195 Y lleva una ojiva de sobre-- Creo que es más o menos 150 libras. 154 00:06:55,195 --> 00:06:59,500 Y la ojiva, en sí, es un potente explosivo, 155 00:06:59,500 --> 00:07:02,570 que tiene fragmentos de alrededor de él. 156 00:07:02,570 --> 00:07:06,890 La carcasa de la ojiva es diseñado para actuar como perdigones. 157 00:07:06,890 --> 00:07:09,130 >> -Los Misiles son llevado, 4 por contenedor, 158 00:07:09,130 --> 00:07:12,080 y son transportados por un semi-remolque. 159 00:07:12,080 --> 00:07:19,100 >> -El Sistema de defensa antimisil Patriot se remonta por lo menos 20 años. 160 00:07:19,100 --> 00:07:22,320 Fue diseñado originalmente como un misil de defensa aérea 161 00:07:22,320 --> 00:07:24,180 para derribar aviones enemigos. 162 00:07:24,180 --> 00:07:27,860 En la primera guerra del Golfo, cuando la guerra llegó, 163 00:07:27,860 --> 00:07:32,745 el Ejército quería utilizarlo para derribar misiles Scud, no aeroplanos. 164 00:07:32,745 --> 00:07:36,150 La Fuerza iraquí no era tanto de un problema, 165 00:07:36,150 --> 00:07:39,110 pero el Ejército estaba preocupado acerca scuds. 166 00:07:39,110 --> 00:07:42,340 Y por lo que trataron de actualizar el Patriot. 167 00:07:42,340 --> 00:07:44,760 >> -Intercepting Un enemigo misil que viaja a mach de cinco 168 00:07:44,760 --> 00:07:47,250 que iba a ser un reto suficiente. 169 00:07:47,250 --> 00:07:50,000 Pero cuando el Patriot fue trasladado de urgencia en servicio, 170 00:07:50,000 --> 00:07:54,030 el Ejército no estaba al tanto de un Modificación iraquí que hizo 171 00:07:54,030 --> 00:07:56,840 sus scuds casi imposible de golpear. 172 00:07:56,840 --> 00:08:01,020 >> -¿Qué Pasó, es que los scuds fueron entrando, eran inestables, 173 00:08:01,020 --> 00:08:02,310 fueron desplazamiento. 174 00:08:02,310 --> 00:08:05,140 La razón de esto, era que los iraquíes, con el fin 175 00:08:05,140 --> 00:08:09,450 para llegar a 600 kilómetros de una gama de misiles 300 kilometros, 176 00:08:09,450 --> 00:08:12,930 llevó el peso de la ojiva delantera y la ojiva hecho más ligero. 177 00:08:12,930 --> 00:08:17,710 Así que ahora, el patriota de tratar de llegar en el scud, y la mayoría de las veces, 178 00:08:17,710 --> 00:08:21,700 la abrumadora mayoría de la tiempo, sería simplemente volar por el scud. 179 00:08:21,700 --> 00:08:25,700 >> -Una Vez que los operadores del sistema Patriot dio cuenta de la Patriot no alcanzó su objetivo, 180 00:08:25,700 --> 00:08:29,790 detonaron ojiva del Patriota, para evitar posibles bajas si 181 00:08:29,790 --> 00:08:32,380 se dejó caer al suelo. 182 00:08:32,380 --> 00:08:36,340 >> -Eso Fue lo que vieron a la mayoría de la gente, esas grandes bolas de fuego en el cielo, 183 00:08:36,340 --> 00:08:41,289 e incomprendido como intercepciones de ojivas Scud. 184 00:08:41,289 --> 00:08:43,590 Aunque en la noche cielos, Patriotas apareció 185 00:08:43,590 --> 00:08:47,020 para ser éxito destruyendo scuds, en Dhahran, 186 00:08:47,020 --> 00:08:49,730 no podía haber error sobre su desempeño. 187 00:08:49,730 --> 00:08:53,990 Allí, sistema de radar de la Patriot perdido el rastro de un Scud entrante, 188 00:08:53,990 --> 00:08:56,650 y nunca puesto en marcha, debido a un defecto de software. 189 00:08:56,650 --> 00:08:59,650 190 00:08:59,650 --> 00:09:04,100 Fueron los israelíes que primero descubrió que cuanto más tiempo el sistema estaba en marcha, 191 00:09:04,100 --> 00:09:07,510 cuanto mayor es la discrepancia de tiempo se convirtió, debido a un reloj incrustado 192 00:09:07,510 --> 00:09:09,490 en el ordenador del sistema. 193 00:09:09,490 --> 00:09:12,670 >> -Acerca De 2 semanas antes la tragedia en Dhahran, 194 00:09:12,670 --> 00:09:15,010 los israelíes informaron a el Departamento de Defensa, 195 00:09:15,010 --> 00:09:17,940 que el sistema estaba perdiendo el tiempo, que después de aproximadamente 8 horas de funcionamiento, 196 00:09:17,940 --> 00:09:21,410 se dieron cuenta de que el sistema era que se vea con menos precisa. 197 00:09:21,410 --> 00:09:25,290 El Departamento de Defensa respondió contando todas las baterías Patriot 198 00:09:25,290 --> 00:09:28,070 para no dejar los sistemas durante mucho tiempo. 199 00:09:28,070 --> 00:09:29,960 Nunca dijeron lo que era mucho tiempo. 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 Nadie sabía. 204 00:09:33,734 --> 00:09:35,650 -La Batería Patriot destinado en el cuartel 205 00:09:35,650 --> 00:09:40,410 en Dhahran, y su deficiente interna reloj, había estado en más de 100 horas 206 00:09:40,410 --> 00:09:43,041 en la noche del 25 de febrero. 207 00:09:43,041 --> 00:09:47,416 >> -Es Rastreados tiempo con una precisión de aproximadamente 1/10 de un segundo. 208 00:09:47,416 --> 00:09:49,290 Ahora 1/10 de segundo es un número interesante 209 00:09:49,290 --> 00:09:52,700 porque no puede ser expresado en binario, exactamente. 210 00:09:52,700 --> 00:09:54,820 Lo que significa, no puede expresarse, exactamente, 211 00:09:54,820 --> 00:09:57,420 en cualquier computadora digital moderna. 212 00:09:57,420 --> 00:10:01,460 Es difícil de creer, pero utilizar esto como un ejemplo. 213 00:10:01,460 --> 00:10:03,520 Tomemos el número, la tercera. 214 00:10:03,520 --> 00:10:07,110 1/3 no puede ser expresado en decimal, exactamente. 215 00:10:07,110 --> 00:10:11,490 01/03 es 0.333 pasando para el infinito. 216 00:10:11,490 --> 00:10:15,486 No hay manera de hacer eso, con precisión absoluta, en decimal. 217 00:10:15,486 --> 00:10:18,360 Ese es exactamente el mismo tipo de problema que sucedió en el Patriot. 218 00:10:18,360 --> 00:10:22,510 Cuanto más tiempo el sistema funcionó, el peor se convirtió en el error de tiempo. 219 00:10:22,510 --> 00:10:28,420 >> -Después De 100 horas de funcionamiento, el error en el tiempo sólo alrededor de 1/3 de segundo era. 220 00:10:28,420 --> 00:10:31,830 Pero en términos de la orientación de un misil que viaja a Mach 5, 221 00:10:31,830 --> 00:10:35,890 que dio lugar a un seguimiento de error de más de 600 metros. 222 00:10:35,890 --> 00:10:38,970 Sería un error fatal para los soldados en Dhahran. 223 00:10:38,970 --> 00:10:45,035 >> -¿Qué Pasó, es el lanzamiento de un Scud era detectado por los satélites de alerta temprana, 224 00:10:45,035 --> 00:10:48,930 y nuevos que el Scud era viniendo en su dirección general. 225 00:10:48,930 --> 00:10:51,170 Ellos no sabían de dónde venía. 226 00:10:51,170 --> 00:10:53,990 >> -Fue Ahora hasta el radar componente del sistema Patriot, 227 00:10:53,990 --> 00:10:58,520 defensa de Dhahran, para localizar y mantener pista del misil enemigo entrante. 228 00:10:58,520 --> 00:10:59,690 >> -El Radar era muy inteligente. 229 00:10:59,690 --> 00:11:01,710 En realidad, sería realizar un seguimiento la posición del Scud 230 00:11:01,710 --> 00:11:04,040 y luego predecir dónde probablemente sería, 231 00:11:04,040 --> 00:11:06,140 la próxima vez, la radar envía un pulso a cabo. 232 00:11:06,140 --> 00:11:07,660 Eso se llamaba a la puerta rango. 233 00:11:07,660 --> 00:11:11,870 >> -Entonces, Una vez que el Patriot decide suficiente tiempo tiene 234 00:11:11,870 --> 00:11:16,280 pasó a volver atrás y comprobar la siguiente ubicación para este objeto detectado, 235 00:11:16,280 --> 00:11:17,280 que se remonta. 236 00:11:17,280 --> 00:11:21,690 Así que cuando se volvió al mal lugar, a continuación, no ve ningún objeto 237 00:11:21,690 --> 00:11:25,230 y decide que no había objeto, se trataba de una falsa detección, 238 00:11:25,230 --> 00:11:26,650 y deja caer la pista. 239 00:11:26,650 --> 00:11:29,690 El Scud entrante desapareció desde la pantalla de radar, 240 00:11:29,690 --> 00:11:32,670 y segundos más tarde, se se estrelló contra el cuartel. 241 00:11:32,670 --> 00:11:38,100 El Scud mató a 28 y fue el último se dispararon durante la primera guerra del Golfo. 242 00:11:38,100 --> 00:11:43,460 Trágicamente, el software actualizado llegado a Dhahran el día siguiente. 243 00:11:43,460 --> 00:11:46,150 La falla de software tenía estado fijo, cierre 244 00:11:46,150 --> 00:11:48,940 un capítulo en el atribulado historia de los misiles Patriot. 245 00:11:48,940 --> 00:11:50,220 >> [FIN DE REPRODUCCIÓN] 246 00:11:50,220 --> 00:11:54,340 >> DAVID J MALAN: Así que vamos a echar un vistazo a algunas limitaciones similares en sólo un poco. 247 00:11:54,340 --> 00:11:58,470 Pero primero, vamos a transición a unos pocos FYI es. 248 00:11:58,470 --> 00:12:01,575 Así uno-- este fin de semana, hay será secciones súper, 249 00:12:01,575 --> 00:12:04,200 que están destinados a suplantar secciones regulares, que 250 00:12:04,200 --> 00:12:05,460 pondrá en marcha una semana de ahí. 251 00:12:05,460 --> 00:12:08,204 Echa un vistazo a la página web del CS50 para obtener más información al respecto. 252 00:12:08,204 --> 00:12:11,120 También serán filmados y streaming vivir para aquellos que no puedan asistir. 253 00:12:11,120 --> 00:12:12,980 Boletín de problemas 1 está en el la página web del curso ya, 254 00:12:12,980 --> 00:12:15,105 y vamos a echar un vistazo a que en tan sólo un poco. 255 00:12:15,105 --> 00:12:18,350 Y las horas de oficina también se llevarán a colocar este lunes a jueves. 256 00:12:18,350 --> 00:12:20,960 >> Así que este era el más canónica programa vimos por última vez. 257 00:12:20,960 --> 00:12:23,590 Es como el más simple programa que puede escribir en C, 258 00:12:23,590 --> 00:12:25,250 e incluso eso es un poco de una afirmación audaz. 259 00:12:25,250 --> 00:12:25,750 ¿Correcto? 260 00:12:25,750 --> 00:12:28,070 Porque hay un montón de aparente complejidad a esto. 261 00:12:28,070 --> 00:12:30,445 Así que vamos a echar un vistazo rápido a lo que algunos de estos elementos 262 00:12:30,445 --> 00:12:33,080 eran y luego tratar de proporcionar un modelo mental de cómo 263 00:12:33,080 --> 00:12:35,710 éstas más simple de programas Trabajamos, y luego vamos a empezar 264 00:12:35,710 --> 00:12:38,050 ver las cosas cada vez más complejo. 265 00:12:38,050 --> 00:12:41,280 Así que esta línea de aquí, ha destacado hoy, en amarillo, lo dijimos, la última vez, 266 00:12:41,280 --> 00:12:43,200 que este hace por nosotros? 267 00:12:43,200 --> 00:12:45,220 ¿Cuál es el propósito al que sirve? 268 00:12:45,220 --> 00:12:46,984 Cualquier persona de más atrás? 269 00:12:46,984 --> 00:12:47,483 Sí. 270 00:12:47,483 --> 00:12:48,649 >> MIEMBRO DE LA AUDIENCIA: [inaudible] 271 00:12:48,649 --> 00:12:50,871 272 00:12:50,871 --> 00:12:51,704 DAVID J MALAN: Good. 273 00:12:51,704 --> 00:12:53,537 Por lo que le da acceso a los comandos, o dejar de 274 00:12:53,537 --> 00:12:56,750 llamar a funciones, que alguien más escribió, que se declaró, 275 00:12:56,750 --> 00:12:58,350 por así decirlo, en algún otro archivo. 276 00:12:58,350 --> 00:13:02,370 Así que vamos a ver exactamente lo que un archivo .h es frente a un archivo .c, con el tiempo. 277 00:13:02,370 --> 00:13:04,710 Pero, por ahora, sólo sé printf que, por ejemplo, 278 00:13:04,710 --> 00:13:08,370 es una de las funciones que han sido declarada en algún otro archivo, en alguna parte 279 00:13:08,370 --> 00:13:12,930 más en el disco duro de la nube que nos permite acceder a printf y usamos 280 00:13:12,930 --> 00:13:15,240 sin tener que reinventar que rueda a nosotros mismos. 281 00:13:15,240 --> 00:13:16,930 Mientras tanto, el principal. 282 00:13:16,930 --> 00:13:19,690 ¿Cuál fue el análogo de la principal, la semana pasada? 283 00:13:19,690 --> 00:13:20,190 Sí. 284 00:13:20,190 --> 00:13:21,460 >> MIEMBRO DE LA AUDIENCIA: Bandera verde se hace clic. 285 00:13:21,460 --> 00:13:21,740 >> DAVID J MALAN: Sí. 286 00:13:21,740 --> 00:13:23,490 Scratch, cuando se hace clic en bandera verde. 287 00:13:23,490 --> 00:13:25,560 Es como la pieza del rompecabezas que patea las cosas. 288 00:13:25,560 --> 00:13:28,306 Y así mismo modo, hizo el mundo decidió hace unos años que en C, 289 00:13:28,306 --> 00:13:30,930 y un montón de otras lenguas, si quieres escribir un programa, 290 00:13:30,930 --> 00:13:33,410 su primera función ha de ser llamado, principal. 291 00:13:33,410 --> 00:13:34,641 Y tiene que tener este aspecto. 292 00:13:34,641 --> 00:13:36,640 Pero vamos a volver, otra vez, a lo que, int, 293 00:13:36,640 --> 00:13:38,690 y, nula, significa en ese contexto. 294 00:13:38,690 --> 00:13:42,860 Por ahora, las llaves son amables de igual forma de pieza de puzzle de Scratch 295 00:13:42,860 --> 00:13:45,080 que encapsula un número de líneas. 296 00:13:45,080 --> 00:13:47,070 Y entre en las líneas aquí, es este de aquí. 297 00:13:47,070 --> 00:13:51,610 printf es una función cuyo propósito en la vida es imprimir una cadena con formato. 298 00:13:51,610 --> 00:13:55,010 Y por formateada, quiero decir que puede enchufar en los valores de marcador de posición, 299 00:13:55,010 --> 00:13:58,360 y usted puede especificar el número de decimales puntos, la cantidad de números para imprimir 300 00:13:58,360 --> 00:14:00,040 después de un punto decimal y similares. 301 00:14:00,040 --> 00:14:05,040 Y printf, por supuesto, se necesita un o más argumentos o parámetros, 302 00:14:05,040 --> 00:14:06,770 si no conocido, más simplemente, como entradas. 303 00:14:06,770 --> 00:14:09,230 >> Así printf, como un montón de funciones, toma insumos. 304 00:14:09,230 --> 00:14:12,730 Y esas entradas se abrazaron por los dos paréntesis aquí. 305 00:14:12,730 --> 00:14:15,180 Y dentro de los que es una entrada. 306 00:14:15,180 --> 00:14:18,600 Es una cadena, como lo hemos llamado, que es sólo una secuencia de caracteres, 307 00:14:18,600 --> 00:14:22,310 como una palabra o una frase, o en su conjunto ensayo, incluso, entre comillas dobles. 308 00:14:22,310 --> 00:14:25,712 Y eso es lo que va a influir en el comportamiento de printf porque, por supuesto, 309 00:14:25,712 --> 00:14:27,170 es sólo una función de impresión genérica. 310 00:14:27,170 --> 00:14:29,600 No va a saber lo que para imprimir, a menos que usted le indique. 311 00:14:29,600 --> 00:14:31,000 Y luego, algunas minucias. 312 00:14:31,000 --> 00:14:34,056 Lo que dijimos esta extraña secuencia de símbolos es? 313 00:14:34,056 --> 00:14:34,556 Sí. 314 00:14:34,556 --> 00:14:35,410 >> MIEMBRO DE LA AUDIENCIA: Nueva línea. 315 00:14:35,410 --> 00:14:35,990 >> DAVID J MALAN: Nueva línea. 316 00:14:35,990 --> 00:14:39,340 Así que resulta, que no sólo puede golpear, entrar, cuando estás escribiendo el programa. 317 00:14:39,340 --> 00:14:42,590 En general, el compilador se va a poner un poco confundido en cuanto a lo que te refieres. 318 00:14:42,590 --> 00:14:45,340 Más bien, lo que tienes que literalmente decir, dame una nueva línea aquí. 319 00:14:45,340 --> 00:14:49,506 Y así / n es lo que generalmente llamar a un carácter de escape. 320 00:14:49,506 --> 00:14:50,870 Así que n, para la nueva línea. 321 00:14:50,870 --> 00:14:53,810 Y el compilador sabe que cuando se ve / n, 322 00:14:53,810 --> 00:14:57,420 que en realidad debería inducir a la computadora, en última instancia, o printf, en este caso, 323 00:14:57,420 --> 00:15:00,260 para imprimir un nuevo real línea, como golpear el, entrar, 324 00:15:00,260 --> 00:15:01,480 tecla del teclado. 325 00:15:01,480 --> 00:15:05,620 Y por último, lo que hizo que decimos esta pieza de la sintaxis es para? 326 00:15:05,620 --> 00:15:06,591 ¿Qué representa? 327 00:15:06,591 --> 00:15:07,090 Sí. 328 00:15:07,090 --> 00:15:07,490 >> MIEMBRO DE LA AUDIENCIA: [inaudible] 329 00:15:07,490 --> 00:15:08,660 >> DAVID J MALAN: Es sólo el final de la línea. 330 00:15:08,660 --> 00:15:09,909 Es el final de la declaración. 331 00:15:09,909 --> 00:15:11,890 Y damos cuenta de que no lo hacemos ponerlos en todas partes. 332 00:15:11,890 --> 00:15:13,900 Desde luego, no los pusimos en los extremos de cada línea. 333 00:15:13,900 --> 00:15:16,680 Por ejemplo, no hay ninguno en el primera línea, no hay nada en la línea 334 00:15:16,680 --> 00:15:18,680 con, principal, no hay ninguno después de las llaves, 335 00:15:18,680 --> 00:15:21,740 pero usted comenzará a ver y obtener familiarizarse con el lugar donde se llama a. 336 00:15:21,740 --> 00:15:26,014 Y es casi siempre después de una función llamar o una declaración, un poco de acción 337 00:15:26,014 --> 00:15:27,180 que en realidad estás tomando. 338 00:15:27,180 --> 00:15:29,520 >> Y saber ahora, especialmente si entre los menos cómodo, 339 00:15:29,520 --> 00:15:32,540 estos son el tipo de cosas estúpidas que usted va a terminar golpeando accidentalmente 340 00:15:32,540 --> 00:15:33,873 su cabeza contra la pared otra vez. 341 00:15:33,873 --> 00:15:36,107 Porque podrás lógicamente confianza en algunos problemas 342 00:15:36,107 --> 00:15:38,440 has resuelto para un problema conjunto, y la maldita cosa simplemente 343 00:15:38,440 --> 00:15:40,187 no compilará o incluso correr. 344 00:15:40,187 --> 00:15:43,270 Y tan a menudo, desde el principio, que va a deberse a que se ha perdido un paréntesis, 345 00:15:43,270 --> 00:15:44,455 o se ha perdido un punto y coma. 346 00:15:44,455 --> 00:15:46,547 Y por lo que sólo tener en cuenta de este tipo de cosas, 347 00:15:46,547 --> 00:15:49,380 y tratar de no quedar frustrado por porque lo hace muy rápidamente este 348 00:15:49,380 --> 00:15:50,640 convertido en viejo sombrero. 349 00:15:50,640 --> 00:15:53,910 Pero es muy fácil de conseguir frustrado desde el principio, como resultado. 350 00:15:53,910 --> 00:15:57,020 >> Así que ahora, vamos a echar un vistazo a cómo esta línea es en realidad trabajando 351 00:15:57,020 --> 00:15:59,170 y luego mirar un poco una más complicado. 352 00:15:59,170 --> 00:16:02,017 Así que tenemos por aquí, la capacidad de dibujar en la pantalla. 353 00:16:02,017 --> 00:16:04,100 Y supongamos que este es mi pantalla de ordenador, 354 00:16:04,100 --> 00:16:08,589 pero estoy escribiendo la, hola programa, y no he implementado, printf. 355 00:16:08,589 --> 00:16:10,130 Alguien más ha puesto en marcha, printf. 356 00:16:10,130 --> 00:16:12,420 ¿Quién quiere reclamar a han puesto en marcha, printf? 357 00:16:12,420 --> 00:16:12,920 Si puede? 358 00:16:12,920 --> 00:16:13,830 Muy bien, ¿cuál es tu nombre? 359 00:16:13,830 --> 00:16:14,155 >> ESTUDIANTE 1: [? Copal. ?] 360 00:16:14,155 --> 00:16:15,529 >> DAVID J MALAN: Copal, vamos para arriba. 361 00:16:15,529 --> 00:16:16,430 Vamos arriba. 362 00:16:16,430 --> 00:16:17,070 Correcto. 363 00:16:17,070 --> 00:16:22,260 Así que tenemos, aquí, algunas etiquetas de nombre, ya que vamos a hacer un pequeño juego de este. 364 00:16:22,260 --> 00:16:26,270 Y nosotros te llamamos, printf. 365 00:16:26,270 --> 00:16:30,170 Y si quieres venir aquí, lo que acabo he dibujado en la pantalla, 366 00:16:30,170 --> 00:16:32,340 es, sencillamente, no soy yo, esto. 367 00:16:32,340 --> 00:16:35,550 >> Muy bien, así que, hola mi nombre es, printf, si desea poner eso en. 368 00:16:35,550 --> 00:16:35,740 Correcto. 369 00:16:35,740 --> 00:16:37,360 Y si se puede ir soporte por la pantalla de la computadora 370 00:16:37,360 --> 00:16:39,730 como si usted es la función que llegó con este sistema informático. 371 00:16:39,730 --> 00:16:42,063 Y su propósito en la vida es imprimir realmente algo. 372 00:16:42,063 --> 00:16:44,560 Pero al igual que el programa que sólo tenía en la pantalla, aquí, 373 00:16:44,560 --> 00:16:47,060 vamos a tener que en realidad le dará alguna entrada. 374 00:16:47,060 --> 00:16:51,810 >> Y así, si mi entrada, aquí, es al parecer, lo que se pasa a printf, 375 00:16:51,810 --> 00:16:53,730 vamos a tipo de burlan de ella de esta manera. 376 00:16:53,730 --> 00:16:58,720 Voy a escribir literalmente en un pedazo de papel, "hola, mundo" 377 00:16:58,720 --> 00:17:03,020 barra invertida N. Y para que quede claro, lo que Yo sólo he dibujado en este pedazo de papel, 378 00:17:03,020 --> 00:17:04,020 se parece a esto. 379 00:17:04,020 --> 00:17:08,730 Así que cuando ejecuto este programa, y ​​esto línea amarilla de código es ejecutado, 380 00:17:08,730 --> 00:17:12,970 es como si yo, el programa hola, estoy entregando alguna entrada fuera a una función 381 00:17:12,970 --> 00:17:13,970 que alguien más escribió. 382 00:17:13,970 --> 00:17:16,595 >> Y si, con el dedo, podía en realidad, con el dedo, 383 00:17:16,595 --> 00:17:21,520 dibujar en la pantalla lo que sea es que ha estado entregado, 384 00:17:21,520 --> 00:17:27,465 el efecto, en última instancia, es ver exactamente que, en la pantalla. 385 00:17:27,465 --> 00:17:29,140 Y un caso esquina poco aquí. 386 00:17:29,140 --> 00:17:31,540 Y bueno, no hay que ver la, nueva línea, en este punto. 387 00:17:31,540 --> 00:17:33,900 Sería incorrecto para usted llamar explícitamente la nueva línea. 388 00:17:33,900 --> 00:17:36,810 Pero si seguimos escribiendo palabras en la pantalla, que terminaría por debajo de eso. 389 00:17:36,810 --> 00:17:39,560 >> Así que muchas gracias, pero se adhieren por aquí por sólo un momento. 390 00:17:39,560 --> 00:17:42,860 Ahora necesitamos otro voluntario, si pudiéramos, 391 00:17:42,860 --> 00:17:46,830 eso va a tener que jugar el papel de-- Es únicas personas en la orquesta 392 00:17:46,830 --> 00:17:47,355 Ahora mismo. 393 00:17:47,355 --> 00:17:47,980 Cómo sobre-- Aceptar. 394 00:17:47,980 --> 00:17:48,480 Aquí. 395 00:17:48,480 --> 00:17:49,180 Vamos arriba. 396 00:17:49,180 --> 00:17:49,955 ¿Cómo te llamas? 397 00:17:49,955 --> 00:17:50,922 >> ESTUDIANTE 2: [? Ivay. ?] 398 00:17:50,922 --> 00:17:51,796 DAVID J MALAN: Lo siento? 399 00:17:51,796 --> 00:17:52,990 ESTUDIANTE 2: [? Ivay. ?] 400 00:17:52,990 --> 00:17:55,320 DAVID J MALAN: Ethan, vamos para arriba. 401 00:17:55,320 --> 00:17:55,820 ¿No? 402 00:17:55,820 --> 00:17:58,390 ¿Obtuve que mal, incluso después de que usted lo ha dicho dos veces? 403 00:17:58,390 --> 00:17:58,890 Vamos arriba. 404 00:17:58,890 --> 00:18:00,030 Es difícil escuchar aquí. 405 00:18:00,030 --> 00:18:05,240 406 00:18:05,240 --> 00:18:05,740 OK. 407 00:18:05,740 --> 00:18:07,190 Y lo siento, ¿cuál es tu nombre? 408 00:18:07,190 --> 00:18:07,680 >> ESTUDIANTE 2: [? Ivay. ?] 409 00:18:07,680 --> 00:18:08,790 >> [? DAVID J MALAN: Ivay. ?] OK. 410 00:18:08,790 --> 00:18:10,430 Por ahora, si no lo hace mente, usted está GetString. 411 00:18:10,430 --> 00:18:11,013 >> ESTUDIANTE 2: OK. 412 00:18:11,013 --> 00:18:11,797 Fresco. 413 00:18:11,797 --> 00:18:14,630 DAVID J MALAN: Así que si usted desea a estar aquí por un momento, 414 00:18:14,630 --> 00:18:17,100 vamos a echar un vistazo a un poco programa más complejo, que 415 00:18:17,100 --> 00:18:18,670 ahora cuenta con tres líneas de código. 416 00:18:18,670 --> 00:18:24,080 Así que tenemos, uno, diga su nombre utilizando printf; dos, una llamada a GetString, 417 00:18:24,080 --> 00:18:28,060 seguido de una asignación a una variable llamada, cadena s, o llama s; 418 00:18:28,060 --> 00:18:31,260 y luego otra llamada a, printf, pero esta vez con dos entradas. 419 00:18:31,260 --> 00:18:33,646 >> Estado Así que ya hemos hecho su nombre, o mejor dicho, tenemos 420 00:18:33,646 --> 00:18:34,770 ha hecho una llamada printf. 421 00:18:34,770 --> 00:18:38,960 Así que voy a escribir, diga su nombre. 422 00:18:38,960 --> 00:18:42,089 Y así, lo que voy a pasar, printf, en un momento, 423 00:18:42,089 --> 00:18:43,005 es, sencillamente, esto. 424 00:18:43,005 --> 00:18:47,760 Así que si quieres seguir adelante y sacar esta en la pantalla, esa es tu entrada ahora. 425 00:18:47,760 --> 00:18:48,260 Correcto. 426 00:18:48,260 --> 00:18:51,160 Y olvídate de cuerdas, ahora tenemos nuestra propia línea de código aquí. 427 00:18:51,160 --> 00:18:54,470 Así que en, GetString, necesitamos llamar realidad, GetString. 428 00:18:54,470 --> 00:18:57,920 Así que su propósito en la vida es simplemente caminar salir a la orquesta, si pudiera, 429 00:18:57,920 --> 00:18:58,980 y obtener el nombre de alguien. 430 00:18:58,980 --> 00:19:00,860 Pero vamos a darle algo que la puso. 431 00:19:00,860 --> 00:19:02,908 Si quieres ir adelante y obtener una cadena, 432 00:19:02,908 --> 00:19:05,241 obtener el nombre de alguien en esa pedazo de papel, si pudiera. 433 00:19:05,241 --> 00:19:12,940 434 00:19:12,940 --> 00:19:13,530 >> Correcto. 435 00:19:13,530 --> 00:19:15,250 Y vamos a ver, en un momento, cuyo nombre estamos recibiendo. 436 00:19:15,250 --> 00:19:17,630 Mientras tanto, lo que voy a tiene listo, es una hoja en blanco 437 00:19:17,630 --> 00:19:21,340 de papel, en el que, me voy para almacenar cualquier valor que se 438 00:19:21,340 --> 00:19:25,752 es que GetString está volviendo a mí, Yo, siendo una variable de cadena llamada, s. 439 00:19:25,752 --> 00:19:26,252 Correcto. 440 00:19:26,252 --> 00:19:27,293 Entonces, ¿qué tenemos aquí? 441 00:19:27,293 --> 00:19:27,950 Nik. 442 00:19:27,950 --> 00:19:28,450 Correcto. 443 00:19:28,450 --> 00:19:30,910 Así que tenemos el nombre de Nik aquí. 444 00:19:30,910 --> 00:19:33,750 Así que esto es lo que, literalmente, se ha vuelto 445 00:19:33,750 --> 00:19:35,810 a mí, por así decirlo, por GetString. 446 00:19:35,810 --> 00:19:38,720 >> Yo, ahora, voy a ejecutar el lado izquierdo 447 00:19:38,720 --> 00:19:43,440 de esa expresión, en el que simplemente copiar hacia abajo, a los efectos de la actualidad, Nik. 448 00:19:43,440 --> 00:19:46,470 Así que ahora, tengo una variable llamada, s, almacenar el nombre de Nik. 449 00:19:46,470 --> 00:19:49,520 Ya he entregué printf, un argumento anterior. 450 00:19:49,520 --> 00:19:52,800 Pero en nuestra tercera y última línea de código, que en realidad tiene que printf mano 451 00:19:52,800 --> 00:19:58,500 algo un poco diferente-- "hola,% s," barra invertida n. 452 00:19:58,500 --> 00:20:01,510 >> Y así, la última línea me voy a send-- lo último que estoy 453 00:20:01,510 --> 00:20:03,060 va a escribir ahora, es esto. 454 00:20:03,060 --> 00:20:06,310 Así que las dos líneas de código, o en lugar de la última línea de código, 455 00:20:06,310 --> 00:20:10,690 llamadas para dos inputs-- uno, este, y dos, esto. 456 00:20:10,690 --> 00:20:13,330 Así que si nuestra función printf Ahora puede tomar estos como entrada, 457 00:20:13,330 --> 00:20:16,000 déjame borrar la pantalla para usted. 458 00:20:16,000 --> 00:20:17,250 En realidad no, usted puede seguir adelante. 459 00:20:17,250 --> 00:20:19,333 Dejaremos para arriba, ya que está en el mismo programa. 460 00:20:19,333 --> 00:20:21,760 461 00:20:21,760 --> 00:20:27,380 Debemos ver, hola, Nik. 462 00:20:27,380 --> 00:20:27,880 Correcto. 463 00:20:27,880 --> 00:20:29,670 Así que este era un buen número aros para saltar a través, simplemente 464 00:20:29,670 --> 00:20:31,620 escribir, indique su nombrar y, hola, Nik. 465 00:20:31,620 --> 00:20:37,210 Pero esta simple idea de paso de mensajes, de paso de entrada y de salida de recepción, 466 00:20:37,210 --> 00:20:40,430 es exactamente el modelo que vamos a tener incluso para las funciones más complejas. 467 00:20:40,430 --> 00:20:41,804 Así que muchas gracias a los dos. 468 00:20:41,804 --> 00:20:43,730 Tenemos un estrés encantadora bola aquí para usted. 469 00:20:43,730 --> 00:20:48,890 Y gracias a nuestro GetString y voluntarios printf igual. 470 00:20:48,890 --> 00:20:49,551 Gracias. 471 00:20:49,551 --> 00:20:50,050 Correcto. 472 00:20:50,050 --> 00:20:50,966 Gracias a los dos. 473 00:20:50,966 --> 00:20:56,640 474 00:20:56,640 --> 00:21:00,430 >> Así que hemos estado hablando hasta el momento, sobre todo acerca de las cadenas. 475 00:21:00,430 --> 00:21:06,550 Y resulta que C puede de hecho entender algunos tipos de datos diferentes. 476 00:21:06,550 --> 00:21:08,860 De hecho, vamos a tomar un vistazo a estas aquí. 477 00:21:08,860 --> 00:21:12,490 Así C, y una gran cantidad de idiomas, entender las cosas llamados caracteres. 478 00:21:12,490 --> 00:21:16,852 Un char es generalmente una solo byte, u ocho bits. 479 00:21:16,852 --> 00:21:19,810 Y representa un único carácter, como la letra A, o la capital 480 00:21:19,810 --> 00:21:21,990 letra A, o la letra minúscula A, o un signo de exclamación, 481 00:21:21,990 --> 00:21:25,440 o cualquier carácter que usted puede escribir en el teclado, ya veces incluso más. 482 00:21:25,440 --> 00:21:26,795 También llegan a ver carrozas. 483 00:21:26,795 --> 00:21:31,160 Un flotador es, por lo general, un 32-bit de valor, o cuatro bytes 484 00:21:31,160 --> 00:21:33,660 porque, de nuevo, es un byte de ocho bits. 485 00:21:33,660 --> 00:21:36,675 >> Así que un flotador es un valor de punto flotante, algo con un punto decimal. 486 00:21:36,675 --> 00:21:38,550 Y de hecho, eso es lo que la película estaba hablando 487 00:21:38,550 --> 00:21:42,240 sobre cuando hablaban acerca flotante valores de puntos, algunos número fijo de bits 488 00:21:42,240 --> 00:21:43,940 se utiliza para representar un número real. 489 00:21:43,940 --> 00:21:45,740 Pero también hay cosas llamadas dobles. 490 00:21:45,740 --> 00:21:47,860 Estos existen en Java, si usted ha tomado APCS, 491 00:21:47,860 --> 00:21:51,540 y un doble, como su nombre por suerte sugiere, es dos veces tan grande como un flotador. 492 00:21:51,540 --> 00:21:54,540 Todavía es un número real, que sólo tiene más bits 493 00:21:54,540 --> 00:21:58,390 con la que ser cada vez más precisa, o para almacenar un número aún mayor. 494 00:21:58,390 --> 00:21:58,890 int es fácil. 495 00:21:58,890 --> 00:22:00,181 Hablamos de que la última vez. 496 00:22:00,181 --> 00:22:01,160 Es sólo un entero. 497 00:22:01,160 --> 00:22:03,980 Y es por lo general 32 bits, o cuatro bytes. 498 00:22:03,980 --> 00:22:07,850 >> Y así, si usted tiene, vamos a ver ahora, 32 bits-- y lo hicimos en la semana 0, 499 00:22:07,850 --> 00:22:10,820 siempre tan briefly-- si usted tiene 32 bits, lo que es el más grande 500 00:22:10,820 --> 00:22:13,580 número que puede representarse como un entero? 501 00:22:13,580 --> 00:22:16,080 ¿Da o toma? 502 00:22:16,080 --> 00:22:18,380 Es como 4 mil millones, y eso es sólo si somos 503 00:22:18,380 --> 00:22:20,690 que representa sólo números positivos. 504 00:22:20,690 --> 00:22:23,930 Si usted tiene 32 bits, y desea representar números negativos, así, 505 00:22:23,930 --> 00:22:27,100 su alcance es, esencialmente, negativo 2 mil millones a positivo 2000000000. 506 00:22:27,100 --> 00:22:29,250 Pero, en general, vamos a empezar a 0 subir a 4 mil millones. 507 00:22:29,250 --> 00:22:32,400 >> Usted no tiene que saber con precisión, pero podemos ver esto, de hecho, si sólo 508 00:22:32,400 --> 00:22:36,400 abrir una pequeña calculadora, aquí. 509 00:22:36,400 --> 00:22:41,070 Yo puedo hacer 2 al 32, y eso es exactamente lo grande, 510 00:22:41,070 --> 00:22:43,190 cuántos valores puede representan, con 32 bits. 511 00:22:43,190 --> 00:22:44,442 Y es más o menos 4 mil millones. 512 00:22:44,442 --> 00:22:46,900 Así que vamos a seguir viendo ese número en unos pocos lugares diferentes. 513 00:22:46,900 --> 00:22:48,890 Pero si usted necesita más tiempo números que eso, 514 00:22:48,890 --> 00:22:51,670 Resulta que hay de algo que se llama un largo tiempo. 515 00:22:51,670 --> 00:22:54,005 Y mucho, mucho es en general de 64 bits, los cuales 516 00:22:54,005 --> 00:22:56,380 significa que es un orden de magnitud incluso más grande que un int. 517 00:22:56,380 --> 00:22:59,510 >> Así que ni siquiera puedo pronunciar el mayor número que puede representar, 518 00:22:59,510 --> 00:23:01,340 pero es notablemente más grande. 519 00:23:01,340 --> 00:23:05,190 Ahora como un aparte, históricamente, si un int es de 32 bits, 520 00:23:05,190 --> 00:23:12,780 y mucho, mucho es de 64 bits, la forma grande es mucho, no hace mucho tiempo? 521 00:23:12,780 --> 00:23:16,500 522 00:23:16,500 --> 00:23:20,330 Se podría pensar que es más largo que un int pero tal vez menos largo de un largo tiempo, 523 00:23:20,330 --> 00:23:21,400 pero en realidad depende. 524 00:23:21,400 --> 00:23:23,400 >> Y así resulta que un solo de las frustraciones también, 525 00:23:23,400 --> 00:23:26,830 con la escritura de código en ciertos sistemas, es que no todos estos tipos de datos 526 00:23:26,830 --> 00:23:28,440 tener valores predeterminados. 527 00:23:28,440 --> 00:23:29,771 A veces es esta cantidad de bits. 528 00:23:29,771 --> 00:23:31,020 A veces es que muchos bits. 529 00:23:31,020 --> 00:23:32,750 Así que usted realmente tiene que saber, a veces, qué hardware 530 00:23:32,750 --> 00:23:34,083 se está ejecutando el software en. 531 00:23:34,083 --> 00:23:36,960 Afortunadamente, otros idiomas y otros tipos de datos que existen actualmente, 532 00:23:36,960 --> 00:23:38,400 permitirá ser más preciso. 533 00:23:38,400 --> 00:23:41,220 Bueno, vimos cuerda, y vimos bool, también, 534 00:23:41,220 --> 00:23:43,960 pero resulta que los que vienen sólo con la biblioteca CS50. 535 00:23:43,960 --> 00:23:46,240 Así que los que no están construidos en C. Aquellos lugar, 536 00:23:46,240 --> 00:23:49,340 llegado en ese archivo llamado CS50.h, que finalmente va a 537 00:23:49,340 --> 00:23:51,831 pelar las capas de. 538 00:23:51,831 --> 00:23:53,830 Pero, por ahora, son sólo tipos de datos adicionales. 539 00:23:53,830 --> 00:23:57,060 Un bool es un verdadero o falso, y un cadena es una secuencia de caracteres, 540 00:23:57,060 --> 00:23:57,970 como una palabra. 541 00:23:57,970 --> 00:24:01,690 Ahora printf, que hemos visto, ha marcadores de posición,% s es uno. 542 00:24:01,690 --> 00:24:05,430 Y es posible que pueda, ahora, inferir de estos otros ejemplos, cómo 543 00:24:05,430 --> 00:24:07,720 usted podría tener un marcador de posición para diferentes tipos de datos. 544 00:24:07,720 --> 00:24:11,150 Por ejemplo, tomar una conjetura, si querido imprimir una sola carbón utilizando 545 00:24:11,150 --> 00:24:15,270 printf, el marcador de posición es probablemente% c. 546 00:24:15,270 --> 00:24:19,650 Y si desea imprimir una entero con el marcador de posición,% i. 547 00:24:19,650 --> 00:24:25,150 % LLD es un valor decimal de largo a largo, pero mucho, mucho, por lo que se asigna a eso. 548 00:24:25,150 --> 00:24:28,640 Y luego% f para flotar valor de punto o de un doble, 549 00:24:28,640 --> 00:24:31,270 así que a veces que están re-utilizada en diferentes contextos. 550 00:24:31,270 --> 00:24:33,350 Así que vamos a ver y utilizar algunos de los mayores de tiempo. 551 00:24:33,350 --> 00:24:36,420 Y printf y otras funciones también secuencias de escape de apoyo de los demás, 552 00:24:36,420 --> 00:24:38,080 y, a veces, estos son necesarios. 553 00:24:38,080 --> 00:24:39,770 Así barra invertida n es una nueva línea. 554 00:24:39,770 --> 00:24:42,886 Backslash t, ¿alguien querer tomar una puñalada? 555 00:24:42,886 --> 00:24:43,760 MIEMBRO DE LA AUDIENCIA: Tab. 556 00:24:43,760 --> 00:24:44,551 DAVID J MALAN: Tab. 557 00:24:44,551 --> 00:24:46,810 Así que si usted realmente quiere para imprimir una ficha, no 558 00:24:46,810 --> 00:24:49,940 un número fijo de espacios sino una real carácter de tabulación, que no alcanzó su, 559 00:24:49,940 --> 00:24:53,490 pestaña, tecla del teclado, en general, que realmente hacen barra invertida t. 560 00:24:53,490 --> 00:24:57,750 Cita doble barra invertida, ¿por qué iba a querer eso? 561 00:24:57,750 --> 00:24:58,250 ¿Correcto? 562 00:24:58,250 --> 00:25:00,417 ¿Por qué no puedo simplemente escriba un comillas dobles en mi teclado? 563 00:25:00,417 --> 00:25:02,124 MIEMBRO DE LA AUDIENCIA: Porque, de lo contrario, es 564 00:25:02,124 --> 00:25:04,830 va a pensar que es el fin de que su impresión [? texto. ?] 565 00:25:04,830 --> 00:25:05,420 >> DAVID J MALAN: Exactamente. 566 00:25:05,420 --> 00:25:07,211 Recuerde, con nuestra ejemplos printf, cuando 567 00:25:07,211 --> 00:25:10,075 pasaban a printf en la entrada, a la izquierda de esa cadena de entrada 568 00:25:10,075 --> 00:25:12,950 y sobre el derecho de esa entrada primavera, por supuesto, era una doble cotización. 569 00:25:12,950 --> 00:25:16,270 Si su propia entrada tiene un doble cita en medio de eso, 570 00:25:16,270 --> 00:25:18,920 el equipo podría potencialmente confundirse, ya que, 571 00:25:18,920 --> 00:25:20,760 hace esta doble cita pertenecer en el medio? 572 00:25:20,760 --> 00:25:22,150 ¿Pertenece a la izquierda? 573 00:25:22,150 --> 00:25:23,566 ¿Pertenece a la correcta? 574 00:25:23,566 --> 00:25:26,780 Y así, si quieres que sea súper claro, lo hace barra invertida doble cita, 575 00:25:26,780 --> 00:25:30,480 de modo que ha escapado, por así decirlo, y no es combinó para otra cosa. 576 00:25:30,480 --> 00:25:34,400 Y hay algunos otros aquí, r barra invertida, comillas simples, 0, 577 00:25:34,400 --> 00:25:36,510 para que veamos con el tiempo, también. 578 00:25:36,510 --> 00:25:37,760 Y ahora, ¿qué pasa con las funciones? 579 00:25:37,760 --> 00:25:41,630 >> Así que las acciones que podemos tomar hasta el momento en este idioma, C, así, que hemos visto, 580 00:25:41,630 --> 00:25:44,320 printf, por supuesto, y todos de los otros en la pantalla, 581 00:25:44,320 --> 00:25:47,140 aquí, que vamos a utilizar para el primeros sólo semanas del curso, 582 00:25:47,140 --> 00:25:48,485 venir cuando la biblioteca CS50. 583 00:25:48,485 --> 00:25:51,850 Y hacen que sea mucho más fácil, en C, para conseguir realmente la entrada del usuario. 584 00:25:51,850 --> 00:25:54,200 Resulta que en C, y francamente en unos pocos idiomas, 585 00:25:54,200 --> 00:25:57,450 es un verdadero dolor en el cuello que hacer algo simple, como símbolo del usuario 586 00:25:57,450 --> 00:26:01,310 para el teclado, para su entrada. 587 00:26:01,310 --> 00:26:03,240 Y así, estas funciones hacen que sea más fácil. 588 00:26:03,240 --> 00:26:05,472 >> Y también tiene error comprobar en todo, 589 00:26:05,472 --> 00:26:07,180 de modo que, cuando se recordar el miércoles, nos 590 00:26:07,180 --> 00:26:09,740 vio el, reintentar, advertencia, cuando no cooperaba, 591 00:26:09,740 --> 00:26:11,700 y he escrito una palabra, en lugar de un número? 592 00:26:11,700 --> 00:26:15,402 Hemos hecho el trabajo pesado temprana a asegurarse de que el usuario coopera. 593 00:26:15,402 --> 00:26:17,860 Pero estos son sólo la formación ruedas que lo haremos con el tiempo, 594 00:26:17,860 --> 00:26:19,640 y rápidamente, despegar. 595 00:26:19,640 --> 00:26:22,630 >> Así que para recapitular, a continuación, vamos a echar un vistazo rápido, 596 00:26:22,630 --> 00:26:26,620 al igual que lo hicimos con Scratch, en algunas construcciones canónicas en C. 597 00:26:26,620 --> 00:26:28,580 Con ello se pretende, más o menos de, ser un viaje relámpago, 598 00:26:28,580 --> 00:26:30,990 simplemente para que tenga una referencia y que usted ha visto las cosas al principio. 599 00:26:30,990 --> 00:26:34,100 Pero entonces veremos codificación real utilizar algunos de estos bloques de construcción. 600 00:26:34,100 --> 00:26:36,710 Así que al igual que en Scratch, cuando habíamos declaraciones como, 601 00:26:36,710 --> 00:26:41,570 decir o, espera, en C, que tenemos funciones, así, como printf. 602 00:26:41,570 --> 00:26:45,350 >> Si queremos expresar una condición en C, que es similar en espíritu, 603 00:26:45,350 --> 00:26:47,840 a esa pieza del rompecabezas que parecía esto en Scratch. 604 00:26:47,840 --> 00:26:49,850 Pero en cambio, nos literalmente a escribir, si. 605 00:26:49,850 --> 00:26:51,830 Y luego, entre paréntesis, ponemos una condición, 606 00:26:51,830 --> 00:26:54,807 donde esa condición es lo que vamos a llamar, de nuevo, una expresión booleana. 607 00:26:54,807 --> 00:26:56,390 Y de nuevo, esto es una especie de pseudocódigo. 608 00:26:56,390 --> 00:26:58,830 Y, de hecho, la // es un comentario. 609 00:26:58,830 --> 00:27:00,550 Son sólo palabras en inglés a mí mismo. 610 00:27:00,550 --> 00:27:03,000 Pero este es el general, estructura de una, si, condición. 611 00:27:03,000 --> 00:27:05,220 Pero ya veremos hormigón ejemplos en un momento. 612 00:27:05,220 --> 00:27:07,960 >> Si usted quiere tener un bidireccional tenedor en la carretera, 613 00:27:07,960 --> 00:27:11,740 al igual que lo hicimos con nuestra voluntaria en Miércoles, usted puede tener una, más si. 614 00:27:11,740 --> 00:27:16,020 Y si usted quiere tener una tercera y condición final, o la situación por defecto, 615 00:27:16,020 --> 00:27:19,006 usted puede tener sólo una cuadra más, allí. 616 00:27:19,006 --> 00:27:21,880 Y del mismo modo, con expresiones booleanas, usted puede, y, juntos. 617 00:27:21,880 --> 00:27:24,296 Y vimos el miércoles que no es un solo signo, 618 00:27:24,296 --> 00:27:28,220 es dos, por razones de nivel inferior que que con el tiempo vemos y jugamos con. 619 00:27:28,220 --> 00:27:30,410 O-ing cosas juntos es de 2 barras verticales. 620 00:27:30,410 --> 00:27:32,240 En un teclado de EE.UU., esta es generalmente una clave 621 00:27:32,240 --> 00:27:35,730 con la tecla de mayúsculas anterior clave de la tecla Intro o Retorno. 622 00:27:35,730 --> 00:27:38,620 >> Luego está estas cosas que usaremos tal vez una o dos veces. 623 00:27:38,620 --> 00:27:42,570 Ellos son funcionalmente equivalentes a lo que puede hacer con una, si, más si, 624 00:27:42,570 --> 00:27:44,950 más si lo demás, construir, pero se les llama un interruptor. 625 00:27:44,950 --> 00:27:48,020 Se ven muy diferentes, pero vamos a ver en algunos de nuestro código de distribución, 626 00:27:48,020 --> 00:27:51,890 para un conjunto problema futuro, lo más probable, que a veces es sólo una más bonita 627 00:27:51,890 --> 00:27:54,060 manera de expresar su conjunto manojo de condiciones, 628 00:27:54,060 --> 00:27:57,590 sin tener una gran cantidad de llaves y un montón de paréntesis y sangría. 629 00:27:57,590 --> 00:28:01,910 Pero ellos nos dan no más el poder de lo que ya tenemos. 630 00:28:01,910 --> 00:28:02,550 Y ahora bucles. 631 00:28:02,550 --> 00:28:05,020 Y éste, veremos en un poco más lentamente. 632 00:28:05,020 --> 00:28:08,470 Pero entonces, vamos a empezar a utilizar estos, especialmente para aquellos que ya están familiarizados. 633 00:28:08,470 --> 00:28:13,830 Esta es la forma canónica, si increíblemente modo arcano, para escribir un bucle en C. 634 00:28:13,830 --> 00:28:15,896 >> Ahora un bucle en Rasguño era muy claro. 635 00:28:15,896 --> 00:28:17,020 Usted tiene una, para siempre, bloque. 636 00:28:17,020 --> 00:28:19,760 Usted tiene una, repetir, bloque con sólo un número que tiene que escribir. 637 00:28:19,760 --> 00:28:22,220 Y con el bucle for,, puede poner en práctica tanto de esas ideas, 638 00:28:22,220 --> 00:28:23,595 pero es un poco más técnico. 639 00:28:23,595 --> 00:28:25,994 Pero, francamente, también es relativamente simple. 640 00:28:25,994 --> 00:28:28,160 Una vez conocido el orden de operaciones, que, literalmente, 641 00:28:28,160 --> 00:28:30,910 sólo se va a conectar en los valores y decirle a la computadora qué hacer. 642 00:28:30,910 --> 00:28:32,800 Así que aquí está un ejemplo. 643 00:28:32,800 --> 00:28:38,040 Este es un bucle que, bastante simplemente, cuenta de un número hasta 644 00:28:38,040 --> 00:28:40,187 a través de otro. 645 00:28:40,187 --> 00:28:42,020 Y con sólo echar un vistazo por lo que, incluso si usted tiene 646 00:28:42,020 --> 00:28:44,660 sin experiencia previa con este lenguaje, ¿qué número 647 00:28:44,660 --> 00:28:46,920 no es probable que empezar a contar a? 648 00:28:46,920 --> 00:28:47,730 OK, 0. 649 00:28:47,730 --> 00:28:50,240 Y supongo que es porque ver que hay un int y un i, 650 00:28:50,240 --> 00:28:51,073 que es una variable. 651 00:28:51,073 --> 00:28:52,390 Se inicializa a 0. 652 00:28:52,390 --> 00:28:55,670 >> Y más tarde, parece que estamos pasando printf, un valor. 653 00:28:55,670 --> 00:28:58,000 Y, de hecho, hice un pequeño error tipográfico aquí. 654 00:28:58,000 --> 00:28:59,850 Pero eso es fácilmente fijado. 655 00:28:59,850 --> 00:29:02,390 Permítanme añadir en, i aquí. 656 00:29:02,390 --> 00:29:06,150 Ahora tenemos ser printf pasado ese valor de marcador de posición. 657 00:29:06,150 --> 00:29:08,299 Y lo que va a contar a través de? 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 J MALAN: 49. 662 00:29:10,910 --> 00:29:13,340 Así que 50, a primera vista, parece correcto. 663 00:29:13,340 --> 00:29:16,990 Pero eso, resulta que va a ser nuestra condición que guardemos cheques. 664 00:29:16,990 --> 00:29:21,740 Y vamos a dejar de una vez Ya no es menos de 50. 665 00:29:21,740 --> 00:29:24,920 Así que este bucle, por el contrario, debe ejecutar, siempre que i es menor que 50. 666 00:29:24,920 --> 00:29:28,891 Pero tan pronto como tenga 50 o 51 años, o peor aún, se debe detener automáticamente. 667 00:29:28,891 --> 00:29:29,390 Correcto. 668 00:29:29,390 --> 00:29:31,200 >> Así que lo que realmente sucede aquí? 669 00:29:31,200 --> 00:29:33,160 Así que este es el orden de operaciones para un bucle. 670 00:29:33,160 --> 00:29:35,440 Uno, usted tiene la la llamada de inicialización. 671 00:29:35,440 --> 00:29:38,264 Este fragmento resaltado amarillo de código que se ejecuta en primer lugar, 672 00:29:38,264 --> 00:29:40,930 y tiene el efecto de que, por Miércoles, probablemente imaginar. 673 00:29:40,930 --> 00:29:45,500 Se crea una variable llamada i y tiendas en esa variable el valor 0. 674 00:29:45,500 --> 00:29:47,560 Así que i es 0 en este momento de la historia. 675 00:29:47,560 --> 00:29:49,680 >> La siguiente cosa que que sucede en este constructo, 676 00:29:49,680 --> 00:29:51,540 es que la condición se comprueba. 677 00:29:51,540 --> 00:29:54,325 Así que puedo comprobar de inmediato, es i menos de 50? 678 00:29:54,325 --> 00:29:57,700 Y, por supuesto, la respuesta por ahora es, sin duda, sí. 679 00:29:57,700 --> 00:30:00,710 Sí, porque i es 0, y eso es sin duda menos de 50. 680 00:30:00,710 --> 00:30:03,866 Entonces lo que sucede, es que esta línea de código es ejecutado. 681 00:30:03,866 --> 00:30:06,740 Y de hecho, si hay múltiples líneas de código en esas llaves, 682 00:30:06,740 --> 00:30:09,020 todos ellos se ejecutan uno tras otro. 683 00:30:09,020 --> 00:30:11,450 >> Y en el efecto aquí, es al parecer, para imprimir 684 00:30:11,450 --> 00:30:15,365 el número i, que se va a ser 0, y luego 1, y después 2. 685 00:30:15,365 --> 00:30:15,865 ¿Pero por qué? 686 00:30:15,865 --> 00:30:17,410 ¿Por qué obtener incrementa? 687 00:30:17,410 --> 00:30:20,680 Bueno, la cuarta cosa que que pasa es que esta sintaxis 688 00:30:20,680 --> 00:30:22,610 es ejecutado, tras el punto y coma. 689 00:30:22,610 --> 00:30:27,506 i ++ es una forma abreviada de decir; tomar el valor de i, y añadir 1 a la misma; 690 00:30:27,506 --> 00:30:30,380 y luego la próxima vez, añadir 1 a la misma; y la próxima vez, 691 00:30:30,380 --> 00:30:31,330 añadir 1 a la misma. 692 00:30:31,330 --> 00:30:33,640 >> Así que si seguimos adelante, Qué va a pasar 693 00:30:33,640 --> 00:30:35,890 Lo siguiente es que no voy a inicializar i nunca más. 694 00:30:35,890 --> 00:30:38,290 Si seguía inicializar i a 0, este ejemplo 695 00:30:38,290 --> 00:30:41,110 nunca terminaría, porque i estaría pegado a 0. 696 00:30:41,110 --> 00:30:43,870 Pero lo que va a suceder es que la condición se comprobará, 697 00:30:43,870 --> 00:30:54,280 la línea de código conseguirá ejecutado, la i se incrementará, 698 00:30:54,280 --> 00:30:56,970 condición se comprueba, código conseguirá ejecutado. 699 00:30:56,970 --> 00:30:59,790 Y siguió en bicicleta de nuevo, y otra vez, y otra vez, 700 00:30:59,790 --> 00:31:03,340 hasta i ++ induce un valor de 50. 701 00:31:03,340 --> 00:31:05,870 >> La condición luego dice: es de 50 a menos de 50? 702 00:31:05,870 --> 00:31:09,360 La respuesta, por supuesto, es que no, y por lo que todo el código deja de ejecutarse. 703 00:31:09,360 --> 00:31:13,020 Y si usted tiene más código en la pantalla abajo, eso es lo que sucede después. 704 00:31:13,020 --> 00:31:17,530 Se sale de estas llaves y continúa imprimir más después de eso. 705 00:31:17,530 --> 00:31:20,470 >> Así que una broma ahora, desde el foxtrot, que usted quizás ahora entiendes. 706 00:31:20,470 --> 00:31:30,810 707 00:31:30,810 --> 00:31:31,560 Siempre es divertido. 708 00:31:31,560 --> 00:31:34,110 Es como las risas tipo de filtrarse, 709 00:31:34,110 --> 00:31:38,370 y luego te das cuenta de que no debería estar riéndose de humor como este. 710 00:31:38,370 --> 00:31:41,160 Pero hay algo de comida para llevar aquí, pedagógicamente, también. 711 00:31:41,160 --> 00:31:43,577 Así que resulta que soy falta una pieza de la sintaxis, 712 00:31:43,577 --> 00:31:45,410 o foxtrot de perder un pedazo de sintaxis aquí. 713 00:31:45,410 --> 00:31:48,076 Lo que falta, que hemos tenido en cualquier otro ejemplo, hasta el momento? 714 00:31:48,076 --> 00:31:51,599 715 00:31:51,599 --> 00:31:53,390 Retorno, es allí, así eso es otra cosa, 716 00:31:53,390 --> 00:31:54,440 que vamos a volver al poco tiempo. 717 00:31:54,440 --> 00:31:55,398 Lo que falta, sin embargo? 718 00:31:55,398 --> 00:31:55,908 Sí. 719 00:31:55,908 --> 00:31:58,150 >> MIEMBRO DE LA AUDIENCIA: El inicialización de [inaudible]. 720 00:31:58,150 --> 00:31:58,470 >> DAVID J MALAN: OK. 721 00:31:58,470 --> 00:31:58,980 Así que sí. 722 00:31:58,980 --> 00:32:03,210 Así que en realidad, esto es-- Bueno, y el recuento se inicializa 723 00:32:03,210 --> 00:32:05,470 arriba, o más bien, declarada por encima. 724 00:32:05,470 --> 00:32:06,960 Así que esta es otra manera de hacerlo. 725 00:32:06,960 --> 00:32:08,685 Pero no en una línea que es válida sin embargo. 726 00:32:08,685 --> 00:32:09,310 ¿Qué hay aquí? 727 00:32:09,310 --> 00:32:10,196 >> MIEMBRO DEL PÚBLICO: ¿Es de las llaves? 728 00:32:10,196 --> 00:32:10,640 >> DAVID J MALAN: Sí. 729 00:32:10,640 --> 00:32:12,080 Así que las llaves están desaparecidos. 730 00:32:12,080 --> 00:32:15,495 Pero este código, quiero decir, a su crédito, es, en realidad, sintácticamente válida. 731 00:32:15,495 --> 00:32:17,610 Resulta, no lo hace necesitará las llaves 732 00:32:17,610 --> 00:32:21,691 si sólo tiene una línea de código que desea que se ejecuten dentro del bucle. 733 00:32:21,691 --> 00:32:24,190 Ahora estamos siempre, en clase y en todo nuestro código de distribución, 734 00:32:24,190 --> 00:32:26,730 incluir las llaves de todos modos, sólo por el bien de la claridad. 735 00:32:26,730 --> 00:32:29,010 Pero darse cuenta de que los libros de texto y los ejemplos en línea, 736 00:32:29,010 --> 00:32:31,300 usted puede ver muy bien rizado los apoyos que faltan en algún momento. 737 00:32:31,300 --> 00:32:34,850 Y eso está bien, si lo que han sangrado y destinados 738 00:32:34,850 --> 00:32:38,650 es sólo una sola línea de código, y no múltiples líneas de código, potencialmente. 739 00:32:38,650 --> 00:32:39,150 Correcto. 740 00:32:39,150 --> 00:32:44,500 Así relacionado con el tema de la imprecisión, es un problema de desbordamiento, 741 00:32:44,500 --> 00:32:48,560 en el sentido de que, de manera similar, no enteros tienen límites a ellos 742 00:32:48,560 --> 00:32:49,970 al igual que los valores de punto flotante? 743 00:32:49,970 --> 00:32:53,120 En el mundo de un punto flotante valores, que sólo pueden ser tan precisa, 744 00:32:53,120 --> 00:32:55,710 después de lo cual, a veces cosas malas pueden suceder, 745 00:32:55,710 --> 00:32:57,760 y nuestros programas pueden ser buggy y error. 746 00:32:57,760 --> 00:33:00,050 Ahora, incluso con números enteros, puedes tener problemas. 747 00:33:00,050 --> 00:33:03,820 Ahora un número entero no tiene una punto o números después se decimal. 748 00:33:03,820 --> 00:33:07,130 Es sólo un número natural, por lo general. 749 00:33:07,130 --> 00:33:09,430 Entonces, ¿qué podría salir mal con un int? 750 00:33:09,430 --> 00:33:12,210 Si estoy usando un int a contar, lo que podría salir mal? 751 00:33:12,210 --> 00:33:13,230 Parece mucho más simple. 752 00:33:13,230 --> 00:33:13,873 Sí. 753 00:33:13,873 --> 00:33:16,240 >> MIEMBRO DE LA AUDIENCIA: Si el número consigue [inaudible] 754 00:33:16,240 --> 00:33:17,073 >> DAVID J MALAN: Sí. 755 00:33:17,073 --> 00:33:20,820 Lo que si se cuenta tan alta, que no puede expresar ese número realmente grande. 756 00:33:20,820 --> 00:33:21,320 ¿Correcto? 757 00:33:21,320 --> 00:33:23,910 En algún momento, vas para exceder los límites 758 00:33:23,910 --> 00:33:27,077 de un valor de 32 bits o un valor de 64 bits. 759 00:33:27,077 --> 00:33:29,410 Ahora, de nuevo, no estoy seguro de cómo pronunciar un valor de 64 bits, 760 00:33:29,410 --> 00:33:32,230 pero sé que con un entero de 32 bits, el valor más grande que puede ser, 761 00:33:32,230 --> 00:33:35,490 si es sólo positivo valores, es más o menos 4 mil millones. 762 00:33:35,490 --> 00:33:39,000 Así que si trato de contar hasta 5 mil millones, algo va a suceder. 763 00:33:39,000 --> 00:33:41,050 Pero veamos lo que, de hecho, puede suceder. 764 00:33:41,050 --> 00:33:44,570 En el mundo de número entero desbordamiento, en el que, en cierto sentido, 765 00:33:44,570 --> 00:33:48,270 desbordar la capacidad de una número entero, lo que podría pasar? 766 00:33:48,270 --> 00:33:51,190 >> Así que aquí está un número binario, es un retroceso a 0. 767 00:33:51,190 --> 00:33:54,630 Es todos los 1 de, y los marcadores de posición allí, son potencias de 2, 768 00:33:54,630 --> 00:33:55,980 así que esto es binario. 769 00:33:55,980 --> 00:33:59,416 Así que estos son 8, 1 bits en la pantalla. 770 00:33:59,416 --> 00:34:01,290 Y si usted recuerda, o que rápidamente hacen las cuentas, 771 00:34:01,290 --> 00:34:06,074 qué valor está siendo representado aquí con estos ocho bits de 1? 772 00:34:06,074 --> 00:34:06,950 255. 773 00:34:06,950 --> 00:34:09,260 E incluso si usted no estaba muy seguro de las matemáticas, se puede hacer a cabo. 774 00:34:09,260 --> 00:34:10,550 O usted podría tipo de la razón a través de él, 775 00:34:10,550 --> 00:34:12,633 Espera un minuto, si estoy lo que representa un valor de 8 bits, 776 00:34:12,633 --> 00:34:17,750 y tengo 256 valores posibles, pero el primero de los cuales es 0, 777 00:34:17,750 --> 00:34:19,909 Sólo sé que la mayor va a ser 255, 778 00:34:19,909 --> 00:34:21,510 y eso es lo que podría ser este. 779 00:34:21,510 --> 00:34:26,060 >> Así que supongo que intento añadir 1 a este valor. 780 00:34:26,060 --> 00:34:28,750 ¿Qué haría usted en el grado la escuela cuando se añade un 1, y 781 00:34:28,750 --> 00:34:31,139 en realidad no encajar porque usted tiene que llevar el 1? 782 00:34:31,139 --> 00:34:34,380 ¿Qué es este número va para convertirse en cuando se agrega 1? 783 00:34:34,380 --> 00:34:37,030 Va a ser 0. 784 00:34:37,030 --> 00:34:37,530 ¿Correcto? 785 00:34:37,530 --> 00:34:41,139 Porque si tuviera más bits-- y voy a tratar de, clase de, escriba a cabo aquí-- 786 00:34:41,139 --> 00:34:44,710 si tuviéramos más bits, lo que podría hacer aquí es añadir el 1, 787 00:34:44,710 --> 00:34:47,370 y luego nos íbamos a esto. 788 00:34:47,370 --> 00:34:48,739 ¡Vaya. 789 00:34:48,739 --> 00:34:52,250 Tendríamos un bit 1 todo el camino hasta aquí. 790 00:34:52,250 --> 00:34:55,530 >> Pero si se trata de un finito valor, es sólo 8 bits, 791 00:34:55,530 --> 00:34:57,480 y eso es predeterminado por el ordenador, 792 00:34:57,480 --> 00:34:59,370 que 1 es efectivamente no existe. 793 00:34:59,370 --> 00:35:00,980 Es sólo un poco se cae de un acantilado. 794 00:35:00,980 --> 00:35:05,480 Y así, si se agrega 1 a 255, lo que Valor es lo que al parecer obtiene? 795 00:35:05,480 --> 00:35:06,180 0. 796 00:35:06,180 --> 00:35:09,700 Y así, los números accidentalmente, y tal vez, sin querer, 797 00:35:09,700 --> 00:35:12,040 terminan envolviendo así. 798 00:35:12,040 --> 00:35:14,079 Entonces, ¿cuál puede ser la implicación de esto? 799 00:35:14,079 --> 00:35:15,620 Bueno, hay un par de cosas diferentes. 800 00:35:15,620 --> 00:35:18,751 Así que uno, no terminan buscando como 0, involuntariamente, 801 00:35:18,751 --> 00:35:20,750 pero puedes tipo de ver, incluso en el mundo real, 802 00:35:20,750 --> 00:35:23,416 Para bien o para mal, manifestaciones de esta idea de un límite. 803 00:35:23,416 --> 00:35:26,630 Por ejemplo, cualquiera de ustedes que han jugado alguna vez Lego Star Wars, 804 00:35:26,630 --> 00:35:28,880 ¿alguien suceda saber el número máximo de monedas 805 00:35:28,880 --> 00:35:32,032 puede obtener en Lego Star Wars? 806 00:35:32,032 --> 00:35:35,640 Tome una conjetura basada en preguntas principales de la actualidad. 807 00:35:35,640 --> 00:35:39,140 Es más grande que 256 o 255. 808 00:35:39,140 --> 00:35:40,330 Es 4000000000. 809 00:35:40,330 --> 00:35:42,080 Así que resulta, y hay algunas personas-- 810 00:35:42,080 --> 00:35:46,080 algunos googlear confirmado última noche-- han conseguido 4 mil millones de monedas de oro, 811 00:35:46,080 --> 00:35:47,730 o lo que sea, en Lego Star Wars. 812 00:35:47,730 --> 00:35:49,860 Aunque al parecer, no hay una manera de engañar al juego, 813 00:35:49,860 --> 00:35:53,222 hay un error o una característica, que permite simplemente acumular montones y montones de puntos. 814 00:35:53,222 --> 00:35:54,930 Pero el más grande posible valor, de acuerdo 815 00:35:54,930 --> 00:35:58,360 a esta captura de pantalla de alguien que encontrar en línea, es de hecho, 4 mil millones. 816 00:35:58,360 --> 00:35:59,240 >> Ahora ¿por qué es eso? 817 00:35:59,240 --> 00:36:03,040 Es, precisamente, 4 mil millones, probablemente porque alguien decidió, 818 00:36:03,040 --> 00:36:05,500 que estaba escribiendo este juego, que podían hacer 4 mil millones, 819 00:36:05,500 --> 00:36:07,340 algo, algo, algo, como el valor Puse 820 00:36:07,340 --> 00:36:10,256 con la calculadora antes, pero que es sólo un poco más limpio para los seres humanos 821 00:36:10,256 --> 00:36:12,610 decir el número máximo de coins-- o espárragos, 822 00:36:12,610 --> 00:36:14,860 como lo llaman ellos-- que puede recoger es de 4 millones de dólares. 823 00:36:14,860 --> 00:36:16,290 Y así, ¿por qué es esto? 824 00:36:16,290 --> 00:36:20,310 ¿Cómo es el juego de LEGO la aplicación del contador 825 00:36:20,310 --> 00:36:23,420 eso es hacer el seguimiento de la número de monedas que tiene? 826 00:36:23,420 --> 00:36:24,266 Están usando qué? 827 00:36:24,266 --> 00:36:26,390 MIEMBRO DEL PÚBLICO: Se detiene contando después de 4 mil millones. 828 00:36:26,390 --> 00:36:27,720 DAVID J MALAN: Detiene contando después de las 4 millones de dólares, 829 00:36:27,720 --> 00:36:29,525 que significa puede inferir, como programador, 830 00:36:29,525 --> 00:36:31,960 que son, probablemente, utilizando un entero de 32 bits. 831 00:36:31,960 --> 00:36:35,380 Al igual que el programador literalmente sólo con tipo, int, en su código, 832 00:36:35,380 --> 00:36:39,620 y ese es el tipo de variable que que están usando para almacenar el código de alguien. 833 00:36:39,620 --> 00:36:42,230 Así que hay otras manifestaciones de estos tipos de límites. 834 00:36:42,230 --> 00:36:45,063 >> Así que no he jugado este game-- y yo estaba leyendo sobre la historia 835 00:36:45,063 --> 00:36:48,470 para confirmar como mucho-- pero en el versión original de la civilización, donde 836 00:36:48,470 --> 00:36:53,240 que al parecer interactúa con cada uno otra y puede hacer la guerra o la paz, 837 00:36:53,240 --> 00:36:56,590 Gandhi se supone que es uno de los personajes más pacíficos, como yo 838 00:36:56,590 --> 00:36:59,280 entenderlo, en la primera versión de Civilization. 839 00:36:59,280 --> 00:37:03,250 Y de hecho, en una escala de 1 a 10, su agresividad era sólo un 1. 840 00:37:03,250 --> 00:37:05,620 Así siempre tan ligeramente agresivo, al parecer. 841 00:37:05,620 --> 00:37:11,590 >> Pero en algún momento, puede parecer instalar la democracia en su geografía. 842 00:37:11,590 --> 00:37:14,900 Y si instala la democracia en su versión del juego, 843 00:37:14,900 --> 00:37:17,320 entonces su nivel de agresividad disminuye. 844 00:37:17,320 --> 00:37:18,460 Es algo bueno. 845 00:37:18,460 --> 00:37:20,890 La gente está más tranquila al parecer, en esa situación. 846 00:37:20,890 --> 00:37:23,190 Pero, al parecer, alguien lo hizo Todavía no tienes una, si, condición 847 00:37:23,190 --> 00:37:24,780 en la versión original del código. 848 00:37:24,780 --> 00:37:30,650 >> Así nivel de agresión de Gandhi pasó de positivo 1, menos 2, a negativo 1, 849 00:37:30,650 --> 00:37:33,840 pero el juego no lo hace entender los números negativos. 850 00:37:33,840 --> 00:37:38,680 Así que lo que sucedió fue la agresión de Gandhi nivel pasó de 1, 0, 1 a negativo, 851 00:37:38,680 --> 00:37:40,900 que tuvo el efecto de envolver alrededor para ser 852 00:37:40,900 --> 00:37:44,690 el carácter más agresivo en el juego, en un valor de 255, 853 00:37:44,690 --> 00:37:46,630 en una escala de 1 a 10. 854 00:37:46,630 --> 00:37:49,887 Y desde entonces, ha habido más encarnaciones de este juego, 855 00:37:49,887 --> 00:37:51,720 y se han mantenido como una especie de huevo de Pascua, 856 00:37:51,720 --> 00:37:53,870 que Gandhi es aparentemente tan terriblemente agresivo. 857 00:37:53,870 --> 00:37:56,740 Pero fue el resultado de un error de programación muy simple 858 00:37:56,740 --> 00:37:58,630 en esa versión muy temprana del juego. 859 00:37:58,630 --> 00:38:02,860 >> Ahora más preocupante, más Recientemente, el Boeing 787 860 00:38:02,860 --> 00:38:05,720 fue documentado como teniendo una bug, no el tipo de dispositivo 861 00:38:05,720 --> 00:38:07,340 que sobre todo quiere tener un error. 862 00:38:07,340 --> 00:38:10,130 Y los síntomas, que leeré aquí, de un artículo en línea, 863 00:38:10,130 --> 00:38:13,840 Fue este, un modelo de avión 787 que se ha alimentado de forma continua 864 00:38:13,840 --> 00:38:18,030 para 248 días puede perder todo corriente alterna, AC, 865 00:38:18,030 --> 00:38:20,850 energía eléctrica, debido a las unidades de control del generador, 866 00:38:20,850 --> 00:38:23,330 GCU, simultáneamente entrar en modo a prueba de fallos. 867 00:38:23,330 --> 00:38:26,790 Así que esto era una advertencia emitida cuando se descubrió este problema. 868 00:38:26,790 --> 00:38:28,750 Esta condición es causada por un contador de software, 869 00:38:28,750 --> 00:38:32,230 interno a la GCU, por lo un número entero o una variable, 870 00:38:32,230 --> 00:38:36,850 que se desbordan voluntad después de 248 días de potencia continua. 871 00:38:36,850 --> 00:38:40,350 Boeing está en el proceso de el desarrollo de una actualización de software que GCU 872 00:38:40,350 --> 00:38:42,350 remediará la situación de inseguridad. 873 00:38:42,350 --> 00:38:44,226 >> Tanto como el misil escenario, en el que 874 00:38:44,226 --> 00:38:46,850 que tenían algún tipo de variables que contaba, y contando, 875 00:38:46,850 --> 00:38:50,720 y contando, pero desbordante gradualmente los límites de su capacidad, 876 00:38:50,720 --> 00:38:54,890 igualmente lo hizo el maldito avión tener un desbordamiento de variable de 877 00:38:54,890 --> 00:38:56,410 después de bastante tiempo de ejecución. 878 00:38:56,410 --> 00:38:59,240 Y así el camino lengua en la mejilla de trabajar en torno a este tema 879 00:38:59,240 --> 00:39:04,400 es verdad, reinicio, su avión cada 247 días, para que la memoria se enjugó 880 00:39:04,400 --> 00:39:06,100 y la variable se remonta a 0. 881 00:39:06,100 --> 00:39:09,410 Pero se dan cuenta, esta es una muy gran encarnación de software, 882 00:39:09,410 --> 00:39:14,070 pero sobre todo porque hemos oído hablar de Apple los sistemas operativos de entrar en los coches, 883 00:39:14,070 --> 00:39:18,030 y coches de auto-conducción de Google, y cualquier número de encarnaciones de software 884 00:39:18,030 --> 00:39:21,000 En nuestra vida diaria, TV y relojes, y más, 885 00:39:21,000 --> 00:39:24,950 darse cuenta fueron rodeados por el software, todo lo cual está escrito por nosotros los seres humanos. 886 00:39:24,950 --> 00:39:28,150 >> Y como todos vamos pronto descubrimos, es muy fácil y muy típico 887 00:39:28,150 --> 00:39:30,250 a cometer errores al escribir software. 888 00:39:30,250 --> 00:39:32,745 Y si no coger ellos, algunas cosas malas pueden suceder. 889 00:39:32,745 --> 00:39:35,400 Ahora, a veces, algunos cosas divertidas que puede suceder, 890 00:39:35,400 --> 00:39:38,280 o por lo menos a veces saber para esperar alguna maldad. 891 00:39:38,280 --> 00:39:41,550 Así 0 dividido por 0, desde el grado escuela, generalmente es una mala cosa. 892 00:39:41,550 --> 00:39:43,050 Es indefinido. 893 00:39:43,050 --> 00:39:46,440 Y resulta fuera-- y vamos a ver si mi micrófono puede recoger este up-- que Apple 894 00:39:46,440 --> 00:39:47,790 tenía un poco de diversión con este recientemente. 895 00:39:47,790 --> 00:39:48,850 Así que tengo un iPhone aquí. 896 00:39:48,850 --> 00:39:54,160 Voy a hablar con Siri y preguntarle para darme la respuesta a 0 dividido por 0. 897 00:39:54,160 --> 00:39:55,850 ¿Qué es 0 dividido por 0? 898 00:39:55,850 --> 00:39:59,350 899 00:39:59,350 --> 00:40:02,230 >> SIRI: Imagina que tienes 0 cookies, y usted los divididos en partes iguales 900 00:40:02,230 --> 00:40:03,540 entre 0 amigos. 901 00:40:03,540 --> 00:40:05,810 ¿Cuántas galletas pone cada persona? 902 00:40:05,810 --> 00:40:06,350 ¿Ves? 903 00:40:06,350 --> 00:40:07,660 No tiene sentido. 904 00:40:07,660 --> 00:40:10,540 Y Cookie Monster es triste que no hay cookies. 905 00:40:10,540 --> 00:40:13,987 Y usted es triste que no tienes amigos. 906 00:40:13,987 --> 00:40:15,570 DAVID J MALAN: Es un poco desagradable. 907 00:40:15,570 --> 00:40:17,550 Así que esto es lo que acaba de decir no. 908 00:40:17,550 --> 00:40:21,380 Es indeterminado, no está definido, y de hecho, muchos lenguajes de programación 909 00:40:21,380 --> 00:40:24,950 o, en realidad, compiladores detectar cuando, en un programa, 910 00:40:24,950 --> 00:40:27,050 tratar de dividir a 0 por 0. 911 00:40:27,050 --> 00:40:29,830 Más divertido que esto, sin embargo, es que, al parecer, Cookie Monster 912 00:40:29,830 --> 00:40:31,270 es en Twitter estos días. 913 00:40:31,270 --> 00:40:37,610 Y él respondió a esta, con esto, que es absolutamente adorable. 914 00:40:37,610 --> 00:40:40,110 Pero echemos un vistazo rápido a un par de otras construcciones, 915 00:40:40,110 --> 00:40:43,459 y luego poner algo de esto código usar, en las buenas maneras. 916 00:40:43,459 --> 00:40:45,250 Así que resulta, además de para los bucles, hay 917 00:40:45,250 --> 00:40:49,174 algo que se llama un bucle while, que se ve diferente y se implementa 918 00:40:49,174 --> 00:40:51,590 un poco differently-- y que con el tiempo vemos examples-- 919 00:40:51,590 --> 00:40:53,500 pero en cierto sentido, es más sencillo porque 920 00:40:53,500 --> 00:40:56,670 no le permite inicializar y actualizar dentro de los límites del bucle. 921 00:40:56,670 --> 00:40:57,794 Usted todavía puede implementarlo. 922 00:40:57,794 --> 00:41:01,219 Así que usted puede hacer exactamente las mismas cosas con un bucle while, como con un bucle for, 923 00:41:01,219 --> 00:41:03,260 pero su sintaxis, ultimately-- Como veremos con el tiempo 924 00:41:03,260 --> 00:41:04,551 ver-- va a ser diferente. 925 00:41:04,551 --> 00:41:07,450 Incluso hay un do while, que en realidad es un poco diferente, 926 00:41:07,450 --> 00:41:09,640 en que mientras que un bucle for y un bucle while siempre 927 00:41:09,640 --> 00:41:13,005 comprobar su condición de primera, si usted lee esta cosa de arriba a abajo, 928 00:41:13,005 --> 00:41:16,440 que poco parece que va a comprobar que la propia condición última porque es 929 00:41:16,440 --> 00:41:17,910 verdaderamente la última línea de código. 930 00:41:17,910 --> 00:41:20,580 Y de hecho, eso va a ser útil en ciertos programas que escribimos, 931 00:41:20,580 --> 00:41:23,746 si usted quiere hacer ciegamente algo y, finalmente, comprobar el estado. 932 00:41:23,746 --> 00:41:25,205 Eso no es necesariamente algo malo. 933 00:41:25,205 --> 00:41:27,912 Si queremos que las variables, podemos hacer en un par de maneras diferentes. 934 00:41:27,912 --> 00:41:30,290 Y vimos en el foxtrot de dibujos animados, una forma de hacerlo, 935 00:41:30,290 --> 00:41:33,400 donde se declara la variable, como int contador punto y coma, 936 00:41:33,400 --> 00:41:36,570 y luego tarde-- tal vez la siguiente línea, tal vez 10 líneas tarde-- 937 00:41:36,570 --> 00:41:37,800 en realidad se inicialice. 938 00:41:37,800 --> 00:41:42,230 Así que estas 2 líneas de código declarar una variable de tipo int 939 00:41:42,230 --> 00:41:44,930 y lo llaman mostrador, por lo que da me suficientes bits para mantener un int. 940 00:41:44,930 --> 00:41:48,230 Y luego, finalmente, pone el valor 0 en esa variable. 941 00:41:48,230 --> 00:41:51,250 Arregla los años de 0 y 1 en un patrón, que sabemos de la semana pasada, 942 00:41:51,250 --> 00:41:53,260 representa el número que conocemos como 0. 943 00:41:53,260 --> 00:41:56,920 O, francamente, se puede hacer esto mucho más más sucintamente, al igual que este. 944 00:41:56,920 --> 00:41:59,390 >> Ahora también tenemos la capacidad para llamar a funciones. 945 00:41:59,390 --> 00:42:03,070 Y de hecho, aquí está una línea 2 programa, o un extracto del mismo, 946 00:42:03,070 --> 00:42:06,157 que nos permite en realidad escribir algo de código que 947 00:42:06,157 --> 00:42:08,990 para crear una cadena de la user-- mucho como nuestro voluntario un momento ago-- 948 00:42:08,990 --> 00:42:11,320 almacenando el resultado en una variable llamada nombre, 949 00:42:11,320 --> 00:42:15,470 y entonces-- muy parecido con nuestra voluntaria con estampados printf-- fuera esos valores 950 00:42:15,470 --> 00:42:19,180 pasando en dos argumentos, el cadena, seguido de la variable 951 00:42:19,180 --> 00:42:20,781 llamada, nombre, sí. 952 00:42:20,781 --> 00:42:23,155 Así que vamos a echar un vistazo, antes volvemos a Mario allí, 953 00:42:23,155 --> 00:42:26,010 en un par de ahora, ejemplos de esto. 954 00:42:26,010 --> 00:42:30,537 >> Voy a seguir adelante y abierto hasta, digamos, la función-0.c. 955 00:42:30,537 --> 00:42:33,120 Y como siempre, este código es disponible en la página web del curso, 956 00:42:33,120 --> 00:42:35,660 para que pueda jugar junto a casa y mirarlo más tarde. 957 00:42:35,660 --> 00:42:40,400 Pero aquí está el programa en que es esencia, de la línea 17 a 22. 958 00:42:40,400 --> 00:42:43,270 El programa principal es donde el programa siempre va a empezar. 959 00:42:43,270 --> 00:42:46,980 Este programa, al parecer, se va para imprimir su nombre, de colon. 960 00:42:46,980 --> 00:42:50,320 Es entonces va a llamar GetString, al igual que hicimos con nuestros voluntarios. 961 00:42:50,320 --> 00:42:53,365 Y luego, esto es interesante, que va a llamar PrintName. 962 00:42:53,365 --> 00:42:56,490 Resulta que, durante todo este tiempo, no parece ser una función llamada PrintName. 963 00:42:56,490 --> 00:42:57,614 Que imprime el nombre de alguien. 964 00:42:57,614 --> 00:43:01,210 Nosotros no necesitamos usar printf de antaño, hay PrintName. 965 00:43:01,210 --> 00:43:03,500 >> Pero eso es engañosa porque PrintName no lo hace 966 00:43:03,500 --> 00:43:06,760 vienen con C. La gente no lo hizo inventarlo hace unos 40 o 50 años, 967 00:43:06,760 --> 00:43:07,990 Lo hice, en su lugar. 968 00:43:07,990 --> 00:43:10,330 Y de hecho, si me desplazo aún más, previo aviso 969 00:43:10,330 --> 00:43:14,200 cómo puedo escribir mi propio funciones en C que con el tiempo 970 00:43:14,200 --> 00:43:16,319 Explicamos por qué seguimos diciendo: vacío, en algunos lugares, 971 00:43:16,319 --> 00:43:18,110 pero por hoy, vamos a basta con ver el nombre. 972 00:43:18,110 --> 00:43:20,905 >> En la línea 24, si quieres crear su propia función, 973 00:43:20,905 --> 00:43:22,780 que, literalmente, escribe el nombre de la función. 974 00:43:22,780 --> 00:43:24,340 Elegí PrintName. 975 00:43:24,340 --> 00:43:26,159 Entre paréntesis, se a continuación, especifique qué tipo 976 00:43:26,159 --> 00:43:28,450 de insumos, y cuántos quiere esta función para tomar. 977 00:43:28,450 --> 00:43:31,906 En este caso, quiero tomar 1 variable llamada, nombre, 978 00:43:31,906 --> 00:43:34,030 y que va a ser de tipo, cuerda, así que va 979 00:43:34,030 --> 00:43:35,780 que haber alguna secuencia de caracteres. 980 00:43:35,780 --> 00:43:39,170 Y entonces, este program-- al igual que en Scratch, 981 00:43:39,170 --> 00:43:42,590 usted puede tener rompecabezas personalizado pieces-- va a tener este comportamiento personalizado. 982 00:43:42,590 --> 00:43:46,760 Se va a llamar a printf pasando, hola, marcador de posición, 983 00:43:46,760 --> 00:43:49,110 y luego se va a conectar en lo que el usuario llamado. 984 00:43:49,110 --> 00:43:51,450 >> Así que este es un ejemplo de lo un informático haría 985 00:43:51,450 --> 00:43:55,090 abstracción llamada o funcional descomposición, los cuales son sólo 986 00:43:55,090 --> 00:43:58,110 formas de fantasía de diciendo-- es si te gusta esta idea de alto nivel, 987 00:43:58,110 --> 00:44:01,569 como quiero funcionalidad que grabados el nombre de alguien, absolutamente le 988 00:44:01,569 --> 00:44:04,360 puede escribir literalmente printf y después Aconteció en los argumentos que desea, 989 00:44:04,360 --> 00:44:07,340 y el programa va a funcionar, como lo ha hecho desde el miércoles. 990 00:44:07,340 --> 00:44:10,510 Pero usted puede comenzar a abstraer la noción de la impresión de un nombre. 991 00:44:10,510 --> 00:44:13,270 Puede darle un nombre, como PrintName, y esto 992 00:44:13,270 --> 00:44:15,280 es esta idea de capas desde la semana 0. 993 00:44:15,280 --> 00:44:19,910 >> De ahora en adelante, yo y usted no tiene que saber ni le importa cómo se implementa PrintName. 994 00:44:19,910 --> 00:44:22,470 Sí usa printf, tal vez no lo hace, ¿quién sabe lo utiliza? 995 00:44:22,470 --> 00:44:23,410 ¿A quién le importa? 996 00:44:23,410 --> 00:44:26,034 Ahora estoy hablando aquí, en vez de aquí. 997 00:44:26,034 --> 00:44:28,700 Y, en efecto, como nuestros programas reciben más avanzado y sofisticado, 998 00:44:28,700 --> 00:44:32,550 vamos a seguir tomando por sentado la existencia de las piezas del rompecabezas de nivel inferior. 999 00:44:32,550 --> 00:44:34,780 Debido a que los escribimos o alguien más lo hizo, por lo que 1000 00:44:34,780 --> 00:44:36,910 que entonces podemos construir sobre ellos. 1001 00:44:36,910 --> 00:44:39,430 Echemos un vistazo a este variante, función One. 1002 00:44:39,430 --> 00:44:41,780 >> Así que éste es un poco más avanzado, pero resulta 1003 00:44:41,780 --> 00:44:44,570 que en la biblioteca de CS50, sólo hay una función getInt. 1004 00:44:44,570 --> 00:44:47,720 No pensamos, hace años, a implementar una función GetPositiveInt. 1005 00:44:47,720 --> 00:44:50,970 Y eso es un poco molesto porque si ustedes están escribiendo un programa en el que 1006 00:44:50,970 --> 00:44:53,325 usted desea conseguir un resultado positivo número entero de usuario, 1007 00:44:53,325 --> 00:44:55,010 absolutamente puede utilizar getInt. 1008 00:44:55,010 --> 00:44:57,840 Y a pesar de todo puede comprobar con la condición y tal vez un bucle 1009 00:44:57,840 --> 00:45:00,320 si es mayor que int que 0 y gritar en el usuario 1010 00:45:00,320 --> 00:45:02,699 si él o ella no da que un número positivo. 1011 00:45:02,699 --> 00:45:04,740 Pero vamos a construir este el bloque hueco a nosotros mismos, a, 1012 00:45:04,740 --> 00:45:06,555 pieza rasguño de encargo, si se quiere. 1013 00:45:06,555 --> 00:45:08,680 Voy a tener un programa aquí que en última instancia, I 1014 00:45:08,680 --> 00:45:11,780 quiero ser capaz de llamar a GetPositiveInt, y yo quiero ser 1015 00:45:11,780 --> 00:45:14,200 capaz de imprimir lo que int es. 1016 00:45:14,200 --> 00:45:16,240 Pero esto se abstrae lejos ahora. 1017 00:45:16,240 --> 00:45:19,050 Se ha acaba de dar un alto nivel nombre que dice lo que hace, 1018 00:45:19,050 --> 00:45:21,780 que es maravilloso porque es muy intuitivo ahora a leer. 1019 00:45:21,780 --> 00:45:24,710 Y si me importa lo que hay debajo el capó, déjame desplácese hacia abajo. 1020 00:45:24,710 --> 00:45:27,140 Y es un poco intimidante al principio, especialmente 1021 00:45:27,140 --> 00:45:29,470 si este es su primer programa, pero vamos a echar un vistazo. 1022 00:45:29,470 --> 00:45:32,860 >> Yo ya no estoy diciendo, nula, porque resulta que las funciones, 1023 00:45:32,860 --> 00:45:34,777 al igual que GetString, puede devolver un valor para mí. 1024 00:45:34,777 --> 00:45:36,610 Ellos no sólo tienen imprimir en la pantalla, 1025 00:45:36,610 --> 00:45:38,410 que en realidad puede entregar yo algo a cambio. 1026 00:45:38,410 --> 00:45:41,535 Y mientras que antes PrintName, Yo no necesito nada. 1027 00:45:41,535 --> 00:45:44,160 Necesitaba el efecto secundario de algo a aparecer en la pantalla, 1028 00:45:44,160 --> 00:45:46,570 pero yo no necesitaba un ser humano a darme algo a cambio. 1029 00:45:46,570 --> 00:45:48,840 Aquí, con GetPositiveInt, al igual que con getInt, 1030 00:45:48,840 --> 00:45:50,640 Quiero ser entregado algo a cambio. 1031 00:45:50,640 --> 00:45:53,220 Así que estoy diciendo no, nula, en la línea 23, pero int, 1032 00:45:53,220 --> 00:45:55,570 que dice, esta función que estoy escribiendo, 1033 00:45:55,570 --> 00:45:58,860 llama GetPositiveInt va a Me devolver un entero, no nada, 1034 00:45:58,860 --> 00:45:59,890 no nula. 1035 00:45:59,890 --> 00:46:03,280 >> Mientras tanto, se va a tomar ninguna insumos, así que he, clase de, invierten la misma. 1036 00:46:03,280 --> 00:46:08,280 Yo no voy a dar ninguna GetPositiveInt de entrada, quiero que me dé su salida. 1037 00:46:08,280 --> 00:46:09,800 Y entonces, ¿qué pasa ahora? 1038 00:46:09,800 --> 00:46:11,640 Así que aquí es cómo puedo declarar una variable. 1039 00:46:11,640 --> 00:46:15,090 Lo he hecho fuera del bucle, por razones que vamos finalmente vemos, 1040 00:46:15,090 --> 00:46:17,700 pero esto sólo da me 32 bits llamado, n, 1041 00:46:17,700 --> 00:46:20,952 y he predeterminar les permite almacenar número entero. 1042 00:46:20,952 --> 00:46:23,660 Y aquí hay que hacer mientras constructo, y es por eso que es útil. 1043 00:46:23,660 --> 00:46:26,700 Literalmente ello, mientras que n es menor que 1. 1044 00:46:26,700 --> 00:46:28,030 Así que vamos a ver qué pasa. 1045 00:46:28,030 --> 00:46:30,760 Imprimo, por favor dame un int positivo. 1046 00:46:30,760 --> 00:46:34,300 Luego me pongo un int, utilizando CS50 de funcionar y almacenada en n. 1047 00:46:34,300 --> 00:46:38,990 >> Y entonces, ¿qué línea de código, probablemente, es ejecutado siguiente, lógicamente? 1048 00:46:38,990 --> 00:46:41,890 Qué recta numérica? 1049 00:46:41,890 --> 00:46:42,571 Sí, así que 31. 1050 00:46:42,571 --> 00:46:45,320 Usted no sabe esto hasta que haya ha dicho o tipo de inferir que, 1051 00:46:45,320 --> 00:46:45,986 pero eso es cierto. 1052 00:46:45,986 --> 00:46:48,280 Se va de arriba a abajo y luego sigue repitiendo. 1053 00:46:48,280 --> 00:46:55,840 Así que si he escrito en, digamos, el número 1 negativo, es n menos de 1 negativo? 1054 00:46:55,840 --> 00:46:56,340 Sí. 1055 00:46:56,340 --> 00:46:58,470 Debido negativo 1 es menor que 1. 1056 00:46:58,470 --> 00:46:59,510 Entonces, ¿qué debe suceder? 1057 00:46:59,510 --> 00:47:03,260 Voy a hacer esto mientras que n es menor que 1, 1058 00:47:03,260 --> 00:47:05,760 así que me voy a ir de nuevo a la línea 28. 1059 00:47:05,760 --> 00:47:09,530 >> Y cada tiempo-- y vamos a correr esto-- hacer la función del 1 al compilarlo, 1060 00:47:09,530 --> 00:47:11,340 y ahora dot función 1 slash. 1061 00:47:11,340 --> 00:47:14,280 Si escribo negativo 1, es va a seguir gritándome 1062 00:47:14,280 --> 00:47:17,530 hasta que yo coopero debido a que cada de mis entradas es menor que 1 1063 00:47:17,530 --> 00:47:20,070 y si es inferior a 1, mientras que, Voy a seguir haciendo esto. 1064 00:47:20,070 --> 00:47:24,240 Si, finalmente, le doy un número como 50, por suerte, dice, gracias por el 50. 1065 00:47:24,240 --> 00:47:24,970 ¿Por qué? 1066 00:47:24,970 --> 00:47:30,640 Debido a que tan pronto como n no es inferior a 1, dejo de quedarse atascado en este bucle, 1067 00:47:30,640 --> 00:47:33,840 y esta nueva palabra clave hoy en día, A cambio, literalmente, hace eso. 1068 00:47:33,840 --> 00:47:36,800 Así que he implementado, en un sentido, el equivalente de GetString, 1069 00:47:36,800 --> 00:47:40,590 donde estoy devolviendo a el que me está usando, algún valor. 1070 00:47:40,590 --> 00:47:42,820 No tiene que ser una cadena, que es un int. 1071 00:47:42,820 --> 00:47:44,990 Así que una simple, rápida ejemplo, pero que pronto 1072 00:47:44,990 --> 00:47:47,930 ver un poco más sofisticada versiones fijas. 1073 00:47:47,930 --> 00:47:53,882 De hecho, vamos a echar un vistazo a una uno numérico que se llama return.c. 1074 00:47:53,882 --> 00:47:55,590 Y éste es en realidad un poco más simple. 1075 00:47:55,590 --> 00:47:59,010 Así que el propósito de este programa en vida-- vamos a compilar y ejecutar él, 1076 00:47:59,010 --> 00:48:03,090 así que regreso, dot slash, aviso return-- 1077 00:48:03,090 --> 00:48:05,530 el programa simplemente cubica el valor 2. 1078 00:48:05,530 --> 00:48:08,410 Es bastante estúpido, es difícil código, no se necesita ninguna entrada, 1079 00:48:08,410 --> 00:48:12,220 pero demuestra otra función que yo mismo he escrito. 1080 00:48:12,220 --> 00:48:15,760 Así que aquí, he declarado un variable llamada x, de tipo int, 1081 00:48:15,760 --> 00:48:17,840 igual al número 2, completamente arbitraria. 1082 00:48:17,840 --> 00:48:19,530 Esta es sólo una impresión suave y esponjosa. 1083 00:48:19,530 --> 00:48:23,070 Dice x es ahora, tal y tales, cubicación dot dot dot. 1084 00:48:23,070 --> 00:48:26,390 Y la magia es al parecer en la línea 21. 1085 00:48:26,390 --> 00:48:30,120 Voy a llamar a una función llamada, cubo, Estoy entregando una hoja de papel 1086 00:48:30,120 --> 00:48:32,890 con el número 2 escrito en él, y qué valor, matemáticamente, 1087 00:48:32,890 --> 00:48:34,860 Qué quiero salir de ella? 1088 00:48:34,860 --> 00:48:36,570 Así como una comprobación de validez? 1089 00:48:36,570 --> 00:48:37,070 8. 1090 00:48:37,070 --> 00:48:37,570 ¿Correcto? 1091 00:48:37,570 --> 00:48:40,160 Quiero 2 Cubed espalda, 2 a el poder de 3, por lo que el 8 de vuelta. 1092 00:48:40,160 --> 00:48:42,570 >> Entonces, ¿dónde se implementa cubo? 1093 00:48:42,570 --> 00:48:44,349 Bueno, el aviso se implementa aquí. 1094 00:48:44,349 --> 00:48:47,140 Y al igual que antes, lógicamente, a pesar de que la sintaxis es probablemente 1095 00:48:47,140 --> 00:48:49,320 muy nuevo para muchos de ustedes, Quiero esta función 1096 00:48:49,320 --> 00:48:51,780 para mí devolver una hoja de papel con un int en él. 1097 00:48:51,780 --> 00:48:53,990 Así que tengo un int, el nombre es arbitraria, 1098 00:48:53,990 --> 00:48:55,530 pero convenientemente llamado cubo. 1099 00:48:55,530 --> 00:48:58,430 La entrada a la misma, es de n tipo entero, así que eso es 1100 00:48:58,430 --> 00:49:00,800 cómo me puede pasar en el número 2 en una hoja de papel. 1101 00:49:00,800 --> 00:49:03,910 Y luego resulta que C soportes matemáticas, por lo que no tienen los x para los tiempos, 1102 00:49:03,910 --> 00:49:06,680 sólo tiene que utilizar el asterisco para la multiplicación. 1103 00:49:06,680 --> 00:49:11,070 Y esto devuelve n veces n veces n, que es simplemente un valor en cubos. 1104 00:49:11,070 --> 00:49:12,840 >> Entonces, ¿dónde vamos con todo esto? 1105 00:49:12,840 --> 00:49:14,570 Esto es definitivamente un viaje relámpago, puede estar seguro, 1106 00:49:14,570 --> 00:49:16,410 que en las secciones súper y en el conjunto de problemas 1, 1107 00:49:16,410 --> 00:49:18,368 se le entramos por todo esto aún más. 1108 00:49:18,368 --> 00:49:22,490 Y en un problema conjunto 1, vamos a la transición desde el mundo de la gráfica de Scratch 1109 00:49:22,490 --> 00:49:25,640 a algo más de línea de comandos en C. Pero nos inspiramos 1110 00:49:25,640 --> 00:49:27,680 de este juego aquí de antaño, en el que 1111 00:49:27,680 --> 00:49:31,591 usando C y la edición estándar del p conjunto que va a poner en práctica la pirámide de Mario. 1112 00:49:31,591 --> 00:49:34,340 Y en la edición pirata del p conjunto, si así lo desea para elegir, 1113 00:49:34,340 --> 00:49:38,280 usted implementará un poco más desafiando pirámide con dos picos. 1114 00:49:38,280 --> 00:49:41,239 También implementa una algoritmo, un algoritmo codicioso. 1115 00:49:41,239 --> 00:49:43,030 Resulta que hay algo de lógica interesante 1116 00:49:43,030 --> 00:49:45,640 detrás del proceso de corriendo estación de cajero 1117 00:49:45,640 --> 00:49:47,410 y de hecho la entrega alguien cambio trasero. 1118 00:49:47,410 --> 00:49:50,410 Existe un algoritmo que es bastante sencillo, que podría incluso 1119 00:49:50,410 --> 00:49:53,576 captar intuitivamente la primera vez que lees it-- darse cuenta de que es lo que he siempre 1120 00:49:53,576 --> 00:49:57,110 hecho alguna vez me he dado a alguien alguna parte posterior-- dinero que le permite siempre 1121 00:49:57,110 --> 00:50:00,679 minimizar el número de notas de papel o monedas metálicas 1122 00:50:00,679 --> 00:50:02,220 que está devolviendo al usuario. 1123 00:50:02,220 --> 00:50:04,610 Y esto, por supuesto, es convincente porque si vas a CVS o lo que sea, 1124 00:50:04,610 --> 00:50:06,430 usted no quiere estar sola mano un montón de los 1125 00:50:06,430 --> 00:50:07,596 o un montón de monedas de un centavo. 1126 00:50:07,596 --> 00:50:10,120 Usted quiere que el menor número monedas, probablemente, posible. 1127 00:50:10,120 --> 00:50:13,070 >> Por último, también será desafiado a incursionar en el mundo del agua 1128 00:50:13,070 --> 00:50:17,220 y en realidad obtener una apreciación para un mapeo entre las tasas de flujo, 1129 00:50:17,220 --> 00:50:19,890 de recibir, el agua en la ducha, qué cantidad de agua se utiliza. 1130 00:50:19,890 --> 00:50:22,640 Y la alusión en el mismo, será este clip aquí, 1131 00:50:22,640 --> 00:50:24,840 que vamos a terminar por sólo 60 segundos, que 1132 00:50:24,840 --> 00:50:29,070 pinta un cuadro de cabezales de ducha de bajo flujo. 1133 00:50:29,070 --> 00:50:30,886 >> [REPRODUCCIÓN DE VÍDEO] 1134 00:50:30,886 --> 00:50:31,385 -Correcto. 1135 00:50:31,385 --> 00:50:32,774 Tengo todo aquí. 1136 00:50:32,774 --> 00:50:35,800 Me dio la Serie F Ciclón, Hydra, Jetflow, Estocolmo 1137 00:50:35,800 --> 00:50:37,660 SuperSteam, lo que sea. 1138 00:50:37,660 --> 00:50:39,265 >> -¿Y Qué me recomienda? 1139 00:50:39,265 --> 00:50:40,460 >> -¿Qué buscas? 1140 00:50:40,460 --> 00:50:41,300 >> -Hombre de poder. 1141 00:50:41,300 --> 00:50:42,285 Poder. 1142 00:50:42,285 --> 00:50:42,910 -Como Silkwood. 1143 00:50:42,910 --> 00:50:44,520 -Eso Es para la radiación. 1144 00:50:44,520 --> 00:50:46,335 -Eso es correcto. 1145 00:50:46,335 --> 00:50:48,275 -Ahora ¿Qué es esto? 1146 00:50:48,275 --> 00:50:49,704 -Eso Es el Comando 450. 1147 00:50:49,704 --> 00:50:50,620 Yo no vendo ese. 1148 00:50:50,620 --> 00:50:51,700 >> -Pero Eso es lo que queremos. 1149 00:50:51,700 --> 00:50:52,680 Es un comando 450. 1150 00:50:52,680 --> 00:50:53,882 >> -No Me creen. 1151 00:50:53,882 --> 00:50:55,090 Sólo se utiliza en el circo. 1152 00:50:55,090 --> 00:50:56,512 Es para los elefantes. 1153 00:50:56,512 --> 00:50:59,356 >> -Voy A pagar nada. 1154 00:50:59,356 --> 00:51:01,252 >> -¿Qué Acerca Jerry? 1155 00:51:01,252 --> 00:51:02,760 >> -Él No podía manejar eso. 1156 00:51:02,760 --> 00:51:04,910 Él es delicada. 1157 00:51:04,910 --> 00:51:05,750 Oh si. 1158 00:51:05,750 --> 00:51:36,737 1159 00:51:36,737 --> 00:51:37,320 [FIN DE REPRODUCCIÓN] 1160 00:51:37,320 --> 00:51:37,700 DAVID J MALAN: De acuerdo. 1161 00:51:37,700 --> 00:51:38,820 Eso si para CS50. 1162 00:51:38,820 --> 00:51:40,050 Nos vemos la semana que viene. 1163 00:51:40,050 --> 00:51:45,910 1164 00:51:45,910 --> 00:51:49,029 >> ALTAVOZ 1: [? Scully?] [? Ian,?] por lo que este proyecto outro, 1165 00:51:49,029 --> 00:51:50,362 ¿qué has chicos llegar a? 1166 00:51:50,362 --> 00:51:51,990 >> ALTAVOZ 2: Bueno, le hemos dado es una variedad del pensamiento, 1167 00:51:51,990 --> 00:51:53,250 y creemos que la mejor manera a-- 1168 00:51:53,250 --> 00:51:53,660 >> ALTAVOZ 3: ¿Puedo? 1169 00:51:53,660 --> 00:51:54,326 >> ALTAVOZ 2: Sí. 1170 00:51:54,326 --> 00:51:56,360 Por todos los medios, en realidad. 1171 00:51:56,360 --> 00:51:59,425 >> ALTAVOZ 3: Así que creo podemos resumir nuestra idea 1172 00:51:59,425 --> 00:52:05,450 para los outros con un solo nada palabra--. 1173 00:52:05,450 --> 00:52:08,950 1174 00:52:08,950 --> 00:52:10,409 >> DAVID J MALAN: ¿Nada? 1175 00:52:10,409 --> 00:52:11,200 ALTAVOZ 3: Nada. 1176 00:52:11,200 --> 00:52:12,990 DAVID J MALAN: ¿Qué significa eso? 1177 00:52:12,990 --> 00:52:16,260 ALTAVOZ 3: Los outros son nueces. 1178 00:52:16,260 --> 00:52:21,720 ALTAVOZ 2: Bueno, quiero decir, en la filosofía, Quiero decir, nada es siempre algo. 1179 00:52:21,720 --> 00:52:24,200 ALTAVOZ 1: Así what's-- ¿cuál es la premisa? 1180 00:52:24,200 --> 00:52:25,720 ALTAVOZ 3: Así es como la vida. 1181 00:52:25,720 --> 00:52:26,680 OK. 1182 00:52:26,680 --> 00:52:28,294 Qué hiciste hoy? 1183 00:52:28,294 --> 00:52:31,811 >> DAVID J MALAN: me levanté, tenía desayuno, y llegó a trabajar. 1184 00:52:31,811 --> 00:52:34,056 >> ALTAVOZ 3: Esa es una outro. 1185 00:52:34,056 --> 00:52:36,806 ALTAVOZ 2: Pero, quiero decir, no debe algo le suceda a él en el-- 1186 00:52:36,806 --> 00:52:37,889 ALTAVOZ 3: No, no, no, no. 1187 00:52:37,889 --> 00:52:40,220 No pasa nada. 1188 00:52:40,220 --> 00:52:42,910 >> ALTAVOZ 1: Así que ¿por qué estamos viendo? 1189 00:52:42,910 --> 00:52:46,956 >> ALTAVOZ 3: Porque es un outro para CS50. 1190 00:52:46,956 --> 00:52:48,652 >> DAVID J MALAN: Todavía no. 1191 00:52:48,652 --> 00:52:49,151