1 00:00:07,420 --> 00:00:08,160 [Powered by Google Translate] DAVID J. MALAN: Muy bien. 2 00:00:08,160 --> 00:00:11,170 Esto es CS50, y este es el final de la segunda semana. 3 00:00:11,170 --> 00:00:14,650 Si usted espera a tener hambre alrededor de esta hora mañana, sé que vamos 4 00:00:14,650 --> 00:00:18,920 que convoque a un pequeño grupo de mañana, jueves, 1:15 PM. 5 00:00:18,920 --> 00:00:21,460 Hay un URL aquí si desea confirmar su asistencia. 6 00:00:21,460 --> 00:00:25,270 El espacio es limitado, así que por favor, perdóname si el formulario se ha llenado hasta el momento en que 7 00:00:25,270 --> 00:00:26,680 rellenar esto. 8 00:00:26,680 --> 00:00:29,400 Otra URL embargo, que puede ser de interés es la siguiente. 9 00:00:29,400 --> 00:00:32,409 >> Así que en casi un mes, el curso se va a poner a disposición 10 00:00:32,409 --> 00:00:36,090 tanto más ampliamente a través de EDX, a través del cual la gente en el Internet será 11 00:00:36,090 --> 00:00:39,580 capaz de seguir adelante, participar en el curso muy activamente, de hecho. 12 00:00:39,580 --> 00:00:43,070 Se va a utilizar el aparato CS50 CS50 y discutir y la mayor parte del 13 00:00:43,070 --> 00:00:45,840 diversas herramientas de software que ya han estado usando este semestre. 14 00:00:45,840 --> 00:00:49,030 Y una de las iniciativas que nos gustaría tomar como un experimento de este año 15 00:00:49,030 --> 00:00:53,120 es ver hasta qué punto el contenido que se puede traducir en otro hablada y 16 00:00:53,120 --> 00:00:54,110 lenguas escritas. 17 00:00:54,110 --> 00:00:58,000 Así que si usted podría tener interés en participar en este proyecto, en el que 18 00:00:58,000 --> 00:01:02,090 vamos a ofrecer transcripciones en inglés y subtítulos en el curso de 19 00:01:02,090 --> 00:01:05,190 conferencias y pantalones cortos y seminarios y secciones y similares - 20 00:01:05,190 --> 00:01:08,700 si usted habla con fluidez y escribir con fluidez otro idioma, lo haríamos 21 00:01:08,700 --> 00:01:12,240 encantaría participar en este proyecto, el cual te llevará a una o más de las 22 00:01:12,240 --> 00:01:15,340 videos, traduciéndolos en un idioma que conozco bastante bien. 23 00:01:15,340 --> 00:01:19,050 Para que os hagáis una idea de la interfaz, hay una interfaz de usuario basada en web 24 00:01:19,050 --> 00:01:22,330 que vamos a utilizar, que creará esencialmente una interfaz de usuario de esta manera. 25 00:01:22,330 --> 00:01:24,520 Esto me estaba enseñando algunos de Halloween atrás. 26 00:01:24,520 --> 00:01:27,710 Y en el lado derecho hay en negro al lado de estas marcas de tiempo, 27 00:01:27,710 --> 00:01:31,300 podrás ver las varias cosas que salieron de mi boca ese día. 28 00:01:31,300 --> 00:01:34,660 Y luego, por debajo de él, usted será capaz de traducir a otro idioma. 29 00:01:34,660 --> 00:01:37,840 Exactamente lo que el mapeo es entre, en este caso, Inglés 30 00:01:37,840 --> 00:01:38,660 y, por ejemplo, el español. 31 00:01:38,660 --> 00:01:40,480 Así que en realidad es un muy fácil de usar herramienta. 32 00:01:40,480 --> 00:01:43,690 Puede rebobinar y avance rápido muy fácilmente con el teclado. 33 00:01:43,690 --> 00:01:46,710 Así que si usted desea participar en este experimento y que sus palabras 34 00:01:46,710 --> 00:01:50,730 visto y leído por miles de potenciales personas por ahí, por favor, me siento 35 00:01:50,730 --> 00:01:51,960 libertad de participar. 36 00:01:51,960 --> 00:01:56,940 >> Ahora una palabra sobre el gatito del lunes, para que no nos han enviado un exceso 37 00:01:56,940 --> 00:01:58,120 mensaje de miedo. 38 00:01:58,120 --> 00:02:02,130 Se dan cuenta de que a medida que las horas de oficina y como sugieren las secciones sugieren, la 39 00:02:02,130 --> 00:02:05,110 diseño del curso es mucho para que los estudiantes y colaborar 40 00:02:05,110 --> 00:02:09,250 hablando de trabajar a través de los boletines de problemas y problemas juntos. 41 00:02:09,250 --> 00:02:13,630 Y realmente la línea sólo se reduce a, una vez más, el trabajo que en última instancia 42 00:02:13,630 --> 00:02:16,420 deben presentar debe ser la suya. 43 00:02:16,420 --> 00:02:19,080 Y lo que es, con toda honestidad - en horario de oficina, es totalmente normal - 44 00:02:19,080 --> 00:02:21,560 que está totalmente de esperar, incluso - a estar chateando con algunos 45 00:02:21,560 --> 00:02:22,370 amigos a tu lado. 46 00:02:22,370 --> 00:02:25,240 Si él o ella está luchando con algún tema, y ​​usted es como, oh, bueno vamos 47 00:02:25,240 --> 00:02:27,750 voy a dar una idea de alguna línea de código que he escrito. 48 00:02:27,750 --> 00:02:28,290 Eso está bien. 49 00:02:28,290 --> 00:02:28,700 Eso sucede. 50 00:02:28,700 --> 00:02:31,580 Y eso es muy favorable, creo que, con el proceso de aprendizaje. 51 00:02:31,580 --> 00:02:35,270 Cuando la línea, de nuevo, se cruza es cuando la cabeza es de tipo inclinado sobre 52 00:02:35,270 --> 00:02:38,800 aquí durante unos segundos demasiados o minutos para que realmente tenga sólo 53 00:02:38,800 --> 00:02:41,250 sido una oportunidad de desbloqueo para su amigo. 54 00:02:41,250 --> 00:02:43,870 Y ciertamente, cuando las cosas se intercambian a través de correo electrónico y Dropbox y 55 00:02:43,870 --> 00:02:45,350 similares, allí también está la línea. 56 00:02:45,350 --> 00:02:48,940 Así que por todos los medios, se sientan cómodos y se sienten animados a charlar con los amigos 57 00:02:48,940 --> 00:02:51,270 y compañeros acerca de conjuntos de procesadores y más. 58 00:02:51,270 --> 00:02:54,680 Y sólo se dan cuenta de que lo que en última instancia, someter debería ser el 59 00:02:54,680 --> 00:02:57,780 producto de su creación y no otra persona. 60 00:02:57,780 --> 00:03:01,010 >> Así pues, en la misma línea de adorables criaturas, es posible que 61 00:03:01,010 --> 00:03:02,820 saben de este tipo aquí. 62 00:03:02,820 --> 00:03:06,180 Así que esta es una película terriblemente cursi de años atrás. 63 00:03:06,180 --> 00:03:08,680 ¿Hay alguien aquí Spaceballs visto? 64 00:03:08,680 --> 00:03:09,120 Está bien. 65 00:03:09,120 --> 00:03:10,220 Así que un buen número aquí. 66 00:03:10,220 --> 00:03:13,840 Así que esta es nuestra manera maravillosamente académico de introducir hoy en última instancia, 67 00:03:13,840 --> 00:03:15,130 el concepto de criptografía. 68 00:03:15,130 --> 00:03:19,010 Y así uno de los problemas específicos de dominio para conjunto de procesadores 2, que entrará 69 00:03:19,010 --> 00:03:22,770 mañana por la noche tarde, es sumergirse en el mundo de la criptografía, que 70 00:03:22,770 --> 00:03:26,380 es el arte de cifrar o codificar información. 71 00:03:26,380 --> 00:03:30,160 Y en última instancia, se relaciona con el mundo de la seguridad. 72 00:03:30,160 --> 00:03:34,440 >> Ahora la seguridad para la mayoría de nosotros se presenta en forma de mecanismos bastante mundanas. 73 00:03:34,440 --> 00:03:36,920 Todos nosotros tenemos nombres de usuario y contraseñas. 74 00:03:36,920 --> 00:03:41,350 Y todos tenemos nombres de usuario y contraseñas muy malos, muy probablemente. 75 00:03:41,350 --> 00:03:45,250 Si la contraseña es la misma en varios sitios web, que probablemente no es 76 00:03:45,250 --> 00:03:47,920 la mejor idea, como veremos hacia el final del semestre. 77 00:03:47,920 --> 00:03:51,680 Si la contraseña se escribe en una nota adhesiva - no es broma - en su 78 00:03:51,680 --> 00:03:55,130 monitor, que tampoco es necesariamente el mejor diseño, pero bastante común una 79 00:03:55,130 --> 00:03:56,140 fenómeno. 80 00:03:56,140 --> 00:04:00,420 Y si usted no está utilizando la criptografía para cifrar las contraseñas, que son 81 00:04:00,420 --> 00:04:01,610 especialmente vulnerables. 82 00:04:01,610 --> 00:04:04,670 Así que si usted piensa que está siendo súper inteligente por tener una palabra oculta 83 00:04:04,670 --> 00:04:07,740 documentar en algún lugar de su disco duro que tiene todas sus contraseñas pero 84 00:04:07,740 --> 00:04:10,550 que está en una carpeta que nadie va a mirar adentro, eso también no es muy 85 00:04:10,550 --> 00:04:11,540 mecanismo de seguro. 86 00:04:11,540 --> 00:04:15,100 Y así lo pset 2 presentaré es este arte de la criptografía y 87 00:04:15,100 --> 00:04:18,300 luchando información para que cosas como las contraseñas 88 00:04:18,300 --> 00:04:19,500 tanto más segura. 89 00:04:19,500 --> 00:04:24,500 Con el fin de motivar a este problema muy real con un muy no-real-world 90 00:04:24,500 --> 00:04:28,740 escenario, permítanme presentarles a uno de nuestros clips favoritos aquí en este 91 00:04:28,740 --> 00:04:29,895 película Spaceballs. 92 00:04:29,895 --> 00:04:30,565 >> [REPRODUCCIÓN DE VÍDEO] 93 00:04:30,565 --> 00:04:32,995 -Casco, usted demonio, ¿qué está pasando? 94 00:04:32,995 --> 00:04:34,730 ¿Qué estás haciendo con mi hija? 95 00:04:34,730 --> 00:04:38,960 -Permítanme introducir el cirujano plástico brillante joven, el Dr. Philip 96 00:04:38,960 --> 00:04:43,290 Schlotkin, el más grande hombre nariz de empleo en toda la 97 00:04:43,290 --> 00:04:45,526 universo y Beverly Hills. 98 00:04:45,526 --> 00:04:46,450 -Su Alteza. 99 00:04:46,450 --> 00:04:47,380 -Nariz trabajo? 100 00:04:47,380 --> 00:04:48,035 No entiendo. 101 00:04:48,035 --> 00:04:49,480 Ella ya ha tenido una cirugía de nariz. 102 00:04:49,480 --> 00:04:51,490 Era un dulce 16 presentes. 103 00:04:51,490 --> 00:04:53,090 -No, no es lo que usted piensa. 104 00:04:53,090 --> 00:04:55,150 Es mucho, mucho peor. 105 00:04:55,150 --> 00:04:59,860 Si no me dan la combinación de la protección del aire, el Dr. Schlotkin voluntad 106 00:04:59,860 --> 00:05:04,135 dar a su hija de vuelta a su antigua nariz. 107 00:05:04,135 --> 00:05:05,385 -No! 108 00:05:08,202 --> 00:05:10,186 ¿De dónde sacaste eso? 109 00:05:10,186 --> 00:05:11,178 -Muy bien. 110 00:05:11,178 --> 00:05:11,674 Se lo diré. 111 00:05:11,674 --> 00:05:12,666 Se lo diré. 112 00:05:12,666 --> 00:05:14,154 -No, papá, no. 113 00:05:14,154 --> 00:05:15,150 No debes hacerlo. 114 00:05:15,150 --> 00:05:16,460 -Tienes razón, querida. 115 00:05:16,460 --> 00:05:18,450 Voy a extrañar su nueva nariz. 116 00:05:18,450 --> 00:05:21,550 Pero no voy a decirles la combinación no importa qué. 117 00:05:21,550 --> 00:05:23,100 -Muy bien. 118 00:05:23,100 --> 00:05:25,510 Dr. Schlotkin, haz lo que quieras. 119 00:05:25,510 --> 00:05:26,760 -Es un placer. 120 00:05:30,560 --> 00:05:31,180 -No! 121 00:05:31,180 --> 00:05:33,450 Espera, espera. 122 00:05:33,450 --> 00:05:34,770 Se lo diré. 123 00:05:34,770 --> 00:05:36,400 Se lo diré. 124 00:05:36,400 --> 00:05:38,630 -Yo sabía que iba a funcionar. 125 00:05:38,630 --> 00:05:42,040 De acuerdo, me lo da. 126 00:05:42,040 --> 00:05:46,890 -La combinación es uno. 127 00:05:46,890 --> 00:05:47,290 -One. 128 00:05:47,290 --> 00:05:48,183 -One. 129 00:05:48,183 --> 00:05:48,950 -Dos. 130 00:05:48,950 --> 00:05:49,370 -Dos. 131 00:05:49,370 --> 00:05:50,450 -Dos. 132 00:05:50,450 --> 00:05:50,715 -Tres 133 00:05:50,715 --> 00:05:51,380 -Tres. 134 00:05:51,380 --> 00:05:52,390 -Tres. 135 00:05:52,390 --> 00:05:53,200 -Cuatro. 136 00:05:53,200 --> 00:05:53,720 -Cuatro. 137 00:05:53,720 --> 00:05:55,830 -Cuatro. 138 00:05:55,830 --> 00:05:56,580 -Five 139 00:05:56,580 --> 00:05:57,120 -Cinco. 140 00:05:57,120 --> 00:05:58,560 -Cinco. 141 00:05:58,560 --> 00:06:03,770 -Así que la combinación es uno, dos, tres, cuatro, cinco. 142 00:06:03,770 --> 00:06:06,745 Eso es lo más estúpido combinación que he oído en mi vida. 143 00:06:06,745 --> 00:06:09,290 Esa es la clase de cosa que un idiota podría tener en su equipaje. 144 00:06:09,290 --> 00:06:11,540 -Gracias, Su Alteza. 145 00:06:11,540 --> 00:06:12,940 -Lo hiciste? 146 00:06:12,940 --> 00:06:14,230 -Apagué la pared. 147 00:06:14,230 --> 00:06:14,630 -No, no lo hiciste. 148 00:06:14,630 --> 00:06:15,430 Se apagó la película entera. 149 00:06:15,430 --> 00:06:16,722 -Debo de haber pulsado el botón equivocado. 150 00:06:16,722 --> 00:06:18,078 -Bueno, lo puso de nuevo. 151 00:06:18,078 --> 00:06:18,805 Coloque la película de nuevo. 152 00:06:18,805 --> 00:06:19,080 -Sí, señor. 153 00:06:19,080 --> 00:06:19,270 Sí, señor. 154 00:06:19,270 --> 00:06:19,830 -Vamos, Erna. 155 00:06:19,830 --> 00:06:20,270 Ven, Gretchen. 156 00:06:20,270 --> 00:06:22,850 Por supuesto que sé que todavía tendremos que cobrarle por ello. 157 00:06:27,400 --> 00:06:28,325 -Bueno, ¿funciona? 158 00:06:28,325 --> 00:06:29,550 ¿Dónde está la puerta? 159 00:06:29,550 --> 00:06:29,910 -Funcionó, señor. 160 00:06:29,910 --> 00:06:30,770 Tenemos la combinación. 161 00:06:30,770 --> 00:06:31,390 -Grande. 162 00:06:31,390 --> 00:06:35,630 Ahora podemos tomar cada último soplo de aire fresco del planeta Druidia. 163 00:06:35,630 --> 00:06:36,550 ¿Cuál es la combinación? 164 00:06:36,550 --> 00:06:38,805 -Uno, dos, tres, cuatro, cinco. 165 00:06:38,805 --> 00:06:40,610 -Uno, dos, tres, cuatro, cinco? 166 00:06:40,610 --> 00:06:41,070 -Sí. 167 00:06:41,070 --> 00:06:41,760 -Eso es increíble. 168 00:06:41,760 --> 00:06:45,200 Tengo la misma combinación en mi equipaje. 169 00:06:45,200 --> 00:06:47,800 Preparar Spaceball 1 para salida inmediata. 170 00:06:47,800 --> 00:06:48,536 -Sí, señor. 171 00:06:48,536 --> 00:06:52,350 -Y cambiar la combinación en mi equipaje. 172 00:06:52,350 --> 00:06:53,250 -Ay! 173 00:06:53,250 --> 00:06:55,020 [FIN DE REPRODUCCIÓN DE VÍDEO] 174 00:06:55,020 --> 00:06:57,470 >> DAVID J. MALAN: Una película increíble que ahora todos deben ver. 175 00:07:00,600 --> 00:07:06,540 Así el contexto aquí es que con los datos inseguros viene una oportunidad para 176 00:07:06,540 --> 00:07:07,790 cifrar y para trepar. 177 00:07:07,790 --> 00:07:11,060 Y por lo que este, por ejemplo, es un ejemplo de un mensaje cifrado. 178 00:07:11,060 --> 00:07:12,980 En realidad, esto dice algo en Inglés. 179 00:07:12,980 --> 00:07:14,750 Pero es evidente que no es totalmente obvio. 180 00:07:14,750 --> 00:07:17,360 Y vamos a llegar al punto de partida hoy a desmenuzar lo que este secreto 181 00:07:17,360 --> 00:07:18,380 mensaje aquí es. 182 00:07:18,380 --> 00:07:22,370 Pero en el mundo real de las computadoras, las cosas no parecen que incluso podría 183 00:07:22,370 --> 00:07:23,440 ser frases en inglés. 184 00:07:23,440 --> 00:07:27,500 Por ejemplo, esto es lo que puedes encontrar en un sistema Linux o Mac estándar o 185 00:07:27,500 --> 00:07:32,080 Unix ordenador en un archivo que fue en otro tiempo llamado el archivo de contraseñas. 186 00:07:32,080 --> 00:07:34,170 Hoy en día, se ha trasladado a otros lugares. 187 00:07:34,170 --> 00:07:38,660 Pero si nos fijamos en el lugar correcto en un sistema, podrás ver no sólo su 188 00:07:38,660 --> 00:07:41,430 nombre de usuario o la de otras personas en el sistema, pero verás un 189 00:07:41,430 --> 00:07:43,410 versión encriptada de su contraseña. 190 00:07:43,410 --> 00:07:47,800 En efecto, la cripta hay palabra sugiere que las siguientes cosas están cifrados. 191 00:07:47,800 --> 00:07:52,030 Y esta serie de letras aparentemente al azar y caracteres y números y 192 00:07:52,030 --> 00:07:56,370 etc puede ser descifrado por lo general sólo saber un secreto - 193 00:07:56,370 --> 00:07:58,600 una palabra secreta, un número secreto. 194 00:07:58,600 --> 00:08:02,760 Y así, en efecto, el arte de la criptografía en última instancia se reduce a la confianza de algunos 195 00:08:02,760 --> 00:08:05,700 clase y saber algo que nadie más lo hace. 196 00:08:05,700 --> 00:08:10,010 Vamos a estudiar esto con más detalle un poco más hoy y en el conjunto de procesadores por venir. 197 00:08:10,010 --> 00:08:11,860 >> Y ahora una palabra sobre pasa / falla. 198 00:08:11,860 --> 00:08:15,250 Por tanto, y como algunos de ustedes han buceado en conjunto de procesadores 1, el aparato, y 199 00:08:15,250 --> 00:08:18,390 un mundo muy nuevo para usted, se dio cuenta de que las frustraciones y 200 00:08:18,390 --> 00:08:21,340 confusión y dificultades técnicas sólo son de esperar. 201 00:08:21,340 --> 00:08:24,410 Especialmente con el conjunto de procesadores en primer lugar, donde hay tantas cosas nuevas, sólo conseguir 202 00:08:24,410 --> 00:08:28,830 familiarizados con ls y cd y todos estos comandos arcanos en un nuevo entorno. 203 00:08:28,830 --> 00:08:32,679 Y que es separado del material real y programación en sí. 204 00:08:32,679 --> 00:08:35,960 Así dan cuenta, también, que sin duda hay horario de oficina que existen como 205 00:08:35,960 --> 00:08:36,770 la estructura de soporte. 206 00:08:36,770 --> 00:08:38,620 Secciones comenzará el próximo domingo. 207 00:08:38,620 --> 00:08:41,990 Pero lo más importante, si te sientes solo que este no es el 208 00:08:41,990 --> 00:08:44,420 mundo para ti, date cuenta de que en realidad se limita a tomar tiempo. 209 00:08:44,420 --> 00:08:47,520 Y si no fuera por esta oportunidad hace años para mí de tomar una clase 210 00:08:47,520 --> 00:08:50,840 pasa / no pasa, la verdad, nunca me hubiera puesto un pie en el aula. 211 00:08:50,840 --> 00:08:53,520 Y usted puede cambiar esto para arriba hasta, digamos, el quinto lunes del curso. 212 00:08:53,520 --> 00:08:57,110 Así que si usted está en el borde ahora, darse cuenta de que en lugar de cabeza en algún otro 213 00:08:57,110 --> 00:09:01,000 aguas en conjunto, no ciertamente en cuenta sólo cambiar para pasar / fallar. 214 00:09:01,000 --> 00:09:03,750 Una vez más, no hay realmente esta cultura aquí en Harvard de tomar las cosas 215 00:09:03,750 --> 00:09:08,080 pasa / no pasa ya que todo el mundo quiere lograr o creces. 216 00:09:08,080 --> 00:09:11,470 Pero, francamente, esta es una maravillosa manera de probar algo que tal vez no 217 00:09:11,470 --> 00:09:13,110 ser familiar para usted. 218 00:09:13,110 --> 00:09:17,090 Y usted va a terminar haciendo en la mayoría de los casos muy finas, tal vez 219 00:09:17,090 --> 00:09:18,040 mucho a su sorpresa. 220 00:09:18,040 --> 00:09:20,850 Y en términos más concretos, lo que creo que pasa / no pasa generalmente lo hace, 221 00:09:20,850 --> 00:09:23,350 especialmente en lo que podría haber experimentado con conjunto de procesadores 0, si usted ha puesto 222 00:09:23,350 --> 00:09:27,200 en 10 horas, 15 horas, 25 horas en algún conjunto de procesadores - y no eres más que golpear 223 00:09:27,200 --> 00:09:28,180 la cabeza contra la pared, 224 00:09:28,180 --> 00:09:29,850 y se está haciendo super tarde en la noche, 225 00:09:29,850 --> 00:09:31,880 pero que ha tomado el conjunto de procesadores como el 90% del camino, 226 00:09:31,880 --> 00:09:33,780 usted sabe que usted no puede entender una cosa - 227 00:09:33,780 --> 00:09:36,830 pasa / no pasa realmente toma el borde de una clase como esta, donde se puede ordenar 228 00:09:36,830 --> 00:09:39,150 feliz de decir muy bien, ya sé que no es perfecto. 229 00:09:39,150 --> 00:09:40,470 Pero trabajé mi culo en esto. 230 00:09:40,470 --> 00:09:42,410 Estoy bastante contento con el lugar donde terminó. 231 00:09:42,410 --> 00:09:44,780 Y que cumpla con las expectativas de pasa / no pasa. 232 00:09:44,780 --> 00:09:46,850 Así que tenlo en cuenta. 233 00:09:46,850 --> 00:09:47,140 >> Está bien. 234 00:09:47,140 --> 00:09:50,980 Así que aquellos de ustedes que han tenido dificultades para utilizar la Universidad de Harvard Wi-Fi saber 235 00:09:50,980 --> 00:09:54,780 que hay un SSID CS50, una conexión Wi-Fi flotando alrededor que 236 00:09:54,780 --> 00:09:56,520 podría tener mejor suerte para. 237 00:09:56,520 --> 00:09:59,430 Es un poco irónico que la clave para esto - si usted desea probar 238 00:09:59,430 --> 00:10:03,080 conecte a este para obtener mejores velocidades y háganos saber si no es mejor - 239 00:10:03,080 --> 00:10:09,240 es uno, dos, tres, cuatro, cinco, todo el camino hasta ocho porque ocho es 240 00:10:09,240 --> 00:10:10,270 más seguro que cinco. 241 00:10:10,270 --> 00:10:15,520 Así que si usted necesita la contraseña de Wi-Fi, conexión inalámbrica a CS50 aquí. 242 00:10:15,520 --> 00:10:16,950 Uno, dos, tres, cuatro, cinco, seis, siete, ocho. 243 00:10:16,950 --> 00:10:20,440 Y mensaje el CS50 Hable si usted todavía tiene problemas de conectividad intermitente, 244 00:10:20,440 --> 00:10:24,880 y vamos a dejar que los poderes que se conocen para este espacio. 245 00:10:24,880 --> 00:10:25,180 >> Está bien. 246 00:10:25,180 --> 00:10:30,350 Así que un reclamo rápido, especialmente para aquellos de ustedes que son chicos o chicas fans 247 00:10:30,350 --> 00:10:31,900 de todas las cosas de Apple. 248 00:10:31,900 --> 00:10:37,566 Lo que desenterrado de hace unos años era este archivo aquí, ilock.c, sólo para 249 00:10:37,566 --> 00:10:40,930 tipo de hacer más concreto y más complejas algunos de los más básico C 250 00:10:40,930 --> 00:10:42,350 programas que hemos estado escribiendo. 251 00:10:42,350 --> 00:10:44,360 Así que abrí este archivo, ilock.c. 252 00:10:44,360 --> 00:10:46,830 Está disponible en la página de conferencias para hoy. 253 00:10:46,830 --> 00:10:49,470 Por el lado de la izquierda, se ve una larga lista de funciones. 254 00:10:49,470 --> 00:10:51,860 Así que el tipo que escribió esto escribió una gran cantidad de funciones, 255 00:10:51,860 --> 00:10:53,290 más que simplemente principal. 256 00:10:53,290 --> 00:10:55,490 Él utilizó una gran cantidad de bibliotecas aquí. 257 00:10:55,490 --> 00:11:00,450 Y si empezamos a desplazarse a través de, lo que esto realmente es, es el mismo 258 00:11:00,450 --> 00:11:04,670 En primer lugar, creo yo, para romper el iPhone original. 259 00:11:04,670 --> 00:11:08,000 Cuando se quería hacer jailbreak al iPhone original, lo que significa desanudar 260 00:11:08,000 --> 00:11:11,800 lo de AT & T y en realidad instalar software especial en él y hacer cosas 261 00:11:11,800 --> 00:11:13,510 que Apple no quiere que la gente a hacer - 262 00:11:13,510 --> 00:11:17,020 Bueno, alguien se tomó el tiempo para averiguar exactamente cómo podrían explotar 263 00:11:17,020 --> 00:11:20,880 defectos de software, errores, errores, en el software de Apple. 264 00:11:20,880 --> 00:11:22,650 Y así nació ilock.c. 265 00:11:22,650 --> 00:11:26,670 Que si lo recopiló en un ordenador e instalado en un iPhone 266 00:11:26,670 --> 00:11:29,810 Se conecta a su ordenador a través de, por ejemplo, un cable USB, esto le daría 267 00:11:29,810 --> 00:11:33,360 privilegios de administrador o root en tu iPhone y te hacen más o menos 268 00:11:33,360 --> 00:11:34,170 lo que quieras. 269 00:11:34,170 --> 00:11:36,740 >> Y así ha sido este fascinante gato y al ratón entre Apple y 270 00:11:36,740 --> 00:11:39,920 el resto del mundo, en particular en lo que, al igual que muchas empresas, tratan de bloquear 271 00:11:39,920 --> 00:11:43,220 sus cosas abajo de manera que sólo se puede hacer con ella lo que tenía planeado. 272 00:11:43,220 --> 00:11:46,620 Pero gracias a gente como esta y su comprensión de bajo nivel 273 00:11:46,620 --> 00:11:50,580 información y, en este caso, de programación C y un montón de las construcciones familiares 274 00:11:50,580 --> 00:11:54,630 que hemos empezado a jugar, usted puede realmente aprovechar el 275 00:11:54,630 --> 00:11:59,050 hardware de una manera mejor le parezca y no necesariamente una entidad corporativa. 276 00:11:59,050 --> 00:12:01,360 Así, por ejemplo, no tengo ni idea de lo que todo esto está haciendo. 277 00:12:01,360 --> 00:12:03,220 Pero GetVersion suena bastante sencillo. 278 00:12:03,220 --> 00:12:05,480 Y parece que esta es una función que esta persona escribió. 279 00:12:05,480 --> 00:12:09,240 Tome algún tipo de número entero como argumento, no devuelve nada, pero 280 00:12:09,240 --> 00:12:13,080 parece bucle con un bucle aquí y si una condición, si la condición, 281 00:12:13,080 --> 00:12:15,620 romper, y de alguna manera se relaciona con el número de versión. 282 00:12:15,620 --> 00:12:16,700 Si nos desplazamos hacia abajo - 283 00:12:16,700 --> 00:12:19,570 a pesar de que muchas de estas palabras clave se va a ser nuevo, y hay un 284 00:12:19,570 --> 00:12:22,590 gran cantidad de funciones en aquí nunca hemos visto y no podrían nunca ver más 285 00:12:22,590 --> 00:12:23,830 el transcurso del semestre - 286 00:12:23,830 --> 00:12:27,150 al final de la día, sigue las mismas reglas y la lógica que hemos sido 287 00:12:27,150 --> 00:12:28,760 jugando con hasta ahora. 288 00:12:28,760 --> 00:12:34,220 Así que esto es demasiado viejo para romper sus 3s 4s iPhone o 5 años o antes, en estos días, 289 00:12:34,220 --> 00:12:37,320 pero sepan que todo se deriva en gran medida de este mundo que hemos 290 00:12:37,320 --> 00:12:38,430 se zambulló en. 291 00:12:38,430 --> 00:12:41,900 >> Así que echemos un vistazo a un pequeño ejemplo más simple. 292 00:12:41,900 --> 00:12:46,100 Éste, sólo para entrar en calor con un poco de sintaxis y también algunos otros datos 293 00:12:46,100 --> 00:12:49,240 tipo que hemos hablado, pero no han visto realmente en C. Así que esta es una 294 00:12:49,240 --> 00:12:51,680 archivo llamado positive1.c. 295 00:12:51,680 --> 00:12:55,120 Y por los comentarios en la parte superior, esto sólo exige que un usuario proporcione una 296 00:12:55,120 --> 00:12:55,960 número positivo. 297 00:12:55,960 --> 00:12:59,530 Así que es un ejemplo de un bucle do-while, que es agradable para el usuario interactivo 298 00:12:59,530 --> 00:13:01,980 programas en los que usted necesita para avisar al usuario de que haga algo. 299 00:13:01,980 --> 00:13:05,190 Y si ellos no cooperan, les gritas o rechazar su entrada. 300 00:13:05,190 --> 00:13:11,610 El caso en cuestión, voy a hacer las líneas 19 a 24, siempre que el usuario tiene 301 00:13:11,610 --> 00:13:14,310 No me ha dado un número positivo. 302 00:13:14,310 --> 00:13:20,400 Ahora bien, este detalle aquí en la línea 18, ¿por qué yo declaro n por encima de este conjunto 303 00:13:20,400 --> 00:13:24,490 construcción de bucle en lugar de justo al lado de la línea 22 en el que 304 00:13:24,490 --> 00:13:26,880 realmente importa para obtener n? 305 00:13:26,880 --> 00:13:27,330 ¿Sí? 306 00:13:27,330 --> 00:13:27,780 [Inaudible] 307 00:13:27,780 --> 00:13:29,040 >> DAVID J. MALAN: Sí, por lo que este problema de alcance. 308 00:13:29,040 --> 00:13:30,850 Y, en términos sencillos, ¿qué alcance se refiere? 309 00:13:34,690 --> 00:13:36,610 ¿Sí? 310 00:13:36,610 --> 00:13:37,860 [Inaudible] 311 00:13:40,040 --> 00:13:41,105 DAVID J. MALAN: ¿Puedes hablar un poco más alto? 312 00:13:41,105 --> 00:13:43,450 Ponencia 1: Donde se puede acceder a una variable en particular. 313 00:13:43,450 --> 00:13:45,170 DAVID J. MALAN: Perfect. 314 00:13:45,170 --> 00:13:47,360 Donde se puede acceder a una variable en particular. 315 00:13:47,360 --> 00:13:50,400 Y, en general, la regla general hasta ahora ha sido que el alcance de algunas 316 00:13:50,400 --> 00:13:55,860 variable se define por las llaves más recientes que he visto. 317 00:13:55,860 --> 00:14:02,010 Y así, en este caso, si he cometido el error de declarar n en la línea 22, 318 00:14:02,010 --> 00:14:03,010 que la línea iba a funcionar. 319 00:14:03,010 --> 00:14:10,990 Me gustaría conseguir un int, por lo que lo pone en esa variable n en la línea 22. 320 00:14:10,990 --> 00:14:16,900 Pero qué línea de código ahora no tendría ni idea de lo que estoy hablando? 321 00:14:16,900 --> 00:14:22,650 Así que 25, y resulta que 24, así, porque en este caso, queda fuera 322 00:14:22,650 --> 00:14:23,610 de las llaves. 323 00:14:23,610 --> 00:14:27,280 Así que un poco de una molestia, pero muy fácil de resolver simplemente declarando 324 00:14:27,280 --> 00:14:30,140 la variable fuera de la función. 325 00:14:30,140 --> 00:14:32,600 >> Ahora vamos a ver el día de hoy, se puede ir un paso más allá. 326 00:14:32,600 --> 00:14:34,860 E incluso podría ser un poco perezoso - 327 00:14:34,860 --> 00:14:37,320 y esto no es lo recomendado, en general - 328 00:14:37,320 --> 00:14:42,260 sino que incluso podría darte pereza y poner una variable a nivel mundial, por así decirlo, no 329 00:14:42,260 --> 00:14:46,670 interior de una función, no en el interior de un bucle, pero en el propio archivo, fuera 330 00:14:46,670 --> 00:14:49,600 de todas las funciones que usted ha escrito, como lo hice aquí en la línea 15. 331 00:14:49,600 --> 00:14:51,160 Pero esto es generalmente mal visto. 332 00:14:51,160 --> 00:14:55,680 También debes saber esto a veces es una solución a otros problemas, como veremos 333 00:14:55,680 --> 00:14:56,620 finalmente ver. 334 00:14:56,620 --> 00:14:58,130 Así que por ahora, vamos a dejarlo así. 335 00:14:58,130 --> 00:15:01,030 Pero vamos a ver si podemos volver a escribir esto para iniciar una expresarnos 336 00:15:01,030 --> 00:15:01,990 poco diferente. 337 00:15:01,990 --> 00:15:05,330 >> Así que este programa, sólo para que quede claro, es positive1. 338 00:15:05,330 --> 00:15:11,810 Déjame ir por delante aquí y en mi ventana de terminal hacer positive1, Enter. 339 00:15:11,810 --> 00:15:12,740 Compila, está bien. 340 00:15:12,740 --> 00:15:14,910 Voy a correr positive1, pulse Enter. 341 00:15:14,910 --> 00:15:16,820 Exijo que me des un entero positivo. 342 00:15:16,820 --> 00:15:18,260 Diré -1. 343 00:15:18,260 --> 00:15:18,910 Eso no funcionó. 344 00:15:18,910 --> 00:15:22,150 0, 99, que parece funcionar. 345 00:15:22,150 --> 00:15:23,570 Quizás no es la prueba más rigurosa. 346 00:15:23,570 --> 00:15:26,480 Pero por lo menos es una prueba de cordura agradable que estamos en el camino correcto. 347 00:15:26,480 --> 00:15:29,240 Así que ahora vamos a seguir adelante y abrir la segunda versión de este. 348 00:15:29,240 --> 00:15:32,500 Y lo que es diferente ya? 349 00:15:32,500 --> 00:15:35,140 Se implementa la misma cosa. 350 00:15:35,140 --> 00:15:40,660 Pero lo que está saltando como claramente diferente esta vez? 351 00:15:40,660 --> 00:15:42,560 Sí, por lo que este bool en verde. 352 00:15:42,560 --> 00:15:45,980 Gedit ha resaltado en verde esta palabra clave denominada bool, 353 00:15:45,980 --> 00:15:47,000 que es un tipo de datos. 354 00:15:47,000 --> 00:15:51,080 No viene integrado en todas las versiones de C. Es necesario incluir una 355 00:15:51,080 --> 00:15:52,010 biblioteca específica. 356 00:15:52,010 --> 00:15:54,770 En nuestro caso, que incluye la biblioteca CS50 para que nos 357 00:15:54,770 --> 00:15:56,460 tienen acceso a bool. 358 00:15:56,460 --> 00:15:59,810 Sin embargo, en la línea 18, parece que tenemos un valor booleano llamado aquí agradecidos. 359 00:15:59,810 --> 00:16:01,040 Así que podría haber llamado a esta cosa. 360 00:16:01,040 --> 00:16:04,500 Pero me llamó agradecido sólo para transmitir algún tipo de significado semántico. 361 00:16:04,500 --> 00:16:07,930 Así que al principio de la línea 18, no estoy agradecido al parecer debido a que el 362 00:16:07,930 --> 00:16:12,150 Valor agradecido Boolean se inicializa en false en la línea 18. 363 00:16:12,150 --> 00:16:16,890 Y entonces parece que lo que he hecho aquí en las líneas 21 a 23 se acabo 364 00:16:16,890 --> 00:16:18,610 tipo de reescribir mi lógica. 365 00:16:18,610 --> 00:16:21,020 Así que no funcionalmente diferentes. 366 00:16:21,020 --> 00:16:26,940 Sin embargo, en la línea 22 ahora, puedo comprobar si el int el usuario ha proporcionado es mayor que 367 00:16:26,940 --> 00:16:31,120 0, entonces simplemente cambiar el valor de agradecer a true. 368 00:16:31,120 --> 00:16:32,290 ¿Y por qué lo hago? 369 00:16:32,290 --> 00:16:35,600 Debido a que en la línea 25, al parecer, voy a comprobar una condición. 370 00:16:35,600 --> 00:16:39,380 ¿Es este bucle while agradecido es falso. 371 00:16:39,380 --> 00:16:43,610 >> Así que propongo esto como una alternativa a la versión uno, porque es por lo menos un 372 00:16:43,610 --> 00:16:45,130 poco más intuitivo, quizá. 373 00:16:45,130 --> 00:16:46,900 Es un poco más a tierra en Inglés. 374 00:16:46,900 --> 00:16:51,710 Así que haga lo siguiente mientras no estás agradecido o agradecida mientras que es falso. 375 00:16:51,710 --> 00:16:55,890 Y esta vez, también, al parecer, no me importa recordar lo que el usuario escribió 376 00:16:55,890 --> 00:16:57,730 porque en el aviso no hay n variables. 377 00:16:57,730 --> 00:16:58,650 Así que en realidad, yo - 378 00:16:58,650 --> 00:17:00,080 una pequeña mentira blanca allí. 379 00:17:00,080 --> 00:17:02,770 Funcionalmente, el programa es un poco diferente una vez que lleguemos al fondo de 380 00:17:02,770 --> 00:17:04,819 porque yo no estoy acordando de lo que n es. 381 00:17:04,819 --> 00:17:09,579 Pero yo quería demostrar que también en este caso a pesar de que hemos visto y getInt 382 00:17:09,579 --> 00:17:13,920 GetString se utiliza en el lado derecho de un signo de igual modo que hasta ahora 383 00:17:13,920 --> 00:17:17,160 recordamos el valor, técnicamente, no es estrictamente necesario. 384 00:17:17,160 --> 00:17:20,950 Si por cualquier razón usted no les importa para guardar el valor, lo que desea 385 00:17:20,950 --> 00:17:25,710 para comprobar el valor, observe que simplemente podemos escribir esto como getInt abierto 386 00:17:25,710 --> 00:17:27,000 Paren, paren cerca. 387 00:17:27,000 --> 00:17:30,460 Esta función va a devolver un valor, como lo hemos estado diciendo. 388 00:17:30,460 --> 00:17:32,010 Se te va a devolver un int. 389 00:17:32,010 --> 00:17:36,450 Y así, si mentalmente pensar de que esto ocurra, cuando escribo en 99, getInt 390 00:17:36,450 --> 00:17:38,160 devuelve el número 99. 391 00:17:38,160 --> 00:17:41,330 Y así, conceptualmente, es como si mi código eran en realidad esto. 392 00:17:41,330 --> 00:17:45,880 Así que si 99 es en realidad mayor que 0, entonces se convierte en verdad agradecido. 393 00:17:45,880 --> 00:17:50,420 Entonces se da cuenta de la línea 25 ooh, hemos terminado porque ahora estoy agradecido. 394 00:17:50,420 --> 00:17:54,590 Y en la línea 26, simplemente decir gracias por el entero positivo, lo que 395 00:17:54,590 --> 00:17:55,710 pasó a ser. 396 00:17:55,710 --> 00:17:58,900 >> Ahora vamos a hacer el azúcar sintáctico leve aquí, por así decirlo. 397 00:17:58,900 --> 00:18:02,990 Vamos a ver si podemos limpiar esta línea 25 con esta variación tercera y última 398 00:18:02,990 --> 00:18:04,640 en positive3. 399 00:18:04,640 --> 00:18:08,250 Así que notar que la única diferencia ahora es qué línea de código? 400 00:18:11,930 --> 00:18:13,260 Sí, ¿y 25. 401 00:18:13,260 --> 00:18:15,520 Y no hemos visto realmente este truco todavía. 402 00:18:15,520 --> 00:18:19,510 Pero nos hicieron ver el signo de exclamación el lunes, lo que denota qué? 403 00:18:19,510 --> 00:18:20,970 Así que no, o negación. 404 00:18:20,970 --> 00:18:23,460 Así que toma un valor booleano y voltear su valor. 405 00:18:23,460 --> 00:18:24,390 Cierto convierte en falsa. 406 00:18:24,390 --> 00:18:25,500 Falso se hace realidad. 407 00:18:25,500 --> 00:18:28,910 Así que esto, propongo, es aún un poco más intuitivo de un modo de 408 00:18:28,910 --> 00:18:32,200 escribir el código porque todavía agradecido inicializar en false. 409 00:18:32,200 --> 00:18:33,530 Todavía hago lo siguiente. 410 00:18:33,530 --> 00:18:35,700 Puse agradecido a true cuando llegue el momento. 411 00:18:35,700 --> 00:18:40,690 Pero ahora usted puede realmente traducir este código sólo verbalmente izquierda a derecha, 412 00:18:40,690 --> 00:18:42,550 mientras no agradecido. 413 00:18:42,550 --> 00:18:46,170 Debido a bang, o signo de exclamación, denota la noción de no, así que mientras 414 00:18:46,170 --> 00:18:47,010 no gracias. 415 00:18:47,010 --> 00:18:49,740 >> Así que de nuevo, no hemos introducido nuevos conceptos en sí. 416 00:18:49,740 --> 00:18:53,230 Hemos hablado de Booleanos atrás cuando jugamos con Scratch. 417 00:18:53,230 --> 00:18:55,690 Pero doy cuenta ahora que acabamos de comenzar a escribir nuestro código en 418 00:18:55,690 --> 00:18:56,550 muchas maneras diferentes. 419 00:18:56,550 --> 00:19:00,010 Por tanto, y en pset1, si usted es una especie de lucha por descubrir la manera de 420 00:19:00,010 --> 00:19:03,400 escribir algún programa, la Casa estás de suerte porque no va a haber ninguna 421 00:19:03,400 --> 00:19:05,780 número de soluciones que le pueden suceder a. 422 00:19:05,780 --> 00:19:09,850 Por ejemplo, esto es sólo tres para incluso el más simple de los programas. 423 00:19:09,850 --> 00:19:10,180 Está bien. 424 00:19:10,180 --> 00:19:13,860 Y ahora recuerdo el lunes, dejamos en esta nota con valores de retorno. 425 00:19:13,860 --> 00:19:18,280 Así, por primera vez, escribimos un programa que no sólo tiene principal, 426 00:19:18,280 --> 00:19:22,240 también tiene su propia función personalizada que escribí aquí. 427 00:19:22,240 --> 00:19:26,640 Así, en la línea 31 a la 34, he implementado una función de cubo. 428 00:19:26,640 --> 00:19:27,800 No es complejo. 429 00:19:27,800 --> 00:19:29,830 Es que algunas veces veces y una, en este caso. 430 00:19:29,830 --> 00:19:34,920 Pero lo importante de esto es que estoy tomando de entrada en forma de una y 431 00:19:34,920 --> 00:19:38,910 Voy a devolver la salida en forma de veces y varias veces a. 432 00:19:38,910 --> 00:19:43,940 >> Así que ahora tengo la capacidad, tanto como solía hacerlo con printf solo, para llamar 433 00:19:43,940 --> 00:19:47,120 esta función llamando a la función de cubo. 434 00:19:47,120 --> 00:19:49,470 Y la función de cubo tiene alguna entrada. 435 00:19:49,470 --> 00:19:52,030 Y la función devuelve un cubo de salida. 436 00:19:52,030 --> 00:19:56,660 Y así, por el contrario, printf acabo de hacer algo. 437 00:19:56,660 --> 00:19:59,490 No volvió todo lo que nos importaba - a pesar de que, como 438 00:19:59,490 --> 00:20:00,820 Aparte de eso, no devuelve ningún valor. 439 00:20:00,820 --> 00:20:02,650 Sólo generalmente lo ignoran. 440 00:20:02,650 --> 00:20:04,000 Printf acabo de hacer algo. 441 00:20:04,000 --> 00:20:06,220 Tenía un efecto secundario de la impresión en la pantalla. 442 00:20:06,220 --> 00:20:09,480 Por el contrario aquí, tenemos la función de cubo, que 443 00:20:09,480 --> 00:20:11,400 en realidad devuelve algo. 444 00:20:11,400 --> 00:20:12,960 >> Así que este es generalmente - 445 00:20:12,960 --> 00:20:15,260 para aquellos que están familiarizados con esto, es una idea bastante sencilla. 446 00:20:15,260 --> 00:20:18,460 Pero para aquellos menos familiarizados con la idea de pasar en los insumos y obtener 447 00:20:18,460 --> 00:20:21,700 salidas traseras, vamos a tratar sólo algo simple super. 448 00:20:21,700 --> 00:20:25,180 ¿Hay alguien que viene cómodo en el escenario brevemente? 449 00:20:25,180 --> 00:20:27,460 Usted tiene que estar cómodo con una cámara en usted, también. 450 00:20:27,460 --> 00:20:27,640 Si. 451 00:20:27,640 --> 00:20:28,610 Bien, ¿cuál es tu nombre? 452 00:20:28,610 --> 00:20:29,020 KEN: Ken. 453 00:20:29,020 --> 00:20:29,420 DAVID J. MALAN: Ken. 454 00:20:29,420 --> 00:20:29,810 Muy bien, Ken. 455 00:20:29,810 --> 00:20:31,060 Vamos arriba. 456 00:20:31,060 --> 00:20:34,660 Así Ken va a ser una función de la clase aquí. 457 00:20:34,660 --> 00:20:35,760 Y vamos a seguir adelante y hacer esto. 458 00:20:35,760 --> 00:20:38,790 Vayamos un poco sofisticado. 459 00:20:38,790 --> 00:20:39,770 Gusto en conocerlo. 460 00:20:39,770 --> 00:20:41,010 Bienvenido al centro del escenario. 461 00:20:41,010 --> 00:20:41,980 Está bien. 462 00:20:41,980 --> 00:20:45,590 Vamos a golpear el botón aquí. 463 00:20:45,590 --> 00:20:46,420 Está bien. 464 00:20:46,420 --> 00:20:49,490 Así que aquí tienes una pizarra moderna. 465 00:20:49,490 --> 00:20:53,050 Y lo que yo soy es la función principal, por ejemplo. 466 00:20:53,050 --> 00:20:55,990 Y no tengo un iPad en la mano. 467 00:20:55,990 --> 00:20:59,000 Yo no me acuerdo cómo - bueno, en realidad, no puedo decir eso. 468 00:20:59,000 --> 00:21:02,200 Yo realmente no tengo buena letra. 469 00:21:02,200 --> 00:21:05,260 Y por lo tanto, quiero imprimir algo en la pantalla para mí. 470 00:21:05,260 --> 00:21:07,470 >> Así que estoy siendo el programa principal. 471 00:21:07,470 --> 00:21:15,060 Y le voy a decir que tienes esto escribiendo en mi garabatos y 472 00:21:15,060 --> 00:21:16,600 entonces el paso de una entrada. 473 00:21:16,600 --> 00:21:20,000 Así como tonto aunque este ejercicio es, la noción de funciones y llamar a un 474 00:21:20,000 --> 00:21:22,260 función y devuelve una función realmente se reduce a esto. 475 00:21:22,260 --> 00:21:23,120 Estoy principal. 476 00:21:23,120 --> 00:21:26,270 Acabo de escribir printf ("algo") en la pantalla. 477 00:21:26,270 --> 00:21:27,470 Estoy ejecutando este programa. 478 00:21:27,470 --> 00:21:30,900 Y tan pronto como se llama a printf, toma un argumento - o un parámetro, 479 00:21:30,900 --> 00:21:31,660 a veces - 480 00:21:31,660 --> 00:21:32,780 entre comillas dobles. 481 00:21:32,780 --> 00:21:33,960 Aquí está el argumento. 482 00:21:33,960 --> 00:21:35,740 Lo estoy pasando a Ken. 483 00:21:35,740 --> 00:21:39,390 Ahora él es un cuadro negro escrito un número de años que al parecer 484 00:21:39,390 --> 00:21:41,070 sólo sabe imprimir cosas en la pantalla. 485 00:21:41,070 --> 00:21:42,320 >> Por lo tanto, ejecutarse. 486 00:21:48,842 --> 00:21:49,900 Eso no es malo. 487 00:21:49,900 --> 00:21:50,890 Así, muy bien. 488 00:21:50,890 --> 00:21:52,900 Así que ahora se lleva a cabo la ejecución de Ken. 489 00:21:52,900 --> 00:21:55,810 ¿Tiene que darme nada a cambio? 490 00:21:55,810 --> 00:21:57,240 Así que lo que hemos visto hasta ahora. 491 00:21:57,240 --> 00:21:59,230 Una vez más, es en realidad printf devuelve un número. 492 00:21:59,230 --> 00:22:01,640 Pero vamos a ignorar que, por ahora, porque nunca he usado. 493 00:22:01,640 --> 00:22:03,400 Así que eso es todo por Ken. 494 00:22:03,400 --> 00:22:06,650 Y ahora principal vuelve a ejecutar - 495 00:22:06,650 --> 00:22:09,630 principal toma el control de nuevo el programa porque esa línea de código, 496 00:22:09,630 --> 00:22:11,010 printf, se lleva a cabo la ejecución. 497 00:22:11,010 --> 00:22:13,890 Y que avanzamos en nuestro camino ejecución de cualquier otras líneas están ahí. 498 00:22:13,890 --> 00:22:14,130 >> Está bien. 499 00:22:14,130 --> 00:22:17,080 Así que ahora vamos a probar un ejemplo un poco diferente. 500 00:22:17,080 --> 00:22:22,430 Y esta vez aquí, se va a borrar la pantalla aquí. 501 00:22:22,430 --> 00:22:24,670 Y esta vez, vamos a hacer la función de medición de volumen. 502 00:22:24,670 --> 00:22:27,350 Pero esta vez, espero que un valor de salida. 503 00:22:27,350 --> 00:22:28,630 Así que vamos a seguir adelante y hacerlo. 504 00:22:28,630 --> 00:22:35,680 Así que ahora tengo una línea de código que dice que x = cubo (x). 505 00:22:35,680 --> 00:22:36,930 Así que en realidad let's - 506 00:22:41,450 --> 00:22:43,940 la línea de código, el recuerdo, se ve así. 507 00:22:43,940 --> 00:22:45,960 x = cubo (x). 508 00:22:45,960 --> 00:22:48,100 Entonces, ¿cómo se va a trabajar? 509 00:22:48,100 --> 00:22:50,820 Así que vamos a seguir adelante y darle una pantalla en blanco de nuevo. 510 00:22:50,820 --> 00:22:55,000 Y yo voy a escribir ahora por el valor de x, que en este momento de 511 00:22:55,000 --> 00:23:01,080 tiempo pasa a ser, digamos, 2, para que sea sencillo. 512 00:23:01,080 --> 00:23:04,890 Así que he escrito en un pedazo de papel el valor de 2, 513 00:23:04,890 --> 00:23:06,100 cual es mi valor x. 514 00:23:06,100 --> 00:23:08,250 Se lo entrego a Ken. 515 00:23:08,250 --> 00:23:09,200 KEN: Y acabo de escribir la respuesta? 516 00:23:09,200 --> 00:23:12,660 DAVID J. MALAN: Sí, vamos a escribir la respuesta. 517 00:23:12,660 --> 00:23:13,030 Bien. 518 00:23:13,030 --> 00:23:16,280 Y ahora me tiene que devolver algo. 519 00:23:16,280 --> 00:23:17,560 Por lo tanto - 520 00:23:17,560 --> 00:23:18,170 perfecto. 521 00:23:18,170 --> 00:23:18,840 Niza segue. 522 00:23:18,840 --> 00:23:21,970 >> Así que ahora me pasa de nuevo el valor de 8, en este caso. 523 00:23:21,970 --> 00:23:23,220 ¿Y qué hago con él? 524 00:23:23,220 --> 00:23:26,130 Bueno, en realidad, vamos a ver. 525 00:23:26,130 --> 00:23:26,640 Obtener este derecho. 526 00:23:26,640 --> 00:23:27,880 ¿Qué voy a hacer con él? 527 00:23:27,880 --> 00:23:31,900 Ahora me voy a tomar este valor y en realidad lo guarde en los 528 00:23:31,900 --> 00:23:33,400 mismos bits en la memoria. 529 00:23:33,400 --> 00:23:35,030 Pero note, yo soy una especie de lucha aquí. 530 00:23:35,030 --> 00:23:38,280 Estoy un poco confundido porque donde puedo realmente escribir el valor de x? 531 00:23:38,280 --> 00:23:41,840 Porque lo que acabas de hacer es físicamente Ken mano una hoja de papel 532 00:23:41,840 --> 00:23:44,400 que tenía el valor 2, que era x. 533 00:23:44,400 --> 00:23:46,300 Y de hecho, eso es precisamente lo que sucede. 534 00:23:46,300 --> 00:23:50,100 Así que resulta que cuando se llama a una función, y se le pasa un argumento 535 00:23:50,100 --> 00:23:54,130 como "hola mundo" o se le pasa un argumento como el 2, por lo general, está 536 00:23:54,130 --> 00:23:56,720 pasando una copia de ese argumento. 537 00:23:56,720 --> 00:24:01,020 Y así como yo anoté el número 2 aquí y se lo dio a Ken, que debe 538 00:24:01,020 --> 00:24:04,760 significa que todavía tengo una copia del valor 2 en alguna parte. 539 00:24:04,760 --> 00:24:08,140 Porque en realidad, ahora que lo he conseguido volver el valor 8, tengo que volver atrás en el 540 00:24:08,140 --> 00:24:12,010 RAM y realmente anotar 8, donde una vez tuve el número 2. 541 00:24:12,010 --> 00:24:15,720 >> Así que recuerda visualmente esta idea de pasar literalmente en 542 00:24:15,720 --> 00:24:16,730 una copia del valor. 543 00:24:16,730 --> 00:24:19,570 Ken hace sus cosas, me da algo de vuelta - en este caso, 544 00:24:19,570 --> 00:24:20,820 un valor como 8. 545 00:24:20,820 --> 00:24:22,660 Y entonces tengo que hacer algo con ese valor si 546 00:24:22,660 --> 00:24:24,880 quieren mantenerlo ahí. 547 00:24:24,880 --> 00:24:29,470 Así que todo esto va a ser muy familiar dentro de poco. 548 00:24:29,470 --> 00:24:33,082 Muchas gracias por esta demostración aquí, Ken. 549 00:24:33,082 --> 00:24:34,820 Está bien. 550 00:24:34,820 --> 00:24:36,720 Muy bien hecho. 551 00:24:36,720 --> 00:24:40,610 Así que vamos a ver la forma en que en última instancia se refiere a algunas de las funciones 552 00:24:40,610 --> 00:24:42,270 pidiendo que hemos estado haciendo aquí. 553 00:24:42,270 --> 00:24:47,610 Así que déjame ir por delante y nos lleve de nuevo al ejemplo cubicación aquí. 554 00:24:47,610 --> 00:24:53,080 Y note que si queremos realmente empezar a tomar este más futuro, vamos 555 00:24:53,080 --> 00:24:57,050 a tener que tener en cuenta el hecho de que el número x que está siendo aprobada en 556 00:24:57,050 --> 00:25:01,390 aquí es diferente de lo que realmente está pasando en la función. 557 00:25:01,390 --> 00:25:03,940 Así que de nuevo, esto pasa por la copia va a ser muy 558 00:25:03,940 --> 00:25:05,620 germano en un momento. 559 00:25:05,620 --> 00:25:09,320 >> Así que vamos a echar un vistazo a algo que no acaba de funcionar bien todavía. 560 00:25:09,320 --> 00:25:11,790 Voy a seguir adelante y abrir un ejemplo calesa tercero, que 561 00:25:11,790 --> 00:25:13,560 adolece de la naturaleza. 562 00:25:13,560 --> 00:25:18,070 Y se llama buggy3, e implementa una función de intercambio. 563 00:25:18,070 --> 00:25:23,500 Así que aquí tenemos una función principal que ha xey arbitrariamente inicializa 564 00:25:23,500 --> 00:25:24,720 1 y 2, respectivamente. 565 00:25:24,720 --> 00:25:27,590 Podríamos utilizar getInt, pero sólo necesitamos un ejercicio simple. 566 00:25:27,590 --> 00:25:29,680 Así que es codificada como 1 y 2. 567 00:25:29,680 --> 00:25:35,330 En las líneas 21 y 22, que al parecer imprimir x e y, uno por línea. 568 00:25:35,330 --> 00:25:39,620 Luego, en la línea 23, sostengo que estoy cambiando estos valores, punto, punto, punto. 569 00:25:39,620 --> 00:25:43,030 Me aparentemente llamar a una función en la línea 24 llama intercambio 570 00:25:43,030 --> 00:25:44,000 que toma dos argumentos. 571 00:25:44,000 --> 00:25:46,430 Es totalmente legítimo para las funciones que tomar dos argumentos. 572 00:25:46,430 --> 00:25:48,220 Hemos visto printf hacerlo ya. 573 00:25:48,220 --> 00:25:50,370 Así intercambio aparentemente toma x e y. 574 00:25:50,370 --> 00:25:53,010 Y como su nombre lo indica, es de esperar que va a 575 00:25:53,010 --> 00:25:54,320 intercambiar estos dos valores. 576 00:25:54,320 --> 00:25:57,560 Así que me dicen en la línea 25, intercambian. 577 00:25:57,560 --> 00:26:01,570 Y reimprimir x e y bajo el supuesto de que 578 00:26:01,570 --> 00:26:02,830 que han sido efectivamente intercambiados. 579 00:26:02,830 --> 00:26:04,370 Pero si realmente ejecutar este programa - 580 00:26:04,370 --> 00:26:06,060 déjame abrir una ventana de terminal. 581 00:26:06,060 --> 00:26:07,750 Permítanme hacer buggy3. 582 00:26:07,750 --> 00:26:09,970 Como su nombre lo indica, esto no va a terminar bien. 583 00:26:09,970 --> 00:26:14,690 Porque cuando pulse la tecla Enter, nótese que x es 1. 584 00:26:14,690 --> 00:26:15,720 y es 2. 585 00:26:15,720 --> 00:26:19,160 Y sin embargo, al final del programa, que todavía están, de hecho, el mismo. 586 00:26:19,160 --> 00:26:22,760 >> Así que basado en la demostración acaba con Ken, lo que realmente está pasando? 587 00:26:22,760 --> 00:26:24,660 Bueno, vamos a profundizar en esta función swap. 588 00:26:24,660 --> 00:26:25,800 Es súper corto. 589 00:26:25,800 --> 00:26:28,020 No es más que unas pocas líneas de código de tiempo. 590 00:26:28,020 --> 00:26:32,810 Pero ¿cuál es el problema fundamental que debe basarse en la simple historia le dijo a 591 00:26:32,810 --> 00:26:34,270 aquí con Ken? 592 00:26:34,270 --> 00:26:36,115 ¿Por qué el canje de rompe? 593 00:26:36,115 --> 00:26:37,365 [Inaudible] 594 00:26:39,840 --> 00:26:40,460 Exactamente. 595 00:26:40,460 --> 00:26:43,610 Así que estamos en guardar una copia, no la variable en sí. 596 00:26:43,610 --> 00:26:46,810 En otras palabras, de intercambio aparentemente toma dos argumentos, un int. 597 00:26:46,810 --> 00:26:49,370 Y está llamado arbitrariamente a y b. 598 00:26:49,370 --> 00:26:54,430 Y hasta aquí, he pasado en x e y, que son, respectivamente, 1 y 2. 599 00:26:54,430 --> 00:26:56,580 Pero no estoy literalmente pasando x. 600 00:26:56,580 --> 00:26:58,410 No estoy literalmente pasando en y. 601 00:26:58,410 --> 00:27:01,230 Estoy pasando una copia de x y una copia de y. 602 00:27:01,230 --> 00:27:05,180 Es como casi como si ha copiado y pegado en intercambiar los valores que 603 00:27:05,180 --> 00:27:07,440 desea que se manipulan en realidad. 604 00:27:07,440 --> 00:27:11,970 Así que si ese es el caso, cuando yo, el programa comenzará a ejecutar 605 00:27:11,970 --> 00:27:14,140 la línea 35, luego 36 - 606 00:27:14,140 --> 00:27:17,740 cuando llegue a la línea 37, en este momento de la historia, ¿cuál es el valor de a? 607 00:27:20,740 --> 00:27:24,850 En este punto de la historia, línea 37, ¿cuál es el valor de una en este momento? 608 00:27:24,850 --> 00:27:25,980 Por lo tanto, sólo debe ser 1. 609 00:27:25,980 --> 00:27:26,170 ¿Cierto? 610 00:27:26,170 --> 00:27:29,100 Como x se pasa como primer argumento. 611 00:27:29,100 --> 00:27:33,150 Y esta función sólo arbitrariamente se llama su primer argumento, a. 612 00:27:33,150 --> 00:27:35,130 Del mismo modo es y, el segundo argumento. 613 00:27:35,130 --> 00:27:37,930 Y es justo llamar a la b arbitrariamente segundo argumento. 614 00:27:37,930 --> 00:27:40,510 >> Ahora bien, esta dicotomía es en realidad bastante simple explicación. 615 00:27:40,510 --> 00:27:40,880 Piensa en ello. 616 00:27:40,880 --> 00:27:42,980 Ninguno de nosotros ha conocido a la persona que escribió printf. 617 00:27:42,980 --> 00:27:49,880 Así que seguramente, él o ella no tiene idea de lo que nuestras variables de 30 años más tarde se van 618 00:27:49,880 --> 00:27:50,710 para ser llamado. 619 00:27:50,710 --> 00:27:55,110 Así que tiene que haber una distinción entre lo que llaman variables en 620 00:27:55,110 --> 00:27:59,960 funciones que está escribiendo y lo que llamamos variables en funciones que está 621 00:27:59,960 --> 00:28:01,770 llamando o utilizando. 622 00:28:01,770 --> 00:28:05,120 En otras palabras, he escrito mis variables como x e y. 623 00:28:05,120 --> 00:28:08,060 Pero si alguien había escrito la función de intercambio, él o ella ciertamente 624 00:28:08,060 --> 00:28:10,480 No sabría qué mis variables van a ser llamado. 625 00:28:10,480 --> 00:28:13,850 Así que darse cuenta de que esto es por qué tiene esa dualidad de nombres. 626 00:28:13,850 --> 00:28:16,800 Técnicamente, yo podría hacer esto por casualidad. 627 00:28:16,800 --> 00:28:19,750 Pero todavía se pasa como copias. 628 00:28:19,750 --> 00:28:22,940 Sólo sería una pura coincidencia estéticamente si esa persona que escribió 629 00:28:22,940 --> 00:28:25,590 intercambio había utilizado los mismos nombres. 630 00:28:25,590 --> 00:28:25,930 >> Está bien. 631 00:28:25,930 --> 00:28:29,010 Así que en este punto de la historia, línea 37, a es 1. 632 00:28:29,010 --> 00:28:30,410 b es 2. 633 00:28:30,410 --> 00:28:32,040 Y ahora me dedico a intercambiarlas. 634 00:28:32,040 --> 00:28:34,730 Bueno, primero que nada, me lo hacen realmente mucho más simple. 635 00:28:34,730 --> 00:28:36,500 No sé cuáles son esas tres líneas de código hacían. 636 00:28:36,500 --> 00:28:37,370 Permítanme hacer esto. 637 00:28:37,370 --> 00:28:38,850 b obtiene una. 638 00:28:38,850 --> 00:28:40,170 obtiene un b. 639 00:28:40,170 --> 00:28:41,450 Hecho. 640 00:28:41,450 --> 00:28:43,540 ¿Por qué esta roto, lógicamente? 641 00:28:46,980 --> 00:28:48,590 Es algo de lo intuitivo, ¿verdad? 642 00:28:48,590 --> 00:28:50,640 Por lo tanto se convierte en una b. 643 00:28:50,640 --> 00:28:52,450 Y b se convierte en una. 644 00:28:52,450 --> 00:28:55,410 Pero el problema es que tan pronto como se ejecuta la línea 37, ¿cuál es la 645 00:28:55,410 --> 00:28:58,170 valor de a y b? 646 00:28:58,170 --> 00:28:59,070 El mismo, 1. 647 00:28:59,070 --> 00:29:03,460 Porque has paliza, por así decirlo, has cambiado b sea igual a. 648 00:29:03,460 --> 00:29:06,000 Así que una vez que la línea 37 se ejecuta, eso es genial. 649 00:29:06,000 --> 00:29:09,940 Ahora tiene dos copias del número 1 dentro de esta función. 650 00:29:09,940 --> 00:29:14,720 Así que cuando usted dice en la línea 38, se pone un b, bueno, eres un poco jodido. 651 00:29:14,720 --> 00:29:17,370 Porque estás asignando 1 a 1. 652 00:29:17,370 --> 00:29:20,400 Usted ha perdido el tipo de valor que le importaba. 653 00:29:20,400 --> 00:29:22,910 >> Así que en la versión original de este, observe lo que hice. 654 00:29:22,910 --> 00:29:26,620 Yo en cambio tuvo una tercera línea de código que se veía así. 655 00:29:26,620 --> 00:29:29,910 Yo declaro una variable temporal - tmp es un nombre muy común 656 00:29:29,910 --> 00:29:31,240 para una variable temporal. 657 00:29:31,240 --> 00:29:34,280 Es un int porque tiene que coincidir con lo que yo quiero hacer una copia de. 658 00:29:34,280 --> 00:29:39,720 Puedo guardar una copia de un interior de tmp. Así que una vez que la línea 37 se ha ejecutado, 659 00:29:39,720 --> 00:29:41,390 el valor de a es - 660 00:29:41,390 --> 00:29:42,970 cordura registro rápido - 661 00:29:42,970 --> 00:29:43,460 1. 662 00:29:43,460 --> 00:29:45,780 El valor de b es 2. 663 00:29:45,780 --> 00:29:48,470 Y el valor de tmp es también 1. 664 00:29:48,470 --> 00:29:51,470 Así que ahora ejecutar la línea 38. 665 00:29:51,470 --> 00:29:57,180 Así que una vez que la línea 38 se ejecuta, una toma el valor de b. 666 00:29:57,180 --> 00:29:58,510 Y b fue de 2. 667 00:29:58,510 --> 00:30:00,500 Así es ahora un 2. 668 00:30:00,500 --> 00:30:03,110 Así que en este punto de la historia, a es 2, b es 2, 669 00:30:03,110 --> 00:30:05,130 y tmp es 1. 670 00:30:05,130 --> 00:30:09,330 Así que ahora, lógicamente, podemos valorar sólo tmp plop en la b. 671 00:30:09,330 --> 00:30:10,690 Y hemos terminado. 672 00:30:10,690 --> 00:30:12,170 >> Para ello hemos resuelto ese problema. 673 00:30:12,170 --> 00:30:16,040 Por desgracia, cuando ejecuto este programa en esta forma, en realidad no intercambiar 674 00:30:16,040 --> 00:30:17,700 cualquier valor. 675 00:30:17,700 --> 00:30:18,950 Pero para que quede claro, ¿por qué? 676 00:30:23,420 --> 00:30:26,310 He arreglado el problema lógico de hace un momento. 677 00:30:26,310 --> 00:30:31,150 Pero de nuevo, si ejecuta este programa, x e y no cambian a finales de 678 00:30:31,150 --> 00:30:33,834 la ejecución del programa. 679 00:30:33,834 --> 00:30:34,760 [Inaudible] 680 00:30:34,760 --> 00:30:36,030 DAVID J. MALAN: Así que no han devuelto nada. 681 00:30:36,030 --> 00:30:36,960 Así que eso es cierto. 682 00:30:36,960 --> 00:30:39,880 Pero resulta que hay un pequeño problema aquí, porque hasta el momento, el 683 00:30:39,880 --> 00:30:42,460 Lo único que hemos podido volver es una cosa. 684 00:30:42,460 --> 00:30:46,540 Y esta es una restricción de C. Sólo puede volver realmente un valor, 685 00:30:46,540 --> 00:30:48,970 en cuyo caso, estoy un poco atascado aquí 686 00:30:48,970 --> 00:30:51,805 porque pude devolver el nuevo valor de x o podía devolver el 687 00:30:51,805 --> 00:30:53,160 nuevo valor de y. 688 00:30:53,160 --> 00:30:54,330 Pero quiero tanto atrás. 689 00:30:54,330 --> 00:30:58,010 Así que regresa no es la solución simple aquí. 690 00:30:58,010 --> 00:30:59,770 Pero el problema fundamental es ¿por qué? 691 00:30:59,770 --> 00:31:03,270 ¿Qué hemos cambiado en realidad? 692 00:31:03,270 --> 00:31:04,010 a y b. 693 00:31:04,010 --> 00:31:07,670 Pero a y b son copias de x e y, lo que significa que acabamos de hacer todo esto 694 00:31:07,670 --> 00:31:10,080 trabajo - sólo pasamos como tres minutos hablando sobre el canje 695 00:31:10,080 --> 00:31:11,680 función y los tres de estas variables. 696 00:31:11,680 --> 00:31:15,090 Y eso está muy bien, perfectamente correcto en el aislamiento. 697 00:31:15,090 --> 00:31:20,230 Sin embargo, un alcance y b es la única en estas líneas aquí. 698 00:31:20,230 --> 00:31:24,130 Así como un bucle, si se declara un entero i para el interior de la 699 00:31:24,130 --> 00:31:27,400 loop - Del mismo modo, si usted está dentro de declarar a y b de una función que 700 00:31:27,400 --> 00:31:30,550 que has escrito, son válidos sólo dentro de esa función. 701 00:31:30,550 --> 00:31:35,020 Lo que significa que tan pronto como swap se realiza la ejecución y se pasa de la línea 24 a 702 00:31:35,020 --> 00:31:38,380 línea 25, X e Y no han cambiado en absoluto. 703 00:31:38,380 --> 00:31:42,580 Usted acaba de perder un montón de tiempo que se tarda copias de variables. 704 00:31:42,580 --> 00:31:46,490 >> Así resulta que la solución a esto es en realidad no evidente. 705 00:31:46,490 --> 00:31:49,210 No es más que suficiente para devolver valores porque podemos 706 00:31:49,210 --> 00:31:50,320 sólo devuelven un valor. 707 00:31:50,320 --> 00:31:53,370 Y realmente quiero cambiar tanto x como y, al mismo tiempo. 708 00:31:53,370 --> 00:31:55,020 Así que vamos a volver a eso. 709 00:31:55,020 --> 00:31:58,770 Pero, por ahora, se dan cuenta de que el problema fundamental se deriva del hecho 710 00:31:58,770 --> 00:32:00,660 que a y b son copias. 711 00:32:00,660 --> 00:32:03,450 Y ellos están en su propio ámbito. 712 00:32:03,450 --> 00:32:04,980 Bueno, vamos a tratar de resolver esto de alguna manera. 713 00:32:04,980 --> 00:32:09,200 Permítanme retroceder en realidad aquí y abren, digamos, una cuarta variante 714 00:32:09,200 --> 00:32:11,170 de este, buggy4. 715 00:32:11,170 --> 00:32:13,230 Y ¿qué pasa con esto? 716 00:32:13,230 --> 00:32:16,690 Este es un problema similar pero más sencillo que mirar antes de tomar una puñalada en 717 00:32:16,690 --> 00:32:17,530 resolverlo. 718 00:32:17,530 --> 00:32:19,440 Este programa se llama incremento. 719 00:32:19,440 --> 00:32:24,320 Y, al parecer, se inicializa un entero x a 1 en la línea 18. 720 00:32:24,320 --> 00:32:25,950 Entonces me dicen x 1. 721 00:32:25,950 --> 00:32:28,020 Entonces reclamación incrementando, punto, punto, punto. 722 00:32:28,020 --> 00:32:29,460 Entonces llame incremento. 723 00:32:29,460 --> 00:32:33,480 Pero entonces, en las líneas 22 y 23, que dicen que ha sido incrementado. 724 00:32:33,480 --> 00:32:37,780 Yo reclamo x ahora es lo que es, presumiblemente, 2. 725 00:32:37,780 --> 00:32:39,770 >> Pero este programa está libre de errores. 726 00:32:39,770 --> 00:32:41,020 ¿Cuál es el problema? 727 00:32:43,450 --> 00:32:44,418 ¿Sí? 728 00:32:44,418 --> 00:32:45,668 [Inaudible] 729 00:32:49,260 --> 00:32:49,850 DAVID J. MALAN: Exactamente. 730 00:32:49,850 --> 00:32:52,430 Así que x ha sido declarada, obviamente, en la línea 18. 731 00:32:52,430 --> 00:32:54,410 Es dentro de llaves principal. 732 00:32:54,410 --> 00:32:58,470 Así que la respuesta simple es que, bueno, x existe aquí. 733 00:32:58,470 --> 00:33:01,510 No existe en la línea 32. 734 00:33:01,510 --> 00:33:03,710 Así que este programa realmente ni siquiera se compilará. 735 00:33:03,710 --> 00:33:07,910 El compilador, cuando intento compilar este código, se va a gritarme 736 00:33:07,910 --> 00:33:13,190 sobre algún identificador no declarado o algo por el estilo. 737 00:33:13,190 --> 00:33:13,870 De hecho, vamos a intentarlo. 738 00:33:13,870 --> 00:33:15,235 Se trata de hacer buggy4. 739 00:33:17,780 --> 00:33:18,190 Ahí está. 740 00:33:18,190 --> 00:33:22,030 El uso de x identificador no declarado en la línea 32. 741 00:33:22,030 --> 00:33:25,700 Y, de hecho, vamos a ser más explícito aquí hoy para que esto sea útil en 742 00:33:25,700 --> 00:33:27,140 las horas de oficina y en casa. 743 00:33:27,140 --> 00:33:29,000 Tenga en cuenta que es un poco críptico escrito. 744 00:33:29,000 --> 00:33:31,560 Pero el hecho de que tiene Clang nos gritó, diciendo: 745 00:33:31,560 --> 00:33:36,970 buggy4.c: 32:5, es realmente útil. 746 00:33:36,970 --> 00:33:41,970 Esto significa que el error está en la línea 32 en la posición de cinco caracteres. 747 00:33:41,970 --> 00:33:44,670 Así que uno, dos, tres, cuatro, cinco. 748 00:33:44,670 --> 00:33:46,640 Eso es, en efecto, donde el problema es. 749 00:33:46,640 --> 00:33:49,710 Y también a tener en cuenta en las horas de oficina y en casa, tengo suerte aquí. 750 00:33:49,710 --> 00:33:50,740 Tengo un error. 751 00:33:50,740 --> 00:33:52,660 Va a ser relativamente fácil de solucionar. 752 00:33:52,660 --> 00:33:56,220 Pero si tienes una pantalla llena de mensajes de error abrumadoras, de nuevo, 753 00:33:56,220 --> 00:33:59,240 darse cuenta de que el situado más abajo podría ser un síntoma de 754 00:33:59,240 --> 00:34:00,320 las más altas. 755 00:34:00,320 --> 00:34:03,560 Así que siempre persigue a los errores de arriba hacia abajo. 756 00:34:03,560 --> 00:34:06,720 Debido a que sólo puede haber un efecto en cadena que le está sugiriendo 757 00:34:06,720 --> 00:34:09,030 tiene problemas mucho más de lo que realmente hacen. 758 00:34:09,030 --> 00:34:14,989 >> Entonces, ¿cómo podemos solucionar este problema si mi objetivo es incrementar x? 759 00:34:14,989 --> 00:34:15,370 ¿Qué es eso? 760 00:34:15,370 --> 00:34:15,620 Bien. 761 00:34:15,620 --> 00:34:16,679 Así que podemos hacer x global. 762 00:34:16,679 --> 00:34:18,860 Vamos a tomar el atajo que me advirtió acerca de antes. 763 00:34:18,860 --> 00:34:20,550 Pero diablos, sólo necesitamos una solución rápida. 764 00:34:20,550 --> 00:34:23,949 Así que digamos que x int aquí. 765 00:34:23,949 --> 00:34:25,600 Eso hace que x global. 766 00:34:25,600 --> 00:34:28,460 Así que ahora principal tiene acceso a ella. 767 00:34:28,460 --> 00:34:31,780 Y incremento tiene acceso a ella. 768 00:34:31,780 --> 00:34:33,860 Y así que déjame ir adelante y compilar este momento. 769 00:34:33,860 --> 00:34:36,330 Hacer buggy4, Enter. 770 00:34:36,330 --> 00:34:37,440 Parece compilar ahora. 771 00:34:37,440 --> 00:34:40,949 Vamos a correr buggy4, y parece que funciona realmente. 772 00:34:40,949 --> 00:34:42,780 Ahora bien, esta es una de esas cosas - 773 00:34:42,780 --> 00:34:45,870 haz lo que yo digo, no lo que hago, como acabo de hacer aquí. 774 00:34:45,870 --> 00:34:49,239 Debido a que en general, nuestros programas se van a poner mucho más interesante y 775 00:34:49,239 --> 00:34:50,440 mucho más que esto. 776 00:34:50,440 --> 00:34:53,199 Y si la solución a problemas de la vida es ah, poner toda la 777 00:34:53,199 --> 00:34:57,550 variables en la cabecera del archivo, muy rápidamente hacer llegar los programas 778 00:34:57,550 --> 00:34:59,700 terriblemente difícil de manejar. 779 00:34:59,700 --> 00:35:02,050 Se hace más difícil de idear nuevos nombres de variables. 780 00:35:02,050 --> 00:35:05,240 Se hace más difícil entender qué variable está haciendo qué. 781 00:35:05,240 --> 00:35:08,250 >> Y así, en general, esto no es una buena solución. 782 00:35:08,250 --> 00:35:09,780 Así que vamos a hacer esto mejor. 783 00:35:09,780 --> 00:35:11,920 No queremos utilizar una variable global aquí. 784 00:35:11,920 --> 00:35:14,050 Yo quiero incrementar x. 785 00:35:14,050 --> 00:35:16,050 Así que, obviamente, podría - 786 00:35:16,050 --> 00:35:18,450 al fin y al cabo, es un poco de una historia tonta, porque acabamos de hacer esto. 787 00:35:18,450 --> 00:35:22,050 Pero si yo no sabía nada de ese operador, de lo contrario no se le permitió 788 00:35:22,050 --> 00:35:27,700 cambiarla en principal en sí, ¿cómo podría yo poner en práctica Ken aquí, esta 789 00:35:27,700 --> 00:35:31,450 tiempo para no incrementar cubo pero a? 790 00:35:31,450 --> 00:35:32,700 ¿Cómo puedo cambiar esto de aquí? 791 00:35:32,700 --> 00:35:33,025 Si. 792 00:35:33,025 --> 00:35:34,275 [Inaudible] 793 00:35:37,430 --> 00:35:38,000 DAVID J. MALAN: Está bien, está bien. 794 00:35:38,000 --> 00:35:40,490 Así que ¿por qué no pasar x? 795 00:35:40,490 --> 00:35:44,390 Y entonces en vez de devolverlo, ¿por qué no me acaba de hacer return x + 1? 796 00:35:44,390 --> 00:35:46,370 Ahora, un par de cosas más que cambiar aquí. 797 00:35:46,370 --> 00:35:47,530 Estoy en el camino correcto. 798 00:35:47,530 --> 00:35:48,910 ¿Qué más necesita para modificar? 799 00:35:48,910 --> 00:35:49,470 Alguien más. 800 00:35:49,470 --> 00:35:49,882 ¿Sí? 801 00:35:49,882 --> 00:35:51,530 [Inaudible] 802 00:35:51,530 --> 00:35:53,520 DAVID J. MALAN: Tengo que cambiar el tipo de retorno de incremento 803 00:35:53,520 --> 00:35:54,590 porque no se anulará. 804 00:35:54,590 --> 00:35:56,650 Vacío significa que nada ha de ser devuelto. 805 00:35:56,650 --> 00:35:57,600 Pero está claro que ahora es. 806 00:35:57,600 --> 00:36:01,280 Así que esto tiene que cambiar a int para ser coherente con lo que 807 00:36:01,280 --> 00:36:02,580 En realidad estoy regresando. 808 00:36:02,580 --> 00:36:04,580 >> Ahora, otra cosa es aún con errores aquí. 809 00:36:04,580 --> 00:36:04,982 ¿Sí? 810 00:36:04,982 --> 00:36:06,590 [Inaudible] 811 00:36:06,590 --> 00:36:07,630 DAVID J. MALAN: Así que tengo que aumentar x? 812 00:36:07,630 --> 00:36:10,336 [Inaudible] 813 00:36:10,336 --> 00:36:11,880 DAVID J. MALAN: Ah, así que tengo que pasar x. 814 00:36:11,880 --> 00:36:13,300 Así que tengo que hacer esto aquí. 815 00:36:17,590 --> 00:36:19,690 Así que el prototipo, tengo que cambiar esto aquí. 816 00:36:19,690 --> 00:36:21,290 Así que esto tiene que convertirse en un int. 817 00:36:21,290 --> 00:36:22,820 Esto tiene que ser - 818 00:36:22,820 --> 00:36:23,670 hmm. 819 00:36:23,670 --> 00:36:24,710 De hecho, tengo un error aquí. 820 00:36:24,710 --> 00:36:25,780 Vamos a arreglar esto primero. 821 00:36:25,780 --> 00:36:27,990 ¿Cuál debe ser esta realidad? 822 00:36:27,990 --> 00:36:29,330 Por lo tanto, tiene que haber un algo int. 823 00:36:29,330 --> 00:36:30,340 Podría ser x. 824 00:36:30,340 --> 00:36:33,120 Pero, francamente, si usted empieza a llamar a todos los de su x variables, que va a obtener 825 00:36:33,120 --> 00:36:35,250 menos y menos clara cuál es cuál. 826 00:36:35,250 --> 00:36:38,210 Así que vamos a elegir arbitrariamente una nomenclatura diferente para mi 827 00:36:38,210 --> 00:36:40,220 funciones de ayuda, las funciones que estoy escribiendo. 828 00:36:40,220 --> 00:36:41,100 Lo llamaremos a. 829 00:36:41,100 --> 00:36:44,500 O podríamos llamarlo - vamos a llamarlo even_number a ser aún más explícito. 830 00:36:44,500 --> 00:36:47,610 Así que tengo que devolver todo lo que el número es más 1. 831 00:36:47,610 --> 00:36:49,720 Y ahora tengo que cambiar una cosa aquí y otra 832 00:36:49,720 --> 00:36:50,700 otra cosa aquí. 833 00:36:50,700 --> 00:36:54,150 ¿Qué tengo que cambiar en la línea 21 en primer lugar? 834 00:36:54,150 --> 00:36:55,390 Tengo que asignar a x. 835 00:36:55,390 --> 00:36:57,480 Así que no puedo llamar x incremento. 836 00:36:57,480 --> 00:37:01,000 Necesito recordar la respuesta al cambiar el valor de x en 837 00:37:01,000 --> 00:37:02,020 el lado de la mano izquierda. 838 00:37:02,020 --> 00:37:04,930 Y a pesar de que x se encuentra ahora en la izquierda y la derecha, que es totalmente correcto, porque 839 00:37:04,930 --> 00:37:08,370 a mano derecha se ejecuta primero y luego se dejó caer en la izquierda 840 00:37:08,370 --> 00:37:10,240 cosa mano, x en este caso. 841 00:37:10,240 --> 00:37:11,900 Y por último, esta es una solución fácil ahora. 842 00:37:11,900 --> 00:37:15,080 Esto sólo debe coincidir con lo que está abajo. 843 00:37:15,080 --> 00:37:17,120 Número Int. 844 00:37:17,120 --> 00:37:17,320 >> Está bien. 845 00:37:17,320 --> 00:37:20,290 Así que un montón de cambios para una función realmente estúpido. 846 00:37:20,290 --> 00:37:24,250 Pero representante de cosas que cada vez querrá hacer. 847 00:37:24,250 --> 00:37:25,490 Así que buggy4. 848 00:37:25,490 --> 00:37:26,485 Me he cagado en alguna parte. 849 00:37:26,485 --> 00:37:27,520 Oh mi Dios. 850 00:37:27,520 --> 00:37:29,660 Cinco errores, como, un programa de seis líneas. 851 00:37:29,660 --> 00:37:36,500 Entonces, ¿qué hay de malo en la línea 18, el carácter 5? 852 00:37:36,500 --> 00:37:36,970 Está bien. 853 00:37:36,970 --> 00:37:39,330 Así que tengo que declarar este int. 854 00:37:39,330 --> 00:37:39,630 Está bien. 855 00:37:39,630 --> 00:37:41,790 Así que vamos a ver, un montón de otros errores. 856 00:37:41,790 --> 00:37:42,230 Oh mi dios. 857 00:37:42,230 --> 00:37:43,880 19, 18, 21. 858 00:37:43,880 --> 00:37:46,020 Pero, de nuevo, vamos a borrar la pantalla - 859 00:37:46,020 --> 00:37:48,660 L Control de aquí - y Clang repetición. 860 00:37:48,660 --> 00:37:51,340 Así que cinco problemas que en realidad es sólo una. 861 00:37:51,340 --> 00:37:53,500 Así que ahora vamos a ejecutar buggy4, Enter. 862 00:37:53,500 --> 00:37:54,150 ¡Menos mal. 863 00:37:54,150 --> 00:37:57,434 x se ha incrementado correctamente. 864 00:37:57,434 --> 00:37:58,420 >> Está bien. 865 00:37:58,420 --> 00:38:01,700 Cualquier pregunta sobre la forma de incrementar los números? 866 00:38:01,700 --> 00:38:02,896 ¿Sí? 867 00:38:02,896 --> 00:38:06,864 Ponencia 2: ¿Por qué es que usted puede cambiar el número x en la variable 868 00:38:06,864 --> 00:38:08,860 nombrar y va a saber lo que quieres decir? 869 00:38:08,860 --> 00:38:09,600 DAVID J. MALAN: Buena pregunta. 870 00:38:09,600 --> 00:38:13,130 ¿Cómo es que sólo puedo cambiar x a número y el programa sabrá 871 00:38:13,130 --> 00:38:13,990 inmediatamente? 872 00:38:13,990 --> 00:38:16,120 Así que de nuevo, piensa en él como esta abstracción. 873 00:38:16,120 --> 00:38:20,110 Así que si yo soy principal y Ken es incremental, francamente, no me importa 874 00:38:20,110 --> 00:38:21,540 Ken lo llama a su iPad. 875 00:38:21,540 --> 00:38:25,350 No me importa lo que él llama cualquier cosa que tenga que ver con su aplicación 876 00:38:25,350 --> 00:38:26,550 de esta funcionalidad. 877 00:38:26,550 --> 00:38:32,130 Así que este es un detalle de implementación que yo, principal, no 878 00:38:32,130 --> 00:38:33,010 que importa. 879 00:38:33,010 --> 00:38:37,440 Y así, simplemente cambiando constantemente dentro de la función, el número aquí 880 00:38:37,440 --> 00:38:41,340 y el número de aquí, es todo lo que toma tanto tiempo como yo recompilar. 881 00:38:41,340 --> 00:38:43,820 Es algo así como si usted piensa - muchos de nosotros, aquellos de ustedes con conductor 882 00:38:43,820 --> 00:38:46,590 licencias que han impulsado, o incluso si usted ha conducido en un coche - 883 00:38:46,590 --> 00:38:50,710 la mayoría de nosotros no tenemos idea de cómo funciona un coche bajo la campana. 884 00:38:50,710 --> 00:38:54,710 Y, literalmente, si se abre el capó, la mayoría de nosotros - yo incluido - 885 00:38:54,710 --> 00:38:56,580 no vamos a saber realmente lo que estamos viendo. 886 00:38:56,580 --> 00:38:58,850 Algo que se puede sentir con cosas como esta ahora mismo. 887 00:38:58,850 --> 00:39:01,380 Pero en realidad no tienen que cuidar cómo el coche funciona. 888 00:39:01,380 --> 00:39:05,000 Nosotros no tenemos que cuidar lo que todas las varillas y pistones y los cables en el interior de 889 00:39:05,000 --> 00:39:07,700 el coche está haciendo en realidad. 890 00:39:07,700 --> 00:39:11,360 >> Así que algo como lo que ustedes llaman el pistón no tiene importancia 891 00:39:11,360 --> 00:39:11,920 aquí en este caso. 892 00:39:11,920 --> 00:39:12,490 La misma idea. 893 00:39:12,490 --> 00:39:12,670 ¿Sí? 894 00:39:12,670 --> 00:39:13,920 [Inaudible] 895 00:39:25,250 --> 00:39:29,530 DAVID J. MALAN: Si hay más usos de la variable xa momento atrás, 896 00:39:29,530 --> 00:39:32,220 usted, el programador, tendría que cambiar todas partes. 897 00:39:32,220 --> 00:39:35,230 O usted podría literalmente hacer Archivo, Menú, y luego Buscar / Reemplazar, 898 00:39:35,230 --> 00:39:36,270 algo por el estilo. 899 00:39:36,270 --> 00:39:40,110 Pero vas a tener que hacer esos cambios por su cuenta. 900 00:39:40,110 --> 00:39:41,200 Hay que ser coherente. 901 00:39:41,200 --> 00:39:42,450 [Inaudible] 902 00:39:47,200 --> 00:39:48,960 DAVID J. MALAN: un orden particular como aquí? 903 00:39:48,960 --> 00:39:52,660 Si esto era int otro número? 904 00:39:52,660 --> 00:39:52,940 Si. 905 00:39:52,940 --> 00:39:56,430 Así orden importa cuando se llama a la función. 906 00:39:56,430 --> 00:40:00,350 Así que si me estaban llamando incremento aquí con algo algo coma, 907 00:40:00,350 --> 00:40:01,400 hay una correlación directa. 908 00:40:01,400 --> 00:40:04,490 La primera variable, como se llame, se hace una copia de la primera 909 00:40:04,490 --> 00:40:05,480 argumento aquí. 910 00:40:05,480 --> 00:40:07,280 Lamentablemente, esto no debería ser un paréntesis. 911 00:40:07,280 --> 00:40:09,300 Las líneas del segundo argumento para arriba con el segundo. 912 00:40:09,300 --> 00:40:11,220 >> Así orden, sí, importa. 913 00:40:11,220 --> 00:40:11,490 Está bien. 914 00:40:11,490 --> 00:40:13,360 No me tomé un largo camino para llegar hasta allí. 915 00:40:13,360 --> 00:40:14,610 Otras preguntas? 916 00:40:16,460 --> 00:40:16,850 Está bien. 917 00:40:16,850 --> 00:40:20,300 Así que vamos a ver si podemos pintar un cuadro de lo que realmente sucede 918 00:40:20,300 --> 00:40:22,160 aquí debajo de la capucha, por así decirlo. 919 00:40:22,160 --> 00:40:26,310 Así que este es un rectángulo que podría representar la memoria de su computadora. 920 00:40:26,310 --> 00:40:31,240 Así que incluso si usted no tiene idea de cómo funciona la memoria RAM o cómo funciona, por lo menos 921 00:40:31,240 --> 00:40:33,590 se supone que tiene racimos de él en estos días. 922 00:40:33,590 --> 00:40:34,740 Tienes megabytes de ella. 923 00:40:34,740 --> 00:40:35,760 Tienes gigabytes de ella. 924 00:40:35,760 --> 00:40:40,690 Y sabemos desde cero semana que un byte es qué? 925 00:40:40,690 --> 00:40:41,280 8 bits. 926 00:40:41,280 --> 00:40:42,730 Bien, entonces 8 ceros y unos. 927 00:40:42,730 --> 00:40:46,300 Así que si su equipo tiene un giga de RAM, dos gigas de RAM en estos días, tiene un 928 00:40:46,300 --> 00:40:54,450 mil millones o 2 millones de bytes de memoria, o miles de millones a unos 8 millones de dólares o 16 929 00:40:54,450 --> 00:40:56,560 bits, en el interior de su ordenador. 930 00:40:56,560 --> 00:40:59,710 Ahora, a diferencia del ejemplo poco lanoso Willy, no es partículas magnéticas 931 00:40:59,710 --> 00:41:00,560 típicamente más. 932 00:41:00,560 --> 00:41:04,470 Cada vez más, en los ordenadores portátiles por lo menos, es las unidades de estado sólido, SSD, que 933 00:41:04,470 --> 00:41:05,560 simplemente no tienen partes móviles. 934 00:41:05,560 --> 00:41:06,710 Todo es electrónico. 935 00:41:06,710 --> 00:41:08,070 Todo está basado electricidad. 936 00:41:08,070 --> 00:41:12,360 Así que pensar, sin embargo, de este rectángulo como sólo representa el uno o dos 937 00:41:12,360 --> 00:41:13,930 gigabytes de memoria que tiene. 938 00:41:13,930 --> 00:41:15,500 >> Así que es un trozo de memoria. 939 00:41:15,500 --> 00:41:20,460 Ahora el mundo de la informática tiene una especie de trozos de particiones de 940 00:41:20,460 --> 00:41:22,570 memoria para hacer cosas diferentes. 941 00:41:22,570 --> 00:41:25,930 Así, por ejemplo, si esta es la memoria RAM de su computadora - como sugiere el 942 00:41:25,930 --> 00:41:30,400 rectángulo allí - Resulta que, por convención, en la parte superior de la RAM, por lo que 943 00:41:30,400 --> 00:41:33,170 decirlo, es generalmente lo que se llama un segmento de texto. 944 00:41:33,170 --> 00:41:35,910 Esos son los ceros y unos que se han recopilado. 945 00:41:35,910 --> 00:41:39,040 Por eso, cuando hemos mirado debajo de la capucha lo a.out es decir, todos 946 00:41:39,040 --> 00:41:40,360 los ceros y unos - 947 00:41:40,360 --> 00:41:44,000 cuando se ejecuta un programa, los ceros y unos se cargan desde su disco 948 00:41:44,000 --> 00:41:46,290 unidad en algo que se llama memoria RAM. 949 00:41:46,290 --> 00:41:48,950 Y en la RAM, se las coloca en la parte superior. 950 00:41:48,950 --> 00:41:50,330 Ahora, mientras tanto, tiene otras cosas. 951 00:41:50,330 --> 00:41:53,060 Datos inicializados, datos sin inicializar. 952 00:41:53,060 --> 00:41:56,440 Esas dos franjas de memoria se refieren a las variables globales, que 953 00:41:56,440 --> 00:41:57,530 no se utilizan a menudo. 954 00:41:57,530 --> 00:42:00,630 Pero a veces, si lo hacen, terminan allí también. 955 00:42:00,630 --> 00:42:01,620 Entonces hay algunas otras cosas. 956 00:42:01,620 --> 00:42:04,130 Las variables de entorno, que no vamos a pasar mucho tiempo en. 957 00:42:04,130 --> 00:42:06,120 Pero dos cosas importantes que volverá a lo largo de este 958 00:42:06,120 --> 00:42:08,130 semestre, pila y pila. 959 00:42:08,130 --> 00:42:12,280 >> Así que la mayoría de la memoria del equipo está reservado al ejecutar un programa para 960 00:42:12,280 --> 00:42:14,880 algo que se llama la pila y algo que se llama el montón. 961 00:42:14,880 --> 00:42:16,940 Y no vamos a hablar sobre el montón de hoy, pero lo haremos 962 00:42:16,940 --> 00:42:18,180 hablar de la pila. 963 00:42:18,180 --> 00:42:22,910 Y la pila está destinado a evocar la visual de como el comedor 964 00:42:22,910 --> 00:42:26,120 bandejas de comida en Mather House, o dondequiera que usted sea, donde el 965 00:42:26,120 --> 00:42:27,810 comedor personal limpiarlas todos los días. 966 00:42:27,810 --> 00:42:30,180 Les apilar arriba de la planta de arriba. 967 00:42:30,180 --> 00:42:33,800 Y del mismo modo en la memoria, hay esta idea de poner algo en un 968 00:42:33,800 --> 00:42:36,740 apilar, poner algo en una pila, poner algo en una pila. 969 00:42:36,740 --> 00:42:38,000 Y ¿qué es lo que queremos decir con esto? 970 00:42:38,000 --> 00:42:41,430 Bueno, vamos a hacer un zoom en apenas la mitad inferior de este cuadro, su ordenador 971 00:42:41,430 --> 00:42:43,990 RAM, proponer la siguiente. 972 00:42:43,990 --> 00:42:48,300 Resulta que cuando se ejecuta un programa como a.out o hola, cualquiera que sea 973 00:42:48,300 --> 00:42:49,920 del programa es que usted ha escrito, 974 00:42:49,920 --> 00:42:53,030 otra vez, esos ceros y unos se cargan desde el disco duro - que es 975 00:42:53,030 --> 00:42:56,190 almacenamiento a largo plazo, se queda allí, incluso cuando se tire de la clavija - 976 00:42:56,190 --> 00:42:57,220 cargado en la RAM. 977 00:42:57,220 --> 00:42:59,020 RAM es más rápido que los discos duros. 978 00:42:59,020 --> 00:43:00,700 Es más pequeño que los discos duros. 979 00:43:00,700 --> 00:43:03,490 Pero es que los programas en vivo mientras está en funcionamiento. 980 00:43:03,490 --> 00:43:06,380 >> Así se hace doble clic en un programa en un Mac o un PC - está cargado de 981 00:43:06,380 --> 00:43:07,750 disco duro a la RAM. 982 00:43:07,750 --> 00:43:11,760 Tan pronto como se carga en la memoria RAM, los ceros y unos ir en la parte superior forma, la 983 00:43:11,760 --> 00:43:13,130 así llamado segmento de texto. 984 00:43:13,130 --> 00:43:17,040 Pero tan pronto como el programa comienza a funcionar en realidad, el principal 985 00:43:17,040 --> 00:43:18,140 función se llama. 986 00:43:18,140 --> 00:43:21,070 Y principal, como hemos visto, a menudo tiene variables locales. 987 00:43:21,070 --> 00:43:24,560 Y tiene enteros y cadenas y caracteres y similares. 988 00:43:24,560 --> 00:43:28,300 Así que si tu programa que usted ha escrito o del programa que tiene 989 00:43:28,300 --> 00:43:33,680 doble clic utilizan algunas variables dentro de la principal, que terminan en la 990 00:43:33,680 --> 00:43:37,020 parte inferior de la pila de la memoria, por así decirlo. 991 00:43:37,020 --> 00:43:39,160 Ahora, más concretamente, ¿qué significa esto realmente? 992 00:43:39,160 --> 00:43:44,080 Esto sólo significa que si íbamos a contar las cosas - 993 00:43:44,080 --> 00:43:49,380 si íbamos a numerar los bytes de memoria RAM en su ordenador, observe que 994 00:43:49,380 --> 00:43:51,650 Este número puede ser cero bytes. 995 00:43:51,650 --> 00:43:56,130 Este podría ser el número de bytes de una, dos, tres, cuatro, cinco, seis, todos 996 00:43:56,130 --> 00:43:57,290 hasta llegar a gustar - 997 00:43:57,290 --> 00:44:01,520 2 mil millones sería todo el camino hasta allí en lo alto. 998 00:44:01,520 --> 00:44:05,960 En otras palabras, cuando hablamos de RAM o memoria en términos de bytes, se 999 00:44:05,960 --> 00:44:09,680 sólo significa que alguien ha decidido que a contar cada uno de 1000 00:44:09,680 --> 00:44:11,110 esos trozos de memoria. 1001 00:44:11,110 --> 00:44:16,950 >> Así que cuando usted necesita 32 bits para un int, o si necesita 8 bits para un char, en su 1002 00:44:16,950 --> 00:44:18,320 qué terminan en la memoria? 1003 00:44:18,320 --> 00:44:20,650 Bueno, conceptualmente, que acaba de terminar en el fondo de este 1004 00:44:20,650 --> 00:44:21,780 cosa que se llama la pila. 1005 00:44:21,780 --> 00:44:25,670 Pero lo interesante ahora es cuando llama a una función principal. 1006 00:44:25,670 --> 00:44:28,830 Supongamos que una función llamada foo, sólo un nombre arbitrario. 1007 00:44:28,830 --> 00:44:32,480 Lo que sucede es principal está en la parte inferior de esta pila de memoria. 1008 00:44:32,480 --> 00:44:35,630 Foo ahora se coloca en la parte superior de la memoria principal. 1009 00:44:35,630 --> 00:44:40,020 Así que cualquier variable local que ha foo terminar especie de vista conceptual arriba 1010 00:44:40,020 --> 00:44:40,770 los de principal. 1011 00:44:40,770 --> 00:44:46,920 Si foo llama a otra función llamada bar, aquellas variables terminan aquí. 1012 00:44:46,920 --> 00:44:49,790 Si la barra pide algo más, aquí, aquí, aquí. 1013 00:44:49,790 --> 00:44:53,900 Así que lo que es interesante acerca de la ejecución de un programa es que al llamar a funciones, 1014 00:44:53,900 --> 00:44:57,720 y como las funciones que llaman a funciones, y esas funciones llamar a funciones, 1015 00:44:57,720 --> 00:45:00,980 construir el edificio esta pila de funciones en la memoria. 1016 00:45:00,980 --> 00:45:06,740 Y sólo una vez devuelve una función no comienza a recibir esa memoria espalda. 1017 00:45:06,740 --> 00:45:11,190 Así que una de las maneras más fáciles de ejecutar fuera de la memoria en un programa de ordenador es 1018 00:45:11,190 --> 00:45:14,170 escribir funciones que nunca vuelven. 1019 00:45:14,170 --> 00:45:16,650 >> Así, por ejemplo, vamos a demostrar como mucho con un 1020 00:45:16,650 --> 00:45:18,460 programa intencionalmente buggy. 1021 00:45:18,460 --> 00:45:24,690 Déjenme seguir adelante y hacer # include, int main (void). 1022 00:45:24,690 --> 00:45:31,270 Y lo voy a hacer, mientras que (2> 1), que probablemente nunca 1023 00:45:31,270 --> 00:45:33,370 cambiar en nosotros. 1024 00:45:33,370 --> 00:45:37,720 Y déjame seguir adelante ahora y hacer printf. 1025 00:45:37,720 --> 00:45:39,950 En realidad, eso va a ser menos interesante visualmente. 1026 00:45:39,950 --> 00:45:40,460 Vamos a hacer esto. 1027 00:45:40,460 --> 00:45:44,840 Para int (i = 0; i> 0). 1028 00:45:44,840 --> 00:45:49,740 Hagamos de este error, i + +. 1029 00:45:49,740 --> 00:45:51,150 Y no printf aquí. 1030 00:45:51,150 --> 00:45:52,550 Vamos a practicar lo que predicaba. 1031 00:45:52,550 --> 00:45:54,090 Vamos a echar un método aquí. 1032 00:45:54,090 --> 00:46:00,860 Coro Vacío, y diremos int i. 1033 00:46:00,860 --> 00:46:02,295 Y luego voy a decir, printf - 1034 00:46:04,871 --> 00:46:06,790 oh, vamos a hacerlo más interesante. 1035 00:46:06,790 --> 00:46:08,350 Que en realidad no imprime nada en absoluto. 1036 00:46:08,350 --> 00:46:10,530 Vamos a hacer esto. 1037 00:46:10,530 --> 00:46:11,780 Coro (i). 1038 00:46:16,630 --> 00:46:17,000 >> Está bien. 1039 00:46:17,000 --> 00:46:20,040 Así que esto tiene fallos porque ¿por qué? 1040 00:46:20,040 --> 00:46:22,850 Estoy haciendo esto como voy porque el programa no hace nada 1041 00:46:22,850 --> 00:46:23,420 de interés. 1042 00:46:23,420 --> 00:46:24,670 Pero ese no es el objetivo. 1043 00:46:24,670 --> 00:46:30,440 El objetivo es escribir un programa que tiene como principal función hace lo que, al parecer? 1044 00:46:30,440 --> 00:46:31,370 Llame a sí mismo. 1045 00:46:31,370 --> 00:46:32,600 Y en realidad, no necesitamos el bucle. 1046 00:46:32,600 --> 00:46:36,070 Vamos a simplificar aún esto sólo para no perder de vista la realidad 1047 00:46:36,070 --> 00:46:37,310 error fundamental. 1048 00:46:37,310 --> 00:46:39,200 Principales llamadas coro para cantar algunos coros. 1049 00:46:39,200 --> 00:46:41,760 Entonces hice algo estúpido, y yo tenía coro coro llamada porque supuse 1050 00:46:41,760 --> 00:46:43,550 alguien más lo iba a poner en práctica tal vez. 1051 00:46:43,550 --> 00:46:45,960 Y ahora esto no se va a compilar todavía. 1052 00:46:45,960 --> 00:46:48,340 Tengo que hacer qué? 1053 00:46:48,340 --> 00:46:49,700 Necesito el prototipo, recuerda. 1054 00:46:49,700 --> 00:46:55,520 Así que tengo que tener aquí coro void (int i). 1055 00:46:55,520 --> 00:46:57,470 >> Así que ahora, si me voy por aquí - 1056 00:46:57,470 --> 00:46:59,030 en realidad, vamos a utilizar la ventana más grande. 1057 00:46:59,030 --> 00:47:01,670 Vamos a seguir adelante y hacer coros. 1058 00:47:01,670 --> 00:47:06,000 Vamos a seguir adelante y hacer coros. 1059 00:47:06,000 --> 00:47:08,302 El uso de declarante no identificado i. 1060 00:47:08,302 --> 00:47:09,860 Oh, eso fue estúpido. 1061 00:47:09,860 --> 00:47:11,020 No necesitamos el argumento. 1062 00:47:11,020 --> 00:47:13,680 Vamos a hacer esto. 1063 00:47:13,680 --> 00:47:14,550 Nos hubiera gustado haber comenzado de esta manera. 1064 00:47:14,550 --> 00:47:16,160 Hubiera sido un programa mucho más fácil de escribir. 1065 00:47:16,160 --> 00:47:20,100 Así que hay. 1066 00:47:20,100 --> 00:47:23,870 Ahora vamos a ir a mi ventana de terminal, vuelva a ejecutar Clang. 1067 00:47:23,870 --> 00:47:26,900 Y aquí vamos. 1068 00:47:26,900 --> 00:47:28,020 Eso fue muy rápido. 1069 00:47:28,020 --> 00:47:30,690 Lo que en realidad acaba de ocurrir, sin embargo? 1070 00:47:30,690 --> 00:47:33,430 Bueno, ahora voy a añadir la línea de impresión, por lo que podemos ver. 1071 00:47:33,430 --> 00:47:41,330 Así que permítanme decir printf, vamos a decir, estoy aquí. 1072 00:47:41,330 --> 00:47:43,470 Está bien, no hay variables, lo dejaremos así. 1073 00:47:43,470 --> 00:47:44,860 Permítanme volver a ejecutar make. 1074 00:47:44,860 --> 00:47:47,940 Permítanme volver a ejecutar el coro. 1075 00:47:47,940 --> 00:47:51,235 Y vamos. 1076 00:47:53,880 --> 00:47:55,130 Sigue adelante. 1077 00:47:57,630 --> 00:47:59,750 Como acotación al margen, ¿por qué no lo ha derrumbado todavía? 1078 00:47:59,750 --> 00:48:02,050 El fallo de segmentación pasó súper rápido antes. 1079 00:48:02,050 --> 00:48:04,250 [Inaudible] 1080 00:48:04,250 --> 00:48:04,830 DAVID J. MALAN: Exactamente. 1081 00:48:04,830 --> 00:48:06,350 Así que se necesita tiempo para imprimir. 1082 00:48:06,350 --> 00:48:08,370 Solo se necesita más trabajo por parte del equipo. 1083 00:48:08,370 --> 00:48:09,550 Y ahí está. 1084 00:48:09,550 --> 00:48:10,620 Segmentación culpa. 1085 00:48:10,620 --> 00:48:12,140 >> Así notar cuán rápido ejecutar programas. 1086 00:48:12,140 --> 00:48:14,110 Si no está imprimiendo algo, super rápido. 1087 00:48:14,110 --> 00:48:18,100 Pero todavía tengo este error de segmentación porque lo que estaba pasando? 1088 00:48:18,100 --> 00:48:21,310 Bueno, si usted piensa acerca de cómo la memoria del equipo se presenta, esta 1089 00:48:21,310 --> 00:48:22,890 pasa a ser principal. 1090 00:48:22,890 --> 00:48:23,800 Pero aquí - 1091 00:48:23,800 --> 00:48:28,670 Vamos a llamar a este coro, y vamos a llamar a este coro. 1092 00:48:28,670 --> 00:48:33,420 Y ahora si hago mi estética bien, esto es sólo va a decir coro, 1093 00:48:33,420 --> 00:48:38,060 coro, coro, coro, coro, coro, coro, hasta la saciedad. 1094 00:48:38,060 --> 00:48:39,920 Y, finalmente, ¿qué va a pasar? 1095 00:48:39,920 --> 00:48:46,690 Si el panorama es literalmente esto, ¿qué le pasa conceptual? 1096 00:48:46,690 --> 00:48:48,320 Los excesos de la pila la pila. 1097 00:48:48,320 --> 00:48:52,400 O peor aún, que acaba de invadir todo, incluyendo el segmento de texto, que es 1098 00:48:52,400 --> 00:48:54,530 los ceros y unos que representan su programa. 1099 00:48:54,530 --> 00:48:56,690 En resumen, esto es sólo super, super mal. 1100 00:48:56,690 --> 00:48:56,860 ¿Cierto? 1101 00:48:56,860 --> 00:48:58,620 Su programa se ha disparado fuera de control. 1102 00:48:58,620 --> 00:49:02,840 Usted está utilizando la memoria mucho más de lo que quería todo por un estúpido 1103 00:49:02,840 --> 00:49:03,920 error, en este caso. 1104 00:49:03,920 --> 00:49:08,160 O, en este caso, una función muy deliberadamente hecho en sí de llamada. 1105 00:49:08,160 --> 00:49:09,210 Ahora bien, esto no es del todo malo. 1106 00:49:09,210 --> 00:49:12,540 Las funciones que se llaman en realidad tiene un gran poder 1107 00:49:12,540 --> 00:49:13,700 cuando se lo usa correctamente. 1108 00:49:13,700 --> 00:49:15,650 Yo no lo he usado correctamente aquí. 1109 00:49:15,650 --> 00:49:16,940 >> Así que esto no es del todo malo. 1110 00:49:16,940 --> 00:49:20,620 Pero el hecho de que en realidad nunca deja de llamarme a mí mismo es un derecho fundamental 1111 00:49:20,620 --> 00:49:23,050 aquí debilidad de este programa. 1112 00:49:23,050 --> 00:49:25,090 Entonces, ¿dónde vamos con todo esto? 1113 00:49:25,090 --> 00:49:26,230 Bueno, ¿qué está pasando realmente? 1114 00:49:26,230 --> 00:49:30,010 Cuando llamo a la función de incremento, al igual que hacíamos en esos ejemplos, 1115 00:49:30,010 --> 00:49:33,290 Tengo un valor como una que yo paso pulg 1116 00:49:33,290 --> 00:49:35,820 Me pasa una copia del número uno. 1117 00:49:35,820 --> 00:49:37,080 Así ocurre lo siguiente. 1118 00:49:37,080 --> 00:49:40,390 Así que vamos a entrar en el ejemplo de incremento. 1119 00:49:40,390 --> 00:49:44,230 Y este tipo por aquí. 1120 00:49:44,230 --> 00:49:46,800 Así que aquí es lo que está sucediendo realmente. 1121 00:49:46,800 --> 00:49:50,770 Cuando llamé al incremento, y paso en x, pictóricamente lo que es 1122 00:49:50,770 --> 00:49:53,660 pasando aquí es esta - 1123 00:49:53,660 --> 00:50:00,240 si tengo el valor de 1 almacenan aquí, y yo en realidad llamar incremento, que 1124 00:50:00,240 --> 00:50:02,680 ahora se llama coro - 1125 00:50:02,680 --> 00:50:04,010 sí, eso me está arrojando aquí. 1126 00:50:04,010 --> 00:50:06,750 Así que vamos a llamar a este incremento. 1127 00:50:06,750 --> 00:50:09,420 Y no sabemos lo que esta función siguiente va a ser. 1128 00:50:09,420 --> 00:50:14,270 Entonces, ¿qué está sucediendo realmente está aquí en alguna parte principal, tengo un trozo de 1129 00:50:14,270 --> 00:50:16,670 memoria que almacena el número 1. 1130 00:50:16,670 --> 00:50:19,730 Cuando llamo incremento, estoy usando otro trozo de memoria, pero ahora 1131 00:50:19,730 --> 00:50:20,840 tiene la copia de 1. 1132 00:50:20,840 --> 00:50:25,480 Cuando incrementar ese valor, esto se convierte en 2 - horriblemente escrito en la 1133 00:50:25,480 --> 00:50:26,420 pantalla aquí. 1134 00:50:26,420 --> 00:50:30,550 Pero entonces, ¿qué ocurre tan pronto como regresa de incremento? 1135 00:50:30,550 --> 00:50:34,610 Esta memoria sólo se entregó de nuevo al sistema operativo, lo que significa que todo 1136 00:50:34,610 --> 00:50:37,470 que has hecho es nada útil. 1137 00:50:37,470 --> 00:50:43,460 El que estaba contenida originalmente en el principal sigue siendo realmente allí. 1138 00:50:43,460 --> 00:50:44,650 >> Entonces, ¿a dónde vamos con esto? 1139 00:50:44,650 --> 00:50:49,400 Bueno, resulta que en la memoria que tiene esta de espaldas secuencia de 1140 00:50:49,400 --> 00:50:50,940 bytes que se pueden poner las cosas pulg 1141 00:50:50,940 --> 00:50:53,760 Y resulta que ya hemos visto algo que consiste en colocar 1142 00:50:53,760 --> 00:50:55,100 cosas vuelvan a la espalda con espalda con espalda. 1143 00:50:55,100 --> 00:51:00,170 ¿Qué es una cadena, sobre la base de una semana y dos semanas ahora? 1144 00:51:00,170 --> 00:51:01,840 Así que es sólo una colección de personajes. 1145 00:51:01,840 --> 00:51:05,290 Así resulta que, del mismo modo que usted puede poner números en la memoria, de manera similar que pueda 1146 00:51:05,290 --> 00:51:06,900 poner los caracteres en la memoria. 1147 00:51:06,900 --> 00:51:09,810 Y una vez que empezamos a poner en la memoria de personajes de espaldas hacia atrás para 1148 00:51:09,810 --> 00:51:12,800 de nuevo, resulta que el uso de las cosas más simples como un bucle o 1149 00:51:12,800 --> 00:51:14,510 un bucle while, podemos iterar - 1150 00:51:14,510 --> 00:51:17,130 de izquierda a derecha sobre los caracteres de una cadena - 1151 00:51:17,130 --> 00:51:20,720 y empezar a masajear en personajes completamente diferentes. 1152 00:51:20,720 --> 00:51:25,550 A podría convertirse en B. B puede convertirse en C. Así que, en definitiva, podemos tomar una 1153 00:51:25,550 --> 00:51:28,830 Frase Inglés que realmente tiene sentido y convertir cada uno de los 1154 00:51:28,830 --> 00:51:32,440 cartas de una en una mediante un recorrido por la memoria de nuestro ordenador de izquierda a 1155 00:51:32,440 --> 00:51:34,300 derecho a cifrar en realidad. 1156 00:51:34,300 --> 00:51:36,590 >> Así que vamos a tener nuestros cinco minutos de descanso aquí, y cuando regresemos, vamos a 1157 00:51:36,590 --> 00:51:39,060 iniciar este proceso de codificación de la información. 1158 00:51:41,640 --> 00:51:43,180 >> Está bien. 1159 00:51:43,180 --> 00:51:48,440 Así que antes de bucear en algunos de criptografía y estas cosas llamadas matrices, permítanme 1160 00:51:48,440 --> 00:51:51,610 pausa para cualquier pregunta, porque me siento como si realmente algo confusa algunos de 1161 00:51:51,610 --> 00:51:52,230 esos temas. 1162 00:51:52,230 --> 00:51:53,940 Así que vamos a arreglar ahora si podemos. 1163 00:51:53,940 --> 00:51:56,480 Así que sólo hablaba de los valores de retorno. 1164 00:51:56,480 --> 00:51:58,630 Hablamos de argumentos. 1165 00:51:58,630 --> 00:52:02,330 Y hablamos de este concepto, que vamos a volver en las próximas semanas 1166 00:52:02,330 --> 00:52:07,140 venir, de ver la memoria como un montón de ellos apilados 1167 00:52:07,140 --> 00:52:08,540 bandejas, por así decirlo. 1168 00:52:08,540 --> 00:52:13,460 De abajo hacia arriba, de manera que cada bandeja que se ponen en la pila representa 1169 00:52:13,460 --> 00:52:15,160 una función que está siendo llamado. 1170 00:52:17,970 --> 00:52:20,300 ¿Alguna pregunta? 1171 00:52:20,300 --> 00:52:22,890 Entonces, ¿qué - voy a tratar de hacer una pregunta. 1172 00:52:22,890 --> 00:52:25,520 Sigo echando a perder, pero ahora Es. - usted todo visto la cara del muchacho. 1173 00:52:25,520 --> 00:52:27,020 Así que vamos a volver a eso. 1174 00:52:27,020 --> 00:52:29,700 >> Así que permítanme hacer una pregunta aquí. 1175 00:52:29,700 --> 00:52:34,810 Permítanme simplificar esto a lo que era antes de que algunos de nuestra anterior Q & A. 1176 00:52:34,810 --> 00:52:41,730 Y el hecho de que el incremento tiene paréntesis de apertura, número int, cerrado 1177 00:52:41,730 --> 00:52:42,260 paréntesis. 1178 00:52:42,260 --> 00:52:46,370 ¿Qué número representan int? 1179 00:52:46,370 --> 00:52:47,250 [Inaudible] 1180 00:52:47,250 --> 00:52:47,870 DAVID J. MALAN: un argumento. 1181 00:52:47,870 --> 00:52:50,732 De acuerdo, pero ¿qué es un argumento? 1182 00:52:50,732 --> 00:52:51,620 [Inaudible] 1183 00:52:51,620 --> 00:52:52,500 DAVID J. MALAN: Lo siento, ¿qué es eso? 1184 00:52:52,500 --> 00:52:53,150 Ponente 3: Algo pasa pulg 1185 00:52:53,150 --> 00:52:53,570 DAVID J. MALAN: Muy bien. 1186 00:52:53,570 --> 00:52:54,780 Así que algo que se pasa pulg 1187 00:52:54,780 --> 00:52:56,560 Y más en general, es sólo la entrada. 1188 00:52:56,560 --> 00:52:59,860 Si usted está escribiendo una función y el propósito de tal función en la vida es hacer 1189 00:52:59,860 --> 00:53:03,290 algo un poco diferente cada vez que lo usa, entonces la única forma de 1190 00:53:03,290 --> 00:53:07,710 que ocurra realmente parece ser que le facilite la entrada de modo que 1191 00:53:07,710 --> 00:53:10,180 puede hacer algo diferente con la entrada cada vez. 1192 00:53:10,180 --> 00:53:13,590 >> Así que hay que especificar dos cosas cuando una función tiene entradas. 1193 00:53:13,590 --> 00:53:17,240 Es necesario especificar el nombre que desea dar a esa entrada, simplemente por 1194 00:53:17,240 --> 00:53:20,790 su propia conveniencia, de modo que usted pueda referirse a ella en la función que 1195 00:53:20,790 --> 00:53:23,610 usted está escribiendo, como lo hice aquí en la línea 32. 1196 00:53:23,610 --> 00:53:27,840 Pero también hay que especificar su tipo, ya que C es un lenguaje de programación 1197 00:53:27,840 --> 00:53:28,840 que sólo requiere 1198 00:53:28,840 --> 00:53:31,810 que si quieres una variable, usted tiene que decirle a la computadora qué 1199 00:53:31,810 --> 00:53:32,790 el tipo de datos que es, 1200 00:53:32,790 --> 00:53:35,540 en gran parte, para que sepa cuántos bits a 1201 00:53:35,540 --> 00:53:37,230 asignar a esa variable. 1202 00:53:37,230 --> 00:53:38,600 Debido a que podría ser de seis - 1203 00:53:38,600 --> 00:53:39,990 lo siento, no va a ser seis. 1204 00:53:39,990 --> 00:53:41,050 Puede ser 16. 1205 00:53:41,050 --> 00:53:41,630 Puede ser 8. 1206 00:53:41,630 --> 00:53:44,410 Puede ser 32, incluso 64. 1207 00:53:44,410 --> 00:53:45,820 Pero el equipo tiene que saber. 1208 00:53:45,820 --> 00:53:49,110 Ahora el int en el lado izquierdo representa lo que, por el contrario? 1209 00:53:52,825 --> 00:53:53,780 [Inaudible] 1210 00:53:53,780 --> 00:53:54,570 DAVID J. MALAN: ¿Qué es eso? 1211 00:53:54,570 --> 00:53:55,390 [Inaudible] 1212 00:53:55,390 --> 00:53:57,920 DAVID J. MALAN: El tipo de la función y, más específicamente, la 1213 00:53:57,920 --> 00:53:59,755 tipo de su producción. 1214 00:53:59,755 --> 00:54:00,220 Derecha. 1215 00:54:00,220 --> 00:54:04,220 Así, mientras que la cosa en paréntesis representa su entrada, en su caso, la 1216 00:54:04,220 --> 00:54:06,640 cosa a la izquierda representa la salida. 1217 00:54:06,640 --> 00:54:10,560 Y en este caso, el incremento aparentemente devuelve un int. 1218 00:54:10,560 --> 00:54:14,590 Y así int es el tipo de retorno de esta función. 1219 00:54:14,590 --> 00:54:16,090 >> ¿Qué significa regresar? 1220 00:54:16,090 --> 00:54:19,810 Literalmente, se utiliza la palabra clave return. 1221 00:54:19,810 --> 00:54:24,640 Y si lo que están regresando a la derecha de la palabra clave es una 1222 00:54:24,640 --> 00:54:28,340 entero, que es consistente con lo que hemos prometido. 1223 00:54:28,340 --> 00:54:31,110 No se podría hacer algo como esto - 1224 00:54:31,110 --> 00:54:32,280 hola, mundo - 1225 00:54:32,280 --> 00:54:33,500 porque eso es una cadena. 1226 00:54:33,500 --> 00:54:35,440 Obviamente, no es un número entero. 1227 00:54:35,440 --> 00:54:40,450 Así que en resumen, la carga está realmente en nosotros, el programador, para ser más específico 1228 00:54:40,450 --> 00:54:44,730 a lo que estamos regresando y para entonces que seguir para devolverlo. 1229 00:54:44,730 --> 00:54:49,030 Y después de hacer un poco más claro el contexto - 1230 00:54:49,030 --> 00:54:50,080 ahí está otra vez. 1231 00:54:50,080 --> 00:54:51,060 El contexto - 1232 00:54:51,060 --> 00:54:52,830 gran sorpresa en un momento. 1233 00:54:52,830 --> 00:54:57,720 El contexto aquí es que la memoria de su computadora es, de nuevo, un 1234 00:54:57,720 --> 00:54:59,070 gigabytes, dos gigabytes, lo que sea. 1235 00:54:59,070 --> 00:54:59,630 Tal vez es más. 1236 00:54:59,630 --> 00:55:00,540 Tal vez sea menos. 1237 00:55:00,540 --> 00:55:03,750 Pero el equipo que considera que tiene diferentes secciones. 1238 00:55:03,750 --> 00:55:04,860 Algo pasa ahí abajo. 1239 00:55:04,860 --> 00:55:06,020 Otra cosa que pasa por allí. 1240 00:55:06,020 --> 00:55:07,540 Cosas diferentes va en el medio. 1241 00:55:07,540 --> 00:55:09,300 Y hoy, apenas comenzar a contar esta historia. 1242 00:55:09,300 --> 00:55:11,130 >> Pero volveremos a esto con el tiempo. 1243 00:55:11,130 --> 00:55:15,000 Por ahora, la única memoria que realmente importa es el segmento de texto 1244 00:55:15,000 --> 00:55:17,160 ya que sólo representa los ceros y unos 1245 00:55:17,160 --> 00:55:18,460 Clang que se emiten. 1246 00:55:18,460 --> 00:55:21,570 Así que cuando se ejecuta un comando en el teclado como a.out, o doble 1247 00:55:21,570 --> 00:55:25,350 haga clic en un icono en Mac OS o Windows, el programa está cargado de su disco 1248 00:55:25,350 --> 00:55:26,930 conducir a la RAM. 1249 00:55:26,930 --> 00:55:30,850 Y se dejó caer en la cima de la memoria RAM del ordenador, por así decirlo. 1250 00:55:30,850 --> 00:55:35,470 Ahora, mientras tanto, ya que su programa se pone en marcha y el principal se llama en la 1251 00:55:35,470 --> 00:55:39,240 programa que escribió o escribe el programa de Microsoft o Apple, que ninguno de sus 1252 00:55:39,240 --> 00:55:42,930 variables locales terminan ahí abajo en la parte inferior de la memoria de su computadora. 1253 00:55:42,930 --> 00:55:46,490 Pero si llama a otra función principal que se tiene variables o 1254 00:55:46,490 --> 00:55:48,340 argumentos, terminan encima de ella. 1255 00:55:48,340 --> 00:55:50,670 Y si esa función llama a algo, terminan encima de ella, 1256 00:55:50,670 --> 00:55:51,840 por encima de ella, por encima de ella. 1257 00:55:51,840 --> 00:55:56,100 Y sólo una vez una función se hace ejecutando hace la pila de bandejas, de modo 1258 00:55:56,100 --> 00:55:58,320 a hablar, empezar a bajar cada vez más. 1259 00:55:58,320 --> 00:56:03,370 Y esto es lo que entonces, en pocas palabras, explica por qué, cuando se llama cube - 1260 00:56:03,370 --> 00:56:04,660 o puede llamar al incremento - 1261 00:56:04,660 --> 00:56:06,490 que está pasando en una copia del valor. 1262 00:56:06,490 --> 00:56:09,840 Y lo que eso significa es que pictóricamente está literalmente escrito la 1263 00:56:09,840 --> 00:56:14,540 número 1 en otra parte de la memoria, el cambio de que 1 a 2, en el caso de los 1264 00:56:14,540 --> 00:56:15,360 incremento - 1265 00:56:15,360 --> 00:56:17,450 o a un 8, en el caso de cubo - 1266 00:56:17,450 --> 00:56:21,450 y luego tirar de memoria que desaparece tan pronto como el incremento o el cubo 1267 00:56:21,450 --> 00:56:23,410 devuelve la función. 1268 00:56:23,410 --> 00:56:24,267 >> Pregunta. 1269 00:56:24,267 --> 00:56:25,517 [Inaudible] 1270 00:56:28,090 --> 00:56:29,970 DAVID J. MALAN: ¿Dónde - Las variables globales se almacenan en lo que es 1271 00:56:29,970 --> 00:56:32,960 Actualmente, llamó a los datos inicializados o datos sin inicializar. 1272 00:56:32,960 --> 00:56:35,900 La diferencia es que si usted tiene una variable global, y se le asigna 1273 00:56:35,900 --> 00:56:39,530 inmediatamente un valor con el signo igual, que termina en la parte superior hay. 1274 00:56:39,530 --> 00:56:43,390 Y si lo que dicen int x punto y coma sin ningún valor, termina ligeramente 1275 00:56:43,390 --> 00:56:46,670 inferior en RAM simplemente por convención. 1276 00:56:46,670 --> 00:56:49,308 Otras cuestiones. 1277 00:56:49,308 --> 00:56:49,750 Está bien. 1278 00:56:49,750 --> 00:56:53,040 >> Así que esta imagen regresará a medida que más poderoso de lo que podemos hacer 1279 00:56:53,040 --> 00:56:53,830 con el equipo. 1280 00:56:53,830 --> 00:56:58,790 Pero por ahora, vamos a tener una breve introducción a la criptografía, un tipo específico de 1281 00:56:58,790 --> 00:57:01,910 criptografía que no resuelve todos los problemas del mundo, pero no resolver 1282 00:57:01,910 --> 00:57:02,480 algunos de ellos. 1283 00:57:02,480 --> 00:57:06,090 En este caso aquí, tenemos algo que se llama la criptografía de clave secreta. 1284 00:57:06,090 --> 00:57:10,430 Y criptografía de clave secreta, como su nombre indica, deriva su seguridad 1285 00:57:10,430 --> 00:57:11,330 a partir de un secreto. 1286 00:57:11,330 --> 00:57:14,720 Así, por ejemplo, si usted es nuevo en la escuela primaria y que estés pasando un 1287 00:57:14,720 --> 00:57:18,040 cartita amor secreto para el chico o la chica que te están aplastando a - si usted 1288 00:57:18,040 --> 00:57:20,820 Quería pasar que a través de la audiencia, probablemente no escribiría 1289 00:57:20,820 --> 00:57:24,120 una nota en Inglés o lo que su lengua materna es, más bien, 1290 00:57:24,120 --> 00:57:25,800 podría cifrar. 1291 00:57:25,800 --> 00:57:27,820 O usted puede enviarles un mensaje de texto en estos días. 1292 00:57:27,820 --> 00:57:30,310 Pero que en realidad podría pasar una nota a través de la sala de clase. 1293 00:57:30,310 --> 00:57:33,820 Y para hacerlo de forma segura, de tal manera que sus amigos y el profesor 1294 00:57:33,820 --> 00:57:36,820 no sabes lo que estás escribiendo, es posible llegar a una bastante simple 1295 00:57:36,820 --> 00:57:37,800 algoritmo - 1296 00:57:37,800 --> 00:57:39,290 joven, aunque es posible que - 1297 00:57:39,290 --> 00:57:40,780 a sólo codificar las palabras. 1298 00:57:40,780 --> 00:57:44,390 Así que en lugar de escribir una, podría escribir B. En lugar de B, puede escribir 1299 00:57:44,390 --> 00:57:46,670 C. En lugar de C, puede escribir D, y así sucesivamente. 1300 00:57:46,670 --> 00:57:50,020 O bien, podría llegar a una traducción más sofisticado de las letras 1301 00:57:50,020 --> 00:57:51,300 para diferentes letras. 1302 00:57:51,300 --> 00:57:55,440 Pero el problema es el chico o la chica a la que le está enviando esta nota tiene que 1303 00:57:55,440 --> 00:57:56,850 saber algo. 1304 00:57:56,850 --> 00:57:59,620 ¿Qué es lo que, obviamente? 1305 00:57:59,620 --> 00:58:01,400 Al igual que, cuál es su secreto. 1306 00:58:01,400 --> 00:58:04,620 Al igual que, ¿qué es eso mapeo entre A y B y Cs y Ds? 1307 00:58:04,620 --> 00:58:08,780 ¿Es sólo la adición de uno, por así decirlo, a cada una de las letras para ir de 1308 00:58:08,780 --> 00:58:09,730 A a B, B a C? 1309 00:58:09,730 --> 00:58:11,350 ¿Es más complejo que eso? 1310 00:58:11,350 --> 00:58:16,450 Así que tú y tu enamorado es necesario tener esta información secreta. 1311 00:58:16,450 --> 00:58:18,170 Pero hay una especie de catch-22 aquí. 1312 00:58:18,170 --> 00:58:20,760 Si esta es la primera vez que va a enviar esta carta de amor a través de la 1313 00:58:20,760 --> 00:58:25,590 clase, ¿cómo es ese niño o niña va a saber cuál es el secreto incluso es? 1314 00:58:25,590 --> 00:58:28,450 Así que la clave secreta de cifrado no resuelve todos los problemas del mundo. 1315 00:58:28,450 --> 00:58:30,490 Y de hecho hay una relación que vamos a volver a hacia 1316 00:58:30,490 --> 00:58:31,370 semestre final. 1317 00:58:31,370 --> 00:58:35,970 >> Del mismo modo, no tienen ninguno de nosotros probablemente jamás enviada a - 1318 00:58:35,970 --> 00:58:39,453 del mismo modo, no la mayoría de nosotros conoce a alguien que trabaja, por ejemplo, en 1319 00:58:39,453 --> 00:58:40,300 Amazon.com. 1320 00:58:40,300 --> 00:58:43,130 Y, sin embargo, muchos de nosotros hemos comprado cosas en Amazon.com. 1321 00:58:43,130 --> 00:58:45,670 Y hemos sido enseñados a asumir que estos e-commerce 1322 00:58:45,670 --> 00:58:47,060 transacciones son seguras. 1323 00:58:47,060 --> 00:58:47,210 ¿Cierto? 1324 00:58:47,210 --> 00:58:49,310 La dirección URL https probablemente dice. 1325 00:58:49,310 --> 00:58:51,590 Hay tal vez un icono de candado poco tonto en alguna parte. 1326 00:58:51,590 --> 00:58:54,680 Hay una especie de criptografía de la seguridad de su información de tarjeta de crédito 1327 00:58:54,680 --> 00:58:56,980 entre usted y Amazon.com. 1328 00:58:56,980 --> 00:59:00,410 Y, sin embargo, si la criptografía implica conocer algún secreto, y sin embargo no lo hacen 1329 00:59:00,410 --> 00:59:03,330 conozco a nadie en Amazon, y he arreglado ciertamente no cualquier tipo de 1330 00:59:03,330 --> 00:59:07,350 secreto con alguien en el Amazonas, ¿cómo es mi ordenador o mi navegador haciendo esto? 1331 00:59:07,350 --> 00:59:10,100 Bueno, resulta que hay otros tipos de criptografía en total que resuelven 1332 00:59:10,100 --> 00:59:10,740 ese problema. 1333 00:59:10,740 --> 00:59:13,610 Pero por hoy, nos centraremos en el sencillo, donde se pueden organizar en 1334 00:59:13,610 --> 00:59:18,480 avanzar a conocer algún secreto, como un plus o alguna correlación entre A y B. 1335 00:59:18,480 --> 00:59:20,710 >> Y el proceso de criptografía generalmente implica esto. 1336 00:59:20,710 --> 00:59:23,550 Usted tiene un poco de texto sin formato, representado aquí a la izquierda. 1337 00:59:23,550 --> 00:59:26,260 Puede ejecutarlo a través de algún tipo de algoritmo o procedimiento 1338 00:59:26,260 --> 00:59:27,670 para cifrarlo. 1339 00:59:27,670 --> 00:59:31,390 Tal vez eso es sólo A se convierte en B, B se convierte en C y luego se termina con 1340 00:59:31,390 --> 00:59:32,260 texto cifrado. 1341 00:59:32,260 --> 00:59:36,450 Mientras tanto, una vez que su enamorado recibe la nota secreta, él o ella tiene que entonces 1342 00:59:36,450 --> 00:59:39,950 descifrar por lo general que el algoritmo de inversión a fin de conseguir 1343 00:59:39,950 --> 00:59:41,640 copia el texto sin formato. 1344 00:59:41,640 --> 00:59:43,860 Ahora hay encarnaciones físicas de este. 1345 00:59:43,860 --> 00:59:46,720 Por ejemplo, este es un pequeño anillo decodificador secreto. 1346 00:59:46,720 --> 00:59:50,060 Y este es un anillo en el sentido de que hay dos diales aquí. 1347 00:59:50,060 --> 00:59:53,630 En la periferia exterior de esta cosa, no hay letras de la A a la Z, 1348 00:59:53,630 --> 00:59:55,110 aunque están en orden aleatorio. 1349 00:59:55,110 --> 00:59:58,410 Y en el interior, de hecho hay algunos números, de manera que con este 1350 00:59:58,410 --> 01:00:02,940 anillo, se puede convertir tipo de fuera pero no por dentro con el fin de alinear 1351 01:00:02,940 --> 01:00:04,110 números con letras. 1352 01:00:04,110 --> 01:00:08,290 Y en el clip que está a punto de ver - algunos de los cuales usted pudo haber visto 24/7 1353 01:00:08,290 --> 01:00:11,120 durante la temporada de Navidad de una película que se llama Un cuento de Navidad. 1354 01:00:11,120 --> 01:00:16,050 Verás que poco Ralphie estaba tan ansioso por descubrir qué huerfanito 1355 01:00:16,050 --> 01:00:19,810 Annie mensaje secreto era lo que había sido comunicada, creo, en la 1356 01:00:19,810 --> 01:00:22,810 forma de mensajes numéricos en una serie de la caja. 1357 01:00:22,810 --> 01:00:26,760 Y había que acumular todas las pequeñas tarjetas que vienen 1358 01:00:26,760 --> 01:00:27,480 en la caja de cereales. 1359 01:00:27,480 --> 01:00:28,320 Había que enviar por correo pulg 1360 01:00:28,320 --> 01:00:31,060 Había que recuperar el anillo decodificador secreto, de modo que usted puede finalmente entender 1361 01:00:31,060 --> 01:00:34,190 lo que la cartografía es entre letras y números, 1362 01:00:34,190 --> 01:00:35,420 o letras y letras. 1363 01:00:35,420 --> 01:00:39,790 Así que te doy este clip corto de una historia de Navidad para motivar conjunto de procesadores 2 y 1364 01:00:39,790 --> 01:00:42,340 nuestra discusión, en un momento, de las matrices. 1365 01:00:42,340 --> 01:00:43,773 Así que aquí tenemos Ralphie. 1366 01:00:43,773 --> 01:00:44,126 >> [REPRODUCCIÓN DE VÍDEO] 1367 01:00:44,126 --> 01:00:47,470 -Sea notorio a todos que Ralph Parker se nombra 1368 01:00:47,470 --> 01:00:50,690 miembro de la Little Orphan Annie Secret Circle y tiene derecho a todo 1369 01:00:50,690 --> 01:00:53,500 los honores y beneficios que ocurren al mismo. 1370 01:00:53,500 --> 01:00:56,040 -Firmado, Little Orphan Annie. 1371 01:00:56,040 --> 01:00:58,730 Refrendado, Pierre Andre! 1372 01:00:58,730 --> 01:01:00,150 En tinta! 1373 01:01:00,150 --> 01:01:02,910 Honores y beneficios, ya a la edad de nueve. 1374 01:01:09,970 --> 01:01:10,730 Vamos, vamos a seguir adelante con ella. 1375 01:01:10,730 --> 01:01:15,000 Yo no necesito todo ese jazz sobre contrabandistas y piratas. 1376 01:01:15,000 --> 01:01:17,624 -Escuche mañana por la noche para la aventura final de El Negro 1377 01:01:17,624 --> 01:01:19,710 Pirate Ship. 1378 01:01:19,710 --> 01:01:23,380 Ahora es el momento para el mensaje secreto de Annie como ustedes, miembros 1379 01:01:23,380 --> 01:01:25,670 del Círculo Secreto. 1380 01:01:25,670 --> 01:01:30,260 Recuerde, los niños, sólo los miembros del Círculo Secreto de Annie puede decodificar 1381 01:01:30,260 --> 01:01:31,660 Mensaje secreto de Annie. 1382 01:01:31,660 --> 01:01:36,230 Recuerde, Annie depende de ti. 1383 01:01:36,230 --> 01:01:38,720 Establezca sus alfileres para B2. 1384 01:01:38,720 --> 01:01:41,040 Aquí está el mensaje. 1385 01:01:41,040 --> 01:01:42,470 12, 11 - 1386 01:01:42,470 --> 01:01:46,000 -Estoy en mi primera reunión secreta. 1387 01:01:46,000 --> 01:01:49,440 -14, 11, 18, 16 - 1388 01:01:49,440 --> 01:01:51,700 -Pierre estaba en esta noche gran voz. 1389 01:01:51,700 --> 01:01:54,890 Me di cuenta de que el mensaje de esta noche fue muy importante. 1390 01:01:54,890 --> 01:01:56,750 -3, 25. 1391 01:01:56,750 --> 01:01:58,590 Ese es un mensaje de Annie ella. 1392 01:01:58,590 --> 01:01:59,840 Recuerde, no se lo digas a nadie. 1393 01:02:04,570 --> 01:02:08,750 -90 Segundos más tarde, estoy en la única habitación de la casa donde un niño de nueve años 1394 01:02:08,750 --> 01:02:12,980 podía sentarse en la intimidad y decodificación. 1395 01:02:12,980 --> 01:02:17,130 Aha, B. Fui a la siguiente. 1396 01:02:17,130 --> 01:02:20,330 E. La primera palabra es ser. 1397 01:02:20,330 --> 01:02:22,670 S. Venía más fácil ahora. 1398 01:02:22,670 --> 01:02:24,590 U. 1399 01:02:24,590 --> 01:02:26,510 -Oh, vamos, Ralphie. 1400 01:02:26,510 --> 01:02:28,430 Me tengo que ir. 1401 01:02:28,430 --> 01:02:30,350 -Voy a estar justo abajo, ma. 1402 01:02:30,350 --> 01:02:33,720 -Gee whiz. 1403 01:02:33,720 --> 01:02:38,270 -T, O. Asegúrese de. 1404 01:02:38,270 --> 01:02:40,000 Asegúrese de que? 1405 01:02:40,000 --> 01:02:42,105 ¿Cuál era Little Orphan Annie tratando de decir? 1406 01:02:42,105 --> 01:02:43,095 Asegúrese de que? 1407 01:02:43,095 --> 01:02:43,590 -Ralphie! 1408 01:02:43,590 --> 01:02:44,580 Randy tiene que ir. 1409 01:02:44,580 --> 01:02:45,570 Haga el favor de salir? 1410 01:02:45,570 --> 01:02:46,560 -Está bien, mamá. 1411 01:02:46,560 --> 01:02:48,540 Voy a estar fuera. 1412 01:02:48,540 --> 01:02:50,580 -Yo estaba cada vez más cerca ahora. 1413 01:02:50,580 --> 01:02:52,550 La tensión era terrible. 1414 01:02:52,550 --> 01:02:53,355 ¿Qué fue? 1415 01:02:53,355 --> 01:02:56,315 El destino del planeta puede colgar de un hilo. 1416 01:02:56,315 --> 01:02:56,790 -Ralphie! 1417 01:02:56,790 --> 01:02:59,165 Randy tiene que ir. 1418 01:02:59,165 --> 01:03:02,310 -Voy a tener razón a cabo, por el amor de Dios. 1419 01:03:02,310 --> 01:03:04,000 -Vaya, casi llegamos. 1420 01:03:04,000 --> 01:03:05,180 Mis dedos volaban. 1421 01:03:05,180 --> 01:03:07,150 Mi mente era una trampa de acero. 1422 01:03:07,150 --> 01:03:08,790 Cada poro vibró. 1423 01:03:08,790 --> 01:03:10,040 Era casi transparente. 1424 01:03:10,040 --> 01:03:13,400 Sí, sí, sí, sí. 1425 01:03:13,400 --> 01:03:18,960 -Asegúrese de tomar su Ovaltine. 1426 01:03:18,960 --> 01:03:20,210 Ovaltine? 1427 01:03:24,010 --> 01:03:25,260 Un comercial de mala muerte? 1428 01:03:28,200 --> 01:03:29,640 Hijo de puta. 1429 01:03:29,640 --> 01:03:33,340 [FIN DE REPRODUCCIÓN DE VÍDEO] 1430 01:03:33,340 --> 01:03:36,040 >> DAVID J. MALAN: Así que ahí tenemos la criptografía. 1431 01:03:36,040 --> 01:03:39,670 Entonces, ¿cómo en un ordenador podemos ir sobre la aplicación o 1432 01:03:39,670 --> 01:03:40,950 que representa este tipo de cosas? 1433 01:03:40,950 --> 01:03:44,430 Bueno, necesitamos una manera de expresarnos un poco más flexible que 1434 01:03:44,430 --> 01:03:46,420 nuestras variables hasta el momento han permitido. 1435 01:03:46,420 --> 01:03:47,370 Hemos tenido enteros. 1436 01:03:47,370 --> 01:03:48,380 Hemos tenido caracteres. 1437 01:03:48,380 --> 01:03:50,790 Hemos tenido flotadores y dobles y algunos otros. 1438 01:03:50,790 --> 01:03:55,050 Pero esas son las piezas individuales de la memoria que realmente no nos permiten 1439 01:03:55,050 --> 01:03:58,010 expresar cosas como las palabras y oraciones y frases. 1440 01:03:58,010 --> 01:04:00,200 De hecho, hemos llamado cuerdas esas cosas. 1441 01:04:00,200 --> 01:04:03,650 Pero prometió que esto es sólo una simplificación en el CS50 1442 01:04:03,650 --> 01:04:07,020 biblioteca que estamos intentando pelar. 1443 01:04:07,020 --> 01:04:08,970 >> Así que vamos a empezar a hacer eso aquí. 1444 01:04:08,970 --> 01:04:11,130 Déjenme seguir adelante y abrir un archivo - 1445 01:04:11,130 --> 01:04:13,770 todos estos archivos están disponibles en línea como de costumbre - 1446 01:04:13,770 --> 01:04:19,120 array.c llamado para resolver un problema relacionado con cadenas pero que pinta una 1447 01:04:19,120 --> 01:04:23,040 imagen aquí de cómo podríamos utilizar algo llamado una matriz. 1448 01:04:23,040 --> 01:04:25,530 Una matriz es un tipo de datos. 1449 01:04:25,530 --> 01:04:31,320 Es un tipo de variable, de clases, que tiene varios tipos de datos más pequeñas 1450 01:04:31,320 --> 01:04:34,150 dentro de ella de espaldas a la espalda con espalda. 1451 01:04:34,150 --> 01:04:37,700 Así, por ejemplo, si queremos escribir un pequeño programa que le da su 1452 01:04:37,700 --> 01:04:42,110 concurso medio de un curso como 50 que tiene dos exámenes, usted podría muy fácilmente 1453 01:04:42,110 --> 01:04:45,170 escribir este programa - basado incluso en algunos de los materiales de la semana pasada - 1454 01:04:45,170 --> 01:04:47,770 mediante el uso de getInt y un par de variables. 1455 01:04:47,770 --> 01:04:51,920 Int quiz1, int quiz2, y es bastante sencillo. 1456 01:04:51,920 --> 01:04:55,930 Es tal vez 10, 20 líneas de código, max, para implementar un programa que pida la 1457 01:04:55,930 --> 01:05:01,170 usuario para dos anotaciones prueba y luego calcula su promedio agregándolos 1458 01:05:01,170 --> 01:05:03,850 juntos, dividiendo por dos, y luego imprimir los resultados. 1459 01:05:03,850 --> 01:05:06,380 Probablemente podríamos hacer eso muy fácilmente ahora, después de 1460 01:05:06,380 --> 01:05:07,510 un cierto número de minutos. 1461 01:05:07,510 --> 01:05:11,005 >> Pero el problema es que supongo que el 50 tenía tres o cuatro pruebas. 1462 01:05:11,005 --> 01:05:13,510 Supongamos que usted quisiera utilizar el mismo programa para una clase que tenía 1463 01:05:13,510 --> 01:05:14,850 pruebas semanales. 1464 01:05:14,850 --> 01:05:16,610 Piense en una clase que ha exámenes semanales. 1465 01:05:16,610 --> 01:05:20,610 Si hay como 16 o menos semanas en un semestre, ahora tiene 16 variables - 1466 01:05:20,610 --> 01:05:24,270 quiz1 int, int quiz2, int quiz3, int quiz4. 1467 01:05:24,270 --> 01:05:27,560 Tan pronto como usted comienza a ver esta redundancia, esta copiando y pegando 1468 01:05:27,560 --> 01:05:31,390 de código, debe comenzar a hacer que te gustaría que hubiera una manera mejor. 1469 01:05:31,390 --> 01:05:33,930 Y gracias a Dios, a causa de las matrices, lo hay. 1470 01:05:33,930 --> 01:05:34,980 Así que vamos a hacer esto. 1471 01:05:34,980 --> 01:05:38,430 En primer lugar, permítanme presentarles a una cosa muy simple que no hemos usado hasta ahora, 1472 01:05:38,430 --> 01:05:40,140 pero lo vas a ver de vez en cuando en el código. 1473 01:05:40,140 --> 01:05:42,360 Esto es lo que generalmente se llama una constante. 1474 01:05:42,360 --> 01:05:45,790 Así que es una constante en el sentido de que este valor nunca cambia. 1475 01:05:45,790 --> 01:05:49,210 La convención humana al crear una constante es utilizar todo el capital 1476 01:05:49,210 --> 01:05:51,940 cartas, sólo para que realmente se destaca en el código. 1477 01:05:51,940 --> 01:05:55,960 Y la palabra clave especial que se utiliza en C # define. 1478 01:05:55,960 --> 01:06:00,250 Así que si usted dice # define, luego un espacio, entonces la palabra que desea utilizar para 1479 01:06:00,250 --> 01:06:03,260 la constante de nombre, y luego el valor de la constante. 1480 01:06:03,260 --> 01:06:06,180 Así que nota, esto es diferente de asigna algo a una variable. 1481 01:06:06,180 --> 01:06:07,020 No hay ningún signo igual. 1482 01:06:07,020 --> 01:06:08,240 No hay punto y coma. 1483 01:06:08,240 --> 01:06:11,410 Esto es lo que se conoce generalmente como una directiva de preprocesador, pero más en 1484 01:06:11,410 --> 01:06:12,210 que otra vez. 1485 01:06:12,210 --> 01:06:18,540 >> Por ahora, esto crea un valor inmutable llamado TESTS cuya efectiva 1486 01:06:18,540 --> 01:06:19,940 valor numérico es 2. 1487 01:06:19,940 --> 01:06:24,020 Así que donde quiera que vea pruebas, exámenes, pruebas cortas a lo largo de este archivo, que es 1488 01:06:24,020 --> 01:06:25,410 sólo el número 2. 1489 01:06:25,410 --> 01:06:28,100 Ahora, si miro principal ahora, vamos a ver cómo funciona esto. 1490 01:06:28,100 --> 01:06:29,500 Al principio, parece un poco críptico. 1491 01:06:29,500 --> 01:06:31,340 Pero todo es cosa de una semana. 1492 01:06:31,340 --> 01:06:32,710 Pida al usuario para los grados. 1493 01:06:32,710 --> 01:06:33,630 ¿Cómo podemos hacer esto? 1494 01:06:33,630 --> 01:06:35,470 Pues bien, en la línea 22 - 1495 01:06:35,470 --> 01:06:37,210 esta es realmente la parte jugosa - 1496 01:06:37,210 --> 01:06:40,960 Yo declaro un flotador, pero no es sólo un solo flotador. 1497 01:06:40,960 --> 01:06:44,620 Estoy declarando, más bien, un conjunto de valores de punto flotante. 1498 01:06:44,620 --> 01:06:49,100 Esa variable se va a llamar grados, como se implica aquí. 1499 01:06:49,100 --> 01:06:53,080 Pero la única nueva sintaxis entonces son estos corchetes, el hecho de 1500 01:06:53,080 --> 01:06:59,350 que he dicho grados flotador y luego abrir el paréntesis y luego un número. 1501 01:06:59,350 --> 01:07:02,460 Aviso, si esto es una constante, esto es como lo hicimos. 1502 01:07:02,460 --> 01:07:06,890 Esto significa ordenador hey, dame dos flotadores, y vamos a llamar colectivamente 1503 01:07:06,890 --> 01:07:08,220 los grados. 1504 01:07:08,220 --> 01:07:11,920 Esto está en contraste con un proceso mucho más tedioso como este. 1505 01:07:11,920 --> 01:07:15,850 Grado 1 flotar, flotar grade2, y así sucesivamente. 1506 01:07:15,850 --> 01:07:20,010 Así que una matriz que nos permite poner en práctica esta idea, pero mucho menos desordenadamente, en 1507 01:07:20,010 --> 01:07:24,630 de forma que podemos escribir una línea de código en lugar de, por ejemplo, 16 para una 16 1508 01:07:24,630 --> 01:07:25,740 semana del semestre. 1509 01:07:25,740 --> 01:07:29,950 Así que yo no quería que codificar 2 porque si piensas en este momento 1510 01:07:29,950 --> 01:07:34,160 lógicamente - Supongo que el año que viene CS50 cambios a 3 cuestionarios en su lugar. 1511 01:07:34,160 --> 01:07:35,510 Y yo tenía el número 2 aquí. 1512 01:07:35,510 --> 01:07:36,600 Yo tenía el número 2 aquí. 1513 01:07:36,600 --> 01:07:37,580 Yo tenía el número 2 aquí. 1514 01:07:37,580 --> 01:07:38,560 Yo tenía el número 2 aquí. 1515 01:07:38,560 --> 01:07:43,180 Se vuelve muy tedioso y muy fácil meter la pata y cambiar accidentalmente 1516 01:07:43,180 --> 01:07:47,690 un valor a 3 y se pierda algún otro valor de 2. 1517 01:07:47,690 --> 01:07:52,460 Así que voy a este lugar abstracto de distancia y utilizar esta constante que, como su 1518 01:07:52,460 --> 01:07:54,120 nombre indica, nunca cambia. 1519 01:07:54,120 --> 01:07:57,710 Y ahora, no importa si tenemos diferentes concursos de este año o el siguiente, 1520 01:07:57,710 --> 01:08:01,210 sólo hay que cambiar en un solo lugar, aquí arriba en la parte superior. 1521 01:08:01,210 --> 01:08:02,720 >> Así que eso es todo lo constante es. 1522 01:08:02,720 --> 01:08:08,680 Mientras tanto, la característica nueva es que conceptual de una matriz. 1523 01:08:08,680 --> 01:08:14,660 Así que los corchetes darme esta flota y me deja muchas colectivamente 1524 01:08:14,660 --> 01:08:16,630 los llaman los grados aquí. 1525 01:08:16,630 --> 01:08:17,990 Así que ahora vamos a ver lo que voy a hacer. 1526 01:08:17,990 --> 01:08:20,359 Aquí, en la línea 24 es el inicio de un bucle. 1527 01:08:20,359 --> 01:08:22,260 Esto es realmente nada especial. 1528 01:08:22,260 --> 01:08:25,060 Es sólo mediante pruebas en lugar de un número codificado. 1529 01:08:25,060 --> 01:08:27,790 Pero no hay nada intelectualmente diferente allí la semana pasada. 1530 01:08:27,790 --> 01:08:29,040 Esto es sólo printf. 1531 01:08:29,040 --> 01:08:35,490 Así printf ("número cuestionario% d de% d") porque sólo quiero imprimir dame concurso 1532 01:08:35,490 --> 01:08:38,050 número uno de los dos y luego dos de dos. 1533 01:08:38,050 --> 01:08:39,850 Así que esto es puramente una cosa estética. 1534 01:08:39,850 --> 01:08:42,500 Pero la parte más interesante ahora está en la línea 27. 1535 01:08:42,500 --> 01:08:48,310 A fin de llenar en uno de los dos marcadores de posición con un punto flotante 1536 01:08:48,310 --> 01:08:51,029 valor, de nuevo utilizar corchetes. 1537 01:08:51,029 --> 01:08:55,620 En este caso, estoy usando i porque este bucle for se ha iniciado con i igual a 1538 01:08:55,620 --> 01:08:57,560 ¿Qué valor, al parecer? 1539 01:08:57,560 --> 01:08:58,279 0. 1540 01:08:58,279 --> 01:09:01,350 >> Así que en la primera iteración de este bucle, es como si 1541 01:09:01,350 --> 01:09:02,689 escribió esto en el código. 1542 01:09:02,689 --> 01:09:05,580 Pero en la segunda iteración de este bucle, es como si 1543 01:09:05,580 --> 01:09:07,750 escribió esto en mi código. 1544 01:09:07,750 --> 01:09:10,750 Pero el hecho de que yo estoy usando una variable es perfecto porque, como su nombre 1545 01:09:10,750 --> 01:09:14,300 sugiere, está variando su valor en cada iteración. 1546 01:09:14,300 --> 01:09:17,370 Así que me estoy llenando este conjunto un lugar a la vez. 1547 01:09:17,370 --> 01:09:18,910 ¿Qué hace este arreglo parece? 1548 01:09:18,910 --> 01:09:21,430 Bueno, la razón por la que llegó a esta super simple rectángulo en la pantalla aquí 1549 01:09:21,430 --> 01:09:23,350 antes era por esta razón. 1550 01:09:23,350 --> 01:09:27,279 Una matriz es simplemente un trozo de memoria seguido de otro pedazo de la memoria, 1551 01:09:27,279 --> 01:09:30,109 seguido por otro bloque de memoria, y así sucesivamente. 1552 01:09:30,109 --> 01:09:35,260 Así que si mi matriz es de tamaño 2, en este caso aquí, lo único que estaría haciendo por 1553 01:09:35,260 --> 01:09:37,590 escribiendo en las puntuaciones de mis preguntas y respuestas, como aquí. 1554 01:09:37,590 --> 01:09:39,430 Tengo 100 en este caso. 1555 01:09:39,430 --> 01:09:42,020 Y entonces me puse un 99 en este caso. 1556 01:09:42,020 --> 01:09:46,040 Entonces, esta memoria no podría incluso ser utilizado porque sólo he pedido al 1557 01:09:46,040 --> 01:09:48,689 equipo para una matriz de tamaño 2. 1558 01:09:48,689 --> 01:09:50,180 Las plazas están todavía allí. 1559 01:09:50,180 --> 01:09:50,340 ¿Cierto? 1560 01:09:50,340 --> 01:09:52,500 Aún dispone de dos gigabytes de RAM, incluso si sólo 1561 01:09:52,500 --> 01:09:53,979 pedir dos flotadores. 1562 01:09:53,979 --> 01:09:58,710 Así que la idea detrás de las matrices es que la computadora sólo toma un trozo de memoria 1563 01:09:58,710 --> 01:10:03,230 y luego reparte trozos más pequeños de espaldas a la espalda con espalda. 1564 01:10:03,230 --> 01:10:04,740 Y eso es todo un arreglo es. 1565 01:10:04,740 --> 01:10:09,080 Es un pedazo continuo de memoria, dentro de los cuales usted puede poner las cosas. 1566 01:10:09,080 --> 01:10:12,400 >> Ahora bien, esto sucede a continuación, sólo hacer un poco de aritmética aburrido. 1567 01:10:12,400 --> 01:10:16,170 Si me desplazo hasta aquí, aquí es donde me iterar sobre la matriz. 1568 01:10:16,170 --> 01:10:19,410 Vengo con la suma de todos los valores de la matriz. 1569 01:10:19,410 --> 01:10:22,390 Y luego usar la función round aquí para hacer realidad el 1570 01:10:22,390 --> 01:10:23,940 suma dividida por concursos. 1571 01:10:23,940 --> 01:10:27,450 Pero permítanme saludar a mi mano que como una especie de aritmética suficiente por ahora. 1572 01:10:27,450 --> 01:10:30,010 Pero todo lo que está haciendo por mí en última instancia está calculando un promedio. 1573 01:10:30,010 --> 01:10:33,640 Así que prueba primero más segundo cuestionario, dividido por 2 y luego imprimir 1574 01:10:33,640 --> 01:10:34,700 hacia fuera como un int. 1575 01:10:34,700 --> 01:10:39,030 >> Pero ahora vamos a la transición a un ejemplo diferente llamado cadena1, 1576 01:10:39,030 --> 01:10:42,370 que pinta un cuadro similar pero utilizando cuerdas. 1577 01:10:42,370 --> 01:10:45,550 Déjenme seguir adelante y simplificar esto por un momento. 1578 01:10:45,550 --> 01:10:48,340 Y perdona la sangría por ahora. 1579 01:10:48,340 --> 01:10:52,280 Observe en la línea 19 de este ejemplo, tengo una cadena del usuario. 1580 01:10:52,280 --> 01:10:55,780 Pero note lo que estoy haciendo en la siguiente líneas 22 en adelante. 1581 01:10:55,780 --> 01:11:00,260 En realidad estoy iterar desde i hasta - y este es un nuevo truco - 1582 01:11:00,260 --> 01:11:02,730 strlen, cadena de longitud. 1583 01:11:02,730 --> 01:11:07,010 Esta es una función que viene con C que si se le pasa una cadena, que cuenta 1584 01:11:07,010 --> 01:11:08,950 que el número de caracteres que hay en esa cadena. 1585 01:11:08,950 --> 01:11:09,440 Eso es todo. 1586 01:11:09,440 --> 01:11:12,520 El hecho de que sea en lugar de strlen longitud de la cadena es sólo porque es 1587 01:11:12,520 --> 01:11:13,040 más sucinta. 1588 01:11:13,040 --> 01:11:17,100 Hace 30 años, la gente le gusta escribir cosas lo más sucintamente posible. 1589 01:11:17,100 --> 01:11:19,080 Para ello hemos mantenido esa convención aquí. 1590 01:11:19,080 --> 01:11:21,730 i + + sólo significa incrementar i en cada iteración. 1591 01:11:21,730 --> 01:11:24,310 Y ahora noten esto, que es muy interesante. 1592 01:11:24,310 --> 01:11:28,730 Así, en la línea 24, digo ordenador, déme un personaje, ocho 1593 01:11:28,730 --> 01:11:30,770 bits, y lo llaman c. 1594 01:11:30,770 --> 01:11:35,370 Pero ¿qué es esta en el lado derecho diciendo? 1595 01:11:35,370 --> 01:11:38,150 En Inglés, ¿qué representa? 1596 01:11:38,150 --> 01:11:40,070 [Inaudible] 1597 01:11:40,070 --> 01:11:40,490 DAVID J. MALAN: Exactamente. 1598 01:11:40,490 --> 01:11:42,390 Dame el primer carácter de la matriz. 1599 01:11:42,390 --> 01:11:45,400 O más en general, me dan el carácter i-ésimo de la matriz. 1600 01:11:45,400 --> 01:11:48,230 Y darse cuenta de que es importante ahora que como los informáticos, en realidad estamos 1601 01:11:48,230 --> 01:11:49,330 contando desde 0. 1602 01:11:49,330 --> 01:11:51,290 Usted no tiene discreción para empezar a hacerlo. 1603 01:11:51,290 --> 01:11:54,580 Ahora usted tiene que comportarse de acuerdo con las expectativas del equipo y 1604 01:11:54,580 --> 01:11:58,010 contar a partir de cero, porque [0] va a ser el primero 1605 01:11:58,010 --> 01:11:59,670 carácter en una cadena. 1606 01:11:59,670 --> 01:12:01,320 [1] va a ser la segunda. 1607 01:12:01,320 --> 01:12:03,610 [2] va a ser el tercero, y así sucesivamente. 1608 01:12:03,610 --> 01:12:08,840 Así que este programa, si lo compile - esto es, de nuevo, cadena1. 1609 01:12:08,840 --> 01:12:11,040 >> Así que cadena1. 1610 01:12:11,040 --> 01:12:16,730 Y ahora me encuentro cadena1 en mi ventana de terminal. 1611 01:12:16,730 --> 01:12:19,180 Se espera para la entrada, así que voy a escribir, por ejemplo, David. 1612 01:12:19,180 --> 01:12:20,080 Intro. 1613 01:12:20,080 --> 01:12:23,350 Y ahora se imprime DAVID todo en líneas diferentes, porque 1614 01:12:23,350 --> 01:12:24,430 darse cuenta de lo que estoy haciendo. 1615 01:12:24,430 --> 01:12:27,510 Estoy imprimiendo un carácter a la vez. 1616 01:12:27,510 --> 01:12:29,100 Ahora no vamos a entrar en detalles hoy sobre este tema. 1617 01:12:29,100 --> 01:12:31,610 Pero he eliminado hace un momento este cheque aquí. 1618 01:12:31,610 --> 01:12:36,310 Resulta que si el usuario se está portando mal, contradictorio, o simplemente 1619 01:12:36,310 --> 01:12:41,780 confuso, en realidad se puede dejar de dar una serie de cierta extensión. 1620 01:12:41,780 --> 01:12:43,640 Si se pulsa la tecla equivocada en el teclado, puede dar 1621 01:12:43,640 --> 01:12:44,390 ninguna cadena en absoluto. 1622 01:12:44,390 --> 01:12:47,790 O si usted es malicioso, puede intentar para pegar en el patrimonio de un gigabyte de un 1623 01:12:47,790 --> 01:12:49,380 ensayo para llenar esta cadena. 1624 01:12:49,380 --> 01:12:52,060 Y si el equipo se queda sin memoria, resulta que vamos 1625 01:12:52,060 --> 01:12:54,310 para volver este valor especial llamado null. 1626 01:12:54,310 --> 01:12:57,550 Así que por ahora, sólo sé que hay este valor especial llamado nula de que 1627 01:12:57,550 --> 01:13:01,000 nos permitirá comprobar cuando estamos fuera de la memoria, entre otras cosas. 1628 01:13:01,000 --> 01:13:07,330 >> Pero si abro ahora cadena2, note una diferencia aquí. 1629 01:13:07,330 --> 01:13:09,760 Tenga en cuenta una diferencia aquí con cadena2. 1630 01:13:09,760 --> 01:13:13,260 Con cadena2, este bucle for es un poco diferente. 1631 01:13:13,260 --> 01:13:16,350 Déjame borrar los nulos para que podamos hablar de aquellos en otro momento. 1632 01:13:16,350 --> 01:13:18,460 Pero, ¿qué hay de diferente en el bucle for esta vez? 1633 01:13:21,580 --> 01:13:23,160 Y puedo volver al ejemplo anterior. 1634 01:13:23,160 --> 01:13:24,800 Así que esa es la versión dos. 1635 01:13:24,800 --> 01:13:27,020 Esta es la versión uno. 1636 01:13:27,020 --> 01:13:31,935 Uno, dos, uno dos. 1637 01:13:35,030 --> 01:13:38,240 Así que la llamada strlen es ¿dónde? 1638 01:13:38,240 --> 01:13:40,420 Está en la primera parte del bucle for. 1639 01:13:40,420 --> 01:13:43,060 ¿Alguna idea de por qué estoy haciendo esto? 1640 01:13:43,060 --> 01:13:43,690 Si. 1641 01:13:43,690 --> 01:13:46,010 [Inaudible] 1642 01:13:46,010 --> 01:13:47,630 DAVID J. MALAN: Así que no llame a la función cada vez. 1643 01:13:47,630 --> 01:13:48,040 Exactamente. 1644 01:13:48,040 --> 01:13:50,350 Recuerde que en los bucles for que son súper sencillo una vez que una especie de 1645 01:13:50,350 --> 01:13:52,180 entender que esta es la inicialización, la 1646 01:13:52,180 --> 01:13:53,330 condición, y la actualización. 1647 01:13:53,330 --> 01:13:55,430 El problema es que la condición ocurre en cada 1648 01:13:55,430 --> 01:13:56,600 iteración del bucle. 1649 01:13:56,600 --> 01:13:59,930 Y así, en este ejemplo aquí, ¿qué tiene de malo el hecho de 1650 01:13:59,930 --> 01:14:03,500 que esta es mi condición? 1651 01:14:03,500 --> 01:14:05,920 Estás llamando strlen una y otra vez y otra vez. 1652 01:14:05,920 --> 01:14:08,990 Pero una vez que has escrito en David, la longitud de la cadena es de cinco. 1653 01:14:08,990 --> 01:14:11,560 Y no va a cambiar en cada iteración del bucle porque el 1654 01:14:11,560 --> 01:14:15,560 cadena es aún D-A-V-I-D. Así que esta es una pista de lo que va a convertirse en un 1655 01:14:15,560 --> 01:14:19,650 idea cada vez más importante que se conoce como una decisión de diseño, donde - simplemente no 1656 01:14:19,650 --> 01:14:21,640 hacer que el ordenador haga el trabajo innecesario. 1657 01:14:21,640 --> 01:14:25,630 >> Pero así como una vista previa de pset 2, conjunto de procesadores 2 en la edición estándar es 1658 01:14:25,630 --> 01:14:28,850 te va a desafiar a aplicar en la práctica un cierto número de cifras, algunos 1659 01:14:28,850 --> 01:14:32,650 número de algoritmos de cifrado, para que pueda cifrar y descifrar 1660 01:14:32,650 --> 01:14:35,530 mensajes secretos, muy parecido al Ralphie hay un decodificado. 1661 01:14:35,530 --> 01:14:38,720 En la edición pirata de pset 2, vamos a ir un poco más lejos. 1662 01:14:38,720 --> 01:14:42,010 Nos vamos a entregar un archivo de un sistema informático actual que contiene un 1663 01:14:42,010 --> 01:14:45,690 gran cantidad de nombres de usuario y contraseñas cifradas reales, y el desafío 1664 01:14:45,690 --> 01:14:49,110 para la edición pirata va a ser de descifrar las contraseñas y la figura 1665 01:14:49,110 --> 01:14:53,060 lo criptografía o qué secreto se utilizó para realmente 1666 01:14:53,060 --> 01:14:55,080 generar las contraseñas. 1667 01:14:55,080 --> 01:14:58,360 Y vamos a hacer esto utilizando una nueva característica de C que voy a dar 1668 01:14:58,360 --> 01:15:02,200 sólo una demo de, conocido como argumentos de línea de comandos. 1669 01:15:02,200 --> 01:15:05,930 >> Así resulta que, como algunos de ustedes pueden haber visto en la sección o en libros de texto, 1670 01:15:05,930 --> 01:15:09,850 principal no tiene que siempre ser nulo entre paréntesis. 1671 01:15:09,850 --> 01:15:14,060 Resulta que la principal también se puede escribir así, con dos argumentos, 1672 01:15:14,060 --> 01:15:19,690 argc y argv, donde argc es el número de palabras que se escribe después 1673 01:15:19,690 --> 01:15:21,940 el nombre del programa en la línea de comandos. 1674 01:15:21,940 --> 01:15:24,550 Y argv son las palabras reales. 1675 01:15:24,550 --> 01:15:29,470 Y como los corchetes indican allí, argv es aparentemente una matriz. 1676 01:15:29,470 --> 01:15:33,720 Va a ser una cadena después de una serie después de una cadena en la memoria. 1677 01:15:33,720 --> 01:15:36,170 Entonces, ¿qué vamos a ser capaces de hacer, empezando por pset 2, se 1678 01:15:36,170 --> 01:15:37,310 algo como esto. 1679 01:15:37,310 --> 01:15:42,450 Si hago argv1, que es un ejemplo vamos a volver a el lunes, y ejecutar 1680 01:15:42,450 --> 01:15:45,180 ella, notar que no parece hacer nada. 1681 01:15:45,180 --> 01:15:47,050 Simplemente imprime su propio nombre. 1682 01:15:47,050 --> 01:15:53,220 Pero si digo adiós clase, observe que este programa aparentemente se repite 1683 01:15:53,220 --> 01:15:57,030 sobre cada una de las palabras que se escriben en el indicador. 1684 01:15:57,030 --> 01:16:02,050 Y los medios por los que puedan acceder a las palabras que el usuario tiene 1685 01:16:02,050 --> 01:16:06,780 escribe en el prompt es cambiando principal, a partir de este fin de semana, a partir de int 1686 01:16:06,780 --> 01:16:10,710 main (void) para int main (argc, argv). 1687 01:16:10,710 --> 01:16:13,700 Y así nacerá argumentos de línea de comandos. 1688 01:16:13,700 --> 01:16:17,210 Y una vez que estés muy sofisticado en esto, usted será capaz de escribir 1689 01:16:17,210 --> 01:16:21,370 programas realmente alucinantes, como este de aquí, que va por encima y más allá 1690 01:16:21,370 --> 01:16:25,520 algunas de las funciones que hemos hecho hasta ahora, pero todo muy potente. 1691 01:16:25,520 --> 01:16:27,330 >> Así que vamos a salir de esto con esto en la pantalla. 1692 01:16:27,330 --> 01:16:29,160 Y nos vemos el lunes.