1 00:00:00,000 --> 00:00:10,920 >> [REPRODUCCIÓN DE MÚSICA] 2 00:00:10,920 --> 00:00:14,680 >> DAVID J MALAN: Muy bien, bienvenidos de nuevo a CS50. 3 00:00:14,680 --> 00:00:16,500 Este es el comienzo de la segunda semana. 4 00:00:16,500 --> 00:00:18,940 Palabras de uno de nuestros amigos en el campus - 5 00:00:18,940 --> 00:00:22,620 si usted está interesado, posiblemente, ya sea ahora o en algún plazo futuro 6 00:00:22,620 --> 00:00:25,670 incluso, una vez más cómodo, la enseñanza los estudiantes de escuela media un poco 7 00:00:25,670 --> 00:00:27,680 algo sobre ciencias de la computación, hacer la cabeza a esa URL. 8 00:00:27,680 --> 00:00:32,360 Ellos tienen una especial necesidad en este momento de maestros, sobre todo si usted tiene 9 00:00:32,360 --> 00:00:34,700 tenido algún contacto con la informática. 10 00:00:34,700 --> 00:00:38,060 >> Así que recordar que la última vez, introdujimos unos tipos de datos en C, y 11 00:00:38,060 --> 00:00:40,590 es posible que haya empezado a obtener su manos sucias con éstos hasta ahora 12 00:00:40,590 --> 00:00:41,940 en el problema de establecer una. 13 00:00:41,940 --> 00:00:43,230 Y tuvimos un char. 14 00:00:43,230 --> 00:00:49,100 Así que en términos un tanto técnicos, lo que es un char como usted sabe que hoy en día? 15 00:00:49,100 --> 00:00:51,050 >> Así que es un personaje, sino de dejar que Más precisamente ahora. 16 00:00:51,050 --> 00:00:53,735 ¿Qué entendemos por carácter o char individual? 17 00:00:53,735 --> 00:00:56,700 18 00:00:56,700 --> 00:00:59,500 Un carácter no numérico - 19 00:00:59,500 --> 00:01:00,670 por lo que no necesariamente. 20 00:01:00,670 --> 00:01:04,580 Resulta que los números pares, incluso puntuacion y las letras son 21 00:01:04,580 --> 00:01:06,980 representado con estos datos tipo conocido como un char. 22 00:01:06,980 --> 00:01:09,440 Así que no es necesariamente alfabético. 23 00:01:09,440 --> 00:01:11,100 ¿Sí? 24 00:01:11,100 --> 00:01:12,275 >> Así que es un carácter ASCII. 25 00:01:12,275 --> 00:01:15,510 Así que si piensas en la semana cero, cuando tuvimos nuestro byte de voluntarios 26 00:01:15,510 --> 00:01:19,150 venir y, o bien mantener las manos en alto o no todos, que representaban bits. 27 00:01:19,150 --> 00:01:22,450 Pero en conjunto como un grupo de ocho, representaban un byte. 28 00:01:22,450 --> 00:01:26,030 Y hemos introducido el concepto de ASCII en esa conferencia, que simplemente es una 29 00:01:26,030 --> 00:01:28,170 correspondencia entre números y letras. 30 00:01:28,170 --> 00:01:32,010 Y ASCII utiliza, como aquellos humanos implícitas, ocho bits 31 00:01:32,010 --> 00:01:33,660 para representar un carácter. 32 00:01:33,660 --> 00:01:36,890 >> Así consecuencia, si ocho bits pueden cada toma en uno de dos valores - 33 00:01:36,890 --> 00:01:38,010 cero o uno - 34 00:01:38,010 --> 00:01:40,280 eso significa que hay dos posibilidades para esta persona - 35 00:01:40,280 --> 00:01:41,230 cero o uno - 36 00:01:41,230 --> 00:01:44,070 dos para esta persona, dos para este persona, dos para éste. 37 00:01:44,070 --> 00:01:47,450 Así, un total de dos veces dos veces dos veces dos veces dos - 38 00:01:47,450 --> 00:01:49,700 así que dos el octavo en total. 39 00:01:49,700 --> 00:01:54,320 Así que hay un número total de caracteres 256 es posible que pueda 40 00:01:54,320 --> 00:01:55,750 representar con ocho bits. 41 00:01:55,750 --> 00:01:59,210 >> Ahora, aquellos de ustedes que hablan de Asia lenguas podrían saber que hay más 42 00:01:59,210 --> 00:02:02,620 personajes en el mundo que sólo As y Bs y Cs y Ds. 43 00:02:02,620 --> 00:02:06,130 Y, en efecto, ASCII no basta para una gran cantidad de idiomas del mundo. 44 00:02:06,130 --> 00:02:07,760 Pero más sobre esto en otro momento. 45 00:02:07,760 --> 00:02:11,240 Por ahora, sabemos que en C si desea para representar una letra, un pedazo de 46 00:02:11,240 --> 00:02:15,780 puntuacion, o simplemente algo de carácter en la naturaleza, se utiliza un char. 47 00:02:15,780 --> 00:02:18,240 Y es un byte u ocho bits. 48 00:02:18,240 --> 00:02:19,690 >> ¿Qué tal un int? 49 00:02:19,690 --> 00:02:20,780 Bueno, un int es un entero. 50 00:02:20,780 --> 00:02:23,175 ¿Cuántos bits, si usted recuerda, era un número entero típicamente? 51 00:02:23,175 --> 00:02:25,930 52 00:02:25,930 --> 00:02:27,512 Cualquiera que recuerde? 53 00:02:27,512 --> 00:02:29,600 Así que es típicamente 32. 54 00:02:29,600 --> 00:02:32,120 En realidad, depende de la computadora que está utilizando. 55 00:02:32,120 --> 00:02:35,770 Sin embargo, en el aparato, y en una gran cantidad de computadoras, es 32 bits o cuatro 56 00:02:35,770 --> 00:02:37,140 bytes - ocho veces cuatro. 57 00:02:37,140 --> 00:02:39,790 Y ints sólo son utilizadas para almacenar números, ya sea negativos, 58 00:02:39,790 --> 00:02:41,610 positivo, o cero. 59 00:02:41,610 --> 00:02:45,250 >> Y si tienes 32 bits y sólo preocuparse por los números positivos, puede 60 00:02:45,250 --> 00:02:48,960 nadie Ballpark cuántos posible enteros una computadora pueden representar de 61 00:02:48,960 --> 00:02:51,820 cero en un máximo? 62 00:02:51,820 --> 00:02:56,130 Por lo que sería de dos a la 32, que es aproximadamente cuatro mil millones. 63 00:02:56,130 --> 00:02:59,720 Así pues, estas potencias de dos van a ser temas recurrentes en ciencias de la computación. 64 00:02:59,720 --> 00:03:03,930 Como veremos, son bastante convenientes trabajar con incluso si no es bastante 65 00:03:03,930 --> 00:03:05,790 fácil de hacer los cálculos en la cabeza de uno. 66 00:03:05,790 --> 00:03:07,000 >> Así que vamos a decir más o menos cuatro mil millones. 67 00:03:07,000 --> 00:03:08,620 Ahora, desde hace mucho tiempo - 68 00:03:08,620 --> 00:03:09,770 usted puede clase de adivinar. 69 00:03:09,770 --> 00:03:10,480 Es más largo que un int. 70 00:03:10,480 --> 00:03:12,440 ¿Cuántos bits? 71 00:03:12,440 --> 00:03:14,250 Así que 64 bits o de ocho bytes. 72 00:03:14,250 --> 00:03:17,480 Esto sólo significa que usted puede representar incluso números más grandes, más grande positivo o 73 00:03:17,480 --> 00:03:19,160 los números negativos más grandes. 74 00:03:19,160 --> 00:03:20,060 >> Y ¿qué hay de flotación? 75 00:03:20,060 --> 00:03:22,260 Eso es un punto flotante valor de 32 bits. 76 00:03:22,260 --> 00:03:25,180 Esto es sólo un número real, algo con un punto decimal. 77 00:03:25,180 --> 00:03:30,100 Pero si en vez necesita más lugares después de la coma decimal o desea 78 00:03:30,100 --> 00:03:33,720 representar un número más grande con algunos fracción después de ella, se puede utilizar un 79 00:03:33,720 --> 00:03:36,260 doble, que es de 64 bits. 80 00:03:36,260 --> 00:03:38,240 >> Pero hay una interesante comida para llevar aquí. 81 00:03:38,240 --> 00:03:42,890 Así que si ints están limitados por 32 bits y incluso largos largos están limitados por 64 82 00:03:42,890 --> 00:03:46,180 bits, ese tipo de plantea la pregunta, ¿qué pasa si usted realmente desea contar 83 00:03:46,180 --> 00:03:48,790 superior a 4 millones de dólares para un int? 84 00:03:48,790 --> 00:03:50,330 Bueno, sólo tiene que utilizar un largo tiempo. 85 00:03:50,330 --> 00:03:54,200 Pero lo que si usted quiere contar más de dos a la 64, más o menos? 86 00:03:54,200 --> 00:03:55,810 >> Ahora, eso es un número enorme. 87 00:03:55,810 --> 00:03:59,250 Pero con el tiempo, es posible que en realidad se preocupan por este tipo de valores, 88 00:03:59,250 --> 00:04:03,070 especialmente si usted está utilizando una base de datos y comenzando a recoger montones y montones 89 00:04:03,070 --> 00:04:06,190 y un montón de datos y asignar único números a cada pieza de que los datos. 90 00:04:06,190 --> 00:04:07,430 Así que como que tienen un problema. 91 00:04:07,430 --> 00:04:10,700 Y del mismo modo, con coma flotante valores - flotadores o dobles - 92 00:04:10,700 --> 00:04:14,290 si sólo tiene un número finito de bits, la cantidad de números totales podrían usted 93 00:04:14,290 --> 00:04:16,980 posiblemente represente? 94 00:04:16,980 --> 00:04:19,540 >> Bueno, es menos claro cuando se involucrar a un punto decimal. 95 00:04:19,540 --> 00:04:20,899 Pero es sin duda finito. 96 00:04:20,899 --> 00:04:24,390 Si usted tiene un número finito de bits, un número finito de los seres humanos, un finito 97 00:04:24,390 --> 00:04:27,350 número de bombillas, seguro que puede sólo representar un número finito de 98 00:04:27,350 --> 00:04:28,510 valores de punto flotante. 99 00:04:28,510 --> 00:04:33,170 Pero, ¿cuántos números reales son su en el mundo? 100 00:04:33,170 --> 00:04:33,680 Hay una infinita. 101 00:04:33,680 --> 00:04:37,280 Así que eso es un poco de un problema, ya que no tienen una cantidad infinita de 102 00:04:37,280 --> 00:04:39,970 de memoria o la memoria RAM en el interior de nuestros ordenadores. 103 00:04:39,970 --> 00:04:41,780 Así que algunas cosas difíciles pueden suceder. 104 00:04:41,780 --> 00:04:43,900 >> Así que vamos a seguir adelante y tratar de expresar esto aquí. 105 00:04:43,900 --> 00:04:46,240 Déjame ir por delante, ya abrir gedit. 106 00:04:46,240 --> 00:04:50,360 Voy a seguir adelante y guardar un archivo llamado "floats0.c" sólo para estar 107 00:04:50,360 --> 00:04:54,630 coherente con un ejemplo que es disponible en línea, si usted desea. 108 00:04:54,630 --> 00:04:58,080 Y yo voy a seguir adelante y definirlo de la siguiente manera - 109 00:04:58,080 --> 00:05:01,540 Voy a seguir adelante y decir, int void main, como hacemos a menudo. 110 00:05:01,540 --> 00:05:07,190 >> Y luego, en este programa, voy a declararme un flotante, por lo que una de 32 bits 111 00:05:07,190 --> 00:05:09,700 variable llamada f, arbitrariamente. 112 00:05:09,700 --> 00:05:13,910 Y luego me voy a guardar en ella No sé, una décima, por lo que 0.1. 113 00:05:13,910 --> 00:05:16,590 Así que voy a expresar que como uno dividido por 10, que es perfectamente 114 00:05:16,590 --> 00:05:17,790 legítimo en C. 115 00:05:17,790 --> 00:05:20,460 >> Y luego, en la segunda línea, simplemente desee imprimir ese valor. 116 00:05:20,460 --> 00:05:22,950 Así recordamos que podemos utilizar printf familiar. 117 00:05:22,950 --> 00:05:25,420 No quiero usar% i para un int. 118 00:05:25,420 --> 00:05:28,360 Queremos utilizar% f para un flotador. 119 00:05:28,360 --> 00:05:33,080 Y luego me voy a hacer barra invertida n, Cierre de comillas, comas, f, punto y coma. 120 00:05:33,080 --> 00:05:34,400 >> Así que aquí está mi programa. 121 00:05:34,400 --> 00:05:35,820 Ya hay un error. 122 00:05:35,820 --> 00:05:38,640 ¿Alguien para quien este hecho clic ya quiero señalar, al menos, 123 00:05:38,640 --> 00:05:40,220 un error que he hecho? 124 00:05:40,220 --> 00:05:42,470 ¿Sí? 125 00:05:42,470 --> 00:05:42,800 Sí. 126 00:05:42,800 --> 00:05:47,860 Me olvidé "# include" en la cima, síntoma de que si trato de 127 00:05:47,860 --> 00:05:50,490 Compile este va a ser que el compilador va a gritar a mí, 128 00:05:50,490 --> 00:05:52,770 diciendo símbolo indefinido o algo en ese sentido. 129 00:05:52,770 --> 00:05:55,360 No entiende algo como printf. 130 00:05:55,360 --> 00:05:59,380 >> Así que voy a hacer "# include ", Guarde el archivo. 131 00:05:59,380 --> 00:06:00,400 Y ahora está en mejor forma. 132 00:06:00,400 --> 00:06:02,690 Pero también voy a señalar cabo un nuevo detalle en la actualidad. 133 00:06:02,690 --> 00:06:08,620 Además de especificar el lugar titulares como% f% i% s, se puede 134 00:06:08,620 --> 00:06:12,320 a veces influir en el comportamiento de ese marcador de posición. 135 00:06:12,320 --> 00:06:15,540 Por ejemplo, en el caso de un flotante valor del punto, si sólo quiero 136 00:06:15,540 --> 00:06:22,200 para mostrar un decimal después de la período, puedo realmente hacer 0.1f. 137 00:06:22,200 --> 00:06:26,830 En otras palabras, me separo del fy el signo de porcentaje con un 0,1, sólo 138 00:06:26,830 --> 00:06:30,200 diciendo printf, es posible que tenga un todo montón de números después de la coma decimal 139 00:06:30,200 --> 00:06:30,930 punto para mí. 140 00:06:30,930 --> 00:06:32,870 Pero yo sólo quiero ver a uno de ellos. 141 00:06:32,870 --> 00:06:36,280 >> Así que voy a seguir adelante ahora y ahorre este programa, entrar en mi terminal 142 00:06:36,280 --> 00:06:41,870 ventana, y voy a seguir adelante y el tipo de maquillaje float 0, entrar. 143 00:06:41,870 --> 00:06:44,930 Veo esa línea un tanto críptico que comenzará a tener más sentido a medida que 144 00:06:44,930 --> 00:06:46,900 embromar aparte esta semana y la próxima. 145 00:06:46,900 --> 00:06:50,480 Ahora voy a seguir adelante y ejecutar flotador cero. 146 00:06:50,480 --> 00:06:52,020 Y, maldita sea. 147 00:06:52,020 --> 00:06:54,880 >> Así que hay otro error aquí por alguna razón. 148 00:06:54,880 --> 00:07:02,490 Estoy bastante seguro de que una décima parte, o uno dividido por 10, no es 0.0. 149 00:07:02,490 --> 00:07:04,590 Tal vez estoy sin mirar a suficientes dígitos. 150 00:07:04,590 --> 00:07:08,580 Entonces, ¿por qué no decir dos 0.2 para ver dos decimales en lugar de uno solo. 151 00:07:08,580 --> 00:07:11,810 Déjame volver a mi ventana de terminal aquí y golpeó un par de veces para 152 00:07:11,810 --> 00:07:12,840 ver a mi historia. 153 00:07:12,840 --> 00:07:15,910 No se debe hacer cero flotador otra vez, y luego hacia arriba otra vez. 154 00:07:15,910 --> 00:07:17,730 Y ahora entrar. 155 00:07:17,730 --> 00:07:20,000 >> Y ahora estoy bastante seguro de que esto está mal. 156 00:07:20,000 --> 00:07:23,030 Y lo que podía hacer tres y cuatro, y estoy probablemente va a seguir viendo a ceros. 157 00:07:23,030 --> 00:07:24,880 Entonces, ¿dónde está el error? 158 00:07:24,880 --> 00:07:27,910 Una dividido por 10 debe ser 0,1. 159 00:07:27,910 --> 00:07:30,310 Alguien quiere tomar una puñalada en lo la cuestión fundamental es? 160 00:07:30,310 --> 00:07:32,400 ¿Sí? 161 00:07:32,400 --> 00:07:33,420 Los dos son números enteros. 162 00:07:33,420 --> 00:07:33,920 ¿Y qué? 163 00:07:33,920 --> 00:07:37,820 Así que con uno dividido por 10, que es lo que hago en la aritmética. 164 00:07:37,820 --> 00:07:41,185 Y consigo 0.1. 165 00:07:41,185 --> 00:07:41,660 >> Sí. 166 00:07:41,660 --> 00:07:43,240 Y así es en verdad esa cuestión. 167 00:07:43,240 --> 00:07:46,700 Cuando usted toma un entero en un ordenador y lo divides por otro número entero, 168 00:07:46,700 --> 00:07:50,430 el ordenador por defecto va a suponga que desea un entero. 169 00:07:50,430 --> 00:07:54,620 El problema, sin embargo, por supuesto, es 0,1 que no es un número entero. 170 00:07:54,620 --> 00:07:55,680 Es un número real. 171 00:07:55,680 --> 00:07:59,610 Y así lo hace la computadora por por defecto es simplemente tira a la basura 172 00:07:59,610 --> 00:08:01,070 todo después del punto decimal. 173 00:08:01,070 --> 00:08:03,380 No redondear hacia arriba o abajo en sí. 174 00:08:03,380 --> 00:08:06,480 Simplemente tira a la basura todo lo después del punto decimal. 175 00:08:06,480 --> 00:08:07,430 Y ahora que eso tiene sentido. 176 00:08:07,430 --> 00:08:09,740 Porque ahora estamos claramente izquierda con cero. 177 00:08:09,740 --> 00:08:10,250 >> Pero espere un minuto. 178 00:08:10,250 --> 00:08:11,840 No estoy viendo a un cero int. 179 00:08:11,840 --> 00:08:14,910 En realidad estoy viendo 0.00. 180 00:08:14,910 --> 00:08:16,340 Entonces, ¿cómo conciliar esto ahora? 181 00:08:16,340 --> 00:08:22,850 Si uno dividido por 10 es igual a cero, pero estoy ver 0.00, ¿dónde está recibiendo 182 00:08:22,850 --> 00:08:24,250 convertida de nuevo a un número real? 183 00:08:24,250 --> 00:08:25,500 Sí. 184 00:08:25,500 --> 00:08:29,850 185 00:08:29,850 --> 00:08:30,630 Exactamente. 186 00:08:30,630 --> 00:08:35,600 >> Así que aquí, en la línea cinco, cuando en realidad almacenar que 0,1, que es luego 187 00:08:35,600 --> 00:08:39,549 truncado a cero, en el interior de un flotador, eso es efectivamente equivalente a 188 00:08:39,549 --> 00:08:42,100 almacenamiento, no como un int, pero, de hecho, como un flotador. 189 00:08:42,100 --> 00:08:46,540 Por otra parte, estoy a continuación, utilizando printf para imprimir explícitamente ese número a dos 190 00:08:46,540 --> 00:08:49,740 decimales a pesar de que hay podría no ser en realidad hay. 191 00:08:49,740 --> 00:08:51,020 >> Así que este tipo de mierda, ¿no? 192 00:08:51,020 --> 00:08:53,640 Al parecer, no se puede hacer matemáticas, al menos en este nivel de 193 00:08:53,640 --> 00:08:55,600 de precisión, en un ordenador. 194 00:08:55,600 --> 00:08:56,930 Pero sin duda hay una solución. 195 00:08:56,930 --> 00:09:00,410 ¿Cuál es la solución más simple que podríamos tal vez hacer, aunque sólo sea de forma intuitiva para 196 00:09:00,410 --> 00:09:01,130 solucionar esto? 197 00:09:01,130 --> 00:09:02,380 ¿Sí? 198 00:09:02,380 --> 00:09:04,700 199 00:09:04,700 --> 00:09:06,574 A su vez los números enteros en - 200 00:09:06,574 --> 00:09:06,976 sí. 201 00:09:06,976 --> 00:09:10,420 Aunque no estoy muy seguro de lo que es realmente está pasando aquí, si 202 00:09:10,420 --> 00:09:13,440 fundamentalmente tiene que ver con estos dos siendo ints, bueno, ¿por qué no me 203 00:09:13,440 --> 00:09:18,230 hacer que 10,0, haciendo de este 1.0, vuelva a guardar el archivo. 204 00:09:18,230 --> 00:09:20,990 Permítanme volver a la parte inferior y recompilar. 205 00:09:20,990 --> 00:09:23,030 Permítanme ahora volver a ejecutar. 206 00:09:23,030 --> 00:09:23,420 Y allí - 207 00:09:23,420 --> 00:09:27,690 Ahora, tengo mi décimo representado como 0.10. 208 00:09:27,690 --> 00:09:28,420 >> Está bien. 209 00:09:28,420 --> 00:09:29,220 Así que eso no es malo. 210 00:09:29,220 --> 00:09:31,730 Y permítanme señalar otra manera podríamos haber resuelto esto. 211 00:09:31,730 --> 00:09:35,580 Déjame en realidad lograr la regresión en el tiempo a cuando teníamos esto como uno 212 00:09:35,580 --> 00:09:36,680 décimo hace un momento. 213 00:09:36,680 --> 00:09:40,800 Y déjame seguir adelante y volver a guardar el archivo como un nombre de archivo distinto, sólo para 214 00:09:40,800 --> 00:09:41,750 tener un poco de control. 215 00:09:41,750 --> 00:09:43,450 Así que esa fue la versión uno. 216 00:09:43,450 --> 00:09:45,520 Y ahora déjame ir adelante y hacer una versión más. 217 00:09:45,520 --> 00:09:48,540 Vamos a llamar a esta versión dos indexados cero. 218 00:09:48,540 --> 00:09:51,280 >> Y yo voy a hacer en lugar esto - ¿sabes qué? 219 00:09:51,280 --> 00:09:54,400 Adición de punto cero funciona en este caso. 220 00:09:54,400 --> 00:09:56,060 Pero supongamos que fuera una variable. 221 00:09:56,060 --> 00:09:57,680 Supuesto 10 eran una variable. 222 00:09:57,680 --> 00:10:00,680 En otras palabras, supongamos que yo no podía simplemente codificar 0,0 al final 223 00:10:00,680 --> 00:10:02,340 de esta expresión aritmética. 224 00:10:02,340 --> 00:10:05,820 Bueno, puedo realmente hacer algo paréntesis se llama casting. 225 00:10:05,820 --> 00:10:11,920 Puedo lanzar ese número entero de 10 a un flotador, y puedo lanzar ese número entero de uno a un 226 00:10:11,920 --> 00:10:12,800 flotar, también. 227 00:10:12,800 --> 00:10:17,190 A continuación, la matemática que va a hacer es efectivamente 1.0 dividido por 10.0, 228 00:10:17,190 --> 00:10:19,250 el resultado de que va en f como antes. 229 00:10:19,250 --> 00:10:26,130 Así que si a compilar esto como hacer carrozas 2, y ahora flotadores 2, me sale el mismo 230 00:10:26,130 --> 00:10:27,020 responder, también. 231 00:10:27,020 --> 00:10:29,640 >> Así que este es un ejemplo bastante artificiosa, para resolver este problema 232 00:10:29,640 --> 00:10:31,400 mediante la introducción de colada. 233 00:10:31,400 --> 00:10:34,410 Pero, en general, de fundición va a ser algo muy poderoso, especialmente para 234 00:10:34,410 --> 00:10:38,180 problema fijó dos en el tiempo de una semana, cuando desea convertir un tipo de datos 235 00:10:38,180 --> 00:10:41,800 otro que al final de la día se representan de la misma manera. 236 00:10:41,800 --> 00:10:44,970 Al final del día, todos y cada uno Lo que hemos hablado hasta ahora es 237 00:10:44,970 --> 00:10:46,710 sólo intercepciones debajo de la capucha. 238 00:10:46,710 --> 00:10:48,950 O si eso es demasiado de bajo nivel para tú, que eres más que números 239 00:10:48,950 --> 00:10:49,750 debajo de la capucha. 240 00:10:49,750 --> 00:10:52,850 Incluso los personajes, una vez más, el recuerdo a partir de la semana cero, son números 241 00:10:52,850 --> 00:10:53,990 debajo de la capucha. 242 00:10:53,990 --> 00:10:57,240 >> Lo que quiere decir que puede convertir entre diferentes tipos de números si 243 00:10:57,240 --> 00:10:58,060 son sólo bits. 244 00:10:58,060 --> 00:11:01,020 Podemos convertir entre números y las cartas si son simplemente 245 00:11:01,020 --> 00:11:02,580 bits, y viceversa. 246 00:11:02,580 --> 00:11:07,170 Y echando de esta manera es un mecanismo en la programación que le permite a la fuerza 247 00:11:07,170 --> 00:11:10,970 cambiar un tipo de datos a otro. 248 00:11:10,970 --> 00:11:14,570 Desafortunadamente, esto no es tan sencillo como podría haber gustado. 249 00:11:14,570 --> 00:11:19,220 >> Voy a volver a entrar en los flotadores 1, que era la más simple, más 250 00:11:19,220 --> 00:11:22,830 uno sencillo con 0.0 añade a cada uno. 251 00:11:22,830 --> 00:11:25,260 Y así como un repaso rápido, déjame ir por delante y volver a compilar 252 00:11:25,260 --> 00:11:27,670 esto, hacen carrozas 2 - 253 00:11:27,670 --> 00:11:30,300 lo siento, esto es hacer carrozas 1. 254 00:11:30,300 --> 00:11:32,050 Y ahora vamos a correr carrozas 1. 255 00:11:32,050 --> 00:11:34,810 Y en la parte inferior, el aviso que, efectivamente, me pongo 0.1. 256 00:11:34,810 --> 00:11:36,165 Así, problema resuelto. 257 00:11:36,165 --> 00:11:37,280 >> Pero no todavía. 258 00:11:37,280 --> 00:11:40,000 Ahora voy a ser un poco curioso, y voy a volver a mi 259 00:11:40,000 --> 00:11:41,620 sentencia printf y por ejemplo, ¿sabes qué? 260 00:11:41,620 --> 00:11:44,090 Me gustaría confirmar que esta es realmente una décima parte. 261 00:11:44,090 --> 00:11:47,890 Y yo voy a querer ver esta a, digamos, cinco decimales. 262 00:11:47,890 --> 00:11:48,570 No es un problema. 263 00:11:48,570 --> 00:11:52,020 Cómo cambio el dos a cinco, Yo a compilar con maquillaje. 264 00:11:52,020 --> 00:11:53,770 Me ejecútelo nuevamente como flotadores 1. 265 00:11:53,770 --> 00:11:54,990 Mirando bastante bueno. 266 00:11:54,990 --> 00:11:58,570 Mis comprobaciones de sanidad podría terminar allí, pero Me estoy poniendo un poco más aventurero. 267 00:11:58,570 --> 00:12:00,330 Voy a cambiar 0,5-0,10. 268 00:12:00,330 --> 00:12:03,440 Quiero ver 10 dígitos después el lugar decimal. 269 00:12:03,440 --> 00:12:09,060 >> Y yo voy a seguir adelante y volver a compilar esto y vuelva a ejecutar flota 1. 270 00:12:09,060 --> 00:12:13,060 Yo como que me arrepiento de haber probado este más porque mis matemáticas no es tan 271 00:12:13,060 --> 00:12:14,320 corregir más, parece. 272 00:12:14,320 --> 00:12:15,630 Pero espere un minuto, tal vez eso es sólo una casualidad. 273 00:12:15,630 --> 00:12:17,810 Tal vez el equipo está actuando un poco extraño. 274 00:12:17,810 --> 00:12:21,810 Déjenme seguir adelante y hacer 20 puntos decimales y asegurarme de que sé 275 00:12:21,810 --> 00:12:22,540 cómo hacer matemáticas. 276 00:12:22,540 --> 00:12:23,460 Yo sé cómo programar. 277 00:12:23,460 --> 00:12:26,960 Hacer carrozas 1, recompilar, y maldita sea. 278 00:12:26,960 --> 00:12:31,110 Eso es realmente, realmente llegar lejos de la marca. 279 00:12:31,110 --> 00:12:32,490 >> Entonces, ¿qué está pasando aquí? 280 00:12:32,490 --> 00:12:36,050 Intuitivamente, con base en nuestras suposiciones antes sobre el tamaño de los tipos de datos, 281 00:12:36,050 --> 00:12:38,040 lo que debe estar pasando aquí debajo de la capucha? 282 00:12:38,040 --> 00:12:39,290 ¿Sí? 283 00:12:39,290 --> 00:12:43,000 284 00:12:43,000 --> 00:12:43,590 Exactamente. 285 00:12:43,590 --> 00:12:46,480 Si desea que esta mucha precisión, y eso es una diablos de un montón de precisión - 286 00:12:46,480 --> 00:12:48,770 20 números después del punto decimal. 287 00:12:48,770 --> 00:12:51,990 Usted no puede representar una número arbitrario menos que tenga una 288 00:12:51,990 --> 00:12:52,930 número arbitrario de bits. 289 00:12:52,930 --> 00:12:54,190 Pero no lo hacemos. 290 00:12:54,190 --> 00:12:57,200 Para un flotador, sólo tenemos 32 bits. 291 00:12:57,200 --> 00:13:02,260 >> Así que si 32 bits de sólo pueden ser permutados en un manera - al igual que nuestros seres humanos en, etapa 292 00:13:02,260 --> 00:13:05,780 manos arriba o hacia abajo - en un número finito de maneras, sólo hay un número finito 293 00:13:05,780 --> 00:13:08,640 de los números reales se pueden representar con esos bits. 294 00:13:08,640 --> 00:13:10,500 Y así, el equipo con el tiempo se va a tener que 295 00:13:10,500 --> 00:13:11,730 empezar a cortar las esquinas. 296 00:13:11,730 --> 00:13:15,500 El ordenador puede ocultar esos detalles de nosotros por un poco de tiempo. 297 00:13:15,500 --> 00:13:18,880 Pero si empezamos a meter a los números y mirando cada vez más lejos en el 298 00:13:18,880 --> 00:13:23,220 números de salida en todo el número, entonces empezamos a ver que es 299 00:13:23,220 --> 00:13:26,480 en realidad se aproxima a la idea de una décima parte. 300 00:13:26,480 --> 00:13:29,860 >> Y así resulta que, trágicamente, hay un número infinito de números 301 00:13:29,860 --> 00:13:35,060 no podemos representar, precisamente, en un ordenador, por lo menos con un finito 302 00:13:35,060 --> 00:13:38,030 número de bits, un finito cantidad de RAM. 303 00:13:38,030 --> 00:13:41,210 Ahora, por desgracia, esto a veces tiene consecuencias en el mundo real. 304 00:13:41,210 --> 00:13:45,980 Si las personas no llegan a apreciar este o una especie de dar por sentado el hecho de 305 00:13:45,980 --> 00:13:48,310 que su equipo acaba de hacer lo que le dicen que hacer y no hacer 306 00:13:48,310 --> 00:13:51,430 entender estos subyacente detalles de representación - 307 00:13:51,430 --> 00:13:55,290 que, francamente, en algunas lenguas son ocultas para el usuario, a diferencia de en C - 308 00:13:55,290 --> 00:13:56,500 algunas cosas malas pueden suceder. 309 00:13:56,500 --> 00:13:58,650 >> Y lo que pensé que lo haríamos es dar un paso atrás. 310 00:13:58,650 --> 00:14:00,420 Y se trata de una video de ocho minutos. 311 00:14:00,420 --> 00:14:04,200 Se emitió hace unos años, y da penetraciones en realidad lo que puede salir 312 00:14:04,200 --> 00:14:09,290 mal cuando se siguen subestimando estos tipo de detalles en el todo-demasiado 313 00:14:09,290 --> 00:14:10,080 mundo real. 314 00:14:10,080 --> 00:14:12,965 Si pudiéramos apagar las luces durante unos pocos minutos. 315 00:14:12,965 --> 00:14:14,360 >> ALTAVOZ 1: Ahora volvemos a la ingeniería 316 00:14:14,360 --> 00:14:17,160 los desastres en Modern Marvels. 317 00:14:17,160 --> 00:14:18,680 >> Computadoras - 318 00:14:18,680 --> 00:14:21,340 que todos hemos llegado a aceptar la problemas a menudo frustrantes 319 00:14:21,340 --> 00:14:23,170 que van con ellos. 320 00:14:23,170 --> 00:14:27,570 Insectos, virus y fallos de software son pequeños precios para pagar el 321 00:14:27,570 --> 00:14:28,960 conveniencia. 322 00:14:28,960 --> 00:14:32,040 Pero en la alta tecnología y de alta velocidad programa militar y el espacio 323 00:14:32,040 --> 00:14:38,650 aplicaciones, el problema más pequeño puede ser ampliada hacia el desastre. 324 00:14:38,650 --> 00:14:44,480 >> El 4 de junio de 1996, los científicos dispuestos a lanzar un cohete Ariane 5 no tripulado. 325 00:14:44,480 --> 00:14:48,700 Transportaba satélites científicos diseñados para establecer con precisión cómo 326 00:14:48,700 --> 00:14:53,250 interactúa campo magnético de la Tierra con los vientos solares. 327 00:14:53,250 --> 00:14:57,540 El cohete fue construido para el Europeo Agencia Espacial y despegó de su 328 00:14:57,540 --> 00:14:59,906 instalación en la costa de la Guayana Francesa. 329 00:14:59,906 --> 00:15:03,660 >> JACK Ganssle: En unos 37 segundos de iniciado el vuelo, que notó por primera vez 330 00:15:03,660 --> 00:15:04,910 algo iba mal. 331 00:15:04,910 --> 00:15:08,130 Las boquillas se gira sobre un eje en de manera que en realidad no debería. 332 00:15:08,130 --> 00:15:12,380 Alrededor de 40 segundos de vuelo, claramente que el vehículo estaba en problemas. 333 00:15:12,380 --> 00:15:14,400 Y fue entonces cuando se hizo una decisión de destruirlo. 334 00:15:14,400 --> 00:15:18,520 El oficial de seguridad de gama, con enormes tripas, presiona el botón, 335 00:15:18,520 --> 00:15:23,900 explotó el cohete antes de que pudiera convertirse en un peligro para la seguridad pública. 336 00:15:23,900 --> 00:15:27,810 >> ALTAVOZ 1: Este fue el primer viaje del Ariane 5, y su destrucción 337 00:15:27,810 --> 00:15:32,020 se llevó a cabo debido a un defecto incorporado en el software del cohete. 338 00:15:32,020 --> 00:15:33,980 >> JACK Ganssle: El problema en el Ariane era que no había un número 339 00:15:33,980 --> 00:15:36,390 que requiere 64 bits para expresar. 340 00:15:36,390 --> 00:15:39,420 Y querían convertir a un número de 16 bits. 341 00:15:39,420 --> 00:15:43,130 Asumieron que el número nunca fue va a ser muy grande, que la mayoría de 342 00:15:43,130 --> 00:15:46,810 esos dígitos en el de 64 bits número eran ceros. 343 00:15:46,810 --> 00:15:48,270 Estaban equivocados. 344 00:15:48,270 --> 00:15:51,380 >> ALTAVOZ 1: La incapacidad de un software programa para aceptar el tipo de 345 00:15:51,380 --> 00:15:55,350 número generado por otra era en la raíz de la falla. 346 00:15:55,350 --> 00:15:59,970 El desarrollo de software se había convertido en una muy costosa parte de la nueva tecnología. 347 00:15:59,970 --> 00:16:03,980 El cohete Ariane 4 había sido muy éxito, por lo que gran parte del software 348 00:16:03,980 --> 00:16:07,480 creado para ella también era utilizado en el Ariane 5. 349 00:16:07,480 --> 00:16:11,980 >> PHILIP COYLE: El problema básico era que el Ariane 5 fue más rápido, 350 00:16:11,980 --> 00:16:13,720 acelerado más rápido. 351 00:16:13,720 --> 00:16:17,250 Y el software no tenía representaron para eso. 352 00:16:17,250 --> 00:16:20,770 >> ALTAVOZ 1: La destrucción del cohete fue un gran desastre financiero, 353 00:16:20,770 --> 00:16:24,200 todo se debe a un error de software minutos. 354 00:16:24,200 --> 00:16:27,820 Pero esta no era la primera vez datos problemas de conversión habían plagado moderna 355 00:16:27,820 --> 00:16:30,620 la tecnología de cohetes. 356 00:16:30,620 --> 00:16:34,480 >> JACK Ganssle: En 1991, con el inicio de la primera Guerra del Golfo, la Patriot 357 00:16:34,480 --> 00:16:38,610 misiles experimentó una clase similar de un problema de conversión de número. 358 00:16:38,610 --> 00:16:44,910 Como resultado, 28 soldados estadounidenses fueron murieron y unas 100 resultaron heridas 359 00:16:44,910 --> 00:16:48,600 cuando el Patriot, que se suponía para proteger contra Scuds entrantes, 360 00:16:48,600 --> 00:16:51,630 dejado de disparar un misil. 361 00:16:51,630 --> 00:16:55,110 >> ALTAVOZ 1: Cuando Iraq invadió Kuwait y América lanzó Tormenta del Desierto en 362 00:16:55,110 --> 00:17:00,570 principios de 1991, las baterías de misiles Patriot fueron desplegados para proteger a Arabia Saudita 363 00:17:00,570 --> 00:17:04,760 e Israel desde Irak Scud ataques con misiles. 364 00:17:04,760 --> 00:17:09,720 El Patriot es un medio de alcance EE.UU. sistema tierra-aire fabricados por 365 00:17:09,720 --> 00:17:11,569 la empresa Raytheon. 366 00:17:11,569 --> 00:17:16,410 >> Teodoro: Postol: El tamaño de la Patriot interceptor en sí es más o menos 367 00:17:16,410 --> 00:17:17,710 20 pies de largo. 368 00:17:17,710 --> 00:17:20,800 Y pesa alrededor de 2000 libras. 369 00:17:20,800 --> 00:17:22,940 Y lleva una ojiva de alrededor de - 370 00:17:22,940 --> 00:17:24,905 Creo que es alrededor de 150 libras. 371 00:17:24,905 --> 00:17:31,030 Y la propia cabeza de combate es un que tiene alto explosivo 372 00:17:31,030 --> 00:17:33,270 fragmentos alrededor. 373 00:17:33,270 --> 00:17:37,490 La carcasa de la cabeza de combate está diseñada para actuar como perdigones. 374 00:17:37,490 --> 00:17:40,720 >> ALTAVOZ 1: Los misiles se llevan cuatro por contenedor y son transportados 375 00:17:40,720 --> 00:17:43,050 por un semirremolque. 376 00:17:43,050 --> 00:17:47,490 >> PHILIP COYLE: El anti-misiles Patriot sistema vuelve al 377 00:17:47,490 --> 00:17:50,710 menos 20 años. 378 00:17:50,710 --> 00:17:54,350 Fue diseñado originalmente como un misil de defensa aérea para 379 00:17:54,350 --> 00:17:56,190 derribar aviones enemigos. 380 00:17:56,190 --> 00:18:02,490 En la primera Guerra del Golfo, cuando esa guerra llegó, el Ejército quería usarlo 381 00:18:02,490 --> 00:18:05,535 para derribar misiles Scud, no aviones. 382 00:18:05,535 --> 00:18:09,310 La fuerza aérea iraquí no era tanto de un problema. 383 00:18:09,310 --> 00:18:12,450 Pero el Ejército estaba preocupado por misiles Scud. 384 00:18:12,450 --> 00:18:15,950 Y por lo que trató de actualizar la Patriot. 385 00:18:15,950 --> 00:18:18,750 >> ALTAVOZ 1: Interceptar un misil enemigo viajando a mach cinco se 386 00:18:18,750 --> 00:18:20,890 va a ser un reto suficiente. 387 00:18:20,890 --> 00:18:25,590 Pero cuando el Patriot se precipitó en servicio, el Ejército no estaba al tanto de un 388 00:18:25,590 --> 00:18:31,710 Modificación iraquí que hizo su Scuds casi imposible de golpear. 389 00:18:31,710 --> 00:18:35,240 >> Teodoro: Postol: Lo que pasó es los Scud que eran 390 00:18:35,240 --> 00:18:36,570 venir en eran inestables. 391 00:18:36,570 --> 00:18:37,532 Fueron desplazamiento. 392 00:18:37,532 --> 00:18:43,220 La razón de esto era que los iraquíes, en Para conseguir 600 kilometros fuera de un 393 00:18:43,220 --> 00:18:47,530 300 kilómetros de alcance de los misiles, tomó peso de la ojiva delantera. 394 00:18:47,530 --> 00:18:49,290 Hicieron la ojiva más ligero. 395 00:18:49,290 --> 00:18:53,110 Así que ahora la Patriot está tratando venir en el Scud. 396 00:18:53,110 --> 00:18:56,470 Y la mayoría de las veces, la abrumadora mayoría de las veces, lo haría sólo 397 00:18:56,470 --> 00:18:58,730 volar por el Scud. 398 00:18:58,730 --> 00:19:01,760 >> ALTAVOZ 1: Una vez que el sistema Patriot los operadores se dieron cuenta de la Patriot se perdió 399 00:19:01,760 --> 00:19:06,690 su objetivo, que detonaron los Patriots ojiva para evitar posibles 400 00:19:06,690 --> 00:19:10,300 bajas si se permitía a caer al suelo. 401 00:19:10,300 --> 00:19:14,540 >> Teodoro: Postol: Eso fue lo que más personas vieron como grandes bolas de fuego en el cielo 402 00:19:14,540 --> 00:19:20,350 e incomprendido como intercepta de ojivas Scud. 403 00:19:20,350 --> 00:19:23,320 >> ALTAVOZ 1: Aunque en los cielos nocturnos Patriots parecían ser exitosamente 404 00:19:23,320 --> 00:19:27,530 la destrucción de los misiles Scud, en Dhahran allí podría haber error sobre su 405 00:19:27,530 --> 00:19:29,140 rendimiento. 406 00:19:29,140 --> 00:19:34,180 No, el sistema de radar del Patriot perdido pista de un Scud entrante y nunca 407 00:19:34,180 --> 00:19:36,380 puesto en marcha debido a un defecto de software. 408 00:19:36,380 --> 00:19:39,890 409 00:19:39,890 --> 00:19:42,700 >> Fueron los israelíes que descubrió por primera vez que el más largo es el sistema de 410 00:19:42,700 --> 00:19:48,020 estaba en, mayor es la discrepancia de tiempo se convirtió por un reloj 411 00:19:48,020 --> 00:19:50,470 incrustado en el ordenador del sistema. 412 00:19:50,470 --> 00:19:54,640 >> JACK Ganssle: Unas dos semanas antes de la tragedia en Dhahran, los israelíes 413 00:19:54,640 --> 00:19:58,440 reportado al Departamento de Defensa que el sistema estaba perdiendo el tiempo. 414 00:19:58,440 --> 00:20:01,280 Después de ocho horas de funcionamiento, se dieron cuenta de que el sistema está 415 00:20:01,280 --> 00:20:03,530 que se vea con menos precisa. 416 00:20:03,530 --> 00:20:07,710 El Departamento de Defensa respondió contando todas las baterías Patriot 417 00:20:07,710 --> 00:20:10,500 para no dejar los sistemas por un largo tiempo. 418 00:20:10,500 --> 00:20:12,430 Nunca dijeron lo que era hace mucho tiempo. 419 00:20:12,430 --> 00:20:13,330 Ocho horas? 420 00:20:13,330 --> 00:20:13,810 10 horas? 421 00:20:13,810 --> 00:20:14,990 1000 horas? 422 00:20:14,990 --> 00:20:17,150 Nadie sabía. 423 00:20:17,150 --> 00:20:20,220 >> ALTAVOZ 1: La batería Patriot estacionado en el cuartel de Dhahran 424 00:20:20,220 --> 00:20:24,660 y su reloj interno defectuoso había sido en más de 100 horas en la noche de 425 00:20:24,660 --> 00:20:27,470 25 de febrero. 426 00:20:27,470 --> 00:20:31,770 >> JACK Ganssle: Se rastreó el tiempo a una precisión de una décima de segundo. 427 00:20:31,770 --> 00:20:34,480 Ahora, una décima de segundo es un número interesante, ya que no puede ser 428 00:20:34,480 --> 00:20:39,940 expresado en binario exactamente, lo que significa no se puede expresar exactamente en 429 00:20:39,940 --> 00:20:42,500 cualquier computadora digital moderna. 430 00:20:42,500 --> 00:20:46,920 Es difícil de creer, pero utilizar esto como un ejemplo. 431 00:20:46,920 --> 00:20:49,000 Tomemos el número de un tercio. 432 00:20:49,000 --> 00:20:53,150 Una tercera no se puede expresar en decimal exactamente. 433 00:20:53,150 --> 00:20:57,500 Una tercera es 0,333 curso en el infinito. 434 00:20:57,500 --> 00:21:02,270 No hay manera de hacer eso con la precisión absoluta en decimal. 435 00:21:02,270 --> 00:21:05,370 Ese es exactamente el mismo tipo de problema eso sucedió en el Patriot. 436 00:21:05,370 --> 00:21:09,880 Cuanto más tiempo el sistema funcionó, la se convirtió en el peor error de tiempo. 437 00:21:09,880 --> 00:21:13,840 >> ALTAVOZ 1: Después de 100 horas de funcionamiento, el error en el tiempo era sólo 438 00:21:13,840 --> 00:21:16,140 alrededor de un tercio de un segundo. 439 00:21:16,140 --> 00:21:20,800 Pero en términos de focalización de un misil viajando a mach cinco, que dio lugar a 440 00:21:20,800 --> 00:21:24,410 un error de seguimiento de más de 600 metros. 441 00:21:24,410 --> 00:21:27,670 Sería un error fatal para los soldados en Dhahran. 442 00:21:27,670 --> 00:21:33,450 >> Teodoro: Postol: Lo que pasó es un Lanzamiento Scud fue detectado a principios de 443 00:21:33,450 --> 00:21:34,280 satélites de alerta. 444 00:21:34,280 --> 00:21:38,550 Y sabían que el Scud venía en su dirección general. 445 00:21:38,550 --> 00:21:41,000 Ellos no sabían de dónde venía. 446 00:21:41,000 --> 00:21:43,900 >> ALTAVOZ 1: Corresponde ahora al radar componente del sistema Patriot 447 00:21:43,900 --> 00:21:48,910 defensa de Dhahran para localizar y mantener pista del misil enemigo entrante. 448 00:21:48,910 --> 00:21:50,580 >> JACK Ganssle: El radar era muy inteligente. 449 00:21:50,580 --> 00:21:53,770 En realidad, sería realizar un seguimiento de la posición de el Scud y luego predecir donde 450 00:21:53,770 --> 00:21:57,160 probablemente sería la próxima vez el radar envía un pulso a cabo. 451 00:21:57,160 --> 00:21:58,870 Eso se llamaba la puerta de distancia. 452 00:21:58,870 --> 00:22:04,020 >> Teodoro: Postol: Entonces una vez que el Patriot ha pasado decide tiempo suficiente para ir 453 00:22:04,020 --> 00:22:09,420 atrás y comprobar la siguiente ubicación para este objeto detectado, vuelve. 454 00:22:09,420 --> 00:22:14,450 Así que cuando se volvió al mal lugar, a continuación, ve ningún objeto. 455 00:22:14,450 --> 00:22:18,200 Y se decide que no había objeto, que era una falsa detección, y 456 00:22:18,200 --> 00:22:19,680 gotas de la pista. 457 00:22:19,680 --> 00:22:22,970 >> ALTAVOZ 1: El Scud entrante desapareció desde la pantalla de radar, y 458 00:22:22,970 --> 00:22:26,050 segundos más tarde se estrelló a la fortaleza. 459 00:22:26,050 --> 00:22:31,950 El Scud mató a 28 y fue el último despedido durante la primera Guerra del Golfo. 460 00:22:31,950 --> 00:22:37,700 Trágicamente, el software actualizado llegó en Dhahran el día siguiente. 461 00:22:37,700 --> 00:22:41,800 La falla de software se ha fijado, cerrando un capítulo en la conflictiva 462 00:22:41,800 --> 00:22:43,690 la historia de los misiles Patriot. 463 00:22:43,690 --> 00:22:46,780 464 00:22:46,780 --> 00:22:50,710 >> Patriot es en realidad un acrónimo para Phased array de seguimiento 465 00:22:50,710 --> 00:22:51,960 Intercepción de Target. 466 00:22:51,960 --> 00:22:54,650 467 00:22:54,650 --> 00:23:00,840 >> DAVID J MALAN: Muy bien, por lo que un ejemplo aleccionador, para estar seguro. 468 00:23:00,840 --> 00:23:03,430 Y, afortunadamente, éstos nivel inferior insectos no son algo que vamos a 469 00:23:03,430 --> 00:23:06,220 normalmente tienen que apreciar, sin duda no con algunos de nuestros 470 00:23:06,220 --> 00:23:07,360 más temprana de los programas. 471 00:23:07,360 --> 00:23:10,450 Más bien, la mayoría de los errores que voy a encuentro será lógico en la naturaleza, 472 00:23:10,450 --> 00:23:12,900 sintáctica en la naturaleza mediante el cual el código simplemente no funciona bien. 473 00:23:12,900 --> 00:23:14,140 Y tú lo sabes muy rápido. 474 00:23:14,140 --> 00:23:16,850 >> Pero sobre todo cuando llegamos a la final del semestre, que va a 475 00:23:16,850 --> 00:23:20,620 vuelto más y más de una posibilidad de realmente pensar mucho sobre el diseño 476 00:23:20,620 --> 00:23:22,960 de sus programas y la subyacente representación 477 00:23:22,960 --> 00:23:24,520 allí, también, de los datos. 478 00:23:24,520 --> 00:23:28,010 Por ejemplo, vamos a introducir MySQL, que es un motor de base de datos populares 479 00:23:28,010 --> 00:23:30,850 que se puede utilizar con los sitios web a almacenar datos en el back-end. 480 00:23:30,850 --> 00:23:34,630 Y usted tendrá que empezar a decidir en Al final del semestre, no sólo lo que 481 00:23:34,630 --> 00:23:38,790 tipos de datos a lo largo de estas líneas para utilizar pero exactamente cuántos bits de usar, 482 00:23:38,790 --> 00:23:42,740 si desea almacenar fechas como fechas y horas como veces, y también 483 00:23:42,740 --> 00:23:46,890 cosas como qué tan grande es lo que quieres de la identificadores únicos a ser para, por ejemplo, los usuarios 484 00:23:46,890 --> 00:23:47,680 en su base de datos. 485 00:23:47,680 --> 00:23:51,210 >> De hecho, si algunos de ustedes han tenido Cuentas de Facebook desde hace bastante tiempo, 486 00:23:51,210 --> 00:23:53,680 y usted sabe cómo acceder a tu ID de usuario - 487 00:23:53,680 --> 00:23:57,930 que a veces se manifiesta en su URL del perfil a menos que haya elegido un 488 00:23:57,930 --> 00:24:02,070 apodo de la URL, o si usted tiene Graph API usadas de Facebook, la 489 00:24:02,070 --> 00:24:05,510 API disponible para el público por el cual se puede pedir Facebook para datos en bruto - 490 00:24:05,510 --> 00:24:07,580 se puede ver lo que su identificación numérica es. 491 00:24:07,580 --> 00:24:10,880 Y hace unos años, Facebook esencialmente tuvo que cambiar el uso de 492 00:24:10,880 --> 00:24:15,980 el equivalente de enteros a la utilización a largo largo, porque con el tiempo ya que los usuarios vienen 493 00:24:15,980 --> 00:24:19,780 e ir a crear un montón de cuentas y cuentas falsas, incluso ellos con mucha facilidad 494 00:24:19,780 --> 00:24:24,630 fueron capaces de agotar algo así como un 4 mil millones de valor posible como un int. 495 00:24:24,630 --> 00:24:28,340 >> Así que más en este tipo de cuestiones en el camino, también. 496 00:24:28,340 --> 00:24:30,750 Muy bien, así que estaba echando. 497 00:24:30,750 --> 00:24:31,670 Esa fue la imprecisión. 498 00:24:31,670 --> 00:24:32,730 Un par de anunciar. 499 00:24:32,730 --> 00:24:35,710 Así secciones comienzan formalmente el próximo Domingo, lunes, martes. 500 00:24:35,710 --> 00:24:39,080 Usted escuchará a través de correo electrónico a finales de este semana en cuanto a su asignación de sección. 501 00:24:39,080 --> 00:24:42,570 Y usted también aquí en ese momento cómo para cambiar su sección si su 502 00:24:42,570 --> 00:24:45,660 horario ha cambiado o su nivel de comodidad ahora ha cambiado. 503 00:24:45,660 --> 00:24:49,380 Mientras tanto P-establecer uno y Hacker uno son debido de este jueves con la opción de 504 00:24:49,380 --> 00:24:52,450 prorrogar este plazo por el especificaciones a viernes 505 00:24:52,450 --> 00:24:53,830 de una manera típica. 506 00:24:53,830 --> 00:24:57,500 >> Se dan cuenta que se incluye con el problema especificaciones establecidas son las instrucciones de 507 00:24:57,500 --> 00:25:02,770 cómo utilizar el aparato CS50, marca, así como algunas herramientas específicas CS50 508 00:25:02,770 --> 00:25:06,540 como el estilo 50, que le puede proporcionar con realimentación dinámicamente en el 509 00:25:06,540 --> 00:25:10,230 calidad de su estilo de código y también comprobar 50, lo que puede ofrecerle 510 00:25:10,230 --> 00:25:13,160 retroalimentación dinámica en cuanto a su corrección de código. 511 00:25:13,160 --> 00:25:16,850 Perdonamos que todavía estamos planchar unos pocos problemas con el registro 50. 512 00:25:16,850 --> 00:25:21,490 Algunos de sus compañeros de clase que se inició alrededor de las cuatro de la mañana del viernes por la noche cuando 513 00:25:21,490 --> 00:25:25,130 la especificación subió han notado desde entonces algunos errores que estamos trabajando 514 00:25:25,130 --> 00:25:29,010 a través de, y disculpas por cualquier persona que ha experimentado frustraciones innecesarias. 515 00:25:29,010 --> 00:25:30,340 La culpa es mía. 516 00:25:30,340 --> 00:25:34,080 Pero vamos a dar seguimiento a la CS50 discutir cuando eso se resuelva. 517 00:25:34,080 --> 00:25:35,700 >> Así que la palabra en sí mismos puntajes. 518 00:25:35,700 --> 00:25:38,990 Así que va a ser una semana o dos antes de que empezar a obtener información sobre los boletines de problemas 519 00:25:38,990 --> 00:25:40,640 porque usted todavía no tiene un compañero de la enseñanza. 520 00:25:40,640 --> 00:25:44,510 Y aun así, vamos a empezar a evaluar el problema C establece antes de que 521 00:25:44,510 --> 00:25:46,970 volver atrás y evaluar cero, por lo que se obtiene más relevante 522 00:25:46,970 --> 00:25:48,150 una retroalimentación más rápida. 523 00:25:48,150 --> 00:25:51,870 Pero, en general, por el plan de estudios, CS50 boletines de problemas se evalúan a lo largo del 524 00:25:51,870 --> 00:25:53,580 después de cuatro ejes - 525 00:25:53,580 --> 00:25:55,760 ámbito de aplicación, corrección, diseño y estilo. 526 00:25:55,760 --> 00:25:59,210 >> Ámbito de aplicación va a ser un número normalmente entre cero y cinco que 527 00:25:59,210 --> 00:26:01,830 capta la cantidad de la pieza que poco apagado. 528 00:26:01,830 --> 00:26:03,750 Normalmente, se desea que esta sea de cinco años. 529 00:26:03,750 --> 00:26:05,300 Usted por lo menos intentado todo. 530 00:26:05,300 --> 00:26:09,330 Y note que es un factor multiplicativo de manera que haciendo sólo una parte de la 531 00:26:09,330 --> 00:26:12,520 conjunto de problemas no es la mejor estrategia. 532 00:26:12,520 --> 00:26:15,610 >> Mientras tanto, más obvio es el importancia de corrección - 533 00:26:15,610 --> 00:26:18,620 simplemente es su programa correcto con respecto a la especificación? 534 00:26:18,620 --> 00:26:21,510 Esto se pondera deliberadamente más pesadamente que los otros dos ejes por una 535 00:26:21,510 --> 00:26:24,450 factor de tres, ya que reconocemos que por lo general va a pasar un 536 00:26:24,450 --> 00:26:28,600 mucho más tiempo a perseguir a algunos errores, conseguir su código para trabajar, entonces usted 537 00:26:28,600 --> 00:26:31,540 son sangría y eligiendo nombres de variables adecuadas y la 538 00:26:31,540 --> 00:26:33,800 similares, que está en el otro extremo del espectro de estilo. 539 00:26:33,800 --> 00:26:36,160 >> Eso no quiere decir que el estilo no es importante, y vamos a predicar la vuelta 540 00:26:36,160 --> 00:26:37,920 tiempo, tanto en las clases teóricas y en las secciones. 541 00:26:37,920 --> 00:26:40,520 Estilo se refiere a la estética de su código. 542 00:26:40,520 --> 00:26:43,980 ¿Ha elegido variables bien nombradas- que son cortos pero algo 543 00:26:43,980 --> 00:26:44,680 descriptivo? 544 00:26:44,680 --> 00:26:47,840 ¿Está su código con sangría como hemos visto en conferencia y de una manera consistente 545 00:26:47,840 --> 00:26:49,070 con el estilo de los 50? 546 00:26:49,070 --> 00:26:51,220 >> Por último es diseño adecuado allí en medio. 547 00:26:51,220 --> 00:26:54,090 El diseño es el más difícil de poner un el dedo en porque es mucho más 548 00:26:54,090 --> 00:26:55,000 subjetiva. 549 00:26:55,000 --> 00:26:58,610 Pero es quizás la más importante de los tres ejes en términos de pedagogía 550 00:26:58,610 --> 00:27:02,050 valor con el tiempo y que este será oportunidad del becario a la enseñanza 551 00:27:02,050 --> 00:27:04,110 proporcionarle retroalimentación cualitativa. 552 00:27:04,110 --> 00:27:08,100 De hecho, en CS50 aunque sí tenemos estas fórmulas y resultados, al final 553 00:27:08,100 --> 00:27:11,350 del día estos son muy deliberadamente muy pequeños cubos - valores puntuales 554 00:27:11,350 --> 00:27:13,460 entre cero y tres y cero y cinco. 555 00:27:13,460 --> 00:27:17,800 Nosotros no tratamos de trazar líneas muy gruesas entre los boletines de problemas o entre 556 00:27:17,800 --> 00:27:21,490 estudiantes, sino más bien se centran tanto como podemos en cualitativo, escritura común a mano 557 00:27:21,490 --> 00:27:25,490 retroalimentación, ya sea escrita a máquina o verbal por parte de su compañero de enseñanza en particular, 558 00:27:25,490 --> 00:27:27,050 usted llegará a conocer muy bien. 559 00:27:27,050 --> 00:27:32,340 >> Pero, en general, esos son los pesos que los diversos ejes tendrán. 560 00:27:32,340 --> 00:27:35,480 Mientras tanto, también, vale la pena tener en importa que usted no debe suponer que un 561 00:27:35,480 --> 00:27:38,870 tres de cada cinco es un 60% y por lo tanto, más o menos en su defecto. 562 00:27:38,870 --> 00:27:41,410 Tres está destinado deliberadamente a ser tipo de medio de la carretera buena. 563 00:27:41,410 --> 00:27:43,480 Si usted está recibiendo tres en tres en el a partir del semestre, eso es 564 00:27:43,480 --> 00:27:46,340 de hecho la intención de ser un buen lugar para comenzar. 565 00:27:46,340 --> 00:27:50,510 Si usted está recibiendo dos, ferias, hay sin duda algo de trabajo para pagar un poco 566 00:27:50,510 --> 00:27:53,250 más atención, para aprovechar de secciones y horas de oficina. 567 00:27:53,250 --> 00:27:54,590 >> Si usted está recibiendo cuatro patas y de cinco en cinco grandes. 568 00:27:54,590 --> 00:27:57,430 Pero en realidad, esperamos ver trayectorias entre los alumnos - muy 569 00:27:57,430 --> 00:28:00,575 individualizado por alumno, pero a partir el semestre aquí en una especie de 570 00:28:00,575 --> 00:28:04,100 los dos a la tres gama pero terminando aquí, en el rango de cuatro a cinco. 571 00:28:04,100 --> 00:28:05,440 Eso es lo que realmente estamos buscando. 572 00:28:05,440 --> 00:28:09,590 Y nosotros mantenemos en mente que el delta que expones entre la semana cero y la semana 573 00:28:09,590 --> 00:28:12,170 12 cuando estoy haciendo notas. 574 00:28:12,170 --> 00:28:16,380 No nos importa en absoluto cómo que justo al comienzo si su 575 00:28:16,380 --> 00:28:19,330 trayectoria es de hecho hacia arriba y fuerte. 576 00:28:19,330 --> 00:28:24,000 >> La honestidad académica - así que me puse el más grave la voz por un momento. 577 00:28:24,000 --> 00:28:28,510 Así que este curso cuenta con la distinción de enviando más estudiantes que cualquier otro 578 00:28:28,510 --> 00:28:30,950 en la historia en el tablero de anuncios, creo. 579 00:28:30,950 --> 00:28:34,220 Hemos perdido la cuenta de la especie en este punto de con qué frecuencia ocurre esto. 580 00:28:34,220 --> 00:28:37,090 Y eso no es porque los estudiantes en el 50 son más deshonesto que su 581 00:28:37,090 --> 00:28:38,690 compañeros de clase en otras partes. 582 00:28:38,690 --> 00:28:42,800 Pero damos cuenta, también, que somos muy buenos en la detección de este tipo de cosas. 583 00:28:42,800 --> 00:28:45,920 >> Y esa es la ventaja de que un clase de informática tiene en que 584 00:28:45,920 --> 00:28:49,110 podemos y hacemos comparar todos los estudiantes boletines de problemas por pares contra cada 585 00:28:49,110 --> 00:28:51,470 otros, no sólo este año pero todos los años anteriores. 586 00:28:51,470 --> 00:28:55,080 Tenemos la capacidad, al igual que los estudiantes en la clase, para Google y para encontrar el código 587 00:28:55,080 --> 00:28:57,440 en sitios como GitHub y foros de discusión. 588 00:28:57,440 --> 00:29:00,840 No hay absolutamente soluciones a CS50 de p-conjuntos flotando allí. 589 00:29:00,840 --> 00:29:02,710 Pero si usted puede encontrarlos, podemos encontrarlos. 590 00:29:02,710 --> 00:29:07,130 Y todo esto está muy automatizado y fácil y triste para nosotros encontrar. 591 00:29:07,130 --> 00:29:10,990 >> Pero quiero destacar, también, que el la política de honestidad académica del curso es 592 00:29:10,990 --> 00:29:13,960 mucho destinado a ser mucho lo contrario de ese espíritu. 593 00:29:13,960 --> 00:29:17,506 De hecho, este año hemos reformulado las cosas en el plan de estudios para ser este, punto 594 00:29:17,506 --> 00:29:19,790 punto punto, con más detalle en el plan de estudios. 595 00:29:19,790 --> 00:29:22,860 Pero el tema principal en el curso realmente es ser razonable. 596 00:29:22,860 --> 00:29:26,160 Reconocemos que existe una significativa cantidad de pedagógica 597 00:29:26,160 --> 00:29:30,550 valor en colaborar, en cierta medida, con compañeros de clase, mediante el cual se 598 00:29:30,550 --> 00:29:33,700 dos o tres o más es de pie en un tablero blanco 599 00:29:33,700 --> 00:29:35,670 pizarras, por así hablar, sus ideas - 600 00:29:35,670 --> 00:29:39,480 escribir pseudocódigo en imágenes, Diagramación lo que debería ser si Mario 601 00:29:39,480 --> 00:29:41,350 tuviera que escribirlo primero en pseudocódigo. 602 00:29:41,350 --> 00:29:43,240 ¿Qué le debo el algoritmo codicioso - 603 00:29:43,240 --> 00:29:46,100 ¿cómo debe comportarse por problema establece una? 604 00:29:46,100 --> 00:29:50,440 >> Y así darse cuenta de que el comportamiento que fomentemos es muy 605 00:29:50,440 --> 00:29:51,470 tanto a lo largo de esas líneas. 606 00:29:51,470 --> 00:29:53,890 Y en el programa, verá una manojo entero de viñetas bajo un 607 00:29:53,890 --> 00:29:57,740 categoría razonable y una no razonable categoría que nos ayuda a ayudar a 608 00:29:57,740 --> 00:30:00,740 envolver su mente alrededor de donde hacemos dibujar esa línea. 609 00:30:00,740 --> 00:30:04,340 Y, en general, una regla decente de pulgar es que si usted está luchando para resolver 610 00:30:04,340 --> 00:30:07,990 algunos errores y tu amigo o compañero de clase se sienta a tu lado, es 611 00:30:07,990 --> 00:30:11,530 razonable que usted le muestre su código y decir, hey, ¿puedes ayudar 612 00:30:11,530 --> 00:30:13,700 Me gustaría saber lo que va mal aquí? 613 00:30:13,700 --> 00:30:17,110 >> Nosotros no suelen comprender el lado opuesto. 614 00:30:17,110 --> 00:30:20,730 No es una respuesta correcta para su amigo o compañero de clase aquí para decir, oh, 615 00:30:20,730 --> 00:30:22,510 basta con mirar en la mina y en la figura hacia fuera de eso. 616 00:30:22,510 --> 00:30:24,400 Eso es una especie de irrazonable. 617 00:30:24,400 --> 00:30:27,750 Pero tener a alguien más, otro cerebro, otro par de ojos mire 618 00:30:27,750 --> 00:30:31,620 su pantalla o vistazo a su código y decir, ¿estás seguro de que quieres 619 00:30:31,620 --> 00:30:32,760 tener un bucle aquí? 620 00:30:32,760 --> 00:30:34,800 O ¿estás seguro de que quieres que coma aquí? 621 00:30:34,800 --> 00:30:37,090 O oh, ese mensaje de error significa esto. 622 00:30:37,090 --> 00:30:39,580 Esos son muy razonables y comportamientos alentados. 623 00:30:39,580 --> 00:30:44,010 >> Los casos a los que estaba aludiendo a anteriormente se reducen a cuando los estudiantes están 624 00:30:44,010 --> 00:30:47,350 a altas horas de la noche haciendo un juicio pobre decisiones y enviar por correo electrónico su código para 625 00:30:47,350 --> 00:30:50,130 otra persona o simplemente diciendo: aquí, es en Dropbox o 626 00:30:50,130 --> 00:30:51,610 Buscar en Google a altas horas de la noche. 627 00:30:51,610 --> 00:30:54,880 Y así me gustaría animar y pedir de ustedes, si usted tiene los inevitables 628 00:30:54,880 --> 00:30:58,450 momentos de tensión, que están chocando en contra de la fecha límite, no tienes fines de 629 00:30:58,450 --> 00:31:01,490 día, ya que es ya el viernes en que punto, enviar por correo electrónico las cabezas de los cursos o 630 00:31:01,490 --> 00:31:02,330 yo directamente. 631 00:31:02,330 --> 00:31:04,790 Diga, escucha, estoy en mi punto de ruptura aquí. 632 00:31:04,790 --> 00:31:06,660 Vamos a tener una conversación y entenderlo. 633 00:31:06,660 --> 00:31:10,400 Recurrir a la web o algún otro no comportamiento razonable no es el 634 00:31:10,400 --> 00:31:13,070 solución, y demasiados de su compañeros de clase ya no están aquí en 635 00:31:13,070 --> 00:31:15,150 campus, debido a que la falta de juicio. 636 00:31:15,150 --> 00:31:17,840 Pero es muy fácil de eludir esa línea. 637 00:31:17,840 --> 00:31:22,950 >> Y aquí está una pequeña imagen para animar que desde Reddit modo que ahora 638 00:31:22,950 --> 00:31:25,720 todo va a estar bien. 639 00:31:25,720 --> 00:31:30,210 >> Así que un resumen rápido, entonces, de donde lo dejamos. 640 00:31:30,210 --> 00:31:33,690 Así que la semana pasada, recordamos que introducimos condiciones, no en scratch 641 00:31:33,690 --> 00:31:34,880 pero en C este tiempo. 642 00:31:34,880 --> 00:31:38,300 Y había una sintaxis nueva, pero Realmente no hay nuevas ideas en sí. 643 00:31:38,300 --> 00:31:42,630 Tuvimos expresiones booleanas que pudimos o junto con dos verticales 644 00:31:42,630 --> 00:31:46,490 bares o y junto con dos los símbolos de unión, diciendo que tanto la izquierda 645 00:31:46,490 --> 00:31:49,990 y el derecho debe ser verdad para este se ejecute. 646 00:31:49,990 --> 00:31:53,150 Luego tuvimos interruptores, que nos parecía en pocas palabras, pero yo propongo son realmente 647 00:31:53,150 --> 00:31:56,830 sólo sintaxis diferente para lograr el mismo tipo de objetivo si conoce de 648 00:31:56,830 --> 00:31:59,270 avanzar en lo que sus casos van a ser. 649 00:31:59,270 --> 00:32:00,160 >> Nos fijamos en los bucles. 650 00:32:00,160 --> 00:32:03,340 Un bucle para es tal vez el más común, o al menos la que las personas 651 00:32:03,340 --> 00:32:05,330 suelen alcanzar instintivamente. 652 00:32:05,330 --> 00:32:08,240 A pesar de que se ve un poco críptico, verás muchos, muchos ejemplos de este 653 00:32:08,240 --> 00:32:11,590 en poco tiempo, ya que tienes ya finales de la semana pasada. 654 00:32:11,590 --> 00:32:14,280 Mientras que los bucles pueden similarmente lograr lo mismo. 655 00:32:14,280 --> 00:32:17,550 Pero si usted quiere hacer cualquier incrementación o actualización de 656 00:32:17,550 --> 00:32:20,230 los valores de variables, que tienen que hacerlo manualmente más que el 657 00:32:20,230 --> 00:32:22,440 para bucle antes permite. 658 00:32:22,440 --> 00:32:25,310 Y luego está el bucle do-while, lo que nos permite hacer algo al 659 00:32:25,310 --> 00:32:28,460 menos una vez, mientras que algo lo demás es cierto. 660 00:32:28,460 --> 00:32:31,550 Y esto es particularmente bueno para programas o para los juegos en los que desea 661 00:32:31,550 --> 00:32:33,810 para solicitar al usuario por algo al menos una vez. 662 00:32:33,810 --> 00:32:37,110 Y luego, si él o ella no es capaz de cooperar, es posible que desee hacerlo 663 00:32:37,110 --> 00:32:38,420 una y otra vez. 664 00:32:38,420 --> 00:32:41,270 >> Con las variables, por su parte, teníamos líneas de código como este, lo que podría 665 00:32:41,270 --> 00:32:41,950 dos líneas. 666 00:32:41,950 --> 00:32:44,830 Usted podría declarar un entero llamado contador, punto y coma. 667 00:32:44,830 --> 00:32:47,660 O simplemente puede declarar y definirlo, por así decirlo. 668 00:32:47,660 --> 00:32:49,950 Darle un valor al mismo tiempo. 669 00:32:49,950 --> 00:32:51,890 >> Y luego, por último, hablamos acerca de las funciones. 670 00:32:51,890 --> 00:32:54,270 Y este es un buen ejemplo de el sentido de que ilustra 671 00:32:54,270 --> 00:32:55,840 dos tipos de funciones. 672 00:32:55,840 --> 00:32:59,030 Uno de ellos es getString (), que, de nuevo, para crear una cadena del usuario. 673 00:32:59,030 --> 00:33:02,040 Pero GetString () es bastante interesante, la medida en que lo hemos utilizado, 674 00:33:02,040 --> 00:33:05,620 porque siempre hemos usado con algo en el lado izquierdo de un 675 00:33:05,620 --> 00:33:06,600 signo igual. 676 00:33:06,600 --> 00:33:09,830 Es decir que GetString () devuelve un valor. 677 00:33:09,830 --> 00:33:11,970 Se devuelve, por supuesto, una cadena. 678 00:33:11,970 --> 00:33:15,130 Y luego en el lado izquierdo, estamos simplemente salvar esa cadena en el interior de un 679 00:33:15,130 --> 00:33:16,580 variable llamada nombre. 680 00:33:16,580 --> 00:33:21,100 >> Esto es diferente, en un sentido, desde printf printf porque, al menos en nuestro 681 00:33:21,100 --> 00:33:23,540 uso aquí, no devuelve nada. 682 00:33:23,540 --> 00:33:24,960 Como acotación al margen, no volver algo. 683 00:33:24,960 --> 00:33:26,380 Simplemente no nos importa lo que es. 684 00:33:26,380 --> 00:33:29,090 Pero tiene lo que hay llamado un efecto secundario. 685 00:33:29,090 --> 00:33:31,840 ¿Y cuál es ese efecto secundario en todos los caso que hemos visto hasta ahora? 686 00:33:31,840 --> 00:33:34,720 Lo que printf hacer? 687 00:33:34,720 --> 00:33:37,780 Se imprime algo a la pantalla, pantallas de texto o números, o algo 688 00:33:37,780 --> 00:33:38,380 en la pantalla. 689 00:33:38,380 --> 00:33:41,170 Y eso es sólo considerado como un efecto secundario porque en realidad no es la entrega 690 00:33:41,170 --> 00:33:41,900 de nuevo a mí. 691 00:33:41,900 --> 00:33:44,770 No es una respuesta dentro de las un cuadro negro que puedo entonces 692 00:33:44,770 --> 00:33:46,130 meter la mano en y agarrar. 693 00:33:46,130 --> 00:33:49,160 Es sólo que lo hace por su propia cuenta, y mucho como Colton estaba conectado a esta 694 00:33:49,160 --> 00:33:52,560 cuadro negro la semana pasada, y de alguna manera por arte de magia se dibujo en el tablero 695 00:33:52,560 --> 00:33:54,500 sin mí realmente involucrado. 696 00:33:54,500 --> 00:33:55,560 Eso sería un efecto secundario. 697 00:33:55,560 --> 00:33:59,100 Pero si en realidad tenía que llegar de vuelta en aquí y decir, ah, aquí está la cadena 698 00:33:59,100 --> 00:34:02,040 por parte del usuario, que haría ser un valor de retorno. 699 00:34:02,040 --> 00:34:05,650 >> Y hasta ahora sólo hemos utilizado las funciones que otras personas han escrito. 700 00:34:05,650 --> 00:34:09,219 Pero en realidad podemos hacer estas tipo de cosas nosotros mismos. 701 00:34:09,219 --> 00:34:12,730 Así que voy a ir a la Aparato CS50 de nuevo. 702 00:34:12,730 --> 00:34:16,020 Déjenme cerrar la pestaña que tenía abierto hace un momento. 703 00:34:16,020 --> 00:34:18,530 Y déjame seguir adelante y crear un nuevo archivo. 704 00:34:18,530 --> 00:34:22,400 Y yo voy a seguir adelante y llamar a esto una positive.c. 705 00:34:22,400 --> 00:34:24,770 Así que lo que quiero hacer algo con números positivos aquí. 706 00:34:24,770 --> 00:34:27,219 Así que voy a seguir adelante y hacer int - 707 00:34:27,219 --> 00:34:28,000 lo siento - 708 00:34:28,000 --> 00:34:31,840 # Include. 709 00:34:31,840 --> 00:34:34,280 No hagamos ese mismo confundir como antes. 710 00:34:34,280 --> 00:34:40,020 Int main (void), rizado abierta corsé, cerrado corchete. 711 00:34:40,020 --> 00:34:41,639 >> Y ahora quiero hacer lo siguiente. 712 00:34:41,639 --> 00:34:44,600 Quiero escribir un programa que insiste en que el usuario da 713 00:34:44,600 --> 00:34:46,770 me entero positivo. 714 00:34:46,770 --> 00:34:50,969 Así que no hay ninguna función GetPositiveInt en la biblioteca CS50. 715 00:34:50,969 --> 00:34:52,610 Sólo hay GetInt (). 716 00:34:52,610 --> 00:34:55,790 Pero eso está bien porque tengo la construcciones con las que puedo imponer un 717 00:34:55,790 --> 00:34:59,360 poco más limitación a ese valor. 718 00:34:59,360 --> 00:35:00,990 Yo podría hacer algo como esto. 719 00:35:00,990 --> 00:35:02,780 >> Así int n - 720 00:35:02,780 --> 00:35:04,920 y si usted está escribiendo a lo largo, sólo se dan cuenta Voy a volver y 721 00:35:04,920 --> 00:35:06,430 cambiar algunas cosas en un momento - 722 00:35:06,430 --> 00:35:09,960 así int n es igual a GetInt (). 723 00:35:09,960 --> 00:35:11,780 Y eso va a poner un int interior del n. 724 00:35:11,780 --> 00:35:13,830 Y permítanme ser una más descriptiva. 725 00:35:13,830 --> 00:35:23,270 Permítanme decir algo así como exijo que usted me da un número entero positivo. 726 00:35:23,270 --> 00:35:23,550 >> Está bien. 727 00:35:23,550 --> 00:35:25,250 Así que un poco de instrucciones. 728 00:35:25,250 --> 00:35:26,270 Y ahora ¿qué puedo hacer? 729 00:35:26,270 --> 00:35:29,840 Bueno, yo ya sabía de mi sencilla condiciones o ramas, al igual que yo 730 00:35:29,840 --> 00:35:36,100 tenido en Scratch, que pudiera decir algo Al igual que si n es menor que o igual a 731 00:35:36,100 --> 00:35:44,460 cero, entonces yo quiero hacer algo como, eso no es positivo. 732 00:35:44,460 --> 00:35:45,560 Y entonces lo que podía hacer - 733 00:35:45,560 --> 00:35:47,310 Bien, pero realmente quiero conseguir ese int. 734 00:35:47,310 --> 00:35:52,020 Así que podría ir hasta aquí y me pude tipo de copiar esto y sangra el siguiente. 735 00:35:52,020 --> 00:35:52,570 Y después, en Aceptar. 736 00:35:52,570 --> 00:35:56,990 Así que si n es menor que o igual a cero a hacer esto. 737 00:35:56,990 --> 00:35:58,900 >> Ahora, ¿qué pasa si el usuario no coopera? 738 00:35:58,900 --> 00:36:01,560 Bueno, entonces me voy a prestado esto aquí. 739 00:36:01,560 --> 00:36:03,130 Y luego voy aquí y aquí y aquí. 740 00:36:03,130 --> 00:36:06,420 Así que esto no es claramente la solución, ¿no? 741 00:36:06,420 --> 00:36:07,810 Porque no hay final a la vista. 742 00:36:07,810 --> 00:36:13,100 Si quiero exigir que el usuario dé me entero positivo, puedo 743 00:36:13,100 --> 00:36:14,150 conseguir realmente el int. 744 00:36:14,150 --> 00:36:15,620 Entonces puedo comprobar que int. 745 00:36:15,620 --> 00:36:18,570 Pero luego quiero verlo de nuevo y comprobar de nuevo y vuelva a comprobar. 746 00:36:18,570 --> 00:36:21,680 Así que, obviamente, ¿cuál es el mejor construir a utilizar aquí? 747 00:36:21,680 --> 00:36:22,840 Muy bien, así que algún tipo de bucle. 748 00:36:22,840 --> 00:36:25,430 >> Así que voy a deshacerme de casi todo esto. 749 00:36:25,430 --> 00:36:27,320 Y quiero conseguir este int al menos una vez. 750 00:36:27,320 --> 00:36:28,890 Así que voy a decir hacer - 751 00:36:28,890 --> 00:36:32,110 y voy a volver a la mientras que en un momento - 752 00:36:32,110 --> 00:36:33,050 ahora, ¿qué? 753 00:36:33,050 --> 00:36:35,860 Yo voy a hacer int n consigue GetInt (). 754 00:36:35,860 --> 00:36:36,080 Aceptar. 755 00:36:36,080 --> 00:36:37,250 Así que eso es bastante bueno. 756 00:36:37,250 --> 00:36:39,750 Y ahora ¿con qué frecuencia Yo quiero hacer esto? 757 00:36:39,750 --> 00:36:45,770 >> Permítanme poner el printf interior del bucle para que pueda exigir una y otra vez, 758 00:36:45,770 --> 00:36:46,740 si es necesario. 759 00:36:46,740 --> 00:36:49,720 ¿Y qué es lo que quiero esta mientras la condición que hacer? 760 00:36:49,720 --> 00:36:53,870 Quiero seguir haciendo esto mientras que lo que es el caso? 761 00:36:53,870 --> 00:36:54,125 Sí. 762 00:36:54,125 --> 00:36:55,390 N es menor o igual a cero. 763 00:36:55,390 --> 00:36:58,180 Así que ya, hemos significativamente limpiado el código arriba. 764 00:36:58,180 --> 00:37:00,700 Hemos prestado una construcción muy simple - el bucle do-while. 765 00:37:00,700 --> 00:37:04,690 Yo he robado sólo las líneas importantes de código que empecé a copiar y 766 00:37:04,690 --> 00:37:05,960 pegar, que no era prudente. 767 00:37:05,960 --> 00:37:09,790 Y ahora me voy a pegar en realidad es aquí y sólo lo hacen una vez. 768 00:37:09,790 --> 00:37:12,990 >> Y ahora, ¿qué es lo que quiero hacer en el el final de este programa? 769 00:37:12,990 --> 00:37:16,810 Sólo voy a decir algo simple como, gracias por el - y 770 00:37:16,810 --> 00:37:18,980 Haré% i para int - 771 00:37:18,980 --> 00:37:23,270 barra invertida n, coma, y ​​luego enchufe n, punto y coma. 772 00:37:23,270 --> 00:37:23,910 >> Está bien. 773 00:37:23,910 --> 00:37:27,290 Así que vamos a ver qué pasa ahora cuando ejecuto este programa. 774 00:37:27,290 --> 00:37:30,600 Voy a seguir adelante y no hacer positivo. 775 00:37:30,600 --> 00:37:30,880 Maldita sea. 776 00:37:30,880 --> 00:37:31,600 Unos pocos errores. 777 00:37:31,600 --> 00:37:32,960 Así que permítanme retroceder hasta la primera. 778 00:37:32,960 --> 00:37:34,020 No trabajar a través de ellos hacia atrás. 779 00:37:34,020 --> 00:37:37,000 Trabajar a través de ellos, de arriba hacia abajo no sea que caen en cascada y sólo 780 00:37:37,000 --> 00:37:38,630 una cosa sea incorrecto. 781 00:37:38,630 --> 00:37:42,532 Declaración implícita de la funcionar GetInt (). 782 00:37:42,532 --> 00:37:43,020 Sí. 783 00:37:43,020 --> 00:37:44,420 Así que no fue suficiente. 784 00:37:44,420 --> 00:37:46,760 Yo como que cometí el mismo error, pero un poco diferente esta vez. 785 00:37:46,760 --> 00:37:51,940 Necesito incluir no sólo stdio.h pero También cs50.h, que incluye la 786 00:37:51,940 --> 00:37:56,770 denominadas declaraciones de get int, que enseñar el aparato, o enseña 787 00:37:56,770 --> 00:37:58,760 C lo GetInt () es. 788 00:37:58,760 --> 00:37:59,550 >> Así que permítanme volver a guardar. 789 00:37:59,550 --> 00:38:02,040 Voy a pasar por alto los errores de otros porque voy a esperar que ellos son 790 00:38:02,040 --> 00:38:05,210 de alguna manera relacionados con el error Ya arreglé. 791 00:38:05,210 --> 00:38:08,710 Así que déjame ir por delante y volver a compilar con hacer positivo, Intro. 792 00:38:08,710 --> 00:38:09,020 Maldita sea. 793 00:38:09,020 --> 00:38:09,985 Tres errores, todavía. 794 00:38:09,985 --> 00:38:12,650 Permítanme desplazo hasta el primero. 795 00:38:12,650 --> 00:38:14,320 Sin usar la variable n. 796 00:38:14,320 --> 00:38:15,850 No hemos visto esto antes. 797 00:38:15,850 --> 00:38:17,200 Y esto, también, es un poco críptico. 798 00:38:17,200 --> 00:38:18,850 Esta es la salida del compilador. 799 00:38:18,850 --> 00:38:23,610 Y lo que puso de relieve la línea allí - positive.c :9:13 - 800 00:38:23,610 --> 00:38:28,960 es decir, se está diciendo en la línea nueve de positive.c, en el carácter 13, 801 00:38:28,960 --> 00:38:31,510 La columna 13, usted hizo este error. 802 00:38:31,510 --> 00:38:34,230 >> Y en particular, se está diciendo me variables sin usar n. 803 00:38:34,230 --> 00:38:35,790 Así que vamos a ver - 804 00:38:35,790 --> 00:38:37,150 línea de nueve. 805 00:38:37,150 --> 00:38:40,430 Estoy usando n en el sentido de que Te lo estoy dando un valor. 806 00:38:40,430 --> 00:38:44,200 Pero lo que el compilador no le gusta es que no me parece usarlo. 807 00:38:44,200 --> 00:38:45,560 Pero espere un minuto, lo estoy usando. 808 00:38:45,560 --> 00:38:48,170 En la línea 11, que estoy usando aquí. 809 00:38:48,170 --> 00:38:52,430 Pero si me desplazo hacia abajo aún más en positive.c :11 - 810 00:38:52,430 --> 00:38:56,230 por lo que en la línea 11, el carácter 12, la compilador de decirme, el uso de 811 00:38:56,230 --> 00:38:58,670 identificador no declarado n. 812 00:38:58,670 --> 00:39:02,760 >> Así que los medios no declarados que tengo no especificado como un 813 00:39:02,760 --> 00:39:04,970 variable con un tipo de datos. 814 00:39:04,970 --> 00:39:05,500 Pero espere un minuto. 815 00:39:05,500 --> 00:39:09,150 Hice exactamente eso en la línea nueve. 816 00:39:09,150 --> 00:39:11,100 Así que alguien está realmente confundido aquí. 817 00:39:11,100 --> 00:39:14,900 Es yo o el compilador porque en línea de nueve, de nuevo, estoy declarando una 818 00:39:14,900 --> 00:39:18,650 int n, y estoy asignándole el valor de retorno de GetInt (). 819 00:39:18,650 --> 00:39:22,930 Entonces estoy usando esa variable n en línea 11 y comprobar si su valor es menor 820 00:39:22,930 --> 00:39:24,050 que o igual a cero. 821 00:39:24,050 --> 00:39:27,430 Pero esto al parecer es malo y rota por qué? 822 00:39:27,430 --> 00:39:30,630 823 00:39:30,630 --> 00:39:32,490 Dilo otra vez? 824 00:39:32,490 --> 00:39:35,690 >> Ah, tengo que declarar n antes entrar en el bucle. 825 00:39:35,690 --> 00:39:36,370 Pero ¿por qué? 826 00:39:36,370 --> 00:39:39,830 Quiero decir, sólo propuso hace poco que está bien para declarar variables 827 00:39:39,830 --> 00:39:43,600 todo en una línea y luego les asigne algún valor. 828 00:39:43,600 --> 00:39:46,790 Una variable global - volvamos a esa idea en un momento. 829 00:39:46,790 --> 00:39:48,690 ¿Por qué quieres que me ponga fuera del bucle? 830 00:39:48,690 --> 00:40:03,170 831 00:40:03,170 --> 00:40:03,830 Lo es. 832 00:40:03,830 --> 00:40:06,780 Exactamente. 833 00:40:06,780 --> 00:40:09,610 >> Así, si bien, poco intuitivo, permítanme resumir. 834 00:40:09,610 --> 00:40:13,510 Cuando se declara n interior del bloque do allí - 835 00:40:13,510 --> 00:40:16,320 específicamente en el interior de esas llaves - 836 00:40:16,320 --> 00:40:19,210 esa variable n tiene lo que hay llamado scope - 837 00:40:19,210 --> 00:40:23,210 sin relación con nuestro sistema de puntuación en el por supuesto - pero tiene un alcance que es 838 00:40:23,210 --> 00:40:25,190 limitado a aquellas llaves. 839 00:40:25,190 --> 00:40:28,460 En otras palabras, por lo general si se declara una variable dentro de un conjunto de 840 00:40:28,460 --> 00:40:33,370 llaves, esa variable sólo existe dentro de esas llaves. 841 00:40:33,370 --> 00:40:37,320 Así que por esa sola lógica, a pesar de que He declarado n en línea nueve, que 842 00:40:37,320 --> 00:40:41,910 desaparece esencialmente de alcance, desaparece de la memoria, por así decirlo, 843 00:40:41,910 --> 00:40:43,370 por el tiempo llegué a la línea 11. 844 00:40:43,370 --> 00:40:47,370 Debido a que la línea 11, por desgracia, es fuera de esas llaves. 845 00:40:47,370 --> 00:40:51,540 >> Así que, lamentablemente, no puedo solucionar este problema que se remonta a lo que hice antes. 846 00:40:51,540 --> 00:40:53,370 Es posible que en un primer momento hacer esto. 847 00:40:53,370 --> 00:40:56,370 Pero lo que eres ahora, no haciendo cíclicamente? 848 00:40:56,370 --> 00:40:58,260 Es obvio que no está recibiendo el int cíclicamente. 849 00:40:58,260 --> 00:41:01,320 Así que podemos dejar la GetInt (), y se ausenten de la GetInt () dentro de la 850 00:41:01,320 --> 00:41:04,420 lazo, porque eso es lo que queremos molestar al usuario y otra vez. 851 00:41:04,420 --> 00:41:08,660 Pero eso no es suficiente para ir hasta la línea, por ejemplo, seis. 852 00:41:08,660 --> 00:41:10,150 Int. n, punto y coma. 853 00:41:10,150 --> 00:41:12,990 No le des un valor todavía, porque usted no necesita por el momento. 854 00:41:12,990 --> 00:41:16,220 >> Pero ahora aquí, aviso - esto sería un error muy fácil. 855 00:41:16,220 --> 00:41:19,440 No quiero que a la sombra de mi anterior declaración de n. 856 00:41:19,440 --> 00:41:22,830 Quiero usar el que n que realmente existe. 857 00:41:22,830 --> 00:41:25,780 Y por lo que ahora en la línea 10, Asigno n un valor. 858 00:41:25,780 --> 00:41:28,580 Sin embargo, en línea de seis, declaro n. 859 00:41:28,580 --> 00:41:32,940 Y así puedo yo o puede que no utilizarlo en la línea 12 ahora? 860 00:41:32,940 --> 00:41:37,120 Puedo porque entre los cuales rizado llaves se declaró n ahora? 861 00:41:37,120 --> 00:41:38,770 El uno aquí en la línea cinco. 862 00:41:38,770 --> 00:41:40,330 Para una aquí en la línea 14. 863 00:41:40,330 --> 00:41:49,770 Así que si ahora hago zoom, guardar el archivo, vaya de nuevo en funcionamiento y hacer positivo, 864 00:41:49,770 --> 00:41:50,820 compilado este momento. 865 00:41:50,820 --> 00:41:51,940 Así que eso es ya el progreso. 866 00:41:51,940 --> 00:41:53,640 Raya vertical. . / Positiva, Intro. 867 00:41:53,640 --> 00:41:56,060 >> Exijo que me das un número entero positivo. 868 00:41:56,060 --> 00:41:57,750 Negativo 1. 869 00:41:57,750 --> 00:41:59,020 Negativo 2. 870 00:41:59,020 --> 00:42:00,680 Negativo 3. 871 00:42:00,680 --> 00:42:01,760 Zero. 872 00:42:01,760 --> 00:42:03,000 Una. 873 00:42:03,000 --> 00:42:05,130 Y gracias por el uno es lo que está ahora impreso. 874 00:42:05,130 --> 00:42:07,400 >> Déjame intentar otra cosa, por curiosidad. 875 00:42:07,400 --> 00:42:09,600 Me ha informado a la entrada un entero. 876 00:42:09,600 --> 00:42:12,870 Pero ¿qué pasa si en vez escribo en cordero? 877 00:42:12,870 --> 00:42:14,460 Así que ahora ve un prompt diferente - 878 00:42:14,460 --> 00:42:15,350 vuelva a intentarlo. 879 00:42:15,350 --> 00:42:17,670 Pero en ninguna parte de mi código Qué escribí reintento. 880 00:42:17,670 --> 00:42:22,320 Así que, presumiblemente, es este reintento pedirá viene, qué le dirías? 881 00:42:22,320 --> 00:42:23,540 Sí, desde GetInt () en sí. 882 00:42:23,540 --> 00:42:26,650 Así que una de las cosas que el personal de la CS50 hace por usted, por lo menos en estos primeros 883 00:42:26,650 --> 00:42:30,400 semana, se nos han escrito una cierta cantidad de comprobación de errores para asegurarse de que si 884 00:42:30,400 --> 00:42:34,260 llame GetInt (), que por lo menos volver a un int del usuario. 885 00:42:34,260 --> 00:42:35,460 Usted no recibirá una cadena. 886 00:42:35,460 --> 00:42:36,440 Usted no recibirá un char. 887 00:42:36,440 --> 00:42:39,660 Usted no va a conseguir algo más en conjunto. 888 00:42:39,660 --> 00:42:40,510 Usted obtendrá un int. 889 00:42:40,510 --> 00:42:41,890 >> Ahora, puede que no sea positivo. 890 00:42:41,890 --> 00:42:42,770 Puede que no sea negativo. 891 00:42:42,770 --> 00:42:44,550 Nosotros no hacemos ninguna garantía en todo eso. 892 00:42:44,550 --> 00:42:48,960 Pero vamos a molestar al usuario que vuelva a intentarlo, reintento, vuelva a intentar hasta que él o ella realmente 893 00:42:48,960 --> 00:42:49,810 coopera. 894 00:42:49,810 --> 00:42:53,085 Del mismo modo, si lo hago 1.23, eso no es un int. 895 00:42:53,085 --> 00:42:58,400 Pero si yo escribo en, digamos, 50, que me da un valor que yo quería. 896 00:42:58,400 --> 00:42:59,050 >> Está bien. 897 00:42:59,050 --> 00:43:01,380 Así que no está mal. 898 00:43:01,380 --> 00:43:04,780 ¿Tiene preguntas sobre lo que acabamos de hacer? 899 00:43:04,780 --> 00:43:07,930 El ser clave para llevar, para ser claros, no tanto el bucle, lo que hemos visto 900 00:43:07,930 --> 00:43:10,880 antes a pesar de que no tenemos realmente utilizado, pero el tema de alcance, donde 901 00:43:10,880 --> 00:43:17,045 las variables sólo pueden ser sólo se puede utilizar dentro de cierto margen especificado. 902 00:43:17,045 --> 00:43:19,830 >> Muy bien, permítanme abordar la sugerencia que hizo previamente, la de un 903 00:43:19,830 --> 00:43:20,860 variable global. 904 00:43:20,860 --> 00:43:24,880 Como acotación al margen, resulta que otra solución a este problema, pero 905 00:43:24,880 --> 00:43:28,880 típicamente una solución incorrecta o una solución mal diseñado, es 906 00:43:28,880 --> 00:43:31,670 declarar la variable como lo que es llamada una variable global. 907 00:43:31,670 --> 00:43:34,610 Ahora estoy un poco de violar mi definición de alcance porque hay 908 00:43:34,610 --> 00:43:37,680 ni llaves en la parte superior y la parte inferior de un archivo. 909 00:43:37,680 --> 00:43:40,190 Pero la implicación de que es que ahora en la línea de cuatro, 910 00:43:40,190 --> 00:43:41,710 n es una variable global. 911 00:43:41,710 --> 00:43:44,460 Y como su nombre lo indica, es sólo accesible por todas partes. 912 00:43:44,460 --> 00:43:45,790 >> Rasguño en realidad tiene estas. 913 00:43:45,790 --> 00:43:48,650 Si ha utilizado una variable, se puede recordar tienes que elegir si es para 914 00:43:48,650 --> 00:43:50,780 este elemento sprite o para todos los sprites. 915 00:43:50,780 --> 00:43:54,270 Bueno, todos los sprites es sólo el más claro manera de decir global. 916 00:43:54,270 --> 00:43:55,520 ¿Sí? 917 00:43:55,520 --> 00:44:09,690 918 00:44:09,690 --> 00:44:10,990 Ah, buena pregunta. 919 00:44:10,990 --> 00:44:14,310 >> Así que recordar que en la primera versión de mi código, cuando incorrectamente 920 00:44:14,310 --> 00:44:17,700 n declarado y definido en la línea de nueve - 921 00:44:17,700 --> 00:44:19,980 Declaré como una variable y yo le di un valor con 922 00:44:19,980 --> 00:44:21,160 el operador de asignación - 923 00:44:21,160 --> 00:44:22,520 esto me dio dos errores. 924 00:44:22,520 --> 00:44:26,560 Uno, el hecho de que no se utilizó N, y dos, que en la línea 11 925 00:44:26,560 --> 00:44:27,770 es sólo que no fue declarada. 926 00:44:27,770 --> 00:44:31,120 Así que lo primero que yo no lo hice abordar en el momento. 927 00:44:31,120 --> 00:44:35,130 No es estrictamente un error declarar una variable pero no la use. 928 00:44:35,130 --> 00:44:38,540 Pero una de las cosas que hemos hecho en el aparato CS50, deliberadamente, 929 00:44:38,540 --> 00:44:43,340 pedagógicamente, es que hemos barrio sube el expectativas de que el compilador para hacer 930 00:44:43,340 --> 00:44:46,970 Asegúrese de que usted está haciendo las cosas, no sólo correctamente, pero en realidad correctamente. 931 00:44:46,970 --> 00:44:51,520 >> Porque si usted está declarando una variable como el uso de n y nunca, o usarla 932 00:44:51,520 --> 00:44:53,700 correctamente, entonces lo está haciendo allí? 933 00:44:53,700 --> 00:44:55,650 Realmente no sirve para nada. 934 00:44:55,650 --> 00:44:58,980 Y es muy fácil con el tiempo, si no configure su propio ordenador en 935 00:44:58,980 --> 00:45:01,960 de esta manera, tener sólo código que tiene pequeños remanentes aquí, los restos allí. 936 00:45:01,960 --> 00:45:04,390 Y luego, meses después, uno mira hacia atrás y usted es como, ¿por qué es esta línea de 937 00:45:04,390 --> 00:45:05,060 codificar allí? 938 00:45:05,060 --> 00:45:07,940 Y si no hay una buena razón, no usted o sus colegas no beneficiarse 939 00:45:07,940 --> 00:45:10,650 en el camino a tener que tropezar con él entonces. 940 00:45:10,650 --> 00:45:12,540 >> Como acotación al margen, ¿dónde está que viene? 941 00:45:12,540 --> 00:45:16,410 Bueno, recuerda que cada vez que compilamos programa, todas estas cosas es 942 00:45:16,410 --> 00:45:17,380 que se está imprimiendo. 943 00:45:17,380 --> 00:45:18,350 Así que vamos a volver a esto. 944 00:45:18,350 --> 00:45:22,230 Pero, de nuevo, hacer es una utilidad que automatiza el proceso de recopilación de 945 00:45:22,230 --> 00:45:24,830 ejecutar el compilador real llamado sonido metálico. 946 00:45:24,830 --> 00:45:27,650 Esta cosa, vamos a ver, finalmente, tiene que ver con la depuración con un especial 947 00:45:27,650 --> 00:45:29,060 programa que se llama el depurador. 948 00:45:29,060 --> 00:45:32,150 Esto tiene que ver con la optimización de la código - más sobre esto en el futuro. 949 00:45:32,150 --> 00:45:33,620 Std = c99 - 950 00:45:33,620 --> 00:45:37,870 esto sólo significa usar la versión de 1999 de C. C ha existido más tiempo que 951 00:45:37,870 --> 00:45:40,830 eso, pero hicieron algunas buenas Hace 10 años los cambios más. 952 00:45:40,830 --> 00:45:42,690 >> Y he aquí los relevantes. 953 00:45:42,690 --> 00:45:45,880 Estamos diciendo a hacer cualquier cosa que antes habría sido una advertencia 954 00:45:45,880 --> 00:45:48,560 un error que impide el estudiante de compilar. 955 00:45:48,560 --> 00:45:51,400 Y medios de pared hacen que para un manojo entero de las cosas, no 956 00:45:51,400 --> 00:45:53,060 sólo en relación con las variables. 957 00:45:53,060 --> 00:45:54,700 Y entonces déjame desplazo a el final de esta línea. 958 00:45:54,700 --> 00:45:56,430 Y esto, también, que finalmente va a volver a. 959 00:45:56,430 --> 00:45:59,040 Esta es, obviamente, el nombre de el archivo que estoy compilando. 960 00:45:59,040 --> 00:46:02,160 Esto recuerda el nombre del archivo Estoy salida como el nombre 961 00:46:02,160 --> 00:46:04,070 de mi programa ejecutable. 962 00:46:04,070 --> 00:46:08,970 Este lcs50 sólo significa usar el CS50 biblioteca, y los ceros y unos que 963 00:46:08,970 --> 00:46:12,390 el personal escribió y compiló antes este año, integrar 964 00:46:12,390 --> 00:46:13,490 ellos en mi programa. 965 00:46:13,490 --> 00:46:16,130 >> Y nadie sabe qué-lm es? 966 00:46:16,130 --> 00:46:18,150 Es la biblioteca de matemáticas, que es justo ahí, incluso si eres 967 00:46:18,150 --> 00:46:19,320 sin hacer nada de matemáticas. 968 00:46:19,320 --> 00:46:22,620 Está provisto sólo de forma automática que nos hacen. 969 00:46:22,620 --> 00:46:26,540 >> Bueno, déjame hacer otro ejemplo aquí mediante la apertura de un nuevo archivo. 970 00:46:26,540 --> 00:46:30,560 Y déjame guardar éste como string.c. 971 00:46:30,560 --> 00:46:37,980 Resulta que mientras hablamos de los datos tipos de hoy, aún hay más 972 00:46:37,980 --> 00:46:40,630 pasando por debajo de la campana lo que hemos visto hasta el momento. 973 00:46:40,630 --> 00:46:42,290 Así que permítanme rápidamente hacer un programa rápido. 974 00:46:42,290 --> 00:46:44,510 Incluya stdio.h. 975 00:46:44,510 --> 00:46:45,730 Y voy a guardar eso. 976 00:46:45,730 --> 00:46:48,110 Y ya sabes, no me dejes hacer el mismo error una y otra vez. 977 00:46:48,110 --> 00:46:50,540 Incluya cs50.h. 978 00:46:50,540 --> 00:46:54,870 Y déjame ir adelante ahora y hacer int main (void). 979 00:46:54,870 --> 00:46:58,790 >> Y ahora simplemente quiero hacer un programa que hace esto - declarar una cadena 980 00:46:58,790 --> 00:47:03,610 llamado s y obtener una cadena desde el usuario. 981 00:47:03,610 --> 00:47:05,820 Y permítanme hacer un poco de instrucciones aquí - 982 00:47:05,820 --> 00:47:09,960 por favor déme una cadena - así el usuario sabe qué hacer. 983 00:47:09,960 --> 00:47:13,190 Y luego aquí abajo por debajo de este, Quiero hacer lo siguiente - 984 00:47:13,190 --> 00:47:16,060 para int i en cero. 985 00:47:16,060 --> 00:47:18,580 Una vez más, los informáticos suelen empezar a contar desde cero, pero que pudimos 986 00:47:18,580 --> 00:47:20,340 hacer que uno si realmente queríamos. 987 00:47:20,340 --> 00:47:27,240 Ahora me voy a hacer i es menor que la longitud de la cadena de s. 988 00:47:27,240 --> 00:47:28,430 Así strlen - 989 00:47:28,430 --> 00:47:29,510 S-T-R-L-E-N - 990 00:47:29,510 --> 00:47:31,650 de nuevo, es concisa porque es más fácil para escribir, a pesar de que se trata de un 991 00:47:31,650 --> 00:47:32,590 poco críptico. 992 00:47:32,590 --> 00:47:35,290 >> Esa es una función que no hemos usado antes, pero, literalmente, hace que - 993 00:47:35,290 --> 00:47:37,810 volverá a mí un número que representa la longitud de la cadena 994 00:47:37,810 --> 00:47:38,690 que el usuario escribió. 995 00:47:38,690 --> 00:47:41,740 Si se escriben en hola, devolvería cinco porque hay cinco 996 00:47:41,740 --> 00:47:42,890 letras en hola. 997 00:47:42,890 --> 00:47:45,390 Entonces, en cada iteración de este bucle, i plus plus. 998 00:47:45,390 --> 00:47:49,170 Así que de nuevo, un estándar de construcción, incluso si usted no está muy cómodo o demasiado 999 00:47:49,170 --> 00:47:50,420 familiarizados con ella todavía. 1000 00:47:50,420 --> 00:47:53,220 >> Pero ahora en cada iteración de este bucle, cuenta de lo que voy a hacer. 1001 00:47:53,220 --> 00:47:56,690 Quiero seguir adelante y de impresión un solo personaje - 1002 00:47:56,690 --> 00:47:59,940 por lo que la barra invertida% c n en una nueva línea. 1003 00:47:59,940 --> 00:48:00,990 Y luego, ya sabes lo que quiero hacer? 1004 00:48:00,990 --> 00:48:05,090 Cualquiera que sea la palabra es que el usuario en, como hola, Quiero imprimir 1005 00:48:05,090 --> 00:48:09,530 H-E-L-L-O, un carácter por línea. 1006 00:48:09,530 --> 00:48:13,080 En otras palabras, yo quiero entrar en el caracteres individuales de una cadena, 1007 00:48:13,080 --> 00:48:16,770 por el cual hasta ahora una cadena tiene sólo sido una secuencia de caracteres. 1008 00:48:16,770 --> 00:48:21,690 >> Y resulta que yo puedo hacer s, soporte, i, corchete de cierre, cerca 1009 00:48:21,690 --> 00:48:23,580 paréntesis, punto y coma. 1010 00:48:23,580 --> 00:48:25,640 Y yo tengo que hacer una cosa más. 1011 00:48:25,640 --> 00:48:30,570 Está en un archivo llamado string.h que strlen se declara. 1012 00:48:30,570 --> 00:48:33,190 Así que si quiero usar esa función, Tengo que decirle al compilador, 1013 00:48:33,190 --> 00:48:34,450 esperar para usarlo. 1014 00:48:34,450 --> 00:48:37,040 Ahora voy a seguir adelante y hacer el programa llamado cadena. 1015 00:48:37,040 --> 00:48:39,150 Dot, barra, cadena. 1016 00:48:39,150 --> 00:48:40,130 >> Por favor, dame una cadena. 1017 00:48:40,130 --> 00:48:40,900 Voy a seguir adelante y escribe. 1018 00:48:40,900 --> 00:48:43,040 Hola, en mayúsculas, Intro. 1019 00:48:43,040 --> 00:48:47,390 Y ahora noto He impreso este un carácter después de la otra. 1020 00:48:47,390 --> 00:48:51,450 Así que el nuevo detalle aquí es que una cadena, al final del día, puede ser 1021 00:48:51,450 --> 00:48:54,810 visitada por medio de su individuo personajes mediante la introducción de la plaza 1022 00:48:54,810 --> 00:48:55,840 notación de corchetes. 1023 00:48:55,840 --> 00:48:59,090 Y eso es porque una cadena debajo el capó es de hecho una secuencia de 1024 00:48:59,090 --> 00:48:59,810 personajes. 1025 00:48:59,810 --> 00:49:02,010 Pero lo bueno de ellos es en la memoria RAM de su computadora - 1026 00:49:02,010 --> 00:49:05,300 Mac, PC, lo que sea - son literalmente, espalda con espalda a la espalda - 1027 00:49:05,300 --> 00:49:06,225 H-E-L-L-O - 1028 00:49:06,225 --> 00:49:09,920 a nivel individual, adyacente bytes en la memoria. 1029 00:49:09,920 --> 00:49:13,210 >> Así que si usted desea conseguir en la octava tales bytes, que en este bucle serían 1030 00:49:13,210 --> 00:49:16,900 cero soporte, soporte de uno, soporte de dos, soporte de tres, cuatro bracket - 1031 00:49:16,900 --> 00:49:18,890 eso es cero indexados hasta cinco - 1032 00:49:18,890 --> 00:49:23,330 que va a imprimir H-E-L-L-O en su propia línea. 1033 00:49:23,330 --> 00:49:26,320 >> Ahora, como un bromista, deja que te la muestro tipo de cosas que finalmente va a ser 1034 00:49:26,320 --> 00:49:31,950 capaz de comprender, por lo menos con un poco de cerca buscando. 1035 00:49:31,950 --> 00:49:35,610 Por un lado, lo que incluye en la actualidad de ejemplos, si lo desea, es en realidad 1036 00:49:35,610 --> 00:49:38,300 una de las primeras fugas de la cárcel para el iPhone. 1037 00:49:38,300 --> 00:49:40,800 Jailbreak significa descifrar el teléfono así que puedes usarlo en un 1038 00:49:40,800 --> 00:49:43,380 diverso portador o instalar su propio software. 1039 00:49:43,380 --> 00:49:45,660 Y te darás cuenta de que esto parece completamente críptica, más probable. 1040 00:49:45,660 --> 00:49:46,520 Pero mira esto. 1041 00:49:46,520 --> 00:49:50,420 Al parecer, el iPhone estaba roto con un bucle, una condición if, else 1042 00:49:50,420 --> 00:49:52,580 condiciones, un manojo de funciones nosotros no hemos visto. 1043 00:49:52,580 --> 00:49:54,230 >> Y de nuevo, no lo hará en primera vista, probablemente 1044 00:49:54,230 --> 00:49:55,620 entender cómo esto está funcionando. 1045 00:49:55,620 --> 00:49:58,940 Pero todo lo que tenemos suerte de tomar por sentado en nuestra vida moderna 1046 00:49:58,940 --> 00:50:02,040 en realidad tiende a reducir, incluso a algunos de estos fundamentos que hemos estado 1047 00:50:02,040 --> 00:50:02,820 mirar. 1048 00:50:02,820 --> 00:50:06,680 Déjenme seguir adelante y abrir una otro programa, holloway.c. 1049 00:50:06,680 --> 00:50:08,970 Así que esto, también, es algo que en realidad no debería saber. 1050 00:50:08,970 --> 00:50:12,440 Incluso ninguno de los empleados o que pudiera probablemente resolver esto mirando 1051 00:50:12,440 --> 00:50:15,450 porque éste era el código de otra que fue presentado a lo que es 1052 00:50:15,450 --> 00:50:19,630 históricamente conocido como un ofuscado C concurso, en el que escribe un programa 1053 00:50:19,630 --> 00:50:24,670 que compila y se ejecuta, pero es tan condenadamente críptica ningún ser humano puede entender lo que 1054 00:50:24,670 --> 00:50:27,530 que va a hacer hasta que que en realidad ejecuta. 1055 00:50:27,530 --> 00:50:29,940 >> Así que de hecho, si nos fijamos en este código, veo un interruptor. 1056 00:50:29,940 --> 00:50:30,870 Veo principal. 1057 00:50:30,870 --> 00:50:33,800 Veo estos corchetes implicando algún tipo de una matriz. 1058 00:50:33,800 --> 00:50:35,970 ¿Alguien quiere adivinar lo que este programa en realidad 1059 00:50:35,970 --> 00:50:37,220 lo hace si se me acaban Holloway? 1060 00:50:37,220 --> 00:50:39,940 1061 00:50:39,940 --> 00:50:40,750 Sí. 1062 00:50:40,750 --> 00:50:43,050 Aceptar. 1063 00:50:43,050 --> 00:50:44,690 Bien hecho. 1064 00:50:44,690 --> 00:50:48,090 Así que sólo el personal y yo no puedo entender lo que estas cosas hacen. 1065 00:50:48,090 --> 00:50:51,670 >> Y ahora, por último, deja que me vaya por delante y abrir otro programa. 1066 00:50:51,670 --> 00:50:53,440 Éste - 1067 00:50:53,440 --> 00:50:55,550 de nuevo, vamos a hacer el código fuente disponible en línea - éste es sólo 1068 00:50:55,550 --> 00:50:57,480 tipo de agradable a la vista. 1069 00:50:57,480 --> 00:50:59,750 Todo lo que hicieron es presionar el barra espaciadora un poco. 1070 00:50:59,750 --> 00:51:01,320 Pero este es el código real. 1071 00:51:01,320 --> 00:51:04,790 Así que si usted piensa que eso es bastante, si realmente ejecutar este en el símbolo, 1072 00:51:04,790 --> 00:51:08,970 finalmente verá lo que podría hacer cosas como esta. 1073 00:51:08,970 --> 00:51:14,008 >> Así que os dejamos en esa nota y nos vemos el miércoles. 1074 00:51:14,008 --> 00:51:18,440 >> [REPRODUCCIÓN DE MÚSICA] 1075 00:51:18,440 --> 00:51:23,380 >> ALTAVOZ 2: En la siguiente CS50, la TFS escenifican un motín. 1076 00:51:23,380 --> 00:51:24,112 >> ALTAVOZ 3: Ahí está. 1077 00:51:24,112 --> 00:51:25,362 Sácalo! 1078 00:51:25,362 --> 00:51:29,912 1079 00:51:29,912 --> 00:51:32,074 >> [REPRODUCCIÓN DE MÚSICA]