1 00:00:00,000 --> 00:00:11,280 2 00:00:11,280 --> 00:00:13,650 >> ALTAVOZ 1: Muy bien. 3 00:00:13,650 --> 00:00:14,390 Bienvenido de nuevo. 4 00:00:14,390 --> 00:00:19,260 Esta es la segunda semana de CS50, y tenemos hasta ahora estado utilizando funciones, pero 5 00:00:19,260 --> 00:00:20,830 gran parte de ellos se da por sentado. 6 00:00:20,830 --> 00:00:23,430 Hemos utilizado printf que tiene la efecto secundario de impresión 7 00:00:23,430 --> 00:00:24,110 cosas en la pantalla. 8 00:00:24,110 --> 00:00:25,790 Hemos utilizado get-int, float llegar. 9 00:00:25,790 --> 00:00:29,230 >> Pero lo que si usted realmente desea crear sus propias funciones, como algunos de 10 00:00:29,230 --> 00:00:31,740 Puede que ya haya empezado a hacer por problemas n Uno, aunque 11 00:00:31,740 --> 00:00:33,140 no se requiere estrictamente? 12 00:00:33,140 --> 00:00:37,150 Bueno, vamos a seguir adelante y volver a ese problema de simplemente preguntar al usuario 13 00:00:37,150 --> 00:00:40,660 su nombre y la impresión de algo en el pantalla, pero intenta factorizar algunos 14 00:00:40,660 --> 00:00:44,000 de los elementos comunes que hemos visto en nuestro código hasta el momento. 15 00:00:44,000 --> 00:00:45,120 Así que con esto quiero decir lo siguiente. 16 00:00:45,120 --> 00:00:47,315 >> Voy a seguir adelante y crear un nuevo programa, llame al teléfono 17 00:00:47,315 --> 00:00:49,320 que hola.c como de costumbre. 18 00:00:49,320 --> 00:00:53,730 Voy a seguir adelante y dar a mí mismo incluir io.h estándar en la parte superior. 19 00:00:53,730 --> 00:00:57,040 Voy a darme también preventivamente la biblioteca CS50 de manera que 20 00:00:57,040 --> 00:00:59,080 Que no me grite por el compilador. 21 00:00:59,080 --> 00:01:02,400 Y ahora me voy a ir por delante y declarar int, principal, nula. 22 00:01:02,400 --> 00:01:09,020 >> Y luego aquí, aquí es donde quiero para comenzar a externalizar funciones a 23 00:01:09,020 --> 00:01:12,090 alguna otra función que yo mismo soy voy a escribir, pero eso no lo hace 24 00:01:12,090 --> 00:01:13,820 Actualmente existe. 25 00:01:13,820 --> 00:01:19,210 Por ejemplo, supongamos que quería escribir una función que me permite 26 00:01:19,210 --> 00:01:23,830 imprimir hola, coma y entonces el nombre de algún usuario. 27 00:01:23,830 --> 00:01:29,010 En lugar de seguir haciendo printf hola,% s, ¿no sería agradable si 28 00:01:29,010 --> 00:01:33,380 había sólo una función llamada No printf pero el nombre de impresión? 29 00:01:33,380 --> 00:01:36,600 >> En otras palabras, quiero ser capaz de escribir un programa que hace un poco de 30 00:01:36,600 --> 00:01:37,710 algo como esto. 31 00:01:37,710 --> 00:01:42,070 En primer lugar, voy a decir printf su nombrar, provocando de ese modo que el usuario 32 00:01:42,070 --> 00:01:46,150 darme su nombre, y luego me voy va a utilizar la cadena familiarizado s para 33 00:01:46,150 --> 00:01:47,290 declarar una cadena. 34 00:01:47,290 --> 00:01:50,420 Dame una variable de tipo cadena, llamarlo s, y almacenar en la que el 35 00:01:50,420 --> 00:01:52,120 resultado de la llamada cadena de get. 36 00:01:52,120 --> 00:01:56,060 Pero ahora en semana pasado, tendría que un tanto tediosa hecho hola,% s / n. 37 00:01:56,060 --> 00:01:58,630 38 00:01:58,630 --> 00:02:02,570 >> Y en otras palabras, que hemos visto esta ejemplo, un montón de veces, y es un 39 00:02:02,570 --> 00:02:05,280 ejemplo trivial, ya que sólo hay una línea de código así que no es realmente un 40 00:02:05,280 --> 00:02:06,860 gran cosa para seguir escribiendo de nuevo. 41 00:02:06,860 --> 00:02:09,990 Pero supongamos que esta línea de código en realidad se estaban convirtiendo en una carga, y 42 00:02:09,990 --> 00:02:12,900 que no es una línea de código, pero es 10 líneas de código de un par de semanas a partir de ahora, 43 00:02:12,900 --> 00:02:15,190 y estás cansando de copiar y pegar o 44 00:02:15,190 --> 00:02:17,180 volver a escribir el mismo código. 45 00:02:17,180 --> 00:02:22,100 ¿No sería agradable en lugar de hacer printf hola,% s, y así sucesivamente, 46 00:02:22,100 --> 00:02:26,500 ¿no sería agradable si había sólo una función llamada nombre de impresión que 47 00:02:26,500 --> 00:02:27,560 toma un argumento - 48 00:02:27,560 --> 00:02:29,120 en otras palabras, se toma la entrada - 49 00:02:29,120 --> 00:02:30,620 y luego por punto y coma. 50 00:02:30,620 --> 00:02:33,240 Para que la función, ¿no bueno si que existía? 51 00:02:33,240 --> 00:02:36,690 Entonces yo no tendría que preocuparse por printf lo es, ¿qué% s y todos 52 00:02:36,690 --> 00:02:39,400 estas complejidades que son no tan interesante. 53 00:02:39,400 --> 00:02:40,570 Son útiles. 54 00:02:40,570 --> 00:02:44,700 >> Así que escriba su nombre, por desgracia, no era inventado hace unos años 40 plus. 55 00:02:44,700 --> 00:02:45,980 No se le ocurrió escribirlo. 56 00:02:45,980 --> 00:02:48,300 Pero esa es la belleza de tener un lenguaje de programación, al igual que en 57 00:02:48,300 --> 00:02:52,930 Rascas puede definir bloques personalizados, por lo en C y la mayoría de cualquier idioma, puede usted 58 00:02:52,930 --> 00:02:57,260 definir su propia funcionalidad, puede a definir sus propias funciones. 59 00:02:57,260 --> 00:03:01,710 Así que, aunque lleguemos principal por automáticamente de forma gratuita, se puede declarar 60 00:03:01,710 --> 00:03:02,730 nuestras propias funciones. 61 00:03:02,730 --> 00:03:05,670 >> Así que me voy a hacer un poco de espacio aquí encima de la tapa, y yo voy a declarar mi 62 00:03:05,670 --> 00:03:08,210 propia función que va a buscar un poco extraño al principio, pero vamos a venir 63 00:03:08,210 --> 00:03:09,400 Volveremos a este en poco tiempo. 64 00:03:09,400 --> 00:03:12,310 Voy a decir nula, con lo que indicando esta función hace 65 00:03:12,310 --> 00:03:16,040 algo, tiene un efecto secundario, pero no devuelve algo a mí en el 66 00:03:16,040 --> 00:03:18,810 misma manera que recibe int o recibe propia cadena hace. 67 00:03:18,810 --> 00:03:22,450 Y yo voy a dar a esta función un Nombre de la letra de imprenta, y yo voy a 68 00:03:22,450 --> 00:03:26,470 especifica que este tipo va a tener una cadena, y yo voy a llamar a ese 69 00:03:26,470 --> 00:03:27,600 nombre de la cadena. 70 00:03:27,600 --> 00:03:32,100 Yo podría llamarlo lo que quiera, pero yo quiero que mi código sea auto-documentado. 71 00:03:32,100 --> 00:03:34,770 En otras palabras, si uno de ustedes fuera a abrir este archivo y leerlo, usted podría 72 00:03:34,770 --> 00:03:39,020 tipo de deducir del nombre de esa de entrada cuál es el papel que se supone que jugar. 73 00:03:39,020 --> 00:03:42,270 >> Y ahora debajo de eso, voy a abrir llave de cierre y llave de cierre, 74 00:03:42,270 --> 00:03:47,140 y así doy cuenta que he seguido la misma patrón de líneas de cuatro a siete años como 75 00:03:47,140 --> 00:03:51,622 He estado siguiendo por una buena semana más Ahora, digamos, entre las nueve y las líneas 76 00:03:51,622 --> 00:03:53,400 14 que componen principal. 77 00:03:53,400 --> 00:03:56,160 En otras palabras, en letra de imprenta es otra función. 78 00:03:56,160 --> 00:03:58,990 Ahora, el compilador no va a saber llamar a esto de forma automática 79 00:03:58,990 --> 00:04:02,670 porque, literalmente, sólo inventé, pero se sabe todavía que llamar principal 80 00:04:02,670 --> 00:04:08,710 de forma automática y, a continuación, por supuesto, en línea 13, estoy llamando a mi propia función. 81 00:04:08,710 --> 00:04:12,805 Y porque yo he declarado que la función arriba en la línea cuatro antes de principal, 82 00:04:12,805 --> 00:04:16,579 esto va a enseñar el compilador lo que dijeron ellos, "el nombre de impresión" 83 00:04:16,579 --> 00:04:18,140 significa y lo que debe hacer. 84 00:04:18,140 --> 00:04:22,700 Así que yo soy una especie de lo que supone una nueva costumbre bloquear en el contexto de, por ejemplo, a los arañazos. 85 00:04:22,700 --> 00:04:27,240 >> Así que aquí, puedo poner eso muy común o patrón recurrente de código sigo 86 00:04:27,240 --> 00:04:32,300 escribir en clase, printf % S hola,% s / n ", - 87 00:04:32,300 --> 00:04:36,720 88 00:04:36,720 --> 00:04:37,590 ¿qué es lo que quiero poner aquí? 89 00:04:37,590 --> 00:04:39,200 S? 90 00:04:39,200 --> 00:04:41,420 Así que quiero poner el nombre en este contexto. 91 00:04:41,420 --> 00:04:43,440 Así cuenta un poco de una dicotomía aquí. 92 00:04:43,440 --> 00:04:47,680 Porque yo estoy declarando mi propia función y algo que he llamado arbitrariamente 93 00:04:47,680 --> 00:04:50,880 se imprime el nombre, y porque he especificado en paréntesis que este 94 00:04:50,880 --> 00:04:55,035 función toma un argumento, el tipo de que es una cadena - por lo que es una palabra 95 00:04:55,035 --> 00:05:00,010 o una frase o algo así - y Voy a llamar a ese nombre de la argumentación, que 96 00:05:00,010 --> 00:05:04,770 significa que la única variable que está en ámbito de aplicación, por así decirlo, es el nombre. 97 00:05:04,770 --> 00:05:07,780 >> S sólo existe entre lo dos llaves, por supuesto? 98 00:05:07,780 --> 00:05:12,990 Bueno en realidad, al igual que la línea 10 a través de 14, por lo que al igual que el lunes no se puede utilizar 99 00:05:12,990 --> 00:05:17,650 S, pero lo que puedo hacer es pasar S en letra de imprenta. 100 00:05:17,650 --> 00:05:21,030 Escriba el nombre que pasa es que darle un alias, un sinónimo, un apodo, 101 00:05:21,030 --> 00:05:24,400 calificándola de nombrar, y ahora usarlo en esta línea. 102 00:05:24,400 --> 00:05:26,840 Así que ahora vamos a salvar esto, alejar el zoom. 103 00:05:26,840 --> 00:05:31,250 >> Déjenme seguir adelante y hacer hola. 104 00:05:31,250 --> 00:05:32,400 Se ve bien. 105 00:05:32,400 --> 00:05:36,110 No escupa cualquier error. . / Hola Intro. 106 00:05:36,110 --> 00:05:37,020 ¿Cuál es mi nombre? 107 00:05:37,020 --> 00:05:38,060 David. 108 00:05:38,060 --> 00:05:39,270 Y hola David. 109 00:05:39,270 --> 00:05:41,820 Así que no es tan emocionante, pero sólo pensar ahora. 110 00:05:41,820 --> 00:05:44,310 Ahora tiene el mismo ingrediente como lo hicimos en Scratch para 111 00:05:44,310 --> 00:05:45,420 tomar nuestras propias funciones. 112 00:05:45,420 --> 00:05:46,770 >> Pero hay un poco de una de gotcha. 113 00:05:46,770 --> 00:05:50,620 Supongamos que yo no había pensado realmente esto a través de y en realidad sin 114 00:05:50,620 --> 00:05:54,250 pensar realmente en ello escribió esa función aquí. 115 00:05:54,250 --> 00:05:55,420 Se siente perfectamente razonable. 116 00:05:55,420 --> 00:05:58,440 En arañazos no existe la noción de la ubicación de los scripts. 117 00:05:58,440 --> 00:06:00,670 Usted podría poner uno aquí, uno aquí, uno aquí, y podría empezar a 118 00:06:00,670 --> 00:06:03,310 a parecer un poco desordenado si no lo hace sentar a cabo ordenadamente, pero no es así 119 00:06:03,310 --> 00:06:05,910 importa donde físicamente los scripts estaban en la pantalla. 120 00:06:05,910 --> 00:06:09,660 Desafortunadamente en C - y esto es a diferencia lenguajes como Java y Python 121 00:06:09,660 --> 00:06:13,600 y otros que usted puede estar familiarizado con - por desgracia, en C, orden sí 122 00:06:13,600 --> 00:06:15,830 importa porque ver lo que hay va a pasar ahora. 123 00:06:15,830 --> 00:06:19,010 >> La función predeterminada que está pasando a ejecutar es, por supuesto, principal. 124 00:06:19,010 --> 00:06:22,290 Principal va a llamar el nombre de impresión en línea de ocho, pero por desgracia, el 125 00:06:22,290 --> 00:06:26,660 compilador ni siquiera sabrá que escriba su nombre existe hasta que llega a la línea 11, 126 00:06:26,660 --> 00:06:28,520 que, desgraciadamente, es va a ser demasiado tarde. 127 00:06:28,520 --> 00:06:30,660 Así que vamos a hacer y hacen hola. 128 00:06:30,660 --> 00:06:32,950 Y ahora maldito, dos errores generados. 129 00:06:32,950 --> 00:06:36,050 Así que ahora déjame desplazo hasta el mismo primero, como siempre debemos hacer, y 130 00:06:36,050 --> 00:06:39,560 cuenta de que está gritando a mí, "Declaración implícita de la función 131 00:06:39,560 --> 00:06:40,540 imprimir el nombre ". 132 00:06:40,540 --> 00:06:43,860 >> Así que hemos visto este mensaje antes, declaración implícita de la función. 133 00:06:43,860 --> 00:06:48,080 ¿Cuándo hemos visto ese tipo de error? 134 00:06:48,080 --> 00:06:49,180 Cuando no incluí una biblioteca. 135 00:06:49,180 --> 00:06:53,470 Si olvido cs50.h y me gustaría tener gritado por cadena GET o conseguir int. 136 00:06:53,470 --> 00:06:56,880 Pero en este caso, esta función de impresión nombre no está en una biblioteca, ¿verdad? 137 00:06:56,880 --> 00:07:00,230 Es, literalmente, en este archivo, por lo que lo que es realmente el problema? 138 00:07:00,230 --> 00:07:04,660 >> Bueno, lamentablemente, en C, que le lleva tan increíblemente literalmente que si 139 00:07:04,660 --> 00:07:08,640 quieren una función llamada nombre de impresión para existir, ya sea que usted tiene que poner en práctica 140 00:07:08,640 --> 00:07:11,940 esa función en la parte superior de su código para que sea más accesible para bajar 141 00:07:11,940 --> 00:07:15,070 funciones, pero, francamente, que se convierte en descuidado muy rápidamente. 142 00:07:15,070 --> 00:07:18,160 Personalmente, me gusta poner principales primero porque entonces es muy claro lo que esto 143 00:07:18,160 --> 00:07:19,890 programa hace a primera vista. 144 00:07:19,890 --> 00:07:23,290 Y además, usted puede conseguir en la esquina raro los casos en que si X quiere llamar 145 00:07:23,290 --> 00:07:27,530 y, pero y podría llamar x, sólo físicamente no puede realmente poner un 146 00:07:27,530 --> 00:07:28,540 por encima de la otra. 147 00:07:28,540 --> 00:07:31,230 >> Pero resulta que en C, podemos resolver este muy simplemente. 148 00:07:31,230 --> 00:07:34,010 Voy a poner un poco de espacio hasta aquí, y yo sólo voy a 149 00:07:34,010 --> 00:07:38,170 preventivamente, aunque algo redundante, va a enseñar la 150 00:07:38,170 --> 00:07:42,320 compilador que existe una función llamada en letra de imprenta, que toma una cadena, 151 00:07:42,320 --> 00:07:46,330 y yo voy a llamar que nombrar y coma. 152 00:07:46,330 --> 00:07:50,220 >> Así que esta ahora en la línea de cuatro, lo que nos no han visto antes, es una declaración 153 00:07:50,220 --> 00:07:53,940 de un nombre de la función de impresión, pero es sólo la promesa de que esta función se 154 00:07:53,940 --> 00:07:56,620 eventualmente ser definido, eventualmente implementar. 155 00:07:56,620 --> 00:08:00,180 Esto ahora puedo salir sola porque ahora se trata de la definición, la 156 00:08:00,180 --> 00:08:04,090 aplicación, tipo de la última milla de la aplicación del presente 157 00:08:04,090 --> 00:08:05,130 función particular. 158 00:08:05,130 --> 00:08:08,450 Así que, francamente, es estúpido, es molesto, pero este es el camino C es, y es 159 00:08:08,450 --> 00:08:12,050 porque te lleva muy literalmente y, como un ordenador francamente debería, 160 00:08:12,050 --> 00:08:16,020 sólo hace exactamente lo que le dices que hacer, y de manera que el pedido es importante. 161 00:08:16,020 --> 00:08:18,940 >> Así que tenlo en cuenta y otra vez, comenzar a notar la repetición de patrones. 162 00:08:18,940 --> 00:08:21,850 Lo más probable es que usted quiere, si no lo ha ya, empezar a encontrar mensajes 163 00:08:21,850 --> 00:08:24,700 como ésta, que a primera vista parecen completamente críptica, pero si usted comienza 164 00:08:24,700 --> 00:08:29,000 estén pendientes de las palabras clave, como "Declaración implícita", la mención de un 165 00:08:29,000 --> 00:08:32,380 función en este caso - y francamente, a veces incluso conseguir un poco verde 166 00:08:32,380 --> 00:08:35,010 símbolo de la zanahoria que le dice dónde el problema probablemente es - 167 00:08:35,010 --> 00:08:40,980 usted puede comenzar a trabajar su camino a través de mensajes de error pero no se ve. 168 00:08:40,980 --> 00:08:45,860 ¿Tiene preguntas sobre la escritura de su propia función de esta manera? 169 00:08:45,860 --> 00:08:47,540 >> Vamos a hacer algo que es un poco más convincente. 170 00:08:47,540 --> 00:08:51,760 En lugar de simplemente hacer algo que tiene un efecto secundario de la impresión, me dejó ir 171 00:08:51,760 --> 00:08:55,340 adelante y guardar un nuevo archivo, y vamos a llamar a este positive.c, aunque es 172 00:08:55,340 --> 00:08:57,600 va a ser un poco diferente frente a la última vez. 173 00:08:57,600 --> 00:09:01,910 Y esta vez, quiero volver a implementar ejemplo positive.C de última hora, que 174 00:09:01,910 --> 00:09:04,430 es obligar al usuario a dar me entero positivo. 175 00:09:04,430 --> 00:09:07,280 Pero tuve que usar get int última vez. 176 00:09:07,280 --> 00:09:10,780 ¿No hubiera sido agradable si había una función llamada recibe int positivo 177 00:09:10,780 --> 00:09:13,610 que pudiera subcontratar este parte de la funcionalidad a? 178 00:09:13,610 --> 00:09:16,480 Así que la diferencia aquí es que vamos a implementar conseguir int positivo, pero a diferencia de 179 00:09:16,480 --> 00:09:20,330 escriba su nombre, que tenía un efecto secundario - es no arrojó algo a mí como 180 00:09:20,330 --> 00:09:21,710 un número o una cadena - 181 00:09:21,710 --> 00:09:25,510 conseguir int positivo es, por supuesto, va a volver, con suerte, un int positivo. 182 00:09:25,510 --> 00:09:26,170 >> Así que vamos a hacer esto. 183 00:09:26,170 --> 00:09:30,840 Incluya cs50.h, Incluir io.h. estándar 184 00:09:30,840 --> 00:09:33,520 Void main int. 185 00:09:33,520 --> 00:09:42,160 Y ahora aquí, voy a seguir adelante y digamos que int, llamémosle n, es igual a 186 00:09:42,160 --> 00:09:44,270 conseguir int positivo. 187 00:09:44,270 --> 00:09:49,080 Y al igual que ya existe get int porque el personal lo escribió, me voy 188 00:09:49,080 --> 00:09:53,950 a asumir en el momento en que recibe int positivo existe, y ahora me voy 189 00:09:53,950 --> 00:09:57,730 seguir adelante y decir printf, gracias por el% i / n ", n. 190 00:09:57,730 --> 00:10:02,940 191 00:10:02,940 --> 00:10:07,770 >> Así que ahora si puedo compilar este programa, lo que que va a pasar en mi terminal 192 00:10:07,770 --> 00:10:09,075 ventana en la parte inferior de la pantalla? 193 00:10:09,075 --> 00:10:11,580 194 00:10:11,580 --> 00:10:13,900 Yo voy a conseguir, probablemente, que mismo error como antes. 195 00:10:13,900 --> 00:10:14,570 Así que vamos a probar esto. 196 00:10:14,570 --> 00:10:16,450 Hacer positivo. 197 00:10:16,450 --> 00:10:19,900 Y otra vez, la declaración implícita de la función, obtener int positivo. 198 00:10:19,900 --> 00:10:21,970 Así que podemos solucionar esto de un par de maneras. 199 00:10:21,970 --> 00:10:27,310 Voy a mantenerlo simple y justo poner mi declaración aquí y obtener 200 00:10:27,310 --> 00:10:28,120 int positivo. 201 00:10:28,120 --> 00:10:29,720 Necesito la firma llamada. 202 00:10:29,720 --> 00:10:32,410 La firma sólo se refiere a la estética de la 203 00:10:32,410 --> 00:10:34,090 primera línea del programa. 204 00:10:34,090 --> 00:10:37,420 Entonces, ¿qué debe recibir positivo int devolver? 205 00:10:37,420 --> 00:10:37,970 >> Así que un int. 206 00:10:37,970 --> 00:10:41,540 Me refiero a lo ideal, sería volver algo así como int positivo, pero que 207 00:10:41,540 --> 00:10:42,160 no existe. 208 00:10:42,160 --> 00:10:45,280 No hemos visto que entre nuestros datos tipos, por lo que tienen que hacer frente a la 209 00:10:45,280 --> 00:10:47,170 hecho de que tenemos muy pocos tipos de datos para trabajar. 210 00:10:47,170 --> 00:10:50,360 Pero podemos devolver un int y justo confiar en que va a ser positivo. 211 00:10:50,360 --> 00:10:52,690 Va a ser llamado conseguir int positivo. 212 00:10:52,690 --> 00:10:55,122 >> Y ahora ¿qué hay de sus argumentos? 213 00:10:55,122 --> 00:10:56,440 ¿Toma alguna entrada? 214 00:10:56,440 --> 00:10:58,280 ¿Se necesita alguna entrada? 215 00:10:58,280 --> 00:11:00,900 Por lo tanto, no necesita saber en nada antelación. 216 00:11:00,900 --> 00:11:03,220 Obtenga cadena no lo hace, recibe int no. 217 00:11:03,220 --> 00:11:06,430 Printf hace - tiene que tener algún entrada pasada en él - y el nombre de impresión 218 00:11:06,430 --> 00:11:09,020 necesaria alguna entrada, pero llegar int positivo no lo hace. 219 00:11:09,020 --> 00:11:11,530 Así que voy a explícitamente decirle al vacío compilador. 220 00:11:11,530 --> 00:11:13,470 Vacío es la ausencia de cualquier otra cosa. 221 00:11:13,470 --> 00:11:17,990 Así medios void nada va dentro de los paréntesis, punto y coma. 222 00:11:17,990 --> 00:11:20,840 >> Y ahora en el fondo de mi expediente - y de nuevo, sólo estoy siendo clase de anal 223 00:11:20,840 --> 00:11:23,640 aquí poniendo principal en la parte superior, que Es una buena práctica porque de esta manera, 224 00:11:23,640 --> 00:11:26,220 en cualquier momento que usted o alguien más abre el archivo, el 225 00:11:26,220 --> 00:11:27,400 funcionalidad está ahí. 226 00:11:27,400 --> 00:11:29,660 Se puede bucear desde cero. 227 00:11:29,660 --> 00:11:34,190 Así que ahora voy a duplicar el, conseguir int agujero positivo, pero no estoy 228 00:11:34,190 --> 00:11:35,430 va a golpear un punto y coma ahora. 229 00:11:35,430 --> 00:11:38,280 Voy a abrir las llaves, y ahora necesito que me prestes 230 00:11:38,280 --> 00:11:39,700 algunas ideas de lunes. 231 00:11:39,700 --> 00:11:44,450 >> Así como usted recuerda, hicimos algo como hacer lo siguiente mientras 232 00:11:44,450 --> 00:11:45,830 algo era cierto. 233 00:11:45,830 --> 00:11:46,630 Y lo que hice? 234 00:11:46,630 --> 00:11:51,540 Yo hice algo así como dar me un entero positivo, 235 00:11:51,540 --> 00:11:52,430 poco de un mensaje. 236 00:11:52,430 --> 00:11:53,540 Podría usar cualquier palabra que quiero. 237 00:11:53,540 --> 00:11:54,960 Y entonces yo solía qué? 238 00:11:54,960 --> 00:11:59,530 Int. n es igual a get int, no hay argumentos para ello. 239 00:11:59,530 --> 00:12:00,550 >> Y note la diferencia. 240 00:12:00,550 --> 00:12:04,680 Cuando se llama a una función, cuando se utiliza una función, no lo pongas en vacío. 241 00:12:04,680 --> 00:12:08,570 Usted sólo hace eso cuando se declara una función, la enseñanza de que el compilador lo 242 00:12:08,570 --> 00:12:09,780 cabe esperar. 243 00:12:09,780 --> 00:12:11,650 Así que usted no necesita para poner anular allí mismo. 244 00:12:11,650 --> 00:12:12,940 >> Y ahora lo que era mi condición? 245 00:12:12,940 --> 00:12:19,670 Bueno, n no es igual a positivo, pero eso es sólo pseudo-código. 246 00:12:19,670 --> 00:12:22,530 Entonces, ¿cómo puedo expresar esto más limpia? 247 00:12:22,530 --> 00:12:24,090 Por lo tanto menor o igual a cero. 248 00:12:24,090 --> 00:12:26,250 Así que de nuevo, note que usted puede hacer menos de o igual a. 249 00:12:26,250 --> 00:12:28,100 A pesar de ser dos separados símbolos, puede hacerlo en 250 00:12:28,100 --> 00:12:29,350 su teclado como tal. 251 00:12:29,350 --> 00:12:33,950 >> Pero todavía hay un error que Cometí un error última vez también. 252 00:12:33,950 --> 00:12:36,950 Tengo que declarar - 253 00:12:36,950 --> 00:12:37,460 exactamente. 254 00:12:37,460 --> 00:12:39,640 Debo declarar n fuera del bucle. 255 00:12:39,640 --> 00:12:44,180 Así que tengo que poner n hasta aquí, y yo no lo hago que desee volver a declararlo aquí 256 00:12:44,180 --> 00:12:46,480 no sea que llegue una nueva variable. 257 00:12:46,480 --> 00:12:48,860 Sólo quiero asignar un valor aquí. 258 00:12:48,860 --> 00:12:54,320 >> Y ahora no estoy bastante hecho aquí. 259 00:12:54,320 --> 00:12:57,290 Vamos a ver delante de mí mismo y fingir que estoy hecho. 260 00:12:57,290 --> 00:13:01,220 Hacer positivo, y ahora hay un nuevo error. 261 00:13:01,220 --> 00:13:04,550 El control llega a final de no nula función. 262 00:13:04,550 --> 00:13:07,760 Tan nuevo mensaje de error, pero si que tipo de desmenuzar cada una de las palabras, 263 00:13:07,760 --> 00:13:09,620 probablemente alude a lo que está mal. 264 00:13:09,620 --> 00:13:11,240 >> De control. 265 00:13:11,240 --> 00:13:14,250 Control de medios justos a la orden de las operaciones en un programa. 266 00:13:14,250 --> 00:13:16,510 El equipo está en control y algo salió mal. 267 00:13:16,510 --> 00:13:18,510 Por lo tanto, llega al final de una función no nula. 268 00:13:18,510 --> 00:13:21,760 ¿Qué función es, al parecer, refiriendo? 269 00:13:21,760 --> 00:13:24,790 ¿Qué función es no vacío? 270 00:13:24,790 --> 00:13:27,400 Así que int positivo, y un poco de confuso en ese pozo, 271 00:13:27,400 --> 00:13:29,010 es una especie de vacío. 272 00:13:29,010 --> 00:13:33,070 Cuenta con una especificación de vacío para su argumentos, pero su salida se va a 273 00:13:33,070 --> 00:13:34,540 ser de tipo n. 274 00:13:34,540 --> 00:13:37,260 Así que la palabra de la izquierda es el llamado tipo de retorno. 275 00:13:37,260 --> 00:13:40,320 La palabra en el interior aquí es las cero o más argumentos 276 00:13:40,320 --> 00:13:41,970 que una función de toma. 277 00:13:41,970 --> 00:13:44,060 >> Entonces, ¿qué tengo que hacer? 278 00:13:44,060 --> 00:13:47,650 En este punto de mi código, la línea 21, donde el símbolo parpadeante es que 279 00:13:47,650 --> 00:13:51,430 tener un int positivo dentro de la variable llamada n. 280 00:13:51,430 --> 00:13:55,200 ¿Cómo le doy vuelta a principal? 281 00:13:55,200 --> 00:13:55,960 Literalmente. 282 00:13:55,960 --> 00:13:59,320 Vuelva n punto y coma. 283 00:13:59,320 --> 00:14:04,090 >> Así como Colton devolvió un pedazo de papel con una respuesta a mí dejando caer 284 00:14:04,090 --> 00:14:07,020 ese pedazo de papel en el pequeño negro caja sobre la mesa, para hacer que en 285 00:14:07,020 --> 00:14:10,100 código, literalmente, acaba de escribir, el retorno n, y es como si fuera Colton 286 00:14:10,100 --> 00:14:12,140 dándome algo físico atrás. 287 00:14:12,140 --> 00:14:15,870 En este caso, lo que está sucediendo es conseguir int positivo va a devolver 288 00:14:15,870 --> 00:14:19,220 lo que es presumiblemente un positivo entero a quién? 289 00:14:19,220 --> 00:14:21,380 ¿Dónde termina ese valor pasa? 290 00:14:21,380 --> 00:14:29,080 Eso termina en esta variable, n, y a continuación, se procede con la línea de nueve. 291 00:14:29,080 --> 00:14:31,920 >> Así que en otras palabras, con el fin de operaciones, este programa se inicia 292 00:14:31,920 --> 00:14:34,430 la ejecución y el compilador se da cuenta, oh, desea que la biblioteca? 293 00:14:34,430 --> 00:14:36,310 Déjame ir a agarrar lo que sea que dentro de ese. 294 00:14:36,310 --> 00:14:37,750 Oh, usted quiere la biblioteca estándar IO? 295 00:14:37,750 --> 00:14:39,660 Déjame ir a agarrar lo que sea que dentro de ese. 296 00:14:39,660 --> 00:14:44,510 ¿Qué hace el compilador dice a sí mismo cuando llega a la línea de cuatro? 297 00:14:44,510 --> 00:14:47,980 Oh, usted se comprometió a poner en práctica el función llamada recibe positivo, pero 298 00:14:47,980 --> 00:14:50,820 nos pondremos en contacto para que más tarde, algo por el estilo. 299 00:14:50,820 --> 00:14:53,450 >> Void main Int. sólo significa aquí está las entrañas de mi programa. 300 00:14:53,450 --> 00:14:54,990 Línea siete es sólo una llave. 301 00:14:54,990 --> 00:14:59,540 Línea ocho está diciendo a la izquierda, dan me 32 bits para un entero, lo llaman n. 302 00:14:59,540 --> 00:15:02,160 En el lado derecho, es diciendo conseguir int positivo. 303 00:15:02,160 --> 00:15:07,120 Ahora vamos a hacer una pausa en esa historia porque ahora No guardo moviendo el cursor hacia abajo. 304 00:15:07,120 --> 00:15:11,720 Mi cursor ahora se pone aquí porque ahora consigue ejecuta int positivos. 305 00:15:11,720 --> 00:15:13,100 Int. n se declara. 306 00:15:13,100 --> 00:15:14,040 Haga lo siguiente. 307 00:15:14,040 --> 00:15:16,090 Printf me da un número entero positivo. 308 00:15:16,090 --> 00:15:19,740 >> Consigue un int del usuario, guárdela en n, y tal vez hacer esto una y otra vez. 309 00:15:19,740 --> 00:15:23,010 Este bucle significa que este código podría ejecutar arriba y abajo como esto otra vez 310 00:15:23,010 --> 00:15:25,810 y de nuevo, pero cuando el usuario finalmente coopera y me da un positivo 311 00:15:25,810 --> 00:15:31,750 int, me golpeó la línea 21, en cuyo punto el número se devolvió, y que uno 312 00:15:31,750 --> 00:15:34,280 debo destacar ahora? 313 00:15:34,280 --> 00:15:35,070 Nueve. 314 00:15:35,070 --> 00:15:39,010 De control, por así decirlo, devoluciones a la línea de nueve. 315 00:15:39,010 --> 00:15:40,650 Esa es la línea que ahora está a cargo. 316 00:15:40,650 --> 00:15:43,250 >> Así que eso es lo que ha estado sucediendo en todo esta vez por debajo de la capucha, pero 317 00:15:43,250 --> 00:15:46,480 cuando hemos usado funciones como printf o incluso obtener cadena que alguien más 318 00:15:46,480 --> 00:15:50,600 escribió para ti, el control estaba siendo imparcial off a la línea de código de otra persona 319 00:15:50,600 --> 00:15:51,290 por línea por línea. 320 00:15:51,290 --> 00:15:53,770 Es sólo que no podía verlo y nos realmente no podía representarlo en este 321 00:15:53,770 --> 00:15:57,620 programa porque es de alguna otra archivar en el disco duro 322 00:15:57,620 --> 00:16:00,000 desconocido para nosotros. 323 00:16:00,000 --> 00:16:02,100 Así que vamos a compilar realidad y ejecutar este momento. 324 00:16:02,100 --> 00:16:03,890 >> Hacer positivo. 325 00:16:03,890 --> 00:16:05,260 Compilar, eso es progreso. 326 00:16:05,260 --> 00:16:06,650 . / Positivo. 327 00:16:06,650 --> 00:16:08,020 Dame un número entero positivo. 328 00:16:08,020 --> 00:16:08,800 Vamos a ser difícil. 329 00:16:08,800 --> 00:16:10,430 Negativo 1. 330 00:16:10,430 --> 00:16:11,360 Zero. 331 00:16:11,360 --> 00:16:13,370 Vamos a darle 50. 332 00:16:13,370 --> 00:16:18,100 Gracias por el control 50, y así Ahora ha regresado. 333 00:16:18,100 --> 00:16:21,750 Cualquier pregunta, entonces, en que? 334 00:16:21,750 --> 00:16:23,180 ¿Sí? 335 00:16:23,180 --> 00:16:25,630 >> [Inaudible]. 336 00:16:25,630 --> 00:16:26,130 >> Dilo de nuevo. 337 00:16:26,130 --> 00:16:27,860 Ah, buena pregunta. 338 00:16:27,860 --> 00:16:31,100 Así que usted puede notar un paralelo que Soy una especie de corte de una esquina en. 339 00:16:31,100 --> 00:16:35,420 En la línea 12, que estoy diciendo, consiga int positivo devuelve un int, pero por ese mismo 340 00:16:35,420 --> 00:16:39,660 lógica, ahora es lógico que en línea de seis, estoy diciendo que los principales retornos 341 00:16:39,660 --> 00:16:44,040 un int, pero lo que tenemos que nunca tenido en cualquiera de nuestros programas? 342 00:16:44,040 --> 00:16:46,470 Nunca hemos tenido una mención de este retorno palabra clave. 343 00:16:46,470 --> 00:16:49,970 >> Así que resulta que en C, por lo menos la versión que estamos utilizando 344 00:16:49,970 --> 00:16:55,750 realizado en 1999, técnicamente, se trata de ocurre de forma automática. 345 00:16:55,750 --> 00:16:59,300 Cada vez que se implementa un programa y implementar una función llamada principal, 346 00:16:59,300 --> 00:17:04,230 que función devolverá cero por defecto si usted no dice lo contrario, 347 00:17:04,230 --> 00:17:05,849 y el cero es sólo una convención. 348 00:17:05,849 --> 00:17:09,430 Los rendimientos Mundiales Cero con ello lo que indica que todo está bien, 349 00:17:09,430 --> 00:17:13,040 dejándonos con cuatro mil millones posibles cosas que podrían salir 350 00:17:13,040 --> 00:17:17,530 mal, así que si volvemos uno, que podría significar un código que significa esto 351 00:17:17,530 --> 00:17:18,310 Lo que salió mal. 352 00:17:18,310 --> 00:17:20,589 Podríamos volver dos, lo que significa esta otra cosa que salió mal. 353 00:17:20,589 --> 00:17:23,440 Podríamos volver cuatro mil millones, lo que significa esto otra cosa que salió mal. 354 00:17:23,440 --> 00:17:27,170 >> Y si ahora piensa en su propio PC o Mac, se puede recordar que 355 00:17:27,170 --> 00:17:29,610 a veces aparecen mensajes de error crípticos desde un software que estás 356 00:17:29,610 --> 00:17:32,650 utilizando, ya veces tiene un ser humano Descripción amable, pero hay 357 00:17:32,650 --> 00:17:35,265 menudo un código o un número en la pantalla? 358 00:17:35,265 --> 00:17:37,800 Si esto no viene a la mente, sólo mantener un ojo hacia fuera para él. 359 00:17:37,800 --> 00:17:40,790 Eso es por lo general lo que estos los códigos se refieren. 360 00:17:40,790 --> 00:17:44,200 Están incluidos en Microsoft Word y otros programas de modo que si usted presenta una 361 00:17:44,200 --> 00:17:48,850 reporte de error con la empresa, se puede decirles, oh, tengo el numero de error 45. 362 00:17:48,850 --> 00:17:51,750 Y algunos de nuevo programador en la empresa puede parecer que en su 363 00:17:51,750 --> 00:17:54,940 código y dicen, oh, eso es porque yo hice este error y es por eso que el usuario 364 00:17:54,940 --> 00:17:56,240 obtenido este mensaje. 365 00:17:56,240 --> 00:17:59,490 >> Pero, francamente, es sólo un poco distracción y un poco tedioso para 366 00:17:59,490 --> 00:18:02,130 concluir que, al menos en nuestra primeros programas, por lo que hemos 367 00:18:02,130 --> 00:18:02,970 sido omitirla. 368 00:18:02,970 --> 00:18:07,450 Pero todo este tiempo cada uno de sus Las principales funciones ha tenido en secreto este 369 00:18:07,450 --> 00:18:11,600 línea agregada automáticamente por usted por el compilador, simplemente por convención 370 00:18:11,600 --> 00:18:13,172 ahorrar algo de tiempo. 371 00:18:13,172 --> 00:18:14,620 >> [Inaudible]. 372 00:18:14,620 --> 00:18:16,250 >> No es necesario incluirlo en principal. 373 00:18:16,250 --> 00:18:16,700 Eso está bien. 374 00:18:16,700 --> 00:18:20,260 Sí es necesario incluirla si fueras la implementación de una función como esta. 375 00:18:20,260 --> 00:18:22,850 De lo contrario la función plana cabo no iba a funcionar. 376 00:18:22,850 --> 00:18:24,480 Pero en principal, no es necesario. 377 00:18:24,480 --> 00:18:28,450 En una o dos semanas, vamos a empezar a conseguir en ese hábito una vez que queremos empezar 378 00:18:28,450 --> 00:18:29,690 significando errores. 379 00:18:29,690 --> 00:18:32,550 Muy buena pregunta. 380 00:18:32,550 --> 00:18:36,880 >> Pausa verbal Así rápida de mención que este viernes, no estaremos almorzando 381 00:18:36,880 --> 00:18:39,980 per se, pero vamos a tener una cena con algunos de los estudiantes y el personal. 382 00:18:39,980 --> 00:18:42,940 Si desea unirse a nosotros, se sienten libre de ir a cs50.net/rsvp. 383 00:18:42,940 --> 00:18:45,030 18:00 de este viernes. 384 00:18:45,030 --> 00:18:47,990 El espacio es, como siempre, limitado, pero vamos a seguir haciendo esto en un casi 385 00:18:47,990 --> 00:18:51,420 semanalmente si el espacio se agote esta semana. 386 00:18:51,420 --> 00:18:56,160 >> Así que el drama de suspenso que lo dejamos en El lunes fue que las cadenas pueden realmente 387 00:18:56,160 --> 00:19:00,520 ser indexados en que sólo le significa se puede obtener en el primer carácter, el 388 00:19:00,520 --> 00:19:03,770 segundo personaje, el tercer personaje y así sucesivamente, porque se puede 389 00:19:03,770 --> 00:19:07,860 pensar de manera efectiva de una cadena, como hola, como en este caso cinco 390 00:19:07,860 --> 00:19:09,670 letras dentro de las cajas. 391 00:19:09,670 --> 00:19:13,370 Y usted puede conseguir en cada uno de los cajas con lo que hizo que la sintaxis 392 00:19:13,370 --> 00:19:15,230 introducir el lunes? 393 00:19:15,230 --> 00:19:16,760 Estos corchetes en su teclado. 394 00:19:16,760 --> 00:19:18,980 Eso sólo significaba ir a la posición cero. 395 00:19:18,980 --> 00:19:22,840 >> Empezamos a contar desde cero, por lo que el soporte cero significa H, soporte de uno 396 00:19:22,840 --> 00:19:25,170 significa e, y así sucesivamente. 397 00:19:25,170 --> 00:19:28,490 Y así todo el tiempo cuando hemos estado el uso de cadenas y escribir "hola" 398 00:19:28,490 --> 00:19:31,250 y "mundo" y otras cosas en la pantalla, se ha almacenado 399 00:19:31,250 --> 00:19:32,820 en cajas de este tipo. 400 00:19:32,820 --> 00:19:33,370 Y tomar una conjetura. 401 00:19:33,370 --> 00:19:37,470 ¿Qué hace cada caja representan físicamente dentro de su computadora? 402 00:19:37,470 --> 00:19:38,250 >> [Inaudible]. 403 00:19:38,250 --> 00:19:39,150 >> ¿Lo sientes? 404 00:19:39,150 --> 00:19:39,580 >> Personajes. 405 00:19:39,580 --> 00:19:44,760 >> Así que un personaje, sin duda, en el caso de cadenas, y un personaje es 406 00:19:44,760 --> 00:19:46,800 ocho bits o un byte. 407 00:19:46,800 --> 00:19:49,550 Así que probablemente es por lo menos vagamente familiarizado con el hecho de que su 408 00:19:49,550 --> 00:19:50,500 equipo tiene memoria. 409 00:19:50,500 --> 00:19:52,110 Tiene dos tipos de memoria, por lo menos. 410 00:19:52,110 --> 00:19:54,810 Uno de ellos es el disco duro donde se guarda Las cosas de manera permanente, y eso es 411 00:19:54,810 --> 00:19:57,400 típicamente grande, así que puedes tener películas y la música y así sucesivamente. 412 00:19:57,400 --> 00:20:04,010 >> Entonces usted tiene otro tipo de memoria llamada RAM, R-A-M, de acceso aleatorio 413 00:20:04,010 --> 00:20:07,510 Memoria, y este es el tipo de memoria que se utiliza cuando el equipo está 414 00:20:07,510 --> 00:20:11,520 correr, pero si pierde el poder o su batería se agota, cualquier cosa que se almacena 415 00:20:11,520 --> 00:20:15,300 en la memoria RAM desaparece si se va la electricidad completo, ya que no es 416 00:20:15,300 --> 00:20:16,060 persistente. 417 00:20:16,060 --> 00:20:19,120 Normalmente tiene, en estos días, un concierto de ella, dos conciertos, tal vez más. 418 00:20:19,120 --> 00:20:23,490 Y el lado positivo de la memoria RAM es que es mucho mucho, mucho más rápido que los discos duros 419 00:20:23,490 --> 00:20:27,390 o incluso en estado sólido impulsa en estos días, pero es generalmente más caro, así 420 00:20:27,390 --> 00:20:28,480 con menos de la misma. 421 00:20:28,480 --> 00:20:32,400 >> Así que la conversación de hoy en realidad se refiere a la RAM, que tipo de memoria que 422 00:20:32,400 --> 00:20:35,270 sólo existe mientras hay poder de introducirlo en el ordenador. 423 00:20:35,270 --> 00:20:40,530 Así que cuando se escribe en H-E-L-L-O, Enter en el teclado, el H va en una 424 00:20:40,530 --> 00:20:44,550 byte de RAM, el E va en otro byte de RAM, como es 425 00:20:44,550 --> 00:20:45,800 el resto de la palabra. 426 00:20:45,800 --> 00:20:49,010 Así recordamos lo que hemos podido hacer la última vez fue esto. 427 00:20:49,010 --> 00:20:53,940 Déjame ir por delante y abrir el archivo que llamamos string.c, y el recuerdo 428 00:20:53,940 --> 00:20:56,860 que parecía un poco algo como esto. 429 00:20:56,860 --> 00:20:59,860 Déjame en realidad lograr la regresión y el cambio es exactamente lo que parecía, 430 00:20:59,860 --> 00:21:02,654 longitud de la cadena de s. 431 00:21:02,654 --> 00:21:04,560 >> Así que busque en el programa aquí. 432 00:21:04,560 --> 00:21:08,530 Incluimos la biblioteca CS50 así que podemos utilizar cuerdas get. 433 00:21:08,530 --> 00:21:11,400 Incluimos io.h estándar así que podemos usar printf. 434 00:21:11,400 --> 00:21:13,580 ¿Por qué incluimos string.h? 435 00:21:13,580 --> 00:21:16,980 Esto era nuevo para el Lunes. 436 00:21:16,980 --> 00:21:18,230 Así que queríamos longitud de la cadena. 437 00:21:18,230 --> 00:21:19,090 Leng Str. 438 00:21:19,090 --> 00:21:21,470 La gente decidió hace años, vamos a ser sucinto. 439 00:21:21,470 --> 00:21:24,290 En lugar de llamarlo "longitud de la cadena," vamos a llamarlo "leng str" y dejar que el 440 00:21:24,290 --> 00:21:28,540 mundo darse cuenta de eso, y por lo que es lo que obtenemos acceso a con string.h. 441 00:21:28,540 --> 00:21:29,390 >> Esta es familiar. 442 00:21:29,390 --> 00:21:30,320 Esta es familiar. 443 00:21:30,320 --> 00:21:31,450 Esta es familiar. 444 00:21:31,450 --> 00:21:32,370 Esto es un poco nuevo. 445 00:21:32,370 --> 00:21:35,420 En la línea 22 - y volveremos para esto, pero por ahora saber - 446 00:21:35,420 --> 00:21:37,880 y usted sólo saber esto de tener leer la documentación o si 447 00:21:37,880 --> 00:21:39,010 sabías C ya - 448 00:21:39,010 --> 00:21:41,510 conseguir string veces puede meter la pata. 449 00:21:41,510 --> 00:21:45,130 Si el usuario es realmente contradictorio o y él o ella no coopera sólo 450 00:21:45,130 --> 00:21:49,450 no escriba nada en el teclado o tipos tanto en el teclado que 451 00:21:49,450 --> 00:21:53,760 abruma la memoria de la computadora, en teoría, llegar cadena podría volver 452 00:21:53,760 --> 00:21:56,270 algo que no sea un cadena de caracteres. 453 00:21:56,270 --> 00:22:01,930 Puede devolver un valor especial llamado NULL en mayúsculas, N-U-L-L, y esto es 454 00:22:01,930 --> 00:22:03,390 sólo un valor llamado centinela. 455 00:22:03,390 --> 00:22:08,010 Es un valor especial que significa algo malo sucedió en este caso. 456 00:22:08,010 --> 00:22:10,520 Es la ausencia de una cadena. 457 00:22:10,520 --> 00:22:16,190 >> Así nula Estoy comprobando por el simple hecho de modo que, cuento largo, leng str y 458 00:22:16,190 --> 00:22:20,230 otras funciones que vienen con C, si es que esperan una cadena pero ellos pasan 459 00:22:20,230 --> 00:22:23,630 la ausencia de una cadena, si se pasa ellos NULL, el ordenador o el programa de 460 00:22:23,630 --> 00:22:25,000 se acaba de estrellarse por completo. 461 00:22:25,000 --> 00:22:25,610 Se colgará. 462 00:22:25,610 --> 00:22:27,250 Se lanzará encima de algún mensaje de error. 463 00:22:27,250 --> 00:22:28,690 Las cosas malas sucederán. 464 00:22:28,690 --> 00:22:31,130 Así que, aunque esto sigue siendo no bien definido - 465 00:22:31,130 --> 00:22:33,730 esto tendrá más sentido en una semana o dos - en la línea 22, esto es sólo una 466 00:22:33,730 --> 00:22:38,790 ejemplo de auto comprobación de errores en defensa sólo en caso de una vez de cada 467 00:22:38,790 --> 00:22:42,040 un millón de que algo va mal, al menos mi programa no se estrellará. 468 00:22:42,040 --> 00:22:45,960 >> Así que si s no es igual a algo malo, Tengo este bucle for, y esto fue 469 00:22:45,960 --> 00:22:47,710 donde teníamos que otra nueva pieza de sintaxis. 470 00:22:47,710 --> 00:22:51,580 Tengo una para la iteración de bucle de cero en un máximo de la longitud de s. 471 00:22:51,580 --> 00:22:56,140 Y luego aquí, estaba imprimiendo una s soporte de i, pero ¿por qué utilizo% c todos 472 00:22:56,140 --> 00:23:00,770 repente en lugar de% s aún aunque s es una cadena? 473 00:23:00,770 --> 00:23:02,110 Es un personaje, ¿no? 474 00:23:02,110 --> 00:23:06,560 S es una cadena, pero s abrazadera algo, s abrazadera i donde i es cero 475 00:23:06,560 --> 00:23:10,380 o uno o dos, eso es un individuo carácter de la cadena, por lo que para 476 00:23:10,380 --> 00:23:14,970 que, printf debe ser informado de que es de hecho un personaje que puede esperar. 477 00:23:14,970 --> 00:23:18,096 >> Y a continuación, recordar, lo que hizo este programa realmente? 478 00:23:18,096 --> 00:23:19,848 >> Impreso a cabo en columnas. 479 00:23:19,848 --> 00:23:21,120 >> Sí, exactamente. 480 00:23:21,120 --> 00:23:24,990 Simplemente imprime la palabra que escribo en una columna, un carácter por línea. 481 00:23:24,990 --> 00:23:26,190 Así que vamos a ver esto de nuevo. 482 00:23:26,190 --> 00:23:27,810 Así que la cadena. 483 00:23:27,810 --> 00:23:30,200 Compilado Aceptar. . / String. 484 00:23:30,200 --> 00:23:35,560 Permítanme escribo en H-E-L-L-O, ENTER, y de hecho lo entiendo, una línea por. 485 00:23:35,560 --> 00:23:37,280 >> Así que déjame hacer una optimización de aquí. 486 00:23:37,280 --> 00:23:40,240 Si se piensa en ello, sobre todo si que haya programado antes, hay 487 00:23:40,240 --> 00:23:43,340 posiblemente una ineficiencia en la línea 24. 488 00:23:43,340 --> 00:23:46,160 En otras palabras, no es necesariamente el mejor diseño. 489 00:23:46,160 --> 00:23:50,200 Sencillo, al menos, una vez que recordar lo leng str es, pero es 490 00:23:50,200 --> 00:23:52,640 haciendo algo tonto potencialmente. 491 00:23:52,640 --> 00:23:54,863 ¿Qué podría ser? 492 00:23:54,863 --> 00:23:56,280 >> [Inaudible]. 493 00:23:56,280 --> 00:23:56,800 >> Exactamente. 494 00:23:56,800 --> 00:24:00,340 Es la comprobación de la longitud de s cada vez que a pesar de que 495 00:24:00,340 --> 00:24:02,980 H-E-L-L-O siempre va a ser de cinco caracteres. 496 00:24:02,980 --> 00:24:05,490 Cada vez que a través de este bucle, los cinco no está cambiando. 497 00:24:05,490 --> 00:24:08,750 Yo podría estar incrementando i, pero lo es la longitud de s en todos los 498 00:24:08,750 --> 00:24:09,690 iteración de este bucle? 499 00:24:09,690 --> 00:24:15,810 Son las cinco, que es de cinco años, que es de cinco años, y sin embargo, yo estoy pidiendo esto, sin embargo, 500 00:24:15,810 --> 00:24:18,320 pregunta una y otra vez y otra vez. 501 00:24:18,320 --> 00:24:20,750 Ahora, francamente, el ordenador es tan condenadamente rápido, nadie va a notar una 502 00:24:20,750 --> 00:24:23,780 diferencia en este caso, pero estos tipos las decisiones de diseño de pobres puede 503 00:24:23,780 --> 00:24:28,330 empezar a sumar si el propio compilador no tratar de arreglar esto para usted que 504 00:24:28,330 --> 00:24:30,630 que por lo general no lo haría, por lo menos en el aparato. 505 00:24:30,630 --> 00:24:31,540 >> Así que voy a hacer esto. 506 00:24:31,540 --> 00:24:34,580 Voy a añadir una coma después de mi primera variable, i. 507 00:24:34,580 --> 00:24:37,310 Voy a darme otra variables, que calificó de n, con sólo 508 00:24:37,310 --> 00:24:41,330 convención para los números, y entonces estoy va a asignar n el valor de cadena 509 00:24:41,330 --> 00:24:42,530 longitud de s. 510 00:24:42,530 --> 00:24:46,060 Y entonces voy a cambiar mi condición de ser qué? 511 00:24:46,060 --> 00:24:51,960 Voy a cambiar mi condición al mismo tiempo i es menor que n. 512 00:24:51,960 --> 00:24:55,700 >> Así que ahora, ¿cuántas veces estoy el control de la longitud de s? 513 00:24:55,700 --> 00:25:00,110 Una vez, pero está bien para comprobar i contra n una y otra vez porque ahora los 514 00:25:00,110 --> 00:25:03,170 Los valores no son en realidad cambiando. 515 00:25:03,170 --> 00:25:06,020 Ahora por ahora, sólo sé que en cualquier momento que llamar a una función, hay un poco de 516 00:25:06,020 --> 00:25:09,930 gastos generales, no es suficiente para desalentar realmente desde siempre el uso de funciones, pero 517 00:25:09,930 --> 00:25:12,750 sin duda cuando hay una línea de código así - y las líneas tendrán 518 00:25:12,750 --> 00:25:15,490 más interesante en poco tiempo - en su hay una oportunidad para pensar, si yo 519 00:25:15,490 --> 00:25:18,320 escriba este código, el número de veces va a ejecutar? 520 00:25:18,320 --> 00:25:20,950 Usted comenzará a ver con el tiempo el rendimiento de los programas pueden 521 00:25:20,950 --> 00:25:21,660 de hecho cambiar. 522 00:25:21,660 --> 00:25:24,110 >> De hecho, uno de los boletines de problemas que hemos hecho en los últimos años implica 523 00:25:24,110 --> 00:25:27,600 ejecución en lo que usted puede recordar de semana cero, un corrector ortográfico, sino una 524 00:25:27,600 --> 00:25:31,380 corrector ortográfico que está diseñado para soportar un diccionario de 150.000 más 525 00:25:31,380 --> 00:25:32,860 palabras que le ofrecemos chicos. 526 00:25:32,860 --> 00:25:37,100 Usted tendría que escribir código que se carga esas palabras en la memoria RAM, por lo que en 527 00:25:37,100 --> 00:25:40,700 cajas como la que vimos en la pantalla de un momento hace, a continuación, lo más rápido que 528 00:25:40,700 --> 00:25:43,740 puede, tiene que ser capaz de responder a una cuestión de la forma, es la palabra 529 00:25:43,740 --> 00:25:44,280 mal escrito? 530 00:25:44,280 --> 00:25:45,420 Está mal escrito en la palabra? 531 00:25:45,420 --> 00:25:46,770 Está mal escrito en la palabra? 532 00:25:46,770 --> 00:25:49,525 >> Y en algo así lo que hemos hecho en los últimos años se convirtió en, 533 00:25:49,525 --> 00:25:53,500 aunque de manera opcional opt-in, un la competencia de las clases, por lo que el 534 00:25:53,500 --> 00:25:59,470 los estudiantes que utilizan el menos RAM y menos tiempo, menos ciclos de CPU, terminan 535 00:25:59,470 --> 00:26:02,640 burbujeando hasta la cima de una pequeña tabla de clasificación o ranking que nos ponemos 536 00:26:02,640 --> 00:26:04,770 página de inicio del curso, ya que hemos hecho en los últimos años. 537 00:26:04,770 --> 00:26:08,100 Así que de nuevo, totalmente opcional, pero esta habla de las oportunidades de diseño 538 00:26:08,100 --> 00:26:11,250 que están por delante una vez que empezamos edificio encima de algunos de estos 539 00:26:11,250 --> 00:26:14,010 bloques de construcción básicos. 540 00:26:14,010 --> 00:26:16,780 >> Así que permítanme volver a este diagrama para un momento y revelar un poco 541 00:26:16,780 --> 00:26:17,610 algo más. 542 00:26:17,610 --> 00:26:21,400 De hecho, esto es una cadena, y hemos tomado ventaja de algunas bibliotecas, 543 00:26:21,400 --> 00:26:25,150 io.h estándar que tiene - 544 00:26:25,150 --> 00:26:26,110 >> Printf. 545 00:26:26,110 --> 00:26:27,860 >> Printf, entre otras cosas. 546 00:26:27,860 --> 00:26:31,540 cs50.h, que ha conseguir int y obtener string y así sucesivamente, string.h, que 547 00:26:31,540 --> 00:26:32,570 tenido leng str. 548 00:26:32,570 --> 00:26:34,800 Pero resulta que hay otra. 549 00:26:34,800 --> 00:26:38,540 Francamente, hay montones y montones de cabecera archivos que declaran funciones 550 00:26:38,540 --> 00:26:43,320 para las bibliotecas, pero esto es ctype.h en realidad va a ser algo 551 00:26:43,320 --> 00:26:46,900 ventajosa porque voy seguir adelante y poner en práctica una 552 00:26:46,900 --> 00:26:48,120 otro programa aquí. 553 00:26:48,120 --> 00:26:52,420 >> Déjame ir adelante y abro algo Escribí con antelación llamada 554 00:26:52,420 --> 00:26:55,750 capitalize.c, y echemos un vistazo a cómo funciona esto. 555 00:26:55,750 --> 00:27:00,340 Observe que estoy usando, en esta versión de la misma, tres archivos familiares. 556 00:27:00,340 --> 00:27:04,110 Nótese que en la línea 18, que soy obtener una línea de texto. 557 00:27:04,110 --> 00:27:07,660 Fíjese en la línea 21, estoy afirmando que el siguiente código va a 558 00:27:07,660 --> 00:27:12,170 capitalizar s, lo que el usuario escribió , y cómo hago eso? 559 00:27:12,170 --> 00:27:13,300 Bueno, yo estoy tomando - 560 00:27:13,300 --> 00:27:14,750 lección aprendida de la última vez - 561 00:27:14,750 --> 00:27:18,370 Estoy declarando i y n y la iteración lo largo de los caracteres de la cadena. 562 00:27:18,370 --> 00:27:22,720 Y entonces, ¿qué es este bloque de código en la línea 24 hasta el 27 de 563 00:27:22,720 --> 00:27:24,550 haciendo en términos sencillos? 564 00:27:24,550 --> 00:27:27,766 565 00:27:27,766 --> 00:27:29,730 >> Letra minúscula espalda. 566 00:27:29,730 --> 00:27:30,430 >> Exactamente. 567 00:27:30,430 --> 00:27:35,920 Si s abrazadera i - por lo que si el i-th carácter de s, que es una específica 568 00:27:35,920 --> 00:27:40,220 charla en la cadena, es mayor que o igual a minúsculas y un - 569 00:27:40,220 --> 00:27:42,670 recordar que signo doble significar y - 570 00:27:42,670 --> 00:27:46,810 y el mismo carácter, s i soporte, es menos de o igual a z minúsculas, 571 00:27:46,810 --> 00:27:50,600 eso significa que es una A o una B o una C o punto, punto, punto, o una Z, que medios 572 00:27:50,600 --> 00:27:51,340 está en minúsculas. 573 00:27:51,340 --> 00:27:52,900 ¿Qué es lo que quiero hacer en ese caso? 574 00:27:52,900 --> 00:27:55,010 Bueno, yo puedo hacer esto de alguna manera crípticamente, pero 575 00:27:55,010 --> 00:27:56,160 vamos burlan de esta separación. 576 00:27:56,160 --> 00:28:00,210 >> Voy a llamar a printf, impresiones% c porque quiero hacer uso de este 577 00:28:00,210 --> 00:28:01,580 carácter en la pantalla. 578 00:28:01,580 --> 00:28:06,650 Luego voy a tomar s soporte i, la i-ésimo carácter en s, y entonces ¿por qué 579 00:28:06,650 --> 00:28:12,330 estoy haciendo este pequeño truco aquí, minúscula mayúscula menos A? 580 00:28:12,330 --> 00:28:16,352 ¿Qué es eso de ir a dar mí, en términos generales? 581 00:28:16,352 --> 00:28:18,600 >> [Inaudible]. 582 00:28:18,600 --> 00:28:19,390 >> Exactamente. 583 00:28:19,390 --> 00:28:20,860 Yo no me acuerdo - 584 00:28:20,860 --> 00:28:24,390 que era de 65 años para el capital A. Realmente no me recordar lo que una minúscula, es decir, 585 00:28:24,390 --> 00:28:25,540 pero no importa. 586 00:28:25,540 --> 00:28:26,580 La computadora sabe. 587 00:28:26,580 --> 00:28:30,380 Así diciendo, minúscula un signo menos A mayúscula, es raro estar 588 00:28:30,380 --> 00:28:33,530 restar un carbón de leña de otro, pero ¿cuáles son caracteres debajo de la campana? 589 00:28:33,530 --> 00:28:34,520 No son más que números. 590 00:28:34,520 --> 00:28:36,980 Así que cualquier cosa esos números son, dejar que el ordenador recuerde que 591 00:28:36,980 --> 00:28:38,240 más que me lo humano. 592 00:28:38,240 --> 00:28:41,710 >> Así minúscula mayúscula menos A se me va a dar la diferencia. 593 00:28:41,710 --> 00:28:45,370 Le pasa a ser 32, y que sería el caso de la b minúscula y mayúscula B 594 00:28:45,370 --> 00:28:45,930 y así sucesivamente. 595 00:28:45,930 --> 00:28:47,710 Se mantiene constante, por suerte. 596 00:28:47,710 --> 00:28:51,930 Así que estoy diciendo en esencia, tomar la letra minúscula, restar off que 597 00:28:51,930 --> 00:28:55,340 diferencia norma, y ​​que cambia efectivamente s abrazadera i de 598 00:28:55,340 --> 00:28:59,400 minúsculas a, por supuesto, en mayúsculas, sin que yo realmente tener que pensar 599 00:28:59,400 --> 00:29:03,040 sobre o recordar, ¿cuáles fueron los los números de los que hablamos cuando los ocho 600 00:29:03,040 --> 00:29:04,800 voluntarios llegaron al escenario? 601 00:29:04,800 --> 00:29:08,800 Ahora mientras tanto, en el otro, si no es una letra minúscula, determinado 602 00:29:08,800 --> 00:29:10,400 por la línea 24, al imprimirlo. 603 00:29:10,400 --> 00:29:12,590 Yo sólo quiero tocar el caracteres que eran 604 00:29:12,590 --> 00:29:14,410 de hecho originalmente en minúsculas. 605 00:29:14,410 --> 00:29:15,150 >> Así que veamos esto. 606 00:29:15,150 --> 00:29:17,400 Hacer capitalizar. 607 00:29:17,400 --> 00:29:18,470 Compilado, OK. 608 00:29:18,470 --> 00:29:19,730 . / Capitalizar. 609 00:29:19,730 --> 00:29:23,530 Y permítanme escribo en H-E-L-L-O en minúsculas, Intro. 610 00:29:23,530 --> 00:29:26,370 Y note que se convierte en mayúsculas. 611 00:29:26,370 --> 00:29:27,940 Déjame hacer esto de nuevo con una palabra diferente. 612 00:29:27,940 --> 00:29:32,720 ¿Qué hay de D-A-V-I-D con la primera D capitalizado como un nombre típicamente es? 613 00:29:32,720 --> 00:29:33,560 Intro. 614 00:29:33,560 --> 00:29:34,870 Observe que sigue siendo correcta. 615 00:29:34,870 --> 00:29:40,250 Sólo emite esa primera D sin cambios a través de otra cosa que construir. 616 00:29:40,250 --> 00:29:42,170 >> Así que tenga en mente, entonces, un par de cosas aquí. 617 00:29:42,170 --> 00:29:45,060 Uno, si alguna vez desea comprobar dos condiciones a la vez, que pueda y les 618 00:29:45,060 --> 00:29:46,500 juntos como lo habíamos previsto. 619 00:29:46,500 --> 00:29:49,900 Puede comparar los caracteres de esta manera y tratar eficazmente caracteres como 620 00:29:49,900 --> 00:29:53,050 números, pero, francamente, esto es tan maldita críptico que nunca voy a recordar 621 00:29:53,050 --> 00:29:56,510 cómo llegar a este desde cero sin razonar a través de ella durante bastante 622 00:29:56,510 --> 00:29:57,140 un poco de tiempo. 623 00:29:57,140 --> 00:30:00,590 >> ¿No hubiera sido agradable si alguien por ahí escribió una función llamada es 624 00:30:00,590 --> 00:30:05,390 un menor que podría responder por mí verdadera o falso, este personaje está en minúsculas? 625 00:30:05,390 --> 00:30:09,350 Bueno gracias a Dios, quien escribió ctype.h hizo exactamente eso. 626 00:30:09,350 --> 00:30:15,540 Déjame ir aquí y añadir ctype para c tipos, y ahora déjame bajar aquí y 627 00:30:15,540 --> 00:30:18,820 reescribir esta línea de la siguiente manera. 628 00:30:18,820 --> 00:30:27,510 >> Así que si se llama es menor, reclamo, S soporte de i, entonces yo voy a borrar 629 00:30:27,510 --> 00:30:29,400 estas dos líneas en total. 630 00:30:29,400 --> 00:30:32,570 Así que ahora alguien más, espero, escribió una función llamada es más bajo, y 631 00:30:32,570 --> 00:30:36,250 resulta que lo hicieron y fueron reunidos dentro de ctype.h. 632 00:30:36,250 --> 00:30:39,480 Y ahora voy a salir de la línea 27 solo, voy a salir de la línea 31 633 00:30:39,480 --> 00:30:41,890 solo, pero noto lo mucho que he reforzado mi código. 634 00:30:41,890 --> 00:30:42,690 Ahora es más limpio. 635 00:30:42,690 --> 00:30:47,250 Es menos difícil de mirar a través de porque ahora la función, por otra parte, es 636 00:30:47,250 --> 00:30:50,080 tan maravillosamente llamado simplemente hace lo que dice. 637 00:30:50,080 --> 00:30:51,520 >> Así que ahora voy a guardar esto. 638 00:30:51,520 --> 00:30:52,930 Me voy a alejar. 639 00:30:52,930 --> 00:30:56,650 Y al igual que en los arañazos que podría tener Booleanos, valores booleanos true o 640 00:30:56,650 --> 00:31:01,530 falso, eso es exactamente lo que es devuelve menor eficacia. 641 00:31:01,530 --> 00:31:02,960 Déjame a compilar. 642 00:31:02,960 --> 00:31:04,500 Déjame volver a ejecutar. 643 00:31:04,500 --> 00:31:07,350 Y ahora vamos a intentarlo de nuevo, H-E-L-L-O, Enter. 644 00:31:07,350 --> 00:31:07,970 Eso es bastante bueno. 645 00:31:07,970 --> 00:31:10,150 Y tratar de nuevo, asegúrese de que no atornillar algo. 646 00:31:10,150 --> 00:31:11,670 Eso se capitaliza también. 647 00:31:11,670 --> 00:31:14,190 >> Pero esto no es lo suficientemente bueno, porque el Otra cosa que yo nunca voy a 648 00:31:14,190 --> 00:31:19,090 recuerde a menos que trabaje a través de lo que realmente cuidadosamente sobre, por ejemplo, el papel es 649 00:31:19,090 --> 00:31:19,920 esta maldita línea. 650 00:31:19,920 --> 00:31:23,450 ¿No sería agradable si había una función llamada a la parte superior? 651 00:31:23,450 --> 00:31:26,930 Pues resulta que hay está en ctype.h también. 652 00:31:26,930 --> 00:31:30,150 Voy a seguir adelante y escribir - 653 00:31:30,150 --> 00:31:31,340 permítanme traer esa línea de la espalda. 654 00:31:31,340 --> 00:31:36,430 En lugar de esto aquí, que me deje ir por delante y decir, sustituto de la c% del 655 00:31:36,430 --> 00:31:42,110 resultado de llamar a esta función para superior en el carácter i-ésimo de s. 656 00:31:42,110 --> 00:31:45,430 Y ahora note que se está haciendo un poco equilibrada. 657 00:31:45,430 --> 00:31:48,870 Tengo que mantener un registro de cuántas paréntesis que he abierto y cerrado. 658 00:31:48,870 --> 00:31:50,050 >> Así que ahora es aún más limpio. 659 00:31:50,050 --> 00:31:53,460 Ahora bien, este programa es cada vez mejor y mejor diseñados posiblemente porque es 660 00:31:53,460 --> 00:31:56,450 mucho, mucho más fácil de leer, pero no es de Vamos a corregir. 661 00:31:56,450 --> 00:31:57,600 Hacer capitalizar. 662 00:31:57,600 --> 00:31:58,930 . / Capitalizar. 663 00:31:58,930 --> 00:32:03,220 H-E-L-L-O. Vamos a correr de nuevo, D-A-V-I-D. Aceptar, por lo que aún estamos en 664 00:32:03,220 --> 00:32:04,250 muy buena forma. 665 00:32:04,250 --> 00:32:06,030 >> Pero ahora al superior. 666 00:32:06,030 --> 00:32:09,720 Propongo que hay uno más refinamiento podríamos hacer eso sería 667 00:32:09,720 --> 00:32:12,820 muy agradable, que realmente podía apretar hasta este código y realmente nos dan cinco 668 00:32:12,820 --> 00:32:15,150 Fuera de cinco para el diseño, por ejemplo. 669 00:32:15,150 --> 00:32:16,510 Lo que sería bueno para deshacerse de? 670 00:32:16,510 --> 00:32:20,770 Bueno, mira lo malditamente largo de este bloque de código es sólo para hacer algo simple. 671 00:32:20,770 --> 00:32:23,850 >> Ahora, como un aparte, como es posible que tenga visto en súper sección el pasado 672 00:32:23,850 --> 00:32:27,570 fin de semana, usted no necesita estrictamente la llaves cuando sólo hay uno 673 00:32:27,570 --> 00:32:32,180 línea de código, a pesar de que hemos propuesto mantenerlos para que haga mucho 674 00:32:32,180 --> 00:32:36,190 más claro, como en la forma de U de Scratch bloques, lo que está dentro de la sucursal. 675 00:32:36,190 --> 00:32:40,170 Pero ¿no sería agradable si al superior, cuando se les da su entrada, lo convirtió en 676 00:32:40,170 --> 00:32:44,730 mayúsculas, si no lo es, y lo que haría ser maravilloso en el caso contrario, si 677 00:32:44,730 --> 00:32:47,210 ya está en mayúsculas? 678 00:32:47,210 --> 00:32:49,620 Sólo tiene que pasar a través de y dejarlo solo. 679 00:32:49,620 --> 00:32:50,660 >> Así que tal vez lo hace. 680 00:32:50,660 --> 00:32:52,990 Podría intentarlo y sólo espero que lo hace, pero me dejó 681 00:32:52,990 --> 00:32:54,450 introducir una cosa más. 682 00:32:54,450 --> 00:32:57,440 En lugar de utilizar esta integrado en el terminal ventana de aquí abajo, recordemos que 683 00:32:57,440 --> 00:33:01,130 este icono cuadrado negro le da un ventana de terminal más grande que puedo completo 684 00:33:01,130 --> 00:33:02,260 detectar si quiero? 685 00:33:02,260 --> 00:33:05,820 Así que resulta que son una especie de extraña nombrado, pero hay esas cosas llamadas 686 00:33:05,820 --> 00:33:10,970 páginas de manual, páginas de manual, hombre, para abreviar, y puedo acceder a ellos 687 00:33:10,970 --> 00:33:14,515 hombre escribiendo - 688 00:33:14,515 --> 00:33:15,570 ¿qué quiero escribir? 689 00:33:15,570 --> 00:33:17,830 Man to superior. 690 00:33:17,830 --> 00:33:21,090 >> Y ahora fíjense si existe una funcionar en el interior de la computadora, en 691 00:33:21,090 --> 00:33:23,970 este caso el aparato, que se encuentra el sistema operativo Linux, que va 692 00:33:23,970 --> 00:33:27,920 para darme un conjunto un tanto críptica de de salida, pero usted encontrará que con el tiempo 693 00:33:27,920 --> 00:33:31,720 siempre tiene el formato más o menos la misma por lo que empezar a acostumbrarse a él. 694 00:33:31,720 --> 00:33:35,130 Fíjese en la parte superior a la parte superior, y al parecer es la misma documentación 695 00:33:35,130 --> 00:33:35,680 para bajar. 696 00:33:35,680 --> 00:33:38,740 Quienquiera que haya escrito que estaba recortando algunos esquinas y lo puso todo en una página. 697 00:33:38,740 --> 00:33:40,720 Propósito Estas cosas 'en la vida es para convertir un 698 00:33:40,720 --> 00:33:42,780 carta a mayúscula o minúscula. 699 00:33:42,780 --> 00:33:46,290 >> Nótese que bajo Sinopsis, la página de manual me está enseñando lo archivo que tengo 700 00:33:46,290 --> 00:33:48,130 para incluir a usar esta cosa. 701 00:33:48,130 --> 00:33:51,320 Me está dando las firmas para estos funciones, tanto de ellos, incluso 702 00:33:51,320 --> 00:33:53,510 a pesar de que en estos momentos sólo se preocupan por uno. 703 00:33:53,510 --> 00:33:54,730 He aquí ahora una descripción. 704 00:33:54,730 --> 00:33:58,800 Para convierte superior de la letra c a mayúsculas si es posible. 705 00:33:58,800 --> 00:34:02,280 >> Aún así no es que instructiva, pero déjame Ahora mire bajo valor de retorno, lo 706 00:34:02,280 --> 00:34:03,520 eso se devolvieron. 707 00:34:03,520 --> 00:34:08,600 Así que el valor devuelto es el de la carta convertido o c si el 708 00:34:08,600 --> 00:34:09,870 conversión no era posible. 709 00:34:09,870 --> 00:34:11,202 ¿Qué es el c? 710 00:34:11,202 --> 00:34:12,560 >> El carácter original. 711 00:34:12,560 --> 00:34:15,370 >> El carácter original y sabemos que por, otra vez, subiendo a la 712 00:34:15,370 --> 00:34:19,179 sinopsis, y el que escribió esto función acaba de decidir que la entrada 713 00:34:19,179 --> 00:34:22,909 para que superior e inferior es sólo para ir arbitrariamente a llamarse c. 714 00:34:22,909 --> 00:34:24,909 Podrían haber llamado más nada que quieran, pero lo mantuvieron en 715 00:34:24,909 --> 00:34:26,270 simple como c. 716 00:34:26,270 --> 00:34:27,880 Así que he consultado la página de manual. 717 00:34:27,880 --> 00:34:31,870 Esta frase me asegura que si que no es una letra minúscula, es 718 00:34:31,870 --> 00:34:34,969 va a darme la espalda c, que es perfecto, lo que significa que puedo deshacerme de 719 00:34:34,969 --> 00:34:36,199 mi condición más. 720 00:34:36,199 --> 00:34:39,679 >> Así que permítanme volver a GEdit y Ahora déjame hacer esto. 721 00:34:39,679 --> 00:34:41,960 Voy a copiar mi sentencia printf. 722 00:34:41,960 --> 00:34:45,969 Voy a seguir adelante y la derecha en el interior el bucle de impresión que fuera, y recibe 723 00:34:45,969 --> 00:34:48,760 deshacerse de ahora este conjunto si constructo. 724 00:34:48,760 --> 00:34:51,860 ¿No era una mala idea, y era muy mucho más correcto y consistente con 725 00:34:51,860 --> 00:34:54,100 todo lo que hemos predicado, pero simplemente no es necesario. 726 00:34:54,100 --> 00:34:57,070 Tan pronto como te das cuenta de alguna biblioteca existe la función que otra persona 727 00:34:57,070 --> 00:35:01,340 escribiste, o tal vez usted escribió en otra parte de el archivo, se puede usar y realmente 728 00:35:01,340 --> 00:35:02,690 comenzar a endurecer el código. 729 00:35:02,690 --> 00:35:06,080 >> Y cuando digo cosas como buen estilo, el hecho de que esta persona que se denominará 730 00:35:06,080 --> 00:35:11,490 función superior, o previamente es menor es maravillosamente útil porque 731 00:35:11,490 --> 00:35:12,900 que son muy descriptivos. 732 00:35:12,900 --> 00:35:16,120 Usted no quiere llamar a sus funciones X e Y y Z, que tienen 733 00:35:16,120 --> 00:35:19,620 mucho, mucho menos significado,. 734 00:35:19,620 --> 00:35:25,160 ¿Tiene preguntas sobre la serie de mejoras? 735 00:35:25,160 --> 00:35:28,010 >> Así que basta con decir una de las comida para llevar es como vuestro propio problema 736 00:35:28,010 --> 00:35:30,960 set - tal vez un problema establece una, pero Ciertamente P fijó dos en adelante, incluso 737 00:35:30,960 --> 00:35:34,380 cuando son correctas no necesariamente significa que sean perfectos sólo 738 00:35:34,380 --> 00:35:36,155 todavía o particularmente bien diseñada. 739 00:35:36,155 --> 00:35:38,420 Ese es el otro eje de empezar a pensar. 740 00:35:38,420 --> 00:35:41,730 Así que esto era una cadena dentro de su la memoria de la computadora, pero si usted tiene un 741 00:35:41,730 --> 00:35:46,180 manojo entero de personajes como H-E-L-L-O dentro de la memoria RAM, y supongamos 742 00:35:46,180 --> 00:35:51,330 que en su llamada al programa obtiene cadena varias veces de manera que usted 743 00:35:51,330 --> 00:35:54,200 llamar obtener string una vez, entonces usted llamar obtener string de nuevo. 744 00:35:54,200 --> 00:35:55,880 Bueno, ¿qué va a suceder con el tiempo? 745 00:35:55,880 --> 00:35:59,170 >> En otras palabras, si usted tiene una línea de código, aunque sea fuera de contexto, como 746 00:35:59,170 --> 00:36:02,120 string s consigue - 747 00:36:02,120 --> 00:36:02,960 vamos a hacer esto. 748 00:36:02,960 --> 00:36:05,270 String nombre es igual a conseguir cuerda. 749 00:36:05,270 --> 00:36:08,590 Así que supongo que esa línea de código está destinado para preguntar al usuario por su nombre. 750 00:36:08,590 --> 00:36:14,580 La siguiente línea de código tiene la intención de pedir el usuario para su escuela, y 751 00:36:14,580 --> 00:36:15,920 esta línea siguiente, y así sucesivamente. 752 00:36:15,920 --> 00:36:18,150 Supongamos que seguimos pidiendo el usuario para otro y 753 00:36:18,150 --> 00:36:19,750 otra, y otra cadena. 754 00:36:19,750 --> 00:36:22,390 Ellos van a permanecer en la memoria al mismo tiempo. 755 00:36:22,390 --> 00:36:24,280 Uno no va a darle una paliza al otro. 756 00:36:24,280 --> 00:36:26,420 La escuela no se sobrescribe el otro. 757 00:36:26,420 --> 00:36:28,520 Pero ¿de dónde todos terminar en la memoria? 758 00:36:28,520 --> 00:36:32,030 >> Bueno, si nos ponemos a dibujar en la pantalla, que podemos utilizar esta cosa 759 00:36:32,030 --> 00:36:35,800 aquí, como una pizarra, si este negro rectángulo representa mi equipo de 760 00:36:35,800 --> 00:36:39,800 memoria, voy a empezar de forma arbitraria dividirlo en pequeños cuadrados, 761 00:36:39,800 --> 00:36:42,120 cada uno de los cuales representa un byte de la memoria. 762 00:36:42,120 --> 00:36:46,560 Francamente, si usted tiene un gigabyte de RAM en estos días, usted tiene un billón de bytes 763 00:36:46,560 --> 00:36:49,540 de la memoria en su ordenador, por lo que un mil millones de estas plazas. 764 00:36:49,540 --> 00:36:52,110 Así que basta con decir, esta no es realmente a escala. 765 00:36:52,110 --> 00:36:58,250 >> Pero podríamos seguir dibujando todo esto claramente no a escala cuadrados, y esta 766 00:36:58,250 --> 00:37:01,260 representa colectivamente la memoria de mi ordenador. 767 00:37:01,260 --> 00:37:03,136 Ahora sólo tendremos que hacer punto, punto, punto. 768 00:37:03,136 --> 00:37:06,260 En otras palabras, cuando ahora pedirá al usuario con una cuerda get a darme un 769 00:37:06,260 --> 00:37:07,350 cadena, ¿qué sucede? 770 00:37:07,350 --> 00:37:14,270 Si el usuario escribe "hola", que los extremos en H-E-L-L-O. Pero supongamos que el 771 00:37:14,270 --> 00:37:15,720 usuario entonces los tipos de - 772 00:37:15,720 --> 00:37:17,250 En realidad, yo no debí haber hecho hola porque estamos pidiendo 773 00:37:17,250 --> 00:37:18,330 ellos por sus nombres. 774 00:37:18,330 --> 00:37:20,580 Así que vamos a volver si puedo hacer esto. 775 00:37:20,580 --> 00:37:26,130 >> Así que si escribo en D-A-V-I-D a mi nombre, sino recordar que la segunda línea de 776 00:37:26,130 --> 00:37:29,220 código era string get nuevo para llegar a su escuela. 777 00:37:29,220 --> 00:37:32,090 ¿Dónde está esa palabra que el usuario tipos en ir a ir ahora? 778 00:37:32,090 --> 00:37:38,290 Bueno, tal vez esto va a ir a H-A-R-V-A-R-D. Así que, aunque no tengo 779 00:37:38,290 --> 00:37:41,560 dibujado como dos filas, esto es sólo un montón de bytes en su 780 00:37:41,560 --> 00:37:42,710 la memoria RAM del ordenador. 781 00:37:42,710 --> 00:37:46,560 Hay un problema ahora, porque ahora si estoy utilizando la memoria RAM en este muy razonable 782 00:37:46,560 --> 00:37:49,910 pero algo ingenua manera, lo que puede al parecer no se distinguen? 783 00:37:49,910 --> 00:37:52,640 784 00:37:52,640 --> 00:37:54,680 Cuando uno empieza y dónde uno termina, ¿no? 785 00:37:54,680 --> 00:37:55,860 Son una especie de desdibujar juntos. 786 00:37:55,860 --> 00:37:57,920 >> Así resulta que el ordenador no hacer esto. 787 00:37:57,920 --> 00:38:04,720 Permítanme realidad retroceder en el tiempo un pocos personajes, y en vez de Harvard 788 00:38:04,720 --> 00:38:09,570 ir inmediatamente después del nombre del usuario, el usuario consigue realmente, detrás 789 00:38:09,570 --> 00:38:12,000 las escenas, un carácter especial insertado por el 790 00:38:12,000 --> 00:38:13,885 equipo para él o ella. 791 00:38:13,885 --> 00:38:19,470 / 0, también conocido como el carácter nul molesto llamado N-U-L, no 792 00:38:19,470 --> 00:38:22,190 N-U-L-L, pero se escribe como / 0. 793 00:38:22,190 --> 00:38:27,130 Son sólo los bits cero es un marcador de entre la primera palabra que el usuario 794 00:38:27,130 --> 00:38:28,290 escrito y la segunda. 795 00:38:28,290 --> 00:38:33,020 >> Así Harvard realidad ahora termina como esta secuencia de caracteres 796 00:38:33,020 --> 00:38:36,110 y uno más / 0. 797 00:38:36,110 --> 00:38:41,690 Así, en otras palabras, al tener estos valores de centinela, ocho cero contigua 798 00:38:41,690 --> 00:38:45,220 pedacitos, ahora puede empezar a distinguir un personaje de otro. 799 00:38:45,220 --> 00:38:49,720 Así que todo este tiempo lo que estaba "hello" es realidad "hola" con a / 0, y 800 00:38:49,720 --> 00:38:53,580 por su parte, podría muy bien ser un poco más de memoria RAM 801 00:38:53,580 --> 00:38:56,400 interior de la computadora. 802 00:38:56,400 --> 00:38:57,810 >> Déjame hacer otra cosa ahora. 803 00:38:57,810 --> 00:39:01,800 Resulta que todos estos cuadrados hemos estado dibujando, son, sí, 804 00:39:01,800 --> 00:39:06,140 cadenas, pero más generalmente, estas cosas son arrays. 805 00:39:06,140 --> 00:39:10,590 Una matriz es simplemente un trozo de memoria eso es volver a la espalda con espalda con espalda, 806 00:39:10,590 --> 00:39:15,130 y normalmente se utiliza una matriz por medio de esta notación de corchetes. 807 00:39:15,130 --> 00:39:18,210 Así que vamos a ver a estos un poco con el tiempo, pero me dejó ir adelante y 808 00:39:18,210 --> 00:39:21,160 abrir, vamos a llamarlo edades. 809 00:39:21,160 --> 00:39:23,920 Y notamos lo que podemos hacer con estos mismos trucos, un poco 810 00:39:23,920 --> 00:39:25,750 poco más de la sintaxis aquí. 811 00:39:25,750 --> 00:39:29,270 >> Así, en la línea 17 de este programa - En realidad, déjame correr primero el programa 812 00:39:29,270 --> 00:39:30,770 para que podamos ver lo que hace esta cosa. 813 00:39:30,770 --> 00:39:33,530 Déjame llamar a realizar las edades para compilar este programa. 814 00:39:33,530 --> 00:39:34,950 . / edades. 815 00:39:34,950 --> 00:39:36,480 ¿Cuántas personas hay en la habitación? 816 00:39:36,480 --> 00:39:38,020 Llámelo tres. 817 00:39:38,020 --> 00:39:39,575 Edad de la primera persona? 818 00:39:39,575 --> 00:39:42,710 18, 19, y 20. 819 00:39:42,710 --> 00:39:46,770 Y ahora un poco ridículo, sólo han hecho un programa que esas edades 820 00:39:46,770 --> 00:39:47,740 tres personas. 821 00:39:47,740 --> 00:39:50,390 >> Así que hay claramente una oportunidad para un poco de aritmética diversión aquí. 822 00:39:50,390 --> 00:39:51,560 Afortunadamente, la matemática es correcta. 823 00:39:51,560 --> 00:39:54,720 18 fueron a 19, 19 fue a 20 y así sucesivamente. 824 00:39:54,720 --> 00:39:58,510 Pero lo que realmente significa ser ilustrativa aquí es cómo lo estamos almacenando 825 00:39:58,510 --> 00:40:00,190 edades esos tres de las personas. 826 00:40:00,190 --> 00:40:02,370 Permítanme ampliar desde lo que es pasando aquí. 827 00:40:02,370 --> 00:40:06,240 >> Así que en primer lugar, estas primeras líneas deben estar recibiendo bastante familiar. 828 00:40:06,240 --> 00:40:08,770 Sólo estoy preguntando al usuario para la número de personas en la habitación. 829 00:40:08,770 --> 00:40:11,490 Entonces estoy usando get int y hacer tiempo para hacer esto una y otra vez y otra vez. 830 00:40:11,490 --> 00:40:15,780 Hemos visto que el patrón anterior, pero la línea 27 es nuevo y en realidad bastante 831 00:40:15,780 --> 00:40:18,160 útil, y se convertirá en cada vez más útil. 832 00:40:18,160 --> 00:40:21,620 Tenga en cuenta que lo que es diferente en la línea 27 es que me parece que haya declarado una 833 00:40:21,620 --> 00:40:23,960 int llamado las edades, pero espera. 834 00:40:23,960 --> 00:40:27,140 No es sólo int edades. 835 00:40:27,140 --> 00:40:30,130 Hay estos corchetes, dentro de los cuales es n. 836 00:40:30,130 --> 00:40:35,150 >> Así el soporte de N en este contexto, no dentro de una instrucción printf aquí, pero 837 00:40:35,150 --> 00:40:44,370 en esta sola línea 27, esta línea es diciendo dame N ints, cada uno de los cuales 838 00:40:44,370 --> 00:40:46,080 es de tipo int. 839 00:40:46,080 --> 00:40:49,870 Así que este es un cubo, por así decirlo, de, en este caso, tres números enteros de nuevo a 840 00:40:49,870 --> 00:40:52,770 espalda con espalda para que efectivamente tener tres variables. 841 00:40:52,770 --> 00:40:54,890 La alternativa, para ser claro, sería esta. 842 00:40:54,890 --> 00:40:57,400 >> Si yo quería del primer estudiante edad, yo podría hacer esto. 843 00:40:57,400 --> 00:40:59,520 Si yo quería que el segundo de los estudiantes edad que yo podría hacer esto. 844 00:40:59,520 --> 00:41:01,860 Si yo quería del tercer estudiante edad, yo podría hacer esto. 845 00:41:01,860 --> 00:41:04,320 Y Dios no lo quiera que necesitamos todo el mundo es edad en esta sala - 846 00:41:04,320 --> 00:41:07,670 Quiero decir, esta es una diablos de un montón de copia, pegar una y otra vez y otra vez. 847 00:41:07,670 --> 00:41:10,870 Y más de una vez puedo compilar este programa, si otro estudiante camina en más de fuera 848 00:41:10,870 --> 00:41:14,200 de esa puerta, ahora mi número de variables es incorrecta. 849 00:41:14,200 --> 00:41:17,450 >> Así que lo que es bueno acerca de un arreglo es tan pronto como usted comienza a sentirse a sí mismo 850 00:41:17,450 --> 00:41:20,190 copiar y pegar, las probabilidades son que hay no es el mejor enfoque. 851 00:41:20,190 --> 00:41:22,240 Una matriz es dinámica potencialmente. 852 00:41:22,240 --> 00:41:24,610 No sé de antemano cuántas personas van a estar en la sala, 853 00:41:24,610 --> 00:41:28,670 pero sí sé que necesito n de ellos, y voy a averiguar n cuando llegue el momento. 854 00:41:28,670 --> 00:41:35,500 Esta línea de código significa que ahora, dame un trozo de memoria que tiene este aspecto 855 00:41:35,500 --> 00:41:40,380 donde el número de cajas en la pantalla es totalmente dependiente de n que 856 00:41:40,380 --> 00:41:42,010 que el usuario escribió pulg 857 00:41:42,010 --> 00:41:44,850 >> Así que ahora el resto de este programa es En realidad es bastante similar a lo que 858 00:41:44,850 --> 00:41:46,860 acaba de hacer con los personajes. 859 00:41:46,860 --> 00:41:49,970 Note que tengo un bucle comienza en la línea 30. 860 00:41:49,970 --> 00:41:54,920 Así que justo después de obtener la matriz, que iterar de y es igual a cero en un máximo de n. 861 00:41:54,920 --> 00:41:58,890 Sólo tengo esta printf instructivo mensaje que acaba de decir, me da la edad 862 00:41:58,890 --> 00:42:03,690 de persona #% i, por lo que el número uno, número dos, número tres. 863 00:42:03,690 --> 00:42:04,730 ¿Y por qué hago esto? 864 00:42:04,730 --> 00:42:08,870 Francamente, los seres humanos prefieren contar de uno subiendo mientras que los informáticos, 865 00:42:08,870 --> 00:42:09,620 cero en adelante. 866 00:42:09,620 --> 00:42:11,700 los informáticos no van a utilizar este tipo de programas, por lo que estamos 867 00:42:11,700 --> 00:42:13,990 va a simplemente empezar a contar a la una como la gente normal. 868 00:42:13,990 --> 00:42:17,630 >> Y ahora, en la línea 33, observe el poco diferente pedazo de sintaxis. 869 00:42:17,630 --> 00:42:23,710 La edad de orden i en esa variable de tipo matriz se va a conseguir un int. 870 00:42:23,710 --> 00:42:25,770 Y ahora, por último, esto es sólo aritmética aquí abajo. 871 00:42:25,770 --> 00:42:29,200 Decidí en un bucle por separado con la reivindicación algún tiempo pasa, y ahora en esta 872 00:42:29,200 --> 00:42:31,400 bucle separado, estas líneas se ejecutan. 873 00:42:31,400 --> 00:42:35,810 >> Dentro de un año, la persona i será i años de edad, pero note que esto no es el 874 00:42:35,810 --> 00:42:36,500 i variable. 875 00:42:36,500 --> 00:42:38,390 Esto es ahora% i para int. 876 00:42:38,390 --> 00:42:43,210 Y noten como el primer marcador de posición, me enchufamos i + 1, por lo que contamos como un 877 00:42:43,210 --> 00:42:44,250 persona normal. 878 00:42:44,250 --> 00:42:49,190 Y luego por el valor de su edad, por i años de edad, me tomo las edades soporte 879 00:42:49,190 --> 00:42:52,980 i - y por qué estoy haciendo más uno aquí? 880 00:42:52,980 --> 00:42:53,760 Acaban de edades. 881 00:42:53,760 --> 00:42:55,030 Es mi estúpida elección de los programas. 882 00:42:55,030 --> 00:42:56,810 Ellos sólo un año de edad. 883 00:42:56,810 --> 00:42:59,770 Yo podría escribir cualquier número que Realmente quiero allí. 884 00:42:59,770 --> 00:43:02,430 >> Así que lo que en realidad es todo la relevancia aquí? 885 00:43:02,430 --> 00:43:07,610 Bueno, déjame en realidad retroceder aquí y pintar un cuadro 886 00:43:07,610 --> 00:43:10,830 de lo que se avecina. 887 00:43:10,830 --> 00:43:15,720 ¿Qué vamos a hacer con nuestro próximo Problemas de Two está incursionando en el 888 00:43:15,720 --> 00:43:17,070 mundo de la criptografía. 889 00:43:17,070 --> 00:43:22,500 Así que esto es una cadena de caracteres, por lo que un secuencia de múltiples caracteres, y lo que 890 00:43:22,500 --> 00:43:23,750 Qué dice esto? 891 00:43:23,750 --> 00:43:28,530 892 00:43:28,530 --> 00:43:30,600 No está en la versión en línea de las diapositivas. 893 00:43:30,600 --> 00:43:35,880 >> Así que afirmo que esto es igual a esto, un estúpido anuncio de muchos años 894 00:43:35,880 --> 00:43:39,950 hace que en realidad podría recordar uno de sus orígenes. 895 00:43:39,950 --> 00:43:42,740 Así que este es un ejemplo de cifrado o la criptografía. 896 00:43:42,740 --> 00:43:46,150 Resulta que si quieres en realidad enviar información o compartir 897 00:43:46,150 --> 00:43:49,310 información con alguien de forma segura, como un mensaje de este tipo, se puede 898 00:43:49,310 --> 00:43:50,500 revolver las letras. 899 00:43:50,500 --> 00:43:53,170 Pero por lo general, las palabras son no revueltos al azar. 900 00:43:53,170 --> 00:43:56,365 Están permutan de alguna manera o se cambian de alguna manera, por lo que - ¡Uy. 901 00:43:56,365 --> 00:43:59,040 Eso es un spoiler de la diversión para la próxima vez. 902 00:43:59,040 --> 00:44:04,390 >> Así que usted puede asignar lo que es aparentemente O a B. Tenga en cuenta que se alinea 903 00:44:04,390 --> 00:44:05,420 Capitalización del reloj. 904 00:44:05,420 --> 00:44:07,960 Aparentemente R se convierte en e. 905 00:44:07,960 --> 00:44:14,000 Aparentemente F-H-E-R se convierte en S-U-R-E. Así Resulta que hay una asignación, y en 906 00:44:14,000 --> 00:44:18,720 este caso hay una bastante estúpido mapeo si alguien se ha dado cuenta? 907 00:44:18,720 --> 00:44:21,440 Esto es algo que se llama Rot 13, Girar 13. 908 00:44:21,440 --> 00:44:24,760 Es el más estúpido de cifrado mecanismos, ya que, literalmente, sólo 909 00:44:24,760 --> 00:44:29,160 13 añade a cada una de las cartas, estúpido, en el sentido de que si sólo 910 00:44:29,160 --> 00:44:31,890 tener un poco de tiempo libre en sus manos y un lápiz, o simplemente crees que 911 00:44:31,890 --> 00:44:35,260 a través de su cabeza, usted podría intentar todas las adiciones posibles - una, dos, 912 00:44:35,260 --> 00:44:38,470 tres, punto, punto, punto, 25 a sólo girar todo el alfabeto, y 913 00:44:38,470 --> 00:44:40,860 finalmente, te enterarás lo que este mensaje es. 914 00:44:40,860 --> 00:44:43,700 Así que si usted hizo algo como esto en la escuela primaria pasando mensajes a su 915 00:44:43,700 --> 00:44:46,830 mejor amigo, si su escuela primaria maestro simplemente leer a través de la 916 00:44:46,830 --> 00:44:50,320 mensaje y bruta obligaron a la solución, es posible que haya llegado 917 00:44:50,320 --> 00:44:52,550 una respuesta para eso. 918 00:44:52,550 --> 00:44:54,970 >> Ahora, por supuesto, en el mundo real, criptografía es más sofisticado. 919 00:44:54,970 --> 00:45:00,120 Se trata de un fragmento de texto de un sistema informático que tiene los nombres de usuario y 920 00:45:00,120 --> 00:45:03,630 contraseñas, ya que casi todos los nuestros lo hacen, y esto es lo que tu contraseña puede 921 00:45:03,630 --> 00:45:07,260 verá como si se almacena en el disco conducir, pero en forma encriptada. 922 00:45:07,260 --> 00:45:11,050 Esto no es sólo una rotación de las letras, A es B y B es C. Esto es 923 00:45:11,050 --> 00:45:15,620 mucho más sofisticado, pero utiliza lo que generalmente se conoce como clave secreta 924 00:45:15,620 --> 00:45:16,690 la criptografía. 925 00:45:16,690 --> 00:45:20,210 Esta imagen dice lo siguiente historia con algunos iconos. 926 00:45:20,210 --> 00:45:22,250 >> A la izquierda, tenemos lo que vamos a llamar a texto sin formato. 927 00:45:22,250 --> 00:45:25,420 En el mundo de la criptografía, la llanura texto es sólo el mensaje original 928 00:45:25,420 --> 00:45:29,050 escrito en Inglés o Francés o cualquier otro idioma que sea. 929 00:45:29,050 --> 00:45:32,405 Si desea cifrarlo, pasaremos pictóricamente a través de un candado, de modo 930 00:45:32,405 --> 00:45:35,580 algunos de tipo de algoritmo, alguna función o programa que alguien escribió 931 00:45:35,580 --> 00:45:39,880 que mezcla las cartas con suerte más complicadamente que simplemente añadir 13 932 00:45:39,880 --> 00:45:40,980 para cada uno de ellos. 933 00:45:40,980 --> 00:45:43,780 >> Lo que se obtiene de ese proceso en el medio hay se llama texto cifrado. 934 00:45:43,780 --> 00:45:44,850 Así que tipo de una palabra sexy. 935 00:45:44,850 --> 00:45:47,630 Sólo significa que es el cifrado versión del texto sin formato. 936 00:45:47,630 --> 00:45:52,570 Y sólo si tiene el mismo secreto, 13 o menos 13, que son capaces de 937 00:45:52,570 --> 00:45:54,970 descifrar un mensaje así. 938 00:45:54,970 --> 00:45:57,770 >> Así, en Problemas de Dos, entre las cosas que va a hacer si en el Hacker 939 00:45:57,770 --> 00:46:01,860 Edition, tendrá que escribir código para descifrar estas contraseñas, averiguar 940 00:46:01,860 --> 00:46:05,170 lo que eran y cómo eran cifrada, aunque le damos un poco 941 00:46:05,170 --> 00:46:06,460 de orientación a lo largo del camino. 942 00:46:06,460 --> 00:46:09,320 En la edición estándar, se introduce un par de sistemas de cifrado, cifrado 943 00:46:09,320 --> 00:46:12,400 mecanismos, uno llamado César, uno llamado Vigenère, que todavía están 944 00:46:12,400 --> 00:46:16,100 sistemas de cifrado de rotación en la que A se convierte algo, B se convierte en algo, pero 945 00:46:16,100 --> 00:46:18,820 usted tiene que hacerlo mediante programación porque habrá hecho ser un secreto 946 00:46:18,820 --> 00:46:22,840 clave involucrados, que es típicamente un número o una palabra clave que sólo el 947 00:46:22,840 --> 00:46:26,420 remitente y el destinatario de estos mensajes deben entender. 948 00:46:26,420 --> 00:46:28,660 >> Ahora bien, esta realidad tiene encarnaciones en el mundo real. 949 00:46:28,660 --> 00:46:32,910 Esto, por ejemplo, es pequeño huérfano Annie secreto anillo decodificador, y usted 950 00:46:32,910 --> 00:46:35,180 en realidad puede aplicar estos cifras de rotación - 951 00:46:35,180 --> 00:46:37,930 A se convierte en algo, se convierte en B algo - con un par de ruedas, 952 00:46:37,930 --> 00:46:40,840 una en el exterior, uno en el interior de manera que si se gira la rueda o 953 00:46:40,840 --> 00:46:44,170 el anillo, en realidad se puede alinear el letras con diferentes letras, 954 00:46:44,170 --> 00:46:45,430 conseguir un código secreto. 955 00:46:45,430 --> 00:46:48,110 Y así como el drama de suspenso para hoy, lo que pensé que haría un poco de 956 00:46:48,110 --> 00:46:52,170 retroceso que si se enciende la TV el 24 de diciembre, se puede ver el 957 00:46:52,170 --> 00:46:55,390 película hasta la saciedad para 24 horas en una fila. 958 00:46:55,390 --> 00:47:06,030 Pero por hoy, lo abriré aquí y nos dan sólo dos minutos de un 959 00:47:06,030 --> 00:47:13,493 Historia pedagógicamente relevante Navidad con un poco de tipo llamado Ralphie. 960 00:47:13,493 --> 00:47:14,400 >> [REPRODUCCIÓN DE VÍDEO] 961 00:47:14,400 --> 00:47:17,420 >> -Sea notorio a todo el mundo que Ralph Parker Se nombra al 962 00:47:17,420 --> 00:47:20,650 miembro de la secreta Little Orphan Annie círculo y tiene derecho a toda 963 00:47:20,650 --> 00:47:23,460 los honores y beneficios que ocurren al mismo. 964 00:47:23,460 --> 00:47:25,990 >> -Firmado, Little Orphan Annie. 965 00:47:25,990 --> 00:47:30,100 Refrendado, Pierre Andre en tinta. 966 00:47:30,100 --> 00:47:34,270 Honores y se benefician ya a la edad de nueve años. 967 00:47:34,270 --> 00:47:39,440 >> [GRITA EN RADIO] 968 00:47:39,440 --> 00:47:40,770 >> Vamos, vamos a seguir adelante con ella. 969 00:47:40,770 --> 00:47:44,965 Yo no necesito todo ese jazz sobre contrabandistas y piratas. 970 00:47:44,965 --> 00:47:48,270 >> -Escuche mañana por la noche para la concluyendo aventura del negro 971 00:47:48,270 --> 00:47:49,650 barco pirata. 972 00:47:49,650 --> 00:47:53,320 Ahora, es el momento para Secret de Annie Mensaje para ustedes, miembros 973 00:47:53,320 --> 00:47:55,720 del círculo secreto. 974 00:47:55,720 --> 00:47:56,580 Recuerde, los niños. 975 00:47:56,580 --> 00:48:01,720 Sólo los miembros de Annie Secret Circle puede decodificar el mensaje secreto de Annie. 976 00:48:01,720 --> 00:48:05,872 Recuerde, Annie depende de ti. 977 00:48:05,872 --> 00:48:08,670 Establezca sus alfileres para B2. 978 00:48:08,670 --> 00:48:11,000 Aquí está el mensaje. 979 00:48:11,000 --> 00:48:12,335 12, 11, 2 - 980 00:48:12,335 --> 00:48:14,670 >> -Estoy en mi primera reunión secreta. 981 00:48:14,670 --> 00:48:19,720 >> -25, 14, 11, 18, 16 - 982 00:48:19,720 --> 00:48:21,650 >> -Pierre estaba en gran voz esta noche. 983 00:48:21,650 --> 00:48:24,830 Me di cuenta el mensaje de que esta noche que era realmente importante. 984 00:48:24,830 --> 00:48:26,400 >> -3, 25. 985 00:48:26,400 --> 00:48:28,540 Ese es un mensaje de Annie sí misma. 986 00:48:28,540 --> 00:48:30,086 Recuerde, no se lo digas a nadie. 987 00:48:30,086 --> 00:48:34,370 988 00:48:34,370 --> 00:48:38,710 >> -90 Segundos más tarde, estoy en la única habitación en la casa donde un niño de nueve años 989 00:48:38,710 --> 00:48:42,668 podía sentarse en privacidad y decodificación. 990 00:48:42,668 --> 00:48:47,628 Aha, B. me fui a la siguiente. 991 00:48:47,628 --> 00:48:53,060 E. La primera palabra es "ser". S. Venía más fácil ahora. 992 00:48:53,060 --> 00:48:54,980 U. 25. 993 00:48:54,980 --> 00:48:55,940 Eso es R. 994 00:48:55,940 --> 00:48:56,900 >> -Vamos, Ralphie. 995 00:48:56,900 --> 00:48:57,860 Me tengo que ir. 996 00:48:57,860 --> 00:48:59,780 >> -Voy a estar justo abajo, Ma. 997 00:48:59,780 --> 00:49:01,030 Whiz Gee. 998 00:49:01,030 --> 00:49:04,300 999 00:49:04,300 --> 00:49:08,220 >> -T. O. Asegúrese de. 1000 00:49:08,220 --> 00:49:09,500 Asegúrese de que? 1001 00:49:09,500 --> 00:49:11,660 ¿Cuál era la huerfanita Annie tratando de decir? 1002 00:49:11,660 --> 00:49:12,844 Asegúrese de que? 1003 00:49:12,844 --> 00:49:14,732 >> -Ralphie, Randy tiene que ir. 1004 00:49:14,732 --> 00:49:16,148 Haga el favor de salir? 1005 00:49:16,148 --> 00:49:17,092 >> -Está bien, mamá. 1006 00:49:17,092 --> 00:49:18,510 Saldré derecha. 1007 00:49:18,510 --> 00:49:20,270 >> -Yo estaba más cerca ahora. 1008 00:49:20,270 --> 00:49:21,823 La tensión era terrible. 1009 00:49:21,823 --> 00:49:23,045 ¿Qué fue? 1010 00:49:23,045 --> 00:49:26,510 El destino del planeta puede pender de un hilo. 1011 00:49:26,510 --> 00:49:28,985 >> -Ralphie, tengo de Randy van. 1012 00:49:28,985 --> 00:49:32,680 >> -Voy a estar a derecho por el amor de Dios. 1013 00:49:32,680 --> 00:49:33,956 >> -Ya casi. 1014 00:49:33,956 --> 00:49:35,140 Mis dedos volaban. 1015 00:49:35,140 --> 00:49:36,880 Mi mente estaba en una trampa de acero. 1016 00:49:36,880 --> 00:49:38,010 Cada poro vibró. 1017 00:49:38,010 --> 00:49:39,878 Era casi transparente. 1018 00:49:39,878 --> 00:49:43,210 Sí, sí, sí, sí, sí. 1019 00:49:43,210 --> 00:49:49,030 >> -Asegúrese de beber su Ovaltine. 1020 00:49:49,030 --> 00:49:50,280 Ovaltine? 1021 00:49:50,280 --> 00:49:53,980 1022 00:49:53,980 --> 00:49:55,230 Un comercial de mala muerte? 1023 00:49:55,230 --> 00:49:58,572 1024 00:49:58,572 --> 00:50:00,694 Hijo de puta. 1025 00:50:00,694 --> 00:50:01,900 >> [VIDEO PLAYBACK FIN] 1026 00:50:01,900 --> 00:50:04,260 >> ALTAVOZ 1: Este es CS50, y que será de problemas Two. 1027 00:50:04,260 --> 00:50:06,305 Nos vemos la semana que viene. 1028 00:50:06,305 --> 00:50:08,800 >> ALTAVOZ 2: En la siguiente CS50, esto sucede. 1029 00:50:08,800 --> 00:50:11,060 >> ALTAVOZ 1: Así que un tema que no tenemos mirado hasta ahora es 1030 00:50:11,060 --> 00:50:12,220 la de los punteros de función. 1031 00:50:12,220 --> 00:50:14,540 Ahora, un puntero de función es sólo la dirección de un público 1032 00:50:14,540 --> 00:50:17,000 función, pero al igual que - 1033 00:50:17,000 --> 00:50:18,250 hijo de un - 1034 00:50:18,250 --> 00:50:19,670