1 00:00:00,000 --> 00:00:00,980 2 00:00:00,980 --> 00:00:04,410 >> [REPRODUCCIÓN DE MÚSICA] 3 00:00:04,410 --> 00:00:11,147 4 00:00:11,147 --> 00:00:12,230 DAVID J. MALAN: Muy bien. 5 00:00:12,230 --> 00:00:16,440 Esto es CS50, y esto es el final de la Semana 2. 6 00:00:16,440 --> 00:00:18,480 Así que hoy, vamos para continuar nuestra mirada 7 00:00:18,480 --> 00:00:21,150 la forma en que representamos las cosas debajo de la hood-- alejándose 8 00:00:21,150 --> 00:00:23,520 de números como números enteros y valores de punto flotante 9 00:00:23,520 --> 00:00:26,810 y se centra en las cadenas y programas en última instancia, más interesantes. 10 00:00:26,810 --> 00:00:30,140 Pero también vamos a echar un vistazo a un par de problemas-- de dominio específico 11 00:00:30,140 --> 00:00:33,620 la primera de las cuales será ser la participación de la criptografía, 12 00:00:33,620 --> 00:00:36,570 el arte de la codificación de la información, en el que se ve por encima de aquí 13 00:00:36,570 --> 00:00:41,480 es un cuadro de Radio Orphan Annie anillo decodificador secreto de antaño. 14 00:00:41,480 --> 00:00:46,490 >> Esto es en realidad forma muy primitiva y la forma de cryptopgraphy para niños 15 00:00:46,490 --> 00:00:50,590 por lo que este anillo tiene dos disks-- uno dentro y otro fuera. 16 00:00:50,590 --> 00:00:54,740 Y girando uno de esos, usted puede esencialmente ordenar las letras como la A 17 00:00:54,740 --> 00:00:59,520 A a la Z con otras letras como B a través de A. En otras palabras, 18 00:00:59,520 --> 00:01:03,730 puede girar literalmente el alfabeto, procedente de ese modo con un mapeo desde 19 00:01:03,730 --> 00:01:07,820 cartas a las cartas de modo que, si usted querido enviar un mensaje secreto 20 00:01:07,820 --> 00:01:11,820 para alguien como Annie, podría escribir por su mensaje y luego gire 21 00:01:11,820 --> 00:01:15,370 las letras, por lo que, si usted se refiere a decir "A", que en lugar de decir "B" 22 00:01:15,370 --> 00:01:17,280 Quiere decir "B" que en lugar de decir "C" - 23 00:01:17,280 --> 00:01:20,240 o algo un poco más inteligente que eso-- y, a continuación, en última instancia, 24 00:01:20,240 --> 00:01:24,630 siempre y cuando Annie tiene este decodificador anillo, se puede descodificar el mensaje. 25 00:01:24,630 --> 00:01:28,540 Ahora, usted puede recordar, en efecto, que este se utilizó en una película muy famosa que 26 00:01:28,540 --> 00:01:31,140 juega hasta la saciedad durante la temporada de Navidad. 27 00:01:31,140 --> 00:01:32,650 Vamos a echar un vistazo aquí. 28 00:01:32,650 --> 00:01:35,294 29 00:01:35,294 --> 00:01:37,210 Ralphie PARKER: "Ya se trate de conocido por todos que en resumen 30 00:01:37,210 --> 00:01:41,000 que Ralph Parker Se nombra es miembro de Little Orphan Annie Secret 31 00:01:41,000 --> 00:01:44,860 Círculo y tiene derecho a toda la honores y beneficios que ocurren a la misma ". 32 00:01:44,860 --> 00:01:47,410 >> Ralphie PARKER (narrar): Firmado Little Orphan Annie. 33 00:01:47,410 --> 00:01:50,070 Refrendado, Pierre Andre! 34 00:01:50,070 --> 00:01:51,490 En tinta. 35 00:01:51,490 --> 00:01:55,494 Honores y beneficios, Ya a la edad de nueve años. 36 00:01:55,494 --> 00:01:57,402 >> [REPRODUCCIÓN DE MÚSICA] 37 00:01:57,402 --> 00:02:00,470 >> [CHATTER RADIO] 38 00:02:00,470 --> 00:02:01,470 Ralphie PARKER: Vamos. 39 00:02:01,470 --> 00:02:02,344 Vamos a seguir adelante con ella. 40 00:02:02,344 --> 00:02:06,029 Yo no necesito todo ese jazz acerca de contrabandistas y piratas. 41 00:02:06,029 --> 00:02:08,820 RADIO LOCUTOR: Escuche mañana noche para la aventura final 42 00:02:08,820 --> 00:02:11,060 de El Negro del barco pirata. 43 00:02:11,060 --> 00:02:14,740 Ahora, es el momento de Annie Mensaje secreto para ustedes miembros 44 00:02:14,740 --> 00:02:17,110 del Círculo Secreto. 45 00:02:17,110 --> 00:02:20,700 Recuerde los niños, los únicos miembros de Annie Secret Circle 46 00:02:20,700 --> 00:02:23,270 puede decodificar el mensaje secreto de Annie. 47 00:02:23,270 --> 00:02:27,270 >> Recuerde, Annie depende de ti. 48 00:02:27,270 --> 00:02:30,060 Establezca sus alfileres para B-2. 49 00:02:30,060 --> 00:02:34,004 Aquí está la mensaje-- 12, 11, 2-- 50 00:02:34,004 --> 00:02:36,503 Ralphie PARKER (narrar): I estoy en mi primera reunión secreta. 51 00:02:36,503 --> 00:02:40,041 RADIO LOCUTOR: -25, 14, 11, 18, 16-- 52 00:02:40,041 --> 00:02:42,790 Ralphie PARKER (narrar): Oh, Pierre estaba en gran voz esta noche. 53 00:02:42,790 --> 00:02:46,110 Me di cuenta de que esta noche mensaje era realmente importante. 54 00:02:46,110 --> 00:02:47,930 >> RADIO LOCUTOR: --3, 25. 55 00:02:47,930 --> 00:02:49,940 Ese es un mensaje de Annie sí misma. 56 00:02:49,940 --> 00:02:52,182 Recuerde, no se lo digas a nadie. 57 00:02:52,182 --> 00:02:55,077 >> [JADEO] 58 00:02:55,077 --> 00:02:57,285 Ralphie PARKER (narrar): Noventa segundos después, estoy 59 00:02:57,285 --> 00:03:00,090 en la única habitación de la casa donde un niño de nueve años 60 00:03:00,090 --> 00:03:04,380 podía sentarse en privacidad y decodificación. 61 00:03:04,380 --> 00:03:04,990 Ah. 62 00:03:04,990 --> 00:03:05,680 "B." 63 00:03:05,680 --> 00:03:06,524 >> [Se ríe] 64 00:03:06,524 --> 00:03:08,684 >> Ralphie PARKER (narrar): Fui a la siguiente. 65 00:03:08,684 --> 00:03:09,610 "E." 66 00:03:09,610 --> 00:03:11,641 La primera palabra es "ser." 67 00:03:11,641 --> 00:03:12,140 ¡Sí! 68 00:03:12,140 --> 00:03:14,293 Venía más fácil ahora. 69 00:03:14,293 --> 00:03:15,259 "U." 70 00:03:15,259 --> 00:03:16,225 >> [Se ríe] 71 00:03:16,225 --> 00:03:18,157 >> RANDY PARKER: Aw, vamos, Ralphie. 72 00:03:18,157 --> 00:03:19,606 Me tengo que ir! 73 00:03:19,606 --> 00:03:21,538 >> Ralphie PARKER: Estaré abajo, Ma. 74 00:03:21,538 --> 00:03:22,504 Whiz Gee. 75 00:03:22,504 --> 00:03:25,402 76 00:03:25,402 --> 00:03:31,220 "T." "O." "Asegúrese a "." Asegúrese de "¿qué? 77 00:03:31,220 --> 00:03:33,981 ¿Cuál fue la pequeña huérfana Annie tratando de decir? "Asegúrese de" ¿qué? 78 00:03:33,981 --> 00:03:35,522 MADRE: Ralphie, Randy tiene que ir. 79 00:03:35,522 --> 00:03:36,735 Haga el favor de salir? 80 00:03:36,735 --> 00:03:38,190 >> Ralphie PARKER: Bueno, mamá! 81 00:03:38,190 --> 00:03:39,787 Estaré fuera cierto! 82 00:03:39,787 --> 00:03:41,995 Ralphie PARKER (narrar): Yo estaba más cerca ahora. 83 00:03:41,995 --> 00:03:43,370 La tensión era terrible. 84 00:03:43,370 --> 00:03:44,794 ¿Qué era? 85 00:03:44,794 --> 00:03:47,656 El destino del planeta puede pender de un hilo. 86 00:03:47,656 --> 00:03:50,518 >> MADRE: Ralphie, Randy tiene que ir! 87 00:03:50,518 --> 00:03:53,635 >> Ralphie PARKER: ¡Vuelvo a cabo, por el amor de Dios! 88 00:03:53,635 --> 00:03:55,343 Ralphie PARKER (NARRANDO): Casi allí! 89 00:03:55,343 --> 00:03:56,520 Mis dedos volaron! 90 00:03:56,520 --> 00:03:58,500 Mi mente era una trampa de acero. 91 00:03:58,500 --> 00:03:59,850 Cada poro vibró. 92 00:03:59,850 --> 00:04:01,806 Era casi claro! 93 00:04:01,806 --> 00:04:02,773 ¡Sí! 94 00:04:02,773 --> 00:04:03,273 ¡Sí! 95 00:04:03,273 --> 00:04:03,773 ¡Sí! 96 00:04:03,773 --> 00:04:04,740 ¡Sí! 97 00:04:04,740 --> 00:04:10,250 >> Ralphie PARKER: "Asegúrese beber su Ovaltine ". 98 00:04:10,250 --> 00:04:10,750 Ovaltine? 99 00:04:10,750 --> 00:04:14,864 100 00:04:14,864 --> 00:04:17,539 Un comercial de mala muerte? 101 00:04:17,539 --> 00:04:19,439 >> [REPRODUCCIÓN DE MÚSICA] 102 00:04:19,439 --> 00:04:21,724 >> Ralphie PARKER: Hijo de puta. 103 00:04:21,724 --> 00:04:23,460 >> [Risas] 104 00:04:23,460 --> 00:04:27,070 >> DAVID J. MALAN: Así que a continuación es un vistazo a lo que la criptografía 105 00:04:27,070 --> 00:04:29,880 puede ser para un esto-- beber de antaño. 106 00:04:29,880 --> 00:04:30,900 Así que un anuncio rápido. 107 00:04:30,900 --> 00:04:33,410 Si usted es libre de esta Viernes a las 1:15 pm y lo haría 108 00:04:33,410 --> 00:04:36,610 gustaría unirse a nosotros para CS50 el almuerzo, la cabeza a esta URL aquí. 109 00:04:36,610 --> 00:04:38,080 En primer llegado, primer, como de costumbre. 110 00:04:38,080 --> 00:04:41,840 Pero con el tiempo, nos aseguraremos de que más todos los que quieran participar 111 00:04:41,840 --> 00:04:43,640 puede programar-sabio. 112 00:04:43,640 --> 00:04:45,170 >> Así cuerdas. 113 00:04:45,170 --> 00:04:47,940 Tenemos Zamyla-- quien ahora has conocido más probable 114 00:04:47,940 --> 00:04:50,750 en Boletín de problemas 1-- cuya nombre se escribe así. 115 00:04:50,750 --> 00:04:53,570 Y suponga que ha escrito su nombre en un programa informático que está 116 00:04:53,570 --> 00:04:55,710 usando algo como getString. 117 00:04:55,710 --> 00:04:57,890 Con el fin de recuperar los golpes de teclado, cómo 118 00:04:57,890 --> 00:05:01,620 vamos sobre lo que representa un cadena, una palabra, un párrafo, 119 00:05:01,620 --> 00:05:03,960 o varias letras como estas aquí? 120 00:05:03,960 --> 00:05:06,790 >> Hablamos acerca de la última vez enteros y problemas 121 00:05:06,790 --> 00:05:09,960 que surgen con desbordamiento de enteros y valores de punto flotante 122 00:05:09,960 --> 00:05:12,190 y los problemas que surgir dentro de la precisión. 123 00:05:12,190 --> 00:05:16,080 Con cuerdas, por lo menos tener un poco más de flexibilidad 124 00:05:16,080 --> 00:05:17,970 porque sólo strings-- en lo real mundo-- 125 00:05:17,970 --> 00:05:19,790 puede ser una longitud bastante arbitrario. 126 00:05:19,790 --> 00:05:21,055 Bastante corto, bastante largo. 127 00:05:21,055 --> 00:05:23,680 Pero incluso entonces, vamos a encontrar que las computadoras a veces puede 128 00:05:23,680 --> 00:05:27,200 quedarse sin memoria y ni siquiera almacenar una cadena lo suficientemente grande. 129 00:05:27,200 --> 00:05:30,840 >> Pero por ahora, vamos a empezar a visualizar una cadena como algo en estas cajas 130 00:05:30,840 --> 00:05:31,340 Aquí. 131 00:05:31,340 --> 00:05:36,410 Así que seis de tales cajas, cada una de las cuales representa un personaje o "char". 132 00:05:36,410 --> 00:05:40,646 Así que recuerda que "char" - c-h-a-r-- es uno de los tipos de datos incorporados en C. 133 00:05:40,646 --> 00:05:43,520 Y lo que es interesante es que se puede utilizar ese tipo de como un bloque de construcción, 134 00:05:43,520 --> 00:05:47,880 una pieza del rompecabezas, si se quiere, para formar un mayor tipo de datos que vamos a seguir 135 00:05:47,880 --> 00:05:49,410 para llamar a una "cadena". 136 00:05:49,410 --> 00:05:53,650 >> Ahora, lo que es útil sobre el pensamiento acerca de cosas como cuerdas de esta manera? 137 00:05:53,650 --> 00:05:57,720 Bueno, resulta que podemos realmente aprovechar esta estructura 138 00:05:57,720 --> 00:06:01,420 Para acceder realmente a caracteres individuales de una manera bastante sencilla. 139 00:06:01,420 --> 00:06:04,099 Voy a seguir adelante y crear un archivo llamado "stringzero.c," 140 00:06:04,099 --> 00:06:05,765 pero se le puede llamar lo que usted desea. 141 00:06:05,765 --> 00:06:08,500 Y en la página web del curso es ya este ejemplo de antemano, 142 00:06:08,500 --> 00:06:10,430 por lo que no es necesario escribir todo. 143 00:06:10,430 --> 00:06:13,820 >> Y voy a seguir adelante y primero hacer void main int. 144 00:06:13,820 --> 00:06:15,980 Y a los pocos días, vamos a empezar a desmenuzar 145 00:06:15,980 --> 00:06:19,070 lo vacío es aquí, por qué es int junto al principal, y así sucesivamente. 146 00:06:19,070 --> 00:06:21,180 Pero por ahora, vamos a continuar copiar pegar eso. 147 00:06:21,180 --> 00:06:23,455 >> Voy a declarar una cadena denominada s. 148 00:06:23,455 --> 00:06:26,920 Y voy a volver de GetString cualquier el usuario teclea. 149 00:06:26,920 --> 00:06:29,170 Esto va a ser un simple programa, no hay instrucciones, 150 00:06:29,170 --> 00:06:31,336 Yo sólo voy a ciegas esperar que el usuario conoce 151 00:06:31,336 --> 00:06:32,600 qué hacer para que sea sencillo. 152 00:06:32,600 --> 00:06:34,220 >> Y ahora voy a tener un bucle. 153 00:06:34,220 --> 00:06:37,450 Y dentro de mi bucle estoy va a tener int i en cero. 154 00:06:37,450 --> 00:06:40,660 Y i es, de nuevo, sólo una convención, una variable de índice para el recuento, 155 00:06:40,660 --> 00:06:42,350 pero yo podría llamar a esto lo que yo quiera. 156 00:06:42,350 --> 00:06:46,275 Yo voy a hacer i es inferior a: así El nombre de Zamyla es de seis letras. 157 00:06:46,275 --> 00:06:48,150 Así que voy a duro código que hay por ahora. 158 00:06:48,150 --> 00:06:49,730 >> Y luego i ++. 159 00:06:49,730 --> 00:06:53,190 Y ahora en el interior de éstos rizado llaves voy a hacer printf, 160 00:06:53,190 --> 00:06:55,460 y quiero imprimir una carácter a la vez. 161 00:06:55,460 --> 00:06:58,227 Así que voy a usar% c para Quizá por primera vez. 162 00:06:58,227 --> 00:07:00,560 Y luego quiero imprimir cada personaje en su propia línea. 163 00:07:00,560 --> 00:07:02,550 Así que me voy a poner un pequeña barra invertida n allí. 164 00:07:02,550 --> 00:07:03,640 Cerrar cotización. 165 00:07:03,640 --> 00:07:06,250 >> Y ahora quiero hacer algo aquí. 166 00:07:06,250 --> 00:07:10,610 Quiero imprimir el letra específica en la cadena, 167 00:07:10,610 --> 00:07:13,670 s, ya que estoy iteración de cero en un máximo de seis. 168 00:07:13,670 --> 00:07:17,150 En otras palabras, quiero imprimir el carácter i-ésimo de s. 169 00:07:17,150 --> 00:07:18,420 Ahora, ¿cómo puedo hacer esto? 170 00:07:18,420 --> 00:07:21,550 >> Pues al igual que las cajas en esta representación aquí, 171 00:07:21,550 --> 00:07:25,560 clase de, evocar la noción de boxeo letras, se puede hacer de manera similar que 172 00:07:25,560 --> 00:07:32,630 sintácticamente en C simplemente especificando, Quiero imprimir s del i-ésimo carácter. 173 00:07:32,630 --> 00:07:35,640 El uso de los corchetes en el teclado de su computadora 174 00:07:35,640 --> 00:07:38,910 que en un teclado de Estados Unidos son generalmente por encima de la tecla de retorno. 175 00:07:38,910 --> 00:07:42,630 >> Así que esto no es del todo correcto sin embargo, como te habrás dado cuenta. 176 00:07:42,630 --> 00:07:44,780 Pero yo voy a clase de forjar a ciegas aquí. 177 00:07:44,780 --> 00:07:47,020 Y yo voy a hacer que la cadena 0. 178 00:07:47,020 --> 00:07:50,860 Pero antes de hacer esto, vamos a ver si nos no pueden anticipar algunos errores comunes. 179 00:07:50,860 --> 00:07:52,844 ¿Esto va a compilar? 180 00:07:52,844 --> 00:07:54,510 No, me estoy perdiendo un montón de cosas. 181 00:07:54,510 --> 00:07:55,280 Bibliotecas oí. 182 00:07:55,280 --> 00:07:58,480 >> Así que archivos de cabecera podría yo desear agregar aquí? 183 00:07:58,480 --> 00:07:59,205 Sí. 184 00:07:59,205 --> 00:08:01,580 >> AUDIENCIA: Es necesario E / S estándar [inaudible] 185 00:08:01,580 --> 00:08:02,663 >> DAVID J. MALAN: Excelente. 186 00:08:02,663 --> 00:08:06,060 Así que necesito E / S estándar. Para qué propósito hacer Quiero estándar de E / S? 187 00:08:06,060 --> 00:08:06,670 Para printf. 188 00:08:06,670 --> 00:08:09,220 Así incluir stdio.h. 189 00:08:09,220 --> 00:08:13,490 Y también se propone que incluyo la biblioteca CS50 por qué razón? 190 00:08:13,490 --> 00:08:14,650 Para tener cuerdas. 191 00:08:14,650 --> 00:08:17,780 Así que ya veremos lo que La biblioteca del CS50 está haciendo 192 00:08:17,780 --> 00:08:19,260 para crear esta noción de una cadena. 193 00:08:19,260 --> 00:08:21,930 Pero por ahora, sólo puede pensar en él como un tipo de datos real. 194 00:08:21,930 --> 00:08:23,596 >> Así que parece ser un poco de limpiado. 195 00:08:23,596 --> 00:08:27,060 Y ahora voy a seguir adelante y, de hecho hacer hacer cadena de 0. 196 00:08:27,060 --> 00:08:27,700 Compilado. 197 00:08:27,700 --> 00:08:28,370 Así que eso es bueno. 198 00:08:28,370 --> 00:08:32,799 Así ./string0 dejarme el zoom de forma que podamos ver más de cerca lo que está pasando. 199 00:08:32,799 --> 00:08:33,850 Intro. 200 00:08:33,850 --> 00:08:37,789 Z-A-M-Y-L-A entrar. 201 00:08:37,789 --> 00:08:39,440 Y hemos impreso a nombre de Zamyla. 202 00:08:39,440 --> 00:08:40,409 >> Así que eso es bastante bueno. 203 00:08:40,409 --> 00:08:43,220 Así que ahora vamos a seguir adelante y ejecutar este programa de nuevo, 204 00:08:43,220 --> 00:08:45,659 y escriba el nombre completo del cabo Daven. 205 00:08:45,659 --> 00:08:46,450 Sorpresa, sorpresa. 206 00:08:46,450 --> 00:08:48,021 Intro. 207 00:08:48,021 --> 00:08:48,520 Hmm. 208 00:08:48,520 --> 00:08:51,750 No hemos impreso Daven de Nombre completo correctamente. 209 00:08:51,750 --> 00:08:54,250 Ahora bien, esto debería ser obvio en Retrospect debido a lo que, 210 00:08:54,250 --> 00:08:57,010 clase de, decisión de diseño estúpido? 211 00:08:57,010 --> 00:08:59,590 >> Sí, yo no modificable la seis interior de mi bucle. 212 00:08:59,590 --> 00:09:01,610 Ahora que lo hice sólo porque Sabía el nombre de Zamyla 213 00:09:01,610 --> 00:09:02,776 que iba a ser de seis letras. 214 00:09:02,776 --> 00:09:04,720 Pero seguramente esto no es una solución general. 215 00:09:04,720 --> 00:09:07,720 Así que resulta que podemos dinámicamente averiguar la longitud de una cadena 216 00:09:07,720 --> 00:09:10,440 llamando a una función llamada strlen. 217 00:09:10,440 --> 00:09:12,840 >> Una vez más, deliberadamente sucintamente llamado simplemente 218 00:09:12,840 --> 00:09:14,450 para que sea más cómodo para escribir. 219 00:09:14,450 --> 00:09:17,170 Pero eso es sinónimo de obtener la longitud de una cadena. 220 00:09:17,170 --> 00:09:23,190 Voy a volver a mi terminal ventana y volver a ejecutar el compilador. 221 00:09:23,190 --> 00:09:24,170 Pero ha gritarme. 222 00:09:24,170 --> 00:09:29,130 Implícitamente se declara la función de biblioteca strlen con tipo unsigned int const-- 223 00:09:29,130 --> 00:09:29,780 Estoy perdido. 224 00:09:29,780 --> 00:09:30,590 Completamente. 225 00:09:30,590 --> 00:09:32,940 >> Así, especialmente como su ojos comienzan a vidriosos 226 00:09:32,940 --> 00:09:36,000 con mensajes de error como este, el enfoque Sinceramente, en las primeras palabras. 227 00:09:36,000 --> 00:09:38,590 Sabemos que el problema está en línea 8, tal como se indica aquí. 228 00:09:38,590 --> 00:09:40,500 Y es en la cadena de 0.c. 229 00:09:40,500 --> 00:09:43,580 Implícitamente declarar función de biblioteca strlen. 230 00:09:43,580 --> 00:09:47,000 Así que en general se va a ser un patrón de mensajes de error. 231 00:09:47,000 --> 00:09:49,190 Implícitamente declarar algo. 232 00:09:49,190 --> 00:09:53,250 >> Así que en resumen, ¿qué tengo yo parecía han hecho con respecto a la línea 8, aquí. 233 00:09:53,250 --> 00:09:56,880 ¿Cuál podría ser la solución sea aún si usted nunca ha usado strlen a ti mismo? 234 00:09:56,880 --> 00:09:58,907 >> AUDIENCIA: Parte de una biblioteca diferente? 235 00:09:58,907 --> 00:10:00,740 DAVID J. MALAN: Parte de una biblioteca diferente. 236 00:10:00,740 --> 00:10:02,400 Así se declara, por así decirlo. 237 00:10:02,400 --> 00:10:07,510 Se menciona en algún archivo aparte de stdio.h y CS50.h. 238 00:10:07,510 --> 00:10:09,179 Ahora, ¿dónde se define? 239 00:10:09,179 --> 00:10:12,220 Para ser honesto, que o bien tiene que apenas saber esto de la parte superior de su cabeza, 240 00:10:12,220 --> 00:10:13,640 o busca en Google esto y lo averigüe. 241 00:10:13,640 --> 00:10:18,150 O que esto, que he abierto en el CS50 Appliance el programa de terminal, que 242 00:10:18,150 --> 00:10:22,200 es sólo la versión grande de pantalla completa de lo que hay en la parte inferior de la ventana de gedit. 243 00:10:22,200 --> 00:10:24,970 >> Y resulta que hay una comando similar sucinta, llamado 244 00:10:24,970 --> 00:10:29,280 hombre de manual, en la que si se escribe en el nombre de una función y pulse Enter, 245 00:10:29,280 --> 00:10:32,240 que pondremos bastante documentación arcano. 246 00:10:32,240 --> 00:10:35,299 Es sólo que el texto general se ve un poco de algo como esto. 247 00:10:35,299 --> 00:10:37,090 Es un poco abrumador a primera vista. 248 00:10:37,090 --> 00:10:39,048 Pero, francamente, me voy a dejar que mis ojos se ponen vidriosos 249 00:10:39,048 --> 00:10:41,930 y sólo se centran en la parte Me preocupo por el momento. 250 00:10:41,930 --> 00:10:42,780 >> ¿Qué es esto. 251 00:10:42,780 --> 00:10:45,470 ¿Qué se ve estructuralmente como algo que estoy familiarizado. 252 00:10:45,470 --> 00:10:48,080 De hecho, la página de manual, por lo que a hablar, le dirá 253 00:10:48,080 --> 00:10:51,590 en lo que encabezado presentar una función como strlen se define. 254 00:10:51,590 --> 00:10:54,170 Así que me voy a volver ahora a gedit. 255 00:10:54,170 --> 00:10:59,070 Y yo voy a seguir adelante y añadir aquí #include 256 00:10:59,070 --> 00:11:00,480 y guarde el archivo. 257 00:11:00,480 --> 00:11:04,300 >> Voy a limpiar la pantalla con Control de L Si usted ha estado preguntando. 258 00:11:04,300 --> 00:11:08,210 Y yo voy a hacer volver a ejecutar string.0, compila este momento. 259 00:11:08,210 --> 00:11:11,790 ./string.0 Zamyla. 260 00:11:11,790 --> 00:11:15,020 Eso pareció funcionar Déjame ir adelante y volver a ejecutarlo con Davenport. 261 00:11:15,020 --> 00:11:15,860 Intro. 262 00:11:15,860 --> 00:11:17,730 Y eso, también, parecía funcionar. 263 00:11:17,730 --> 00:11:21,220 >> Así podemos hacer un poco mejor que esto, sin embargo, podemos empezar a cosas ordenadas 264 00:11:21,220 --> 00:11:23,257 hasta sólo un poco. 265 00:11:23,257 --> 00:11:25,590 Y yo voy a realidad introducir otra cosa ahora. 266 00:11:25,590 --> 00:11:28,930 Voy a seguir adelante y guardar esto en un archivo diferente. 267 00:11:28,930 --> 00:11:31,770 Y yo voy a llamar este archivo string1.c sólo 268 00:11:31,770 --> 00:11:34,620 para ser coherente con el código podrás encontrar en línea. 269 00:11:34,620 --> 00:11:37,050 >> Y vamos a concentrarnos en el exactamente el mismo código. 270 00:11:37,050 --> 00:11:39,000 Resulta que tengo sido una especie de toma de 271 00:11:39,000 --> 00:11:42,600 por sentado el hecho de que mi portátil, y, a su vez, el aparato CS50 272 00:11:42,600 --> 00:11:47,450 tiene una gran cantidad de memoria, una gran cantidad de RAM, una gran cantidad de bytes de espacio 273 00:11:47,450 --> 00:11:48,920 en la que puedo almacenar cadenas. 274 00:11:48,920 --> 00:11:53,560 >> Pero la realidad si me escribió largo suficientes y bastantes golpes de teclado, 275 00:11:53,560 --> 00:11:56,170 Pude en tipo teoría en más caracteres 276 00:11:56,170 --> 00:11:58,830 de mi equipo tiene memoria para físicamente. 277 00:11:58,830 --> 00:11:59,830 Y esto es problemático. 278 00:11:59,830 --> 00:12:03,050 Al igual que un int sólo puede contar tan alto, en teoría, 279 00:12:03,050 --> 00:12:06,600 sólo se puede meter tantos personajes en la memoria RAM del ordenador o al azar 280 00:12:06,600 --> 00:12:07,920 Memoria de Acceso. 281 00:12:07,920 --> 00:12:11,140 >> Así que mejor que había anticipar este problema, incluso 282 00:12:11,140 --> 00:12:13,660 aunque podría ser una rara caso de la esquina, por así decirlo. 283 00:12:13,660 --> 00:12:15,670 No sucede muy a menudo, podría suceder. 284 00:12:15,670 --> 00:12:18,815 Y si sucede y no lo hago anticipar y programa para ello, 285 00:12:18,815 --> 00:12:20,300 mi programa podía hacer quién sabe qué. 286 00:12:20,300 --> 00:12:22,220 Congelar, cuelgue, reinicio, lo que sea. 287 00:12:22,220 --> 00:12:24,490 Algo anticipado que podría suceder. 288 00:12:24,490 --> 00:12:27,120 >> Así que lo que voy a hacer Ahora, a partir de ahora de verdad, 289 00:12:27,120 --> 00:12:31,630 es antes de que yo ciegamente utilizar una variable como s que 290 00:12:31,630 --> 00:12:36,790 se le ha asignado el valor de retorno de alguna otra función como getString, 291 00:12:36,790 --> 00:12:40,200 Voy a asegurarse que su valor es válido. 292 00:12:40,200 --> 00:12:44,280 Así que sé sólo de haber leído Documentación del CS50 para getString, 293 00:12:44,280 --> 00:12:49,020 que en última instancia le vamos a señalar a, que getString devuelve un símbolo especial 294 00:12:49,020 --> 00:12:53,610 llamada NULL, N-U-L-L en toda tapas, si algo sale mal. 295 00:12:53,610 --> 00:12:55,650 >> Así que normalmente, se devuelve una cadena. 296 00:12:55,650 --> 00:12:59,700 Pero por lo demás si devuelve N-U-L-L-- que con el tiempo vemos lo que realmente 297 00:12:59,700 --> 00:13:01,790 significa: Eso sólo significa algo malo ha pasado. 298 00:13:01,790 --> 00:13:05,560 Ahora bien, esto significa que, al igual que en Scratch, Puedo comprobar una condición aquí en C, 299 00:13:05,560 --> 00:13:08,830 si s no es igual a NULL. 300 00:13:08,830 --> 00:13:11,930 Así que si no has visto esto antes, esto sólo significa no es igual. 301 00:13:11,930 --> 00:13:15,290 >> Así que es lo contrario de iguales iguales, que, recuerdan, 302 00:13:15,290 --> 00:13:18,940 es diferente de solo iguales, que es la asignación. 303 00:13:18,940 --> 00:13:23,030 Así que si s no es igual a NULL, sólo entonces 304 00:13:23,030 --> 00:13:25,980 Quiero ejecutar estas líneas de código. 305 00:13:25,980 --> 00:13:28,080 Así, en otras palabras, antes de sumergirme ciegamente 306 00:13:28,080 --> 00:13:30,919 y comenzar la iteración más de s, y tratarla 307 00:13:30,919 --> 00:13:33,710 como si es una secuencia de personajes, voy a comprobar en primer lugar, 308 00:13:33,710 --> 00:13:37,900 espere un minuto, es definitivamente no igual a este valor especial NULL? 309 00:13:37,900 --> 00:13:40,030 >> Porque si lo es, las cosas malas pueden suceder. 310 00:13:40,030 --> 00:13:43,080 Y por ahora, asumir que las cosas malas sucediendo significa que su programa se bloquea, 311 00:13:43,080 --> 00:13:45,070 y no se puede necesariamente recuperarse. 312 00:13:45,070 --> 00:13:46,800 Así que, francamente, parece más feo. 313 00:13:46,800 --> 00:13:48,660 Es un poco confuso ahora echar un vistazo a. 314 00:13:48,660 --> 00:13:50,780 Pero esto se hará más familiarizarse en poco tiempo. 315 00:13:50,780 --> 00:13:52,920 >> Pero yo voy a proponer ahora otra mejora. 316 00:13:52,920 --> 00:13:54,660 Eso es una mejora a la corrección. 317 00:13:54,660 --> 00:13:58,800 Mi programa es ahora más correcta, porque en el raro caso de que no hay suficiente memoria 318 00:13:58,800 --> 00:14:01,180 existe, voy a manejarlo, y yo voy a hacer nada. 319 00:14:01,180 --> 00:14:02,680 Yo por lo menos no voy a estrellar. 320 00:14:02,680 --> 00:14:05,000 >> Pero vamos a hacer una versión final aquí. 321 00:14:05,000 --> 00:14:07,690 Y un archivo llamado string2.c. 322 00:14:07,690 --> 00:14:10,190 Voy a pegar ese mismo código para un momento, 323 00:14:10,190 --> 00:14:14,210 y yo voy a poner de relieve este línea, 11, aquí, sólo por un momento. 324 00:14:14,210 --> 00:14:18,179 Ahora la realidad es que los compiladores inteligentes Clang como podría arreglar esto para nosotros 325 00:14:18,179 --> 00:14:19,970 detrás de las escenas sin nuestro saber nunca. 326 00:14:19,970 --> 00:14:24,670 Pero vamos a pensar en este fundamentalmente como un diseño problemática. 327 00:14:24,670 --> 00:14:29,010 >> Esta línea de código es, por supuesto, diciendo: inicializar una variable i en 0. 328 00:14:29,010 --> 00:14:30,260 Eso es bastante sencillo. 329 00:14:30,260 --> 00:14:34,691 Y lo nuevo es este declaración, aquí, i ++, haciendo? 330 00:14:34,691 --> 00:14:37,066 Lo hemos visto antes, pero en realidad no hablar de ello. 331 00:14:37,066 --> 00:14:37,900 >> AUDIENCIA: Incremento i. 332 00:14:37,900 --> 00:14:39,191 >> DAVID J. MALAN: i Incremento. 333 00:14:39,191 --> 00:14:41,890 Así que en cada iteración a través este bucle, cada ciclo, 334 00:14:41,890 --> 00:14:43,570 usted está incrementando i por uno. 335 00:14:43,570 --> 00:14:45,740 Por lo tanto, se hace más grande y más grande, y grande hasta que el bucle termina. 336 00:14:45,740 --> 00:14:46,810 ¿Cómo termina? 337 00:14:46,810 --> 00:14:49,430 Bueno hay este medio condición que hemos usado antes. 338 00:14:49,430 --> 00:14:52,500 Usted ha visto y en Tutoriales en el conjunto P. 339 00:14:52,500 --> 00:14:53,880 >> Pero, ¿qué es esta palabra? 340 00:14:53,880 --> 00:14:58,352 Haga lo siguiente bucle lo siempre y cuando i es menor que lo que? 341 00:14:58,352 --> 00:14:59,810 AUDIENCIA: La longitud de la cadena. 342 00:14:59,810 --> 00:15:01,518 DAVID J. MALAN: La longitud de la cadena. 343 00:15:01,518 --> 00:15:04,300 Por lo tanto, se traduce bastante limpiamente de Inglés en ese sentido. 344 00:15:04,300 --> 00:15:08,810 Ahora el problema es que cada vez que iterar a través de este bucle en teoría, 345 00:15:08,810 --> 00:15:10,000 Estoy haciendo esta pregunta. 346 00:15:10,000 --> 00:15:12,250 Soy yo menos de la longitud de la cadena de s? 347 00:15:12,250 --> 00:15:14,500 Soy yo menos de la longitud de la cadena de s? 348 00:15:14,500 --> 00:15:18,380 >> Ahora soy yo cambiando en cada iteración? 349 00:15:18,380 --> 00:15:18,880 Lo es. 350 00:15:18,880 --> 00:15:19,629 Debido a la ++. 351 00:15:19,629 --> 00:15:21,700 Así que cada iteración i es cada vez más grande. 352 00:15:21,700 --> 00:15:25,411 Pero es s cada vez más grande, o más pequeño, o cambiar en absoluto? 353 00:15:25,411 --> 00:15:25,910 No. 354 00:15:25,910 --> 00:15:30,240 Así que en términos de diseño, uno de los ejes a lo largo de la cual tratamos de evaluar código 355 00:15:30,240 --> 00:15:32,610 en la clase, esto se siente un poco estúpido. 356 00:15:32,610 --> 00:15:34,690 >> Al igual que usted es, literalmente, en cada iteración 357 00:15:34,690 --> 00:15:37,110 de este bucle pidiendo al misma maldita pregunta de nuevo, 358 00:15:37,110 --> 00:15:40,770 y otra vez, y otra vez, y, literalmente, nunca va a cambiar. 359 00:15:40,770 --> 00:15:44,220 Por lo menos si no estoy tocando s y tratando de cambiar el contenido de s. 360 00:15:44,220 --> 00:15:46,610 Así que me puedo hacer un poco mejor que esto. 361 00:15:46,610 --> 00:15:49,530 >> Y lo que voy a hacer no es declarar sólo una variable i, 362 00:15:49,530 --> 00:15:53,330 pero una segunda variable voy arbitrariamente, pero convencionalmente, llamarlo n. 363 00:15:53,330 --> 00:15:55,940 Asignar n igual a la longitud de la cadena de s. 364 00:15:55,940 --> 00:15:59,090 Y luego aquí, voy a hacer un poco de optimización inteligente, por lo que 365 00:15:59,090 --> 00:16:03,460 para hablar, que al final del día no más correcta o no menos correcta es 366 00:16:03,460 --> 00:16:04,260 que antes. 367 00:16:04,260 --> 00:16:05,500 Pero es un mejor diseño. 368 00:16:05,500 --> 00:16:09,480 En el hecho de que estoy usando menos tiempo, menos ciclos de CPU, por lo que 369 00:16:09,480 --> 00:16:14,040 de hablar, de responder a la misma pregunta, pero sólo una vez. 370 00:16:14,040 --> 00:16:17,870 >> ¿Tiene preguntas sobre este general principio de mejora, 371 00:16:17,870 --> 00:16:21,294 decir, la eficiencia de un programa? 372 00:16:21,294 --> 00:16:21,991 ¿Sí? 373 00:16:21,991 --> 00:16:23,699 AUDIENCIA: ¿Por qué utilizar el [inaudible]? 374 00:16:23,699 --> 00:16:25,760 375 00:16:25,760 --> 00:16:27,010 DAVID J. MALAN: Buena pregunta. 376 00:16:27,010 --> 00:16:30,690 Entonces, ¿por qué ponemos la ++ en el extremo del i en lugar del comienzo de la i? 377 00:16:30,690 --> 00:16:33,070 En este caso, tiene ningún impacto funcional. 378 00:16:33,070 --> 00:16:36,670 Y, en general, tiendo a utilizar el operador de sufijo 379 00:16:36,670 --> 00:16:41,750 por lo que es un poco más claro para cuando la operación está sucediendo. 380 00:16:41,750 --> 00:16:46,670 >> Para aquellos no familiarizados, hay otro declaraciones por lo que usted podría hacer ++ i. 381 00:16:46,670 --> 00:16:48,747 Estos son funcionalmente equivalente en este caso 382 00:16:48,747 --> 00:16:51,080 porque no hay nada más alrededor de ese incrementación. 383 00:16:51,080 --> 00:16:54,435 Pero uno se puede topar con casos y líneas de código 384 00:16:54,435 --> 00:16:55,810 en el que eso hace la diferencia. 385 00:16:55,810 --> 00:16:57,810 Así que en general, no lo hacemos incluso hablar de éste. 386 00:16:57,810 --> 00:17:00,690 Porque, francamente, que hace que su código más sexy, y una especie de chubasquero, 387 00:17:00,690 --> 00:17:01,776 y menos caracteres. 388 00:17:01,776 --> 00:17:04,859 Pero la realidad es que es mucho más difícil, Creo que, incluso para mí que envuelvo mi mente 389 00:17:04,859 --> 00:17:07,319 alrededor de ella a veces, el orden de las operaciones. 390 00:17:07,319 --> 00:17:09,750 Así como un aparte, si Realmente no me gusta esto, 391 00:17:09,750 --> 00:17:14,650 a pesar de que esto es un poco sexy buscando, también puede hacer i + = 1, 392 00:17:14,650 --> 00:17:18,880 que es la versión más feo de la misma idea de incrementación postfix. 393 00:17:18,880 --> 00:17:22,250 >> Digo esto y usted debe burlarse de él, 394 00:17:22,250 --> 00:17:25,140 pero se llega a ver el código como algo hermoso en poco tiempo. 395 00:17:25,140 --> 00:17:27,160 >> [Risas] 396 00:17:27,160 --> 00:17:28,410 >> DAVID J. MALAN: ¿Verdad? 397 00:17:28,410 --> 00:17:29,360 Sí. 398 00:17:29,360 --> 00:17:30,480 Pregunta en el centro. 399 00:17:30,480 --> 00:17:32,146 >> AUDIENCIA: ¿Es necesario decir int n? 400 00:17:32,146 --> 00:17:34,020 DAVID J. MALAN: Haces No necesito decir int n. 401 00:17:34,020 --> 00:17:37,670 Así pues ya hemos dicho int, que no es necesario volver a decirlo. 402 00:17:37,670 --> 00:17:41,820 El problema es que n tiene que ser del mismo tipo de datos como i. 403 00:17:41,820 --> 00:17:43,310 Así que eso es simplemente una comodidad aquí. 404 00:17:43,310 --> 00:17:44,058 Sí. 405 00:17:44,058 --> 00:17:47,806 >> AUDIENCIA: ¿Se puede ir por el Soporte de caracteres de impresión s i de nuevo? 406 00:17:47,806 --> 00:17:48,930 DAVID J. MALAN: Absolutamente. 407 00:17:48,930 --> 00:17:52,110 Así% c, recordar de pasada tiempo, es sólo un marcador de posición. 408 00:17:52,110 --> 00:17:53,930 Significa poner un char aquí. 409 00:17:53,930 --> 00:17:56,780 n barra invertida, por supuesto, sólo medios poner un salto de línea aquí. 410 00:17:56,780 --> 00:17:59,540 Así que simplemente se va, ahora, esta pieza de la nueva sintaxis. 411 00:17:59,540 --> 00:18:03,730 Y esto está diciendo literalmente, agarrar la cadena llamada s y ve a buscar a su 412 00:18:03,730 --> 00:18:06,050 carácter i'th, por así decirlo. 413 00:18:06,050 --> 00:18:10,590 >> Y sigo diciendo carácter i'th porque en cada iteración de este bucle 414 00:18:10,590 --> 00:18:14,540 es como si estamos imprimiendo , en primer lugar s soporte 0, 415 00:18:14,540 --> 00:18:15,780 como programador podría decir. 416 00:18:15,780 --> 00:18:18,680 Entonces S soporte 1, a continuación, s el soporte 2, a continuación, 3, a continuación, 4. 417 00:18:18,680 --> 00:18:21,610 Pero por supuesto que es una variable, así que sólo lo expreso con i. 418 00:18:21,610 --> 00:18:23,900 >> Clave, sin embargo, es darse cuenta, sobre todo si no tienes 419 00:18:23,900 --> 00:18:26,358 sido aclimatarse a este mundo de la programación, en la que todos 420 00:18:26,358 --> 00:18:28,950 parecen contar desde cero, tengo que empezar a contar desde cero ahora. 421 00:18:28,950 --> 00:18:35,130 Porque las cadenas, primer carácter, el z en Zamyla es para bien o para mal 422 00:18:35,130 --> 00:18:40,490 va a vivir en el lugar número cero. 423 00:18:40,490 --> 00:18:48,210 >> Muy bien, así que vamos a traerme nosotros volver aquí para Zamyla 424 00:18:48,210 --> 00:18:50,746 y ver lo que realmente está pasando en debajo de la capucha. 425 00:18:50,746 --> 00:18:52,370 Así que hay esta noción de la conversión de tipos. 426 00:18:52,370 --> 00:18:53,800 Es posible que tenga realidad jugado con esto ya, 427 00:18:53,800 --> 00:18:55,970 tal vez por el hacker edición de P de un conjunto. 428 00:18:55,970 --> 00:19:00,320 Pero la conversión de tipos sólo se refiere a la capacidad en C y otros lenguajes 429 00:19:00,320 --> 00:19:03,170 para convertir un tipo de datos a otro. 430 00:19:03,170 --> 00:19:05,450 >> Ahora ¿cómo podemos ver esta bastante sin rodeos? 431 00:19:05,450 --> 00:19:08,530 Así que esto, el recuerdo, es el comienzo del alfabeto Inglés. 432 00:19:08,530 --> 00:19:11,265 Y el contexto, hay que recordar, de como hace una semana es ASCII. 433 00:19:11,265 --> 00:19:13,790 El Código Estándar Americano para Intercambio de Información. 434 00:19:13,790 --> 00:19:17,080 Lo cual es sólo un camino muy largo de decir un mapeo de las cartas 435 00:19:17,080 --> 00:19:19,370 a los números y de números a letras. 436 00:19:19,370 --> 00:19:22,940 >> Así A través de M aquí, punto punto puntos, líneas con, recordar, 437 00:19:22,940 --> 00:19:25,582 el número decimal 65 en adelante. 438 00:19:25,582 --> 00:19:27,290 Y no hablamos sobre esto de manera explícita, 439 00:19:27,290 --> 00:19:29,850 pero seguramente hay similares los números correspondientes a las letras minúsculas. 440 00:19:29,850 --> 00:19:30,820 Y de hecho, los hay. 441 00:19:30,820 --> 00:19:33,730 El mundo decidió algunos años Hace poco que una minúscula con 442 00:19:33,730 --> 00:19:35,020 va a ser 97. 443 00:19:35,020 --> 00:19:38,010 Y poco b va ser 98, y así sucesivamente. 444 00:19:38,010 --> 00:19:40,200 >> Y para cualquier otra tecla en su teclado, no hay 445 00:19:40,200 --> 00:19:42,190 va a ser un patrón similar de bits. 446 00:19:42,190 --> 00:19:44,540 O equivalentemente, un número decimal. 447 00:19:44,540 --> 00:19:47,110 Así que la pregunta que nos ocupa, entonces, es ¿cómo podemos 448 00:19:47,110 --> 00:19:49,400 ver realmente esta debajo de la capucha? 449 00:19:49,400 --> 00:19:51,539 Así que voy a ir a gedit nuevo. 450 00:19:51,539 --> 00:19:53,330 Y en vez de escribir éste a partir de cero, 451 00:19:53,330 --> 00:19:55,330 Voy a seguir adelante y Sólo tiene que abrir algo 452 00:19:55,330 --> 00:19:58,350 desde el código de hoy llamado ASCII cero. 453 00:19:58,350 --> 00:20:01,210 >> Y ASCII cero se parece a esto. 454 00:20:01,210 --> 00:20:02,710 Así que vamos a envolver nuestras mentes en torno a esto. 455 00:20:02,710 --> 00:20:04,969 Así que primero, yo he comentado el código, que es agradable. 456 00:20:04,969 --> 00:20:07,010 Debido a que es, literalmente, me dice qué esperar, 457 00:20:07,010 --> 00:20:08,950 mostrar una asignación para las letras en mayúsculas. 458 00:20:08,950 --> 00:20:13,690 Ahora, yo no sé muy bien lo que decir con eso, así que vamos a deducir. 459 00:20:13,690 --> 00:20:16,870 >> En Inglés, tal vez poco techie Inglés, 460 00:20:16,870 --> 00:20:20,660 lo que hace la línea 18 aparece a hacer por nosotros? 461 00:20:20,660 --> 00:20:21,500 Sólo la línea 18. 462 00:20:21,500 --> 00:20:22,430 ¿Cómo es la inducción? 463 00:20:22,430 --> 00:20:25,192 ¿Qué se va a poner en marcha aquí? 464 00:20:25,192 --> 00:20:26,100 >> AUDIENCIA: Un bucle. 465 00:20:26,100 --> 00:20:26,630 >> DAVID J. MALAN: un bucle. 466 00:20:26,630 --> 00:20:28,463 ¿Y cuántas veces es que va a repetir? 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 AUDIENCIA: [interponiendo VOCES] seis veces. 469 00:20:33,270 --> 00:20:34,830 DAVID J. MALAN: no seis veces. 470 00:20:34,830 --> 00:20:35,840 AUDIENCIA: 26 veces. 471 00:20:35,840 --> 00:20:36,560 DAVID J. MALAN: 26 veces. 472 00:20:36,560 --> 00:20:37,060 Sí, lo siento. 473 00:20:37,060 --> 00:20:37,960 26 veces. 474 00:20:37,960 --> 00:20:38,460 ¿Por qué? 475 00:20:38,460 --> 00:20:41,590 Bueno, es un poco raro, pero He empezado a contar desde el 65. 476 00:20:41,590 --> 00:20:43,300 Lo que es raro, pero no está mal. 477 00:20:43,300 --> 00:20:44,610 No está mal por la opinión. 478 00:20:44,610 --> 00:20:46,980 Y yo estoy haciendo que sólo porque, para este ejemplo, 479 00:20:46,980 --> 00:20:50,455 Soy una especie de anticipar que el capital A era 65. 480 00:20:50,455 --> 00:20:53,330 Ahora bien, este no es el más elegante manera de hacer esto, que tipo de código duro 481 00:20:53,330 --> 00:20:56,130 valores esotéricos que nadie se espera que cada vez que hay que recordar. 482 00:20:56,130 --> 00:21:00,155 >> Pero por ahora, noto que estoy hacer esto a través de 65 más 26. 483 00:21:00,155 --> 00:21:03,030 Porque al parecer yo no quiero ni para hacer la aritmética en mi cabeza. 484 00:21:03,030 --> 00:21:04,440 Así que voy a dejar que el compilador lo haga. 485 00:21:04,440 --> 00:21:08,600 Pero entonces en cada bucle, cada iteración del bucle, estoy incrementando i. 486 00:21:08,600 --> 00:21:10,196 >> Así que ahora esto parece un poco críptico. 487 00:21:10,196 --> 00:21:13,320 Pero debemos tener el edificio básico bloques con los que entienden esto. 488 00:21:13,320 --> 00:21:15,510 % C es sólo un marcador de posición para un char. 489 00:21:15,510 --> 00:21:19,010 % I es un marcador de posición para un int. 490 00:21:19,010 --> 00:21:23,310 Y resulta que el uso de este nueva sintaxis, este paréntesis, por lo 491 00:21:23,310 --> 00:21:26,100 hablar, por lo que un tipo de datos dentro de un paréntesis, 492 00:21:26,100 --> 00:21:32,270 Puedo obligar al compilador para tratar i no es un entero, sino como un char. 493 00:21:32,270 --> 00:21:35,520 >> De esta manera me muestra el carácter equivalente de ese número. 494 00:21:35,520 --> 00:21:37,986 Ahora aquí, este código es casi idéntica. 495 00:21:37,986 --> 00:21:39,860 Yo sólo quería hacer súper explícito el hecho de 496 00:21:39,860 --> 00:21:42,095 que estoy empezando a los 97, que es minúscula. 497 00:21:42,095 --> 00:21:44,080 En el para arriba a través de 26 cartas más. 498 00:21:44,080 --> 00:21:46,970 Y estoy haciendo-- de nuevo, fundición i, por así decirlo. 499 00:21:46,970 --> 00:21:49,160 O la conversión de tipos i, por así decirlo. 500 00:21:49,160 --> 00:21:51,420 >> Desde un int a un char. 501 00:21:51,420 --> 00:21:55,760 Así que el resultado final va a ser, francamente, la información que ya sabemos. 502 00:21:55,760 --> 00:21:59,411 Yo voy a hacer ascii-0 no dot-- dot c. 503 00:21:59,411 --> 00:22:02,160 Aviso, usted probablemente ha hecho que error, ya que acabo de hacer accidentalmente. 504 00:22:02,160 --> 00:22:03,820 Hacer ascii-0. 505 00:22:03,820 --> 00:22:06,090 Ahora me voy a hacer ./ascii-0. 506 00:22:06,090 --> 00:22:09,050 Voy a acercar, y por desgracia que va a desplazarse fuera de la pantalla. 507 00:22:09,050 --> 00:22:15,060 Pero vemos toda una tabla donde un mapas a 97, b mapas a 98, 508 00:22:15,060 --> 00:22:18,931 y si nos desplazamos hasta más A, por supuesto, se correlaciona con 65. 509 00:22:18,931 --> 00:22:21,180 Así que esto es sólo para decir que lo que hemos estado predicando, 510 00:22:21,180 --> 00:22:25,310 existe esta equivalencia, se de hecho, el caso en la realidad. 511 00:22:25,310 --> 00:22:28,000 Así que una modificación rápida de este. 512 00:22:28,000 --> 00:22:31,220 Permítanme abro ascii-1.c. 513 00:22:31,220 --> 00:22:38,070 Y note este listo, especie de, la aclaración de esto. 514 00:22:38,070 --> 00:22:41,770 Esto es ascii-1.c, y cuenta de esta locura. 515 00:22:41,770 --> 00:22:45,120 >> Y esto realmente llega al corazón de lo que los ordenadores están haciendo. 516 00:22:45,120 --> 00:22:48,150 A pesar de que nosotros los humanos lo haría No contar en términos de letters-- 517 00:22:48,150 --> 00:22:50,380 No me pongo a pensar, bien una continuación, b, 518 00:22:50,380 --> 00:22:52,590 y usarlos para contar objetos físicos. 519 00:22:52,590 --> 00:22:58,680 Por supuesto que puede decir que yo quiero inicializar una variable llamada c-- 520 00:22:58,680 --> 00:23:03,220 pero podría haber llamado a este algo-- así c se inicializa al capital A. 521 00:23:03,220 --> 00:23:07,560 >> Debido a que al final del día, el ordenador no importa lo que usted está almacenando, 522 00:23:07,560 --> 00:23:10,170 sólo le importa cómo desea para presentar esa información. 523 00:23:10,170 --> 00:23:13,560 ¿Cómo quiere que la computadora interpretar que el patrón de bits? 524 00:23:13,560 --> 00:23:16,320 Así que esto no es algo que sería generalmente recomendaría hacerlo. 525 00:23:16,320 --> 00:23:19,500 No deja de ser un ejemplo para transmitir que se puede absolutamente 526 00:23:19,500 --> 00:23:22,049 inicializar un entero a un char. 527 00:23:22,049 --> 00:23:24,090 Debido a que por debajo de la capó de un char, por supuesto, 528 00:23:24,090 --> 00:23:26,170 es sólo un número del 0 al 255. 529 00:23:26,170 --> 00:23:28,540 >> Por lo que puede sin duda lo puso dentro de un int. 530 00:23:28,540 --> 00:23:30,890 Y lo que esto también demuestra que se 531 00:23:30,890 --> 00:23:34,040 puede convertir de un tipo a otro, aquí, 532 00:23:34,040 --> 00:23:36,780 en última instancia, la impresión de la misma cosa. 533 00:23:36,780 --> 00:23:44,760 Y de hecho, esto me va a arreglar online-- fue querido decir esto, de nuevo, aquí. 534 00:23:44,760 --> 00:23:48,610 Déjame limpiar esto en línea, y vamos a ver en un tutorial en línea, según sea necesario, 535 00:23:48,610 --> 00:23:50,280 lo que se pretendía allí. 536 00:23:50,280 --> 00:23:50,960 >> Okay. 537 00:23:50,960 --> 00:23:53,892 Así que ayer por ejemplo que actualmente participan A y B, y luego vamos a 538 00:23:53,892 --> 00:23:54,850 tomar las cosas a un nivel superior. 539 00:23:54,850 --> 00:23:58,330 Así que con A y B, y c de en la capitalización 540 00:23:58,330 --> 00:24:01,560 y la equivalencia de los mismos, vamos a echar un vistazo a este ejemplo, aquí. 541 00:24:01,560 --> 00:24:02,752 Otro ejemplo de código. 542 00:24:02,752 --> 00:24:04,460 Abriremos uno que sea ya hecha, por lo que 543 00:24:04,460 --> 00:24:06,440 no tener que escribirla todo desde cero. 544 00:24:06,440 --> 00:24:09,420 >> Y fíjense en previsión estamos usando encabezado múltiple 545 00:24:09,420 --> 00:24:13,240 archivos, entre los que se nuestro nuevo amigo, string.h. 546 00:24:13,240 --> 00:24:15,597 Ahora esto se parece, a primera vista, un poco críptico. 547 00:24:15,597 --> 00:24:18,180 Pero vamos a ver si no podemos razonar a través de lo que está pasando aquí. 548 00:24:18,180 --> 00:24:21,150 En primer lugar me da una cadena del usuario, y puse esa cadena en una variable 549 00:24:21,150 --> 00:24:22,286 llamados s. 550 00:24:22,286 --> 00:24:24,090 Copiar pegar desde antes. 551 00:24:24,090 --> 00:24:27,250 En la línea 22, estoy aparentemente haciendo exactamente lo 552 00:24:27,250 --> 00:24:30,760 Yo lo hice hace un momento, estoy iteración sobre los personajes de s. 553 00:24:30,760 --> 00:24:34,780 >> Y los nuevos trucos aquí están utilizando longitud de la cadena, la optimización de menor importancia 554 00:24:34,780 --> 00:24:37,930 de almacenar la longitud de la cadena en n, En lugar de llamar strlen nuevo, 555 00:24:37,930 --> 00:24:38,850 y otra vez, y otra vez. 556 00:24:38,850 --> 00:24:41,120 Y comprobando que i es menor que n. 557 00:24:41,120 --> 00:24:43,330 Ahora aquí, las cosas se ponen un poco interesante. 558 00:24:43,330 --> 00:24:45,980 Pero es sólo una aplicación de esta misma idea nueva. 559 00:24:45,980 --> 00:24:48,470 Lo que en Inglés hace s soporte i representan? 560 00:24:48,470 --> 00:24:51,772 561 00:24:51,772 --> 00:24:54,260 >> AUDIENCIA: Contando cada carácter [inaudible]. 562 00:24:54,260 --> 00:24:55,926 >> DAVID J. MALAN: Contando cada personaje. 563 00:24:55,926 --> 00:24:58,680 Y aún más sucinta, s soporte i representan qué? 564 00:24:58,680 --> 00:25:00,950 ¿Diría usted. 565 00:25:00,950 --> 00:25:04,084 Para no poner en el punto aquí. 566 00:25:04,084 --> 00:25:06,375 >> AUDIENCIA: Bueno-- 567 00:25:06,375 --> 00:25:09,500 DAVID J. MALAN: Así que si la palabra es-- si la cadena es Zamyla, que starts-- 568 00:25:09,500 --> 00:25:12,380 AUDIENCIA: --usted tratar con los personajes en forma separada: 569 00:25:12,380 --> 00:25:13,690 DAVID J. MALAN: Good. 570 00:25:13,690 --> 00:25:14,190 Exactamente. 571 00:25:14,190 --> 00:25:17,940 La notación de corchetes que permite acceder a cada carácter individual, 572 00:25:17,940 --> 00:25:21,120 por lo s soporte 0 va a ser la primer carácter en la cadena. 573 00:25:21,120 --> 00:25:24,110 s soporte 1 va a ser la segunda, y así sucesivamente. 574 00:25:24,110 --> 00:25:28,050 Así que la pregunta que estoy haciendo, aquí, en esta condición es lo que? 575 00:25:28,050 --> 00:25:33,984 Es el carácter de orden i de s mayor o igual a minúsculas una? 576 00:25:33,984 --> 00:25:36,400 ¿Y qué significa esto, aquí, con los símbolos de unión dobles? 577 00:25:36,400 --> 00:25:36,800 AUDIENCIA (JUNTOS): Y. 578 00:25:36,800 --> 00:25:37,210 DAVID J. MALAN: Y. 579 00:25:37,210 --> 00:25:38,418 Es sólo equivalente a este. 580 00:25:38,418 --> 00:25:42,310 Y no es una palabra clave en C, usted tiene que uso, molesto, signo ampersand. 581 00:25:42,310 --> 00:25:47,520 Y esto, por el contrario, está pidiendo es s del i-ésimo carácter menores o iguales 582 00:25:47,520 --> 00:25:49,030 a minúsculas z? 583 00:25:49,030 --> 00:25:52,440 Y una vez más, aquí es donde la comprensión de la subyacente 584 00:25:52,440 --> 00:25:54,550 implementación de un ordenador tiene sentido. 585 00:25:54,550 --> 00:25:57,330 Tenga en cuenta que, a pesar de que tengo el punto punto punto allí, 586 00:25:57,330 --> 00:26:04,410 se parece a la aa la z en minúsculas se todos los valores contiguos hasta de 97 en adelante. 587 00:26:04,410 --> 00:26:07,820 >> Y lo mismo para mayúsculas a partir de las 65. 588 00:26:07,820 --> 00:26:10,410 Así que la comida para llevar, entonces, es que en Inglés, 589 00:26:10,410 --> 00:26:12,760 ¿cómo describiría lo que la línea 24 está haciendo? 590 00:26:12,760 --> 00:26:15,736 591 00:26:15,736 --> 00:26:16,728 ¿Sí? 592 00:26:16,728 --> 00:26:21,575 >> AUDIENCIA: El 24 está comprobando si cada personaje es una minúscula. 593 00:26:21,575 --> 00:26:24,700 DAVID J. MALAN: Se comprobar si cada carácter es una letra minúscula. 594 00:26:24,700 --> 00:26:28,590 Así que, incluso de forma más sucinta, es el carácter i-ésimo de s minúscula? 595 00:26:28,590 --> 00:26:30,690 Eso es todo lo que estamos expresar aquí lógicamente, 596 00:26:30,690 --> 00:26:33,750 un poco críptico, pero en última instancia, muy francamente. 597 00:26:33,750 --> 00:26:36,480 Es s de i'th minúsculas personaje? 598 00:26:36,480 --> 00:26:40,130 >> Si es así, y aquí es donde las cosas conseguir un poco alucinante 599 00:26:40,130 --> 00:26:44,760 por un momento, si es así, vaya por delante e imprimir un carácter. 600 00:26:44,760 --> 00:26:47,360 Así que esto es sólo un marcador de posición, pero, ¿qué personaje? 601 00:26:47,360 --> 00:26:53,710 ¿Por qué hago s soporte de i menos esta expresión aquí? 602 00:26:53,710 --> 00:26:55,110 >> Bueno notar el patrón aquí. 603 00:26:55,110 --> 00:26:57,380 Los números reales no importan tanto. 604 00:26:57,380 --> 00:27:02,700 Pero observe que 97 es a qué distancia de 65? 605 00:27:02,700 --> 00:27:03,560 >> AUDIENCIA: 32. 606 00:27:03,560 --> 00:27:04,480 >> DAVID J. MALAN: 32. 607 00:27:04,480 --> 00:27:06,890 ¿Qué tan lejos es 98 de 66? 608 00:27:06,890 --> 00:27:07,740 >> AUDIENCIA: 32. 609 00:27:07,740 --> 00:27:09,890 >> DAVID J. MALAN: Poco c de C grande? 610 00:27:09,890 --> 00:27:10,420 32. 611 00:27:10,420 --> 00:27:14,550 Así que hay 32 saltos de una letra a otra. 612 00:27:14,550 --> 00:27:17,790 Así que, francamente, yo, podía simplificar este a eso. 613 00:27:17,790 --> 00:27:20,400 Pero entonces estoy un poco difícil de codificación Este bajo nivel de comprensión 614 00:27:20,400 --> 00:27:21,740 que ningún lector está siempre va a entender. 615 00:27:21,740 --> 00:27:25,080 Así que voy a generalizar como yo conocer las letras minúsculas son más grandes. 616 00:27:25,080 --> 00:27:28,400 Sé que las letras mayúsculas son valores más pequeños, irónicamente. 617 00:27:28,400 --> 00:27:33,216 >> Pero esto es efectivamente equivalente a diciendo restar 32 del s soporte de i. 618 00:27:33,216 --> 00:27:35,430 Así, en el contexto de estos cartas, si la carta 619 00:27:35,430 --> 00:27:38,950 pasa a ser una minúscula a, y le resto 32, 620 00:27:38,950 --> 00:27:43,442 ¿qué efecto tiene eso, matemáticamente, en minúscula? 621 00:27:43,442 --> 00:27:44,400 AUDIENCIA: Capitalizes-- 622 00:27:44,400 --> 00:27:45,691 DAVID J. MALAN: mayúscula ella. 623 00:27:45,691 --> 00:27:48,440 Y de hecho, esta es la razón por la programa se llama capitalizar cero. 624 00:27:48,440 --> 00:27:51,590 Este programa ya sea capitaliza una carta, 625 00:27:51,590 --> 00:27:54,580 después de comprobar si se trata de hecho una letra minúscula. 626 00:27:54,580 --> 00:27:59,810 De lo contrario, en la línea 30, ¿qué hago si que no es una letra minúscula que soy 627 00:27:59,810 --> 00:28:02,852 mirando a una determinada iteración en el bucle. 628 00:28:02,852 --> 00:28:03,890 Sólo imprimirlo. 629 00:28:03,890 --> 00:28:07,010 >> Así que no cambiar las cosas eso ni siquiera es minúscula. 630 00:28:07,010 --> 00:28:10,790 Restringirse a poco a poco a través de z. 631 00:28:10,790 --> 00:28:12,730 Ahora bien, esto es bastante arcano. 632 00:28:12,730 --> 00:28:15,230 Pero al final del día, esta es la forma en que, érase una vez, 633 00:28:15,230 --> 00:28:16,460 tenido que implementar cosas. 634 00:28:16,460 --> 00:28:19,780 Si en vez abierta con mayúscula uno, gracias oh dios. 635 00:28:19,780 --> 00:28:22,320 Hay una función llamados a superior que puede 636 00:28:22,320 --> 00:28:25,410 hacer todo lo que acabamos de hacer a un nivel bastante bajo. 637 00:28:25,410 --> 00:28:28,752 >> Ahora a parte superior es interesante porque se ha declarado en un archivo, 638 00:28:28,752 --> 00:28:31,210 y usted sólo saber esto mediante la comprobación de la documentación, 639 00:28:31,210 --> 00:28:35,730 o que me digan, por ejemplo, en la clase, donde existe, en un archivo llamado ctype.h. 640 00:28:35,730 --> 00:28:37,630 Así que este es otro nuevo amigo nuestro. 641 00:28:37,630 --> 00:28:40,750 Y lo hace superior exactamente lo que su nombre sugiere. 642 00:28:40,750 --> 00:28:44,860 >> Puede pasar, como un argumento, entre estos paréntesis, un poco de carácter. 643 00:28:44,860 --> 00:28:48,390 Voy a pasar en el carácter i'th de s usando nuestra nueva notación de lujo 644 00:28:48,390 --> 00:28:49,870 que implica corchetes. 645 00:28:49,870 --> 00:28:53,391 Y tomar una conjetura, lo que es el retorno valor de al superior parecer va 646 00:28:53,391 --> 00:28:53,890 a ser? 647 00:28:53,890 --> 00:28:56,460 648 00:28:56,460 --> 00:28:57,770 Una letra mayúscula. 649 00:28:57,770 --> 00:28:58,620 Una letra mayúscula. 650 00:28:58,620 --> 00:29:02,330 >> Así que si paso en minúscula, con suerte, por definición de a superior, 651 00:29:02,330 --> 00:29:05,600 que va a devolver un mayúscula A. De lo contrario, 652 00:29:05,600 --> 00:29:08,590 si no es una letra minúscula en primer lugar, acabo de imprimirlo. 653 00:29:08,590 --> 00:29:10,800 Y, en efecto, observe el segundo amigo aquí. 654 00:29:10,800 --> 00:29:13,840 No sólo para la parte superior existe, pero es menor, lo que 655 00:29:13,840 --> 00:29:16,200 en realidad responde a esa pregunta para mí. 656 00:29:16,200 --> 00:29:19,730 >> Ahora quien escribió estas cosas, 10s de hace años, ¿sabes qué? 657 00:29:19,730 --> 00:29:23,840 Implementado a superior y es reducir el uso de código como este. 658 00:29:23,840 --> 00:29:27,270 Pero, de nuevo, de acuerdo con esta idea de abstraer de distancia, 659 00:29:27,270 --> 00:29:29,190 más o menos, el nivel más bajo detalles de implementación. 660 00:29:29,190 --> 00:29:32,600 Y de pie sobre los hombros de la gente que vinieron antes que nosotros, el uso de funciones 661 00:29:32,600 --> 00:29:36,300 como a superior y es más baja, lo que suficiente maravillosamente están muy bien 662 00:29:36,300 --> 00:29:40,190 llamado para decir lo que hacen, es un paradigma maravilloso para adoptar. 663 00:29:40,190 --> 00:29:44,040 >> Ahora, resulta que si leo la página de manual para, por ejemplo, para la parte superior, 664 00:29:44,040 --> 00:29:45,010 Aprendo algo más. 665 00:29:45,010 --> 00:29:46,890 Así que el hombre toUpper. 666 00:29:46,890 --> 00:29:48,050 Es un poco abrumador. 667 00:29:48,050 --> 00:29:51,110 Pero aviso, así es que la mención de el archivo de cabecera que debo utilizar. 668 00:29:51,110 --> 00:29:54,460 Como acotación al margen, ya que este es engañosa, la función 669 00:29:54,460 --> 00:29:59,070 utiliza enteros en lugar de caracteres por razones de comprobación de errores. 670 00:29:59,070 --> 00:30:01,260 Pero tal vez vendremos de nuevo a que en el futuro. 671 00:30:01,260 --> 00:30:05,910 >> Pero fíjate, aquí, a los conversos superiores la letra c a mayúsculas si es posible. 672 00:30:05,910 --> 00:30:07,674 Así que eso es bastante sencillo. 673 00:30:07,674 --> 00:30:09,340 Y ahora vamos a ser un poco más específico. 674 00:30:09,340 --> 00:30:12,750 Echemos un vistazo a la parte de la Página hombre bajo valor de retorno. 675 00:30:12,750 --> 00:30:15,420 El valor devuelto es que de la carta convertido. 676 00:30:15,420 --> 00:30:18,690 O c, si la conversión no era posible, 677 00:30:18,690 --> 00:30:20,250 donde c es la entrada original. 678 00:30:20,250 --> 00:30:24,140 ¿Qué sé de aquí, de el argumento de que al superior. 679 00:30:24,140 --> 00:30:25,780 >> Entonces, ¿qué es la comida para llevar de esta? 680 00:30:25,780 --> 00:30:28,060 El valor devuelto es que de la carta convertido, 681 00:30:28,060 --> 00:30:32,110 o c, la carta original, si la conversión no era posible. 682 00:30:32,110 --> 00:30:36,460 ¿Qué mejoras puedo, por tanto, hacer que el diseño de mi código? 683 00:30:36,460 --> 00:30:37,146 ¿Sí? 684 00:30:37,146 --> 00:30:38,810 >> AUDIENCIA: Usted puede quitar la cosa. 685 00:30:38,810 --> 00:30:40,810 DAVID J. MALAN: puedo eliminar la sentencia else, 686 00:30:40,810 --> 00:30:42,510 y no sólo la sentencia else. 687 00:30:42,510 --> 00:30:44,150 >> AUDIENCIA: Usted puede eliminar [inaudible]. 688 00:30:44,150 --> 00:30:46,310 >> DAVID J. MALAN: puedo eliminar todo el tenedor 689 00:30:46,310 --> 00:30:48,209 en el camino, el caso más en conjunto. 690 00:30:48,209 --> 00:30:50,250 Así que de hecho, déjame abrir la versión final de este, 691 00:30:50,250 --> 00:30:55,540 capitalizar-2 y notar cómo, si usted, sexy, el código es ahora conseguir, 692 00:30:55,540 --> 00:31:00,040 en que he reducido de algunos siete más o menos líneas a sólo cuatro, 693 00:31:00,040 --> 00:31:03,850 la funcionalidad que tenía la intención simplemente llamando a la superior, 694 00:31:03,850 --> 00:31:09,410 pasando en s soporte i, y la impresión a cabo, con el marcador de posición% c, 695 00:31:09,410 --> 00:31:11,090 ese personaje en particular. 696 00:31:11,090 --> 00:31:14,560 >> Ahora podría decirse que hay un error, o por lo menos el riesgo de un error, 697 00:31:14,560 --> 00:31:15,350 en este programa. 698 00:31:15,350 --> 00:31:18,200 Así que para volver a una comida para llevar antes, 699 00:31:18,200 --> 00:31:21,820 ¿qué debo hacer, probablemente, también en este programa para que sea más robusta, 700 00:31:21,820 --> 00:31:24,974 de manera que no hay forma de que pueda estrellarse, incluso en casos raros? 701 00:31:24,974 --> 00:31:26,390 AUDIENCIA: Asegúrese de que no es NULL. 702 00:31:26,390 --> 00:31:28,056 DAVID J. MALAN: Asegúrese de que no es NULL. 703 00:31:28,056 --> 00:31:31,030 Así que en realidad, para hacer esta súper adecuada, que debería hacer algo parecido, 704 00:31:31,030 --> 00:31:35,300 si s no es NULL, seguir adelante y ejecutar 705 00:31:35,300 --> 00:31:38,470 estas líneas de código, que Puedo entonces guión así, 706 00:31:38,470 --> 00:31:39,870 y luego poner en mi llave de cierre. 707 00:31:39,870 --> 00:31:41,550 Así que bueno atar juntas de las dos ideas. 708 00:31:41,550 --> 00:31:42,429 ¿Sí? 709 00:31:42,429 --> 00:31:44,470 AUDIENCIA: ¿Podrías usar un bucle Do While, en su lugar? 710 00:31:44,470 --> 00:31:47,270 DAVID J. MALAN: ¿Podría Hago un do while? 711 00:31:47,270 --> 00:31:50,020 AUDIENCIA: --usted quiero asegurarme que en realidad [inaudible]. 712 00:31:50,020 --> 00:31:51,728 DAVID J. MALAN: ¿Podría utiliza un do rato? 713 00:31:51,728 --> 00:31:52,450 Respuesta corta, no. 714 00:31:52,450 --> 00:31:54,700 Debido a que usted está a punto de introducir otro caso esquina. 715 00:31:54,700 --> 00:31:56,660 Si la cadena es de longitud cero. 716 00:31:56,660 --> 00:31:59,600 Si, por ejemplo, me acaba de golpear Introduzca, sin nunca escribir Zamyla. 717 00:31:59,600 --> 00:32:02,490 Voy a entregar una copia de un real cadena, como veremos con el tiempo vemos, 718 00:32:02,490 --> 00:32:03,780 que tiene cero caracteres. 719 00:32:03,780 --> 00:32:05,630 Todavía es una cadena, es sólo súper corto. 720 00:32:05,630 --> 00:32:07,960 Pero si utiliza un do tiempo, vas a ciegas 721 00:32:07,960 --> 00:32:10,050 tratar de hacer algo con respetar a esa cadena, 722 00:32:10,050 --> 00:32:12,537 y nada va a estar allí. 723 00:32:12,537 --> 00:32:18,607 >> AUDIENCIA: Bueno, si lo has hecho hacer [inaudible] mientras s-- 724 00:32:18,607 --> 00:32:21,190 DAVID J. MALAN: Oh, ya veo, sigo Obtención de una cadena del usuario. 725 00:32:21,190 --> 00:32:23,525 Así que la respuesta corta, que podría, y mantener la lata 726 00:32:23,525 --> 00:32:26,150 que te den una cadena que es lo suficientemente corto como para caber en la memoria. 727 00:32:26,150 --> 00:32:26,700 Absolutamente. 728 00:32:26,700 --> 00:32:27,630 Yo opté por no hacerlo. 729 00:32:27,630 --> 00:32:30,505 Si ellos no me dan la cadena I quiera, yo voy a dejar, me voy a rendir. 730 00:32:30,505 --> 00:32:33,260 Pero absolutamente, para ese propósito, usted puede absolutamente hacer eso. 731 00:32:33,260 --> 00:32:37,500 >> Así que los archivos de cabecera de la biblioteca que ahora estamos familiarizados con son estos, aquí. 732 00:32:37,500 --> 00:32:41,550 E / S estándar, CS50.h, string.h, ctype.h, y hay, de hecho, otros. 733 00:32:41,550 --> 00:32:44,460 Algunos de ustedes han descubierto la biblioteca de matemáticas en math.h. 734 00:32:44,460 --> 00:32:48,200 Pero permítame que le presente, ahora, a este recurso que el personal CS50, Davin, 735 00:32:48,200 --> 00:32:50,630 y Rob, y Gabe particular, han puesto juntas. 736 00:32:50,630 --> 00:32:52,630 Eso pronto enlazar en la página web del curso. 737 00:32:52,630 --> 00:32:54,870 Se llama CS50 referencia. 738 00:32:54,870 --> 00:32:58,230 >> ¿Qué acaba de darle una rápida sabor de la misma, funciona como sigue. 739 00:32:58,230 --> 00:33:00,740 Déjame ir a reference.cs50.net. 740 00:33:00,740 --> 00:33:02,990 Usted verá en la mano izquierda lado una lista abrumadora 741 00:33:02,990 --> 00:33:04,595 de las funciones que vienen con c. 742 00:33:04,595 --> 00:33:07,790 Pero si me importa, por el momento, sobre algo como strlen, 743 00:33:07,790 --> 00:33:08,746 Me puede escribir allí. 744 00:33:08,746 --> 00:33:10,870 Se filtra la lista simplemente lo que me importa. 745 00:33:10,870 --> 00:33:11,940 Voy a hacer clic en él. 746 00:33:11,940 --> 00:33:14,740 Y ahora a la izquierda, verás lo que esperamos 747 00:33:14,740 --> 00:33:18,290 es una más sencilla, humana amable explicación de cómo 748 00:33:18,290 --> 00:33:19,170 esta función trabaja. 749 00:33:19,170 --> 00:33:20,600 >> Devuelve la longitud de una cadena. 750 00:33:20,600 --> 00:33:24,060 He aquí un resumen, así es como usted utilizarlo en términos del archivo de cabecera, 751 00:33:24,060 --> 00:33:27,430 y en términos de lo que la función parece que en términos de sus argumentos. 752 00:33:27,430 --> 00:33:30,250 Y entonces aquí, devoluciones la longitud de una cadena. 753 00:33:30,250 --> 00:33:34,280 Pero para aquellos de ustedes más cómodo, en realidad se puede hacer clic más cómoda, 754 00:33:34,280 --> 00:33:37,070 y el contenido de este página, ahora, va a cambiar 755 00:33:37,070 --> 00:33:41,660 siendo los valores por defecto de lo se obtiene mediante el uso de la página de manual. 756 00:33:41,660 --> 00:33:44,100 >> En otras palabras, CS50 de referencia es una simplificación 757 00:33:44,100 --> 00:33:46,220 de hombre páginas por el personal, para los estudiantes. 758 00:33:46,220 --> 00:33:49,320 En particular, los menos cómodo y en el medio, de modo que usted 759 00:33:49,320 --> 00:33:51,660 no tienen que tratar de envolver su mente alrededor, francamente, 760 00:33:51,660 --> 00:33:55,030 una sintaxis bastante críptico y documentación en algún momento. 761 00:33:55,030 --> 00:33:57,650 >> Así que tenlo en cuenta en los días por venir. 762 00:33:57,650 --> 00:33:59,560 Así que aquí, de nuevo, es un Zamyla. 763 00:33:59,560 --> 00:34:03,255 Ahora vamos a hacer una pregunta que es un poco más humana accesible. 764 00:34:03,255 --> 00:34:05,380 Gracias a Chang, que ha estado imprimir más elefantes 765 00:34:05,380 --> 00:34:07,090 sin parar durante los últimos días. 766 00:34:07,090 --> 00:34:09,730 Tenemos una oportunidad de dar al menos uno de ellos de distancia. 767 00:34:09,730 --> 00:34:13,239 Si pudiéramos conseguir apenas un voluntario venir en un máximo de dibujar en la pantalla. 768 00:34:13,239 --> 00:34:14,530 ¿Y aquí? 769 00:34:14,530 --> 00:34:15,340 >> Vamos arriba. 770 00:34:15,340 --> 00:34:16,720 Cuál es tu nombre? 771 00:34:16,720 --> 00:34:17,219 ALEX: Alex. 772 00:34:17,219 --> 00:34:17,760 DAVID J. MALAN: Alex. 773 00:34:17,760 --> 00:34:18,259 Bien. 774 00:34:18,259 --> 00:34:19,388 Alex, vamos arriba. 775 00:34:19,388 --> 00:34:21,679 Estamos a punto de ver su escritura a mano en la pantalla aquí. 776 00:34:21,679 --> 00:34:24,325 777 00:34:24,325 --> 00:34:25,570 Muy bien, encantado de conocerte. 778 00:34:25,570 --> 00:34:26,429 >> ALEX: Niza que usted cumple. 779 00:34:26,429 --> 00:34:27,512 >> DAVID J. MALAN: Muy bien. 780 00:34:27,512 --> 00:34:28,969 Así, el ejercicio super simple. 781 00:34:28,969 --> 00:34:31,440 Bar no es alto para conseguir un elefante hoy. 782 00:34:31,440 --> 00:34:33,439 Está jugando el papel de getString. 783 00:34:33,439 --> 00:34:35,980 Y yo voy a simplemente decirle la cadena que te has puesto. 784 00:34:35,980 --> 00:34:38,080 Y supongamos que, getString, han sido llamados. 785 00:34:38,080 --> 00:34:42,480 Y el ser humano, como yo, tiene escrito en Zamyla, Z-A-M-Y-L-A. 786 00:34:42,480 --> 00:34:45,650 Sólo tienes que ir adelante y escribir Zamyla en el pantalla como si usted ha conseguido 787 00:34:45,650 --> 00:34:47,250 y se almacena en algún lugar de la memoria. 788 00:34:47,250 --> 00:34:52,370 789 00:34:52,370 --> 00:34:55,570 >> Dejando espacio para lo que será varios otra palabras-- eso está bien, sigue adelante. 790 00:34:55,570 --> 00:34:59,620 >> [Risas] 791 00:34:59,620 --> 00:35:00,800 >> Así Zamyla, Excelente. 792 00:35:00,800 --> 00:35:04,880 Así que ahora suponga que, getString, son llamados de nuevo. 793 00:35:04,880 --> 00:35:09,350 Y por lo tanto, doy que, en el teclado, con otro nombre, Belinda. 794 00:35:09,350 --> 00:35:17,560 795 00:35:17,560 --> 00:35:18,060 Bien. 796 00:35:18,060 --> 00:35:22,380 Y ahora, la próxima vez es getString llamada, escribo en algo así como Gabe, 797 00:35:22,380 --> 00:35:27,560 G-A-B-E. Realmente estás tomando al corazón de la memoria de acceso aleatorio. 798 00:35:27,560 --> 00:35:29,631 ¿Qué es el dibujo todo completamente al azar. 799 00:35:29,631 --> 00:35:30,130 Okay. 800 00:35:30,130 --> 00:35:31,104 >> [Risas] 801 00:35:31,104 --> 00:35:32,520 ALEX: Lo siento mi letra es mala. 802 00:35:32,520 --> 00:35:33,770 DAVID J. MALAN: No, eso está bien. 803 00:35:33,770 --> 00:35:40,480 Y ¿qué hay de Rob, R-O-B. Okay. 804 00:35:40,480 --> 00:35:41,020 Bueno. 805 00:35:41,020 --> 00:35:43,853 Así que no te lo iba a anticipar tipo de sentar las cosas de esta manera. 806 00:35:43,853 --> 00:35:45,020 Pero podemos hacer que esto funcione. 807 00:35:45,020 --> 00:35:48,810 Entonces, ¿cómo fue el proceso de colocación estos caracteres en la memoria? 808 00:35:48,810 --> 00:35:51,310 En otras palabras, si pensamos en esta pantalla negro rectangular 809 00:35:51,310 --> 00:35:53,550 como representación de un RAM, o memoria de la computadora. 810 00:35:53,550 --> 00:35:55,850 >> Y recuerda que la memoria RAM es sólo un montón de bytes, 811 00:35:55,850 --> 00:35:57,480 y bytes son un montón de bits. 812 00:35:57,480 --> 00:35:59,350 Y bits son de alguna manera implementado, generalmente 813 00:35:59,350 --> 00:36:01,119 con alguna forma de electricidad en hardware. 814 00:36:01,119 --> 00:36:03,160 Así que es una especie de la estratificación que hemos hablado 815 00:36:03,160 --> 00:36:04,510 y ahora se puede dar por sentado. 816 00:36:04,510 --> 00:36:07,020 ¿Cómo fue el proceso de decidir dónde escribir 817 00:36:07,020 --> 00:36:11,634 Rob frente Gabe frente Belinda frente Zamyla? 818 00:36:11,634 --> 00:36:14,020 >> ALEX: Yo sólo lo hizo en el pide que me dijiste. 819 00:36:14,020 --> 00:36:15,650 >> DAVID J. MALAN: Y eso es cierto. 820 00:36:15,650 --> 00:36:20,100 Pero lo que rige donde pones El nombre de Belinda y el nombre de Gabe? 821 00:36:20,100 --> 00:36:20,764 >> ALEX: ¿Nada? 822 00:36:20,764 --> 00:36:22,930 DAVID J. MALAN: [Risas] Para que funcione, eso está bien. 823 00:36:22,930 --> 00:36:25,290 Así que las computadoras son poco más ordenado que eso. 824 00:36:25,290 --> 00:36:29,000 Y así, cuando nos quedamos allí implement-- por sólo un moment-- cuando en realidad 825 00:36:29,000 --> 00:36:31,470 aplicar algo así GetString en una computadora, 826 00:36:31,470 --> 00:36:34,480 Zamyla podría ser establecido más o menos como lo hizo en la pantalla, no. 827 00:36:34,480 --> 00:36:36,660 >> Y lo que es clave para notar aquí, lo que Alex hizo, 828 00:36:36,660 --> 00:36:40,260 es que hay una especie de demarcación entre cada una de estas palabras, ¿verdad? 829 00:36:40,260 --> 00:36:46,580 No escribiste Z-A-Y-M-L-A-B-E-L-I-N-D-A-G-A-B-- 830 00:36:46,580 --> 00:36:49,740 en otras palabras, hay una especie de demarcación que parece ser, 831 00:36:49,740 --> 00:36:52,370 clase de, el espaciamiento aleatorio entre estas diversas palabras. 832 00:36:52,370 --> 00:36:54,120 Pero eso es bueno, porque nosotros, los humanos pueden ahora 833 00:36:54,120 --> 00:36:56,470 visualizar que estos son cuatro cuerdas diferentes. 834 00:36:56,470 --> 00:36:59,540 No es sólo una secuencia de de lotes de caracteres. 835 00:36:59,540 --> 00:37:04,190 Así que una computadora, entonces, por su parte, podría tener una cadena como Zamyla, 836 00:37:04,190 --> 00:37:07,220 poner cada una de esas letras dentro de un byte de memoria. 837 00:37:07,220 --> 00:37:10,400 Pero ese número es mucho más grande, por supuesto, de seis caracteres. 838 00:37:10,400 --> 00:37:11,690 >> Hay un montón de RAM. 839 00:37:11,690 --> 00:37:15,330 Y así en adelante, este rejilla de cajas va 840 00:37:15,330 --> 00:37:17,560 para representar lo que Alex acaba no aquí en la pantalla. 841 00:37:17,560 --> 00:37:20,937 Y ahora, Alex, le podemos ofrecer una azul o un elefante naranja de Chang. 842 00:37:20,937 --> 00:37:22,270 ALEX: me quedo con un elefante azul. 843 00:37:22,270 --> 00:37:23,120 DAVID J. MALAN: Un elefante azul. 844 00:37:23,120 --> 00:37:25,580 Así que un gran aplauso, si pudiéramos, para Alex aquí. 845 00:37:25,580 --> 00:37:26,100 >> [Aplausos] 846 00:37:26,100 --> 00:37:26,766 >> ALEX: Gracias. 847 00:37:26,766 --> 00:37:28,820 DAVID J. MALAN: Gracias. 848 00:37:28,820 --> 00:37:36,230 Así que la comida para llevar es que, aunque el patrón de tipo de cambió con el tiempo, aquí 849 00:37:36,230 --> 00:37:40,430 en el tablero, había un demarcación entre las diversas cadenas 850 00:37:40,430 --> 00:37:42,610 que Alex tiene para nosotros. 851 00:37:42,610 --> 00:37:45,230 Ahora las computadoras, francamente, podría hacer lo mismo. 852 00:37:45,230 --> 00:37:48,210 Podrían tipo de plop cadenas en cualquier lugar en la memoria RAM. 853 00:37:48,210 --> 00:37:50,710 Hasta aquí, por aquí, aquí abajo, aquí abajo. 854 00:37:50,710 --> 00:37:52,020 >> Ellos podrían hacer exactamente eso. 855 00:37:52,020 --> 00:37:54,280 Pero, por supuesto, eso es probablemente no la mejor planificación. 856 00:37:54,280 --> 00:37:54,780 ¿Cierto? 857 00:37:54,780 --> 00:37:57,340 Si me solicitaron a Alex Obtenga los nombres, probablemente él había 858 00:37:57,340 --> 00:38:01,370 poner un poco más por aquí, tal vez hasta aquí, por aquí, por aquí, con el tiempo 859 00:38:01,370 --> 00:38:02,211 por aquí. 860 00:38:02,211 --> 00:38:05,460 Pero con un poco más de planificación, sin duda, podríamos poner las cosas de forma más limpia. 861 00:38:05,460 --> 00:38:07,350 Y de hecho, eso es lo que hace un ordenador. 862 00:38:07,350 --> 00:38:10,720 >> Pero el problema es que si la siguiente cadena obtengo 863 00:38:10,720 --> 00:38:14,050 después de Zamyla es algo como el Belinda, 864 00:38:14,050 --> 00:38:17,929 proponer donde podríamos escribir la letra B con respecto a esta rejilla? 865 00:38:17,929 --> 00:38:18,720 ¿Dónde te gustaría ir? 866 00:38:18,720 --> 00:38:21,480 A la derecha de la una, por debajo de la z, por debajo de la A? 867 00:38:21,480 --> 00:38:23,204 ¿Cuáles serían sus primeros instintos? 868 00:38:23,204 --> 00:38:24,120 AUDIENCIA: Por debajo de la z. 869 00:38:24,120 --> 00:38:25,100 DAVID J. MALAN: Así que por debajo de la z. 870 00:38:25,100 --> 00:38:26,530 Y eso es bastante sencillo, ¿verdad? 871 00:38:26,530 --> 00:38:29,321 Es una especie de limpia, que es lo que hacemos en un teclado cuando pulsa enter, 872 00:38:29,321 --> 00:38:31,770 o un correo electrónico al realizar una lista con viñetas de las cosas. 873 00:38:31,770 --> 00:38:34,310 Pero la realidad es que las computadoras tratar de ser más eficiente, 874 00:38:34,310 --> 00:38:37,170 y meter sin duda lo más datos en la memoria RAM como sea posible, 875 00:38:37,170 --> 00:38:38,890 de modo que usted no pierda ningún bytes. 876 00:38:38,890 --> 00:38:41,545 Así que no pierdas cualquier espacio de la pantalla. 877 00:38:41,545 --> 00:38:44,170 Y el problema, sin embargo, es que cuando la ponemos literalmente la carta 878 00:38:44,170 --> 00:38:49,940 b después de una, ¿cómo vamos a saber dónde termina el nombre de Zamyla 879 00:38:49,940 --> 00:38:51,840 y comienza el nombre del Belinda? 880 00:38:51,840 --> 00:38:55,270 Así que los seres humanos que acaba de proponer, así, pulsa la tecla Intro, esencialmente. 881 00:38:55,270 --> 00:38:56,410 Póngalo abajo. 882 00:38:56,410 --> 00:38:59,750 O como hizo Alex, simplemente comenzar a escribir el siguiente nombre debajo de la anterior, 883 00:38:59,750 --> 00:39:01,583 y por debajo de aquél, y a continuación, por debajo de aquél. 884 00:39:01,583 --> 00:39:02,510 Eso es una señal visual. 885 00:39:02,510 --> 00:39:05,960 >> Las computadoras tienen otra señal visual, pero es un poco más conciso. 886 00:39:05,960 --> 00:39:07,840 Es este carácter cobarde. 887 00:39:07,840 --> 00:39:11,890 Backslash 0, lo que es tal vez una reminiscencia de la barra invertida n, 888 00:39:11,890 --> 00:39:12,640 y así sucesivamente, ahora. 889 00:39:12,640 --> 00:39:14,120 Las secuencias de escape especiales. 890 00:39:14,120 --> 00:39:19,120 Backslash 0 es la manera de en representación de ocho bits cero consecutivos. 891 00:39:19,120 --> 00:39:22,000 0000 0000. 892 00:39:22,000 --> 00:39:26,130 >> La forma de expresar que no es golpear el número cero en el teclado, 893 00:39:26,130 --> 00:39:28,140 porque en hecho de que es un Char ASCII. 894 00:39:28,140 --> 00:39:30,990 Se ve como un número, pero es en realidad un número decimal 895 00:39:30,990 --> 00:39:35,910 que representa la circular glifo, el tipo de letra circular. 896 00:39:35,910 --> 00:39:38,410 Mientras tanto, la barra invertida cero significa, literalmente, 897 00:39:38,410 --> 00:39:40,700 poner ocho cero bytes aquí para mí. 898 00:39:40,700 --> 00:39:42,136 >> Así que esto es algo arbitrario. 899 00:39:42,136 --> 00:39:44,260 Podríamos haber utilizado cualquier patrón de bits, pero el mundo 900 00:39:44,260 --> 00:39:46,610 decidido algunos años hace, que para representar 901 00:39:46,610 --> 00:39:49,710 al final de una cadena en la memoria, sólo hay que poner un montón de ceros. 902 00:39:49,710 --> 00:39:51,000 Porque podemos detectar eso. 903 00:39:51,000 --> 00:39:54,790 Ahora que significa que ninguna carta de la alfabeto puede ser representado con ceros. 904 00:39:54,790 --> 00:39:58,480 >> Pero eso está bien, ya hemos visto que estamos usando 65 en hasta en el 97 en adelante. 905 00:39:58,480 --> 00:40:00,290 Nosotros no llegaremos a ninguna parte cerca de todos los ceros. 906 00:40:00,290 --> 00:40:03,040 907 00:40:03,040 --> 00:40:06,540 Así Belinda en la memoria de una computadora es en realidad va a ir aquí. 908 00:40:06,540 --> 00:40:09,764 He dibujado en amarillo justo para llamar nuestra atención. 909 00:40:09,764 --> 00:40:11,680 Y fíjense, también, esta es completamente arbitraria. 910 00:40:11,680 --> 00:40:12,680 He dibujado como una cuadrícula. 911 00:40:12,680 --> 00:40:14,460 Al igual, la memoria RAM es sólo un objeto físico. 912 00:40:14,460 --> 00:40:17,300 No necesariamente tiene filas y columnas, per se. 913 00:40:17,300 --> 00:40:20,490 Es sólo tiene un montón de bytes implementado en hardware de alguna manera. 914 00:40:20,490 --> 00:40:22,817 Pero si después de Belinda I escrito en nombre de Gabe, 915 00:40:22,817 --> 00:40:25,650 él va a terminar aquí en la memoria, y si he escrito en nombre de Daven, 916 00:40:25,650 --> 00:40:27,316 por ejemplo, que va a terminar aquí. 917 00:40:27,316 --> 00:40:29,310 Y puedo seguir escribir incluso más nombres. 918 00:40:29,310 --> 00:40:32,100 >> Por desgracia, si trato de escriba un nombre de súper larga, 919 00:40:32,100 --> 00:40:33,730 Yo podría finalmente quedarse sin memoria. 920 00:40:33,730 --> 00:40:37,810 En cuyo caso, es getString va a devolver NULL, como hemos dicho. 921 00:40:37,810 --> 00:40:41,720 Pero, por suerte, al menos en este visual aquí, no llegamos tan lejos. 922 00:40:41,720 --> 00:40:45,860 >> Ahora lo que es interesante es que esta idea general de tratar las cosas 923 00:40:45,860 --> 00:40:49,720 como es en cajas representante de una característica de C 924 00:40:49,720 --> 00:40:52,690 y una gran cantidad de idiomas, conocida como una matriz. 925 00:40:52,690 --> 00:40:55,490 Una matriz es otro tipo de datos. 926 00:40:55,490 --> 00:40:57,380 Es una estructura de datos, si se quiere. 927 00:40:57,380 --> 00:41:01,160 Estructura en el sentido de que realmente, clase de, el aspecto de un cuadro, por lo menos 928 00:41:01,160 --> 00:41:02,320 en el ojo de tu mente. 929 00:41:02,320 --> 00:41:09,680 Una matriz es un contiguo secuencia de tipos de datos idénticos, 930 00:41:09,680 --> 00:41:11,330 espalda con espalda a espalda con espalda. 931 00:41:11,330 --> 00:41:14,720 >> Así que una cadena, en otra Es decir, es una serie de caracteres. 932 00:41:14,720 --> 00:41:16,120 Un conjunto de caracteres. 933 00:41:16,120 --> 00:41:19,070 Pero resulta que usted puede tener arrays de racimos de cosas. 934 00:41:19,070 --> 00:41:21,870 De hecho, podemos poner incluso números en una matriz. 935 00:41:21,870 --> 00:41:23,920 Así que la forma en la que vamos a empezar 936 00:41:23,920 --> 00:41:26,590 declarar estos datos estructura conocida como una matriz 937 00:41:26,590 --> 00:41:28,250 También se va a utilizar corchetes. 938 00:41:28,250 --> 00:41:31,500 Pero estos corchetes van a tener un significado diferente en este contexto. 939 00:41:31,500 --> 00:41:33,450 >> Y vamos a ver de la siguiente manera. 940 00:41:33,450 --> 00:41:36,780 Supongamos que yo abrí un nuevo archivo aquí. 941 00:41:36,780 --> 00:41:38,535 Y puedo guardar esto como ages.c. 942 00:41:38,535 --> 00:41:41,280 943 00:41:41,280 --> 00:41:43,470 Y voy a guardar esto en mi carpeta de aquí. 944 00:41:43,470 --> 00:41:46,130 Y ahora voy a seguir adelante y empezar a escribir algo 945 00:41:46,130 --> 00:41:53,940 como incluir CS50.h, incluir stdio.h, int void main. 946 00:41:53,940 --> 00:41:57,370 Y luego dentro de aquí, quiero tener primero un int llamada edad. 947 00:41:57,370 --> 00:42:01,371 >> Y yo voy a usar eso para conseguir un int del usuario para su edad. 948 00:42:01,371 --> 00:42:04,620 Pero este programa está destinado a ser utilizado por varias personas, por cualquier contexto. 949 00:42:04,620 --> 00:42:05,490 Tengo una fila de personas. 950 00:42:05,490 --> 00:42:08,281 Todos ellos tienen que escribir en su edad para tal vez un poco, no sé, 951 00:42:08,281 --> 00:42:10,530 concurso o evento que han llegado a. 952 00:42:10,530 --> 00:42:13,030 Así que la próxima persona, me necesitar otra variable. 953 00:42:13,030 --> 00:42:15,790 >> Porque si acabo de hacer edad se getInt, eso es 954 00:42:15,790 --> 00:42:18,500 va a darle una paliza, o sobrescribir edad de la persona anterior. 955 00:42:18,500 --> 00:42:19,760 Así que eso no es bueno. 956 00:42:19,760 --> 00:42:21,790 Así que mi primer instinto podría ser, oh, está bien, 957 00:42:21,790 --> 00:42:26,260 si quiero obtener varias de las personas ages-- vamos a llamar esta edad1, 958 00:42:26,260 --> 00:42:31,280 int age2 consigue int, int edad3 consigue getInt. 959 00:42:31,280 --> 00:42:35,340 Y ahora voy a usar algún código pseudocódigo aquí. 960 00:42:35,340 --> 00:42:37,679 >> Hacer algo con esos números. 961 00:42:37,679 --> 00:42:40,470 Dejaremos para otro día lo que estamos haciendo allí, porque sólo 962 00:42:40,470 --> 00:42:44,200 cuidar por el momento sobre la edad1, age2, edad3. 963 00:42:44,200 --> 00:42:46,450 Desafortunadamente, una vez que compilar este programa 964 00:42:46,450 --> 00:42:51,140 y lo puso delante de los usuarios reales, ¿cuál es el mal diseño fundamentalmente 965 00:42:51,140 --> 00:42:53,890 decisión me parece que han hecho? 966 00:42:53,890 --> 00:42:54,624 ¿Sí? 967 00:42:54,624 --> 00:42:55,499 AUDIENCIA: [inaudible] 968 00:42:55,499 --> 00:42:58,071 969 00:42:58,071 --> 00:42:59,820 DAVID J. MALAN: Sí, Ni siquiera he intentado 970 00:42:59,820 --> 00:43:02,028 averiguar cómo muchas edades Cómo puedo realmente importa? 971 00:43:02,028 --> 00:43:05,380 Si tengo menos de tres personas aquí, y por lo tanto menos de tres años de edad, 972 00:43:05,380 --> 00:43:07,260 Todavía estoy esperando a ciegas tres. 973 00:43:07,260 --> 00:43:08,720 Dios no lo quiera cuatro personas se presentan. 974 00:43:08,720 --> 00:43:10,990 Mi programa no será incluso apoyarlos. 975 00:43:10,990 --> 00:43:13,280 >> Y por lo que este, larga historia resumen, no es un buen hábito. 976 00:43:13,280 --> 00:43:13,780 ¿Cierto? 977 00:43:13,780 --> 00:43:16,530 Yo estaba copiando esencialmente y pegar el código y sólo se pellizcan 978 00:43:16,530 --> 00:43:17,430 los nombres de las variables. 979 00:43:17,430 --> 00:43:22,410 Y, por Dios, si lo hubieras hecho, no tres las edades, pero 10 o 100, o incluso 6500 980 00:43:22,410 --> 00:43:23,820 estudiantes universitarios, por ejemplo. 981 00:43:23,820 --> 00:43:26,950 Esto no va a ser particularmente Código elegante, o sostenible. 982 00:43:26,950 --> 00:43:29,200 Vas a tener que reescribir el programa cada vez que 983 00:43:29,200 --> 00:43:30,760 el número de personas cambia. 984 00:43:30,760 --> 00:43:35,090 >> Así que gracias a Dios, en nuestra actual archivo ages.c por hoy, 985 00:43:35,090 --> 00:43:36,970 tenemos una solución más inteligente. 986 00:43:36,970 --> 00:43:39,800 En primer lugar, voy a pedir prestado el Construimos hemos usado un par de veces, 987 00:43:39,800 --> 00:43:43,744 este bucle Do While, con el fin de conseguir el número de personas en la habitación. 988 00:43:43,744 --> 00:43:46,910 Yo sólo voy a molestar al usuario, una vez más y otra vez, hasta que él o ella me da 989 00:43:46,910 --> 00:43:49,260 un valor de n que es un entero positivo. 990 00:43:49,260 --> 00:43:51,590 >> Yo podría haber utilizado, último tiempo a llegar int positivo. 991 00:43:51,590 --> 00:43:53,720 Pero no tenemos que de verdad, así que me fui por delante 992 00:43:53,720 --> 00:43:55,660 y volver en práctica esta idea. 993 00:43:55,660 --> 00:43:58,410 Ahora aquí, este es el nuevo truco. 994 00:43:58,410 --> 00:44:02,260 En la línea 27, como los comentarios en la línea 26 indica, 995 00:44:02,260 --> 00:44:05,180 declarar una matriz en la que para almacenar la edad de cada uno. 996 00:44:05,180 --> 00:44:09,320 >> Así que si usted desea conseguir, no un int, no dos enteros, pero un montón de enteros. 997 00:44:09,320 --> 00:44:13,800 Específicamente n números enteros, eran n pueden ser de tres, podría ser 100, podría ser 1000. 998 00:44:13,800 --> 00:44:17,570 La sintaxis, simplemente, es que por ejemplo, ¿qué tipo de datos es lo que quieres? 999 00:44:17,570 --> 00:44:19,620 ¿Qué es lo que desea llamar que parte de la memoria? 1000 00:44:19,620 --> 00:44:23,530 ¿Qué quieres que llamar a la rejilla que se parece a esto pictóricamente? 1001 00:44:23,530 --> 00:44:27,700 >> Y entre paréntesis aquí, usted dice lo grande que desea que la matriz sea. 1002 00:44:27,700 --> 00:44:30,450 Y así antes, cuando dije que la sintaxis es un poco diferente aquí, 1003 00:44:30,450 --> 00:44:33,614 todavía estamos utilizando corchetes, pero cuando estoy declarando una matriz, 1004 00:44:33,614 --> 00:44:35,530 el número dentro de la corchetes medios 1005 00:44:35,530 --> 00:44:37,610 qué tan grande quieres la matriz sea. 1006 00:44:37,610 --> 00:44:42,490 >> Por el contrario, cuando utilizamos s soporte de i hace un momento, s, una cadena, 1007 00:44:42,490 --> 00:44:46,820 es de hecho una serie de caracteres, pero cuando no se está declarando una variable, 1008 00:44:46,820 --> 00:44:49,760 Al igual que con esta palabra clave aquí, simplemente está recibiendo 1009 00:44:49,760 --> 00:44:54,280 un índice específico, una específica elemento de esa matriz. 1010 00:44:54,280 --> 00:44:57,090 Una vez que sepamos eso, el resto de esto es sencillo. 1011 00:44:57,090 --> 00:45:00,765 Si nuevo que estoy primero va a imprimir ¿cuál es la edad de la persona número i. 1012 00:45:00,765 --> 00:45:03,890 Cuando acabo de decir la persona número uno, persona número dos, la persona número tres. 1013 00:45:03,890 --> 00:45:06,306 >> Y yo sólo estoy haciendo aritmética, de modo que las personas normales como, 1014 00:45:06,306 --> 00:45:09,030 contamos desde uno para este programa, y ​​no desde cero. 1015 00:45:09,030 --> 00:45:13,620 Entonces yo llamo getint, pero guardo la respuesta en edades ménsula. 1016 00:45:13,620 --> 00:45:16,610 Que es la edad i-ésimo de la matriz. 1017 00:45:16,610 --> 00:45:21,640 Así, mientras que la última vez que estábamos tratando estas cajas como caracteres para el nombre de Zamyla, 1018 00:45:21,640 --> 00:45:22,490 y otros. 1019 00:45:22,490 --> 00:45:26,530 Ahora, estas cajas representan 32 bits, o cuatro bytes 1020 00:45:26,530 --> 00:45:29,510 en el que podemos almacenar un int, int, int. 1021 00:45:29,510 --> 00:45:31,890 Todo lo cual, de nuevo, son el mismo tipo de datos. 1022 00:45:31,890 --> 00:45:33,890 >> Ahora hago algo tonto, como pasa el tiempo, sólo 1023 00:45:33,890 --> 00:45:35,510 para justificar la redacción de este programa. 1024 00:45:35,510 --> 00:45:40,050 Y luego aquí abajo, volví a iterar sobre la matriz diciendo aquí a un año, 1025 00:45:40,050 --> 00:45:43,090 persona número uno voluntad ser algo años. 1026 00:45:43,090 --> 00:45:45,010 Y al darse cuenta de que math-- Quiero decir, esto 1027 00:45:45,010 --> 00:45:49,260 no es muy complicado arithmetic-- Acabo de añadir uno a su edad. 1028 00:45:49,260 --> 00:45:51,240 Sólo para demostrar, de nuevo, esta. 1029 00:45:51,240 --> 00:45:57,910 >> Así como yo puede indexar en una cadena, s, así que puede indexar I en una variedad de edades, 1030 00:45:57,910 --> 00:45:59,950 como que hay. 1031 00:45:59,950 --> 00:46:03,340 Entonces, ¿dónde es este va a estar tomando nosotros? 1032 00:46:03,340 --> 00:46:07,070 Así que vamos a ver, en última instancia, un pocas cosas en los días por venir. 1033 00:46:07,070 --> 00:46:09,510 Uno, todo este tiempo, cuando escribir sus propios programas, 1034 00:46:09,510 --> 00:46:11,239 como Mario, codicioso, el crédito. 1035 00:46:11,239 --> 00:46:13,780 Usted ha estado escribiendo el nombre de el programa y oprimir la tecla Enter. 1036 00:46:13,780 --> 00:46:15,610 Y a continuación, obtener la entrada del usuario. 1037 00:46:15,610 --> 00:46:18,137 >> Con getString, getInt, getLongLong, o similares. 1038 00:46:18,137 --> 00:46:20,720 Pero resulta que los soportes C algo que se llama la línea de comandos 1039 00:46:20,720 --> 00:46:25,740 argumentos, que nos va a permitir conseguir realmente las palabras que escribe, 1040 00:46:25,740 --> 00:46:28,570 en el indicador parpadea, después el nombre de su programa. 1041 00:46:28,570 --> 00:46:31,430 >> Así que en los días por venir, podría escribir algo como César, 1042 00:46:31,430 --> 00:46:34,950 o el número 13, a partir de entonces ./caesar. 1043 00:46:34,950 --> 00:46:36,070 Vamos a ver cómo funciona. 1044 00:46:36,070 --> 00:46:37,550 Debido a que de hecho, en problema fijó dos, estamos 1045 00:46:37,550 --> 00:46:39,383 va a presentarle a un poco de algo 1046 00:46:39,383 --> 00:46:42,360 reminiscencia de Ralphie de desafiar a principios de la cartografía. 1047 00:46:42,360 --> 00:46:43,970 El arte de la codificación de la información. 1048 00:46:43,970 --> 00:46:46,660 Esto, de hecho, es muy reminiscencia de lo que Ralphie hizo. 1049 00:46:46,660 --> 00:46:51,380 >> Este es un ejemplo de un cifrado algoritmo llamado rot13, R-O-T 13. 1050 00:46:51,380 --> 00:46:54,910 ¿Qué significa simplemente gire la letras en el alfabeto 13 lugares. 1051 00:46:54,910 --> 00:46:58,309 Y si lo hace, verá ahora lo que es, tal vez, una frase familiar. 1052 00:46:58,309 --> 00:47:01,100 Pero la forma en que vamos a utilizar esto, en última instancia, es más general. 1053 00:47:01,100 --> 00:47:04,390 >> En P puesto dos, en la edición estándar, usted implementa un par de cifras, 1054 00:47:04,390 --> 00:47:06,720 uno llamado César, uno llamado Vigenére. 1055 00:47:06,720 --> 00:47:10,090 Ambos son de rotación cifras, en que de alguna manera 1056 00:47:10,090 --> 00:47:11,826 convertir una letra en una letra diferente. 1057 00:47:11,826 --> 00:47:12,950 Y César es super simple. 1058 00:47:12,950 --> 00:47:16,220 Para agregar una, se agrega 13, o un número de hasta 26. 1059 00:47:16,220 --> 00:47:19,570 Vigenére hace que en una base por carta. 1060 00:47:19,570 --> 00:47:22,140 Así Vigenére, como se verá en la especificación, es más seguro. 1061 00:47:22,140 --> 00:47:24,973 >> Pero al final del día lo que usted estará implementando y P establece dos, 1062 00:47:24,973 --> 00:47:29,050 es esa llave que se utiliza tanto para el cifrado y el descifrado. 1063 00:47:29,050 --> 00:47:32,160 En relación con el proceso de convertir texto plano, algún mensaje original, 1064 00:47:32,160 --> 00:47:34,490 en texto cifrado, que es algo cifrada. 1065 00:47:34,490 --> 00:47:36,220 Y luego descifrar de nuevo. 1066 00:47:36,220 --> 00:47:38,119 >> En la edición de hackers, Mientras tanto, podrás 1067 00:47:38,119 --> 00:47:40,660 encargado de algo similar en espíritu, en donde le daremos 1068 00:47:40,660 --> 00:47:44,610 un archivo, desde un Linux típico, o Mac o Unix ordenador llamado etsy 1069 00:47:44,610 --> 00:47:47,800 contraseña, que contiene un conjunto montón de nombres de usuario y contraseñas. 1070 00:47:47,800 --> 00:47:50,932 Y esas contraseñas tienen todo ha cifrado o hash, 1071 00:47:50,932 --> 00:47:53,140 por así decirlo, más adecuadamente como se verá en la especificación. 1072 00:47:53,140 --> 00:47:57,090 >> Y la edición de hackers desafiará que con la toma de una entrada como esta, 1073 00:47:57,090 --> 00:47:58,800 y agrietamiento de la contraseña. 1074 00:47:58,800 --> 00:48:02,590 Es decir, averiguar lo que la la contraseña del humano en realidad era. 1075 00:48:02,590 --> 00:48:05,570 Porque, de hecho, las contraseñas son generalmente no se almacenan en el claro, 1076 00:48:05,570 --> 00:48:08,260 y generalmente contraseñas debe ser difícil de adivinar. 1077 00:48:08,260 --> 00:48:09,610 Eso no es a menudo el caso. 1078 00:48:09,610 --> 00:48:12,110 >> Y lo que yo pensaba que haríamos es concluir con un par de minutos 1079 00:48:12,110 --> 00:48:15,160 mirada a un particular mala elección de contraseñas 1080 00:48:15,160 --> 00:48:17,260 de una película se puede recordar con cariño. 1081 00:48:17,260 --> 00:48:18,915 Y si no, usted debe alquilar. 1082 00:48:18,915 --> 00:48:20,070 >> [REPRODUCCIÓN DE VÍDEO] 1083 00:48:20,070 --> 00:48:22,320 >> -Casco, Usted demonio, ¿qué está pasando? 1084 00:48:22,320 --> 00:48:24,240 ¿Qué estás haciendo con mi hija? 1085 00:48:24,240 --> 00:48:28,010 >> Me -Permit para introducir el cirujano plástico brillante y joven, 1086 00:48:28,010 --> 00:48:30,010 El doctor Phillip Schlotkin. 1087 00:48:30,010 --> 00:48:35,020 El hombre más grande de la nariz en el todo el universo y Beverly Hills. 1088 00:48:35,020 --> 00:48:36,140 >> -Tu Alteza. 1089 00:48:36,140 --> 00:48:36,820 >> Trabajo -Nose? 1090 00:48:36,820 --> 00:48:37,700 No entiendo. 1091 00:48:37,700 --> 00:48:39,070 Ella ya ha tenido una cirugía de nariz. 1092 00:48:39,070 --> 00:48:40,800 Era su dulce 16 presentes. 1093 00:48:40,800 --> 00:48:42,590 >> No, no es lo que piensas. 1094 00:48:42,590 --> 00:48:44,490 Es mucho, mucho peor. 1095 00:48:44,490 --> 00:48:48,160 Si no me das la combinación para el escudo de aire, 1096 00:48:48,160 --> 00:48:52,748 Schlotkin médico le dará a su hija de vuelta a su antigua nariz. 1097 00:48:52,748 --> 00:48:53,748 - [Suspiros] nooooooooooooo. 1098 00:48:53,748 --> 00:48:57,684 1099 00:48:57,684 --> 00:48:59,652 ¿De dónde sacaste eso? 1100 00:48:59,652 --> 00:49:00,640 >> -Todos Derecha. 1101 00:49:00,640 --> 00:49:02,506 Te diré, te lo diré. 1102 00:49:02,506 --> 00:49:03,498 >> No, papá, no. 1103 00:49:03,498 --> 00:49:04,490 No debes hacerlo. 1104 00:49:04,490 --> 00:49:06,090 >> -Eres Derecho querida. 1105 00:49:06,090 --> 00:49:07,390 Voy a extrañar su nueva nariz. 1106 00:49:07,390 --> 00:49:10,990 Pero no voy a decirles la combinación no importa qué. 1107 00:49:10,990 --> 00:49:12,450 >> -muy Bien. 1108 00:49:12,450 --> 00:49:14,830 Médico Schlotkin, hacer lo que quieras. 1109 00:49:14,830 --> 00:49:15,744 >> Placer -Mi. 1110 00:49:15,744 --> 00:49:19,860 1111 00:49:19,860 --> 00:49:20,800 >> -nô! 1112 00:49:20,800 --> 00:49:22,780 Espera, espera. 1113 00:49:22,780 --> 00:49:24,000 Te lo diré. 1114 00:49:24,000 --> 00:49:25,830 Te lo diré. 1115 00:49:25,830 --> 00:49:28,270 >> Lo sabía iba a funcionar. 1116 00:49:28,270 --> 00:49:31,390 Muy bien, dámelo. 1117 00:49:31,390 --> 00:49:36,220 >> -El Combinación es uno. 1118 00:49:36,220 --> 00:49:36,740 >> -Uno. 1119 00:49:36,740 --> 00:49:37,473 >> -Uno. 1120 00:49:37,473 --> 00:49:37,972 -Dos. 1121 00:49:37,972 --> 00:49:38,471 -Dos. 1122 00:49:38,471 --> 00:49:39,800 -Dos. 1123 00:49:39,800 --> 00:49:40,300 -Tres. 1124 00:49:40,300 --> 00:49:40,800 -Tres. 1125 00:49:40,800 --> 00:49:41,800 -Tres. 1126 00:49:41,800 --> 00:49:42,300 -Cuatro. 1127 00:49:42,300 --> 00:49:42,800 -Cuatro. 1128 00:49:42,800 --> 00:49:44,707 -Cuatro. 1129 00:49:44,707 --> 00:49:45,521 -Cinco. 1130 00:49:45,521 --> 00:49:46,430 -Cinco. 1131 00:49:46,430 --> 00:49:47,930 -Cinco. 1132 00:49:47,930 --> 00:49:53,480 -SO La combinación es uno, dos, tres, cuatro, cinco. 1133 00:49:53,480 --> 00:49:56,140 Esa es la combinación más estúpida Yo nunca escuché en mi vida. 1134 00:49:56,140 --> 00:49:58,640 Ese es el tipo de cosa que un idiota tendría en su equipaje. 1135 00:49:58,640 --> 00:50:00,000 >> Usted -Gracias, su alteza. 1136 00:50:00,000 --> 00:50:01,340 >> [CLICS REMOTO] 1137 00:50:01,340 --> 00:50:02,450 >> Qué hiciste? 1138 00:50:02,450 --> 00:50:03,800 >> -I Apagó la pared. 1139 00:50:03,800 --> 00:50:05,010 >> No, no lo hiciste, te apagado toda la película. 1140 00:50:05,010 --> 00:50:06,220 >> Debe haber -I presionó el botón equivocado. 1141 00:50:06,220 --> 00:50:07,064 >> Bueno, poner de nuevo en! 1142 00:50:07,064 --> 00:50:07,910 Coloque la película en su sitio! 1143 00:50:07,910 --> 00:50:08,300 >> Sí, señor! 1144 00:50:08,300 --> 00:50:08,799 Sí, señor. 1145 00:50:08,799 --> 00:50:09,660 -Vamos, Arnold. 1146 00:50:09,660 --> 00:50:10,450 Venga, Gretchen. 1147 00:50:10,450 --> 00:50:12,533 Por supuesto que sé que voy a tener que cobrarle por este. 1148 00:50:12,533 --> 00:50:16,720 1149 00:50:16,720 --> 00:50:17,220 Bueno? 1150 00:50:17,220 --> 00:50:17,802 ¿Funcionó? 1151 00:50:17,802 --> 00:50:18,510 ¿Dónde está el rey? 1152 00:50:18,510 --> 00:50:20,218 >> -Es Trabajadas, señor, tener la combinación. 1153 00:50:20,218 --> 00:50:20,740 -Gran. 1154 00:50:20,740 --> 00:50:24,810 Ahora podemos tomar hasta el último aliento de aire fresco desde el planeta Druidia. 1155 00:50:24,810 --> 00:50:25,890 ¿Cuál es la combinación? 1156 00:50:25,890 --> 00:50:28,155 >> Ona, dos, tres, cuatro, cinco. 1157 00:50:28,155 --> 00:50:29,890 >> Ona, dos, tres, cuatro, cinco? 1158 00:50:29,890 --> 00:50:30,390 Sí. 1159 00:50:30,390 --> 00:50:31,110 Eso es increíble. 1160 00:50:31,110 --> 00:50:34,550 Tengo la misma combinación en mi equipaje. 1161 00:50:34,550 --> 00:50:37,160 Preparar Spaceball 1 para salida inmediata. 1162 00:50:37,160 --> 00:50:38,160 >> Sí, señor. 1163 00:50:38,160 --> 00:50:40,745 >> -y Cambiar el combinación en mi equipaje. 1164 00:50:40,745 --> 00:50:41,578 [PUERTA DE CLAUSURA DE SONIDO] 1165 00:50:41,578 --> 00:50:42,064 [CLINK DE PUERTAS QUE GOLPEA EL CASCO] 1166 00:50:42,064 --> 00:50:42,550 -Ahh. 1167 00:50:42,550 --> 00:50:43,383 [FIN REPRODUCCIÓN DE VÍDEO] 1168 00:50:43,383 --> 00:50:46,700 DAVID J. MALAN: Eso es todo por CS50, nos vemos la próxima semana. 1169 00:50:46,700 --> 00:50:49,883 NARRADOR: Y ahora, Deep Pensamientos, por Daven Farnham. 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> Daven FARNHAM: Codificación en C es mucho más difícil de arañazos. 1172 00:50:55,860 --> 00:50:57,320 printf, Scratch era una mentira. 1173 00:50:57,320 --> 00:50:59,930 1174 00:50:59,930 --> 00:51:01,430 >> [FRASE DEL HUMOR] 1175 00:51:01,430 --> 00:51:02,486