1 00:00:08,119 --> 00:00:11,630 [Powered by Google Translate] DAVID J. MALAN: Muy bien, este es CS50, y es esta la 2 00:00:11,630 --> 00:00:14,790 el inicio de la segunda semana. 3 00:00:14,790 --> 00:00:16,300 Gracias. 4 00:00:16,300 --> 00:00:19,000 Empecemos aquí con una llamada telefónica. 5 00:00:19,000 --> 00:00:30,005 Estoy a punto de marcar 617-BUG-CS50. 6 00:00:30,005 --> 00:00:31,230 CS50: Este es CS50. 7 00:00:31,230 --> 00:00:33,930 Para Boy Shuttle, pulse 1. 8 00:00:33,930 --> 00:00:36,660 Para empezar de nuevo, pulse 9. 9 00:00:36,660 --> 00:00:38,180 DAVID J. MALAN: Así dijo Chico Shuttle, pulse 1. 10 00:00:38,180 --> 00:00:41,560 Así que vamos a presionar 1. 11 00:00:41,560 --> 00:00:43,230 CS50: ¿Cuál es su origen? 12 00:00:43,230 --> 00:00:45,340 Por quad, pulse 1. 13 00:00:45,340 --> 00:00:47,080 Mather, pulse 2. 14 00:00:47,080 --> 00:00:49,240 Boylston, pulse 3. 15 00:00:49,240 --> 00:00:51,280 Lamont, pulse 4. 16 00:00:51,280 --> 00:00:53,210 Mem Hall, pulse 5. 17 00:00:53,210 --> 00:00:55,660 Para empezar de nuevo, pulse 0. 18 00:00:55,660 --> 00:00:59,590 DAVID J. MALAN: Vamos a presionar 1 para el quad. 19 00:00:59,590 --> 00:01:03,610 CS50: Shuttle Siguiente sale en este mismo instante a la 1:10 pm, y 20 00:01:03,610 --> 00:01:09,820 luego a las 1:20 pm, 1:30 pm, 1:40 PM. 21 00:01:09,820 --> 00:01:12,030 Esto es CS50. 22 00:01:12,030 --> 00:01:15,570 >> DAVID J. MALAN: Así que esta es la voz del CS50. 23 00:01:15,570 --> 00:01:18,030 Y es un ejemplo de los tipos de proyectos fin de carrera, por 24 00:01:18,030 --> 00:01:19,500 ejemplo, se puede arrancar con los dientes hacia 25 00:01:19,500 --> 00:01:20,600 Al final del semestre. 26 00:01:20,600 --> 00:01:23,840 Por ejemplo, que existe shuttleboy.cs50.net - 27 00:01:23,840 --> 00:01:28,200 en realidad un proyecto que escribí por primera vez después de tomar CS51 28 00:01:28,200 --> 00:01:29,740 cuando yo era estudiante. 29 00:01:29,740 --> 00:01:32,250 Y aquí la inspiración era en aquel entonces, lo único que tenía era 30 00:01:32,250 --> 00:01:34,320 los horarios de autobuses, transporte impresos y no había 31 00:01:34,320 --> 00:01:35,970 noción de ver las cosas en línea. 32 00:01:35,970 --> 00:01:38,730 Y, entonces, una especie de paloma en un fin de semana, se vierte a través de la 33 00:01:38,730 --> 00:01:41,460 calendario impreso, y portado a un programa de ordenador. 34 00:01:41,460 --> 00:01:43,790 En ese momento, el programa de ordenador que pasó a ser escrito 35 00:01:43,790 --> 00:01:47,110 en C. Y en realidad corría por Boy traslado escribiendo en un 36 00:01:47,110 --> 00:01:48,600 parpadeo rápido como lo hemos estado haciendo hasta ahora. 37 00:01:48,600 --> 00:01:50,450 Pero con los años, ha evolucionado hasta convertirse en un instante 38 00:01:50,450 --> 00:01:51,390 mensajería bot. 39 00:01:51,390 --> 00:01:53,970 Ha evolucionado más recientemente en este sitio web, en un 40 00:01:53,970 --> 00:01:57,720 Basado en SMS herramienta, así como en esta herramienta basado en la voz. 41 00:01:57,720 --> 00:02:00,170 Y esto es hacer alusión a la clase de cosas que usted puede 42 00:02:00,170 --> 00:02:02,380 hacer por sí mismo por el final del semestre. 43 00:02:02,380 --> 00:02:05,490 >> Por ejemplo, existe la versión de SMS Boy traslado ocurre 44 00:02:05,490 --> 00:02:06,510 para operar como sigue. 45 00:02:06,510 --> 00:02:10,880 Si en su teléfono celular, enviar un mensaje de texto al 41411 y 46 00:02:10,880 --> 00:02:14,300 a continuación, enviar el sboy símbolo especial, para el muchacho de traslado, 47 00:02:14,300 --> 00:02:18,350 seguido por A y B, donde A es un origen y B es un 48 00:02:18,350 --> 00:02:19,070 destino - 49 00:02:19,070 --> 00:02:21,030 por ejemplo, Boylston Space Quad - 50 00:02:21,030 --> 00:02:23,330 lo que se debe volver en unos pocos segundos es un texto 51 00:02:23,330 --> 00:02:25,820 mensaje de Boy traslado diciendo exactamente cuando el 52 00:02:25,820 --> 00:02:28,990 próximos autobuses son pocos, desde ese punto Una situación que 53 00:02:28,990 --> 00:02:29,640 punto B. 54 00:02:29,640 --> 00:02:32,510 Y este es un ejemplo más general de lo que se conoce como 55 00:02:32,510 --> 00:02:33,920 mediante una API. 56 00:02:33,920 --> 00:02:36,930 >> Así, por ejemplo, esto aquí es sólo shuttleboy.cs50.net, el 57 00:02:36,930 --> 00:02:39,300 real basada en la web encarnación de esta. 58 00:02:39,300 --> 00:02:42,480 Pero los datos que subraya esta y otras aplicaciones que CS50 59 00:02:42,480 --> 00:02:45,560 ha desarrollado están todos expuestos a todos aquí en la forma 60 00:02:45,560 --> 00:02:49,340 de APIs, interfaces de programación de aplicaciones. 61 00:02:49,340 --> 00:02:52,220 Y eso es sólo una forma elegante de decir que la gente que nos gusta en 62 00:02:52,220 --> 00:02:56,010 Internet y otros han pasado algún tiempo en la creación 63 00:02:56,010 --> 00:02:59,970 software que se puede utilizar con el fin de apoderarse de los datos de nosotros y 64 00:02:59,970 --> 00:03:02,510 luego construir sus propias aplicaciones en la parte superior 65 00:03:02,510 --> 00:03:03,840 de ese conjunto de datos. 66 00:03:03,840 --> 00:03:06,610 Así, por ejemplo, este muchacho de traslado página de la API aquí, que 67 00:03:06,610 --> 00:03:09,390 pasa a ser en el manual de CS50, esencialmente documentos 68 00:03:09,390 --> 00:03:13,080 cómo usted puede ir sobre la solicitud CS50 servidores de datos. 69 00:03:13,080 --> 00:03:16,240 Por ejemplo, si usted está familiarizado con los archivos CSV, comma 70 00:03:16,240 --> 00:03:18,940 valores separados, estos son sólo una especie de rápido y sucio 71 00:03:18,940 --> 00:03:20,310 Excel-como los archivos. 72 00:03:20,310 --> 00:03:23,110 Así que usted puede hacer Boy traslado de todos los datos en toda la 73 00:03:23,110 --> 00:03:25,090 casas y sus coordenadas GPS, y obtendrá 74 00:03:25,090 --> 00:03:27,300 de nuevo, en esencia, una hoja de cálculo como el que 75 00:03:27,300 --> 00:03:30,820 lo cual puede leerse en un programa de su cuenta y luego 76 00:03:30,820 --> 00:03:33,250 generar resultados, como el Niño de traslado en sí 77 00:03:33,250 --> 00:03:34,160 pasa a estar haciendo. 78 00:03:34,160 --> 00:03:37,030 Para los más familiares, representaciones de datos más modernos 79 00:03:37,030 --> 00:03:39,420 incluir JSON, notación JavaScript Object. 80 00:03:39,420 --> 00:03:40,620 Algo saldrá de nuevo a usted hacia 81 00:03:40,620 --> 00:03:41,720 Al final del semestre. 82 00:03:41,720 --> 00:03:45,440 >> Pero de nuevo, esto es sólo una de varias de las API del propio CS50. 83 00:03:45,440 --> 00:03:48,320 Y lo más emocionante es ahora, en estos días, Facebook y 84 00:03:48,320 --> 00:03:51,110 Twitter y Google y prácticamente todos los sitios web populares hacia fuera 85 00:03:51,110 --> 00:03:54,130 no tiene algún tipo de API, lo que significa que si usted lee el 86 00:03:54,130 --> 00:03:56,620 documentación en su sitio web, usted se inscribe en un 87 00:03:56,620 --> 00:03:59,980 cuenta, usted puede entonces comenzar a escribir software en la parte superior de 88 00:03:59,980 --> 00:04:03,680 cualquier herramienta o datos que la empresa no proporciona. 89 00:04:03,680 --> 00:04:06,210 Y así, uno de nuestros compañeros docentes propios un par de años atrás 90 00:04:06,210 --> 00:04:07,620 escribió una versión para Mac de esto. 91 00:04:07,620 --> 00:04:10,990 Así que en el enlace titulado Mac aquí arriba a la izquierda, en realidad se puede 92 00:04:10,990 --> 00:04:13,940 descargar un widget de Mac OS que se ejecuta en su propio Mac para hacer el 93 00:04:13,940 --> 00:04:15,040 mismo tipo de cosas. 94 00:04:15,040 --> 00:04:17,970 Así que es todo sobre la construcción en la parte superior de los conjuntos de datos como estos. 95 00:04:17,970 --> 00:04:21,839 Pero más sobre esto hacia el final del semestre. 96 00:04:21,839 --> 00:04:25,780 >> Así que vamos a bucear en rápido real a un error, sólo para tipo de conseguir 97 00:04:25,780 --> 00:04:27,990 cosas en calor hoy, y pienso en algunos de los 98 00:04:27,990 --> 00:04:29,660 lo vimos la semana pasada. 99 00:04:29,660 --> 00:04:32,840 En particular, quiero seguir adelante y levantar, por ejemplo, 100 00:04:32,840 --> 00:04:34,080 este ejemplo aquí. 101 00:04:34,080 --> 00:04:37,500 Buggy1.c, está disponible en la página web del curso si se había 102 00:04:37,500 --> 00:04:40,250 Desea descargarla y meter a tu alrededor. 103 00:04:40,250 --> 00:04:43,520 Pero vamos a acercar aquí en este programa bastante corto, y sólo 104 00:04:43,520 --> 00:04:46,550 un resumen super-rápido de algunos de los elementos básicos que 105 00:04:46,550 --> 00:04:48,880 que realmente van a empezar a limitarse a tomar por sentado. 106 00:04:48,880 --> 00:04:51,860 >> Así las cosas azul, en las líneas 1 a 9, son sólo 107 00:04:51,860 --> 00:04:53,670 preguntas de softbol. 108 00:04:53,670 --> 00:04:54,590 Así que estos son sólo comentarios. 109 00:04:54,590 --> 00:04:56,230 Ellos no tienen un significado funcional. 110 00:04:56,230 --> 00:04:58,460 Pero son los comentarios en el sentido de que son las notas que 111 00:04:58,460 --> 00:05:02,010 Yo, el ser humano, hecho a mí mismo, para que en la conferencia y después de 112 00:05:02,010 --> 00:05:04,340 conferencia, realmente puedo recordar lo que este programa 113 00:05:04,340 --> 00:05:07,120 hace sin tener que leer línea por línea y 114 00:05:07,120 --> 00:05:08,990 recrear la historia en mi mente. 115 00:05:08,990 --> 00:05:11,000 Por otra parte, si se me entregue este programa a otra persona como 116 00:05:11,000 --> 00:05:14,420 usted, es mucho más claro para usted, debido a los comentarios de este tipo, 117 00:05:14,420 --> 00:05:16,680 lo que el programa está haciendo en realidad, o al menos lo que el 118 00:05:16,680 --> 00:05:18,210 programa supone que debe hacer. 119 00:05:18,210 --> 00:05:20,760 Si es o no es correcto es harina de otro costal. 120 00:05:20,760 --> 00:05:25,040 Ahora, en C, con comentarios de varias líneas, recordemos que en la línea 121 00:05:25,040 --> 00:05:27,880 de aquí es el símbolo de la magia, / *. 122 00:05:27,880 --> 00:05:30,380 Esto significa que aquí viene el inicio de un comentario. 123 00:05:30,380 --> 00:05:34,560 Y nada más importa hasta que llegue al final de terminación, 124 00:05:34,560 --> 00:05:36,700 que es * /, lo contrario. 125 00:05:36,700 --> 00:05:39,120 Así que el hecho de que tengo 80-algunas estrellas impares desde aquí 126 00:05:39,120 --> 00:05:41,550 de izquierda a derecha es en realidad sólo un detalle estético. 127 00:05:41,550 --> 00:05:43,370 No tiene ningún significado funcional. 128 00:05:43,370 --> 00:05:44,490 >> Ahora, ¿qué hay de la línea 11? 129 00:05:44,490 --> 00:05:46,940 ¿Qué hace esto en términos simples? 130 00:05:51,560 --> 00:05:52,540 ¿Qué es eso? 131 00:05:52,540 --> 00:05:54,280 AUDIENCIA: Incluye la norma. 132 00:05:54,280 --> 00:05:54,740 DAVID J. MALAN: OK, bueno. 133 00:05:54,740 --> 00:05:57,500 Por lo tanto, incluye la biblioteca stdio.h. 134 00:05:57,500 --> 00:05:58,230 Entonces, ¿qué significa eso? 135 00:05:58,230 --> 00:06:01,570 Pues bien, dentro de ese archivo, stdio.h, son un montón de 136 00:06:01,570 --> 00:06:03,320 declaraciones de función - 137 00:06:03,320 --> 00:06:05,290 es decir, el código que otra persona escribió. 138 00:06:05,290 --> 00:06:08,160 Y un ejemplo perfecto de una función que se declara en 139 00:06:08,160 --> 00:06:10,250 stdio.h es - 140 00:06:10,250 --> 00:06:11,980 que por ahora favorito? 141 00:06:11,980 --> 00:06:14,300 Así printf, uno de los más comunes de usar, ciertamente 142 00:06:14,300 --> 00:06:15,840 desde el principio, desde que la biblioteca está allí. 143 00:06:15,840 --> 00:06:19,290 Si excluyo esa línea de código, Clang va a gritar 144 00:06:19,290 --> 00:06:22,550 a mí algo sobre el uso de un símbolo no declarado. 145 00:06:22,550 --> 00:06:24,930 Algo no declarado es, probablemente, la palabra clave, porque 146 00:06:24,930 --> 00:06:27,770 no nos han informado que el compilador lo ve printf 147 00:06:27,770 --> 00:06:29,230 a menos que nos gustaría incluir esa línea. 148 00:06:29,230 --> 00:06:31,830 Y más a la Tierra, en realidad, lo que está diciendo es la línea 149 00:06:31,830 --> 00:06:34,890 abrir ese archivo, stdio.h, donde quiera que se encuentra en el servidor de 150 00:06:34,890 --> 00:06:38,200 disco duro o unidad de disco duro del dispositivo, y copiar y pegar-it 151 00:06:38,200 --> 00:06:40,240 ahí mismo en mi archivo, sin mi 152 00:06:40,240 --> 00:06:41,730 tener que hacerlo manualmente. 153 00:06:41,730 --> 00:06:44,420 >> Ahora, una vez que lleguemos hasta aquí para principal, en poco tiempo vamos a empezar 154 00:06:44,420 --> 00:06:46,900 bromas aparte lo int y lo que es vacío. 155 00:06:46,900 --> 00:06:48,430 Pero por ahora, vamos a ver las tres líneas 156 00:06:48,430 --> 00:06:50,350 dentro de 15 a 17. 157 00:06:50,350 --> 00:06:52,250 Esto aquí afirmo como buggy. 158 00:06:52,250 --> 00:06:54,900 Línea 7 en mis comentarios dice: "En caso de imprimir 10 159 00:06:54,900 --> 00:06:59,410 asteriscos, pero no. "¿Por qué esto no se imprimen, de hecho, 160 00:06:59,410 --> 00:07:01,097 10 estrellas de este tipo? 161 00:07:01,097 --> 00:07:02,347 AUDIENCIA: [inaudible]. 162 00:07:05,210 --> 00:07:05,800 DAVID J. MALAN: Exactamente. 163 00:07:05,800 --> 00:07:08,720 Así cuenta de que estamos empezando a contar desde 0. 164 00:07:08,720 --> 00:07:10,780 Y esto es en realidad una convención en la programación y 165 00:07:10,780 --> 00:07:13,230 ciencias de la computación en general, empezando a contar 166 00:07:13,230 --> 00:07:14,610 de 0 en lugar de 1. 167 00:07:14,610 --> 00:07:16,690 Y esto realmente sólo se deriva del hecho de que, para 168 00:07:16,690 --> 00:07:18,940 ejemplo, cuando teníamos ocho personas en el escenario, cuando 169 00:07:18,940 --> 00:07:20,680 nadie levantaba la mano, eran 170 00:07:20,680 --> 00:07:22,340 todos los ceros eficaz. 171 00:07:22,340 --> 00:07:24,260 Y lo que es sólo una especie de convención ordenador para, 172 00:07:24,260 --> 00:07:26,030 por lo tanto, para empezar a contar desde 0. 173 00:07:26,030 --> 00:07:29,130 Si ese es el menor número que puede representar en binario. 174 00:07:29,130 --> 00:07:32,270 >> Así que aquí hemos empezado la inicialización i en 0. 175 00:07:32,270 --> 00:07:34,230 Hemos establecido i igual a 0. 176 00:07:34,230 --> 00:07:37,780 Pero entonces hice este error aquí, diciendo que es menor o 177 00:07:37,780 --> 00:07:38,820 igual a 10. 178 00:07:38,820 --> 00:07:41,700 Pero si usted piensa que a través de, si empiezo a 0 y luego me voy 179 00:07:41,700 --> 00:07:46,410 hasta 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, de hecho voy a 180 00:07:46,410 --> 00:07:49,980 imprimir 11 estrellas a la pantalla, porque he subido 181 00:07:49,980 --> 00:07:52,410 a e igual a 10. 182 00:07:52,410 --> 00:07:55,090 Así que la solución fácil aquí es, entonces, ¿qué? 183 00:07:55,090 --> 00:07:56,070 AUDIENCIA: [inaudible]. 184 00:07:56,070 --> 00:07:57,350 DAVID J. MALAN: Sólo tienes que cambiar a menos. 185 00:07:57,350 --> 00:07:59,700 Si usted realmente desea, usted puede hacer esto. 186 00:07:59,700 --> 00:08:01,370 Pero, en general, que está mal visto. 187 00:08:01,370 --> 00:08:04,020 Y así empieza a contar desde 0 es sólo algo que debería 188 00:08:04,020 --> 00:08:05,510 normalmente se acostumbra. 189 00:08:05,510 --> 00:08:07,810 Ahora, ¿qué pasa con toda esta construcción en sí y por sí misma? 190 00:08:07,810 --> 00:08:10,640 Esta línea 15 deMarks un bucle for. 191 00:08:10,640 --> 00:08:12,510 Así que para no es una función. 192 00:08:12,510 --> 00:08:13,640 Es sólo una declaración. 193 00:08:13,640 --> 00:08:16,180 Es una construcción de bucle, como vimos en el Scratch. 194 00:08:16,180 --> 00:08:17,600 Y tiene tres partes. 195 00:08:17,600 --> 00:08:19,740 Observe que no es la primera parte de 196 00:08:19,740 --> 00:08:21,350 la izquierda de la coma. 197 00:08:21,350 --> 00:08:24,200 Ahí está la parte media entre los dos puntos y comas. 198 00:08:24,200 --> 00:08:26,250 Y luego está la parte de la derecha a la derecha 199 00:08:26,250 --> 00:08:27,640 del punto y coma segundo. 200 00:08:27,640 --> 00:08:31,822 Ahora, la primera de ellas hace qué? 201 00:08:31,822 --> 00:08:33,679 AUDIENCIA: [inaudible]. 202 00:08:33,679 --> 00:08:34,270 DAVID J. MALAN: Volver allí? 203 00:08:34,270 --> 00:08:34,816 ¿Sí? 204 00:08:34,816 --> 00:08:35,980 AUDIENCIA: Inicialización. 205 00:08:35,980 --> 00:08:36,850 >> DAVID J. MALAN: Inicialización. 206 00:08:36,850 --> 00:08:37,840 Entonces, ¿qué significa esto? 207 00:08:37,840 --> 00:08:40,690 Hemos declarado una variable llamada i. 208 00:08:40,690 --> 00:08:43,840 Es de tipo int, porque he especificado int i. 209 00:08:43,840 --> 00:08:46,470 Y estoy i inicializar con el valor de 0. 210 00:08:46,470 --> 00:08:47,730 Entonces, ¿qué esta diciendo realmente? 211 00:08:47,730 --> 00:08:50,680 Es efectivamente diciendo a la computadora hey, dame suficiente 212 00:08:50,680 --> 00:08:53,660 memoria RAM suficiente, para ajustarse a un número y, a continuación, poner el 213 00:08:53,660 --> 00:08:56,130 número 0 en ese bloque de memoria RAM. 214 00:08:56,130 --> 00:08:59,100 Y en un aparte, qué tan grande es un int por lo general, al menos dentro 215 00:08:59,100 --> 00:09:00,280 del aparato? 216 00:09:00,280 --> 00:09:01,000 AUDIENCIA: 32 bit. 217 00:09:01,000 --> 00:09:01,670 DAVID J. MALAN: 32 bits. 218 00:09:01,670 --> 00:09:04,890 Eso quiere decir que me dan 32 bits, también conocida como 4 bytes, 219 00:09:04,890 --> 00:09:07,250 y poner el valor 0 en el mismo, lo cual es bastante fácil porque 220 00:09:07,250 --> 00:09:09,110 Simplemente significa poner todos los bits a 0. 221 00:09:09,110 --> 00:09:11,690 >> Así que ahora, la segunda parte aquí es la condición. 222 00:09:11,690 --> 00:09:14,590 Y la condición, como su nombre lo indica, es lo que se comprueba 223 00:09:14,590 --> 00:09:18,100 una y otra vez y otra vez acerca de si es cierto o falso. 224 00:09:18,100 --> 00:09:21,410 Así que esto es sólo decir hacer las siguientes líneas de código - 225 00:09:21,410 --> 00:09:23,950 es decir, la línea 16, porque esa es la única sangría 226 00:09:23,950 --> 00:09:24,820 debajo - 227 00:09:24,820 --> 00:09:26,980 siempre que i es menor que 10. 228 00:09:26,980 --> 00:09:30,520 Y después de cada iteración a través de este bucle, haga lo 229 00:09:30,520 --> 00:09:33,840 incremento, que en este caso es i + +. 230 00:09:33,840 --> 00:09:35,580 Ahora bien, no tiene por qué ser i + +. 231 00:09:35,580 --> 00:09:37,610 Podría ser i -. 232 00:09:37,610 --> 00:09:39,860 Pero si lo hice, ¿cuál es el comportamiento va 233 00:09:39,860 --> 00:09:41,370 siendo de este programa? 234 00:09:41,370 --> 00:09:42,290 AUDIENCIA: Va a ser un bucle infinito. 235 00:09:42,290 --> 00:09:44,060 DAVID J. MALAN: Va a ser una especie de bucle infinito, 236 00:09:44,060 --> 00:09:47,720 a menos que tengamos suerte después negativo 2 millones de dólares o así. 237 00:09:47,720 --> 00:09:51,320 Tal vez las cosas se envuelven alrededor, sólo por la naturaleza de lo finito 238 00:09:51,320 --> 00:09:53,930 número de bits que se han asignado para un int. 239 00:09:53,930 --> 00:09:56,270 Pero es seguro que va a repetir mucho más que 10 y 240 00:09:56,270 --> 00:09:58,630 sin duda, más de 11 veces aquí. 241 00:09:58,630 --> 00:10:02,240 >> Y ahora, en un aparte, darse cuenta de que i + + y i - 242 00:10:02,240 --> 00:10:04,420 en realidad son sólo azúcar sintáctica. 243 00:10:04,420 --> 00:10:07,210 Es sólo la notación abreviada de lo que es un poco más 244 00:10:07,210 --> 00:10:08,720 explícitamente escrito como sigue: 245 00:10:08,720 --> 00:10:11,200 i = i + 1. 246 00:10:11,200 --> 00:10:13,460 Que es idéntica a i + +. 247 00:10:13,460 --> 00:10:15,860 Es sólo un poco se ve más bonito que decir i + +. 248 00:10:15,860 --> 00:10:17,490 Es más conciso, más legible. 249 00:10:17,490 --> 00:10:19,030 Y así, la mayoría de la gente hace en su lugar. 250 00:10:19,030 --> 00:10:21,840 Pero esto es funcionalmente idéntica a 251 00:10:21,840 --> 00:10:22,900 lo que acabamos de ver. 252 00:10:22,900 --> 00:10:27,770 Así que en resumen, la solución rápida aquí es sólo para decir iterar i 253 00:10:27,770 --> 00:10:30,690 desde 0 todo el camino hasta menos de 10. 254 00:10:30,690 --> 00:10:32,700 Y entonces ciertamente obtendrá 10 estrellas. 255 00:10:32,700 --> 00:10:33,430 >> Así que vamos a probar esto. 256 00:10:33,430 --> 00:10:35,310 Déjame abrir la terminal en la parte inferior. 257 00:10:35,310 --> 00:10:37,420 Déjame entrar en el directorio que este es pulg 258 00:10:37,420 --> 00:10:40,030 Y voy a compilarlo manualmente con Clang por ahora. 259 00:10:40,030 --> 00:10:44,880 Y voy a compilar esto como buggy1.c, Enter. 260 00:10:44,880 --> 00:10:50,280 Y ahora buggy1, ¿por qué no hay tal archivo o directorio 261 00:10:50,280 --> 00:10:52,026 llamado buggy1? 262 00:10:52,026 --> 00:10:53,850 AUDIENCIA: [inaudible]. 263 00:10:53,850 --> 00:10:54,240 DAVID J. MALAN: Si. 264 00:10:54,240 --> 00:10:55,420 Así que es en realidad llamado a.out. 265 00:10:55,420 --> 00:10:57,480 Así que si usted acaba de recordar ejecutar Clang, donde Clang es la 266 00:10:57,480 --> 00:11:00,420 compilador, y no se especifica el nombre que desea 267 00:11:00,420 --> 00:11:03,550 dar a su programa, que va por defecto a a.out. 268 00:11:03,550 --> 00:11:05,030 Así que en realidad, si lo hago ls - 269 00:11:05,030 --> 00:11:05,510 oops. 270 00:11:05,510 --> 00:11:07,680 Y I didn't - el tema negro y blanco algunos de 271 00:11:07,680 --> 00:11:08,840 te enfrentaste se ha solucionado. 272 00:11:08,840 --> 00:11:10,670 Pero déjame hacer esto. 273 00:11:10,670 --> 00:11:14,570 No tenemos a.out en el lado izquierdo hay. 274 00:11:14,570 --> 00:11:17,360 Así que tenemos que ejecutar a.out en lugar de buggy1. 275 00:11:17,360 --> 00:11:19,140 >> Así que déjame ir adelante y hacerlo. 276 00:11:19,140 --> 00:11:22,840 . / A.out, Intro. 277 00:11:22,840 --> 00:11:26,160 Y al parecer no hizo lo que? 278 00:11:26,160 --> 00:11:26,620 AUDIENCIA: Guardar. 279 00:11:26,620 --> 00:11:27,390 DAVID J. MALAN: Guardar mi archivo. 280 00:11:27,390 --> 00:11:31,520 Así que se resuelve fácilmente pulsando S de control, o ir a 281 00:11:31,520 --> 00:11:33,450 Archivo, Guardar, como en la mayoría de los programas. 282 00:11:33,450 --> 00:11:36,360 Déjame aquí, borrar la pantalla, ejecute de nuevo. 283 00:11:36,360 --> 00:11:37,960 Y todavía hay un error. 284 00:11:37,960 --> 00:11:41,618 Entonces, ¿qué está pasando - 285 00:11:41,618 --> 00:11:42,980 AUDIENCIA: Usted no compila. 286 00:11:42,980 --> 00:11:44,040 DAVID J. MALAN: Ah, bueno. 287 00:11:44,040 --> 00:11:45,010 Yo no lo compila. 288 00:11:45,010 --> 00:11:47,250 Como un idiota, yo estoy mirando el código para ver qué pasa. 289 00:11:47,250 --> 00:11:51,275 Así clang buggy1.c, ahora a.out. 290 00:11:51,275 --> 00:11:52,640 Y ¡uf, salvada. 291 00:11:52,640 --> 00:11:55,090 >> Así que parece un poco feo porque no hay nueva línea 292 00:11:55,090 --> 00:11:55,970 en cualquier parte del programa. 293 00:11:55,970 --> 00:11:57,390 Pero, de nuevo, eso es sólo un detalle estético. 294 00:11:57,390 --> 00:11:59,430 Y por lo menos si contamos los que fuera, deberíamos 295 00:11:59,430 --> 00:12:01,160 10 Ahora vemos de tales estrellas. 296 00:12:01,160 --> 00:12:03,260 Bueno, ¿qué pasa con este segundo calentamiento ejemplo? 297 00:12:03,260 --> 00:12:07,750 Así que en buggy2, sostengo que esta versión también se imprimirá 298 00:12:07,750 --> 00:12:10,110 10 estrellas, una por línea. 299 00:12:10,110 --> 00:12:12,340 Así que esta vez, tengo un carácter de nueva línea, sólo para hacer 300 00:12:12,340 --> 00:12:13,520 las cosas un poco más bonito. 301 00:12:13,520 --> 00:12:15,410 Pero en lugar de lo que me pasa es lo siguiente. 302 00:12:15,410 --> 00:12:19,590 Así que permítanme hacer buggy2.c clang, Intro. 303 00:12:19,590 --> 00:12:21,790 Ahora está de nuevo llamado a.out. 304 00:12:21,790 --> 00:12:23,130 Intro. 305 00:12:23,130 --> 00:12:26,900 Sólo veo una nueva línea, sólo la nueva línea último que 306 00:12:26,900 --> 00:12:29,370 mueve mi sistema a la línea siguiente. 307 00:12:29,370 --> 00:12:32,660 Y sin embargo, es claro que yo he estado imprimiendo *, entonces una nueva línea, 308 00:12:32,660 --> 00:12:33,990 *, Entonces una nueva línea. 309 00:12:33,990 --> 00:12:35,490 Pero ¿cuál es el error aquí? 310 00:12:35,490 --> 00:12:35,974 ¿Sí? 311 00:12:35,974 --> 00:12:37,224 AUDIENCIA: [inaudible]. 312 00:12:39,850 --> 00:12:40,470 >> DAVID J. MALAN: Exactamente. 313 00:12:40,470 --> 00:12:44,110 Así que a diferencia de otros lenguajes, como Python, donde sangría 314 00:12:44,110 --> 00:12:46,030 en realidad tiene un significado funcional, en un 315 00:12:46,030 --> 00:12:47,150 lenguaje como C - 316 00:12:47,150 --> 00:12:49,140 como veremos, PHP, JavaScript - 317 00:12:49,140 --> 00:12:51,940 el sangrado es realmente sólo para beneficio de los seres humanos. 318 00:12:51,940 --> 00:12:55,690 Así que el hecho de que he sangrado línea 16 y 17 se ve muy bien, 319 00:12:55,690 --> 00:12:57,530 pero no tiene ningún significado funcional aquí. 320 00:12:57,530 --> 00:13:00,700 Si quiero a las dos líneas se ejecutan como parte de la de 321 00:13:00,700 --> 00:13:05,140 bucle, entonces tengo que encerrar entre llaves al hacer esto. 322 00:13:05,140 --> 00:13:08,540 Sólo se puede cortar esa esquina y omita las llaves si 323 00:13:08,540 --> 00:13:10,036 ¿cuál es el caso? 324 00:13:10,036 --> 00:13:10,410 PÚBLICO: Una sola línea. 325 00:13:10,410 --> 00:13:11,130 DAVID J. MALAN: Sólo una línea. 326 00:13:11,130 --> 00:13:15,280 Así que eso es sólo una especie de un tipo bonito detalle de sintaxis, con lo que 327 00:13:15,280 --> 00:13:17,900 que no pierdas el tiempo escribiendo tres líneas, dos de las cuales son 328 00:13:17,900 --> 00:13:20,040 llaves, sólo para escribir una sola línea de código. 329 00:13:20,040 --> 00:13:21,650 Pero si usted tiene dos o más líneas, 330 00:13:21,650 --> 00:13:22,860 en realidad hay que hacer esto. 331 00:13:22,860 --> 00:13:24,210 >> Así que ahora me deja guardar esto. 332 00:13:24,210 --> 00:13:27,140 Déjenme seguir adelante y volver a ejecutar Clang. 333 00:13:27,140 --> 00:13:31,375 Entonces déjame volver a ejecutar a.out, y ahora los puedo obtener uno por línea. 334 00:13:31,375 --> 00:13:33,670 Ahora, de nuevo a.out es una especie de nombre tonto para un programa. 335 00:13:33,670 --> 00:13:37,500 ¿Cómo puedo saber en realidad Clang a darme un nombre de archivo 336 00:13:37,500 --> 00:13:39,820 eso es más fácil de usar, como buggy2 sí mismo? 337 00:13:43,200 --> 00:13:44,466 Un poco más claramente? 338 00:13:44,466 --> 00:13:45,220 AUDIENCIA: [inaudible]. 339 00:13:45,220 --> 00:13:47,810 DAVID J. MALAN: OK, así que en realidad puede tener el mismo 340 00:13:47,810 --> 00:13:51,000 de fácil acceso directo y escribir simplemente hacer buggy2. 341 00:13:51,000 --> 00:13:53,840 No se especifica. C en este caso, y pulse Enter. 342 00:13:53,840 --> 00:13:58,530 Y lo que hace es hacer que compila buggy2.c para mí por 343 00:13:58,530 --> 00:14:00,260 pidiendo Clang para hacerlo. 344 00:14:00,260 --> 00:14:05,100 En concreto, se llama Clang, se ejecuta utilizando Clang manera más 345 00:14:05,100 --> 00:14:08,540 argumentos de línea de comandos o interruptores de lo que realmente necesitan. 346 00:14:08,540 --> 00:14:11,270 Con el tiempo, vamos a volver a lo que todos estos diversos 347 00:14:11,270 --> 00:14:13,810 crípticas expresiones con guiones significa. 348 00:14:13,810 --> 00:14:16,910 Pero por ahora, eso es sólo me ahorro la molestia de 349 00:14:16,910 --> 00:14:19,600 tener que recordar y tener que escribir todos los 350 00:14:19,600 --> 00:14:21,150 varias expresiones separadas por guiones. 351 00:14:21,150 --> 00:14:23,240 Y la ventaja de que en última instancia es 352 00:14:23,240 --> 00:14:25,900 que ahora tengo buggy2. 353 00:14:25,900 --> 00:14:27,480 Si yo quiero hacer esto de forma manual, sin embargo, me 354 00:14:27,480 --> 00:14:28,775 en su lugar puede hacer esto - 355 00:14:28,775 --> 00:14:34,110 clang-o buggy2 y luego buggy2.c. 356 00:14:34,110 --> 00:14:37,980 Y del mismo modo que me dará un archivo llamado buggy2. 357 00:14:37,980 --> 00:14:39,710 >> Así que en resumen, Clang es el compilador. 358 00:14:39,710 --> 00:14:43,080 Hacer es sólo una herramienta de fácil uso que vamos a utilizar más 359 00:14:43,080 --> 00:14:44,420 y más, ya que sólo empieza a 360 00:14:44,420 --> 00:14:47,330 simplificar las cosas para nosotros. 361 00:14:47,330 --> 00:14:49,430 Y volvemos 0, por último. 362 00:14:49,430 --> 00:14:51,890 Por ahora, porque sí, pero vamos a empezar a burlarse de esa parte 363 00:14:51,890 --> 00:14:52,930 hoy y el miércoles. 364 00:14:52,930 --> 00:14:55,560 ¿Tiene preguntas sobre todo esto? 365 00:14:55,560 --> 00:14:56,450 ¿Sí? 366 00:14:56,450 --> 00:14:58,234 AUDIENCIA: [inaudible] 367 00:14:58,234 --> 00:15:00,020 ls entre comillas allí? 368 00:15:00,020 --> 00:15:01,710 DAVID J. MALAN: OK. 369 00:15:01,710 --> 00:15:05,880 Cuando ls escritas entre comillas, que me estaba haciendo un poco de magia 370 00:15:05,880 --> 00:15:07,160 detrás de las escenas para corregir un error. 371 00:15:07,160 --> 00:15:09,370 Se me olvidaba, como lo hemos estado diciendo a muchos de ustedes en la 372 00:15:09,370 --> 00:15:11,600 foros de discusión, que se puede hacer - 373 00:15:11,600 --> 00:15:17,220 vamos a hacer esto ahora - sudo yum-y update appliance50. 374 00:15:17,220 --> 00:15:19,790 ¡Vaya, que eso está bien escrito. 375 00:15:19,790 --> 00:15:23,240 Así el aparato es como un sistema operativo. 376 00:15:23,240 --> 00:15:25,650 Se está ejecutando el sistema operativo llamado Fedora. 377 00:15:25,650 --> 00:15:27,450 Y ahora, debido a mi conexión a Internet lenta, no tengo 378 00:15:27,450 --> 00:15:28,260 realmente una manguera. 379 00:15:28,260 --> 00:15:31,620 Entonces, ejecutar yum update sudo, como ya te digo que hagas en la 380 00:15:31,620 --> 00:15:34,080 conjunto de problemas, esencialmente gusta correr actualizaciones automáticas 381 00:15:34,080 --> 00:15:35,420 en Mac OS o Windows. 382 00:15:35,420 --> 00:15:37,280 Y la razón de la ejecución de este en el comienzo mismo de la 383 00:15:37,280 --> 00:15:39,640 conjunto de problemas se debe a que cuando creamos el aparato, me 384 00:15:39,640 --> 00:15:42,480 en mal estado, y accidentalmente introducido todos los programas buscan 385 00:15:42,480 --> 00:15:45,210 negro en una pantalla en negro, por lo que usted no los está viendo 386 00:15:45,210 --> 00:15:45,860 de forma predeterminada. 387 00:15:45,860 --> 00:15:48,020 Pero la última versión del aparato corrige esto. 388 00:15:48,020 --> 00:15:50,500 Y voy a arreglar eso durante las vacaciones una vez que tenga Internet 389 00:15:50,500 --> 00:15:51,280 conectividad. 390 00:15:51,280 --> 00:15:54,630 >> Así que las citas sólo se esconde mi error, muy discretamente, 391 00:15:54,630 --> 00:15:55,730 al parecer. 392 00:15:55,730 --> 00:15:56,980 Otras preguntas? 393 00:15:59,750 --> 00:16:00,668 ¿Sí? 394 00:16:00,668 --> 00:16:02,012 PÚBLICO: ¿De dónde viene hacer vino? 395 00:16:02,012 --> 00:16:03,810 [Inaudible] 396 00:16:03,810 --> 00:16:04,280 DAVID J. MALAN: Buena pregunta. 397 00:16:04,280 --> 00:16:05,460 ¿Dónde hacer vino? 398 00:16:05,460 --> 00:16:09,390 Se trata de un programa de Linux que ha existido durante muchos años, mucho 399 00:16:09,390 --> 00:16:10,570 antes CS50. 400 00:16:10,570 --> 00:16:12,930 Y viene con un sistema operativo como Fedora. 401 00:16:12,930 --> 00:16:14,830 No viene de la biblioteca CS50. 402 00:16:14,830 --> 00:16:17,560 De hecho, las únicas cosas que vienen de la biblioteca CS50 403 00:16:17,560 --> 00:16:20,470 hasta ahora, lo que hemos visto, son GetString, getInt, todos 404 00:16:20,470 --> 00:16:25,550 Obtener los funciones, y la cadena de palabras, y en cierta 405 00:16:25,550 --> 00:16:26,575 extensión, la palabra bool. 406 00:16:26,575 --> 00:16:29,180 Pero vamos a molestar que aparte cuando nos sumergimos en el CS50 407 00:16:29,180 --> 00:16:30,580 aparato en sí. 408 00:16:30,580 --> 00:16:32,820 >> Así que sí, una pregunta más aquí. 409 00:16:32,820 --> 00:16:36,636 PÚBLICO: Cuando usted dijo y luego hacer buggy, ¿cómo funciona el 410 00:16:36,636 --> 00:16:39,980 equipo sabe [inaudible]? 411 00:16:39,980 --> 00:16:40,520 DAVID J. MALAN: Buena pregunta. 412 00:16:40,520 --> 00:16:43,830 Así que cuando usted acaba de hacer ejecutar o hacer buggy1 buggy2, cómo 413 00:16:43,830 --> 00:16:45,220 hace saber? 414 00:16:45,220 --> 00:16:49,900 Así que por defecto, si escribe buggy1 hacer, hacer looks para una 415 00:16:49,900 --> 00:16:52,330 archivo llamado buggy1.c. 416 00:16:52,330 --> 00:16:55,570 Y luego ejecuta los comandos Clang apropiadas, 417 00:16:55,570 --> 00:17:00,380 así ignorando el fichero de salida por defecto llamado a.out. 418 00:17:00,380 --> 00:17:03,670 De hecho, si nos fijamos en lo que hacen, lo que - 419 00:17:03,670 --> 00:17:04,839 vamos a salir de esta. 420 00:17:04,839 --> 00:17:09,530 Si nos fijamos en lo que hacen en realidad estaba haciendo, hacer buggy2, 421 00:17:09,530 --> 00:17:10,470 ya está actualizado. 422 00:17:10,470 --> 00:17:13,020 Así que me quite el comando rm, la 423 00:17:13,020 --> 00:17:14,319 programa que he escrito antes. 424 00:17:14,319 --> 00:17:17,319 Escribiendo Y-E-S para confirmar que desea eliminarlo. 425 00:17:17,319 --> 00:17:20,480 Si ahora hacen, observe que en esta línea muy larga, 426 00:17:20,480 --> 00:17:22,980 hay esta última cosa que aquí,-o buggy2. 427 00:17:22,980 --> 00:17:26,959 Todos cometemos está haciendo es pasar ese argumento, por así decirlo, a 428 00:17:26,959 --> 00:17:29,665 Clang, de modo que no tengo que escribirlo yo mismo. 429 00:17:29,665 --> 00:17:32,660 >> Muy bien, así que un par de rápida administrativo 430 00:17:32,660 --> 00:17:33,470 anuncios. 431 00:17:33,470 --> 00:17:36,940 Así, por secciones, que comenzó oficialmente el próximo 432 00:17:36,940 --> 00:17:38,970 Domingo, usted siempre querrá traer, si 433 00:17:38,970 --> 00:17:40,120 usted tiene uno, un ordenador portátil. 434 00:17:40,120 --> 00:17:42,570 Si usted no tiene una computadora portátil, llegan a mí por 435 00:17:42,570 --> 00:17:43,580 dejarme un correo electrónico. 436 00:17:43,580 --> 00:17:44,810 Y vamos a averiguar un flujo de trabajo. 437 00:17:44,810 --> 00:17:47,100 Lo que generalmente encontrará en el punto es que son parte 438 00:17:47,100 --> 00:17:48,770 parte conceptual y práctico. 439 00:17:48,770 --> 00:17:52,190 En especial, vamos a usar la sección de preguntas, parte de 440 00:17:52,190 --> 00:17:54,110 la semana del conjunto de problemas, caminar a través de algunos de los 441 00:17:54,110 --> 00:17:55,820 material conceptual de la conferencia. 442 00:17:55,820 --> 00:17:57,480 Y eso es todo en el conjunto de problemas actual. 443 00:17:57,480 --> 00:18:00,010 Y también vamos a profundizar en algunas de las actividades con manos, a veces 444 00:18:00,010 --> 00:18:02,190 de los cuales se requiere que se presentará, a veces de 445 00:18:02,190 --> 00:18:02,830 cuáles no. 446 00:18:02,830 --> 00:18:04,630 Por ejemplo, esta primera semana, que están destinados sólo como un 447 00:18:04,630 --> 00:18:05,780 ejercicio de calentamiento. 448 00:18:05,780 --> 00:18:07,800 Y te darás cuenta de que esos problemas son realmente sólo eso. 449 00:18:07,800 --> 00:18:10,220 Están destinados a ser bastante pequeña, pero no necesariamente 450 00:18:10,220 --> 00:18:13,100 programas triviales para escribir, que no son necesariamente 451 00:18:13,100 --> 00:18:16,230 buenas oportunidades interesantes en sí mismas sino que han de 452 00:18:16,230 --> 00:18:19,620 practicar con la sintaxis, con nuevas funciones, en la comodidad de una 453 00:18:19,620 --> 00:18:21,900 sección donde usted tiene algunos de sus compañeros de clase presentan como 454 00:18:21,900 --> 00:18:22,870 así como el TF. 455 00:18:22,870 --> 00:18:26,210 >> ¿Y qué vamos a hacer con el tiempo es utilizar una herramienta llamada CS50 Spaces, 456 00:18:26,210 --> 00:18:28,940 por lo que en lugar de usar el aparato CS50, usted 457 00:18:28,940 --> 00:18:32,450 en lugar de ir a una página web en un navegador, donde podrás 458 00:18:32,450 --> 00:18:35,610 para escribir código en una ventana del navegador en la sección. 459 00:18:35,610 --> 00:18:38,240 Y luego, si te aceptas, tu compañero de enseñanza se puede mostrar 460 00:18:38,240 --> 00:18:40,980 sea ​​lo que sea que estás escribiendo en la pantalla en el navegador 461 00:18:40,980 --> 00:18:43,930 ventana en la parte delantera de la clase, ya sea anónima o 462 00:18:43,930 --> 00:18:47,250 públicamente, para que él o ella puede caminar a través de 463 00:18:47,250 --> 00:18:50,080 sus compañeros de clase lo que has hecho bien, lo que no le fue bien. 464 00:18:50,080 --> 00:18:52,750 Y de nuevo, puede estar seguro de todo esto puede ser muy bien anónimos. 465 00:18:52,750 --> 00:18:54,410 Pero será una buena oportunidad para mucho más 466 00:18:54,410 --> 00:18:56,810 interactividad que permite algo así como conferencias. 467 00:18:56,810 --> 00:18:58,910 >> Mientras tanto, vamos a tener estas cosas llamadas súper 468 00:18:58,910 --> 00:19:01,610 secciones, que son opcionales, pero están abiertos a todo el mundo en 469 00:19:01,610 --> 00:19:04,030 la clase, de modo que usted puede hacer esto de manera más colectiva para 470 00:19:04,030 --> 00:19:05,190 establecer un problema. 471 00:19:05,190 --> 00:19:06,010 Aquí está el horario. 472 00:19:06,010 --> 00:19:08,870 Esto también se publica en la página web en cs50.net. 473 00:19:08,870 --> 00:19:10,850 Tenga en cuenta que habrá un pirata informático específico 474 00:19:10,850 --> 00:19:12,430 una mañana por la tarde. 475 00:19:12,430 --> 00:19:15,460 Y vamos a filmar uno hoy y mañana uno y publicar los 476 00:19:15,460 --> 00:19:16,720 en línea dentro de las 24 horas. 477 00:19:16,720 --> 00:19:19,370 Así que si usted no puede hacer ninguna de estas ocasiones, a preocuparse. 478 00:19:19,370 --> 00:19:22,720 Y de nuevo, el programa está en línea en cs50.net. 479 00:19:22,720 --> 00:19:25,350 >> En términos de seccionamiento sí mismo, usted debió haber recibido un 480 00:19:25,350 --> 00:19:28,520 correo electrónico con instrucciones para ir a la página de inicio del curso para encontrar 481 00:19:28,520 --> 00:19:29,610 fuera de su sección. 482 00:19:29,610 --> 00:19:32,890 Si la vida ha cambiado y necesita cambiar su sección, 483 00:19:32,890 --> 00:19:33,560 no es un problema. 484 00:19:33,560 --> 00:19:37,900 Regresa a la misma URL, cs50.net/section, singular, 485 00:19:37,900 --> 00:19:40,090 y usted llene el formulario similar, para que pueda 486 00:19:40,090 --> 00:19:41,260 que nos den sus preferencias. 487 00:19:41,260 --> 00:19:43,360 Y vamos a seguir a finales de semana en cuanto a lo que podemos 488 00:19:43,360 --> 00:19:44,240 acomodar. 489 00:19:44,240 --> 00:19:49,530 La semana pasada, recordamos que hemos propuesto utilizar CS50 Discutir, 490 00:19:49,530 --> 00:19:51,370 el curso de herramientas de discusión en clase. 491 00:19:51,370 --> 00:19:53,680 Así que tuvimos 40 preguntas que se formularon y 492 00:19:53,680 --> 00:19:54,720 respondió durante la conferencia. 493 00:19:54,720 --> 00:19:56,280 Así que parece que ha funcionado bien, así que voy a seguir 494 00:19:56,280 --> 00:19:57,180 tratando de hacer esto. 495 00:19:57,180 --> 00:19:59,600 Si, durante la conferencia, no sólo se sienten cómodos fondos 496 00:19:59,600 --> 00:20:00,780 la mano, no es un problema. 497 00:20:00,780 --> 00:20:04,640 Ir a cs50.net/discuss, puesto allí, y una de nuestras enseñanzas 498 00:20:04,640 --> 00:20:07,270 compañeros o bien contestar electrónicamente o aumentar su 499 00:20:07,270 --> 00:20:10,620 mano en su nombre anónima a pedir, en función 500 00:20:10,620 --> 00:20:12,470 de la naturaleza de la pregunta. 501 00:20:12,470 --> 00:20:15,000 Y en términos de información, por lo general los conjuntos de procesadores será 502 00:20:15,000 --> 00:20:16,760 devuelto dentro de una semana. 503 00:20:16,760 --> 00:20:19,080 Debido a que toma un poco de tiempo para las secciones de lograr 504 00:20:19,080 --> 00:20:22,430 equilibrio, el conjunto de procesadores primero, 0 y 1, será un poco 505 00:20:22,430 --> 00:20:24,130 retrasado ya que las cosas se calmen. 506 00:20:24,130 --> 00:20:27,130 Pero estad atentos para que en las próximas semanas. 507 00:20:27,130 --> 00:20:29,750 >> Muy bien, así que me puse el grave 508 00:20:29,750 --> 00:20:31,040 voz por un momento. 509 00:20:31,040 --> 00:20:32,690 Así que este es en realidad un clima interesante para estar 510 00:20:32,690 --> 00:20:35,210 teniendo esta discusión, lo que con todas las otras cosas 511 00:20:35,210 --> 00:20:37,310 pasando por la misma campus correspondiente. 512 00:20:37,310 --> 00:20:40,220 Pero CS50 ciertamente ha tenido su historia de este particular 513 00:20:40,220 --> 00:20:43,360 tema, en tanto como todos los años, este curso, para muchos 514 00:20:43,360 --> 00:20:46,910 años, ad-juntas aproximadamente el 3% de la clase. 515 00:20:46,910 --> 00:20:51,620 Este último año, el 2011, CS50 Ad-Entablado 35 estudiantes. 516 00:20:51,620 --> 00:20:54,120 Esto no es, creo, debido a la falta de claridad. 517 00:20:54,120 --> 00:20:56,760 Darse cuenta de que en el plan de estudios del curso, hay una página de 518 00:20:56,760 --> 00:20:59,020 declaración explicando que las líneas son. 519 00:20:59,020 --> 00:21:01,350 Esa misma instrucción se repite en cada uno de los 520 00:21:01,350 --> 00:21:03,070 boletines de problemas en la página uno. 521 00:21:03,070 --> 00:21:05,760 >> Así que hablar de esto hoy realmente sólo para hacer 522 00:21:05,760 --> 00:21:07,030 personas conscientes de esto. 523 00:21:07,030 --> 00:21:08,080 Y hemos intentado cosas diferentes. 524 00:21:08,080 --> 00:21:10,630 Y lo que yo pensaba que íbamos a hacer hoy es simplemente tomar un momento para 525 00:21:10,630 --> 00:21:13,830 realmente se ven en algunos de los casos pasados ​​que han surgido. 526 00:21:13,830 --> 00:21:16,160 En lugar de mantener a estos pequeños secretos sucios que, en realidad 527 00:21:16,160 --> 00:21:19,170 señalar lo que han hecho y cómo se ha detectado 528 00:21:19,170 --> 00:21:21,630 y realmente lo que la motivación principal es para 529 00:21:21,630 --> 00:21:23,950 teniendo esta conversación. 530 00:21:23,950 --> 00:21:27,060 Así que dicho esto, la línea esencialmente es esto - 531 00:21:27,060 --> 00:21:29,200 por el plan de estudios, de nada, se le anima a 532 00:21:29,200 --> 00:21:30,210 hablar con los compañeros de clase. 533 00:21:30,210 --> 00:21:31,910 Ese es todo el propósito de contar con estos colaborativo 534 00:21:31,910 --> 00:21:34,470 las horas de oficina en Annenberg y personas alentadoras para el 535 00:21:34,470 --> 00:21:35,755 final del proyecto para trabajar juntos. 536 00:21:35,755 --> 00:21:38,590 Sin embargo, la línea se dibuja cuando llegue el momento de escribir realmente 537 00:21:38,590 --> 00:21:39,790 su solución final. 538 00:21:39,790 --> 00:21:42,590 Al hablar en Inglés, totalmente bien, hablando en pseudo-código, 539 00:21:42,590 --> 00:21:43,400 totalmente bien. 540 00:21:43,400 --> 00:21:46,340 Envío por correo electrónico a un compañero de su conjunto de procesadores, permitiendo que se vean más 541 00:21:46,340 --> 00:21:48,610 la pantalla como las manos siguen escribiendo, 542 00:21:48,610 --> 00:21:50,110 sobre la línea también. 543 00:21:50,110 --> 00:21:52,250 Mire al plan de estudios de las líneas particulares. 544 00:21:52,250 --> 00:21:55,850 >> Pero sólo para pintar una imagen de cómo esto es por desgracia un 545 00:21:55,850 --> 00:21:58,370 realidad, se dan cuenta de que hay sitios web por ahí que 546 00:21:58,370 --> 00:22:01,490 tienen soluciones de esta clase y muchas otras clases. 547 00:22:01,490 --> 00:22:04,940 El hecho de que usted o un 3% de ustedes saben que esto existe 548 00:22:04,940 --> 00:22:07,240 significa que sabemos que esto existe. 549 00:22:07,240 --> 00:22:09,340 El hecho de que hay sitios como este en el que 550 00:22:09,340 --> 00:22:11,540 puede pagar a alguien para hacer realidad sus boletines de problemas - se trataba de 551 00:22:11,540 --> 00:22:13,450 un caso real que ocurrió el año pasado. 552 00:22:13,450 --> 00:22:15,790 Se trata de un sitio web llamado odesk.com. 553 00:22:15,790 --> 00:22:20,090 Y Tim era el nombre de la persona que estaba aquí la publicación en 554 00:22:20,090 --> 00:22:24,580 Este sitio web y le pidió a alguien que haga su pset 7 en 555 00:22:24,580 --> 00:22:25,570 este caso particular. 556 00:22:25,570 --> 00:22:28,350 Bueno, es muy odesk.com Google-ble, y estamos muy 557 00:22:28,350 --> 00:22:30,310 muy bueno en buscar en Google. 558 00:22:30,310 --> 00:22:32,360 Aquí, también, hay sitios - y este es bastante 559 00:22:32,360 --> 00:22:34,234 atroz, francamente. 560 00:22:34,234 --> 00:22:38,050 [Risas] 561 00:22:38,050 --> 00:22:39,610 DAVID J. MALAN: Lo más gracioso de este sitio es que si 562 00:22:39,610 --> 00:22:41,970 leer la página Acerca de, hablan de su corporativo 563 00:22:41,970 --> 00:22:44,390 servicio de la cultura y cómo es su cliente número uno 564 00:22:44,390 --> 00:22:46,190 prioridad, para asegurarse de que sus asignaciones obtener 565 00:22:46,190 --> 00:22:47,890 entregada a tiempo. 566 00:22:47,890 --> 00:22:50,580 >> Pero en serio, una vez más, el hecho de que estos sitios 567 00:22:50,580 --> 00:22:52,910 existen, nos damos cuenta, también, son conscientes de 568 00:22:52,910 --> 00:22:53,730 este tipo de sitios. 569 00:22:53,730 --> 00:22:55,890 Y para darle un sentido a lo que constituye por regla general, 570 00:22:55,890 --> 00:22:58,570 toma, por lo general no tienen grandes escándalos donde la gente 571 00:22:58,570 --> 00:23:01,080 están colaborando en cualquier tipo de forma masiva, sino más bien 572 00:23:01,080 --> 00:23:04,540 es estos momentos nocturnos de debilidad, donde usted tiene por lo 573 00:23:04,540 --> 00:23:07,550 mucho por hacer, son las 4:00 AM, estás agotado, y 574 00:23:07,550 --> 00:23:09,770 piensa a sí mismo, bueno, déjame echar un vistazo a mi 575 00:23:09,770 --> 00:23:11,770 compañero de cuarto o código de mi amigo o similares. 576 00:23:11,770 --> 00:23:14,800 Y las manifestaciones de esta desgracia involucrar Estudiante 577 00:23:14,800 --> 00:23:17,640 A la presentación de algo como esto y presentación de B Estudiante 578 00:23:17,640 --> 00:23:20,370 algo como esto, que por cierto, en un ordenador 579 00:23:20,370 --> 00:23:23,830 clase de ciencias, es muy fácil para los científicos de la computación 580 00:23:23,830 --> 00:23:25,690 para detectar con software. 581 00:23:25,690 --> 00:23:28,410 Este es otro paradigma común, donde usted tiene una especie de 582 00:23:28,410 --> 00:23:31,010 estado trabajando junto a alguien, tal vez hablando en 583 00:23:31,010 --> 00:23:32,360 Inglés, muy bien, pseudocódigo. 584 00:23:32,360 --> 00:23:35,080 Pero entonces llega el momento de presentar efectivamente, los conjuntos de procesadores y 585 00:23:35,080 --> 00:23:37,910 sólo se intercambia a través de correo electrónico o Dropbox o similares. 586 00:23:37,910 --> 00:23:41,120 Sin embargo, en un intento de hacer que sea menos evidente que esta es 587 00:23:41,120 --> 00:23:44,830 lo que ha ocurrido, entonces esto es lo que está sometido. 588 00:23:44,830 --> 00:23:47,880 Esto, también, no se dispara hasta bien escritos piezas de 589 00:23:47,880 --> 00:23:50,360 software que tenemos para detectar realmente 590 00:23:50,360 --> 00:23:51,280 este tipo de cosas. 591 00:23:51,280 --> 00:23:53,760 Y de hecho lo que hacemos es un software de gestión que compara todos 592 00:23:53,760 --> 00:23:55,540 este año las presentaciones contra todo el año pasado 593 00:23:55,540 --> 00:23:57,380 presentaciones, contra todo lo que encontramos en la 594 00:23:57,380 --> 00:24:00,060 Internet, en contra de todos los sitios web de empleo que hay. 595 00:24:00,060 --> 00:24:01,710 Es todo muy automatizado. 596 00:24:01,710 --> 00:24:05,665 Y así lo hacemos realmente para ser justos gran al 97% que 597 00:24:05,665 --> 00:24:07,760 realmente están trabajando fuera de sus asnos en este y en otros 598 00:24:07,760 --> 00:24:11,530 clases y poniendo en todo ese esfuerzo para que el trabajo 599 00:24:11,530 --> 00:24:13,030 en última instancia, presentar es el suyo. 600 00:24:13,030 --> 00:24:14,220 Y puedo continuar durante mucho tiempo. 601 00:24:14,220 --> 00:24:16,030 >> Estos son sólo un puñado de casos del año pasado. 602 00:24:16,030 --> 00:24:19,350 Algunos estudiantes presentaron estos archivos de forma idéntica para pset 2, 603 00:24:19,350 --> 00:24:22,460 pset 3, conjunto de procesadores 4, 5 pset, pset 6, pset 9. 604 00:24:22,460 --> 00:24:26,360 En este caso, esta prueba era 0 y en el año pasado, donde dos 605 00:24:26,360 --> 00:24:29,570 estudiantes presentaron esta frase idéntica entre muchos 606 00:24:29,570 --> 00:24:32,210 otros, "La solicitud de tipo -" punto, punto, punto. 607 00:24:32,210 --> 00:24:34,530 Así que, incluso en una clase de 600 hicimos detectar este 608 00:24:34,530 --> 00:24:36,310 presentado en concursos. 609 00:24:36,310 --> 00:24:39,080 Así que en resumen, esto - francamente, no me gusta tener este tipo de 610 00:24:39,080 --> 00:24:41,300 conversación - pero esto es realmente un esfuerzo deliberado 611 00:24:41,300 --> 00:24:43,540 este año para tratar de reducir ese número. 612 00:24:43,540 --> 00:24:45,650 Porque a pesar de que dicen este tipo de cosas cada 613 00:24:45,650 --> 00:24:48,100 año, creo que la realidad de haber habitado en él durante unos pocos 614 00:24:48,100 --> 00:24:50,800 segundos más de lo normal y en realidad sólo señalando 615 00:24:50,800 --> 00:24:53,600 que lo que puede parecer, eh, no es una gran cosa, por lo menos 616 00:24:53,600 --> 00:24:56,390 piensen en este momento en particular, tanto para ser justos con 617 00:24:56,390 --> 00:25:00,100 ti mismo y de tus compañeros de clase aquí. 618 00:25:00,100 --> 00:25:02,480 Así que si alguna vez tiene alguna pregunta en cuanto a donde la línea 619 00:25:02,480 --> 00:25:04,290 Es decir, por favor, sólo llegar a mí personalmente. 620 00:25:04,290 --> 00:25:07,190 Pero la respuesta es siempre, completamente estresado en el 621 00:25:07,190 --> 00:25:09,090 último minuto, dinero en efectivo en un día de retraso. 622 00:25:09,090 --> 00:25:11,080 O si es una cuestión de no tener días de retraso, 623 00:25:11,080 --> 00:25:12,900 Honestamente, correo electrónico personal. 624 00:25:12,900 --> 00:25:14,110 Ya se nos ocurrirá algo. 625 00:25:14,110 --> 00:25:17,480 Por favor, no pongas tu tiempo aquí en Harvard en riesgo. 626 00:25:17,480 --> 00:25:18,570 >> Ahora, pensé que debería aligerar el estado de ánimo, por lo que 627 00:25:18,570 --> 00:25:20,264 incluido esto como la siguiente diapositiva. 628 00:25:20,264 --> 00:25:22,770 [Risas] 629 00:25:22,770 --> 00:25:23,630 DAVID J. MALAN: Este sitio web fue genial. 630 00:25:23,630 --> 00:25:24,820 De hecho, me puse un poco distraído. 631 00:25:24,820 --> 00:25:26,330 No es éste. 632 00:25:26,330 --> 00:25:29,590 Y este era increíble. 633 00:25:29,590 --> 00:25:35,190 Bueno, por lo que pensar en gatito tarde en la noche cuando haga 634 00:25:35,190 --> 00:25:36,040 esas decisiones. 635 00:25:36,040 --> 00:25:40,110 Todas las cosas bien, así que de nuevo a más diversión y menos graves, como 636 00:25:40,110 --> 00:25:40,780 condiciones. 637 00:25:40,780 --> 00:25:43,900 >> Muy bien, así que hablamos brevemente acerca de estos. 638 00:25:43,900 --> 00:25:46,080 Esto es algo que probablemente es bastante familiar de 639 00:25:46,080 --> 00:25:47,260 el mundo de Scratch. 640 00:25:47,260 --> 00:25:49,860 Y en el mundo de Scratch, tenemos esta necesidad a veces para 641 00:25:49,860 --> 00:25:51,110 ir a hacer bifurcaciones en el camino. 642 00:25:51,110 --> 00:25:54,840 Cualquiera de hacer esto o aquello o esto otro aquí. 643 00:25:54,840 --> 00:25:58,990 Y cuando queremos hacer esto, podemos usar, en C ahora, si esta 644 00:25:58,990 --> 00:26:00,860 else. 645 00:26:00,860 --> 00:26:06,420 Y entonces aquí tenemos expresiones booleanas. 646 00:26:06,420 --> 00:26:09,260 Por ejemplo, las expresiones booleanas aquí, podemos OR 647 00:26:09,260 --> 00:26:12,260 juntos, en el sentido de que tenemos esta condición OR 648 00:26:12,260 --> 00:26:13,200 esa condición. 649 00:26:13,200 --> 00:26:15,100 Podemos y juntos, en el sentido que queremos 650 00:26:15,100 --> 00:26:17,710 comprobar esta condición y siempre que. 651 00:26:17,710 --> 00:26:22,440 Y aquí tenemos una sentencia switch, algo que no es tan 652 00:26:22,440 --> 00:26:26,040 sintácticamente similares a ese tipo de condiciones, pero 653 00:26:26,040 --> 00:26:30,160 nos permite hacer el equivalente a if, else if, else if, else 654 00:26:30,160 --> 00:26:34,990 si, y similares con sólo enumerar caso por caso 655 00:26:34,990 --> 00:26:36,670 por caso por caso. 656 00:26:36,670 --> 00:26:38,370 Así que vimos aquellos última vez. 657 00:26:38,370 --> 00:26:40,430 Y entonces empezamos a tocar en cosas como bucles. 658 00:26:40,430 --> 00:26:42,070 Vimos una de ellas hace un momento. 659 00:26:42,070 --> 00:26:44,180 Pero no son estas construcciones de bucles otros. 660 00:26:44,180 --> 00:26:46,370 >> Por ejemplo, este de aquí. 661 00:26:46,370 --> 00:26:50,140 Así while (condición), hacer esto una y otra vez. 662 00:26:50,140 --> 00:26:53,070 Así que básicamente, lo que parece ser diferente entre este 663 00:26:53,070 --> 00:26:55,760 bucle for y el bucle mientras aquí? 664 00:27:00,810 --> 00:27:05,045 Este bucle for y este bucle while. 665 00:27:05,045 --> 00:27:07,840 ¿Sí? 666 00:27:07,840 --> 00:27:08,800 ¿Qué es eso? 667 00:27:08,800 --> 00:27:10,050 AUDIENCIA: [inaudible]. 668 00:27:14,632 --> 00:27:15,120 DAVID J. MALAN: Good. 669 00:27:15,120 --> 00:27:17,130 Así, mientras que en la condición de bucle, hay claramente 670 00:27:17,130 --> 00:27:17,940 más sintaxis. 671 00:27:17,940 --> 00:27:20,560 Hay una inicialización, hay una actualización. 672 00:27:20,560 --> 00:27:23,820 En un bucle while, no sólo por esta condición. 673 00:27:23,820 --> 00:27:26,630 Así que parece que es un poco recortada contra el de 674 00:27:26,630 --> 00:27:28,770 bucle, lo que significa que si queremos tener variables y queremos 675 00:27:28,770 --> 00:27:30,800 tener incremento, en realidad tenemos que 676 00:27:30,800 --> 00:27:32,500 hacer esto nosotros mismos. 677 00:27:32,500 --> 00:27:34,420 >> Así que permítanme seguir adelante y abrir gedit. 678 00:27:34,420 --> 00:27:36,320 Permítanme cambiar al aparato. 679 00:27:36,320 --> 00:27:38,110 Y vamos a hacer un ejemplo pequeño programa que 680 00:27:38,110 --> 00:27:40,550 distingue una de ellas de la otra. 681 00:27:40,550 --> 00:27:42,490 Y en el fondo de mi mente aquí, debo decir una cosa. 682 00:27:42,490 --> 00:27:44,120 Yo específicamente mencionó el nombre Tim. 683 00:27:44,120 --> 00:27:47,740 Tim era en realidad alguien que un estudiante trató de encontrar para hacer 684 00:27:47,740 --> 00:27:48,680 su tarea para ellos. 685 00:27:48,680 --> 00:27:51,280 No teníamos Tim en esa sección en particular. 686 00:27:51,280 --> 00:27:53,690 Así dan cuenta, no sea que yo reveló un estudiante, no era un estudiante. 687 00:27:53,690 --> 00:27:55,720 Era una persona al azar en Internet haciendo cosas 688 00:27:55,720 --> 00:27:57,180 por el año pasado proxy. 689 00:27:57,180 --> 00:27:58,670 Así nos encontramos con que, también. 690 00:27:58,670 --> 00:28:00,630 Así que en este caso aquí, déjame seguir adelante y 691 00:28:00,630 --> 00:28:02,810 abrir un nuevo archivo. 692 00:28:02,810 --> 00:28:04,800 Archivo, Nuevo. 693 00:28:04,800 --> 00:28:06,050 Esto me da una ficha de aquí. 694 00:28:06,050 --> 00:28:09,940 Déjenme seguir adelante y guardarlo como loop.c. 695 00:28:09,940 --> 00:28:11,810 Déjame ir y haga clic en Guardar. 696 00:28:11,810 --> 00:28:15,340 Y luego aquí, vamos a seguir adelante y comenzar a escribir 697 00:28:15,340 --> 00:28:16,605 # Include. 698 00:28:19,116 --> 00:28:20,520 Permítanme zoom in 699 00:28:20,520 --> 00:28:23,410 Ahora vamos a hacer int main (void). 700 00:28:23,410 --> 00:28:30,020 Ahora voy a seguir adelante y hacer for (int i = 0; i < 701 00:28:30,020 --> 00:28:33,480 oh, 10; i + +). 702 00:28:33,480 --> 00:28:36,620 Y ahora voy a seguir adelante y se imprimen de la estrella que me 703 00:28:36,620 --> 00:28:37,890 hicimos antes. 704 00:28:37,890 --> 00:28:39,390 Y luego, al final de este programa, sólo vamos a 705 00:28:39,390 --> 00:28:41,130 imprimir una nueva línea, sólo para que mi mensaje 706 00:28:41,130 --> 00:28:42,470 no se ve todo desordenado. 707 00:28:42,470 --> 00:28:45,170 devuelve 0. 708 00:28:45,170 --> 00:28:47,610 Parece sintácticamente correcta? 709 00:28:47,610 --> 00:28:48,040 Hasta ahora. 710 00:28:48,040 --> 00:28:48,560 Así que vamos a ver. 711 00:28:48,560 --> 00:28:51,290 >> Así que permítanme alejar la imagen, entra en mi ventana de terminal. 712 00:28:51,290 --> 00:28:54,570 Y déjame seguir adelante y ejecutar bucle, porque me llamó esta 713 00:28:54,570 --> 00:28:55,690 Lo loop.c. 714 00:28:55,690 --> 00:28:56,780 Así que loop. 715 00:28:56,780 --> 00:28:57,840 Parece que compile en Aceptar. 716 00:28:57,840 --> 00:29:00,210 Déjame correr bucle, y Enter ahora. 717 00:29:00,210 --> 00:29:01,820 Y parece que se han impreso 10 estrellas. 718 00:29:01,820 --> 00:29:03,780 Así que vamos a convertir esto en un bucle de tiempo y ver qué 719 00:29:03,780 --> 00:29:05,220 tipo de cuestiones que tropezar. 720 00:29:05,220 --> 00:29:11,290 Así que en lugar de esto, déjame entrar aquí y decir mientras que i es 721 00:29:11,290 --> 00:29:12,760 menos de 10 - 722 00:29:12,760 --> 00:29:14,910 me deja tirar del bucle for. 723 00:29:14,910 --> 00:29:17,170 OK, así que tenemos un par de problemas ya. 724 00:29:17,170 --> 00:29:21,110 Así que el estado es el mismo, pero obviamente estoy perdiendo la 725 00:29:21,110 --> 00:29:21,680 inicialización. 726 00:29:21,680 --> 00:29:23,840 Me falta el incremento. 727 00:29:23,840 --> 00:29:28,020 Entonces, ¿qué debería el compilador probablemente me dirá cuando trato de 728 00:29:28,020 --> 00:29:29,170 compilar este programa? 729 00:29:29,170 --> 00:29:29,666 ¿Sí? 730 00:29:29,666 --> 00:29:31,154 AUDIENCIA: [inaudible]. 731 00:29:31,154 --> 00:29:31,650 >> DAVID J. MALAN: Good. 732 00:29:31,650 --> 00:29:34,180 Así que va a decir algo así como no declarado - en este 733 00:29:34,180 --> 00:29:35,280 caso, la variable i. 734 00:29:35,280 --> 00:29:37,980 Y de hecho, el uso de identificador no declarado i. 735 00:29:37,980 --> 00:29:40,960 Y esto está en contraste con lenguajes como PHP y 736 00:29:40,960 --> 00:29:43,120 Python y Ruby, con la que algunos de ustedes podrían estar familiarizados, 737 00:29:43,120 --> 00:29:44,820 donde se puede sólo tipo de inicio con las variables 738 00:29:44,820 --> 00:29:47,420 queramos o no, no tiene que preocuparse de declararlas 739 00:29:47,420 --> 00:29:48,560 siempre explícitamente. 740 00:29:48,560 --> 00:29:51,770 En C y en lenguajes como Java y C + +, tiene que ser 741 00:29:51,770 --> 00:29:53,020 súper explícito. 742 00:29:53,020 --> 00:29:55,760 Y si quieres una variable llamada i, lo que tienes que decirme 743 00:29:55,760 --> 00:29:57,360 ¿qué tipo de variable que es. 744 00:29:57,360 --> 00:29:59,360 Así que vamos a tener que arreglar esto de la siguiente manera. 745 00:29:59,360 --> 00:30:05,510 Voy a tener que ir por aquí y escriba int i; por lo tanto, 746 00:30:05,510 --> 00:30:07,860 He declarado una variable llamada i. 747 00:30:07,860 --> 00:30:09,180 Ahora, me he saltado un paso. 748 00:30:09,180 --> 00:30:11,340 He obviamente no se inicia, pero vamos a ver si en ese 749 00:30:11,340 --> 00:30:13,650 al tope Clang marcas quejarse. 750 00:30:13,650 --> 00:30:15,770 Así que permítanme rehacer este programa. 751 00:30:15,770 --> 00:30:16,770 >> Muy bien, ahora es sólo quejarse 752 00:30:16,770 --> 00:30:17,870 por una razón diferente. 753 00:30:17,870 --> 00:30:21,130 "La variable 'i' no está inicializada cuando se usa aquí". Muy bien, así 754 00:30:21,130 --> 00:30:22,340 eso es bastante explícito. 755 00:30:22,340 --> 00:30:25,510 Inicializado sólo significa igualándola a un valor. 756 00:30:25,510 --> 00:30:30,820 Y no lo he hecho, así que voy a tratar de igual a 0. 757 00:30:30,820 --> 00:30:35,030 Ahora vamos a intentarlo de nuevo y volver a ejecutar Clang. 758 00:30:35,030 --> 00:30:36,140 Compilado este momento. 759 00:30:36,140 --> 00:30:37,210 Y estoy a punto de ejecutarlo. 760 00:30:37,210 --> 00:30:43,120 Pero gran bucle infinito de edad, porque he hecho el 761 00:30:43,120 --> 00:30:45,530 inicialización, he hecho la condición, pero nunca he hecho 762 00:30:45,530 --> 00:30:47,030 cualquier tipo de incremento. 763 00:30:47,030 --> 00:30:48,780 Entonces, ¿cómo puedo hacer la incrementación? 764 00:30:48,780 --> 00:30:51,170 Bueno, en un bucle while, se siente como que voy a tener 765 00:30:51,170 --> 00:30:54,180 hacerlo dentro del bucle, porque al igual que el primero 766 00:30:54,180 --> 00:30:56,570 semana ejemplos de hacer las construcciones de bucles, como con 767 00:30:56,570 --> 00:30:59,040 los calcetines y con la auto-escrutinio, que teníamos que hacer 768 00:30:59,040 --> 00:31:01,550 algo que al final, como ir a la línea siguiente. 769 00:31:01,550 --> 00:31:05,040 ¿Qué pasa si sigo adelante y hacer esto i + + aquí? 770 00:31:05,040 --> 00:31:06,030 Vamos a compilar ni siquiera esto. 771 00:31:06,030 --> 00:31:06,890 Atrápame ya. 772 00:31:06,890 --> 00:31:09,704 ¿Qué pasa aquí? 773 00:31:09,704 --> 00:31:10,690 AUDIENCIA: [inaudible]. 774 00:31:10,690 --> 00:31:11,770 >> DAVID J. MALAN: Así que definitivamente no es int. 775 00:31:11,770 --> 00:31:13,080 Soy yo. 776 00:31:13,080 --> 00:31:15,110 Y las llaves, como antes, 777 00:31:15,110 --> 00:31:16,800 sangría no es suficiente. 778 00:31:16,800 --> 00:31:18,410 Así que ahora tengo esta construcción. 779 00:31:18,410 --> 00:31:21,780 Así, mientras que i es menor que 10, imprima una estrella, 780 00:31:21,780 --> 00:31:23,220 entonces me incrementar. 781 00:31:23,220 --> 00:31:25,680 Y la forma en que un bucle mientras que las obras es que tan pronto como se pulsa el 782 00:31:25,680 --> 00:31:29,630 parte inferior del bucle, que en este caso se ve como la línea 10, 783 00:31:29,630 --> 00:31:32,880 que va a volver a la línea 6, en cuyo momento el 784 00:31:32,880 --> 00:31:34,400 se le examinará de nuevo. 785 00:31:34,400 --> 00:31:37,500 Y si i es todavía inferior a 10, vamos a hacer las líneas 8 y 786 00:31:37,500 --> 00:31:41,250 luego 9, entonces vamos a llegar a 10, y volver a 6, una y otra 787 00:31:41,250 --> 00:31:45,580 una y otra vez y otra vez, siempre que i es menor que 10. 788 00:31:45,580 --> 00:31:47,860 Así que vamos a volver a hacer hacer aquí. 789 00:31:47,860 --> 00:31:48,940 >> Bueno, hemos compilado bien. 790 00:31:48,940 --> 00:31:50,300 Permítanme volver a ejecutar el bucle. 791 00:31:50,300 --> 00:31:52,620 Y ahora lo que realmente parece que funciona. 792 00:31:52,620 --> 00:31:55,100 Así que más y menos aquí? 793 00:31:55,100 --> 00:31:58,910 Bueno, hasta ahora no hay en realidad un conjunto de plo - 794 00:31:58,910 --> 00:31:59,420 tan lindo. 795 00:31:59,420 --> 00:32:01,870 Bueno, eso fue un - ¡ah, eso fue un accidente. 796 00:32:01,870 --> 00:32:05,200 Muy bien, así que vamos a ir de nuevo al bucle for. 797 00:32:05,200 --> 00:32:07,530 Así que para los bucles son agradables porque son súper explícito. 798 00:32:07,530 --> 00:32:09,720 Y aunque son un poco torpe para escribir, es 799 00:32:09,720 --> 00:32:11,500 muy potente y le permite hacer 800 00:32:11,500 --> 00:32:12,980 varias cosas a la vez. 801 00:32:12,980 --> 00:32:16,240 Mientras que los bucles no parecen tener una gran cantidad de valor justo 802 00:32:16,240 --> 00:32:18,500 sin embargo, debido a que se siente solo tenemos que hacer más trabajo. 803 00:32:18,500 --> 00:32:20,670 Tenemos que poner la inicialización hasta aquí, la 804 00:32:20,670 --> 00:32:23,480 Actualiza aquí, y tenemos que recordar que hacer todo eso. 805 00:32:23,480 --> 00:32:26,260 Así que vamos a ver en el tiempo que en realidad prestan ciclos while 806 00:32:26,260 --> 00:32:29,380 sólo a sí mismos diferentes contextos, diferentes datos 807 00:32:29,380 --> 00:32:33,900 estructuras como listas y tablas hash, lo vamos a llegar a 808 00:32:33,900 --> 00:32:34,970 mitad del semestre. 809 00:32:34,970 --> 00:32:37,900 Pero por ahora, sabemos que hay este tercer tipo conocido como un do- 810 00:32:37,900 --> 00:32:38,480 while. 811 00:32:38,480 --> 00:32:39,540 Y hemos visto brevemente. 812 00:32:39,540 --> 00:32:41,830 Y esto podría ser útil con súper conjunto de procesadores 1. 813 00:32:41,830 --> 00:32:45,570 Cada vez que quieres hacer algo y luego comprobar si 814 00:32:45,570 --> 00:32:48,940 el usuario cooperó, y si no lo hacían, lo volvería a hacer, un hacer- 815 00:32:48,940 --> 00:32:51,460 mientras que el lazo se presta a ese tipo de lógica. 816 00:32:51,460 --> 00:32:55,640 Debido a que el orden de arriba a abajo aquí sugiere, 817 00:32:55,640 --> 00:32:57,750 Qué significa literalmente hacer esto. 818 00:32:57,750 --> 00:32:59,830 Y hacer esto una y otra vez, ¿qué podría ser? 819 00:32:59,830 --> 00:33:03,000 Tal vez signifique getInt llamando o GetString y luego 820 00:33:03,000 --> 00:33:05,830 comprobando el valor de getInt o GetString y luego gritar 821 00:33:05,830 --> 00:33:08,260 al usuario si no han cooperado al pedirles que 822 00:33:08,260 --> 00:33:10,100 una y otra vez y otra vez. 823 00:33:10,100 --> 00:33:11,730 Si usted quiere hacer algo una vez, 824 00:33:11,730 --> 00:33:13,210 a continuación, compruebe alguna condición. 825 00:33:13,210 --> 00:33:14,110 >> Así que vamos a probar esto. 826 00:33:14,110 --> 00:33:17,130 Permítanme cambiar esta realidad ahora a un bucle do-while. 827 00:33:17,130 --> 00:33:18,830 Y voy a seguir adelante y hacer lo siguiente. 828 00:33:18,830 --> 00:33:21,830 Así que haga lo siguiente. 829 00:33:21,830 --> 00:33:26,870 Vamos a hacer int i = getInt (), pero primero vamos a decirle al usuario 830 00:33:26,870 --> 00:33:27,410 qué hacer. 831 00:33:27,410 --> 00:33:29,050 Así que un poco diferente esta vez. 832 00:33:29,050 --> 00:33:31,270 "Dame un int". 833 00:33:31,270 --> 00:33:32,910 Así que voy a usar printf para eso. 834 00:33:32,910 --> 00:33:35,740 Y ahora me voy a ir por aquí, y voy a hacer esto 835 00:33:35,740 --> 00:33:41,520 mientras que i es, digamos, mayor que - 836 00:33:41,520 --> 00:33:47,540 vamos a ver, i es, digamos, menos de 0, o es i 837 00:33:47,540 --> 00:33:48,730 mayor que 10. 838 00:33:48,730 --> 00:33:51,810 En otras palabras, quiero un número del 1 al 9, sólo 839 00:33:51,810 --> 00:33:52,720 arbitrariamente. 840 00:33:52,720 --> 00:33:55,290 Así que estoy utilizando una expresión booleana combinada para 841 00:33:55,290 --> 00:33:59,930 asegurarse de que i es menor que 0 o mayor que 10, en la que 842 00:33:59,930 --> 00:34:02,530 caso voy a hacer este bucle aquí de nuevo. 843 00:34:02,530 --> 00:34:04,400 Así que de nuevo, hacer esto - 844 00:34:04,400 --> 00:34:08,480 mientras que i es menor que 0 o i es mayor que 10. 845 00:34:08,480 --> 00:34:11,440 >> Así que ahora vamos a seguir adelante y hacer esto una vez que hayas hecho esto. 846 00:34:11,440 --> 00:34:13,270 Vamos a hacer una simple comprobación rápida. 847 00:34:13,270 --> 00:34:18,929 printf ("Gracias, i es% d", i). 848 00:34:18,929 --> 00:34:21,350 Así que este sencillo programa pide al usuario un int, 849 00:34:21,350 --> 00:34:24,000 se asegura de que está dentro de un rango del 1 al 9 inclusive, 850 00:34:24,000 --> 00:34:26,280 y agradece al usuario, recordándoles lo que acaban de 851 00:34:26,280 --> 00:34:27,940 escribió, así como una prueba de cordura poco. 852 00:34:27,940 --> 00:34:30,659 Pero vamos a ver si esto funciona según lo previsto. 853 00:34:30,659 --> 00:34:34,533 Déjame ir a la cabeza aquí y volver a ejecutar make bucle. 854 00:34:34,533 --> 00:34:35,350 Hmm. 855 00:34:35,350 --> 00:34:38,600 "El uso de identificador no declarado 'i'". Eso es extraño. 856 00:34:38,600 --> 00:34:41,509 Pensé que resolver eso. 857 00:34:45,489 --> 00:34:47,560 Síntoma Mismo código diferente. 858 00:34:47,560 --> 00:34:47,899 ¿Sí? 859 00:34:47,899 --> 00:34:50,191 AUDIENCIA: [inaudible] en el interior de los dos, tenemos que 860 00:34:50,191 --> 00:34:52,639 [Inaudible]. 861 00:34:52,639 --> 00:34:53,260 >> DAVID J. MALAN: Exactamente. 862 00:34:53,260 --> 00:34:55,989 Así que este hecho nos lleva a un tema conocido como ámbito de aplicación. 863 00:34:55,989 --> 00:34:59,350 Resulta que C, una vez más, lo que realmente te lleva literalmente. 864 00:34:59,350 --> 00:35:02,970 Y si haces algo como esto donde se declara un int 865 00:35:02,970 --> 00:35:06,120 y luego asignar algún valor, pero lo hace dentro de un 866 00:35:06,120 --> 00:35:09,840 par de llaves, lo que C hace es que se supone que 867 00:35:09,840 --> 00:35:14,800 sólo quieren que esos 32 bits conocido como i de existir dentro de la 868 00:35:14,800 --> 00:35:18,200 contexto de esas llaves, en el contexto de líneas 869 00:35:18,200 --> 00:35:22,420 6 a 9. Así que se declara, y se asigna un 870 00:35:22,420 --> 00:35:26,530 valor en la línea 8, pero en cuanto te dan fuera de 871 00:35:26,530 --> 00:35:30,270 línea 9 por debajo de la llave de cierre, i ya no está en 872 00:35:30,270 --> 00:35:31,910 ámbito de aplicación, por así decirlo. 873 00:35:31,910 --> 00:35:35,030 S-C-O-P-E. Ya no es en el contexto adecuado. 874 00:35:35,030 --> 00:35:37,940 Así que ahora no hay una i, así que es como si no tuviéramos incluso 875 00:35:37,940 --> 00:35:38,770 declaró en absoluto. 876 00:35:38,770 --> 00:35:41,520 >> Entonces, ¿qué es entonces una solución para algo como esto, si el 877 00:35:41,520 --> 00:35:44,300 razón es que se declara dentro de las llaves, que 878 00:35:44,300 --> 00:35:45,120 aparentemente es malo? 879 00:35:45,120 --> 00:35:45,410 He aquí? 880 00:35:45,410 --> 00:35:46,820 AUDIENCIA: [inaudible]. 881 00:35:46,820 --> 00:35:47,150 DAVID J. MALAN: Si. 882 00:35:47,150 --> 00:35:48,710 Así que podemos inicializar exterior. 883 00:35:48,710 --> 00:35:53,530 Así que permítanme seguir adelante y eliminar las partes de declaración mediante el cual 884 00:35:53,530 --> 00:35:55,820 Puedo especificar el tipo, y déjame hacerlo aquí. 885 00:35:55,820 --> 00:36:00,220 Así, en la línea 5, que ahora dice "Dame un int." Llámelo i. 886 00:36:00,220 --> 00:36:03,400 Observe que en la línea 9, que no quiero hacer esto, porque yo 887 00:36:03,400 --> 00:36:04,830 ya tiene los 32 bits. 888 00:36:04,830 --> 00:36:06,140 No quiero pedir a la computadora por un 889 00:36:06,140 --> 00:36:07,630 diferentes bits de 32. 890 00:36:07,630 --> 00:36:09,850 Quiero usar esos mismos 32 bits. 891 00:36:09,850 --> 00:36:13,190 Y ahora porque me está declarada en la línea 5, sigue siendo legítimo 892 00:36:13,190 --> 00:36:16,550 para usarlo en la línea 11 y la línea 12. 893 00:36:16,550 --> 00:36:19,310 >> Así que voy a tratar de volver a compilar esto y ver 894 00:36:19,310 --> 00:36:20,490 Clang si deja de gritar. 895 00:36:20,490 --> 00:36:22,380 hacer lazo. 896 00:36:22,380 --> 00:36:25,470 Así que ahora es "la declaración implícita de la función 897 00:36:25,470 --> 00:36:29,880 'GetInt' no es válido en C99. "¿Qué es eso? 898 00:36:29,880 --> 00:36:30,400 ¿Sí? 899 00:36:30,400 --> 00:36:32,330 AUDIENCIA: [inaudible]. 900 00:36:32,330 --> 00:36:32,690 DAVID J. MALAN: Si. 901 00:36:32,690 --> 00:36:35,520 Así que ahora que estoy realmente utilizando getInt, esto no es algo 902 00:36:35,520 --> 00:36:38,190 que sólo viene con C. Esto viene de CS50. 903 00:36:38,190 --> 00:36:39,890 Así que tenemos esto aquí. 904 00:36:39,890 --> 00:36:41,450 Y permítanme volver al prompt abajo 905 00:36:41,450 --> 00:36:43,500 aquí y volver a ejecutar make. 906 00:36:43,500 --> 00:36:44,160 Bueno, por fin. 907 00:36:44,160 --> 00:36:46,270 Ahora que hemos resuelto eso y el otro error. 908 00:36:46,270 --> 00:36:48,930 Permítanme ahora se ejecutan bucle y ver qué pasa. 909 00:36:48,930 --> 00:36:51,740 "Dame un int." Voy a darle 11. 910 00:36:51,740 --> 00:36:53,100 Voy a darle -1. 911 00:36:53,100 --> 00:36:54,470 Voy a darle foo. 912 00:36:54,470 --> 00:36:56,080 Voy a darle 5. 913 00:36:56,080 --> 00:36:57,450 Y ahora es en realidad funciona. 914 00:36:57,450 --> 00:36:59,410 Sin embargo, el indicador cambia por una razón aquí. 915 00:36:59,410 --> 00:37:02,800 ¿Por qué lo dices reintentar una de estas veces, pero me da un 916 00:37:02,800 --> 00:37:03,920 int las otras tres veces? 917 00:37:03,920 --> 00:37:05,500 ¿Por qué es que el comportamiento diferente? 918 00:37:05,500 --> 00:37:06,980 AUDIENCIA: dio una cadena. 919 00:37:06,980 --> 00:37:07,830 DAVID J. MALAN: ¿Cómo? 920 00:37:07,830 --> 00:37:08,570 AUDIENCIA: Usted le dio una cadena. 921 00:37:08,570 --> 00:37:08,990 DAVID J. MALAN: Si. 922 00:37:08,990 --> 00:37:11,450 Así que le dio una cadena en este tercer intento, 923 00:37:11,450 --> 00:37:12,490 cuando escribí foo. 924 00:37:12,490 --> 00:37:13,200 Foo es una cadena. 925 00:37:13,200 --> 00:37:14,340 Obviamente no es un int. 926 00:37:14,340 --> 00:37:17,500 Y la forma en que CS50 ha implementado getint es que nos 927 00:37:17,500 --> 00:37:20,330 no comprobar si algo es menor que 0 o mayor que 10 928 00:37:20,330 --> 00:37:22,260 para ti, porque ¿cómo podemos saber de antemano qué tipo de 929 00:37:22,260 --> 00:37:23,130 int quieres? 930 00:37:23,130 --> 00:37:25,880 Pero mínimamente pueda comprobar por usted, ¿el usuario por lo menos 931 00:37:25,880 --> 00:37:26,730 escriba un número entero? 932 00:37:26,730 --> 00:37:30,500 Y si no lo hacían, les gritamos al usuario escribiendo "reintentar" en la 933 00:37:30,500 --> 00:37:31,440 la pantalla. 934 00:37:31,440 --> 00:37:34,210 >> Así que ahora tenemos un programa que está bucle. Bien. 935 00:37:34,210 --> 00:37:37,070 Ahora, ¿cuál de ellos es el tipo de la construcción mejor? 936 00:37:37,070 --> 00:37:39,060 Así que aquí es donde las cosas se ponen un poco desordenado, la 937 00:37:39,060 --> 00:37:42,360 hecho de que usted tiene que recordar para declarar una variable aquí 938 00:37:42,360 --> 00:37:44,630 si quieres usarlo dentro de algunos 939 00:37:44,630 --> 00:37:46,460 llaves y exteriores. 940 00:37:46,460 --> 00:37:48,490 Pero incluso si esto le parece un poco críptico al principio 941 00:37:48,490 --> 00:37:50,750 mirada, sólo una vez más, recordar la lógica simple. 942 00:37:50,750 --> 00:37:54,630 Con el fin de usar nada en C, si se trata de una función o 943 00:37:54,630 --> 00:37:57,680 que es una variable, hay que incluir si se trata de una función 944 00:37:57,680 --> 00:37:59,770 en alguna biblioteca, o usted tiene que declarar. 945 00:37:59,770 --> 00:38:02,405 Pero ahora es necesario tener en cuenta el hecho adicional de que 946 00:38:02,405 --> 00:38:04,940 usted lo está declarando en el alcance adecuado. 947 00:38:04,940 --> 00:38:08,150 No lo estás poniendo demasiada fuerza en el interior de los paréntesis. 948 00:38:08,150 --> 00:38:09,410 >> Así que déjame en realidad revertir. 949 00:38:09,410 --> 00:38:12,660 Si volvemos a nuestro por ejemplo de antes, y me voy 950 00:38:12,660 --> 00:38:19,245 para volver a int, int i = 0; i <10, i + +, y yo 951 00:38:19,245 --> 00:38:26,370 printf hacer estrellas, como este, y luego paren cerca y ahora 952 00:38:26,370 --> 00:38:30,410 printf i es ahora - 953 00:38:30,410 --> 00:38:33,500 de acuerdo con la misma lógica, ¿qué pasará cuando trato de 954 00:38:33,500 --> 00:38:35,500 compilar este programa? 955 00:38:35,500 --> 00:38:36,790 AUDIENCIA: identificador no válido. 956 00:38:36,790 --> 00:38:38,560 DAVID J. MALAN: Así que es otro identificador no válido, 957 00:38:38,560 --> 00:38:39,470 identificador no declarado. 958 00:38:39,470 --> 00:38:41,810 Ahora, la razón es un poco diferente. 959 00:38:41,810 --> 00:38:44,370 Obviamente hay ni llaves aquí, pero el mismo 960 00:38:44,370 --> 00:38:46,790 idea, la misma historia de alcance se aplica. 961 00:38:46,790 --> 00:38:50,340 Si Ud. se ha declarado una variable como yo dentro de un 962 00:38:50,340 --> 00:38:53,960 bucle for, incluso si no se ha escrito explícitamente el rizado 963 00:38:53,960 --> 00:38:56,980 tirantes, piensa en ellos como mentalmente aún estar allí, en el que 964 00:38:56,980 --> 00:39:00,310 caso i es válido sólo dentro del bucle for. 965 00:39:00,310 --> 00:39:03,080 No es válida una vez que llegue a la línea siguiente, que a su 966 00:39:03,080 --> 00:39:05,090 este caso es ahora 10. 967 00:39:05,090 --> 00:39:09,060 Así que sólo unas pocas cuestiones de alcance y similares. 968 00:39:09,060 --> 00:39:12,620 Muy bien, alguna pregunta? 969 00:39:12,620 --> 00:39:15,310 >> Muy bien, así que esto es una especie de un pequeño programa trivial, 970 00:39:15,310 --> 00:39:17,450 imprimir sólo las estrellas pequeñas. 971 00:39:17,450 --> 00:39:20,400 Pero vamos a ver si te acuerdas de esta canción aquí. 972 00:39:20,400 --> 00:39:22,530 Esta es una canción increíblemente molesto a los niños a cantar en 973 00:39:22,530 --> 00:39:23,550 el autobús escolar y similares. 974 00:39:23,550 --> 00:39:25,990 Pero lo bueno de esto es que tiene esta ciclicidad, 975 00:39:25,990 --> 00:39:27,910 por lo que es "99 botellas de cerveza en la pared, 976 00:39:27,910 --> 00:39:28,520 99 botellas de cerveza. 977 00:39:28,520 --> 00:39:31,030 Tome uno abajo, pase a su alrededor, 98 botellas de cerveza en la 978 00:39:31,030 --> 00:39:34,330 pared. "Y entonces la canción se repite el 97, luego 96, luego 979 00:39:34,330 --> 00:39:38,040 95, 94, hasta llegar a 0 si usted realmente tiene que 980 00:39:38,040 --> 00:39:38,920 lejos en el autobús. 981 00:39:38,920 --> 00:39:41,960 Así que este es un buen programa para ordenar de implemento, porque mi 982 00:39:41,960 --> 00:39:43,650 Dios, si pudiera implementar esto con unos pocos 983 00:39:43,650 --> 00:39:46,660 líneas de código, se puede escupir las letras enteras a este 984 00:39:46,660 --> 00:39:48,240 canción con bastante rapidez. 985 00:39:48,240 --> 00:39:50,420 Pero en el camino, podemos empezar a molestar ahora, aparte algunos 986 00:39:50,420 --> 00:39:52,460 de estas construcciones básicas de bucle y también ahora 987 00:39:52,460 --> 00:39:55,830 introducir funciones que nos escriben, devolver valores 988 00:39:55,830 --> 00:39:57,020 que pasa a su alrededor. 989 00:39:57,020 --> 00:39:58,910 Pero primero, ¿por qué no seguir adelante y tomar nuestro cinco minutos 990 00:39:58,910 --> 00:39:59,320 romper aquí? 991 00:39:59,320 --> 00:40:01,480 Y cuando regresemos, vamos a cantar esta canción. 992 00:40:05,680 --> 00:40:08,760 >> De acuerdo, estamos de vuelta. 993 00:40:08,760 --> 00:40:11,850 Y cuando digo que ahora vamos a cantar esta canción, me refiero a 994 00:40:11,850 --> 00:40:13,250 programación, no verbalmente. 995 00:40:13,250 --> 00:40:19,370 Así que aquí tenemos beer1.c, que es una aplicación de la presente 996 00:40:19,370 --> 00:40:20,580 canción en particular. 997 00:40:20,580 --> 00:40:23,110 Y sólo para que quede claro, para quienes no están familiarizados con lo que 998 00:40:23,110 --> 00:40:24,460 esto se parece, déjame ir por delante 999 00:40:24,460 --> 00:40:27,070 y hacer beer1, Enter. 1000 00:40:27,070 --> 00:40:30,400 Ahora voy a correr beer1, y lo que vamos a ver - ¿Cuántas botellas 1001 00:40:30,400 --> 00:40:31,140 de cerveza habrá? 1002 00:40:31,140 --> 00:40:33,240 Voy a escribir en el 99, como dice la canción. 1003 00:40:33,240 --> 00:40:34,040 Intro. 1004 00:40:34,040 --> 00:40:35,650 Y ahora, si nos desplazamos a través de - 1005 00:40:35,650 --> 00:40:38,280 oops - si desplazarse a través de todo esto, veremos que 1006 00:40:38,280 --> 00:40:41,350 esto efectivamente cantar toda la canción. 1007 00:40:44,050 --> 00:40:44,540 Espera un minuto. 1008 00:40:44,540 --> 00:40:46,240 Mi barra de desplazamiento es un poco desordenado. 1009 00:40:46,240 --> 00:40:47,940 Vamos a usar la ventana más grande. 1010 00:40:47,940 --> 00:40:53,500 Así beer1, 99, ahí vamos. 1011 00:40:53,500 --> 00:40:56,420 Así que aquí tenemos toda la canción, cantada mucho más rápido mediante la 1012 00:40:56,420 --> 00:40:58,450 ordenador de lo que podría haber sido por nosotros. 1013 00:40:58,450 --> 00:41:00,340 Así que notar, sin embargo, la naturaleza cíclica aquí. 1014 00:41:00,340 --> 00:41:03,380 Dice 99, luego 99, luego "tomar uno abajo, pasar 1015 00:41:03,380 --> 00:41:04,740 alrededor ", entonces 98. 1016 00:41:04,740 --> 00:41:06,640 Y ahora lo repite una y otra vez. 1017 00:41:06,640 --> 00:41:08,840 >> Así que esto es realmente una oportunidad perfecta para algún tipo de 1018 00:41:08,840 --> 00:41:10,400 construir un bucle. 1019 00:41:10,400 --> 00:41:12,950 Tenga en cuenta que yo soy una especie de corte de una esquina aquí. 1020 00:41:12,950 --> 00:41:15,960 Tenga en cuenta que lo que estoy diciendo "98 botellas de cerveza en la pared, 1021 00:41:15,960 --> 00:41:19,010 97 botellas de cerveza en la pared ", y que era tan 1022 00:41:19,010 --> 00:41:21,640 que cuando lleguemos a una botella de cerveza, no tengo 1023 00:41:21,640 --> 00:41:23,300 que preocuparse de la gramática Inglés. 1024 00:41:23,300 --> 00:41:25,790 Pero también podemos arreglar esto con un poco más de un si 1025 00:41:25,790 --> 00:41:26,910 condición, tal vez. 1026 00:41:26,910 --> 00:41:30,110 Si este número es singular, seguir adelante y decir "botella", 1027 00:41:30,110 --> 00:41:31,840 de lo contrario si es plural, por ejemplo "botellas". 1028 00:41:31,840 --> 00:41:34,150 Pero, por ahora, estoy completamente de corte de la esquina. 1029 00:41:34,150 --> 00:41:35,520 Así que vamos a ver lo que tenemos aquí. 1030 00:41:35,520 --> 00:41:37,150 Así que tenemos algunos comentarios en la parte superior. 1031 00:41:37,150 --> 00:41:39,450 Estoy incluyendo estas dos bibliotecas, 1032 00:41:39,450 --> 00:41:41,140 hemos sido comúnmente. 1033 00:41:41,140 --> 00:41:43,610 Y ahora me baje hasta la primera 1034 00:41:43,610 --> 00:41:44,990 propias líneas de código. 1035 00:41:44,990 --> 00:41:47,020 La línea 17 inicia principal. 1036 00:41:47,020 --> 00:41:50,610 Línea 21 y 20 tiene cuántas botellas de cerveza habrá? 1037 00:41:50,610 --> 00:41:52,060 Y entonces yo llamo getInt. 1038 00:41:52,060 --> 00:41:53,800 Y ahora tengo un poco de una comprobación de validez. 1039 00:41:53,800 --> 00:41:57,030 >> Así que esta es una convención que ahora vamos a empezar a adoptar 1040 00:41:57,030 --> 00:41:59,620 más rigurosamente comprobar la entrada del usuario. 1041 00:41:59,620 --> 00:42:01,710 A veces simplemente no quieren que les preguntará de nuevo 1042 00:42:01,710 --> 00:42:02,630 y una y otra vez. 1043 00:42:02,630 --> 00:42:05,620 Si el usuario mete la pata y no coopera, está bien. 1044 00:42:05,620 --> 00:42:07,430 Deje de fumar y no se ocupan de ellos. 1045 00:42:07,430 --> 00:42:08,990 Y eso es lo que estoy haciendo aquí. 1046 00:42:08,990 --> 00:42:12,520 Si n es menor que 1, sólo voy a gritar a los usuarios, 1047 00:42:12,520 --> 00:42:14,330 "Lo siento, eso no tiene sentido." Y luego me voy a 1048 00:42:14,330 --> 00:42:16,650 arbitrariamente devolverá 1. 1049 00:42:16,650 --> 00:42:18,550 Así que de nuevo, esto es sólo una convención para acostumbrarse. 1050 00:42:18,550 --> 00:42:19,850 Por el momento, asumir la fe. 1051 00:42:19,850 --> 00:42:22,700 Pero hasta ahora, siempre hemos estado regresando 0, porque 1052 00:42:22,700 --> 00:42:25,204 hemos dicho devolviendo 0 denota qué? 1053 00:42:25,204 --> 00:42:26,000 AUDIENCIA: Éxito. 1054 00:42:26,000 --> 00:42:27,320 DAVID J. MALAN: Éxito, eso es todo. 1055 00:42:27,320 --> 00:42:29,740 Así que ahora que finalmente estamos empezando a pensar en 1056 00:42:29,740 --> 00:42:31,330 que no son éxitos - 1057 00:42:31,330 --> 00:42:33,760 en otras palabras, casos de esquina, condiciones de error - 1058 00:42:33,760 --> 00:42:37,520 ahora tengo un suministro infinito, o por lo menos cuatro mil millones 1059 00:42:37,520 --> 00:42:39,790 posibles cosas que pueden salir mal en mis programas. 1060 00:42:39,790 --> 00:42:42,300 Y puedo comenzar a asignar los números individuales. 1061 00:42:42,300 --> 00:42:44,340 Ahora, por lo general es suficiente para devolver sólo 1062 00:42:44,340 --> 00:42:45,730 algo distinto de 0. 1063 00:42:45,730 --> 00:42:48,040 Así que vamos a volver simplemente 1 por ahora. 1064 00:42:48,040 --> 00:42:51,440 Pero el motivo de la devolución 1 es que tan pronto como regrese 1065 00:42:51,440 --> 00:42:55,110 1, ¿sabes qué pasa con el resto del programa? 1066 00:42:55,110 --> 00:42:55,720 Que se detenga. 1067 00:42:55,720 --> 00:42:56,560 Eso es todo. 1068 00:42:56,560 --> 00:42:59,150 Así que el hecho de que me estoy volviendo 1 es eficaz 1069 00:42:59,150 --> 00:43:02,950 un cortocircuito en la ejecución de este programa, de manera que 1070 00:43:02,950 --> 00:43:06,780 nada por debajo de la línea 27 se siga ejecutando. 1071 00:43:06,780 --> 00:43:09,210 Tan pronto como se vuelve principales, que es. 1072 00:43:09,210 --> 00:43:13,160 >> Muy bien, así que si el usuario hace cooperar y llegar a la línea 30 1073 00:43:13,160 --> 00:43:15,680 porque escrito en un número legítimo, he aquí mi 1074 00:43:15,680 --> 00:43:16,990 aplicación de esta canción. 1075 00:43:16,990 --> 00:43:19,050 Así que primero imprima un carácter de nueva línea, sólo por 1076 00:43:19,050 --> 00:43:19,880 estética. 1077 00:43:19,880 --> 00:43:21,500 Ahora tengo un bucle for. 1078 00:43:21,500 --> 00:43:22,930 Y noten que estoy haciendo las cosas un poco 1079 00:43:22,930 --> 00:43:23,880 de una dirección diferente. 1080 00:43:23,880 --> 00:43:26,210 Yo no tengo que hacer menos, no tengo que hacer + +. 1081 00:43:26,210 --> 00:43:30,660 Yo en cambio puedo decir inicializar una variable i e igualarla a 1082 00:43:30,660 --> 00:43:35,080 n, el número que el usuario escribió en, y luego hacer lo siguiente, por lo que 1083 00:43:35,080 --> 00:43:39,590 siempre y cuando i es mayor que 0, i - 1084 00:43:39,590 --> 00:43:42,070 una vez que haya terminado de una iteración de este bucle. 1085 00:43:42,070 --> 00:43:44,310 Por lo tanto, puede contar con un bucle for también. 1086 00:43:44,310 --> 00:43:47,520 Ahora, esta es la semana más o menos una cosa ahora, con printf. 1087 00:43:47,520 --> 00:43:51,770 Así impresión "% d botellas de cerveza en la pared." Imprimir "% d 1088 00:43:51,770 --> 00:43:54,990 botellas de cerveza. "" Tome uno abajo, pase a su alrededor. "Imprimir 1089 00:43:54,990 --> 00:43:58,880 "% D botellas de cerveza en la pared." Por lo que es aún% d, pero 1090 00:43:58,880 --> 00:44:02,770 cuenta de que el argumento de printf está cambiando. 1091 00:44:02,770 --> 00:44:05,840 Después de la coma, yo tengo, porque quiero decir 99. 1092 00:44:05,840 --> 00:44:08,590 Después de este coma, yo tengo, porque quiero decir 99. 1093 00:44:08,590 --> 00:44:14,030 Después de este coma, i have - 1, porque quiero decir 98 en 1094 00:44:14,030 --> 00:44:16,260 esta primera iteración, y así sucesivamente. 1095 00:44:16,260 --> 00:44:18,520 Y ahora aquí, sólo tengo un poco de observación poco estúpido. 1096 00:44:18,520 --> 00:44:22,270 Y luego la línea 42, que devolver 0 por convención, lo que significa que 1097 00:44:22,270 --> 00:44:23,650 todo está bien. 1098 00:44:23,650 --> 00:44:24,490 >> ¿Y qué si me metió la pata? 1099 00:44:24,490 --> 00:44:26,350 ¿Qué puede un error muy común aquí será? 1100 00:44:26,350 --> 00:44:29,200 Bueno, ¿y si accidentalmente dicho bien, yo quiero contar 1101 00:44:29,200 --> 00:44:31,640 a 0, quiero 0 botellas de cerveza en la pared? 1102 00:44:31,640 --> 00:44:34,620 Por eso digo, i es mayor o igual a 0. 1103 00:44:34,620 --> 00:44:38,920 ¿Qué va a ser el síntoma que ahora veo si me recompilar 1104 00:44:38,920 --> 00:44:41,173 beer1 y ejecutarlo? 1105 00:44:41,173 --> 00:44:42,120 AUDIENCIA: Negativo. 1106 00:44:42,120 --> 00:44:43,590 DAVID J. MALAN: Sí, va a ser negativo. 1107 00:44:43,590 --> 00:44:45,950 Este es un error de cierre por una parte, un increíblemente 1108 00:44:45,950 --> 00:44:47,270 error común de hacer. 1109 00:44:47,270 --> 00:44:48,960 Que en realidad se remontan a la ventana de terminal y hacerlo 1110 00:44:48,960 --> 00:44:50,620 aquí, para que podamos ver a la vez. 1111 00:44:50,620 --> 00:44:53,280 Intro, 99 botellas de cerveza. 1112 00:44:53,280 --> 00:44:56,580 Cerca, pero fuimos muy ligeramente demasiado lejos. 1113 00:44:56,580 --> 00:45:00,500 Cantamos la canción demasiado abajo, de manera que ahora golpear el 1114 00:45:00,500 --> 00:45:01,510 número negativo. 1115 00:45:01,510 --> 00:45:03,680 Así que no acaba de funcionar. 1116 00:45:03,680 --> 00:45:06,450 >> Muy bien, así que fácilmente se puede arreglar volviendo a la 1117 00:45:06,450 --> 00:45:07,650 manera que una vez fue. 1118 00:45:07,650 --> 00:45:10,360 Pero, ¿cuáles son algunas oportunidades ahora para 1119 00:45:10,360 --> 00:45:11,190 mejora? 1120 00:45:11,190 --> 00:45:17,200 Bueno, déjame abrir beer2.c y baje aquí y echar un 1121 00:45:17,200 --> 00:45:19,310 mira esta versión. 1122 00:45:19,310 --> 00:45:21,370 ¿Qué es lo primero que salta a la vista tan diferentes 1123 00:45:21,370 --> 00:45:23,715 en esta versión aquí? 1124 00:45:23,715 --> 00:45:24,190 AUDIENCIA: [inaudible]. 1125 00:45:24,190 --> 00:45:26,510 DAVID J. MALAN: Sí, así que no soy yo, porque se le ocurrió a 1126 00:45:26,510 --> 00:45:29,350 me sabes qué, yo estoy preguntando al usuario para n, y entonces estoy 1127 00:45:29,350 --> 00:45:33,580 estableciendo i igual a n, y luego me i cambiando, pero nunca estoy 1128 00:45:33,580 --> 00:45:34,590 n tocar de nuevo. 1129 00:45:34,590 --> 00:45:37,390 Entonces, ¿qué diablos era el punto de que la asignación de otros 32 1130 00:45:37,390 --> 00:45:45,210 pedacitos llamé sólo para que yo pueda tener una variable diferente? 1131 00:45:45,210 --> 00:45:47,960 Así que en este caso, en cierto modo me reconoció que innecesario 1132 00:45:47,960 --> 00:45:49,190 diseño característica. 1133 00:45:49,190 --> 00:45:52,730 Y ahora voy a decir mientras que n es mayor que 0, vaya 1134 00:45:52,730 --> 00:45:56,180 adelante e imprimir la misma canción, pasando por una n al printf como la 1135 00:45:56,180 --> 00:46:00,210 El segundo argumento, y n - 1 como el segundo argumento aquí. 1136 00:46:00,210 --> 00:46:02,930 Y luego en cada iteración de este bucle, seguir adelante y sólo 1137 00:46:02,930 --> 00:46:05,080 decrementar n sí mismo. 1138 00:46:05,080 --> 00:46:06,960 Ahora, funcionalmente, este programa 1139 00:46:06,960 --> 00:46:08,010 va a ser idénticos. 1140 00:46:08,010 --> 00:46:10,730 Si escribo en el 99, n comienza a las 99. 1141 00:46:10,730 --> 00:46:12,890 Yo decremento, reducción, disminución, decremento. 1142 00:46:12,890 --> 00:46:15,875 Voy a llegar hasta el final con "Una botella de cerveza en 1143 00:46:15,875 --> 00:46:16,740 la pared, una botella de cerveza. 1144 00:46:16,740 --> 00:46:18,020 Tome uno abajo, pase a su alrededor. 1145 00:46:18,020 --> 00:46:21,480 0 botellas de cerveza en la pared. "Al final, lo hice porque 1146 00:46:21,480 --> 00:46:23,200 obtener la condición correcta. 1147 00:46:23,200 --> 00:46:24,280 Es mayor que 0. 1148 00:46:24,280 --> 00:46:26,220 Yo no cometer este error. 1149 00:46:26,220 --> 00:46:28,470 >> Entonces, ¿qué es mejor, una versión o la versión dos? 1150 00:46:31,380 --> 00:46:33,480 Eso he oído un montón de murmuraciones para dos. 1151 00:46:33,480 --> 00:46:34,730 ¿Por qué dos? 1152 00:46:37,210 --> 00:46:38,225 ¿Qué es eso? 1153 00:46:38,225 --> 00:46:39,215 AUDIENCIA: [inaudible]. 1154 00:46:39,215 --> 00:46:40,070 DAVID J. MALAN: Oh, está bien. 1155 00:46:40,070 --> 00:46:42,870 Así que no esté por debajo de 0, pero recuerda, en una versión, la 1156 00:46:42,870 --> 00:46:45,870 versión correcta original no ir por debajo de 0 tampoco. 1157 00:46:45,870 --> 00:46:48,340 Así que recuerde que esta es la versión correcta. 1158 00:46:48,340 --> 00:46:51,630 Así que vamos a por lo menos comparar las dos versiones correctas. 1159 00:46:51,630 --> 00:46:53,300 ¿Qué es un argumento a favor de la versión 1160 00:46:53,300 --> 00:46:55,146 dos que, mmm, mejor? 1161 00:46:55,146 --> 00:46:55,642 ¿Sí? 1162 00:46:55,642 --> 00:46:57,630 AUDIENCIA: Se utiliza menos espacio. 1163 00:46:57,630 --> 00:46:59,530 DAVID J. MALAN: Bueno, por lo que ocupa menos espacio, ¿no? 1164 00:46:59,530 --> 00:47:02,900 Considerando que una versión de 32 bits utilizado para n, y luego otra 1165 00:47:02,900 --> 00:47:07,680 32 bits para i. 1166 00:47:07,680 --> 00:47:10,060 Versión dos sólo utiliza 32 bits para n, de modo que 1167 00:47:10,060 --> 00:47:11,700 parece ser una ventaja. 1168 00:47:11,700 --> 00:47:12,950 Otros pensamientos? 1169 00:47:18,070 --> 00:47:21,520 ¿Alguien quiere argumentar en favor de uno? 1170 00:47:21,520 --> 00:47:22,070 ¿Sí? 1171 00:47:22,070 --> 00:47:25,240 AUDIENCIA: Usted tiene que usar la línea adicional de código de n -. 1172 00:47:25,240 --> 00:47:26,090 >> DAVID J. MALAN: Bueno, claro. 1173 00:47:26,090 --> 00:47:26,960 Así que eso es justo. 1174 00:47:26,960 --> 00:47:29,040 Así que este justo, al menos para mí - 1175 00:47:29,040 --> 00:47:31,940 Quiero decir, esto realmente se siente un poco más desordenado, el hecho de que 1176 00:47:31,940 --> 00:47:35,120 No puedo ordenar de encapsular toda mi lógica en un 1177 00:47:35,120 --> 00:47:38,030 hermosa línea, el bucle for, ya que el bucle for puede. 1178 00:47:38,030 --> 00:47:40,240 Aquí, como que tengo que virar en este n - 1179 00:47:40,240 --> 00:47:41,120 al final del bucle, porque 1180 00:47:41,120 --> 00:47:42,550 es lógicamente necesario. 1181 00:47:42,550 --> 00:47:45,190 Pero es como que me frota el camino equivocado, simplemente porque 1182 00:47:45,190 --> 00:47:48,260 parece independiente de la lógica de aquí, aunque, 1183 00:47:48,260 --> 00:47:49,430 de nuevo, es necesario. 1184 00:47:49,430 --> 00:47:50,990 Otros pensamientos? 1185 00:47:50,990 --> 00:47:51,490 ¿Sí? 1186 00:47:51,490 --> 00:47:52,740 AUDIENCIA: [inaudible]. 1187 00:47:57,990 --> 00:47:58,350 >> DAVID J. MALAN: Si. 1188 00:47:58,350 --> 00:48:00,730 Entonces, ¿qué pasa si en lugar, al final de la canción, quería 1189 00:48:00,730 --> 00:48:02,950 imprimir de nuevo el nombre de la canción? 1190 00:48:02,950 --> 00:48:05,660 Al igual que "Gracias por jugar 99 botellas de cerveza", o algo 1191 00:48:05,660 --> 00:48:06,690 tonto como eso? 1192 00:48:06,690 --> 00:48:09,750 Pero el punto es, que quería tener acceso al valor original. 1193 00:48:09,750 --> 00:48:13,180 El hecho de que haya mutado o cambiado en todos los n 1194 00:48:13,180 --> 00:48:16,330 iteración, por lo que han destruido su valor original 1195 00:48:16,330 --> 00:48:18,650 significa que no se puede hacer eso al final. 1196 00:48:18,650 --> 00:48:20,660 Ahora, sin duda, es evidente que no quieren hacer 1197 00:48:20,660 --> 00:48:21,450 que en este programa. 1198 00:48:21,450 --> 00:48:22,350 Entonces, ¿quién le importa? 1199 00:48:22,350 --> 00:48:23,630 Pero eso es un punto muy válido. 1200 00:48:23,630 --> 00:48:25,520 Y para ser honesto, realmente no hay una 1201 00:48:25,520 --> 00:48:26,630 derecho de contestar aquí. 1202 00:48:26,630 --> 00:48:28,740 Los dos son igualmente correctos. 1203 00:48:28,740 --> 00:48:30,210 Podría estar convencido de cualquier manera. 1204 00:48:30,210 --> 00:48:33,310 Me gustaría decir que, en general, es un buen principio si 1205 00:48:33,310 --> 00:48:36,030 pide al usuario un valor y almacena en una variable 1206 00:48:36,030 --> 00:48:38,730 como n, sólo una especie de cuestión de principios, es probablemente bueno 1207 00:48:38,730 --> 00:48:40,160 para mantener esa situación. 1208 00:48:40,160 --> 00:48:43,400 Y todos los datos que desea mutar una y otra vez, sólo 1209 00:48:43,400 --> 00:48:46,030 dése una copia de esa variable, sólo para que 1210 00:48:46,030 --> 00:48:47,830 tienen acceso a la original. 1211 00:48:47,830 --> 00:48:51,040 Usted está gastando más de 32 bits, pero la realidad es esta 1212 00:48:51,040 --> 00:48:53,490 computadora tiene, como, dos gigabytes de RAM en estos días, 1213 00:48:53,490 --> 00:48:55,310 y estamos sutilezas más de 32 bits? 1214 00:48:55,310 --> 00:48:56,320 Realmente no es una gran cosa. 1215 00:48:56,320 --> 00:48:58,550 E incluso en este dispositivo aquí, con una media de un concierto o de una 1216 00:48:58,550 --> 00:49:01,700 gigabyte de RAM, 32 bits frente a 64 bits, 1217 00:49:01,700 --> 00:49:02,920 no es una gran cosa. 1218 00:49:02,920 --> 00:49:05,890 Ciertamente, hoy en día, va a ser mucho abrumados por el tamaño 1219 00:49:05,890 --> 00:49:08,400 del programa en sí, que va a ser de varios cientos 1220 00:49:08,400 --> 00:49:10,890 kilobytes, si no en unos pocos megabytes, en estos días. 1221 00:49:10,890 --> 00:49:13,550 >> Preocupaciones tan razonable, no una respuesta correcta. 1222 00:49:13,550 --> 00:49:15,490 Pero al menos esos son los pensamientos que deben empezar a 1223 00:49:15,490 --> 00:49:16,790 pasan por tu mente? 1224 00:49:16,790 --> 00:49:19,600 Debido a que en conjunto de procesadores 0, a pesar de que en realidad sólo se espera 1225 00:49:19,600 --> 00:49:22,340 corrección, o por lo menos que renuncie a varios bugs 1226 00:49:22,340 --> 00:49:25,440 es posible que haya encontrado, a medida que avanzamos, el diseño es 1227 00:49:25,440 --> 00:49:27,910 va a ser otro aspecto clave, tanto de la escritura de código 1228 00:49:27,910 --> 00:49:29,770 y también evaluar nuestro código. 1229 00:49:29,770 --> 00:49:32,310 Y así, al menos, dar cree que este tipo de cosas. 1230 00:49:32,310 --> 00:49:35,590 Y sólo porque algo funciona no quiere decir que sea bueno, 1231 00:49:35,590 --> 00:49:37,130 no quiere decir que esté bien diseñado. 1232 00:49:37,130 --> 00:49:38,820 Y esa es una de las cosas que los becarios de docencia e 1233 00:49:38,820 --> 00:49:41,990 conjuntos de problemas nos ayudará a molestar parte con el tiempo. 1234 00:49:41,990 --> 00:49:45,020 >> Bueno, ¿qué pasa, vamos a decir que esta versión aquí? 1235 00:49:45,020 --> 00:49:49,090 Déjame hacer algo un poco más sexy aquí en un momento. 1236 00:49:49,090 --> 00:49:50,740 En primer lugar quiero deshacerme de esto. 1237 00:49:50,740 --> 00:49:54,120 Y ahora vamos a arreglar este problema gramatical. 1238 00:49:54,120 --> 00:49:58,780 Así pues, en esta versión, quiero fijar la gramática de modo que, 1239 00:49:58,780 --> 00:50:02,460 en lugar de simplemente decir s entre paréntesis, como "botella" 1240 00:50:02,460 --> 00:50:03,360 o "botellas" - 1241 00:50:03,360 --> 00:50:04,900 No quiero cortar esa esquina - 1242 00:50:04,900 --> 00:50:08,350 También quiero imprimir dinámicamente la palabra "botellas" 1243 00:50:08,350 --> 00:50:12,820 o "botella", utilizando para ello estos marcadores de posición% s hoy. 1244 00:50:12,820 --> 00:50:16,550 Así que tengo que comprobar condicional cuál es el valor de i. 1245 00:50:16,550 --> 00:50:19,590 Y si es 1, lo que quiero decir "botella", y si es algo 1246 00:50:19,590 --> 00:50:23,115 otra cosa, quiero decir "botellas". Así que vamos a tratar de hacer esto. 1247 00:50:23,115 --> 00:50:31,340 Así que si i == 1, entonces déjame seguir adelante y declarar - 1248 00:50:31,340 --> 00:50:34,080 Necesito una cadena, así que voy a hacer la cadena s1, porque es la 1249 00:50:34,080 --> 00:50:36,070 primera cadena que me importa en este momento. 1250 00:50:36,070 --> 00:50:40,980 Voy a decir "botella". Y entonces, vamos a ver, la cadena de 1251 00:50:40,980 --> 00:50:43,110 s2 - y voy a explicar a dónde voy en un momento - 1252 00:50:43,110 --> 00:50:47,650 "Botellas". Así que recordar que, en esta canción, tenemos que ser capaces de 1253 00:50:47,650 --> 00:50:50,580 para imprimir las cosas, dos palabras diferentes en potencia. 1254 00:50:50,580 --> 00:50:53,590 Así que si miramos hacia atrás aquí, note que cuando lleguemos a 1255 00:50:53,590 --> 00:50:56,440 este ejemplo aquí ", dos botellas de cerveza en la pared, 1256 00:50:56,440 --> 00:50:59,490 dos botellas de cerveza, tome uno abajo, pásela alrededor ", quiero 1257 00:50:59,490 --> 00:51:02,380 esta cuarta línea de decir ahora "una botella de cerveza en la 1258 00:51:02,380 --> 00:51:04,900 pared ". Así que tengo que decidir, es lo que quiero decir" botellas "o 1259 00:51:04,900 --> 00:51:07,780 "Botella"? Así que voy a decir arbitrariamente, de acuerdo, 1260 00:51:07,780 --> 00:51:10,530 Voy a declarar ahora una variable llamada s1, cadena 1261 00:51:10,530 --> 00:51:13,830 uno, que se va a poner enchufado aquí y aquí también, 1262 00:51:13,830 --> 00:51:16,070 porque estas palabras son siempre idénticos, sólo por el 1263 00:51:16,070 --> 00:51:17,290 naturaleza de la canción. 1264 00:51:17,290 --> 00:51:20,100 Y yo voy a llamar s2 cualquier palabra que quiero 1265 00:51:20,100 --> 00:51:21,560 finalmente aparece aquí abajo. 1266 00:51:21,560 --> 00:51:25,530 Ahora, literalmente, 99 veces de cada 100, que va a ser el 1267 00:51:25,530 --> 00:51:28,820 mismo en ambos casos, porque 3 es plural, es 2 1268 00:51:28,820 --> 00:51:30,200 plural, 4 es plural. 1269 00:51:30,200 --> 00:51:34,640 Pero en este caso de la esquina, donde llegamos a 2 y luego 1, o 1270 00:51:34,640 --> 00:51:37,250 ni siquiera el 1 y luego 0, necesito esta lógica. 1271 00:51:37,250 --> 00:51:41,020 Así que tengo que pasar algún tiempo en mi código de conseguir ese derecho. 1272 00:51:41,020 --> 00:51:47,530 Así que si hago esto, si i == 1, entonces s1 igual a "botella" 1273 00:51:47,530 --> 00:51:52,010 y s2 igual a "botellas", porque esto será para un 1274 00:51:52,010 --> 00:51:56,340 botella, y esto será para botellas 0. 1275 00:51:56,340 --> 00:51:58,250 Y aquí, ¿qué representa esto? 1276 00:51:58,250 --> 00:51:59,780 Para que quede claro. 1277 00:51:59,780 --> 00:52:00,620 Esto es sólo un comentario. 1278 00:52:00,620 --> 00:52:03,730 Así que el hecho de que usted puede tener una sola línea comentarios que significa 1279 00:52:03,730 --> 00:52:06,110 puede comentar su código como este, pero común a otro 1280 00:52:06,110 --> 00:52:09,050 paradigma, también, es que si usted tiene una frase corta que super- 1281 00:52:09,050 --> 00:52:11,410 desea ponerse y es simplemente más fácil de leer para poner 1282 00:52:11,410 --> 00:52:13,270 lo justo al final de la línea de código, puede 1283 00:52:13,270 --> 00:52:15,230 absolutamente hacer algo como esto. 1284 00:52:15,230 --> 00:52:20,150 >> ¿Y ahora qué si lo hago? Porque si no es igual a 1. 1285 00:52:20,150 --> 00:52:21,620 Así explosión igual a - 1286 00:52:21,620 --> 00:52:23,150 signo de exclamación se conoce como "bang". 1287 00:52:23,150 --> 00:52:25,080 Así explosión = 1. 1288 00:52:25,080 --> 00:52:28,530 Así que si no es igual a 1, ¿qué lugar quieres hacer? 1289 00:52:28,530 --> 00:52:31,700 Bueno, la primera palabra que quiero ser qué? 1290 00:52:34,620 --> 00:52:40,030 Así que debe ser una cadena de "botellas" para botellas plurales, 1291 00:52:40,030 --> 00:52:42,440 y entonces esto va a ser plurales "botellas", así, por ahora. 1292 00:52:42,440 --> 00:52:43,800 Y vamos a ver si en realidad esto nos lleva a 1293 00:52:43,800 --> 00:52:44,870 hacia dónde queremos ir. 1294 00:52:44,870 --> 00:52:47,680 Así que ahora si me desplazo hasta aquí, fíjese que estoy conectando 1295 00:52:47,680 --> 00:52:50,170 no sólo yo, sino s1. 1296 00:52:50,170 --> 00:52:51,860 Estoy conectando iy s1. 1297 00:52:51,860 --> 00:52:54,440 Y a continuación, aquí abajo, estoy menos 1, que es el mismo que 1298 00:52:54,440 --> 00:52:55,920 antes, pero s2. 1299 00:52:55,920 --> 00:52:58,730 En otras palabras, quiero que la palabra Inglés a cambios de acuerdo 1300 00:52:58,730 --> 00:52:59,930 en esta lógica. 1301 00:52:59,930 --> 00:53:03,310 Ahora, ya hay algunos problemas en este código. 1302 00:53:03,310 --> 00:53:08,460 ¿Qué se ha roto ya fuera de la puerta aquí? 1303 00:53:08,460 --> 00:53:10,796 ¿Sí? 1304 00:53:10,796 --> 00:53:13,210 AUDIENCIA: [inaudible]. 1305 00:53:13,210 --> 00:53:13,800 >> DAVID J. MALAN: Exactamente. 1306 00:53:13,800 --> 00:53:16,030 Así que ya has violado la lección de alcance. 1307 00:53:16,030 --> 00:53:19,610 Así que he declarado s1 y s2, pero lo he hecho dentro de 1308 00:53:19,610 --> 00:53:22,980 llaves, lo que significa, sí, este código funcionará hasta 1309 00:53:22,980 --> 00:53:27,430 hasta que la línea 42, pero tan pronto como llegué a la línea 43, ¿adivinen qué no 1310 00:53:27,430 --> 00:53:28,900 ya no existe? 1311 00:53:28,900 --> 00:53:32,600 Bueno, ¿adivinen qué ya no está en el alcance - ni s1 o s2. 1312 00:53:32,600 --> 00:53:33,780 Así que tenemos que arreglar esto. 1313 00:53:33,780 --> 00:53:36,180 Así que permítanme eliminar las declaraciones. 1314 00:53:36,180 --> 00:53:39,320 Y voy a dejar los nombres de las variables y eliminar este aquí 1315 00:53:39,320 --> 00:53:40,120 y eliminar este aquí. 1316 00:53:40,120 --> 00:53:43,557 ¿Y en qué líneas deben declarar que realmente estas cosas? 1317 00:53:43,557 --> 00:53:44,960 AUDIENCIA: [inaudible]. 1318 00:53:44,960 --> 00:53:45,410 DAVID J. MALAN: Sí, por lo que probablemente 1319 00:53:45,410 --> 00:53:46,850 hasta aquí, 33-ish. 1320 00:53:46,850 --> 00:53:50,670 Así cadena s1 y s2 cadena. 1321 00:53:50,670 --> 00:53:51,950 Y resulta que, no puedo hacer esto. 1322 00:53:51,950 --> 00:53:54,260 Si usted está declarando dos variables del mismo tipo, 1323 00:53:54,260 --> 00:53:57,420 usted puede simplemente utilizar una coma y hacer que en C. Todos 1324 00:53:57,420 --> 00:53:58,970 bien, así que ahora tengo dos variables - 1325 00:53:58,970 --> 00:53:59,860 s1 y s2. 1326 00:53:59,860 --> 00:54:02,000 Los estoy asignando valores en estos 1327 00:54:02,000 --> 00:54:04,210 condiciones aquí, o aquí. 1328 00:54:04,210 --> 00:54:06,690 Y entonces yo estoy usando abajo. 1329 00:54:06,690 --> 00:54:10,960 ¿Qué tan bien está esto ahora va a funcionar? 1330 00:54:10,960 --> 00:54:12,740 >> Bueno, aún así es un poco buggy, pero vamos a ver por lo menos 1331 00:54:12,740 --> 00:54:13,730 lo lejos que hemos llegado. 1332 00:54:13,730 --> 00:54:16,500 Así que déjame ir adelante y hacer beer3. 1333 00:54:16,500 --> 00:54:17,695 ¿Es esta beer3? 1334 00:54:17,695 --> 00:54:19,410 Sí, este es beer3. 1335 00:54:19,410 --> 00:54:21,510 Y ahora déjame seguir adelante y ejecutar beer3. 1336 00:54:21,510 --> 00:54:23,820 399 99. 1337 00:54:23,820 --> 00:54:25,840 Probablemente podamos pasar la mayor parte de ellos. 1338 00:54:25,840 --> 00:54:29,100 Y aquí abajo, mira eso. 1339 00:54:29,100 --> 00:54:31,110 "Una botella de cerveza en la pared, una botella de cerveza, tomar 1340 00:54:31,110 --> 00:54:34,306 uno abajo, pásela alrededor, 0 botellas de cerveza en la pared. " 1341 00:54:34,306 --> 00:54:37,570 Pero estoy llamando su atención sólo a la mitad de la solución. 1342 00:54:37,570 --> 00:54:39,620 Un poco fastidiado aquí. 1343 00:54:39,620 --> 00:54:43,030 Así que parece que los casos de esquina surgen cuando i es igual a lo que 1344 00:54:43,030 --> 00:54:44,030 dos valores? 1345 00:54:44,030 --> 00:54:45,020 AUDIENCIA: 2, 1. 1346 00:54:45,020 --> 00:54:46,190 DAVID J. MALAN: 2 y 1. 1347 00:54:46,190 --> 00:54:48,180 No 1 y No es 1. 1348 00:54:48,180 --> 00:54:51,890 Es realmente sólo estas dos últimas estrofas de esta canción. 1349 00:54:51,890 --> 00:54:53,890 Entonces, ¿qué debo vez quieres hacer? 1350 00:54:53,890 --> 00:54:58,890 Así que parece haber capturado el caso de que si i es == a 1, 1351 00:54:58,890 --> 00:55:02,240 a continuación, la primera palabra es "botella", pero la segunda palabra 1352 00:55:02,240 --> 00:55:07,230 es "botellas". Pero aquí, quiero cambiar esto sea == 2. 1353 00:55:07,230 --> 00:55:08,570 Y si este es el caso, ¿qué quiero la 1354 00:55:08,570 --> 00:55:09,620 primera palabra que sea? 1355 00:55:09,620 --> 00:55:10,430 AUDIENCIA: "Botellas". 1356 00:55:10,430 --> 00:55:12,890 DAVID J. MALAN: "Botellas", así que para dos botellas. 1357 00:55:12,890 --> 00:55:14,690 Y entonces aquí esta palabra debe ser - 1358 00:55:14,690 --> 00:55:15,340 AUDIENCIA: "Botella". 1359 00:55:15,340 --> 00:55:17,316 DAVID J. MALAN: "Botella", en singular. 1360 00:55:20,430 --> 00:55:25,160 >> Muy bien, vamos a reducir, volver por aquí, volver a ejecutar make, 1361 00:55:25,160 --> 00:55:28,590 vuelva a ejecutar beer3, escriba 99 otra vez. 1362 00:55:28,590 --> 00:55:30,710 Está bien, "Segmentación fallo (core dumped)". 1363 00:55:30,710 --> 00:55:32,780 ¿Qué he hecho mal? 1364 00:55:36,050 --> 00:55:38,722 AUDIENCIA: Usted no tiene un valor de [inaudible]. 1365 00:55:38,722 --> 00:55:40,480 DAVID J. MALAN: Ah, excelente punto. 1366 00:55:40,480 --> 00:55:43,310 Muy bien, ¿y qué está mal aquí? 1367 00:55:43,310 --> 00:55:45,450 Así fallo de segmentación, y estamos realmente va a ver 1368 00:55:45,450 --> 00:55:49,020 esto unas cuantas veces en el futuro, deliberadamente. 1369 00:55:49,020 --> 00:55:51,030 Pero por ahora, ¿qué significa esto realmente? 1370 00:55:51,030 --> 00:55:53,620 Un fallo de segmentación casi siempre significa que usted tiene 1371 00:55:53,620 --> 00:55:56,760 de alguna manera trataron de acceder a la memoria, la memoria RAM en su ordenador, 1372 00:55:56,760 --> 00:56:00,600 que no es de su propiedad, que no se han pedido al 1373 00:56:00,600 --> 00:56:02,050 sistema operativo para. 1374 00:56:02,050 --> 00:56:04,440 Así que en este caso, darse cuenta de lo que he hecho, que es 1375 00:56:04,440 --> 00:56:05,870 defectuoso en mi lógica. 1376 00:56:05,870 --> 00:56:09,500 He asignado s1 y s2 un valor si i es igual a 1. 1377 00:56:09,500 --> 00:56:11,590 También he hecho que si i es igual a 2. 1378 00:56:11,590 --> 00:56:13,710 Pero no lo he hecho en el infinito número de otros 1379 00:56:13,710 --> 00:56:14,690 posibilidades - 1380 00:56:14,690 --> 00:56:17,940 en particular, 3 o 4 o punto, punto, punto, 99. 1381 00:56:17,940 --> 00:56:20,100 Así que una solución para esto podría ser sólo vamos a 1382 00:56:20,100 --> 00:56:22,190 tiene una condición más. 1383 00:56:22,190 --> 00:56:26,780 Y déjame entrar aquí y decir s1 es igual a - 1384 00:56:26,780 --> 00:56:28,180 ¿qué debería estar aquí? 1385 00:56:28,180 --> 00:56:28,750 AUDIENCIA: [inaudible]. 1386 00:56:28,750 --> 00:56:30,460 >> DAVID J. MALAN: "Botellas", porque en el caso común, 1387 00:56:30,460 --> 00:56:32,020 es simplemente lo mismo. 1388 00:56:32,020 --> 00:56:35,580 Así que equivale Lo dijeron ellos, "botellas". Así que para plural 1389 00:56:35,580 --> 00:56:41,010 botellas, y luego hasta aquí, para botellas plurales. 1390 00:56:41,010 --> 00:56:44,580 Bien, ahora quiero volver a mi ventana de terminal, 1391 00:56:44,580 --> 00:56:47,200 recompile, vuelve a correr. 1392 00:56:47,200 --> 00:56:48,440 99. 1393 00:56:48,440 --> 00:56:49,150 ¡Menos mal. 1394 00:56:49,150 --> 00:56:50,610 Y vamos a hacer una simple comprobación rápida. 1395 00:56:50,610 --> 00:56:52,400 Técnicamente, nos gustaría leer todo esto para asegurarse de que 1396 00:56:52,400 --> 00:56:53,370 si es correcta, pero vamos a ver 1397 00:56:53,370 --> 00:56:54,640 los menos culpables conocidos. 1398 00:56:54,640 --> 00:56:57,370 3 botellas, 2 botellas, 2 botellas, 1 1399 00:56:57,370 --> 00:57:00,380 botella, la botella 1, 0 botellas. 1400 00:57:00,380 --> 00:57:03,080 Parece que nos hemos fijado, al menos, por ahora. 1401 00:57:03,080 --> 00:57:06,010 Pero el problema aquí es que lo que es un lío terrible dios es 1402 00:57:06,010 --> 00:57:07,470 sólo para resolver un estúpido 1403 00:57:07,470 --> 00:57:09,540 de un carácter detalle gramatical. 1404 00:57:09,540 --> 00:57:11,150 Así que hay una especie de razón que cortar esta esquina 1405 00:57:11,150 --> 00:57:14,090 anteriormente, debido a que es completamente molesto tener que 1406 00:57:14,090 --> 00:57:15,020 escribir este código mucho. 1407 00:57:15,020 --> 00:57:17,530 Pero resulta que no hay manera un poco más elegantes de 1408 00:57:17,530 --> 00:57:20,110 expresando exactamente lo mismo. 1409 00:57:20,110 --> 00:57:22,040 Y podemos hacerlo de la siguiente. 1410 00:57:22,040 --> 00:57:23,890 >> Permítanme dejar esto en la pantalla por un momento y 1411 00:57:23,890 --> 00:57:27,320 introducir algo conocido como un operador ternario. 1412 00:57:27,320 --> 00:57:29,600 Esto es un poco de una sola línea que acaba de decir para hacer que nuestra 1413 00:57:29,600 --> 00:57:31,880 vive un poco más sexy, según lo prometido. 1414 00:57:31,880 --> 00:57:33,130 Y yo voy a hacer esto de la siguiente manera. 1415 00:57:33,130 --> 00:57:35,810 Dame una cadena llamada s1, y me dejó 1416 00:57:35,810 --> 00:57:37,200 asignar de la siguiente manera. 1417 00:57:37,200 --> 00:57:39,900 (I == 1)? 1418 00:57:39,900 --> 00:57:47,820 "Botella", de lo contrario "botellas". String s2 gets (i == 2)? 1419 00:57:47,820 --> 00:57:52,670 "Botella", de lo contrario "botellas". 1420 00:57:52,670 --> 00:57:57,050 Entonces ¿cuál es la diferencia? 1421 00:57:57,050 --> 00:57:59,370 Estas dos líneas de código, a mi juicio, puede 1422 00:57:59,370 --> 00:58:02,200 reemplazar todo este lío. 1423 00:58:02,200 --> 00:58:04,280 Así que yo lo llamo un lío, porque es como que me frota la 1424 00:58:04,280 --> 00:58:05,940 manera equivocada de que es tantas líneas de código. 1425 00:58:05,940 --> 00:58:06,650 No está mal. 1426 00:58:06,650 --> 00:58:07,700 No es un mal diseño. 1427 00:58:07,700 --> 00:58:10,140 Al igual, esto es perfectamente correcto y perfectamente bien. 1428 00:58:10,140 --> 00:58:12,970 Sin embargo, la codificación se vuelve tedioso si tiene que expresarse así 1429 00:58:12,970 --> 00:58:15,530 maldito específicamente una y otra vez y otra vez con una simple 1430 00:58:15,530 --> 00:58:16,620 escenario como este. 1431 00:58:16,620 --> 00:58:19,470 Así que C tiene algunos atajos, así. 1432 00:58:19,470 --> 00:58:24,270 Así que esencialmente está diciendo declarar una cadena denominada s1 y 1433 00:58:24,270 --> 00:58:32,610 o bien asignar este valor o si este valor es i == - 1434 00:58:32,610 --> 00:58:35,290 lo siento, yo debería decir esto con más claridad. 1435 00:58:35,290 --> 00:58:41,680 Declarar una variable de s1, asignarle este valor si esto es cierto. 1436 00:58:41,680 --> 00:58:44,280 De lo contrario, asignar este valor. 1437 00:58:44,280 --> 00:58:47,220 En otras palabras, esta es una especie de forma de una línea de 1438 00:58:47,220 --> 00:58:51,490 diciendo que si otra cosa pero haciendo un trabajo a lo largo del camino. 1439 00:58:51,490 --> 00:58:55,540 Así que si i es 1, entonces adelante y llamar a esta "botella". Y 1440 00:58:55,540 --> 00:58:59,830 entonces esto otro, lo llaman "botellas". Mientras tanto, el s2, 1441 00:58:59,830 --> 00:59:04,060 segunda palabra que hay que definir, si i es igual a 2, vamos a 1442 00:59:04,060 --> 00:59:08,350 establecer s2 a "botella". De lo contrario, ajústelo en "botellas". ¿Y qué 1443 00:59:08,350 --> 00:59:11,460 esto quiere decir ahora es que puedo pasar por esto y eliminar todos los 1444 00:59:11,460 --> 00:59:12,860 esas líneas de código. 1445 00:59:12,860 --> 00:59:17,220 Y cuando digo, un poco ridículo, que es ahora 1446 00:59:17,220 --> 00:59:20,060 sexy, es más sexy en el género de sentido estilístico. 1447 00:59:20,060 --> 00:59:22,660 El hecho de que funcionalmente, este código es en realidad va a 1448 00:59:22,660 --> 00:59:24,610 hacer exactamente lo mismo. 1449 00:59:24,610 --> 00:59:26,890 Y aunque al principio puede parecer un poco críptico al principio 1450 00:59:26,890 --> 00:59:29,250 vista, ya que no he visto antes de esta construcción, que había 1451 00:59:29,250 --> 00:59:31,850 argumentan que es en última instancia, va a ser mucho más 1452 00:59:31,850 --> 00:59:34,820 fácil de leer y mucho más fácil para nosotros los seres humanos a una especie de 1453 00:59:34,820 --> 00:59:36,830 entender, porque ahora usted puede leer la 1454 00:59:36,830 --> 00:59:38,830 código en una sola línea. 1455 00:59:38,830 --> 00:59:41,550 Todavía es similar en espíritu a la una si, cuando sea 1456 00:59:41,550 --> 00:59:44,920 condición y entonces esto es lo que hay dentro de si y el este 1457 00:59:44,920 --> 00:59:46,480 es lo que hay dentro de la persona. 1458 00:59:46,480 --> 00:59:49,450 Pero podemos hacer esto sólo mucho más elegante. 1459 00:59:49,450 --> 00:59:52,650 >> Y si ahora vuelvo a mi terminal, después de haber eliminado todos 1460 00:59:52,650 --> 00:59:55,530 de las líneas y los reemplazó con sólo los dos, 1461 00:59:55,530 --> 01:00:00,150 recompilar, re-run botellas de cerveza con el 99, el aviso de que mi 1462 01:00:00,150 --> 01:00:03,350 gramática es, de hecho, sigue siendo correcta. 1463 01:00:03,350 --> 01:00:06,160 Así que de nuevo, algo para empezar. 1464 01:00:06,160 --> 01:00:08,840 2 botellas de cerveza, una botella de cerveza. 1465 01:00:08,840 --> 01:00:09,370 Parece correcto. 1466 01:00:09,370 --> 01:00:10,100 Si. 1467 01:00:10,100 --> 01:00:13,900 Así que tenemos una solución mucho más sucinta. 1468 01:00:13,900 --> 01:00:16,020 Así que esto, también, a medida que se sienta más cómodo con C, no 1469 01:00:16,020 --> 01:00:18,630 necesariamente con el conjunto de procesadores primero o segundo incluso, pero 1470 01:00:18,630 --> 01:00:21,170 darse cuenta de que estas construcciones nos permiten hacer las cosas cada vez 1471 01:00:21,170 --> 01:00:22,810 más elegante. 1472 01:00:22,810 --> 01:00:25,200 Ahora vamos a hacer otra cosa aquí. 1473 01:00:25,200 --> 01:00:31,460 Déjenme seguir adelante y abrir return1.c. 1474 01:00:31,460 --> 01:00:34,340 Ahora vamos a empezar a resolver otro problema de una manera que 1475 01:00:34,340 --> 01:00:37,140 nos permite escribir código más sofisticado. 1476 01:00:37,140 --> 01:00:39,960 >> Así que este es un programa pequeño y sencillo cuyo propósito en la vida 1477 01:00:39,960 --> 01:00:41,870 es para incrementar los valores. 1478 01:00:41,870 --> 01:00:43,100 Y, de hecho, vamos a dar un paso atrás. 1479 01:00:43,100 --> 01:00:44,400 Déjame hacer esto manualmente. 1480 01:00:44,400 --> 01:00:52,200 Déjame hacer incluir y int main (void). 1481 01:00:52,200 --> 01:00:53,450 Y déjame llamar a este increment.c. 1482 01:00:57,150 --> 01:00:58,570 ¿Y qué es lo que quiero hacer? 1483 01:00:58,570 --> 01:01:02,240 Voy a seguir adelante y decir algo como - 1484 01:01:02,240 --> 01:01:04,280 vamos a llamar a los números de la misma - 1485 01:01:04,280 --> 01:01:04,980 x int. 1486 01:01:04,980 --> 01:01:13,670 Así int x obtiene 2; printf x es% d, línea nueva, x. 1487 01:01:13,670 --> 01:01:16,780 Así que estoy escribiendo rápido, pero tipo de cosas familiares ahora. 1488 01:01:16,780 --> 01:01:18,830 Entonces voy a hacer x + +. 1489 01:01:18,830 --> 01:01:21,710 Entonces me voy a imprimir la misma frase de nuevo. 1490 01:01:21,710 --> 01:01:24,550 Y luego voy a devolver 0 sólo para salir del programa. 1491 01:01:24,550 --> 01:01:25,960 De acuerdo, este es un programa que 1492 01:01:25,960 --> 01:01:26,960 incrementos de un número. 1493 01:01:26,960 --> 01:01:29,830 Se va a inicializar primero algo a 2, y entonces es 1494 01:01:29,830 --> 01:01:33,470 va a incrementar e imprimirlo de nuevo. 1495 01:01:33,470 --> 01:01:36,930 >> Así que vamos a correr incremento, programa increíblemente simple. 1496 01:01:36,930 --> 01:01:40,940 Pero supongamos ahora que quiero para el cubo de valor, también lo hacen 1497 01:01:40,940 --> 01:01:42,490 algo un tanto arbitraria. 1498 01:01:42,490 --> 01:01:45,140 Y yo realmente quiero hacer x obtiene el cubo de la misma. 1499 01:01:45,140 --> 01:01:47,570 Así que podría utilizar lo que se llama la función pow, pero no lo hago 1500 01:01:47,570 --> 01:01:48,650 realmente sabe dónde está todavía. 1501 01:01:48,650 --> 01:01:50,580 Así que voy a hacerlo de la manera pasada de moda. 1502 01:01:50,580 --> 01:01:54,550 x veces esto es igual a X veces x por x. 1503 01:01:54,550 --> 01:01:56,880 Así que estoy cubicar el valor, multiplicarlo por sí mismo de nuevo 1504 01:01:56,880 --> 01:02:00,440 y una y otra vez, para que podamos conseguir el poder 1505 01:02:00,440 --> 01:02:02,050 de 3 en este caso. 1506 01:02:02,050 --> 01:02:06,000 Así que ahora los números que debo imprimir debe ser, como veremos 1507 01:02:06,000 --> 01:02:08,450 aquí - hacer de incremento, por lo que en realidad no es realmente incrementar 1508 01:02:08,450 --> 01:02:10,260 ya, pero vamos a dejar el nombre por sí solo - 1509 01:02:10,260 --> 01:02:11,590 2 y luego 8. 1510 01:02:11,590 --> 01:02:17,670 Ahora, tenemos el comienzo de una oportunidad para el perfeccionamiento 1511 01:02:17,670 --> 01:02:21,570 aquí, por lo que esta cosa cubicación de multiplicar un número 1512 01:02:21,570 --> 01:02:24,680 por sí mismo por sí mismo por sí mismo se siente como esto sólo podría ser 1513 01:02:24,680 --> 01:02:27,920 útil tener una función, al igual que alguien decidió 1514 01:02:27,920 --> 01:02:30,430 años atrás - ya sabes, un poco útil si uno de nosotros se sienta 1515 01:02:30,430 --> 01:02:33,120 y escribe printf para que el resto del mundo puede usarlo, 1516 01:02:33,120 --> 01:02:36,160 ¿Por qué no nos sentamos a escribir una función llamada cube 1517 01:02:36,160 --> 01:02:39,250 que hace esto cubicación para nosotros, así que no tiene que manualmente 1518 01:02:39,250 --> 01:02:41,500 poner en práctica el concepto de cubicar valores aquí? 1519 01:02:41,500 --> 01:02:44,040 >> Así, un ejemplo sencillo, pero vamos a seguir adelante y utilizar esto como una 1520 01:02:44,040 --> 01:02:46,280 oportunidad de escribir nuestra propia función. 1521 01:02:46,280 --> 01:02:49,110 Así que hasta ahora, sólo hemos utilizado principal, y hemos utilizado otros 1522 01:02:49,110 --> 01:02:51,780 funciones de las personas, pero no hemos escrito nuestra. 1523 01:02:51,780 --> 01:02:52,650 Así que aquí vamos. 1524 01:02:52,650 --> 01:02:56,330 Voy a seguir adelante y escribir una función llamada cube. 1525 01:02:56,330 --> 01:02:58,490 Y voy a tener que tomar una entrada. 1526 01:02:58,490 --> 01:03:02,070 Por lo que su aportación va a ser un número entero. 1527 01:03:02,070 --> 01:03:03,570 Y qué va a hacer? 1528 01:03:03,570 --> 01:03:08,500 Va a declarar int salida = entrada de tiempos entrada 1529 01:03:08,500 --> 01:03:09,880 tiempos de entrada. 1530 01:03:09,880 --> 01:03:12,190 Y luego se va a devolver ese producto. 1531 01:03:12,190 --> 01:03:14,500 Y entonces tengo que ser específico ahora. 1532 01:03:14,500 --> 01:03:16,820 Esta función va a devolver un int. 1533 01:03:16,820 --> 01:03:19,130 Así que aquí es, entonces, cómo le gustaría escribir sus propias funciones. 1534 01:03:19,130 --> 01:03:20,850 En primer lugar, decidir cuál es el nombre de su 1535 01:03:20,850 --> 01:03:21,720 función va a ser. 1536 01:03:21,720 --> 01:03:23,964 Y, en general, algo explicativo es bueno, así que voy yo 1537 01:03:23,964 --> 01:03:25,060 llaman cubo. 1538 01:03:25,060 --> 01:03:27,180 Entonces usted tiene que especificar lo que se va a devolver, lo que es 1539 01:03:27,180 --> 01:03:28,240 su salida va a ser. 1540 01:03:28,240 --> 01:03:29,595 Y no tenemos muchas opciones todavía. 1541 01:03:29,595 --> 01:03:32,260 Int, char, float, bool, string. 1542 01:03:32,260 --> 01:03:34,260 Por ahora, me voy a quedar con un int, porque lo quiero 1543 01:03:34,260 --> 01:03:35,880 para devolver un entero. 1544 01:03:35,880 --> 01:03:38,770 Entonces usted tiene que especificar cuáles son sus insumos, si los hay, son. 1545 01:03:38,770 --> 01:03:41,570 Y si cube toma un argumento, toma algo entre 1546 01:03:41,570 --> 01:03:44,970 paréntesis, usted tiene que dar ese argumento un nombre para que 1547 01:03:44,970 --> 01:03:47,860 se le puede llamar algo como lo estamos implementando o escribir 1548 01:03:47,860 --> 01:03:50,550 esta función, y hay que darle un tipo, que en este 1549 01:03:50,550 --> 01:03:51,810 caso va a ser int. 1550 01:03:51,810 --> 01:03:54,690 Así que en resumen, el cubo es una función que toma un entero 1551 01:03:54,690 --> 01:03:57,560 como entrada y devuelve un entero como salida. 1552 01:03:57,560 --> 01:03:59,240 >> Entonces, ¿qué hacer con esa entrada? 1553 01:03:59,240 --> 01:04:03,710 Pues bien, en la línea 14, declaro una variable de salida se llama, y ​​yo 1554 01:04:03,710 --> 01:04:07,410 asignarle el valor, Entrada de veces veces de entrada. 1555 01:04:07,410 --> 01:04:11,490 Y entonces vuelvo salida. 1556 01:04:11,490 --> 01:04:14,890 Entonces, ¿cómo puedo usar esto entonces? 1557 01:04:14,890 --> 01:04:19,210 ¿Qué puedo cambiar estos caracteres resaltados en línea 1558 01:04:19,210 --> 01:04:21,006 7 sea, ¿te parece? 1559 01:04:21,006 --> 01:04:21,800 AUDIENCIA: [inaudible]. 1560 01:04:21,800 --> 01:04:25,570 DAVID J. MALAN: Sí, así cubo de x. 1561 01:04:25,570 --> 01:04:28,290 Entonces x es una variable, lo que significa que tiene algún valor. 1562 01:04:28,290 --> 01:04:30,190 Afortunadamente, es de tipo entero. 1563 01:04:30,190 --> 01:04:34,280 Y debido a que x es un int, eso significa que puedo pasar a cubo. 1564 01:04:34,280 --> 01:04:39,500 Y a pesar de que estoy reemplazando el valor de x con el valor 1565 01:04:39,500 --> 01:04:42,780 x de cubo, como ha sido el caso hasta ahora, cada vez que 1566 01:04:42,780 --> 01:04:46,150 tener signo igual y una línea de código, las cosas en el derecho 1567 01:04:46,150 --> 01:04:49,090 se ejecuta y luego se asigna a la 1568 01:04:49,090 --> 01:04:50,150 valor de la izquierda. 1569 01:04:50,150 --> 01:04:52,950 Así que el orden de las operaciones es como esperaríamos. 1570 01:04:52,950 --> 01:04:56,620 Así funciona esto? 1571 01:04:56,620 --> 01:04:58,410 Bueno, déjame bajar aquí. 1572 01:04:58,410 --> 01:04:59,970 Permítanme abrir mi ventana de terminal. 1573 01:04:59,970 --> 01:05:03,610 Permítanme hacen incremento, Intro. 1574 01:05:03,610 --> 01:05:07,140 "Declaración implícita de 'cubo' no es válido en función 1575 01:05:07,140 --> 01:05:13,700 C99. "Como un aparte, C99 se refiere al lenguaje C, ya que era 1576 01:05:13,700 --> 01:05:16,790 definido en 1999, que era una actualización sobre la versión de 1577 01:05:16,790 --> 01:05:19,360 1989, que es una actualización sobre el original. 1578 01:05:19,360 --> 01:05:21,740 Así que eso es todo lo que eso significa. 1579 01:05:21,740 --> 01:05:24,250 >> Entonces, ¿qué significa que "la declaración implícita de 1580 01:05:24,250 --> 01:05:26,790 "cubo" función no es válido? "Es justo aquí. 1581 01:05:26,790 --> 01:05:28,430 Es allí, en la línea 12. 1582 01:05:28,430 --> 01:05:30,460 AUDIENCIA: [inaudible]. 1583 01:05:30,460 --> 01:05:30,730 DAVID J. MALAN: ¿Qué es eso? 1584 01:05:30,730 --> 01:05:32,470 AUDIENCIA: No es antes. 1585 01:05:32,470 --> 01:05:33,540 DAVID J. MALAN: No es antes. 1586 01:05:33,540 --> 01:05:34,740 Así que esta es la cosa. 1587 01:05:34,740 --> 01:05:38,190 C es un poco estúpido, o los compiladores de C son un poco estúpido. 1588 01:05:38,190 --> 01:05:41,060 Realmente sólo hacer lo que les dicen que hagan. 1589 01:05:41,060 --> 01:05:44,770 Y, en particular, sólo leer su código de arriba a abajo, 1590 01:05:44,770 --> 01:05:45,620 de izquierda a derecha. 1591 01:05:45,620 --> 01:05:49,140 Así que si el compilador, Clang, está leyendo el código, línea 1, 1592 01:05:49,140 --> 01:05:50,120 se da cuenta de cómo hacer esto. 1593 01:05:50,120 --> 01:05:50,940 Oh, aquí llega principal. 1594 01:05:50,940 --> 01:05:53,000 Bueno, déjame seguir adelante y declarar una variable x. 1595 01:05:53,000 --> 01:05:54,160 Permítanme imprimir algo. 1596 01:05:54,160 --> 01:05:55,890 Línea 7, ¿qué diablos es el cubo? 1597 01:05:55,890 --> 01:05:58,230 No es declarada en stdio.h. 1598 01:05:58,230 --> 01:06:00,950 No viene con C. No tengo ni idea de qué hacer. 1599 01:06:00,950 --> 01:06:03,960 Y así Clang sólo rescata y se cierra con el mensaje de error. 1600 01:06:03,960 --> 01:06:05,850 Así que podemos arreglar esto en un par de maneras. 1601 01:06:05,850 --> 01:06:10,530 Podemos enseñar lo Clang cubo es donde con sólo mover el 1602 01:06:10,530 --> 01:06:11,820 declaración es. 1603 01:06:11,820 --> 01:06:14,640 Así que corté y pegué encima de principal. 1604 01:06:14,640 --> 01:06:17,770 Ahora se dan cuenta que sólo porque principal ya no es primero, es 1605 01:06:17,770 --> 01:06:19,150 siendo ejecutado por defecto. 1606 01:06:19,150 --> 01:06:20,060 Principal es principal. 1607 01:06:20,060 --> 01:06:21,022 Es el nombre de la función por defecto. 1608 01:06:21,022 --> 01:06:22,930 No importa dónde se encuentra en un archivo. 1609 01:06:22,930 --> 01:06:26,910 Pero al menos ahora Clang ha visto cubo antes de usarlo. 1610 01:06:26,910 --> 01:06:28,500 Así que vamos a ver si Clang es más feliz ahora. 1611 01:06:28,500 --> 01:06:31,410 Haga incremento, sí compilar este momento. 1612 01:06:31,410 --> 01:06:33,060 >> Déjame correr incremento. 1613 01:06:33,060 --> 01:06:34,810 Y, de hecho, parece estar funcionando. 1614 01:06:34,810 --> 01:06:36,810 Ahora, usted puede llegar a escenarios donde eventualmente 1615 01:06:36,810 --> 01:06:38,650 no es factible poner todas las funciones 1616 01:06:38,650 --> 01:06:39,740 por encima de cualquier otra función. 1617 01:06:39,740 --> 01:06:42,140 Te quedas atascado en este bucle infinito en la realidad, 1618 01:06:42,140 --> 01:06:43,480 donde este tipo quiere estar aquí, pero este 1619 01:06:43,480 --> 01:06:44,390 individuo tiene que estar allí. 1620 01:06:44,390 --> 01:06:45,830 Así que eso no siempre funciona. 1621 01:06:45,830 --> 01:06:49,020 Así que gracias a Dios, C tiene una solución más elegante. 1622 01:06:49,020 --> 01:06:50,790 Voy a poner esto donde estaba, sólo porque 1623 01:06:50,790 --> 01:06:53,390 prefiere, como una cuestión de principio, que siempre lo principal 1624 01:06:53,390 --> 01:06:55,550 en la parte superior, porque es sólo agradable ver lo que este programa 1625 01:06:55,550 --> 01:06:56,920 hace por defecto. 1626 01:06:56,920 --> 01:06:58,950 Y lo que voy a hacer aquí es declarar lo que se llama 1627 01:06:58,950 --> 01:07:00,250 un prototipo. 1628 01:07:00,250 --> 01:07:05,730 Voy a volver a declarar mi función cúbica, literalmente, 1629 01:07:05,730 --> 01:07:07,180 copiar y pegar. 1630 01:07:07,180 --> 01:07:08,290 En realidad, eso no es literal. 1631 01:07:08,290 --> 01:07:13,060 Así que, literalmente, copiar y pegar la línea 15 1632 01:07:13,060 --> 01:07:15,160 por encima de la línea 6. 1633 01:07:15,160 --> 01:07:17,010 No importa lo que la línea esta se haya apuntado. 1634 01:07:17,010 --> 01:07:18,380 Le pasa a estar en la línea 4. 1635 01:07:18,380 --> 01:07:19,950 Pero tiene que ser antes de principal. 1636 01:07:19,950 --> 01:07:21,150 Pero note la diferencia. 1637 01:07:21,150 --> 01:07:24,100 Línea 4 termina con un punto y coma, lo que significa bueno, 1638 01:07:24,100 --> 01:07:27,510 Clang, toma mi palabra de que existe una función 1639 01:07:27,510 --> 01:07:31,350 llamado cubo que toma un int y devuelve un int. 1640 01:07:31,350 --> 01:07:33,020 Pero no voy a decirte lo que es. 1641 01:07:33,020 --> 01:07:35,180 Sólo sé que me comprometo a decirle el tiempo. 1642 01:07:35,180 --> 01:07:38,490 Y de hecho, ahora que está bien que se trata a continuación. 1643 01:07:38,490 --> 01:07:41,275 >> Así que este es generalmente mejor, porque entonces en la parte superior de 1644 01:07:41,275 --> 01:07:44,240 su archivo, usted puede recitar de un tirón, de tiro rápido, una línea 1645 01:07:44,240 --> 01:07:46,470 cada uno, lo que los nombres de sus funciones son, cuál es su 1646 01:07:46,470 --> 01:07:49,120 las entradas son, cuáles son sus salidas son. 1647 01:07:49,120 --> 01:07:52,210 Y para ser más claro, la entrada general significa discusión o 1648 01:07:52,210 --> 01:07:54,110 parámetro, sinónimos. 1649 01:07:54,110 --> 01:07:56,890 Salida significa valor de retorno, lo que hace 1650 01:07:56,890 --> 01:07:58,700 mano hacia mí. 1651 01:07:58,700 --> 01:08:03,420 Así que en este caso que nos ocupa, el cubo se ha declarado en la parte superior, pero 1652 01:08:03,420 --> 01:08:06,940 define, también conocido como aplicarse, en la parte inferior. 1653 01:08:06,940 --> 01:08:09,620 Así que ahora vamos a volver aquí y volver a hacer éste. 1654 01:08:09,620 --> 01:08:13,430 Así que ahora vamos a seguir adelante y volver a ejecutar make, vuelva a ejecutar incremento. 1655 01:08:13,430 --> 01:08:16,500 Y ahora parece estar funcionando muy bien. 1656 01:08:16,500 --> 01:08:19,450 Así que ahora podemos seguir adelante y factorizar algo así como la 1657 01:08:19,450 --> 01:08:23,720 cerveza ejemplo en esta cuarta versión. 1658 01:08:23,720 --> 01:08:25,590 Así que me baje aquí. 1659 01:08:25,590 --> 01:08:28,149 Y note que tipo de tomó en serio esta lección ahora. 1660 01:08:28,149 --> 01:08:31,140 El hecho de que yo estaba cantando la misma estrofa una y otra 1661 01:08:31,140 --> 01:08:34,130 una y otra vez, la línea de coro en la canción misma, se sintió 1662 01:08:34,130 --> 01:08:36,439 Como por qué no lo hago factor que en una función? 1663 01:08:36,439 --> 01:08:38,470 Y de hecho, esta debe ser una de las motivaciones. 1664 01:08:38,470 --> 01:08:40,960 Además del hecho de que otra persona en el mundo que desee 1665 01:08:40,960 --> 01:08:42,390 utilizar una función de cubo - 1666 01:08:42,390 --> 01:08:44,560 esa es una buena razón para factorizar algo y escribir su 1667 01:08:44,560 --> 01:08:45,720 función personalizada - 1668 01:08:45,720 --> 01:08:48,720 si hay un trozo de código en su programa que sólo hace 1669 01:08:48,720 --> 01:08:51,370 sentido conceptual, que tipo de necesidad de darle un 1670 01:08:51,370 --> 01:08:53,740 nombre - como en este caso, chorus - 1671 01:08:53,740 --> 01:08:57,380 entonces usted puede escribir de manera similar que como una función separada. 1672 01:08:57,380 --> 01:08:59,560 Usted no tiene que escribir todo en principal si sólo 1673 01:08:59,560 --> 01:09:02,609 se siente más limpio para separar y darle un nombre. 1674 01:09:02,609 --> 01:09:05,529 >> Así que en este caso aquí, fíjate que tengo un comentario sobre 1675 01:09:05,529 --> 01:09:06,859 esta función que sólo canta sobre el 1676 01:09:06,859 --> 01:09:08,630 números especificados de botellas. 1677 01:09:08,630 --> 01:09:10,609 Nótese aquí que no es necesario llamar a estos 1678 01:09:10,609 --> 01:09:12,520 cosas de entrada y salida. 1679 01:09:12,520 --> 01:09:16,090 De hecho, esta vez me acaba de llamar mi entrada B para botella. 1680 01:09:16,090 --> 01:09:19,960 Y fíjense aquí, nula sugiere qué? 1681 01:09:19,960 --> 01:09:21,309 Ese coro - 1682 01:09:21,309 --> 01:09:22,660 AUDIENCIA: No se lo devuelva. 1683 01:09:22,660 --> 01:09:23,870 DAVID J. MALAN: No se devuelve ningún valor. 1684 01:09:23,870 --> 01:09:26,800 Y, en efecto, las funciones no tienen que devolver valores. 1685 01:09:26,800 --> 01:09:28,060 Ellos sólo pueden hacer algo. 1686 01:09:28,060 --> 01:09:30,270 Ellos pueden tener lo que se denominan efectos secundarios, que en este 1687 01:09:30,270 --> 01:09:33,109 caso es sólo un montón de impresión en la pantalla. 1688 01:09:33,109 --> 01:09:36,580 Así que notar que este código aquí, literalmente robó a 1689 01:09:36,580 --> 01:09:37,680 el ejemplo anterior. 1690 01:09:37,680 --> 01:09:39,930 La única diferencia es que en lugar de utilizar como mi 1691 01:09:39,930 --> 01:09:42,890 variable, ahora lo estoy usando b como mi variable. 1692 01:09:42,890 --> 01:09:45,880 Así que tengo aquí abajo b, b tengo aquí, tengo b 1693 01:09:45,880 --> 01:09:47,109 menos 1 aquí abajo. 1694 01:09:47,109 --> 01:09:49,279 Pero el código es exactamente el mismo. 1695 01:09:49,279 --> 01:09:52,529 Pero a mostrar ahora cómo podemos utilizar esto, déjame ir 1696 01:09:52,529 --> 01:09:56,780 adelante y cambiar realmente se trata de un bucle for. 1697 01:09:56,780 --> 01:10:03,850 for (int i = n; i> n; i -). 1698 01:10:03,850 --> 01:10:06,230 >> Así que he robado que a partir de nuestro ejemplo anterior. 1699 01:10:06,230 --> 01:10:08,970 Anteriormente, está en la línea 37, que habría empezado 1700 01:10:08,970 --> 01:10:10,640 cantando esta canción molesto. 1701 01:10:10,640 --> 01:10:15,810 Pero en cambio, yo sólo voy a llamar ahora coro de i. 1702 01:10:15,810 --> 01:10:16,870 Hecho. 1703 01:10:16,870 --> 01:10:20,260 Así que ahora en cada iteración de este bucle, llamo a este otro 1704 01:10:20,260 --> 01:10:22,220 función, coro, que se me ocurrió escribir. 1705 01:10:22,220 --> 01:10:24,110 No fue escrito por alguien más años. 1706 01:10:24,110 --> 01:10:27,930 Pero coro, por su parte, utiliza printf para imprimir 1707 01:10:27,930 --> 01:10:29,840 a cabo estas cuatro líneas. 1708 01:10:29,840 --> 01:10:32,720 Pero el hecho de que estoy llamando a coro una y otra vez en una 1709 01:10:32,720 --> 01:10:35,900 bucle significa que voy a conseguir, al final, el 1710 01:10:35,900 --> 01:10:39,310 canción exactamente igual que tengo hasta ahora. 1711 01:10:39,310 --> 01:10:42,130 Así que en resumen, ahora si miro hacia atrás en mi código, a pesar de que 1712 01:10:42,130 --> 01:10:44,240 funcionalmente es equivalente cuenta de que es 1713 01:10:44,240 --> 01:10:46,020 empezando a llegar aún más legible. 1714 01:10:46,020 --> 01:10:48,410 Yo no sé exactamente cómo getInt 1715 01:10:48,410 --> 01:10:49,250 se implementa. 1716 01:10:49,250 --> 01:10:52,050 Francamente, no sé cómo se implementa coro. 1717 01:10:52,050 --> 01:10:52,970 Pero no me importa. 1718 01:10:52,970 --> 01:10:55,620 No me importa, porque ahora puedo ordenar de, como ser humano, leer 1719 01:10:55,620 --> 01:10:57,050 este fondo de arriba. 1720 01:10:57,050 --> 01:10:59,950 Y debido a que las funciones se denominan de acuerdo con lo que 1721 01:10:59,950 --> 01:11:02,910 hacer, mi código es cada vez más fácil de leer. 1722 01:11:02,910 --> 01:11:05,190 Y como nuestros programas de conseguir mucho más complejo - 1723 01:11:05,190 --> 01:11:07,220 a finales del semestre, se le escribiendo cientos de líneas 1724 01:11:07,220 --> 01:11:10,970 de código en lenguajes como PHP y JavaScript y similares - 1725 01:11:10,970 --> 01:11:13,550 usted encontrará que es mucho más fácil que hacer un seguimiento de 1726 01:11:13,550 --> 01:11:14,080 lo que has hecho. 1727 01:11:14,080 --> 01:11:15,810 Y cuando empiece a colaborar con amigos o 1728 01:11:15,810 --> 01:11:19,010 socios o compañeros de trabajo, usted será capaz de escribir mucho más 1729 01:11:19,010 --> 01:11:22,910 programas masivos de comenzar a hacer ejercicio estos básicos 1730 01:11:22,910 --> 01:11:23,990 bloques de construcción. 1731 01:11:23,990 --> 01:11:25,550 >> Así que con eso dicho, ¿por qué no lo llaman un día? 1732 01:11:25,550 --> 01:11:27,190 Y nos vemos el miércoles. 1733 01:11:27,190 --> 01:11:33,611 [Aplausos]