1 00:00:07,590 --> 00:00:09,920 [Powered by Google Translate] DAVID J. MALAN: Muy bien, este es CS50 y es esta la 2 00:00:09,920 --> 00:00:15,250 final de la semana 1, así que las tarjetas están en estudio y el número total de 3 00:00:15,250 --> 00:00:18,640 compañeros de clase que tiene este año es de 745. 4 00:00:18,640 --> 00:00:20,920 Y estamos muy contentos de tener a muchos de ustedes en el curso 5 00:00:20,920 --> 00:00:23,680 este semestre, pero a pesar de este curso es tan grande, 6 00:00:23,680 --> 00:00:26,090 darse cuenta de que se trata de estas cosas como almuerzos viernes, como 7 00:00:26,090 --> 00:00:29,020 las horas de oficina, secciones 15-persona, y que así sucesivamente 8 00:00:29,020 --> 00:00:30,590 son realmente la intención de crear este más íntimo 9 00:00:30,590 --> 00:00:31,140 ambiente. 10 00:00:31,140 --> 00:00:34,070 Así que, aunque es posible que se reúnen una o dos veces por semana, aquí en 11 00:00:34,070 --> 00:00:36,420 Sanders, sabemos que gran parte de su experiencia en este curso 12 00:00:36,420 --> 00:00:39,330 será mucho estar en manos de al lado de sus compañeros de clase 13 00:00:39,330 --> 00:00:40,730 y el personal docente. 14 00:00:40,730 --> 00:00:43,960 >> Así que aquí vamos, Fall 2012. 15 00:00:43,960 --> 00:00:47,530 Así que recordar que la última vez que terminó con una nota de 16 00:00:47,530 --> 00:00:50,460 imprecisión, hablando de la representación de los números. 17 00:00:50,460 --> 00:00:52,950 Y nos fijamos en uno de los fracasos que ocurrieron en el 18 00:00:52,950 --> 00:00:54,920 mundo real, cuando se trataba de malentendidos 19 00:00:54,920 --> 00:00:55,890 cómo funcionan las computadoras. 20 00:00:55,890 --> 00:00:58,590 Bueno, hoy vamos a revisar otra de esas ideas 21 00:00:58,590 --> 00:01:01,410 así como continuar con nuestra discusión del cliente CS50 22 00:01:01,410 --> 00:01:04,090 y C, y lo que significa realmente para programar. 23 00:01:04,090 --> 00:01:06,430 Pero en primer lugar, a sólo un par de anuncios torbellino. 24 00:01:06,430 --> 00:01:08,930 >> Secciones comenzará este domingo, y la primera semana es siempre un 25 00:01:08,930 --> 00:01:11,030 poco de un comienzo rápido, ya que sólo se puso en 26 00:01:11,030 --> 00:01:12,620 los formularios de la sección. 27 00:01:12,620 --> 00:01:14,450 Estamos haciendo lo mismo, ahora, con los compañeros docentes, ahora 28 00:01:14,450 --> 00:01:16,410 que conozcan sus horarios, por lo que estamos apuntando, por 29 00:01:16,410 --> 00:01:19,380 Sábado por la mañana, hacer un seguimiento con usted con su sección 30 00:01:19,380 --> 00:01:20,760 asignación y TF. 31 00:01:20,760 --> 00:01:22,770 Darse cuenta de que van a empezar al día siguiente, domingo 32 00:01:22,770 --> 00:01:24,510 o el lunes o el martes. 33 00:01:24,510 --> 00:01:27,730 Y luego vamos a acomodar cambios de sección a medida que surjan 34 00:01:27,730 --> 00:01:28,690 en los días por venir. 35 00:01:28,690 --> 00:01:31,590 Las horas de oficina, por su parte, son, de nuevo, esta noche, 8 PM a 11, en 36 00:01:31,590 --> 00:01:33,740 Annenberg, así como mañana por la noche. 37 00:01:33,740 --> 00:01:36,150 A pesar de que los conjuntos de problemas se deben generalmente los jueves 38 00:01:36,150 --> 00:01:39,020 al mediodía, se da cuenta que tiene un máximo de cinco días de retraso para gastar, 39 00:01:39,020 --> 00:01:42,430 por lo tanto, la disponibilidad de horas de oficina el jueves si 40 00:01:42,430 --> 00:01:45,930 dinero en efectivo en uno de esos días de retraso y, por lo tanto presentar, 41 00:01:45,930 --> 00:01:47,070 algo el viernes. 42 00:01:47,070 --> 00:01:50,850 Permítanme sugerir que Scratch es una de las más divertidas, entre los 43 00:01:50,850 --> 00:01:52,390 el juego de llaves más bajas problema. 44 00:01:52,390 --> 00:01:55,160 Y me gustaría colgar en esos días finales, estratégicamente, sólo 45 00:01:55,160 --> 00:01:57,380 para más tarde en el semestre en que la vida empieza a ponerse en el camino 46 00:01:57,380 --> 00:01:59,470 con exámenes parciales y otras clases. 47 00:01:59,470 --> 00:02:01,580 Serie de problemas 1, por su parte, se publicarán en el curso de 48 00:02:01,580 --> 00:02:06,080 sitio web de este viernes, como se verá en la caminata del curso 49 00:02:06,080 --> 00:02:08,789 a través de video, que será filmado a las 2:30 PM el viernes 50 00:02:08,789 --> 00:02:11,890 y luego publicado en línea por el día siguiente. 51 00:02:11,890 --> 00:02:13,880 >> Así que terminamos el lunes. 52 00:02:13,880 --> 00:02:15,450 Quiero - en realidad, una nota aquí. 53 00:02:15,450 --> 00:02:18,870 Debido a que las clases - porque Sanders no es exactamente prestan 54 00:02:18,870 --> 00:02:22,220 sí a lo casual Q & A de vuelta y vuelta terriblemente bueno, estamos 55 00:02:22,220 --> 00:02:24,030 va a intentar algo un poco nuevo este año, en el que 56 00:02:24,030 --> 00:02:26,160 si usted no se siente cómodo levantar la mano o simplemente 57 00:02:26,160 --> 00:02:28,800 prefieren no levantar la mano en una habitación como esta, 58 00:02:28,800 --> 00:02:30,710 vamos a tener algunos de los compañeros docentes y las entidades emisoras 59 00:02:30,710 --> 00:02:33,260 dotación cs50.net/discuss durante la conferencia. 60 00:02:33,260 --> 00:02:35,440 Así que si usted tiene una pregunta, porque yo estaba completamente 61 00:02:35,440 --> 00:02:37,510 claro acerca de algo o tienes curiosidad sobre algunos 62 00:02:37,510 --> 00:02:39,640 tema, trate de publicar allí. 63 00:02:39,640 --> 00:02:42,670 Marque con una etiqueta de Clase, y vamos a hacer todo lo posible 64 00:02:42,670 --> 00:02:45,430 hoy y la próxima semana - nos volveremos probar esto - para alinear 65 00:02:45,430 --> 00:02:47,990 ya sea por medios electrónicos, en línea, o si se siente como que debería 66 00:02:47,990 --> 00:02:50,430 realmente se traten de forma masiva, uno de los compañeros docentes o de 67 00:02:50,430 --> 00:02:52,080 CAs levantar la mano y pedir 68 00:02:52,080 --> 00:02:53,480 anónimamente en su nombre. 69 00:02:53,480 --> 00:02:55,650 Así que vamos a darle una oportunidad y ver lo bien que funciona. 70 00:02:55,650 --> 00:02:58,540 Pero, por supuesto, continuar elevando las manos como usted quisiera. 71 00:02:58,540 --> 00:03:11,420 >> Así última vez que reveló que el 10% o un décimo-no es, en 72 00:03:11,420 --> 00:03:13,840 hecho, 0,1, como se les enseñó hace muchos años. 73 00:03:13,840 --> 00:03:15,390 Es de hecho, un valor como este. 74 00:03:15,390 --> 00:03:16,970 Pero eso no es totalmente cierto, ¿no? 75 00:03:16,970 --> 00:03:19,585 Sólo tenemos esta restricción en los ordenadores por lo que, si 76 00:03:19,585 --> 00:03:22,450 sólo tiene una cantidad finita de memoria, RAM, o más 77 00:03:22,450 --> 00:03:25,220 específicamente bits, bueno, hay sólo un número finito 78 00:03:25,220 --> 00:03:26,980 de cosas que puede representar. 79 00:03:26,980 --> 00:03:29,780 Por ejemplo, si tenemos el número cero, y queremos 80 00:03:29,780 --> 00:03:32,790 representan en binario, utilizando ocho bits, donde un bit, 81 00:03:32,790 --> 00:03:34,710 de nuevo, es un cero o un uno, podríamos 82 00:03:34,710 --> 00:03:39,240 representarlo como 00000000. 83 00:03:39,240 --> 00:03:41,160 Y eso es un poco innecesariamente prolija. 84 00:03:41,160 --> 00:03:43,700 Al igual que en el sistema decimal en el mundo real, 85 00:03:43,700 --> 00:03:47,040 en general, si desea escribir el número 123, se 86 00:03:47,040 --> 00:03:52,240 humanos probablemente no escribo 00000123 pesar de que, 87 00:03:52,240 --> 00:03:53,940 funcionalmente, que es el mismo número exacto. 88 00:03:53,940 --> 00:03:56,580 Acabamos de caer ceros a la izquierda, por así decirlo. 89 00:03:56,580 --> 00:03:58,270 >> En binario, podemos hacer lo mismo. 90 00:03:58,270 --> 00:04:01,440 Binario y cero, cero y binario es igual a cero. 91 00:04:01,440 --> 00:04:02,870 Usted sólo necesita un único bit. 92 00:04:02,870 --> 00:04:05,020 Pero, de nuevo, la unidad de medida más común en el mundo 93 00:04:05,020 --> 00:04:07,820 de la informática es bytes, ocho bits. 94 00:04:07,820 --> 00:04:09,720 El hecho de que un poco, bastante inútil. 95 00:04:09,720 --> 00:04:12,020 Ocho bits, no terriblemente útiles, pero por lo menos es más 96 00:04:12,020 --> 00:04:14,280 útil que una única unidad de medida. 97 00:04:14,280 --> 00:04:17,100 Así que con ocho bits, por lo general va a representar binario. 98 00:04:17,100 --> 00:04:20,459 Así que aquí tenemos a los números cero, uno, dos, y luego, como 99 00:04:20,459 --> 00:04:24,200 Nate hizo en el video el miércoles pasado, podemos seguir 100 00:04:24,200 --> 00:04:25,940 contando hasta siete, ocho. 101 00:04:25,940 --> 00:04:27,860 Y si usamos más y más bits, se 102 00:04:27,860 --> 00:04:29,880 puede contar hasta el infinito. 103 00:04:29,880 --> 00:04:32,800 Pero si sólo tiene un número finito de estos bits, al igual que 104 00:04:32,800 --> 00:04:35,030 en el caso de cualquier sistema informático, o incluso misiles 105 00:04:35,030 --> 00:04:36,670 sistema, bueno, en realidad sólo tiene un 106 00:04:36,670 --> 00:04:37,900 cantidad finita de precisión. 107 00:04:37,900 --> 00:04:41,290 Así que si quieres para representar el número como 0,1, también, la 108 00:04:41,290 --> 00:04:43,410 equipo tiene que escoger y elegir. 109 00:04:43,410 --> 00:04:45,970 Y si sólo tiene un número finito de números que puede 110 00:04:45,970 --> 00:04:50,490 representan, puede acercarse hasta 0,1 por ti, pero no puede 111 00:04:50,490 --> 00:04:53,730 necesariamente le da exactamente el valor que desee. 112 00:04:53,730 --> 00:04:55,660 Y este es sólo uno de los retos de las computadoras, 113 00:04:55,660 --> 00:04:57,090 debajo de la capucha, por suerte. 114 00:04:57,090 --> 00:04:59,110 >> A medida que avanzamos más en el semestre, éstos nivel inferior 115 00:04:59,110 --> 00:05:02,310 detalles se vuelven mucho menos interesante, pero la duda 116 00:05:02,310 --> 00:05:05,700 aplicación de estas ideas pueden tener un mundo muy real 117 00:05:05,700 --> 00:05:06,760 ramificaciones. 118 00:05:06,760 --> 00:05:08,190 Uno de ellos es una diversión poco. 119 00:05:08,190 --> 00:05:12,150 ¿Cuántos de ustedes han visto la película Space Oficina asombroso? 120 00:05:12,150 --> 00:05:13,620 Si usted no tiene, que es su no oficial 121 00:05:13,620 --> 00:05:14,370 tarea para la semana. 122 00:05:14,370 --> 00:05:16,730 Pero en el espacio de oficina, los becarios en esa película toma 123 00:05:16,730 --> 00:05:19,900 ventaja de precisamente esta idea, pero en realidad robó 124 00:05:19,900 --> 00:05:21,270 desde otra película que podría tener 125 00:05:21,270 --> 00:05:22,760 visto, incluso años antes. 126 00:05:22,760 --> 00:05:24,920 Así que te voy a dar unos segundos de este trailer de 127 00:05:24,920 --> 00:05:27,470 esta película increíble y este es en gran medida 128 00:05:27,470 --> 00:05:28,340 académicamente relevante. 129 00:05:28,340 --> 00:05:30,310 >> [JUEGOS DE VÍDEO] 130 00:05:30,310 --> 00:05:32,240 La verdad es que estoy siendo promovidos. 131 00:05:32,240 --> 00:05:33,360 Puedo programar un virus que rasgará que 132 00:05:33,360 --> 00:05:34,460 colocar a lo grande. 133 00:05:34,460 --> 00:05:35,770 Bueno, ¿cómo funciona? 134 00:05:35,770 --> 00:05:37,836 Cada vez que hay una transacción bancaria donde el interés es 135 00:05:37,836 --> 00:05:40,154 computarizada, hay miles al día, el equipo termina 136 00:05:40,154 --> 00:05:41,040 con estas fracciones de un centavo. 137 00:05:41,040 --> 00:05:43,050 Pero yo no voy a hacer nada ilegal. 138 00:05:43,050 --> 00:05:46,730 Ilegal? Samir, esto es América. 139 00:05:46,730 --> 00:05:48,010 Usted tiene que juro por Dios. 140 00:05:48,010 --> 00:05:51,870 Si nadie sabe sobre esto, pero nosotros, ¿de acuerdo? No hay miembros de la familia, sin 141 00:05:51,870 --> 00:05:52,490 novias, nadie. 142 00:05:52,490 --> 00:05:53,882 [Inaudible]. 143 00:05:53,882 --> 00:05:57,594 No te preocupes, hombre, no se lo diré a nadie. 144 00:05:57,594 --> 00:05:59,680 [Película termina] 145 00:05:59,680 --> 00:06:01,900 >> Muy bien, así que tal vez encontraron esta película mejor que la mayoría 146 00:06:01,900 --> 00:06:05,530 personas aquí, pero, en cualquier caso, el virus que eran 147 00:06:05,530 --> 00:06:06,400 tratando de crear - 148 00:06:06,400 --> 00:06:08,410 y en las películas, en cualquier momento que lo llamaría algo un virus, 149 00:06:08,410 --> 00:06:09,770 que generalmente no es realmente un virus. 150 00:06:09,770 --> 00:06:11,600 Es simplemente un programa que alguien escribió que hacer algo. 151 00:06:11,600 --> 00:06:13,800 Y en este caso, los chicos estaban tratando de escribir un programa 152 00:06:13,800 --> 00:06:16,610 que se aprovecharon de su empresa llamada Innotech de 153 00:06:16,610 --> 00:06:19,740 sistema informático, mediante el cual las computadoras, también, incluso cuando 154 00:06:19,740 --> 00:06:21,350 En relación al dinero, no puede necesariamente 155 00:06:21,350 --> 00:06:23,490 representan el dinero exacto. 156 00:06:23,490 --> 00:06:27,630 Así que, aunque es posible que tenga $ 0.10 en su cuenta bancaria, 157 00:06:27,630 --> 00:06:31,060 0,10, bueno, el equipo realmente puede pensar que usted tiene 158 00:06:31,060 --> 00:06:33,560 esta centavos muchos en su cuenta bancaria. 159 00:06:33,560 --> 00:06:35,750 Y así, lo que estos chicos estaban aspirando a hacer - y 160 00:06:35,750 --> 00:06:38,240 robó la idea, resulta de Superman III, donde 161 00:06:38,240 --> 00:06:41,210 Richard Pryor hizo lo mismo - que eran esencialmente 162 00:06:41,210 --> 00:06:44,880 escribir programas que aspiran a tomar todo el final 163 00:06:44,880 --> 00:06:46,930 números, todas las diminutas fracciones pequeñas, diminutas de 164 00:06:46,930 --> 00:06:50,160 monedas de un centavo, y drenando los fuera a fin de que los seres humanos sólo 165 00:06:50,160 --> 00:06:52,620 pensamiento, oh, es sólo 0,10 dólares allí, pero todos los que 166 00:06:52,620 --> 00:06:54,410 números finales eventualmente se suman. 167 00:06:54,410 --> 00:06:57,490 Así que una idea maravillosa y divertida en la que salió por la culata 168 00:06:57,490 --> 00:06:58,250 película en particular. 169 00:06:58,250 --> 00:07:01,800 >> Pero en el mundo real, también, hay mucho más en relación 170 00:07:01,800 --> 00:07:03,190 implicaciones de este tipo de cosas. 171 00:07:03,190 --> 00:07:05,450 Y una de las razones para sumergirse en el campo de la informática 172 00:07:05,450 --> 00:07:07,620 ciencia es, de nuevo, su aplicabilidad no a la 173 00:07:07,620 --> 00:07:09,740 ciencias de ingeniería solo, pero a sólo 174 00:07:09,740 --> 00:07:10,650 otros campos también. 175 00:07:10,650 --> 00:07:14,760 Así que esta es una mirada menos optimista de lo que puede salir mal, pero 176 00:07:14,760 --> 00:07:17,630 también es bastante abrir los ojos, me parece, cuando se trata de 177 00:07:17,630 --> 00:07:20,760 entender exactamente cómo las tecnologías omnipresentes como 178 00:07:20,760 --> 00:07:22,870 computadoras y la programación o en estos días, 179 00:07:22,870 --> 00:07:23,930 en forma de software. 180 00:07:23,930 --> 00:07:26,500 Así que este próximo clip se trata sólo de seis minutos, sigue 181 00:07:26,500 --> 00:07:30,320 donde lo dejamos la última vez, pero nos permite mirar un poco 182 00:07:30,320 --> 00:07:33,370 más en profundidad a tales de estos temas uno. 183 00:07:33,370 --> 00:07:35,270 Déjame pasar directamente a donde lo dejamos, 184 00:07:35,270 --> 00:07:37,780 que estaba aquí. 185 00:07:37,780 --> 00:07:41,580 Y tenemos la segunda parte de dos, durante unos seis minutos aquí. 186 00:07:41,580 --> 00:07:41,980 >> [PLAY MOVIE] 187 00:07:41,980 --> 00:07:45,430 Plagado tecnología de cohetes modernos. 188 00:07:45,430 --> 00:07:49,280 En 1991, con el inicio de la primera guerra del Golfo, el Patriot 189 00:07:49,280 --> 00:07:51,350 misil experimentado el mismo tipo de 190 00:07:51,350 --> 00:07:52,645 el problema número de conversiones. 191 00:07:52,645 --> 00:07:57,460 Y como resultado, 20 personas, 20 soldados estadounidenses, murieron 192 00:07:57,460 --> 00:08:01,130 y cerca de 100 resultaron heridas, cuando el Patriot, que se suponía 193 00:08:01,130 --> 00:08:03,400 para proteger contra los Scuds entrantes, 194 00:08:03,400 --> 00:08:06,020 no pudo disparar un misil. 195 00:08:06,020 --> 00:08:09,350 >> Cuando Irak invadió Kuwait y Estados Unidos puso en marcha un desierto 196 00:08:09,350 --> 00:08:13,530 Storm a principios de 1991, baterías de misiles Patriot fueron 197 00:08:13,530 --> 00:08:16,970 desplegados para proteger a Arabia Saudí e Israel desde Irak 198 00:08:16,970 --> 00:08:19,810 Ataques con misiles Scud. 199 00:08:19,810 --> 00:08:23,740 El Patriot es un EE.UU. mediano alcance superficie-aire del sistema, 200 00:08:23,740 --> 00:08:26,370 fabricado por la empresa Raytheon. 201 00:08:26,370 --> 00:08:30,860 El tamaño de los interceptores Patriot sí mismo, se trata 202 00:08:30,860 --> 00:08:35,650 aproximadamente 20 pies de largo y pesa alrededor de 2.000 libras. 203 00:08:35,650 --> 00:08:38,809 Y lleva una ojiva de alrededor de - Creo que es más o menos 204 00:08:38,809 --> 00:08:40,169 150 libras. 205 00:08:40,169 --> 00:08:45,820 Y la propia cabeza es un explosivo de alta potencia que tiene 206 00:08:45,820 --> 00:08:48,120 fragmentos a su alrededor. 207 00:08:48,120 --> 00:08:51,870 La carcasa de la cabeza de combate está diseñado para actuar como perdigones. 208 00:08:51,870 --> 00:08:54,920 Los misiles se llevan cuatro por contenedor y son 209 00:08:54,920 --> 00:08:57,850 transportado por un semi-remolque. 210 00:08:57,850 --> 00:09:02,940 >> El Patriot antimisiles sistema se remonta al menos a 211 00:09:02,940 --> 00:09:05,530 20 años. 212 00:09:05,530 --> 00:09:09,150 Originalmente fue diseñado como un misil de defensa aérea para 213 00:09:09,150 --> 00:09:12,920 derribar aviones enemigos, en la primera Guerra del Golfo. 214 00:09:12,920 --> 00:09:17,700 Cuando la guerra llegó, el ejército quería usarlo para disparar 215 00:09:17,700 --> 00:09:19,880 por Scud, no aviones. 216 00:09:19,880 --> 00:09:24,860 La fuerza aérea iraquí no es tanto de un problema, pero el Ejército 217 00:09:24,860 --> 00:09:27,260 Estaba preocupado por misiles Scud. 218 00:09:27,260 --> 00:09:30,810 Y así trataron de actualizar el Patriot. 219 00:09:30,810 --> 00:09:33,770 Interceptar un misil enemigo que viaja a Mach 5 se va 220 00:09:33,770 --> 00:09:35,790 a ser un reto suficiente. 221 00:09:35,790 --> 00:09:39,460 Pero cuando el Patriot fue trasladado de urgencia en servicio, el Ejército 222 00:09:39,460 --> 00:09:43,730 no era consciente de una modificación iraquí que hicieron su 223 00:09:43,730 --> 00:09:46,510 Scuds casi imposible de alcanzar. 224 00:09:46,510 --> 00:09:50,040 >> Lo que pasa es que los Scud fueron 225 00:09:50,040 --> 00:09:51,360 llegando eran inestables. 226 00:09:51,360 --> 00:09:52,266 Se tambalea. 227 00:09:52,266 --> 00:09:56,300 La razón de esto era que los iraquíes, con el fin de obtener 600 228 00:09:56,300 --> 00:10:00,650 kilómetros fuera de un misil de alcance de 300 kilómetros, se 229 00:10:00,650 --> 00:10:02,423 peso de la ojiva delantera y 230 00:10:02,423 --> 00:10:03,990 hizo la ojiva más ligero. 231 00:10:03,990 --> 00:10:08,700 Así que ahora la Patriot está tratando de llegar a la Scud, y la mayoría de 232 00:10:08,700 --> 00:10:11,192 el tiempo, la abrumadora mayoría de las veces, lo haría 233 00:10:11,192 --> 00:10:13,450 sólo volar por el Scud. 234 00:10:13,450 --> 00:10:16,300 Una vez que los operadores del sistema Patriot Patriot dio cuenta de la 235 00:10:16,300 --> 00:10:20,160 no alcanzó su objetivo, que detonó la carga explosiva Patriot. 236 00:10:20,160 --> 00:10:22,760 Para evitar posibles víctimas, se permitió 237 00:10:22,760 --> 00:10:25,100 a caer al suelo. 238 00:10:25,100 --> 00:10:29,400 Eso fue lo que mucha gente vio, como grandes bolas de fuego en el cielo, 239 00:10:29,400 --> 00:10:34,930 e incomprendido como intersecciones de ojivas Scud. 240 00:10:34,930 --> 00:10:37,490 >> Si bien, en el cielo de la noche, Patriotas parecía ser 241 00:10:37,490 --> 00:10:41,570 Scud destruyó con éxito, en Dhahran, no podía haber 242 00:10:41,570 --> 00:10:43,730 error sobre su desempeño. 243 00:10:43,730 --> 00:10:46,370 Allí, el sistema Patriot radar perdió la pista de un 244 00:10:46,370 --> 00:10:50,090 Scud entrante y nunca puso en marcha debido 245 00:10:50,090 --> 00:10:51,340 a un defecto de software. 246 00:10:54,030 --> 00:10:57,050 Fue a los israelíes que descubrieron por primera vez que cuanto más tiempo 247 00:10:57,050 --> 00:11:02,000 el sistema estaba en, mayor es el tiempo de discrepancia se convirtió, 248 00:11:02,000 --> 00:11:05,530 debido a un reloj incorporado en el ordenador del sistema. 249 00:11:05,530 --> 00:11:09,060 Unas dos semanas antes de la tragedia en Dhahran, el 250 00:11:09,060 --> 00:11:11,730 Israelíes informaron al Departamento de Defensa que el 251 00:11:11,730 --> 00:11:13,250 sistema estaba perdiendo el tiempo. 252 00:11:13,250 --> 00:11:15,610 Después de ocho horas de funcionamiento, se dieron cuenta de que el 253 00:11:15,610 --> 00:11:18,330 sistema fue que se vea con menos precisa. 254 00:11:18,330 --> 00:11:20,910 El Departamento de Defensa respondió diciendo a todos 255 00:11:20,910 --> 00:11:23,710 las baterías Patriot no abandonar los sistemas 256 00:11:23,710 --> 00:11:25,450 durante un largo tiempo. 257 00:11:25,450 --> 00:11:28,010 Nunca dijeron lo que un tiempo fue - 8 horas, 10 258 00:11:28,010 --> 00:11:29,690 horas, 1.000 horas. 259 00:11:29,690 --> 00:11:31,940 Nadie lo sabía. 260 00:11:31,940 --> 00:11:35,020 >> La batería Patriot destinado en el cuartel de Dhahran 261 00:11:35,020 --> 00:11:39,030 y su reloj interno defectuoso había estado en más de 100 horas en 262 00:11:39,030 --> 00:11:42,240 La noche del 25 de febrero. 263 00:11:42,240 --> 00:11:46,580 Es seguido el tiempo con una precisión de una décima parte de un segundo. 264 00:11:46,580 --> 00:11:48,830 Ahora décimo de la segunda es un número interesante porque 265 00:11:48,830 --> 00:11:52,660 que no puede ser expresado en binario, exactamente, lo que significa 266 00:11:52,660 --> 00:11:54,940 no se puede expresar exactamente en cualquier 267 00:11:54,940 --> 00:11:57,330 computadora digital moderna. 268 00:11:57,330 --> 00:11:59,130 Es difícil de creer. 269 00:11:59,130 --> 00:12:01,720 Pero usar esto como un ejemplo. 270 00:12:01,720 --> 00:12:04,090 >> Tomemos el número de un tercio. 271 00:12:04,090 --> 00:12:07,950 Una tercera no puede ser expresado en decimal, exactamente. 272 00:12:07,950 --> 00:12:12,710 Una tercera parte se va en 0,333 para el infinito. 273 00:12:12,710 --> 00:12:17,050 No hay manera de hacer eso con una precisión absoluta en decimal. 274 00:12:17,050 --> 00:12:19,340 Ese es exactamente el mismo tipo de problema que ocurrió en 275 00:12:19,340 --> 00:12:20,190 el Patriot. 276 00:12:20,190 --> 00:12:24,680 Cuanto más tiempo el sistema funcionó, peor es el error de tiempo llegó a ser. 277 00:12:24,680 --> 00:12:28,640 Después de 100 horas de funcionamiento, el error en el tiempo era sólo 278 00:12:28,640 --> 00:12:29,870 aproximadamente un tercio de un segundo. 279 00:12:29,870 --> 00:12:34,790 Pero en términos de focalización de un misil que viaja a Mach 5, 280 00:12:34,790 --> 00:12:39,140 que dio lugar a un error de seguimiento de más de 600 metros. 281 00:12:39,140 --> 00:12:42,510 Sería un error fatal para los soldados en Dhahran. 282 00:12:42,510 --> 00:12:48,680 >> Lo que pasó es un lanzamiento de Scud fue detectado por la alerta temprana 283 00:12:48,680 --> 00:12:52,440 satélites y sabían que el Scud venía en su 284 00:12:52,440 --> 00:12:53,350 dirección general. 285 00:12:53,350 --> 00:12:55,470 No sabía de dónde venía. 286 00:12:55,470 --> 00:12:58,210 Corresponde ahora al componente de radar de la Patriot 287 00:12:58,210 --> 00:13:01,920 sistema, la defensa de Dhahran, para localizar y hacer un seguimiento de la 288 00:13:01,920 --> 00:13:03,700 misil enemigo entrante. 289 00:13:03,700 --> 00:13:05,390 El radar era muy inteligente. 290 00:13:05,390 --> 00:13:07,570 En realidad se podría seguir la posición de la Scud y luego 291 00:13:07,570 --> 00:13:10,340 predecir dónde sería probablemente la próxima vez que el 292 00:13:10,340 --> 00:13:12,040 radar envía un pulso de salida. 293 00:13:12,040 --> 00:13:13,730 Eso se llama la puerta de distancia. 294 00:13:13,730 --> 00:13:18,820 Luego, una vez que el Patriot decide ha pasado suficiente tiempo para ir 295 00:13:18,820 --> 00:13:22,600 atrás y comprobar la ubicación para la próxima detectada 296 00:13:22,600 --> 00:13:24,190 objeto, vuelve. 297 00:13:24,190 --> 00:13:27,940 Así que cuando volví al lugar equivocado, entonces no ve 298 00:13:27,940 --> 00:13:31,000 objeto, y decide que no había ningún objeto. 299 00:13:31,000 --> 00:13:34,370 Era una falsa detección y baja de la pista. 300 00:13:34,370 --> 00:13:37,630 >> El Scud entrante desapareció de la pantalla del radar. 301 00:13:37,630 --> 00:13:41,300 Y segundos después, se estrelló contra el cuartel. El Scud 302 00:13:41,300 --> 00:13:44,730 mató a 28 y fue el último despedido durante 303 00:13:44,730 --> 00:13:46,450 la primera Guerra del Golfo. 304 00:13:46,450 --> 00:13:50,570 Trágicamente, el software actualizado llegó a Dhahran 305 00:13:50,570 --> 00:13:52,060 el día siguiente. 306 00:13:52,060 --> 00:13:56,210 Y la falla de software había fijado, cerrando un capítulo en 307 00:13:56,210 --> 00:13:58,370 la turbulenta historia de los misiles Patriot. 308 00:14:01,790 --> 00:14:04,990 PATRIOT es en realidad un acrónimo de "Tracking Phased Array 309 00:14:04,990 --> 00:14:08,516 Intercepción de destino. " 310 00:14:08,516 --> 00:14:13,390 >> De acuerdo, por lo que un resultado mucho más doloroso de no muy 311 00:14:13,390 --> 00:14:14,430 la comprensión de este mundo. 312 00:14:14,430 --> 00:14:18,180 Y la comida para llevar, de verdad, de la película es que la solución 313 00:14:18,180 --> 00:14:20,790 no se reinicie el sistema de defensa antimisiles 314 00:14:20,790 --> 00:14:21,770 de vez en cuando. 315 00:14:21,770 --> 00:14:24,280 Y así, una vez más, uno de los objetivos de este curso, sin duda 316 00:14:24,280 --> 00:14:26,900 en una escala más humilde que estas aplicaciones, es 317 00:14:26,900 --> 00:14:30,710 Todo el mundo realmente abierto los ojos a exactamente cómo usted va sobre la 318 00:14:30,710 --> 00:14:34,380 máquinas de hacer lo que usted quiere que hagan y cómo se van 319 00:14:34,380 --> 00:14:37,180 hacer eso correctamente, mientras que en el camino haciendo 320 00:14:37,180 --> 00:14:38,810 bien, con elegancia, y así sucesivamente. 321 00:14:38,810 --> 00:14:41,680 Y así, hoy, vamos a sumergirnos en un poco más de esto, pero 322 00:14:41,680 --> 00:14:44,210 por lo que no vamos demasiado rápido, especialmente para los menos 323 00:14:44,210 --> 00:14:46,590 cómoda, sino también para poder mantener el interés de los 324 00:14:46,590 --> 00:14:49,390 los más cómodos, vamos a comenzar rápidamente con un poco 325 00:14:49,390 --> 00:14:50,970 de resumen de algunas de estas ideas. 326 00:14:50,970 --> 00:14:53,710 Y de nuevo, pregunte a distancia, tanto en persona o en línea, si usted tiene 327 00:14:53,710 --> 00:14:56,320 preguntas para que podamos mantener a todos en la misma página. 328 00:14:56,320 --> 00:14:58,820 >> De modo que el aparato CS50, paso hacia atrás, es 329 00:14:58,820 --> 00:15:02,360 lo que, en sus propias palabras? 330 00:15:02,360 --> 00:15:06,454 Está bien si no tienes idea de lo que esas palabras pueden ser todavía. 331 00:15:06,454 --> 00:15:07,830 [Inaudible] 332 00:15:07,830 --> 00:15:10,950 Bueno, por lo que una interfaz universal para - 333 00:15:10,950 --> 00:15:11,900 que todos podemos compartir. 334 00:15:11,900 --> 00:15:12,470 Por supuesto. 335 00:15:12,470 --> 00:15:14,840 Así, se podría, por ejemplo, te dirá que vayas a algún 336 00:15:14,840 --> 00:15:16,910 sitio web, descargar este software para Mac OS. 337 00:15:16,910 --> 00:15:19,140 Descargue este software para Windows, configurar en 338 00:15:19,140 --> 00:15:20,100 un lado a otro. 339 00:15:20,100 --> 00:15:22,370 Pero la realidad es que luego nos encontramos con innumerables técnicas 340 00:15:22,370 --> 00:15:23,200 apoyar temas. 341 00:15:23,200 --> 00:15:26,630 Y también en estos días, gran parte de lo que se hace del lado del servidor, 342 00:15:26,630 --> 00:15:28,490 en el mundo de la informática, especialmente cuando se trata 343 00:15:28,490 --> 00:15:31,460 desarrollo web y aplicaciones basadas en web, es en realidad 344 00:15:31,460 --> 00:15:35,110 muy a menudo se realiza en equipos UNIX o Linux, a diferencia de 345 00:15:35,110 --> 00:15:36,800 Mac o PC con Windows. 346 00:15:36,800 --> 00:15:39,240 >> Así que entre los upsides, entonces, de la utilización de esta cosa llamada el 347 00:15:39,240 --> 00:15:41,500 CS50 Appliance es que todos tendremos el mismo entorno. 348 00:15:41,500 --> 00:15:43,670 Así que todo el mundo está en la misma página sin importar el hardware que 349 00:15:43,670 --> 00:15:46,650 llegó a la escuela con pero también se incursionando en exactamente 350 00:15:46,650 --> 00:15:48,230 el mismo entorno que usted va a utilizar hacia 351 00:15:48,230 --> 00:15:51,080 semestre final, así como para el desarrollo web, así como en la 352 00:15:51,080 --> 00:15:53,580 futuro para aplicaciones reales de los mismos. 353 00:15:53,580 --> 00:15:56,350 Entonces, más concretamente, el aparato CS50 es una pieza libre de 354 00:15:56,350 --> 00:15:59,400 software que permite ejecutar otro sistema operativo, 355 00:15:59,400 --> 00:16:02,670 Linux, en este caso, en su propio ordenador, en una ventana. 356 00:16:02,670 --> 00:16:04,750 Ahora no sólo puedes descargar el aparato. 357 00:16:04,750 --> 00:16:08,170 Usted necesita un programa con el que jugar o correr el aparato. 358 00:16:08,170 --> 00:16:11,220 Y ese pedazo de software se conoce generalmente como un 359 00:16:11,220 --> 00:16:11,520 hipervisor. 360 00:16:11,520 --> 00:16:14,050 Los hipervisores se presentan en forma de productos como VMware, 361 00:16:14,050 --> 00:16:15,820 Virtual Box, Parallels. 362 00:16:15,820 --> 00:16:18,390 Todo tipo de empresas hacen software libre y 363 00:16:18,390 --> 00:16:19,310 comercial, por igual. 364 00:16:19,310 --> 00:16:21,480 Lo que vas a ver en el problema Set 1 son las instrucciones sobre cómo 365 00:16:21,480 --> 00:16:23,440 obtener software gratuito con el que 366 00:16:23,440 --> 00:16:25,000 funcionar el aparato CS50. 367 00:16:25,000 --> 00:16:28,060 Y una vez que usted lo hace, usted tendrá, en una ventana de tu Mac o PC, 368 00:16:28,060 --> 00:16:30,710 un entorno de escritorio que se ve bastante como este, donde 369 00:16:30,710 --> 00:16:33,100 tiene un menú de inicio-como cosa en el 370 00:16:33,100 --> 00:16:34,510 inferior izquierda esquina. 371 00:16:34,510 --> 00:16:38,030 Tiene una carpeta de inicio, o el directorio de inicio, en la parte superior izquierda 372 00:16:38,030 --> 00:16:40,280 allí, un bote de basura, y así sucesivamente. 373 00:16:40,280 --> 00:16:43,450 Así que vamos a desmenuzar los detalles necesarios sobre la marcha. 374 00:16:43,450 --> 00:16:46,430 >> Pero ahora vamos a empezar a bucear en C. 375 00:16:46,430 --> 00:16:49,200 Así C es este lenguaje de programación, similar en espíritu a 376 00:16:49,200 --> 00:16:52,390 Scratch, pero mucho menos gráfica, pero, irónicamente, mucho 377 00:16:52,390 --> 00:16:54,730 más potente una vez que llegue conocedores de la misma. 378 00:16:54,730 --> 00:16:58,970 Así que en C, escribimos programas de escritura de código fuente, que es 379 00:16:58,970 --> 00:17:01,640 esta sintaxis similar al Inglés, similar a los calcetines 380 00:17:01,640 --> 00:17:05,609 demostración de que hicimos la última vez que le permite 381 00:17:05,609 --> 00:17:07,910 expresarse con bastante precisión, si 382 00:17:07,910 --> 00:17:09,760 arcanely, a la computadora. 383 00:17:09,760 --> 00:17:11,960 >> Entonces, ¿qué tipo de producto de software es lo que realmente necesita 384 00:17:11,960 --> 00:17:15,520 para escribir programas en un lenguaje como C, basándonos en nuestra 385 00:17:15,520 --> 00:17:17,492 conversación el lunes? 386 00:17:17,492 --> 00:17:19,650 [Inaudible] 387 00:17:19,650 --> 00:17:21,079 OK, sólo necesitas un editor de texto. 388 00:17:21,079 --> 00:17:22,890 Usted no necesita ningún software especial 389 00:17:22,890 --> 00:17:24,460 per se para escribir programas. 390 00:17:24,460 --> 00:17:27,220 Sólo se necesita un editor de texto como el Bloc de notas de Windows, 391 00:17:27,220 --> 00:17:30,450 TextEdit en Mac, o algo que se llama gedit, en el mundo de la 392 00:17:30,450 --> 00:17:32,020 Linux, que vamos a utilizar aquí. 393 00:17:32,020 --> 00:17:33,750 Y eso es todo, para escribir los programas. 394 00:17:33,750 --> 00:17:35,480 >> Pero la escritura es sólo la mitad de la ecuación. 395 00:17:35,480 --> 00:17:36,630 A continuación, deberá ejecutarlas. 396 00:17:36,630 --> 00:17:38,320 Pero para ejecutar programas - 397 00:17:38,320 --> 00:17:39,600 no se puede ejecutar el código fuente. 398 00:17:39,600 --> 00:17:41,500 En su lugar, tiene que hacer lo que a él primero? 399 00:17:41,500 --> 00:17:41,900 Si. 400 00:17:41,900 --> 00:17:43,200 DAVID J. MALAN: Es necesario 401 00:17:43,200 --> 00:17:44,130 compilarlo. 402 00:17:44,130 --> 00:17:49,010 Y, por otro, compilar el código fuente significa - 403 00:17:49,010 --> 00:17:50,260 [Inaudible] 404 00:17:52,300 --> 00:17:52,700 DAVID J. MALAN: Exactamente. 405 00:17:52,700 --> 00:17:54,430 Traduciendo esto a ceros y unos. 406 00:17:54,430 --> 00:17:57,150 Porque todos nosotros, en estos días, tienen equipos que tienen CPUs, 407 00:17:57,150 --> 00:18:00,350 casi todos los cuales están hechos por una compañía llamada Intel, y 408 00:18:00,350 --> 00:18:03,320 Intel Inside, significa que no esta dentro de su cerebro 409 00:18:03,320 --> 00:18:04,990 ordenador, conocido como la CPU. 410 00:18:04,990 --> 00:18:07,570 Y una de las cosas que hace que el cerebro es, sabe 411 00:18:07,570 --> 00:18:10,390 cómo entender los patrones de ceros y unos. 412 00:18:10,390 --> 00:18:13,240 Sabe lo que representa el patrón de bits Además, lo que 413 00:18:13,240 --> 00:18:15,500 patrón representa restas, ¿qué modelo de 414 00:18:15,500 --> 00:18:18,890 bits representan la impresión, y la creación de un sonido audible. 415 00:18:18,890 --> 00:18:22,450 >> Así que en resumen, la CPU, junto con el sistema operativo, 416 00:18:22,450 --> 00:18:25,230 que es una pieza de software que se ejecuta en la parte superior de la CPU, 417 00:18:25,230 --> 00:18:26,050 por así decirlo. 418 00:18:26,050 --> 00:18:29,850 Juntas, esas dos piezas saber cómo ejecutar programas que 419 00:18:29,850 --> 00:18:31,070 nosotros los humanos escribir. 420 00:18:31,070 --> 00:18:34,040 >> Así que si entro en el Appliance CS50 aquí, tengo que abrir 421 00:18:34,040 --> 00:18:35,660 un editor de texto y puedo acceder a este 422 00:18:35,660 --> 00:18:36,560 en un par de maneras. 423 00:18:36,560 --> 00:18:39,060 Me puede ir a Menú, Programación, 424 00:18:39,060 --> 00:18:40,230 y entonces puedo seleccionar - 425 00:18:40,230 --> 00:18:40,810 No, no ese menú. 426 00:18:40,810 --> 00:18:43,860 Puedo ir a Accesorios / gedit aquí para abrir 427 00:18:43,860 --> 00:18:45,090 mi editor de texto pequeño. 428 00:18:45,090 --> 00:18:48,030 O más simplemente, puedo hacer clic en este icono pequeño en la parte inferior 429 00:18:48,030 --> 00:18:48,970 esquina izquierda. 430 00:18:48,970 --> 00:18:50,430 Y ahora me sale este ambiente aquí. 431 00:18:50,430 --> 00:18:52,590 Es muy evocador de un editor de texto simple, con sólo 432 00:18:52,590 --> 00:18:53,820 una o dos diferencias. 433 00:18:53,820 --> 00:18:56,420 En la parte superior, donde está el cursor parpadeante, aquí es donde 434 00:18:56,420 --> 00:18:57,900 Puedo empezar a escribir el código. 435 00:18:57,900 --> 00:19:00,415 En el fondo es esta cosa llamada la ventana de terminal. 436 00:19:00,415 --> 00:19:03,400 ¿Y qué tipo de cosas que puedo hacer en este 437 00:19:03,400 --> 00:19:04,960 la llamada ventana de terminal? 438 00:19:04,960 --> 00:19:06,680 [Inaudible] 439 00:19:06,680 --> 00:19:07,890 >> Está bien, así que voy a ejecutar órdenes. 440 00:19:07,890 --> 00:19:10,300 Y algunos de los comandos que corrió el lunes eran un poco 441 00:19:10,300 --> 00:19:15,070 crípticos al principio, pero para ls lista, cd cambio de directorio, para 442 00:19:15,070 --> 00:19:16,540 rm, para eliminarlo. 443 00:19:16,540 --> 00:19:19,680 Así que es una especie de camino de la vieja escuela de navegación de su 444 00:19:19,680 --> 00:19:22,310 computadora, usando sólo el teclado y los comandos textuales, 445 00:19:22,310 --> 00:19:24,130 y no, en general, con el ratón. 446 00:19:24,130 --> 00:19:25,960 Pero vamos a ver, en poco tiempo, este hecho nos da una 447 00:19:25,960 --> 00:19:28,520 poco más de potencia y un poco más precisión con la cual 448 00:19:28,520 --> 00:19:29,600 expresarnos. 449 00:19:29,600 --> 00:19:31,330 Y luego aquí a la izquierda, sólo vamos a ver, 450 00:19:31,330 --> 00:19:34,360 a medida que comenzamos software de escritura, un pequeño resumen de la 451 00:19:34,360 --> 00:19:36,350 programa que hemos escrito en la parte superior izquierda. 452 00:19:36,350 --> 00:19:38,360 Pero vamos a ver que de nuevo en poco tiempo. 453 00:19:38,360 --> 00:19:40,050 >> Así que vamos a hacer algo muy simple aquí. 454 00:19:40,050 --> 00:19:43,440 Permitidme que seguir adelante e ir a Archivo, Guardar, y estoy 455 00:19:43,440 --> 00:19:45,970 va a hacer clic en jharvard aquí, más a la izquierda, y 456 00:19:45,970 --> 00:19:48,930 jharvard es, de nuevo, el nombre de mi carpeta de inicio, mi 457 00:19:48,930 --> 00:19:52,110 archivos personales, yo, ahora es John Harvard, como todos ustedes 458 00:19:52,110 --> 00:19:54,230 pronto será John Harvard en este entorno. 459 00:19:54,230 --> 00:19:57,360 Él tiene este directorio Inicio, Mis documentos y demás, 460 00:19:57,360 --> 00:19:58,900 que desea guardar y, ahora, este archivo pulg 461 00:19:58,900 --> 00:20:01,520 Así que voy a llamarlo hello.c. Entonces me voy a ir 462 00:20:01,520 --> 00:20:05,770 a continuación y haga clic en Guardar, y ahora lo que tenemos aquí es una ficha 463 00:20:05,770 --> 00:20:09,440 llamado hello.c, tanto como otro tipo de editor. 464 00:20:09,440 --> 00:20:11,760 >> Así que ahora vamos a seguir adelante y empezar a escribir un programa. 465 00:20:11,760 --> 00:20:14,440 int main (void). 466 00:20:14,440 --> 00:20:18,150 Y luego me hice la última vez, printf, para la impresión formateada, 467 00:20:18,150 --> 00:20:22,120 ("Hola, mundo!" 468 00:20:22,120 --> 00:20:24,500 ). 469 00:20:24,500 --> 00:20:25,630 Casi completa. 470 00:20:25,630 --> 00:20:27,130 Pero me falta un par de detalles. 471 00:20:27,130 --> 00:20:30,210 Lo que falta en este programa que realmente necesito para 472 00:20:30,210 --> 00:20:31,890 que se compile en realidad? 473 00:20:31,890 --> 00:20:32,130 Si. 474 00:20:32,130 --> 00:20:33,980 [Inaudible]? 475 00:20:33,980 --> 00:20:35,770 >> DAVID J. MALAN: Sí, así que tengo que incluirá la norma 476 00:20:35,770 --> 00:20:36,700 I / O biblioteca. 477 00:20:36,700 --> 00:20:39,470 Así que esto tiene que ir por encima de principal, así que sólo voy a 478 00:20:39,470 --> 00:20:40,790 hacer un poco de espacio para ella allí. 479 00:20:40,790 --> 00:20:44,420 Y yo voy a hacer # include. 480 00:20:44,420 --> 00:20:46,570 Y noten los paréntesis angulares allí. 481 00:20:46,570 --> 00:20:49,410 Y en un aparte, gedit es un usuario poco amigable, si 482 00:20:49,410 --> 00:20:52,420 a veces un poco confuso, ya que trata de ayudar a su 483 00:20:52,420 --> 00:20:54,770 ojos cuenta de lo que se alinea con qué. 484 00:20:54,770 --> 00:20:57,760 Así que el hecho de que mi cursor está al lado de este ángulo 485 00:20:57,760 --> 00:21:00,600 soporte, observe cómo se destaca el otro ángulo 486 00:21:00,600 --> 00:21:01,920 soporte más uno esto. 487 00:21:01,920 --> 00:21:03,770 Y eso es sólo para llamar mi atención sobre el hecho de que yo 488 00:21:03,770 --> 00:21:04,460 tienen simetría. 489 00:21:04,460 --> 00:21:07,010 Y la simetría en la programación es generalmente una buena cosa. 490 00:21:07,010 --> 00:21:10,270 Del mismo modo, si muevo el cursor hasta el final, observe cómo el 491 00:21:10,270 --> 00:21:13,630 llaves se alinean para mostrar que, sí, tengo una abierta 492 00:21:13,630 --> 00:21:15,160 y uno cerrado, por así decirlo. 493 00:21:15,160 --> 00:21:16,640 >> Muy bien, y no puedo hacer otra cosa. 494 00:21:16,640 --> 00:21:20,090 No es estrictamente necesario, pero una buena práctica, por no decir 495 00:21:20,090 --> 00:21:21,250 devuelve 0. 496 00:21:21,250 --> 00:21:24,140 Y 0 retorno hace lo que para nosotros aquí? 497 00:21:24,140 --> 00:21:25,584 ¿O significa que? 498 00:21:25,584 --> 00:21:27,480 [Inaudible] 499 00:21:27,480 --> 00:21:28,300 DAVID J. MALAN: Pero no pasa nada. 500 00:21:28,300 --> 00:21:30,280 Y, francamente, es difícil para gran parte a ir mal en un 501 00:21:30,280 --> 00:21:31,250 programar este corto. 502 00:21:31,250 --> 00:21:33,930 Así que sólo estoy siendo súper explícito de que todo está bien. 503 00:21:33,930 --> 00:21:36,740 Yo, el ser humano, cuando ejecuto este programa, probablemente nunca lo hará 504 00:21:36,740 --> 00:21:38,150 ver que 0. 505 00:21:38,150 --> 00:21:41,070 En general, estos números que están siendo devueltos a partir de principal 506 00:21:41,070 --> 00:21:43,540 sólo educar a sus jefes a los seres humanos cuando 507 00:21:43,540 --> 00:21:44,360 algo va mal. 508 00:21:44,360 --> 00:21:46,640 Y te dan un poco de pop up de error del sistema diciendo: uno, 509 00:21:46,640 --> 00:21:48,760 dos, tres, o cualquiera que sea el número que fue 510 00:21:48,760 --> 00:21:50,100 fue realmente devuelto. 511 00:21:50,100 --> 00:21:52,870 Así que nada malo en esto? 512 00:21:52,870 --> 00:21:55,300 [Inaudible] 513 00:21:55,300 --> 00:21:58,100 >> DAVID J. MALAN: Así que esto no es tanto un error funcional 514 00:21:58,100 --> 00:21:59,240 pero una estética. 515 00:21:59,240 --> 00:22:02,340 Probablemente debería poner en un carácter de nueva línea allí en el 516 00:22:02,340 --> 00:22:05,240 final de esta cadena para que realmente mover el cursor a 517 00:22:05,240 --> 00:22:08,340 la siguiente línea, y el programa sólo se ve un poco más bonito. 518 00:22:08,340 --> 00:22:10,340 >> Así que ahora me dejes ir a mi ventana de terminal 519 00:22:10,340 --> 00:22:11,490 y amplía la 520 00:22:11,490 --> 00:22:13,390 Y esto de aquí, se llama el sistema. 521 00:22:13,390 --> 00:22:16,760 Se me acaba de recordar quién soy, jharvard @ aparato, donde 522 00:22:16,760 --> 00:22:18,850 aparato es el nombre del equipo que estoy. 523 00:22:18,850 --> 00:22:22,380 Entre paréntesis figura la tilde, el símbolo garabato, que 524 00:22:22,380 --> 00:22:24,160 representa qué? 525 00:22:24,160 --> 00:22:25,590 AUDIENCIA: directorio de inicio. 526 00:22:25,590 --> 00:22:26,350 DAVID J. MALAN: directorio de inicio. 527 00:22:26,350 --> 00:22:29,350 Así que eso es sólo una notación abreviada para decir que están en 528 00:22:29,350 --> 00:22:32,780 su carpeta personal donde todos sus archivos de ir de forma predeterminada. 529 00:22:32,780 --> 00:22:36,080 Así que ahora, aquí, puedo escribir ls para ver la lista. 530 00:22:36,080 --> 00:22:40,020 Y lo único que veo aquí en este momento es hello.c. 531 00:22:40,020 --> 00:22:41,770 Y eso es bueno, porque yo acabo de escribir esto. 532 00:22:41,770 --> 00:22:44,380 >> Así que vamos a seguir adelante y me hacen hello. 533 00:22:44,380 --> 00:22:46,830 Y noten que no estoy escribiendo hacer hello.c. 534 00:22:46,830 --> 00:22:50,300 En su lugar, sólo estoy escribiendo el nombre base del archivo, hola. 535 00:22:50,300 --> 00:22:53,690 Y que, como vimos el lunes, sólo se infiere que quiero 536 00:22:53,690 --> 00:22:54,920 el. c archivo. 537 00:22:54,920 --> 00:22:56,820 Así que ahora que he escrito hacer hello. 538 00:22:56,820 --> 00:22:59,280 Ahora veo este comando bastante largo y continuará 539 00:22:59,280 --> 00:23:00,480 viendo esto una y otra vez. 540 00:23:00,480 --> 00:23:03,620 Pero para ser tañido claro, la palabra que acaba de aparecer, 541 00:23:03,620 --> 00:23:05,340 ese es el compilador real. 542 00:23:05,340 --> 00:23:08,200 Hacer es una utilidad de generación. 543 00:23:08,200 --> 00:23:11,900 Es sólo un programa más fácil de usar que me salva, en la 544 00:23:11,900 --> 00:23:15,310 largo plazo, de tener que escribir increíblemente tedioso largo 545 00:23:15,310 --> 00:23:17,020 comandos como esa. 546 00:23:17,020 --> 00:23:18,950 Así que se podría ejecutar Clang manualmente. 547 00:23:18,950 --> 00:23:20,530 Se podría escribir todo eso manualmente. 548 00:23:20,530 --> 00:23:21,580 Sólo se pone muy aburrido. 549 00:23:21,580 --> 00:23:24,720 Y así que es sólo un programa que simplifica nuestras vidas y 550 00:23:24,720 --> 00:23:27,120 ejecuta comandos más complejos para nosotros. 551 00:23:27,120 --> 00:23:29,410 >> Muy bien, ¿y ahora qué archivo debo tener 552 00:23:29,410 --> 00:23:31,540 en mi directorio actual? 553 00:23:31,540 --> 00:23:36,310 No sólo hello.c, pero también saludar. 554 00:23:36,310 --> 00:23:39,710 Así que si quiero correr hola, recordemos que digo dot slash, 555 00:23:39,710 --> 00:23:42,220 donde los medios de punto entrar en la carpeta actual, donde quiera que 556 00:23:42,220 --> 00:23:46,060 son, a continuación, ejecute el programa llamado hola, y, de hecho, ahora, 557 00:23:46,060 --> 00:23:48,080 Tengo hello world. 558 00:23:48,080 --> 00:23:51,640 De acuerdo, cualquier pregunta sobre el flujo de trabajo o la sintaxis de 559 00:23:51,640 --> 00:23:52,890 lo que acabas de hacer? 560 00:23:55,380 --> 00:23:57,040 >> Muy bien, así que vamos a tomar las cosas a un nivel superior de nuevo. 561 00:23:57,040 --> 00:24:00,430 Así que esto fue decepcionante para escribir un programa que sólo 562 00:24:00,430 --> 00:24:01,790 nunca dice hola, mundo. 563 00:24:01,790 --> 00:24:03,920 Así que lo cambiamos, el lunes, decir hola, David. 564 00:24:03,920 --> 00:24:06,560 Es un poco más personal, pero igual de duro codificado como el 565 00:24:06,560 --> 00:24:07,410 primera versión. 566 00:24:07,410 --> 00:24:08,780 Así que no es tan convincente. 567 00:24:08,780 --> 00:24:13,120 Pero existe, en C, además de las funciones duda 568 00:24:13,120 --> 00:24:15,700 impresión, funciones que permiten obtener información del usuario. 569 00:24:15,700 --> 00:24:17,990 Y la forma en que lo hizo, el otro día, fue como sigue. 570 00:24:17,990 --> 00:24:21,440 Antes de imprimir algo, llegué por primera vez 571 00:24:21,440 --> 00:24:22,410 algo del usuario. 572 00:24:22,410 --> 00:24:23,370 Así que vamos a hacer esto otra vez. 573 00:24:23,370 --> 00:24:26,580 >> Cadena s, donde s es sólo un nombre arbitrario, aquí, por un 574 00:24:26,580 --> 00:24:30,600 cadena, es igual a GetString. 575 00:24:30,600 --> 00:24:32,070 Entonces, ¿qué fue GetString? 576 00:24:32,070 --> 00:24:34,630 Obviamente obtiene una cadena que, basándose en su nombre. 577 00:24:34,630 --> 00:24:37,560 Pero lo que es, más técnicamente? 578 00:24:37,560 --> 00:24:38,440 Es una función. 579 00:24:38,440 --> 00:24:41,790 Así que es una función que no viene con C per se. 580 00:24:41,790 --> 00:24:43,660 CS50 personal escribió esto. 581 00:24:43,660 --> 00:24:46,940 Y así, para usar esto, no se puede simplemente incluir stdio.h, 582 00:24:46,940 --> 00:24:49,630 También debe incluir qué? 583 00:24:49,630 --> 00:24:50,060 Si. 584 00:24:50,060 --> 00:24:54,210 Así cs50.h, que es simplemente un archivo que escribió hace algunos años. 585 00:24:54,210 --> 00:24:57,130 Lo instalamos en el aparato para que usted junto a 586 00:24:57,130 --> 00:24:58,490 todos los archivos estándar. 587 00:24:58,490 --> 00:25:00,500 Y así, en estas primeras semanas de la clase, vamos a utilizar 588 00:25:00,500 --> 00:25:02,820 esto sólo para simplificar el proceso de hacer muy básico 589 00:25:02,820 --> 00:25:04,600 cosas como conseguir entrada del usuario. 590 00:25:04,600 --> 00:25:07,370 Porque, como veremos en un par de semanas, el usuario conseguir la entrada en una 591 00:25:07,370 --> 00:25:10,180 lenguaje como C es en realidad sorprendentemente compleja, 592 00:25:10,180 --> 00:25:14,360 sobre todo porque no se sabe de antemano, por lo general, ¿cómo 593 00:25:14,360 --> 00:25:17,030 cantidad de cosas que el usuario va a escribir pulg 594 00:25:17,030 --> 00:25:20,340 Y cuando usted no sabe la cantidad de datos que puede esperar, no 595 00:25:20,340 --> 00:25:22,380 saber la cantidad de memoria para asignar. 596 00:25:22,380 --> 00:25:25,480 Y si usted realmente tiene un usuario de confrontación que está tratando de 597 00:25:25,480 --> 00:25:28,180 para introducirse en el sistema, bloquear el equipo, bueno, 598 00:25:28,180 --> 00:25:31,600 generalmente el primer método de ataque es, tal como lo hice en 599 00:25:31,600 --> 00:25:34,950 Lunes, escriba toda una secuencia larga de caracteres al azar, 600 00:25:34,950 --> 00:25:37,020 pulse Enter y vea lo rompe. 601 00:25:37,020 --> 00:25:40,800 Por lo general, si se rompe un programa, que alude a 602 00:25:40,800 --> 00:25:42,650 una falla de seguridad, potencialmente. 603 00:25:42,650 --> 00:25:45,250 Sin duda alude a usted, el programador, después de haber hecho una 604 00:25:45,250 --> 00:25:49,050 error, pero más peligroso, que podría haber hecho una 605 00:25:49,050 --> 00:25:52,430 error relacionado con la seguridad y, en general veremos que 606 00:25:52,430 --> 00:25:54,840 así es como máquinas están comprometidos hasta la fecha, tanto 607 00:25:54,840 --> 00:25:56,620 en el mundo de la web y de los programas en la 608 00:25:56,620 --> 00:25:58,070 línea de comandos, así. 609 00:25:58,070 --> 00:25:58,350 >> Está bien. 610 00:25:58,350 --> 00:26:00,460 Así que la cadena s es igual a getString. 611 00:26:00,460 --> 00:26:03,380 Así que ahora más concretamente, ¿qué significa la línea 6 aquí? 612 00:26:03,380 --> 00:26:05,640 Así, la función de la derecha se pone cadena, 613 00:26:05,640 --> 00:26:06,890 toma cuántos argumentos? 614 00:26:09,458 --> 00:26:09,900 Bien. 615 00:26:09,900 --> 00:26:10,400 Así que nada. 616 00:26:10,400 --> 00:26:11,360 Un poco de cordura comprobar. 617 00:26:11,360 --> 00:26:15,380 Un argumento, de nuevo, es sólo una entrada a una función para alterar 618 00:26:15,380 --> 00:26:17,250 su comportamiento por defecto de alguna manera. 619 00:26:17,250 --> 00:26:19,540 Pero en este caso, yo no quiero alterar 620 00:26:19,540 --> 00:26:20,650 el comportamiento de GetString. 621 00:26:20,650 --> 00:26:22,430 Yo sólo quería llegar a una cadena. 622 00:26:22,430 --> 00:26:25,190 Así que puse nada en los paréntesis y luego puse un 623 00:26:25,190 --> 00:26:27,550 punto y coma demarcación de la final de la línea de código. 624 00:26:27,550 --> 00:26:29,840 Ahora, el signo de igualdad no significa igual, per se. 625 00:26:29,840 --> 00:26:32,690 Significa asignación, lo que significa poner lo consigue 626 00:26:32,690 --> 00:26:36,060 emitida en el interior de lo que es justo a la izquierda. 627 00:26:36,060 --> 00:26:39,400 >> Así que en la izquierda, decimos que hemos declarado una 628 00:26:39,400 --> 00:26:41,630 cadena llamado s. 629 00:26:41,630 --> 00:26:44,240 Y más específicamente, hemos asignado la memoria interna de 630 00:26:44,240 --> 00:26:46,340 que vamos a poner los bits que representan una secuencia de 631 00:26:46,340 --> 00:26:46,850 personajes. 632 00:26:46,850 --> 00:26:49,400 Pero por hoy, hemos asignado 633 00:26:49,400 --> 00:26:51,450 o se declara una cadena. 634 00:26:51,450 --> 00:26:51,790 Está bien. 635 00:26:51,790 --> 00:26:54,760 Así que ahora, una vez que hayas hecho esto, quiero conectar el valor de 636 00:26:54,760 --> 00:26:56,535 s, no el valor de David. 637 00:26:56,535 --> 00:27:00,200 Así que esto está mal ¿por qué? 638 00:27:03,060 --> 00:27:04,870 Así que esto es sólo, literalmente, la s no modificable. 639 00:27:04,870 --> 00:27:06,870 Es decir "hola, s", que no es lo que quiero. 640 00:27:06,870 --> 00:27:07,790 Así que puedo hacer esto. 641 00:27:07,790 --> 00:27:10,330 El signo de porcentaje es un marcador de posición, pero ahora tengo que 642 00:27:10,330 --> 00:27:12,520 pasar a imprimir un segundo argumento. 643 00:27:12,520 --> 00:27:15,160 Recordemos que los argumentos a funciones están separadas por 644 00:27:15,160 --> 00:27:20,300 comas, por lo que el próximo coma aquí pongo después de esto la letra s. 645 00:27:20,300 --> 00:27:23,740 Y en este contexto actual, s es la variable, y printf, 646 00:27:23,740 --> 00:27:25,550 al recibir las dos entradas - 647 00:27:25,550 --> 00:27:29,440 la cadena en el lado izquierdo y el nombre de la variable s a la derecha - 648 00:27:29,440 --> 00:27:32,750 se podrá conectar a este último en la primera para nosotros, y 649 00:27:32,750 --> 00:27:34,600 sólo imprimir una cadena bien precioso que contiene 650 00:27:34,600 --> 00:27:36,770 lo que sea que hemos escrito pulg 651 00:27:36,770 --> 00:27:37,560 >> Así que vamos a probar esto. 652 00:27:37,560 --> 00:27:38,860 Va a seguir adelante y alejar la imagen, de nuevo 653 00:27:38,860 --> 00:27:40,250 a mi ventana de terminal. 654 00:27:40,250 --> 00:27:41,840 Acercar al final aquí. 655 00:27:41,840 --> 00:27:44,070 Vuelva a hacer hello. 656 00:27:44,070 --> 00:27:45,870 Clang parece haber sido repetición. 657 00:27:45,870 --> 00:27:49,280 Voy a escribir. / Hello Intro. 658 00:27:49,280 --> 00:27:52,145 Nada parece estar ocurriendo todavía, pero es en esta pantalla 659 00:27:52,145 --> 00:27:55,700 que puedo escribir algo como Nate, Enter, y ahora tenemos 660 00:27:55,700 --> 00:27:56,380 Hola, Nate. 661 00:27:56,380 --> 00:27:59,600 Y puedo hacerlo de nuevo con Rob, y así sucesivamente. 662 00:27:59,600 --> 00:28:03,410 Así que espero que ahora este programa se comporta como pienso. 663 00:28:03,410 --> 00:28:05,720 >> Ahora, no toda amigable para el usuario. 664 00:28:05,720 --> 00:28:07,930 No tengo ni idea de lo que se esperaba de mí. 665 00:28:07,930 --> 00:28:09,620 Así que sin duda podemos limpiar esto un poco. 666 00:28:09,620 --> 00:28:13,270 Déjame volver aquí, y en lugar de buceo y 667 00:28:13,270 --> 00:28:16,480 preguntar al usuario para una cadena, permítanme decirles explícitamente la 668 00:28:16,480 --> 00:28:17,750 usuario lo que estoy esperando. 669 00:28:17,750 --> 00:28:21,610 Así printf ("Introduzca una cadena:" 670 00:28:21,610 --> 00:28:24,080 ); 671 00:28:24,080 --> 00:28:25,510 Así que no hay variables aquí. 672 00:28:25,510 --> 00:28:26,750 No hay signos de porcentaje. 673 00:28:26,750 --> 00:28:28,550 Sólo la frase en Inglés simple. 674 00:28:28,550 --> 00:28:34,030 Permítanme ahora pasar a la final aquí y volver a ejecutar mi programa. 675 00:28:34,030 --> 00:28:35,380 Pero nada parece haber cambiado. 676 00:28:35,380 --> 00:28:37,350 ¿Por qué? 677 00:28:37,350 --> 00:28:38,380 Tengo que volver a compilar. 678 00:28:38,380 --> 00:28:39,570 Así error fácil de cometer. 679 00:28:39,570 --> 00:28:41,700 Pero usted tiene que no sólo guarda el archivo pero 680 00:28:41,700 --> 00:28:43,260 volver a compilar el programa. 681 00:28:43,260 --> 00:28:46,640 Y así, si puedo volver a hacer funcionar hola, ahora Clang ejecuta. 682 00:28:46,640 --> 00:28:51,800 Ahora se puede ejecutar. / Hello. Y ahora veo "Introduzca una cadena:". 683 00:28:51,800 --> 00:28:52,050 Bien. 684 00:28:52,050 --> 00:28:53,440 Ahora es un poco más fácil de usar. 685 00:28:53,440 --> 00:28:55,850 Nate, Enter, hola, Nate. 686 00:28:55,850 --> 00:28:57,310 >> Bueno, vamos a intentarlo de nuevo y empezar a pensar 687 00:28:57,310 --> 00:28:58,080 sobre los casos de esquina. 688 00:28:58,080 --> 00:29:00,520 Así como en scratch, es recomendable o se están 689 00:29:00,520 --> 00:29:03,180 alentado en la especificación de pensar tipo de lo que podría pasar 690 00:29:03,180 --> 00:29:06,610 mal si usted no anticipa todo lo que el usuario puede hacer. 691 00:29:06,610 --> 00:29:08,050 Bugs, por lo tanto, podría resultar. 692 00:29:08,050 --> 00:29:09,710 Así que introduzca una cadena - 693 00:29:09,710 --> 00:29:11,130 ¿qué es un caso extremo en esta lista? 694 00:29:11,130 --> 00:29:13,320 ¿Qué es un escenario que yo, el programador, que no tenga 695 00:29:13,320 --> 00:29:16,070 previsto? 696 00:29:16,070 --> 00:29:17,600 Si. 697 00:29:17,600 --> 00:29:17,920 Bien. 698 00:29:17,920 --> 00:29:22,060 ¿Y qué si escribo en una serie como esta? 699 00:29:22,060 --> 00:29:22,500 Está bien. 700 00:29:22,500 --> 00:29:24,490 Por lo tanto, todavía funciona. 701 00:29:24,490 --> 00:29:25,880 Gramaticalmente no tiene sentido. 702 00:29:25,880 --> 00:29:27,180 Pero por lo menos funciona el programa. 703 00:29:27,180 --> 00:29:28,650 >> ¿Cuál es otro caso de la esquina? 704 00:29:28,650 --> 00:29:29,610 Algo que no esperaba. 705 00:29:29,610 --> 00:29:31,590 ¿Sí? 706 00:29:31,590 --> 00:29:31,940 Bien. 707 00:29:31,940 --> 00:29:34,950 Así que podríamos hacer algo así como un número muy, muy grande. 708 00:29:34,950 --> 00:29:37,270 Así que vamos a hacer esto aquí. 709 00:29:37,270 --> 00:29:40,880 Permítanme alejar por un segundo, quisiera destacar. 710 00:29:40,880 --> 00:29:42,250 No se puede copiar y pegar aquí. 711 00:29:42,250 --> 00:29:42,470 Está bien. 712 00:29:42,470 --> 00:29:44,440 Así que no se puede copiar y pegar en la ventana de terminal, así que vamos a 713 00:29:44,440 --> 00:29:46,950 simplemente simularlo. 714 00:29:46,950 --> 00:29:51,340 Permítanme alejar la imagen, va a envolver. 715 00:29:51,340 --> 00:29:52,700 No voy a hacer esto por mucho tiempo, porque no lo hará 716 00:29:52,700 --> 00:29:54,440 en realidad romper en este programa. 717 00:29:54,440 --> 00:29:55,260 Pero podría. 718 00:29:55,260 --> 00:29:55,830 Intro. 719 00:29:55,830 --> 00:29:56,580 Pero no fue así. 720 00:29:56,580 --> 00:29:57,050 Está bien. 721 00:29:57,050 --> 00:29:58,440 Pero es un caso genuino rincón. 722 00:29:58,440 --> 00:30:01,610 Y la única razón por la que se comportaron correctamente, por lo que 723 00:30:01,610 --> 00:30:05,820 hablar, se debe a que la función GetString CS50 es en realidad 724 00:30:05,820 --> 00:30:08,040 diseñado bajo el capó, como veremos en un par de semanas, 725 00:30:08,040 --> 00:30:11,570 para asignar automáticamente RAM más y más, más y más 726 00:30:11,570 --> 00:30:14,330 de memoria del sistema operativo, cuando se da cuenta, wow, 727 00:30:14,330 --> 00:30:16,670 realmente has escrito en algo bastante largo. 728 00:30:16,670 --> 00:30:18,500 Ahora, esto es un poco de una mentira piadosa. 729 00:30:18,500 --> 00:30:22,020 Si realmente hizo una pausa durante un buen rato y me escribió en 730 00:30:22,020 --> 00:30:24,640 algo así como 5 mil millones de caracteres en el teclado 731 00:30:24,640 --> 00:30:28,060 aquí, o realmente dio copiar y pegar un poco, que muy posiblemente 732 00:30:28,060 --> 00:30:29,730 podría hacer que el programa se bloquee. 733 00:30:29,730 --> 00:30:32,130 Sólo un poco más difícil de simular que con una finita 734 00:30:32,130 --> 00:30:33,740 cantidad de tiempo. 735 00:30:33,740 --> 00:30:37,320 >> ¿Cuál es otro caso de la esquina que pudimos probar? 736 00:30:37,320 --> 00:30:38,730 ¿Sí? 737 00:30:38,730 --> 00:30:39,020 Si. 738 00:30:39,020 --> 00:30:40,360 Así que ¿por qué no respondes nada? 739 00:30:40,360 --> 00:30:43,130 Así que en realidad tiene que tomar alguna acción, porque de lo contrario 740 00:30:43,130 --> 00:30:45,060 el programa va a sentarse allí parpadeando todo el día. 741 00:30:45,060 --> 00:30:46,860 Pero si simplemente pulse Enter - 742 00:30:46,860 --> 00:30:48,780 Bien, ahora, todavía se ve mal. 743 00:30:48,780 --> 00:30:51,670 ¿Acaso no chocar, pero tal vez ahora hay una oportunidad para 744 00:30:51,670 --> 00:30:54,190 empezar a aplicar un programa más riguroso 745 00:30:54,190 --> 00:30:55,290 que comprueba efectivamente. 746 00:30:55,290 --> 00:30:57,640 Y si la cadena, la oración, la palabra que yo 747 00:30:57,640 --> 00:31:00,890 escribió en tiene longitud 0, bueno, tal vez debería gritar a la 748 00:31:00,890 --> 00:31:03,770 usuario, o le digo o le permite introducir una cadena de nuevo, de modo que 749 00:31:03,770 --> 00:31:06,560 conseguimos realmente lo que parece ser un comportamiento correcto y no 750 00:31:06,560 --> 00:31:08,570 sólo la supervisión completa de mi parte. 751 00:31:08,570 --> 00:31:11,130 >> Pregunta en la espalda? 752 00:31:11,130 --> 00:31:11,970 Número decimal. 753 00:31:11,970 --> 00:31:13,120 Así que podríamos intentar eso. 754 00:31:13,120 --> 00:31:16,840 1,10000005. 755 00:31:16,840 --> 00:31:19,470 Parece que va a funcionar realmente bien. 756 00:31:19,470 --> 00:31:21,160 Y que en realidad se espera. 757 00:31:21,160 --> 00:31:24,550 A pesar de que podría haber escrito ese número hay, o un 758 00:31:24,550 --> 00:31:28,200 mayor número anterior, se dan cuenta de que cuando estás escribiendo usuario 759 00:31:28,200 --> 00:31:31,070 entrada y estamos usando la función GetString, no 760 00:31:31,070 --> 00:31:34,380 importa si lo que estoy escribiendo se ve como un número. 761 00:31:34,380 --> 00:31:36,720 Recordemos que de acuerdo con ASCII, todo en su 762 00:31:36,720 --> 00:31:39,920 teclado tiene un valor numérico que se puede asignar a un 763 00:31:39,920 --> 00:31:41,480 carácter, un char. 764 00:31:41,480 --> 00:31:44,490 Así que en este caso, a pesar de que podría escribir un número, el 765 00:31:44,490 --> 00:31:48,190 equipo va a pensar que es, por así decirlo, como una cadena - 766 00:31:48,190 --> 00:31:49,870 algo que se ve como un número, pero es 767 00:31:49,870 --> 00:31:51,090 realidad no es un número. 768 00:31:51,090 --> 00:31:53,450 Pero eso es en realidad una transición perfecta, porque ahora podemos 769 00:31:53,450 --> 00:31:55,450 de hecho la transición a programas de escritura que 770 00:31:55,450 --> 00:31:56,730 utilizar otros tipos de datos. 771 00:31:56,730 --> 00:32:01,840 >> Así que además de usar caracteres, o más bien, además de utilizar cuerdas, 772 00:32:01,840 --> 00:32:04,510 cuenta de que tenemos otros tipos de datos en C así como en 773 00:32:04,510 --> 00:32:05,230 otros idiomas. 774 00:32:05,230 --> 00:32:08,480 Un char, como su nombre indica, es un personaje único. 775 00:32:08,480 --> 00:32:12,150 Un flotador es un valor de punto flotante, y eso es sólo una fantasía 776 00:32:12,150 --> 00:32:14,470 manera de decir un número real - algo que tiene un decimal 777 00:32:14,470 --> 00:32:17,410 punto en que con algunos números a la izquierda y / o derecha. 778 00:32:17,410 --> 00:32:21,370 Un valor int es un entero, que es sólo un número como 123. 779 00:32:21,370 --> 00:32:24,170 Y ahora lo más interesante son cosas como doble. 780 00:32:24,170 --> 00:32:28,540 ¿Qué dijimos una habitación doble era la última vez? 781 00:32:28,540 --> 00:32:30,050 Es 64, derecha. 782 00:32:30,050 --> 00:32:33,560 Así que, por lo general un float es de 32-bit - 783 00:32:33,560 --> 00:32:37,340 por lo que es todo este tiempo en la memoria, utiliza 32 ceros y unos a 784 00:32:37,340 --> 00:32:40,530 representan valores - un doble es literalmente el doble, el cual 785 00:32:40,530 --> 00:32:43,810 significa que usted puede representar grandes números, o 786 00:32:43,810 --> 00:32:45,810 puede representar números más precisos. 787 00:32:45,810 --> 00:32:48,690 Así que usted puede tener más números después del punto decimal, pero 788 00:32:48,690 --> 00:32:51,520 como el hombre dijo en el video, incluso algo tan simple 789 00:32:51,520 --> 00:32:55,360 conceptualmente como 1/3 no puede representarse con precisión por un 790 00:32:55,360 --> 00:32:58,330 equipo, porque con el tiempo se le acaba de bits, y 791 00:32:58,330 --> 00:33:02,510 por lo tanto, sólo se puede hacer .33333333 tantas veces, en 792 00:33:02,510 --> 00:33:05,050 el que usted acaba de decir que me he quedado sin representación 793 00:33:05,050 --> 00:33:08,120 espacio, tengo que llamar a sólo un día y representarla 794 00:33:08,120 --> 00:33:10,200 un tanto imprecisa así. 795 00:33:10,200 --> 00:33:11,110 Y un largo tiempo - 796 00:33:11,110 --> 00:33:13,880 nombre estúpido, pero es porque hay un tipo de datos conocida como 797 00:33:13,880 --> 00:33:19,350 long en C que casualmente es a menudo 32 bits, al igual que un 798 00:33:19,350 --> 00:33:21,670 int es de 32 bits, pero es un tiempo largo 799 00:33:21,670 --> 00:33:23,560 general 64 bits. 800 00:33:23,560 --> 00:33:25,740 Por lo tanto, sólo significa que usted puede representar más 801 00:33:25,740 --> 00:33:26,990 números que esto. 802 00:33:26,990 --> 00:33:27,410 >> Está bien. 803 00:33:27,410 --> 00:33:29,390 Así que si realmente quieres empezar representando las cosas, 804 00:33:29,390 --> 00:33:31,030 puede ser que necesite más tipos sofisticados, y 805 00:33:31,030 --> 00:33:32,340 es por eso que contamos con cadena. 806 00:33:32,340 --> 00:33:36,450 Así, en la biblioteca CS50, ese archivo llamado cs50.h, hemos 807 00:33:36,450 --> 00:33:41,110 en realidad declaró un tipo de datos, por así decirlo, llamada cadena, 808 00:33:41,110 --> 00:33:42,710 pero string en realidad no existe. 809 00:33:42,710 --> 00:33:44,780 Esto es, una vez más, una de estas capas que vamos a pelar 810 00:33:44,780 --> 00:33:47,490 de nuevo en una semana o dos y tirar a la basura, y de hecho 811 00:33:47,490 --> 00:33:49,640 mirar debajo del capó a lo que en realidad es una cadena, y 812 00:33:49,640 --> 00:33:50,840 cómo está representada. 813 00:33:50,840 --> 00:33:53,520 También vamos a ver valores booleanos. 814 00:33:53,520 --> 00:33:56,040 >> Entonces, ¿qué era un bool en el contexto de Scratch? 815 00:33:59,154 --> 00:34:00,300 Es cierto o falso. 816 00:34:00,300 --> 00:34:03,900 Así que es un valor que es verdadero o falso, encendido o apagado, 1 o 817 00:34:03,900 --> 00:34:06,140 0, sin embargo quiere ver el mundo. 818 00:34:06,140 --> 00:34:09,739 Así que en C, gracias a la biblioteca CS50, que a su vez 819 00:34:09,739 --> 00:34:12,179 incluye otra biblioteca debajo de la capucha, tenemos 820 00:34:12,179 --> 00:34:14,909 el acceso a un tipo de datos que se llama bool, que se 821 00:34:14,909 --> 00:34:18,730 literalmente nos permite asignar los valores true o false para 822 00:34:18,730 --> 00:34:20,219 las cosas en un programa. 823 00:34:20,219 --> 00:34:23,880 >> Así que vamos a seguir adelante aquí y escribir un pequeño programa que 824 00:34:23,880 --> 00:34:26,330 hace algo relacionado con números. 825 00:34:26,330 --> 00:34:29,840 Así que permítanme volver al Dispositivo CS50, déjame seguir adelante y 826 00:34:29,840 --> 00:34:32,770 crear un nuevo archivo llamado aquí - 827 00:34:32,770 --> 00:34:35,460 vamos a decir algo simple, como math.c. 828 00:34:38,270 --> 00:34:38,710 Está bien. 829 00:34:38,710 --> 00:34:41,600 Y ahora sube a la parte superior de mi programa, estoy 830 00:34:41,600 --> 00:34:42,510 va a hacer el habitual - 831 00:34:42,510 --> 00:34:44,780 # Include, así que puedo usar 832 00:34:44,780 --> 00:34:46,860 printf, int main (void) - 833 00:34:46,860 --> 00:34:49,270 vamos a volver, con el tiempo, lo que significa int 834 00:34:49,270 --> 00:34:52,389 aquí, lo que significa vacío aquí, pero por ahora, sólo sé que 835 00:34:52,389 --> 00:34:54,270 usted tiene que comenzar programas como este. 836 00:34:54,270 --> 00:34:56,280 Ahora voy a seguir adelante y decir algo un poco 837 00:34:56,280 --> 00:35:02,110 diferente - printf ("Dame un número:" 838 00:35:02,110 --> 00:35:03,570 ). 839 00:35:03,570 --> 00:35:09,220 Entonces me voy a hacer int n = getInt, porque 840 00:35:09,220 --> 00:35:12,770 Resulta getInt es otra función en la biblioteca CS50 841 00:35:12,770 --> 00:35:14,060 además GetString. 842 00:35:14,060 --> 00:35:17,340 Y ahora me voy a hacer algo estúpido, como "gracias 843 00:35:17,340 --> 00:35:25,760 para el% d ", para el número entero decimal, y luego coma n, y 844 00:35:25,760 --> 00:35:26,620 a continuación, devuelve 0. 845 00:35:26,620 --> 00:35:28,940 Así que de nuevo, devuelve 0 no tiene nada que ver con el número que estoy 846 00:35:28,940 --> 00:35:30,080 preguntar al usuario. 847 00:35:30,080 --> 00:35:33,620 Sólo significa que al final de todo, presumiblemente, es así. 848 00:35:33,620 --> 00:35:36,290 >> Así que déjame ir a mi ventana de terminal aquí. 849 00:35:36,290 --> 00:35:39,590 Déjame escribir make matemáticas, introduzca. 850 00:35:39,590 --> 00:35:41,360 Y algo está mal. 851 00:35:41,360 --> 00:35:44,620 Hacer las matemáticas no funcionó. 852 00:35:44,620 --> 00:35:46,170 Este es el primero de nuestros mensajes de error. 853 00:35:46,170 --> 00:35:46,570 ¿Por qué? 854 00:35:46,570 --> 00:35:49,720 Un críptico poco, pero - 855 00:35:49,720 --> 00:35:50,060 Si. 856 00:35:50,060 --> 00:35:51,240 Así cs50.h. 857 00:35:51,240 --> 00:35:53,900 Así que de nuevo, especialmente al principio, podrás escribir tu primer 858 00:35:53,900 --> 00:35:56,590 programa conjunto de procesadores 1 en secciones, en horas de oficina, y 859 00:35:56,590 --> 00:35:59,050 francamente, va a ser abrumador a veces lo que estas cosas 860 00:35:59,050 --> 00:36:00,000 en realidad están diciendo. 861 00:36:00,000 --> 00:36:01,890 Pero te darás cuenta muy pronto empiezan a caer 862 00:36:01,890 --> 00:36:06,120 en los cubos mediante el cual éste significa que usted ha dejado una 863 00:36:06,120 --> 00:36:08,290 de la # incluye en la parte superior del archivo. 864 00:36:08,290 --> 00:36:10,960 Y Clang, el compilador, se le informa de ello por 865 00:36:10,960 --> 00:36:14,090 decir, en lugar imaginario, la declaración implícita de 866 00:36:14,090 --> 00:36:15,990 getint función no es válido. 867 00:36:15,990 --> 00:36:16,310 >> Está bien. 868 00:36:16,310 --> 00:36:17,520 Entonces, ¿qué significa eso? 869 00:36:17,520 --> 00:36:22,080 Sólo significa que usted ha declarado implícitamente en getInt 870 00:36:22,080 --> 00:36:24,850 el sentido de que no se ha declarado explícitamente. 871 00:36:24,850 --> 00:36:27,300 Para declarar explícitamente int, hay que enseñar 872 00:36:27,300 --> 00:36:28,740 Clang que existe. 873 00:36:28,740 --> 00:36:32,020 Y la solución muy simple para esto es para enseñarlo por 874 00:36:32,020 --> 00:36:34,780 incluyendo este otro archivo, cs50.h, en 875 00:36:34,780 --> 00:36:35,850 la parte superior de su archivo. 876 00:36:35,850 --> 00:36:40,380 Porque literalmente, lo que hace es # include le dice Clang 877 00:36:40,380 --> 00:36:44,030 más o menos para ir a buscar el archivo llamado cs50.h, copiar, 878 00:36:44,030 --> 00:36:48,150 pegarlo automáticamente en la parte superior de mi programa por mí, 879 00:36:48,150 --> 00:36:50,850 y luego convertir el código fuente en ceros y unos. 880 00:36:50,850 --> 00:36:52,850 Pero eso, obviamente, sería muy aburrido si nosotros, los humanos tenían 881 00:36:52,850 --> 00:36:55,370 para ir copiando y pegando estos archivos grandes todo el tiempo, 882 00:36:55,370 --> 00:36:58,540 # include tan sólo hace todo de forma automática sin 883 00:36:58,540 --> 00:37:01,550 enturbiar mi código con otra persona biblioteca. 884 00:37:01,550 --> 00:37:06,370 Y una biblioteca es más que otro archivo que contiene las funciones y 885 00:37:06,370 --> 00:37:08,340 otras cosas que alguien ha escrito, de que somos 886 00:37:08,340 --> 00:37:10,270 aprovechar para nuestro propio bien. 887 00:37:10,270 --> 00:37:10,580 >> Está bien. 888 00:37:10,580 --> 00:37:11,200 Vamos a intentarlo de nuevo. 889 00:37:11,200 --> 00:37:12,250 Hacer matemáticas. 890 00:37:12,250 --> 00:37:13,120 Intro. 891 00:37:13,120 --> 00:37:13,530 Bueno. 892 00:37:13,530 --> 00:37:14,880 Así que parece haber funcionado. 893 00:37:14,880 --> 00:37:18,330 Así que permítanme ahora funcionan las matemáticas;. / Matemáticas. 894 00:37:18,330 --> 00:37:21,100 Ingrese me da un número, 123. 895 00:37:21,100 --> 00:37:22,620 Gracias por el 123. 896 00:37:22,620 --> 00:37:24,490 Ahora vamos a probar con otro caso de la esquina. 897 00:37:24,490 --> 00:37:26,530 Una cadena es bastante generoso, ya que un 898 00:37:26,530 --> 00:37:27,620 cadena puede ser cualquier cosa. 899 00:37:27,620 --> 00:37:28,910 Puede parecer que los números, parece 900 00:37:28,910 --> 00:37:30,600 personajes, se parecen a las palabras. 901 00:37:30,600 --> 00:37:31,900 Pero un int es un entero. 902 00:37:31,900 --> 00:37:34,370 Así que ahora si soy el usuario difícil, y está diciendo "Dame 903 00:37:34,370 --> 00:37:38,730 un número ", lo que si trato de hacer algo como 0,1? 904 00:37:38,730 --> 00:37:41,510 Bueno, eso es un número, y es consistente con la 905 00:37:41,510 --> 00:37:44,180 gramática que se utiliza aquí, pero por debajo de la capucha, estoy de 906 00:37:44,180 --> 00:37:45,610 curso usando el getInt función. 907 00:37:45,610 --> 00:37:46,610 >> Así que vamos a ver qué pasa. 908 00:37:46,610 --> 00:37:48,250 Intro, vuelva a intentarlo. 909 00:37:48,250 --> 00:37:48,560 Está bien. 910 00:37:48,560 --> 00:37:50,570 Voy a ser difícil y simplemente pulse Enter de nuevo. 911 00:37:50,570 --> 00:37:51,700 Enter, Intro. 912 00:37:51,700 --> 00:37:53,890 Así que ahora parece que getInt es un poco más 913 00:37:53,890 --> 00:37:55,240 poderoso que GetString. 914 00:37:55,240 --> 00:37:58,540 Nosotros, el personal, implementado de tal manera que si se observa 915 00:37:58,540 --> 00:38:02,100 no nos ha dado un entero - y un int es un número decimal 916 00:38:02,100 --> 00:38:04,785 contienen ceros, unos, dos, tres, cuatro, cinco, seises, 917 00:38:04,785 --> 00:38:05,540 sietes, ochos, o nueves. 918 00:38:05,540 --> 00:38:06,310 Y eso es todo. 919 00:38:06,310 --> 00:38:08,810 No hay puntos decimales, ni personajes, ni signos de puntuación. 920 00:38:08,810 --> 00:38:10,390 Parece que tenemos que cooperar. 921 00:38:10,390 --> 00:38:13,680 Así que voy a tratar de cuatro, cinco, seis, y eso me ayuda a pasar. 922 00:38:13,680 --> 00:38:16,760 Así que en realidad, para ser anal aquí, probablemente debería decir "Dame 923 00:38:16,760 --> 00:38:20,310 un número entero "con el fin de transmitir al usuario 924 00:38:20,310 --> 00:38:22,620 exactamente lo que pretendo. 925 00:38:22,620 --> 00:38:24,090 >> Ahora vamos a pensar bajo la campana. 926 00:38:24,090 --> 00:38:27,930 No vamos a ver cómo se implementa cs50.h hoy, 927 00:38:27,930 --> 00:38:29,080 que biblioteca. 928 00:38:29,080 --> 00:38:33,600 Pero si se sigue diciendo reintentar, reintentar, reintentar, lo que la programación 929 00:38:33,600 --> 00:38:36,970 construir estoy usando presumiblemente por debajo de la campana 930 00:38:36,970 --> 00:38:39,000 implementar eso? 931 00:38:39,000 --> 00:38:39,980 Así que sólo un bucle, ¿verdad? 932 00:38:39,980 --> 00:38:41,930 Una de las ideas más sencillas que hemos visto en Scratch. 933 00:38:41,930 --> 00:38:45,050 The Forever construir, construir la repetición. 934 00:38:45,050 --> 00:38:47,320 Es de suponer que, en este programa, por debajo de la campana, incluso 935 00:38:47,320 --> 00:38:49,470 a pesar de que está escrito en C y no cero, que está haciendo 936 00:38:49,470 --> 00:38:54,300 algo que se llama equivalente a siempre si el usuario no tiene 937 00:38:54,300 --> 00:38:58,710 escribió en un número entero, por ejemplo reintentar, reintentar, reintentar, reintentar, por lo que 938 00:38:58,710 --> 00:39:01,220 finalmente, cuando lo hacemos llegar un entero, entonces 939 00:39:01,220 --> 00:39:02,970 salir de ese bucle. 940 00:39:02,970 --> 00:39:05,610 >> Entonces, ¿qué otras funciones pueden usamos aquí en la biblioteca del CS50? 941 00:39:05,610 --> 00:39:07,880 Bueno, un poco de las obvias, por lo menos sobre la base de la 942 00:39:07,880 --> 00:39:09,570 Tipos de datos que ahora sabemos que existen. 943 00:39:09,570 --> 00:39:12,900 Implementamos GetString, getInt, sino en todo el 944 00:39:12,900 --> 00:39:15,680 primeras semanas del término, también se puede utilizar GetFloat y 945 00:39:15,680 --> 00:39:18,870 GetDouble y GetLongLong con el fin de obtener exactamente los 946 00:39:18,870 --> 00:39:20,030 Tipos de datos que desee. 947 00:39:20,030 --> 00:39:24,030 Debido a que el detalle clave aquí es que a diferencia de otros idiomas, 948 00:39:24,030 --> 00:39:26,630 como Python y Ruby, en el que no necesariamente tienen que 949 00:39:26,630 --> 00:39:29,730 declarar el tipo de datos de una variable - 950 00:39:29,730 --> 00:39:32,390 usted no tiene que decirle a la computadora qué tipo de cosas 951 00:39:32,390 --> 00:39:34,000 te vas a poner en la variable - 952 00:39:34,000 --> 00:39:36,640 en C, usted tiene que ser siempre tan precisa. 953 00:39:36,640 --> 00:39:40,060 Así que si quieres una variable llamada n, un trozo de almacenamiento 954 00:39:40,060 --> 00:39:42,900 que en este caso pasa a ser de 32 bits por convención, 955 00:39:42,900 --> 00:39:45,660 tiene que decirle a la computadora que estos bits son 956 00:39:45,660 --> 00:39:47,840 va a almacenar un número - 957 00:39:47,840 --> 00:39:50,630 No es un personaje, no una cadena, no un flotador. 958 00:39:50,630 --> 00:39:52,620 Y esto se refiere a la cuestión que efectivamente 959 00:39:52,620 --> 00:39:53,760 encontré la semana pasada. 960 00:39:53,760 --> 00:39:57,050 Si estamos usando ceros y números de seres para representar no sólo 961 00:39:57,050 --> 00:40:00,770 números, pero A y B y C, como en el mundo es un 962 00:40:00,770 --> 00:40:03,460 equipo va a saber que este patrón de bits en realidad 963 00:40:03,460 --> 00:40:07,650 representa el número 65, en lugar de representar el 964 00:40:07,650 --> 00:40:09,860 letra A, que casualmente, según 965 00:40:09,860 --> 00:40:13,440 ASCII, recuerdo, era equivalente a 65? 966 00:40:13,440 --> 00:40:16,550 >> Así que estos tipos de datos proporcionan un contexto para el equipo, por lo 967 00:40:16,550 --> 00:40:18,810 que se sabe si estos bits se debe interpretar como una 968 00:40:18,810 --> 00:40:23,660 int o como una cadena. 969 00:40:23,660 --> 00:40:26,500 Cualquier pregunta, entonces, a este respecto? 970 00:40:26,500 --> 00:40:28,149 ¿Sí? 971 00:40:34,780 --> 00:40:35,270 DAVID J. MALAN: Buena pregunta. 972 00:40:35,270 --> 00:40:39,140 Si sacamos stdio.h, guardamos el archivo - 973 00:40:39,140 --> 00:40:44,360 déjame ir a la ventana de terminal y ejecute make matemáticas, zoom 974 00:40:44,360 --> 00:40:45,530 y entrar - 975 00:40:45,530 --> 00:40:47,700 ahora me sale un error diferente, porque soy implícitamente 976 00:40:47,700 --> 00:40:49,650 declarando cuál es la función ahora? 977 00:40:49,650 --> 00:40:50,700 Printf. 978 00:40:50,700 --> 00:40:52,970 Así que ahora he creado un nuevo problema, cuya solución es 979 00:40:52,970 --> 00:40:53,890 esencialmente el mismo. 980 00:40:53,890 --> 00:40:55,365 Tengo que poner eso de vuelta. 981 00:40:55,365 --> 00:40:56,615 AUDIENCIA: [inaudible] 982 00:41:03,534 --> 00:41:04,030 DAVID J. MALAN: Oh. 983 00:41:04,030 --> 00:41:04,850 Así que si saco - 984 00:41:04,850 --> 00:41:05,360 Bueno, sí. 985 00:41:05,360 --> 00:41:08,960 Así que si me quito la inclusión de la E / S de la biblioteca hasta 986 00:41:08,960 --> 00:41:12,020 aquí, y entonces estás diciendo que si me deshago de printf, obtener 987 00:41:12,020 --> 00:41:13,450 deshacerse de printf? 988 00:41:13,450 --> 00:41:13,810 Sí. 989 00:41:13,810 --> 00:41:18,450 Esto debería funcionar, porque ya no estoy usando cualquiera - gritos. 990 00:41:18,450 --> 00:41:20,110 ¿Acabo de mentir? 991 00:41:20,110 --> 00:41:21,650 Oh, está bien. 992 00:41:21,650 --> 00:41:25,640 Esto no funcionará debido a un nuevo error que acaba de presentar. 993 00:41:25,640 --> 00:41:28,390 Y éste es un poco más fáciles de entender. 994 00:41:28,390 --> 00:41:29,440 >> ¿Cuál es el problema? 995 00:41:29,440 --> 00:41:30,680 Sin usar la variable n. 996 00:41:30,680 --> 00:41:34,040 Así que este error es el resultado de haber configurado el 997 00:41:34,040 --> 00:41:36,640 aparato a ser particularmente pedante, gritar realmente en 998 00:41:36,640 --> 00:41:39,060 por todos los errores posibles, incluso si es una especie de 999 00:41:39,060 --> 00:41:41,950 un error no fatal como esto - ¿es realmente tan grande 1000 00:41:41,950 --> 00:41:44,820 tratar de que me asignaron un int, poner un número en él, y luego 1001 00:41:44,820 --> 00:41:46,030 acabo de hacer nada con él? 1002 00:41:46,030 --> 00:41:47,020 Así que funcionalmente, no. 1003 00:41:47,020 --> 00:41:50,410 Eso no va a romper el programa. 1004 00:41:50,410 --> 00:41:51,490 Es sólo un poco estúpido, ¿verdad? 1005 00:41:51,490 --> 00:41:54,220 No hay valor para haber pedido ese número, almacenados 1006 00:41:54,220 --> 00:41:56,370 en una variable, si nunca vamos a hacer nada 1007 00:41:56,370 --> 00:41:58,000 con ella, ya sea imprimir o guardar. 1008 00:41:58,000 --> 00:42:00,270 Así pues, en este caso, Clang está reconociendo como mucho, y 1009 00:42:00,270 --> 00:42:02,010 que está diciendo sin usar la variable n. 1010 00:42:02,010 --> 00:42:05,380 >> Así que podemos arreglar esto, si realmente queremos. 1011 00:42:05,380 --> 00:42:07,250 Pero de nuevo, esto no es una buena programación ahora. 1012 00:42:07,250 --> 00:42:09,310 Así que sólo podía hacer esto - 1013 00:42:09,310 --> 00:42:12,060 bajar aquí, déjame limpiar la pantalla, hacer matemáticas. 1014 00:42:12,060 --> 00:42:13,090 Eso funciona. 1015 00:42:13,090 --> 00:42:18,110 Ahora puedo ejecutar mi programa de matemáticas, toma de entrada - 1016 00:42:18,110 --> 00:42:18,700 bueno, eso era malo. 1017 00:42:18,700 --> 00:42:23,450 Toma de entrada, y que es todo lo que hace, en este caso. 1018 00:42:23,450 --> 00:42:25,220 >> Así que en realidad, vamos a probar un caso, otra esquina que 1019 00:42:25,220 --> 00:42:26,300 no pensó antes. 1020 00:42:26,300 --> 00:42:28,220 En este caso - aquí, vamos a volver a la que es una 1021 00:42:28,220 --> 00:42:29,500 poco más fácil de usar. 1022 00:42:29,500 --> 00:42:32,580 Déjame volver aquí y hacer funcionar de nuevo las matemáticas. 1023 00:42:32,580 --> 00:42:34,190 ¡Vaya, qué hice mal? 1024 00:42:34,190 --> 00:42:35,400 Tengo que hacer retroceder aún más. 1025 00:42:35,400 --> 00:42:36,390 Bien. 1026 00:42:36,390 --> 00:42:38,490 Ahora estamos de vuelta en el estado original, donde todos 1027 00:42:38,490 --> 00:42:39,990 es de esperar también. 1028 00:42:39,990 --> 00:42:43,360 Y ahora si me quedo matemáticas, 123 parece funcionar. 1029 00:42:43,360 --> 00:42:46,010 Pero esto no es realmente una prueba eficaz, por decir sólo 1030 00:42:46,010 --> 00:42:47,930 bien, eso funciona. 1031 00:42:47,930 --> 00:42:49,120 789, que funciona. 1032 00:42:49,120 --> 00:42:50,100 Es hora de presentar. 1033 00:42:50,100 --> 00:42:51,870 Porque hay otros casos de esquina aquí. 1034 00:42:51,870 --> 00:42:55,040 Una cadena que realmente no nos dan muchos problemas al escribir un 1035 00:42:55,040 --> 00:42:56,510 gran cantidad de personajes. 1036 00:42:56,510 --> 00:42:59,580 Pero ¿y si escribo en esto? 1037 00:42:59,580 --> 00:43:04,850 Dar en el número 1 de mucho, mucho aquí - 1038 00:43:04,850 --> 00:43:06,300 bien, se está haciendo un poco aburrido, así que voy a 1039 00:43:06,300 --> 00:43:10,040 parar aquí, y voy a presionar Enter. 1040 00:43:10,040 --> 00:43:11,290 >> ¿Qué demonios ha pasado? 1041 00:43:14,110 --> 00:43:17,680 Así que en realidad esto puede ser explicado. 1042 00:43:17,680 --> 00:43:18,920 Así que se lo toma como binario? 1043 00:43:18,920 --> 00:43:21,130 Un buen pensamiento, pero no, no es el hecho de que se tomó 1044 00:43:21,130 --> 00:43:22,815 como binario, porque en realidad, eso era sólo una especie de 1045 00:43:22,815 --> 00:43:23,080 coincidencia. 1046 00:43:23,080 --> 00:43:23,930 Podemos hacer esto otra vez. 1047 00:43:23,930 --> 00:43:26,530 Así que no hay 2 en el sistema binario, que es 1048 00:43:26,530 --> 00:43:27,420 probablemente suficiente de todos modos. 1049 00:43:27,420 --> 00:43:28,780 Intro. 1050 00:43:28,780 --> 00:43:30,140 Así que ese no era el problema. 1051 00:43:30,140 --> 00:43:31,390 ¿Qué más? 1052 00:43:34,650 --> 00:43:35,400 Exactamente. 1053 00:43:35,400 --> 00:43:37,830 >> Así que pensar en volver a lo que realmente es un int. 1054 00:43:37,830 --> 00:43:40,970 Es 32 bits que colectivamente se interpretan 1055 00:43:40,970 --> 00:43:42,090 como un número. 1056 00:43:42,090 --> 00:43:44,730 Si tiene 32 bits, que significa que cada uno de los bits puede ser 1057 00:43:44,730 --> 00:43:46,690 un 0 o un 1, 0 o un 1. 1058 00:43:46,690 --> 00:43:49,090 Así que eso significa que hay dos posibilidades para este bit, 1059 00:43:49,090 --> 00:43:51,140 dos posibilidades para esto, dos posibilidades para esta 1060 00:43:51,140 --> 00:43:52,570 bit - por lo que es 2 veces 2 veces - 1061 00:43:52,570 --> 00:43:55,480 de manera que es 2 a la potencia 32 es el número total de 1062 00:43:55,480 --> 00:43:58,960 permutaciones de ceros y unos, si usted tiene 32 1063 00:43:58,960 --> 00:44:01,400 marcadores de posición, ceros o unos, en frente de usted. 1064 00:44:01,400 --> 00:44:04,250 Así que si tengo 2 a la 32, matemáticamente, que es lo que? 1065 00:44:07,080 --> 00:44:07,840 Así que es mucho. 1066 00:44:07,840 --> 00:44:09,910 Son las 4 millones de dólares, más o menos. 1067 00:44:09,910 --> 00:44:13,510 Y 4 mil millones no parece ser lo que fue impreso aquí. 1068 00:44:13,510 --> 00:44:16,290 De hecho, esto se ve más cerca de 2 millones de dólares. 1069 00:44:16,290 --> 00:44:17,970 Pero esto no es una coincidencia. 1070 00:44:17,970 --> 00:44:21,590 El hecho de que el ordenador se ha malinterpretado mi número enorme, 1071 00:44:21,590 --> 00:44:24,260 mi enorme secuencia de unos y entonces mi gran secuencia de dos en dos, 1072 00:44:24,260 --> 00:44:26,880 ya que alrededor de 2 mil millones, se explica cómo? 1073 00:44:30,250 --> 00:44:32,180 Hay un límite en el int. 1074 00:44:32,180 --> 00:44:34,970 Hay un sin duda un valor máximo que se puede representar. 1075 00:44:34,970 --> 00:44:36,370 Pero por lo general es 4 mil millones, ¿no? 1076 00:44:36,370 --> 00:44:39,100 Si 2 a la 32 es aproximadamente 4 mil millones, que parece 1077 00:44:39,100 --> 00:44:40,350 que es el mayor número. 1078 00:44:42,420 --> 00:44:45,240 Así que no es un residuo, sino un buen pensamiento. 1079 00:44:45,240 --> 00:44:46,340 Los números negativos. 1080 00:44:46,340 --> 00:44:49,570 Así que si usted tiene 4000 millones las cosas posibles que puede 1081 00:44:49,570 --> 00:44:52,970 representar con estas diversas permutaciones de 32 0 y 1082 00:44:52,970 --> 00:44:55,600 1s, bueno, es lógico pensar que los seres humanos puede ser que desee 1083 00:44:55,600 --> 00:44:57,110 representar no sólo números enteros positivos 1084 00:44:57,110 --> 00:44:58,240 pero enteros negativos. 1085 00:44:58,240 --> 00:45:00,410 Y de hecho, esa es la suposición de que C hace. 1086 00:45:00,410 --> 00:45:03,550 Así que con 32 bits, puede representar aproximadamente 2 negativo 1087 00:45:03,550 --> 00:45:06,630 millones de todo el camino hasta positivo 2 mil millones. 1088 00:45:06,630 --> 00:45:08,750 Y así, en este caso, lo que realmente estamos viendo es sólo 1089 00:45:08,750 --> 00:45:13,600 al margen de la capacidad de nuestro entero, y tenemos, por lo que 1090 00:45:13,600 --> 00:45:15,860 para hablar, se desbordó un número entero. 1091 00:45:15,860 --> 00:45:19,180 Hemos tratado de meter más bits en lo que realmente puede encajar. 1092 00:45:19,180 --> 00:45:22,960 Así, el resultado final es que tienen esencialmente las 1 bits. 1093 00:45:22,960 --> 00:45:25,280 Hemos volteado todas nuestras bits en, hemos tratado de representar 1094 00:45:25,280 --> 00:45:27,630 el mayor número posible, pero es evidente que no es casi 1095 00:45:27,630 --> 00:45:30,960 lo suficientemente grande como para representar las dos cosas que acabo escrito pulg 1096 00:45:30,960 --> 00:45:31,730 ¿Sí? 1097 00:45:31,730 --> 00:45:32,980 AUDIENCIA: [inaudible] 1098 00:45:37,230 --> 00:45:37,830 >> DAVID J. MALAN: Buena pregunta. 1099 00:45:37,830 --> 00:45:40,080 ¿Por qué no podemos simplemente representa que negativo 1100 00:45:40,080 --> 00:45:41,500 como se acaba de firmar un personaje? 1101 00:45:41,500 --> 00:45:44,200 Así que es absolutamente posible, y entonces podríamos ahorrar 1102 00:45:44,200 --> 00:45:45,470 un bit adicional. 1103 00:45:45,470 --> 00:45:49,100 Sin embargo, usted todavía va a tener que representar ese guión, y 1104 00:45:49,100 --> 00:45:50,700 que te va a costar por lo menos algo, 1105 00:45:50,700 --> 00:45:52,220 presumiblemente un poco. 1106 00:45:52,220 --> 00:45:55,610 Así que sí, podríamos tener 32 bits que se utilizan para obtener el número, pero ahora 1107 00:45:55,610 --> 00:45:57,610 necesitamos otro poco utilizado para nuestro guión 1108 00:45:57,610 --> 00:45:58,810 símbolo, el signo menos. 1109 00:45:58,810 --> 00:46:01,470 Así que ahora tenemos 33 valores de bit, lo que podemos hacer, pero es 1110 00:46:01,470 --> 00:46:02,570 No de la manera que se hace. 1111 00:46:02,570 --> 00:46:05,140 Hicimos una sentencia de llamada hace años, 32 bits es una especie de 1112 00:46:05,140 --> 00:46:06,170 unidad de medida aquí. 1113 00:46:06,170 --> 00:46:08,120 Así que vamos a usar uno de estos bits con eficacia a 1114 00:46:08,120 --> 00:46:12,950 representa la negatividad, y 31 bits para representar el número. 1115 00:46:12,950 --> 00:46:15,550 Otras preguntas? 1116 00:46:15,550 --> 00:46:15,670 Está bien. 1117 00:46:15,670 --> 00:46:16,030 Eso es mucho. 1118 00:46:16,030 --> 00:46:17,930 ¿Por qué no seguir adelante y tomar nuestros cinco minutos de descanso aquí? 1119 00:46:23,580 --> 00:46:24,270 >> Está bien. 1120 00:46:24,270 --> 00:46:31,250 Así que de nuevo, no poner demasiado énfasis en las aplicaciones matemáticas 1121 00:46:31,250 --> 00:46:33,840 de la programación, vamos a arrancar este ejemplo 1122 00:46:33,840 --> 00:46:36,590 antes de pasar a otras construcciones, sólo porque 1123 00:46:36,590 --> 00:46:39,430 se ilustran algunos puntos de tropiezo comunes en algunos de 1124 00:46:39,430 --> 00:46:41,520 los conceptos básicos a la hora de escribir programas. 1125 00:46:41,520 --> 00:46:44,360 En este caso, haciendo expresiones aritméticas que tienen algún 1126 00:46:44,360 --> 00:46:48,010 relevancia interesante a la sintaxis. 1127 00:46:48,010 --> 00:46:50,430 >> Así que esto es sólo una fórmula con la que podemos convertir 1128 00:46:50,430 --> 00:46:52,690 temperatura de Fahrenheit a Celsius. 1129 00:46:52,690 --> 00:46:54,600 Si usted no recuerda, esto es sólo la fórmula. 1130 00:46:54,600 --> 00:46:58,870 Así que si lo conectamos en Fahrenheit valor de 32 grados, que es 1131 00:46:58,870 --> 00:47:02,850 congelación, que va a ser 32 menos 32 es 0, y de hecho, 1132 00:47:02,850 --> 00:47:05,130 0 en grados Celsius es también la congelación. 1133 00:47:05,130 --> 00:47:08,210 Así cordura registro rápido allí - esa es la fórmula familiar. 1134 00:47:08,210 --> 00:47:10,880 Permítanme pasar al aparato, sin embargo, y comenzar 1135 00:47:10,880 --> 00:47:13,920 escribir un programa que se llama, como, f2c, "Fahrenheit a 1136 00:47:13,920 --> 00:47:15,920 Celsius punto c ". 1137 00:47:15,920 --> 00:47:18,930 Y en la parte superior aquí, voy a empezar con # include 1138 00:47:18,930 --> 00:47:22,190 stdio.h, y yo voy a hacer int main (void), y 1139 00:47:22,190 --> 00:47:24,680 otra vez, volveremos en el futuro en cuanto a qué significa int 1140 00:47:24,680 --> 00:47:26,820 allí y lo vacío significa que hay. 1141 00:47:26,820 --> 00:47:28,770 Y ahora déjame seguir adelante y poner en práctica un programa que 1142 00:47:28,770 --> 00:47:31,170 básicamente hace esta conversión para nosotros. 1143 00:47:31,170 --> 00:47:36,830 >> Así printf, digamos, la temperatura en grados Fahrenheit. 1144 00:47:36,830 --> 00:47:40,140 Y luego me deja seguir adelante y obtener el valor para el usuario. 1145 00:47:40,140 --> 00:47:43,120 ¿Qué tipo de valor debería obtener de los usuarios, si quiero 1146 00:47:43,120 --> 00:47:45,620 que me dieran una temperatura en Fahrenheit? 1147 00:47:45,620 --> 00:47:48,090 ¿Sí? 1148 00:47:48,090 --> 00:47:50,090 ¿Qué te propones? 1149 00:47:50,090 --> 00:47:50,410 Si. 1150 00:47:50,410 --> 00:47:51,960 Así flotador se siente bastante razonable. 1151 00:47:51,960 --> 00:47:53,950 Tenemos, de nuevo, sólo algunas opciones que 1152 00:47:53,950 --> 00:47:55,310 que hemos visto hasta el momento. 1153 00:47:55,310 --> 00:48:00,100 Tenemos cosas como char, float doble, int, long long, 1154 00:48:00,100 --> 00:48:01,150 bool, string. 1155 00:48:01,150 --> 00:48:03,510 Así que de estos, el flotador se siente bastante razonable. 1156 00:48:03,510 --> 00:48:06,340 Nos vendría bien un derecho doble, porque, si de verdad queremos 1157 00:48:06,340 --> 00:48:07,580 representan la temperatura de un ser humano - 1158 00:48:07,580 --> 00:48:10,730 98,60000 - 1159 00:48:10,730 --> 00:48:12,990 podríamos utilizar 64 bits para hacer eso, pero se siente como 1160 00:48:12,990 --> 00:48:14,200 exageración para la temperatura. 1161 00:48:14,200 --> 00:48:16,380 Así que vamos a ir con flotador. 1162 00:48:16,380 --> 00:48:18,100 Ahora necesito una variable. 1163 00:48:18,100 --> 00:48:20,500 Sólo para no complicar las cosas, voy a llamarlo f, pero 1164 00:48:20,500 --> 00:48:23,370 bien podría llamarlo correctamente la temperatura, 1165 00:48:23,370 --> 00:48:24,600 pero tampoco está bien. 1166 00:48:24,600 --> 00:48:27,610 Así float f = GetFloat. 1167 00:48:27,610 --> 00:48:30,220 Tan pronto como ahora ha decidido utilizar GetFloat, sin embargo, me 1168 00:48:30,220 --> 00:48:33,340 necesita hacer una corrección. 1169 00:48:33,340 --> 00:48:33,720 Si. 1170 00:48:33,720 --> 00:48:37,460 Así que tenemos que incluir # , de lo contrario el compilador 1171 00:48:37,460 --> 00:48:39,000 va a gritar a nosotros. 1172 00:48:39,000 --> 00:48:41,720 Ahora que tengo un flotador, déjame ir adelante y hacer el 1173 00:48:41,720 --> 00:48:42,460 conversión. 1174 00:48:42,460 --> 00:48:44,980 >> Así que primero, permítanme entrar en el hábito de aquí 1175 00:48:44,980 --> 00:48:46,310 comentando mi código. 1176 00:48:46,310 --> 00:48:49,820 Así que de nuevo, un comentario es sólo una notación para el ser humano que es 1177 00:48:49,820 --> 00:48:52,600 no forman parte del programa en sí, pero uno, que ayuda 1178 00:48:52,600 --> 00:48:55,010 entender lo que hizo al día siguiente, ni el siguiente 1179 00:48:55,010 --> 00:48:57,570 meses, ayuda a su compañero de enseñanza entender lo que hiciste 1180 00:48:57,570 --> 00:48:59,230 o lo que pretendía hacer, por lo que es 1181 00:48:59,230 --> 00:49:00,950 práctica general muy bueno. 1182 00:49:00,950 --> 00:49:02,940 Cada pocas líneas de código, escribe un comentario a 1183 00:49:02,940 --> 00:49:04,490 usted o su compañero. 1184 00:49:04,490 --> 00:49:08,460 Así que aquí, voy a decir: "Preguntar al usuario para la temperatura." 1185 00:49:08,460 --> 00:49:10,890 No tiene que ser una frase completa, sólo una frase corta. 1186 00:49:10,890 --> 00:49:14,270 Pero la idea detrás comentando en C es que cada uno de sus 1187 00:49:14,270 --> 00:49:17,980 observaciones en caso de que la autonomía - o, digamos, un TF o un colega - 1188 00:49:17,980 --> 00:49:21,290 a rozar su programa y saber exactamente lo que hace, no por 1189 00:49:21,290 --> 00:49:24,650 tanto la lectura del código, pero al leer los comentarios que, 1190 00:49:24,650 --> 00:49:26,220 debe ser breve y claro. 1191 00:49:26,220 --> 00:49:29,030 Muy bien, así que ahora quiero seguir adelante y decir, "Convert 1192 00:49:29,030 --> 00:49:32,660 Fahrenheit a Celsius. "Así que voy a seguir adelante y hacerlo, 1193 00:49:32,660 --> 00:49:34,340 digamos, flotar c. 1194 00:49:34,340 --> 00:49:36,610 Vamos a seguir Celsius como un valor de punto flotante. 1195 00:49:36,610 --> 00:49:37,630 >> Y déjame tomar una puñalada en esto. 1196 00:49:37,630 --> 00:49:40,350 La fórmula es, de nuevo, hasta aquí. 1197 00:49:40,350 --> 00:49:45,510 Como 5.9 veces menos F 32. 1198 00:49:45,510 --> 00:49:46,360 Así que vamos a hacer esto. 1199 00:49:46,360 --> 00:49:50,450 Así que 5 dividido por 9, menos - 1200 00:49:50,450 --> 00:49:52,330 ¡Vaya, me lo arruinó todo ya. 1201 00:49:52,330 --> 00:49:53,070 Times. 1202 00:49:53,070 --> 00:49:56,550 Así que 5.9 veces menos F 32. 1203 00:49:56,550 --> 00:49:59,650 Así F menos 32, punto y coma. 1204 00:49:59,650 --> 00:50:02,000 Y ahora, aquí, voy a seguir adelante 1205 00:50:02,000 --> 00:50:03,220 y decir, imprimir resultado. 1206 00:50:03,220 --> 00:50:05,160 Y esta parte es fácil. Printf. 1207 00:50:05,160 --> 00:50:07,980 ¿Cómo hago para imprimir esto? 1208 00:50:07,980 --> 00:50:16,890 Bueno, podría decir: "Ese número en grados Celsius es% f \ n", 1209 00:50:16,890 --> 00:50:18,060 sólo para algunos estética. 1210 00:50:18,060 --> 00:50:20,450 Y entonces, ¿qué valor es lo que quiero conectar aquí como de printf 1211 00:50:20,450 --> 00:50:21,360 El segundo argumento? 1212 00:50:21,360 --> 00:50:21,650 Bien. 1213 00:50:21,650 --> 00:50:22,540 Así que c. 1214 00:50:22,540 --> 00:50:24,760 Así que vamos a empezar con esto y luego simplemente devolver 0. 1215 00:50:24,760 --> 00:50:25,960 Una vez más, no tiene nada que ver con las matemáticas. 1216 00:50:25,960 --> 00:50:27,610 Sólo significa que todo está bien. 1217 00:50:27,610 --> 00:50:31,210 >> Ahora, ¿es esto correcto, este programa? 1218 00:50:31,210 --> 00:50:31,520 Está bien. 1219 00:50:31,520 --> 00:50:33,630 Así que he cometido algunos errores. 1220 00:50:33,630 --> 00:50:35,980 Incluso si usted no tiene idea de lo que es la programación, puede ordenar 1221 00:50:35,980 --> 00:50:37,120 de vuelta a la escuela primaria inferir lo que la 1222 00:50:37,120 --> 00:50:38,740 errores aquí podría ser. 1223 00:50:38,740 --> 00:50:40,050 ¿Cuál es uno de los primeros? 1224 00:50:40,050 --> 00:50:41,256 AUDIENCIA: [inaudible] 1225 00:50:41,256 --> 00:50:41,660 DAVID J. MALAN: Si. 1226 00:50:41,660 --> 00:50:42,940 Así que nos falta paréntesis. 1227 00:50:42,940 --> 00:50:45,420 Fue deliberado que hice paréntesis en la keynote 1228 00:50:45,420 --> 00:50:48,130 deslice aquí, porque no hay en realidad esta noción de orden 1229 00:50:48,130 --> 00:50:51,590 de las operaciones, o precedencia, en el que ciertas operaciones - 1230 00:50:51,590 --> 00:50:52,890 multiplicación - 1231 00:50:52,890 --> 00:50:56,000 tienen una mayor unión, tienen mayor prioridad, que las cosas 1232 00:50:56,000 --> 00:50:58,050 como suma o resta. 1233 00:50:58,050 --> 00:51:00,550 Para ello hemos hecho esto durante años sólo para dejar en claro exactamente 1234 00:51:00,550 --> 00:51:02,840 qué operación matemática se debe hacer primero. 1235 00:51:02,840 --> 00:51:05,010 Así que probablemente debería imitar exactamente esto. 1236 00:51:05,010 --> 00:51:08,990 De lo contrario, el equipo está probablemente va a tratar de hacer 1237 00:51:08,990 --> 00:51:13,090 algo así como dividir 5 por 9, y luego multiplicar F, luego restar 1238 00:51:13,090 --> 00:51:14,850 32 de todo el asunto. 1239 00:51:14,850 --> 00:51:16,480 Lo cual no es, de hecho, lo que queremos hacer. 1240 00:51:16,480 --> 00:51:17,340 Así que vamos a poner entre paréntesis. 1241 00:51:17,340 --> 00:51:20,860 Vamos a añadir mis paréntesis aquí, paréntesis aquí. 1242 00:51:20,860 --> 00:51:22,670 Vamos a poner esto aquí. 1243 00:51:22,670 --> 00:51:25,130 Aquí, me di cuenta de otro error que cometí en el camino. 1244 00:51:25,130 --> 00:51:25,680 ¿Sí? 1245 00:51:25,680 --> 00:51:26,930 AUDIENCIA: [inaudible] 1246 00:51:29,632 --> 00:51:30,130 >> DAVID J. MALAN: Ah. 1247 00:51:30,130 --> 00:51:30,470 Bueno. 1248 00:51:30,470 --> 00:51:32,400 Así que en realidad tienen el mismo número entero 1249 00:51:32,400 --> 00:51:34,020 división cuestión de antes. 1250 00:51:34,020 --> 00:51:35,800 Puedo corregir eso, vamos a ver lo que el síntoma es. 1251 00:51:35,800 --> 00:51:36,990 Pero vamos a tener que corregir una 1252 00:51:36,990 --> 00:51:37,680 otro error aquí. 1253 00:51:37,680 --> 00:51:38,015 ¿Sí? 1254 00:51:38,015 --> 00:51:39,540 AUDIENCIA: [inaudible] 1255 00:51:39,540 --> 00:51:40,070 DAVID J. MALAN: Si. 1256 00:51:40,070 --> 00:51:43,130 Por lo tanto, el error estúpido que hice, pero increíblemente importante. 1257 00:51:43,130 --> 00:51:45,870 El equipo no se va a convertir sólo la vista gorda y dejar que 1258 00:51:45,870 --> 00:51:48,770 usarme F capital, cuando en realidad declarado la variable 1259 00:51:48,770 --> 00:51:51,360 como una f minúscula aquí, en la línea 8. 1260 00:51:51,360 --> 00:51:54,470 Así que tengo que corregir en mi línea 11 capitalización, que un 1261 00:51:54,470 --> 00:51:56,820 momentos antes era una F mayúscula por error. 1262 00:51:56,820 --> 00:51:57,610 ¿Qué pasa aquí? 1263 00:51:57,610 --> 00:51:59,980 Si esto no fuera así en minúsculas? 1264 00:51:59,980 --> 00:52:02,260 Debe ser, sino que es una coincidencia. 1265 00:52:02,260 --> 00:52:05,070 Eso% f no tiene nada que ver con la variable. 1266 00:52:05,070 --> 00:52:07,980 Así que para ser super claro aquí, déjame seguir adelante y 1267 00:52:07,980 --> 00:52:10,710 cambiar el nombre de este, en pocas palabras, "temperatura". Déjame cambiar el nombre de 1268 00:52:10,710 --> 00:52:15,050 esta "temperatura". No dejes que me cambie el nombre de esta. 1269 00:52:15,050 --> 00:52:18,180 Porque, de nuevo, f% a nivel mundial significa, "flotando valor en puntos." 1270 00:52:18,180 --> 00:52:19,950 No tiene nada que ver con mi variable. 1271 00:52:19,950 --> 00:52:23,080 Sin embargo, "temperatura" por todo el lugar es un poco prolijo, 1272 00:52:23,080 --> 00:52:25,370 así que voy a volver a mi minúscula "f" s. 1273 00:52:25,370 --> 00:52:27,890 >> Ahora, déjame ir por delante hasta mi ventana aquí. 1274 00:52:27,890 --> 00:52:29,190 Hacer f2c - 1275 00:52:29,190 --> 00:52:31,200 que fue, de nuevo, el nombre arbitrario I 1276 00:52:31,200 --> 00:52:32,590 dio a este archivo. 1277 00:52:32,590 --> 00:52:33,690 Parece que ha compilado. 1278 00:52:33,690 --> 00:52:35,080 Déjame correr f2c. 1279 00:52:35,080 --> 00:52:35,780 Intro. 1280 00:52:35,780 --> 00:52:37,786 La temperatura en Fahrenheit - vamos a hacer fácil. 1281 00:52:37,786 --> 00:52:39,370 32. 1282 00:52:39,370 --> 00:52:40,910 OK, corregirlos. 1283 00:52:40,910 --> 00:52:45,910 Pero, si ahora hago 212 para hervir - 1284 00:52:45,910 --> 00:52:46,630 maldito. 1285 00:52:46,630 --> 00:52:47,030 Está bien. 1286 00:52:47,030 --> 00:52:50,780 Por lo tanto, claramente no corregir, si el TF intenta 1287 00:52:50,780 --> 00:52:51,800 al menos dos valores. 1288 00:52:51,800 --> 00:52:53,340 Entonces, ¿cuál es el problema aquí? 1289 00:52:53,340 --> 00:52:55,970 Bueno, ya poner el dedo en cuál es el problema. 1290 00:52:55,970 --> 00:52:57,600 Pero ¿por qué es así? 1291 00:52:57,600 --> 00:53:00,630 Hasta aquí, cuando estoy haciendo la matemáticas de 5 dividido por 9. 1292 00:53:00,630 --> 00:53:02,190 Entonces, conceptualmente, es perfectamente correcto. 1293 00:53:02,190 --> 00:53:03,690 Totalmente coherente con la fórmula. 1294 00:53:03,690 --> 00:53:05,940 Pero los ordenadores sólo hacen precisamente lo que 1295 00:53:05,940 --> 00:53:06,760 les dicen que hagan. 1296 00:53:06,760 --> 00:53:08,940 Y lo que estamos diciendo la computadora efectivamente aquí es 1297 00:53:08,940 --> 00:53:12,320 dividir el entero de 5 por el número entero 9 1298 00:53:12,320 --> 00:53:13,670 y me da el resultado. 1299 00:53:13,670 --> 00:53:16,230 El problema es, sin embargo, cuando se utiliza la división de datos 1300 00:53:16,230 --> 00:53:20,220 tipos, la salida es el mismo tipo de datos que las entradas. 1301 00:53:20,220 --> 00:53:23,670 Y así, si las dos entradas son a la vez ints, la salida se va 1302 00:53:23,670 --> 00:53:25,110 a ser un int. 1303 00:53:25,110 --> 00:53:28,770 Y así que 5 dividido por 9 es algo punto. 1304 00:53:28,770 --> 00:53:32,320 Pero ¿cuál es el número entero más cercano al punto algo? 1305 00:53:32,320 --> 00:53:33,630 Por lo tanto, en realidad es 0. 1306 00:53:33,630 --> 00:53:36,620 Así como discutimos el lunes, después de todo el decimal 1307 00:53:36,620 --> 00:53:37,940 punto queda truncada. 1308 00:53:37,940 --> 00:53:39,495 Sólo se tira. 1309 00:53:39,495 --> 00:53:42,760 Así que esto es un completo error, porque puede ser que también acaba de 1310 00:53:42,760 --> 00:53:44,700 multiplicamos todo por 0 aquí. 1311 00:53:44,700 --> 00:53:46,550 >> Ahora, puedo arreglar esto en un par de maneras. 1312 00:53:46,550 --> 00:53:48,080 Yo podría hacer esto. 1313 00:53:48,080 --> 00:53:50,490 5,0 dividido por 9,0. 1314 00:53:50,490 --> 00:53:52,110 Técnicamente, no tienes necesidad de hacer eso. 1315 00:53:52,110 --> 00:53:55,780 Esto es suficiente para que sólo uno de los números de un flotador - 1316 00:53:55,780 --> 00:53:58,290 o doble - al poner el punto decimal aquí. 1317 00:53:58,290 --> 00:54:01,740 Porque lo que sucede ahora es cuando se divide un entero 1318 00:54:01,740 --> 00:54:04,670 un flotador, o un doble, el equipo va a dar cuenta 1319 00:54:04,670 --> 00:54:06,830 oh, uno de ellos es más preciso. 1320 00:54:06,830 --> 00:54:09,420 Permítanme errar por el lado de darle más precisión que 1321 00:54:09,420 --> 00:54:10,310 usted pretende. 1322 00:54:10,310 --> 00:54:12,700 Así que convertirá el resultado - 1323 00:54:12,700 --> 00:54:16,240 devolverá el resultado como un valor de coma flotante también. 1324 00:54:16,240 --> 00:54:17,330 Así que iba a funcionar. 1325 00:54:17,330 --> 00:54:18,060 Esto funcionaría. 1326 00:54:18,060 --> 00:54:20,010 Y no hay un mecanismo distinto que vamos a ver en 1327 00:54:20,010 --> 00:54:21,390 mayor detalle la próxima semana. 1328 00:54:21,390 --> 00:54:24,690 En realidad se puede, ya que el programador, decirle a la computadora 1329 00:54:24,690 --> 00:54:27,930 para tratar realmente un tipo de datos como 1330 00:54:27,930 --> 00:54:29,260 si fuera otro. 1331 00:54:29,260 --> 00:54:30,990 >> Así que yo podía hacer esto. 1332 00:54:30,990 --> 00:54:35,280 Entre paréntesis, puedo decir algo como (float), abierto 1333 00:54:35,280 --> 00:54:36,350 Paren, paren cerca. 1334 00:54:36,350 --> 00:54:39,050 Y esto es lo que se llama "casting". Una vez más, más 1335 00:54:39,050 --> 00:54:39,940 en esta próxima semana. 1336 00:54:39,940 --> 00:54:42,280 Pero esto es sólo la forma programática de contar 1337 00:54:42,280 --> 00:54:45,910 la computadora, sí sé 9 es un número entero o una larga. 1338 00:54:45,910 --> 00:54:47,700 Yo sé que no es un valor de coma flotante. 1339 00:54:47,700 --> 00:54:49,420 Pero tratarla como tal de todos modos. 1340 00:54:49,420 --> 00:54:52,000 Así que para convertir un tipo de datos significa convertir 1341 00:54:52,000 --> 00:54:53,310 de una a la otra. 1342 00:54:53,310 --> 00:54:55,790 Francamente, esto es sólo un poco feo, así que me propongo ir 1343 00:54:55,790 --> 00:54:58,830 respaldar a la sugerencia original de sólo convertir 1344 00:54:58,830 --> 00:55:00,770 estas cosas a valores de punto flotante de forma manual. 1345 00:55:00,770 --> 00:55:02,890 Por ahora es sólo súper claro lo que está pasando, y 1346 00:55:02,890 --> 00:55:04,280 no es todo lo que distrae. 1347 00:55:04,280 --> 00:55:06,710 >> Así que ahora vamos a ir de nuevo en mi ventana de terminal. 1348 00:55:06,710 --> 00:55:07,990 Hacer f2c. 1349 00:55:07,990 --> 00:55:09,430 Déjenme seguir adelante y ejecutar este. 1350 00:55:09,430 --> 00:55:12,340 Y, en un aparte, te aburres escribiendo estos comandos 1351 00:55:12,340 --> 00:55:14,910 una y otra vez, se dan cuenta que las computadoras, como Linux aquí, 1352 00:55:14,910 --> 00:55:16,010 tienden a ser bastante inteligente. 1353 00:55:16,010 --> 00:55:18,890 Y si golpeo para arriba, podemos ir a través de mi historia entera de 1354 00:55:18,890 --> 00:55:20,380 comandos, arriba y abajo. 1355 00:55:20,380 --> 00:55:23,840 Así que en este caso aquí, puedo ir hasta ejecutar make f2c. 1356 00:55:23,840 --> 00:55:25,830 Estoy siendo gritado, porque yo sólo hice hace un segundo. 1357 00:55:25,830 --> 00:55:27,030 Ya está actualizado. 1358 00:55:27,030 --> 00:55:30,720 Así que ahora puedo correr f2c nuevo. 1359 00:55:30,720 --> 00:55:33,260 Vamos a tratar de 32 grados Fahrenheit. 1360 00:55:33,260 --> 00:55:36,720 Ahora vamos a tratar de 212 grados Fahrenheit. 1361 00:55:36,720 --> 00:55:37,250 >> Phew. 1362 00:55:37,250 --> 00:55:38,250 Parece que funciona. 1363 00:55:38,250 --> 00:55:41,760 Ahora, esto es bueno, pero se siente un poco arbitrario que 1364 00:55:41,760 --> 00:55:44,890 Estoy mostrando seis números después de los puntos decimales. 1365 00:55:44,890 --> 00:55:45,070 ¿Cierto? 1366 00:55:45,070 --> 00:55:47,830 Si usted es la persona el tiempo en TV, eres una especie de doofus 1367 00:55:47,830 --> 00:55:49,150 si estás leyendo la temperatura a 1368 00:55:49,150 --> 00:55:50,070 este grado de precisión. 1369 00:55:50,070 --> 00:55:51,270 Así que vamos a simplificar esto. 1370 00:55:51,270 --> 00:55:53,880 Así que en realidad van por aquí, a mi printf. 1371 00:55:53,880 --> 00:55:55,490 Y sí, quiero flotar. 1372 00:55:55,490 --> 00:55:57,570 Pero quiero precisar ahora la precisión. 1373 00:55:57,570 --> 00:55:59,070 Y yo voy a ser un poco breve. 1374 00:55:59,070 --> 00:56:03,090 Yo voy a decir, dame un punto después del punto decimal. 1375 00:56:03,090 --> 00:56:07,590 Así que en lugar de decir f%, yo voy a decir% .1 f. 1376 00:56:07,590 --> 00:56:09,760 Y esto sólo significa dame una posición 1377 00:56:09,760 --> 00:56:11,410 después del punto decimal. 1378 00:56:11,410 --> 00:56:11,700 Está bien. 1379 00:56:11,700 --> 00:56:12,570 Vamos a intentarlo de nuevo. 1380 00:56:12,570 --> 00:56:15,590 Permítanme volver a ejecutarlo después de compilar. 1381 00:56:15,590 --> 00:56:18,160 Y ahora escribo en 32 años, y que vuelva a 1382 00:56:18,160 --> 00:56:19,310 más sucinta valor. 1383 00:56:19,310 --> 00:56:22,480 Y puedo escribir, ahora, 212, y volver a una más sucinta 1384 00:56:22,480 --> 00:56:23,260 valor también. 1385 00:56:23,260 --> 00:56:25,190 Y hay otras cosas que puedes hacer con printf. 1386 00:56:25,190 --> 00:56:27,950 En realidad se puede especificar el ancho de la cantidad que debería ser. 1387 00:56:27,950 --> 00:56:30,900 Si usted quiere tener acolchado en él, para que pueda alinear a la derecha o 1388 00:56:30,900 --> 00:56:32,360 izquierda alinear todos los números o 1389 00:56:32,360 --> 00:56:33,400 tratar de centrar las cosas. 1390 00:56:33,400 --> 00:56:35,340 Así que darse cuenta de que hay pequeños trucos que se pueden hacer allí. 1391 00:56:35,340 --> 00:56:38,420 Pero sólo se reducen a los códigos de formato, 1392 00:56:38,420 --> 00:56:39,600 como el que tenemos allí. 1393 00:56:39,600 --> 00:56:41,090 >> Así que en términos de esta cuestión de precedencia. 1394 00:56:41,090 --> 00:56:43,820 Esta es una tabla muy aburrido ir a través metódicamente. 1395 00:56:43,820 --> 00:56:46,780 Pero darse cuenta de que los autores de C han llegado a la 1396 00:56:46,780 --> 00:56:50,190 reglas que especifican que los operadores tienen una mayor 1397 00:56:50,190 --> 00:56:53,680 prioridad, más poder vinculante, que otros. 1398 00:56:53,680 --> 00:56:55,890 Así, mientras que en la escuela primaria, por lo general sabía que era 1399 00:56:55,890 --> 00:56:58,930 multiplicación y división, luego suma y resta, 1400 00:56:58,930 --> 00:56:59,950 entonces algunas otras cosas. 1401 00:56:59,950 --> 00:57:01,720 En un mundo de la programación, hay un gran 1402 00:57:01,720 --> 00:57:03,360 ya lista de las cosas. 1403 00:57:03,360 --> 00:57:05,150 Y esto no es algo que vale la pena memorizar ahora. 1404 00:57:05,150 --> 00:57:07,310 Vas a aclimatarse a ella antes de tiempo. 1405 00:57:07,310 --> 00:57:10,690 Pero al igual que en la escuela primaria, generalmente entre paréntesis resolver 1406 00:57:10,690 --> 00:57:12,990 las cuestiones de prioridad, haciendo la súper clara a la 1407 00:57:12,990 --> 00:57:15,620 computadora y humanos por igual lo que se pretende. 1408 00:57:15,620 --> 00:57:17,770 Así que considere esto un poco chuleta allí. 1409 00:57:17,770 --> 00:57:21,690 Pero la mayoría de esos detalles que no se llega a un tiempo. 1410 00:57:21,690 --> 00:57:21,900 >> Está bien. 1411 00:57:21,900 --> 00:57:24,120 Ahora, vamos a construir y alejarse de estos poco tonto 1412 00:57:24,120 --> 00:57:25,460 ejemplos matemáticos. 1413 00:57:25,460 --> 00:57:27,500 Siga utilizando los mismos fundamentos, pero el comienzo 1414 00:57:27,500 --> 00:57:29,960 expresarnos un poco más como Scratch. 1415 00:57:29,960 --> 00:57:31,660 Así que en Scratch, teníamos estas expresiones booleanas. 1416 00:57:31,660 --> 00:57:34,890 Y en Inglés, una expresión booleana es lo que? 1417 00:57:34,890 --> 00:57:35,580 Verdadero o falso. 1418 00:57:35,580 --> 00:57:38,300 Es algo que se evalúa como verdadera o falsa. 1419 00:57:38,300 --> 00:57:39,060 1 o 0. 1420 00:57:39,060 --> 00:57:39,870 Encendido o apagado. 1421 00:57:39,870 --> 00:57:41,000 Lo que sea que quieras llamarlo. 1422 00:57:41,000 --> 00:57:43,210 Ahora en Scratch, las piezas del rompecabezas se veía así. 1423 00:57:43,210 --> 00:57:45,850 Y esa es la combinación, en la parte inferior hay, de tres 1424 00:57:45,850 --> 00:57:47,980 piezas de un rompecabezas. 1425 00:57:47,980 --> 00:57:48,980 Una conjunción - 1426 00:57:48,980 --> 00:57:51,710 algo que tiene en blanco y en blanco. 1427 00:57:51,710 --> 00:57:53,970 Y luego dos expresiones booleanas dentro de ella. 1428 00:57:53,970 --> 00:57:56,460 Así que usted puede anidar expresiones booleanas para obtener más 1429 00:57:56,460 --> 00:57:59,360 complicadas expresiones booleanas. 1430 00:57:59,360 --> 00:58:03,930 Por ejemplo, si es sábado, y es agradable 1431 00:58:03,930 --> 00:58:06,180 tiempo, y luego salir a la calle. 1432 00:58:06,180 --> 00:58:07,500 O algo arbitrario así. 1433 00:58:07,500 --> 00:58:10,090 Así que usted puede unirse a expresiones booleanas para llegar a un 1434 00:58:10,090 --> 00:58:12,780 mayor valor de la verdad, cuya respuesta se basa 1435 00:58:12,780 --> 00:58:13,800 en los más pequeños. 1436 00:58:13,800 --> 00:58:15,770 >> Ahora, en C, por suerte, esta asignación es 1437 00:58:15,770 --> 00:58:16,720 en realidad bastante simple. 1438 00:58:16,720 --> 00:58:18,820 Los paréntesis ayudar a aclarar las cosas aquí. 1439 00:58:18,820 --> 00:58:21,700 && Es lo que significa "y". Así es como 1440 00:58:21,700 --> 00:58:24,700 vamos a convertir esos bloques de Scratch para C. 1441 00:58:24,700 --> 00:58:27,590 Y para las condiciones que vimos en Scratch, en la mano izquierda 1442 00:58:27,590 --> 00:58:31,150 lado allí, se pueden apilar de manera similar en C. Si x es menor 1443 00:58:31,150 --> 00:58:32,970 que y, a continuación, hacer esto. 1444 00:58:32,970 --> 00:58:35,100 Porque si x es mayor que y, a continuación, hacer esto. 1445 00:58:35,100 --> 00:58:38,030 Otras ventas lógicamente deben ser iguales, por lo que dicen 1446 00:58:38,030 --> 00:58:39,140 que son iguales. 1447 00:58:39,140 --> 00:58:41,210 Así que ahora podemos comenzar a construir estas cosas. 1448 00:58:41,210 --> 00:58:42,170 >> Así que vamos a hacer un ejemplo. 1449 00:58:42,170 --> 00:58:45,550 Permítanme abrir un archivo que está en la página web de la asignatura que 1450 00:58:45,550 --> 00:58:47,270 Yo escribí con antelación. 1451 00:58:47,270 --> 00:58:50,540 Eso se llama nonswitch.c. 1452 00:58:50,540 --> 00:58:52,270 Y vamos a ver por qué en un momento. 1453 00:58:52,270 --> 00:58:54,770 Así que en este archivo - nonswitch.c-- 1454 00:58:54,770 --> 00:58:56,830 cuenta por primera vez que hay un montón de 1455 00:58:56,830 --> 00:58:58,460 comentarios en la parte superior. 1456 00:58:58,460 --> 00:59:00,110 Eso es sólo explicar el nombre del archivo, lo que 1457 00:59:00,110 --> 00:59:01,260 hace, y así sucesivamente. 1458 00:59:01,260 --> 00:59:04,390 Y, al parecer, se muestra el uso de los operadores booleanos AND-ing - 1459 00:59:04,390 --> 00:59:06,220 conjugar dos expresiones. 1460 00:59:06,220 --> 00:59:07,670 >> Así que vamos a ver cómo funciona este programa. 1461 00:59:07,670 --> 00:59:10,840 Incluyo mis dos archivos, cs50.h y stdio.h. 1462 00:59:10,840 --> 00:59:13,180 Si desplácese hacia abajo, ahora, para el programa, que es un poco más largo 1463 00:59:13,180 --> 00:59:15,730 de lo que hemos escrito antes, pero bastante legible. 1464 00:59:15,730 --> 00:59:18,360 Así que primero imprime al usuario, en la línea 18, 1465 00:59:18,360 --> 00:59:20,460 "Dame un número entero entre 1 y 10." Tan 1466 00:59:20,460 --> 00:59:21,530 que está justo ahí. 1467 00:59:21,530 --> 00:59:23,410 Ahora tengo el entero. 1468 00:59:23,410 --> 00:59:25,380 Pero darse cuenta de que getInt - bastante simple. 1469 00:59:25,380 --> 00:59:26,510 Es sólo va a conseguir un int. 1470 00:59:26,510 --> 00:59:28,830 Esto va a asegurarse de que recibe un int y no un 1471 00:59:28,830 --> 00:59:30,060 cadena o un flotador. 1472 00:59:30,060 --> 00:59:32,390 Pero no va a hacer ningún tipo de comprobación de límites. 1473 00:59:32,390 --> 00:59:34,750 No va a filtrar los números a ser entre un 1474 00:59:34,750 --> 00:59:35,630 cierto rango. 1475 00:59:35,630 --> 00:59:37,730 Así que tenemos que poner en práctica que nosotros mismos. 1476 00:59:37,730 --> 00:59:40,680 Así como en Scratch, donde podría hacer una conjunción de 1477 00:59:40,680 --> 00:59:43,560 dos expresiones, puedo hacer eso en C como sigue. 1478 00:59:43,560 --> 00:59:48,660 Si n es mayor que o igual a 1, y n es menor que y 1479 00:59:48,660 --> 00:59:52,220 o igual a 3, voy a muy arbitrariamente decreto que 1480 00:59:52,220 --> 00:59:53,830 número a ser un número pequeño. 1481 00:59:53,830 --> 00:59:56,730 Sólo por el bien de un comunicado. 1482 00:59:56,730 --> 01:00:00,210 Porque si n es entre 4 y 6, print "Usted escogió un medio 1483 01:00:00,210 --> 01:00:03,440 número. "De otro modo, si n es entre 7 y 10, escriba" escogido usted un 1484 01:00:03,440 --> 01:00:06,390 número grande. "Else print" Usted escoge un número no válido ". 1485 01:00:06,390 --> 01:00:07,900 Porque, lógicamente, que sigue si hemos 1486 01:00:07,900 --> 01:00:09,230 agotado nuestra gama. 1487 01:00:09,230 --> 01:00:12,400 >> Así que darse cuenta de esto no es del todo cómo escribimos mayor o 1488 01:00:12,400 --> 01:00:15,000 igual en una clase de matemáticas. 1489 01:00:15,000 --> 01:00:15,160 ¿Cierto? 1490 01:00:15,160 --> 01:00:17,430 Por lo general, dibujarlo así, con la línea debajo de ella. 1491 01:00:17,430 --> 01:00:19,250 Pero no hay tal clave en mi teclado. 1492 01:00:19,250 --> 01:00:22,390 Por lo tanto el símbolo en C para expresar mayor o 1493 01:00:22,390 --> 01:00:25,770 es igual a dos personajes, y el símbolo de menos de 1494 01:00:25,770 --> 01:00:29,100 o es igual a dos personajes también. 1495 01:00:29,100 --> 01:00:29,330 Está bien. 1496 01:00:29,330 --> 01:00:31,910 Así que si ejecuta este programa, que es fácil adivinar lo que es 1497 01:00:31,910 --> 01:00:32,650 vamos a hacer. 1498 01:00:32,650 --> 01:00:36,180 Si vuelvo a ir adelante y hacer nonswitch, Enter. 1499 01:00:36,180 --> 01:00:38,130 Y a continuación, ejecute nonswitch. 1500 01:00:38,130 --> 01:00:39,530 Dame un número entre 1 y 10. 1501 01:00:39,530 --> 01:00:40,870 Yo voy a dar 11. 1502 01:00:40,870 --> 01:00:42,280 Elegí un número no válido. 1503 01:00:42,280 --> 01:00:44,090 Voy a tratar el número 3. 1504 01:00:44,090 --> 01:00:45,990 Elegí un número pequeño. 1505 01:00:45,990 --> 01:00:48,360 Así que hay bastante sencillo. 1506 01:00:48,360 --> 01:00:52,230 >> ¿Qué pasa si quiero cambiar el comportamiento de este programa y 1507 01:00:52,230 --> 01:00:54,250 hacer algo un poco diferente en su lugar? 1508 01:00:54,250 --> 01:00:57,620 Déjenme seguir adelante y decir esto. 1509 01:00:57,620 --> 01:00:59,480 Déjame deshacerme de todo esto. 1510 01:00:59,480 --> 01:01:03,780 Y permítanme decir if (n == 42). 1511 01:01:03,780 --> 01:01:08,730 Y luego voy a seguir adelante y decir print "Usted tomó la 1512 01:01:08,730 --> 01:01:16,340 respuesta correcta. "De otro modo vamos a seguir adelante y decir, 1513 01:01:16,340 --> 01:01:18,460 printf ("Elegiste la 1514 01:01:18,460 --> 01:01:21,170 respuesta incorrecta ");. Okay. 1515 01:01:21,170 --> 01:01:22,040 El hecho de que. 1516 01:01:22,040 --> 01:01:23,890 >> Ahora, algunos puntos que podemos hacer aquí. 1517 01:01:23,890 --> 01:01:26,570 Uno, que no escriba el símbolo que se podría pensar es el 1518 01:01:26,570 --> 01:01:27,390 más razonable. 1519 01:01:27,390 --> 01:01:30,110 Cuando desee comprobar la igualdad, resulta que usted no utilice el 1520 01:01:30,110 --> 01:01:30,910 signo igual. 1521 01:01:30,910 --> 01:01:34,000 En su lugar, use el signo de igual a igual. 1522 01:01:34,000 --> 01:01:36,440 ¿Y por qué podría ser eso, sólo intuitivamente? 1523 01:01:36,440 --> 01:01:37,030 Si. 1524 01:01:37,030 --> 01:01:39,330 AUDIENCIA: [inaudible] 1525 01:01:39,330 --> 01:01:39,615 DAVID J. MALAN: Correcto. 1526 01:01:39,615 --> 01:01:41,630 El signo igual se utiliza ya para la asignación. 1527 01:01:41,630 --> 01:01:43,020 Alguien realmente no pensar en esto. 1528 01:01:43,020 --> 01:01:45,820 Y ahora, cuando se trata de pruebas de igualdad, tenemos que 1529 01:01:45,820 --> 01:01:48,850 ser más explícito, y decir igual a igual. 1530 01:01:48,850 --> 01:01:52,110 Un error muy común es hacer esto. 1531 01:01:52,110 --> 01:01:54,800 Y, si en horario de oficina o una semana en algún lado o en el 1532 01:01:54,800 --> 01:01:58,340 próximas dos semanas se hace algo como esto y luego 1533 01:01:58,340 --> 01:02:00,920 luchar con él durante 10 a 20 minutos tratando de averiguar 1534 01:02:00,920 --> 01:02:03,330 lo que el bicho maldito es, darse cuenta de que usted es uno de los 1535 01:02:03,330 --> 01:02:04,470 personas que hicieron este error. 1536 01:02:04,470 --> 01:02:06,030 Por lo tanto, muy fácil de hacer. 1537 01:02:06,030 --> 01:02:08,240 Pero el objetivo ahora es evitar este error. 1538 01:02:08,240 --> 01:02:11,840 Esto podría evaluar, porque lo que se esta diciendo en realidad? 1539 01:02:11,840 --> 01:02:15,010 Si n se hace 42. 1540 01:02:15,010 --> 01:02:18,250 Así que la gente verbo usar, verbalmente, para expresar el 1541 01:02:18,250 --> 01:02:21,800 concepto de asignación es "consigue". Así que si n se hace 42. 1542 01:02:21,800 --> 01:02:24,060 Así que eso significa asignar 42 a n. 1543 01:02:24,060 --> 01:02:26,250 Ahora tengo una expresión booleana entre paréntesis, 1544 01:02:26,250 --> 01:02:30,230 dentro de esta condición, el valor del cual es 42. 1545 01:02:30,230 --> 01:02:30,390 ¿Cierto? 1546 01:02:30,390 --> 01:02:32,690 Porque si lo evaluará de adentro hacia afuera, el total 1547 01:02:32,690 --> 01:02:34,100 respuesta, ahora, es de 42. 1548 01:02:34,100 --> 01:02:37,360 >> Así que si usted hizo la pregunta, "si (42)," lo que es 1549 01:02:37,360 --> 01:02:38,410 que realmente está diciendo? 1550 01:02:38,410 --> 01:02:40,990 Pues bien, las expresiones booleanas sólo pueden ser verdaderas o falsas. 1551 01:02:40,990 --> 01:02:42,010 1 o 0. 1552 01:02:42,010 --> 01:02:43,010 Encendido o apagado. 1553 01:02:43,010 --> 01:02:45,240 Así que parece que tenemos aquí un caso de esquina, en el que todos de una 1554 01:02:45,240 --> 01:02:50,060 repentino, estoy diciendo "si (42)". Eso no es un valor booleano. 1555 01:02:50,060 --> 01:02:54,500 Entonces, ¿qué hacen las computadoras, sin embargo, es que esencialmente equivale 1556 01:02:54,500 --> 01:02:58,620 nada que no sea 0 se interpreta para ser verdad. 1557 01:02:58,620 --> 01:02:59,340 1. 1558 01:02:59,340 --> 01:02:59,690 On. 1559 01:02:59,690 --> 01:03:01,510 Todos son funcionalmente equivalentes. 1560 01:03:01,510 --> 01:03:05,070 Sólo el valor 0, la palabra clave o falso, como veremos 1561 01:03:05,070 --> 01:03:07,860 finalmente ver, en realidad es falsa. 1562 01:03:07,860 --> 01:03:15,040 Así que "si (42)" en realidad sería verdad, porque es distinto de cero. 1563 01:03:15,040 --> 01:03:18,620 Así que para ser más precisos aquí, un valor booleano no es realmente tan 1564 01:03:18,620 --> 01:03:20,680 Cierto o falso, pero para este 1565 01:03:20,680 --> 01:03:24,650 caso, si es 0 o distinto de cero. 1566 01:03:24,650 --> 01:03:26,330 Así falsa o no falsa. 1567 01:03:26,330 --> 01:03:28,640 Y eso nos permite abarcar tanto más 1568 01:03:28,640 --> 01:03:30,980 posibilidades en la expresión entre paréntesis. 1569 01:03:30,980 --> 01:03:33,840 Así tenemos que, con tanta precaución, decir esto - 1570 01:03:33,840 --> 01:03:35,620 si (n == 42). 1571 01:03:35,620 --> 01:03:39,100 Simplemente porque tenemos que especificar una prueba de la igualdad, 1572 01:03:39,100 --> 01:03:40,930 no una asignación de un valor. 1573 01:03:40,930 --> 01:03:42,830 >> ¿Qué otra cosa es la pena señalar aquí? 1574 01:03:42,830 --> 01:03:46,030 Estas llaves no son realmente necesarios. 1575 01:03:46,030 --> 01:03:48,650 He estado haciendo sólo para ser quisiera hilar fino quisquilloso aquí. 1576 01:03:48,650 --> 01:03:51,350 Pero cuando usted tiene una condición que sólo tiene una línea de 1577 01:03:51,350 --> 01:03:55,100 código, para su conveniencia, los programadores no es necesario utilizar 1578 01:03:55,100 --> 01:03:56,030 las llaves. 1579 01:03:56,030 --> 01:03:59,370 Basta simplemente guión, por razones estéticas, y 1580 01:03:59,370 --> 01:04:01,050 a continuación, escribir la línea de código. 1581 01:04:01,050 --> 01:04:04,160 Sólo cuando se desea escribir dos líneas de código - para 1582 01:04:04,160 --> 01:04:08,230 ejemplo, else printf ("¡Adiós!"). Si usted quiere hacer 1583 01:04:08,230 --> 01:04:09,540 que, no funciona. 1584 01:04:09,540 --> 01:04:11,700 Puede sangrar todo lo que quieras, pero el hecho de que tiene 1585 01:04:11,700 --> 01:04:14,600 escribir dos líneas de código sin necesidad de utilizar llaves 1586 01:04:14,600 --> 01:04:16,860 significa que este programa no se ejecuta correctamente o podría 1587 01:04:16,860 --> 01:04:18,530 Ni siquiera compilar correctamente. 1588 01:04:18,530 --> 01:04:21,040 Así que por ahora, para ser honesto, creo que el mejor hábito es sólo 1589 01:04:21,040 --> 01:04:24,460 utilizar las llaves, y te darás cuenta de que hacen 1590 01:04:24,460 --> 01:04:25,750 súper claro lo que está pasando. 1591 01:04:25,750 --> 01:04:29,410 >> También, como un aparte - especialmente si usted está entre aquellos que utilizan 1592 01:04:29,410 --> 01:04:31,700 los libros recomendados o recursos en línea - 1593 01:04:31,700 --> 01:04:33,480 darse cuenta de que existe esta noción de estilo en 1594 01:04:33,480 --> 01:04:34,130 programación. 1595 01:04:34,130 --> 01:04:37,280 Y algunas personas prefieren poner la llave de cierre 1596 01:04:37,280 --> 01:04:38,720 aquí en una línea. 1597 01:04:38,720 --> 01:04:41,520 Algunas personas prefieren hacer cosas ridículas, 1598 01:04:41,520 --> 01:04:43,830 como poner aquí. 1599 01:04:43,830 --> 01:04:45,140 No hay una respuesta equivocada a la hora de 1600 01:04:45,140 --> 01:04:46,710 estilo, pero esto es incorrecto. 1601 01:04:46,710 --> 01:04:47,700 Sin embargo, algunas personas lo hacen. 1602 01:04:47,700 --> 01:04:49,160 [Risas] 1603 01:04:49,160 --> 01:04:51,760 DAVID J. MALAN: Así que hablar de esto ahora, simplemente porque como 1604 01:04:51,760 --> 01:04:54,400 leer sobre cosas en los libros o en línea, usted va a obtener 1605 01:04:54,400 --> 01:04:55,990 diferentes mensajes de diferentes maestros y 1606 01:04:55,990 --> 01:04:56,730 diferentes autores. 1607 01:04:56,730 --> 01:04:58,640 Y sólo se dan cuenta de que, funcionalmente, son 1608 01:04:58,640 --> 01:05:00,740 generalmente equivalente, pero sea constante. 1609 01:05:00,740 --> 01:05:02,850 Así que en este caso, vamos a normalizar el rizado 1610 01:05:02,850 --> 01:05:04,650 llaves alineando aquí a la izquierda. 1611 01:05:04,650 --> 01:05:04,910 >> Está bien. 1612 01:05:04,910 --> 01:05:07,040 Así que vamos a seguir adelante ahora y ejecutarlo, y ver qué pasa 1613 01:05:07,040 --> 01:05:07,780 con este programa. 1614 01:05:07,780 --> 01:05:09,970 Hacer nonswitch. 1615 01:05:09,970 --> 01:05:11,040 A continuación, ejecute nonswitch. 1616 01:05:11,040 --> 01:05:13,900 Dame un número entero entre 0 y - por lo que no es relevante 1617 01:05:13,900 --> 01:05:16,480 más, pero yo sólo voy a decir arbitrariamente 42. 1618 01:05:16,480 --> 01:05:17,850 Y he elegido la respuesta correcta. 1619 01:05:17,850 --> 01:05:20,430 Bueno, en realidad vamos a tomar esto en una dirección diferente. 1620 01:05:20,430 --> 01:05:22,070 Resulta que hay un poco de otra sintaxis que 1621 01:05:22,070 --> 01:05:23,480 puede utilizar en un programa. 1622 01:05:23,480 --> 01:05:27,310 He aquí una nueva pieza de sintaxis que es funcionalmente el mismo, 1623 01:05:27,310 --> 01:05:30,680 pero sólo introduce otra manera de expresarnos. 1624 01:05:30,680 --> 01:05:32,830 Así que esto es lo que se llama una "declaración de cambio". Y un 1625 01:05:32,830 --> 01:05:34,820 declaración interruptor funciona como sigue. 1626 01:05:34,820 --> 01:05:37,580 Se requiere, entre paréntesis, el valor que desea 1627 01:05:37,580 --> 01:05:38,860 "Interruptor" on. 1628 01:05:38,860 --> 01:05:41,490 Usted quiere comportarse de manera diferente en función de su valor. 1629 01:05:41,490 --> 01:05:44,360 Por lo tanto esto significa que el interruptor en el valor de n. 1630 01:05:44,360 --> 01:05:45,480 ¿Y qué significa esto? 1631 01:05:45,480 --> 01:05:50,530 Bueno, si n es 1 ó 2 ó 3, adelante e imprimir "Usted 1632 01:05:50,530 --> 01:05:52,680 elegido un número grande "y luego romper. 1633 01:05:52,680 --> 01:05:55,720 La razón de la ruptura es que la forma C es como funciona 1634 01:05:55,720 --> 01:05:59,790 pronto como se encuentra un caso que coincide, comienza la ejecución 1635 01:05:59,790 --> 01:06:01,610 todo el código debajo de ella. 1636 01:06:01,610 --> 01:06:04,580 Así que si tengo una línea de código, como lo hago aquí en la línea 27, se 1637 01:06:04,580 --> 01:06:05,360 es ejecutado. 1638 01:06:05,360 --> 01:06:07,520 Si añado otra línea aquí, el fichero es ejecutado. 1639 01:06:07,520 --> 01:06:09,350 Otra línea aquí, el fichero es ejecutado. 1640 01:06:09,350 --> 01:06:12,460 El programa sólo deja de ejecutar lo que está por debajo de la 1641 01:06:12,460 --> 01:06:14,680 declaración de caso aplicable cuando explícitamente 1642 01:06:14,680 --> 01:06:17,210 decir "romper". Tan mal. 1643 01:06:17,210 --> 01:06:19,220 Derecha, en este caso, como consecuencia de ello. 1644 01:06:19,220 --> 01:06:22,130 4 Caso o 5 o 6, de manera similar, va 1645 01:06:22,130 --> 01:06:23,160 para imprimir un mensaje. 1646 01:06:23,160 --> 01:06:24,410 En este caso, el número medio. 1647 01:06:24,410 --> 01:06:25,200 Salto. 1648 01:06:25,200 --> 01:06:28,160 Caso 7, 8, 9, 10, que va a imprimir "Elegiste un gran 1649 01:06:28,160 --> 01:06:28,950 número. "Break. 1650 01:06:28,950 --> 01:06:31,290 Y luego está, literalmente, una palabra clave denominada "default" 1651 01:06:31,290 --> 01:06:34,090 que es eficaz como el "otro" constructo. 1652 01:06:34,090 --> 01:06:36,010 Así nueva sintaxis, pero intelectualmente, 1653 01:06:36,010 --> 01:06:37,060 nada nuevo aquí. 1654 01:06:37,060 --> 01:06:38,280 Es como el Scratch. 1655 01:06:38,280 --> 01:06:41,040 Si, de lo contrario si, de lo contrario si, tipo de bloque. 1656 01:06:41,040 --> 01:06:44,560 >> Así que esa es la versión conmutada de este programa. 1657 01:06:44,560 --> 01:06:46,280 Pero note que lo hicimos con números aquí. 1658 01:06:46,280 --> 01:06:49,040 Permítanme abrir una segunda versión, sólo para mostrar 1659 01:06:49,040 --> 01:06:50,670 algo un poco más concreto. 1660 01:06:50,670 --> 01:06:52,840 Así que aquí tenemos grados en su lugar. 1661 01:06:52,840 --> 01:06:55,540 Resulta que se puede utilizar switches no sólo en números enteros, pero en 1662 01:06:55,540 --> 01:06:56,340 personajes. 1663 01:06:56,340 --> 01:06:58,930 No en todos los tipos de datos, pero al menos en caracteres. 1664 01:06:58,930 --> 01:07:02,670 Así que aquí, podríamos hacer algo como si el valor de C que 1665 01:07:02,670 --> 01:07:06,230 el usuario escribió, en la línea 19, con la función GetChar, 1666 01:07:06,230 --> 01:07:09,410 es mayúscula o minúscula a, vamos a interpretar como una calificación, 1667 01:07:09,410 --> 01:07:11,340 y dicen que recogió una calificación excelente. 1668 01:07:11,340 --> 01:07:14,690 Y abajo a lo largo de la instrucción switch, tenemos otro 1669 01:07:14,690 --> 01:07:17,950 casos de "B" s y "C" s, y así sucesivamente. 1670 01:07:17,950 --> 01:07:19,780 Pero ahora vamos a completar otra cosa. 1671 01:07:19,780 --> 01:07:21,130 Y de nuevo, una especie de volar a través de 1672 01:07:21,130 --> 01:07:22,200 algunos de estos ejemplos. 1673 01:07:22,200 --> 01:07:26,990 Pero en realidad es para que podamos aplicarlas, ahora - 1674 01:07:26,990 --> 01:07:28,880 o en realidad, sólo tiene que traducir ahora - 1675 01:07:28,880 --> 01:07:32,220 a C. 1676 01:07:32,220 --> 01:07:33,310 >> Así que déjame ir adelante y hacerlo. 1677 01:07:33,310 --> 01:07:34,830 Voy a abrir un nuevo archivo. 1678 01:07:34,830 --> 01:07:39,430 Y yo voy a hacer include. 1679 01:07:39,430 --> 01:07:42,770 Y luego me voy a hacer int main (void). 1680 01:07:42,770 --> 01:07:46,390 Déjame guardar este archivo como una loop.c. 1681 01:07:46,390 --> 01:07:48,280 Sólo como un ejemplo. 1682 01:07:48,280 --> 01:07:49,910 Y voy a seguir adelante y hacer lo siguiente. 1683 01:07:49,910 --> 01:07:54,180 Quiero escribir un programa muy tedioso. 1684 01:07:54,180 --> 01:07:56,170 Así 10. 1685 01:07:56,170 --> 01:07:58,862 Vamos a hacer esto. 1686 01:07:58,862 --> 01:07:59,320 9. 1687 01:07:59,320 --> 01:08:00,360 Está bien. 1688 01:08:00,360 --> 01:08:02,120 Tan pronto como usted comience a hacer esto en la programación, usted es 1689 01:08:02,120 --> 01:08:03,490 probablemente haciendo algo mal. 1690 01:08:03,490 --> 01:08:04,950 Pero vamos a empezar por ahí de todos modos. 1691 01:08:04,950 --> 01:08:05,430 Oops. 1692 01:08:05,430 --> 01:08:06,950 Eso es realmente malo. 1693 01:08:06,950 --> 01:08:08,230 7. 1694 01:08:08,230 --> 01:08:09,440 6. 1695 01:08:09,440 --> 01:08:10,750 5. 1696 01:08:10,750 --> 01:08:11,200 4. 1697 01:08:11,200 --> 01:08:12,450 Nada de lo que va a pasar cuando lleguemos a 0. 1698 01:08:12,450 --> 01:08:13,290 3. 1699 01:08:13,290 --> 01:08:14,590 2. 1700 01:08:14,590 --> 01:08:15,630 1. 1701 01:08:15,630 --> 01:08:16,020 Bien. 1702 01:08:16,020 --> 01:08:17,560 0. 1703 01:08:17,560 --> 01:08:18,689 Eliminar. 1704 01:08:18,689 --> 01:08:19,029 >> Está bien. 1705 01:08:19,029 --> 01:08:20,029 Así que devolverá 0. 1706 01:08:20,029 --> 01:08:22,010 Así que este programa es, obviamente, va a hacer lo mismo 1707 01:08:22,010 --> 01:08:23,310 tediosamente dice que va a hacer. 1708 01:08:23,310 --> 01:08:24,060 Se va a imprimir todos los 1709 01:08:24,060 --> 01:08:25,290 valores, de arriba a abajo. 1710 01:08:25,290 --> 01:08:27,140 Así que me hacen bucle. 1711 01:08:27,140 --> 01:08:28,640 Y entonces - gritos. 1712 01:08:28,640 --> 01:08:29,700 Hacer circular. 1713 01:08:29,700 --> 01:08:31,479 Yo estaba en el directorio equivocado. 1714 01:08:31,479 --> 01:08:33,300 Y ahora déjame correr bucle. 1715 01:08:33,300 --> 01:08:34,140 Intro. 1716 01:08:34,140 --> 01:08:34,620 Woohoo. 1717 01:08:34,620 --> 01:08:35,270 Muy bonito. 1718 01:08:35,270 --> 01:08:36,279 Programa Niza, mucho tiempo. 1719 01:08:36,279 --> 01:08:38,109 >> Está bien, pero ahora vamos a hacer esto mejor. 1720 01:08:38,109 --> 01:08:40,810 Al igual que en Scratch, cuando comenzó a utilizar un bucle 1721 01:08:40,810 --> 01:08:43,149 construir, en lugar de simplemente copiar y pegar toda la 1722 01:08:43,149 --> 01:08:45,580 piezas de un rompecabezas, permítanme presentarles a esta cosa. 1723 01:08:45,580 --> 01:08:48,609 Así que en C, hay varias construcciones de bucles, 1724 01:08:48,609 --> 01:08:50,540 uno de los cuales tiene este aspecto. 1725 01:08:50,540 --> 01:08:55,069 Un bucle "for" tiene tres cosas, separados por dos puntos y comas. 1726 01:08:55,069 --> 01:08:57,770 Y, a continuación, en el interior del cuerpo del bucle, por así decirlo - la 1727 01:08:57,770 --> 01:08:59,390 cosas dentro de las llaves - 1728 01:08:59,390 --> 01:09:01,010 podemos hacer algo una y otra vez. 1729 01:09:01,010 --> 01:09:02,310 Así que lo que tenemos aquí en la pantalla, esto es 1730 01:09:02,310 --> 01:09:03,300 literalmente, sólo un comentario. 1731 01:09:03,300 --> 01:09:05,380 El / / significa aquí viene un comentario. 1732 01:09:05,380 --> 01:09:06,180 Este no es el código. 1733 01:09:06,180 --> 01:09:08,890 Esto es sólo descripción de Inglés, para mí, el ser humano. 1734 01:09:08,890 --> 01:09:11,300 >> Así inicializaciones, condiciones y actualizaciones. 1735 01:09:11,300 --> 01:09:12,770 Bueno, vamos a ver cómo funciona esto. 1736 01:09:12,770 --> 01:09:15,520 Esto me permite reescribir el programa de la siguiente manera. 1737 01:09:15,520 --> 01:09:16,399 For - 1738 01:09:16,399 --> 01:09:18,029 así que aquí viene mi loop - 1739 01:09:18,029 --> 01:09:19,439 int i - 1740 01:09:19,439 --> 01:09:21,330 aquí viene una variable llamada "i" - 1741 01:09:21,330 --> 01:09:23,140 se inicializa a 10. 1742 01:09:23,140 --> 01:09:25,260 Así que ahí está mi inicialización. 1743 01:09:25,260 --> 01:09:29,450 Quiero hacer este circuito tan largo como "i" es mayor o 1744 01:09:29,450 --> 01:09:30,899 igual a 0. 1745 01:09:30,899 --> 01:09:32,880 Y en cada iteración de este bucle, quiero 1746 01:09:32,880 --> 01:09:34,979 hay que hacer? -. 1747 01:09:34,979 --> 01:09:36,310 Así que vimos + + el lunes. 1748 01:09:36,310 --> 01:09:37,660 - Es el opuesto. 1749 01:09:37,660 --> 01:09:39,410 Se reduce el valor de 1. 1750 01:09:39,410 --> 01:09:43,319 Dentro de este ciclo, lo que quiero hacer realmente algo. 1751 01:09:43,319 --> 01:09:46,390 Así que voy a decir algo como printf. 1752 01:09:46,390 --> 01:09:48,939 No quiero decir que 10 ahora, porque esto obviamente es 1753 01:09:48,939 --> 01:09:50,000 va a imprimir el mismo valor. 1754 01:09:50,000 --> 01:09:52,246 ¿Qué es lo que quiero imprimir en cambio, probablemente? 1755 01:09:52,246 --> 01:09:52,590 Si. 1756 01:09:52,590 --> 01:09:55,270 Así que "i". Así que% d, i. 1757 01:09:55,270 --> 01:09:57,340 >> Así que me voy a robar una de esas ideas de antes - 1758 01:09:57,340 --> 01:09:59,640 esta sustitución de códigos de formato - 1759 01:09:59,640 --> 01:10:01,620 y aquí abajo, en el fondo, voy a devolver 0, sólo 1760 01:10:01,620 --> 01:10:02,710 por si acaso. 1761 01:10:02,710 --> 01:10:04,740 Pero ahora, tengo un programa más sucinta. 1762 01:10:04,740 --> 01:10:07,490 No es más que unas pocas líneas, y algunas líneas no 10 o 11. 1763 01:10:07,490 --> 01:10:09,440 Déjame ir a mi mensaje aquí. 1764 01:10:09,440 --> 01:10:10,630 Remake bucle. 1765 01:10:10,630 --> 01:10:12,140 Vuelva a ejecutar el bucle. 1766 01:10:12,140 --> 01:10:13,570 Y lo que parece ser la misma. 1767 01:10:13,570 --> 01:10:15,550 Ahora, el programa no es más interesante. 1768 01:10:15,550 --> 01:10:17,180 Pero ahora puedo escribir algo como esto. 1769 01:10:17,180 --> 01:10:18,970 Yo puedo cambiar esto a 100. 1770 01:10:18,970 --> 01:10:21,400 Luego puede volver a compilar mi programa. 1771 01:10:21,400 --> 01:10:23,360 Y entonces puedo volver a ejecutar mi programa. 1772 01:10:23,360 --> 01:10:26,390 Y ahora va super rápido en los ordenadores de hoy en día. 1773 01:10:26,390 --> 01:10:27,820 Pero no tengo - 1774 01:10:27,820 --> 01:10:29,620 y, de hecho, mi memoria de retroceso no 1775 01:10:29,620 --> 01:10:30,890 incluso ir tan lejos. 1776 01:10:30,890 --> 01:10:31,680 Ahí vamos. 1777 01:10:31,680 --> 01:10:34,090 Así que ahí tenemos todo 100. 1778 01:10:34,090 --> 01:10:35,880 Pero es fácil cometer errores aquí. 1779 01:10:35,880 --> 01:10:37,920 ¿Cuál va a ser el comportamiento esperado si 1780 01:10:37,920 --> 01:10:41,150 accidentalmente hacer eso? 1781 01:10:41,150 --> 01:10:42,550 Así que se siente como infinito. 1782 01:10:42,550 --> 01:10:44,670 Así que vamos a ver si el equipo se comporta. 1783 01:10:44,670 --> 01:10:47,020 >> Así que déjame ir adelante y hacer bucle. 1784 01:10:47,020 --> 01:10:48,355 Y déjame correr bucle. 1785 01:10:53,590 --> 01:10:55,210 Así que vamos a volver a eso en un momento. 1786 01:10:55,210 --> 01:10:56,720 Vamos a dejar que esa ejecución. 1787 01:10:56,720 --> 01:10:59,520 Porque lo que debemos contar hasta, como mínimo? 1788 01:10:59,520 --> 01:11:02,200 Es probable que al menos 2 millones de dólares, si tenemos que muchos bits, y 1789 01:11:02,200 --> 01:11:03,660 estamos usando valores positivos. 1790 01:11:03,660 --> 01:11:04,890 Así que vamos a volver aquí. 1791 01:11:04,890 --> 01:11:07,810 Frente a este tipo de bucles, tenemos lo que se llama tiempo 1792 01:11:07,810 --> 01:11:09,430 bucles. Por lo tanto, al igual que en Scratch, usted tenía siempre 1793 01:11:09,430 --> 01:11:11,240 bloques, bloques y tenías que repetir. 1794 01:11:11,240 --> 01:11:13,270 Del mismo modo, en C, sólo hay otras maneras 1795 01:11:13,270 --> 01:11:14,260 de expresarse. 1796 01:11:14,260 --> 01:11:17,110 Por lo que tiene esta noción de un bucle while que le permite 1797 01:11:17,110 --> 01:11:18,860 expresarse de manera diferente. 1798 01:11:18,860 --> 01:11:21,490 Y luego hay algo que se llama un bucle do-while, 1799 01:11:21,490 --> 01:11:24,200 que funciona ligeramente diferente también. 1800 01:11:24,200 --> 01:11:25,320 Y vamos a molestar estos aparte con el tiempo. 1801 01:11:25,320 --> 01:11:28,630 >> Pero echemos un vistazo a este último aquí. 1802 01:11:28,630 --> 01:11:30,160 Si entramos en - 1803 01:11:30,160 --> 01:11:31,466 sigue funcionando. 1804 01:11:31,466 --> 01:11:32,770 Es bastante infinita. 1805 01:11:32,770 --> 01:11:36,870 Así que déjame ir en positivo, y mostrar cómo podemos realmente 1806 01:11:36,870 --> 01:11:39,410 gobiernan la entrada del usuario un poco más eficaz. 1807 01:11:39,410 --> 01:11:40,910 Es un programa bastante corto. 1808 01:11:40,910 --> 01:11:43,730 Y aquí tenemos, en principal, una declaración int n. 1809 01:11:43,730 --> 01:11:46,570 Así que dame una variable llamada n. Ahora, yo digo literalmente 1810 01:11:46,570 --> 01:11:48,340 "Hacer". Y luego tengo abierto rizado 1811 01:11:48,340 --> 01:11:49,630 abrazadera, llave de cierre cerca. 1812 01:11:49,630 --> 01:11:52,000 Y después se da cuenta, después de eso, se dice que aunque n 1813 01:11:52,000 --> 01:11:53,790 es menor que 1. 1814 01:11:53,790 --> 01:11:55,300 Así que notar que estas líneas - 1815 01:11:55,300 --> 01:11:56,740 19 a 24 - 1816 01:11:56,740 --> 01:11:59,450 redactar colectivamente un bucle do-while. 1817 01:11:59,450 --> 01:12:01,280 Y de nuevo, la sintaxis nueva, no es una idea nueva. 1818 01:12:01,280 --> 01:12:03,740 Es sólo otra forma de bucle, sintácticamente. 1819 01:12:03,740 --> 01:12:04,890 Entonces, ¿qué hace esto? 1820 01:12:04,890 --> 01:12:08,000 Hacer lo siguiente mientras que n es menor que 1. 1821 01:12:08,000 --> 01:12:09,080 Entonces, ¿qué es lo que quiero hacer? 1822 01:12:09,080 --> 01:12:11,390 Exijo que me des un entero positivo. 1823 01:12:11,390 --> 01:12:14,110 Entonces yo realmente tratar de obtener un número entero de parte del usuario. 1824 01:12:14,110 --> 01:12:16,740 Pero en términos de la orden de las operaciones aquí, debido a que el 1825 01:12:16,740 --> 01:12:21,850 mientras condición es aquí, entonces me va a comprobar, es n 1826 01:12:21,850 --> 01:12:23,100 menos de 1? 1827 01:12:23,100 --> 01:12:24,600 Así que supongamos que el usuario - 1828 01:12:24,600 --> 01:12:26,450 después de ser exigido de esta manera - 1829 01:12:26,450 --> 01:12:29,190 tipos en el valor 0. 1830 01:12:29,190 --> 01:12:34,510 Esta condición va a ser verdadera o falsa? 1831 01:12:34,510 --> 01:12:35,820 Bueno, en realidad va a ser verdad. 1832 01:12:35,820 --> 01:12:38,700 Dado que n es 0, y 0 es menor que 1. 1833 01:12:38,700 --> 01:12:40,140 Entonces, ¿qué implica eso? 1834 01:12:40,140 --> 01:12:41,160 Hazlo de nuevo. 1835 01:12:41,160 --> 01:12:41,990 Hazlo de nuevo. 1836 01:12:41,990 --> 01:12:42,640 Hazlo de nuevo. 1837 01:12:42,640 --> 01:12:46,080 Sólo una vez que la condición se evalúa como false. 1838 01:12:46,080 --> 01:12:47,510 Si escribo en 42. 1839 01:12:47,510 --> 01:12:49,690 Pues no, 42 no es menor que 1. 1840 01:12:49,690 --> 01:12:52,320 Por lo tanto, este bucle se realiza ejecutando. 1841 01:12:52,320 --> 01:12:54,650 Y así, en ese momento, el programa va a decir, gracias por 1842 01:12:54,650 --> 01:12:57,530 el 42, en este caso. 1843 01:12:57,530 --> 01:13:00,320 Ahora que tiene esta forma de expresarse - 1844 01:13:00,320 --> 01:13:02,360 No debemos esperar a que esto termine. 1845 01:13:02,360 --> 01:13:03,620 Va a tomar algún tiempo. 1846 01:13:03,620 --> 01:13:04,990 Continuará la próxima vez, tal vez. 1847 01:13:04,990 --> 01:13:08,050 >> Pero ahora, usted tiene la capacidad de entender una suerte 1848 01:13:08,050 --> 01:13:09,060 poco de humor geek. 1849 01:13:09,060 --> 01:13:11,560 Disculpas. 1850 01:13:11,560 --> 01:13:13,620 Esto no es representativo de humor en la ciencia de la computación 1851 01:13:13,620 --> 01:13:14,870 mundo, pero es lindo. 1852 01:13:21,020 --> 01:13:23,890 Final [risas] Vamos en esa nota. 1853 01:13:23,890 --> 01:13:25,750 Y nos vemos el lunes. 1854 01:13:25,750 --> 01:13:31,629 [Aplausos]