1 00:00:00,000 --> 00:00:03,944 >> [REPRODUCCIÓN DE MÚSICA] 2 00:00:03,944 --> 00:00:10,732 3 00:00:10,732 --> 00:00:11,690 DAVID MALAN: De acuerdo. 4 00:00:11,690 --> 00:00:14,674 Esto es CS50, y esto es el fin de semana 2. 5 00:00:14,674 --> 00:00:16,840 Lo siento mucho que no podía ser allí con todos ustedes hoy, 6 00:00:16,840 --> 00:00:18,300 pero usted está en muy buenas manos. 7 00:00:18,300 --> 00:00:21,710 Permítame presentarle Propia Bowden Rob CS50. 8 00:00:21,710 --> 00:00:29,106 9 00:00:29,106 --> 00:00:31,730 ROB BOWDEN: Y, por supuesto, a continuación, tenemos que burlarse del hecho 10 00:00:31,730 --> 00:00:36,820 que él nos envió vertical vídeo y mostrar esto. 11 00:00:36,820 --> 00:00:38,320 >> [REPRODUCCIÓN DE VÍDEO] 12 00:00:38,320 --> 00:00:39,820 >> [REPRODUCCIÓN DE MÚSICA] 13 00:00:39,820 --> 00:00:42,350 >> [PASOS] 14 00:00:42,350 --> 00:00:44,730 >> -Este Vídeo no hizo hay que mirar de esta manera. 15 00:00:44,730 --> 00:00:46,570 Podría haberse evitado. 16 00:00:46,570 --> 00:00:49,070 Diga no a los vídeos verticales. 17 00:00:49,070 --> 00:00:53,310 >> Vídeos -Vertical suceden cuando sostener la cámara por el camino equivocado. 18 00:00:53,310 --> 00:00:55,880 El vídeo termina pareciéndose a una mierda. 19 00:00:55,880 --> 00:00:57,650 >> - [RONCO] 20 00:00:57,650 --> 00:01:02,240 >> -Hay Más y más personas adictas para hacer videos verticales cada día. 21 00:01:02,240 --> 00:01:06,240 No es el crack o nada, pero aún así es muy malo. 22 00:01:06,240 --> 00:01:10,410 Hay dos tipos diferentes de personas que padecen de VVS. 23 00:01:10,410 --> 00:01:14,160 El primer grupo trata la vídeos disparan como imágenes. 24 00:01:14,160 --> 00:01:15,850 Ellos no significan ningún daño. 25 00:01:15,850 --> 00:01:19,180 Ellos simplemente no entienden que mientras que usted puede dar vuelta a una imagen, 26 00:01:19,180 --> 00:01:20,880 realmente no se puede convertir un video. 27 00:01:20,880 --> 00:01:21,880 >> [CRASH] 28 00:01:21,880 --> 00:01:23,460 >> - [MONO SOUNDS] 29 00:01:23,460 --> 00:01:27,540 >> -El Otro grupo es la gente que no dan una [SEÑAL]. 30 00:01:27,540 --> 00:01:31,090 >> Síndrome de vídeo -Vertical es peligroso. 31 00:01:31,090 --> 00:01:34,120 Las imágenes en movimiento tienen siempre ha sido horizontal. 32 00:01:34,120 --> 00:01:35,990 Las televisiones son horizontales. 33 00:01:35,990 --> 00:01:38,380 Las pantallas de ordenador son horizontales. 34 00:01:38,380 --> 00:01:41,580 Ojos de la gente son horizontales. 35 00:01:41,580 --> 00:01:45,170 No estamos hechos para ver vídeos verticales. 36 00:01:45,170 --> 00:01:47,600 >> -Me Encanta vídeos verticales. 37 00:01:47,600 --> 00:01:50,410 >> -Nadie Se preocupa por ti. 38 00:01:50,410 --> 00:01:53,340 >> -Si De este problema no se controla, usted también 39 00:01:53,340 --> 00:01:57,650 comenzará mostrando cuatro vídeos a la vez sólo para ahorrar ancho de banda. 40 00:01:57,650 --> 00:02:02,400 >> Vídeos verticales -Letterboxed haría ser del tamaño de un sello de correos. 41 00:02:02,400 --> 00:02:04,920 >> -Y Se extenderá por todas partes. 42 00:02:04,920 --> 00:02:07,670 Pantallas de cine tienen siempre ha sido horizontal. 43 00:02:07,670 --> 00:02:11,200 Si vídeos verticales se convierten en , cines aceptadas 44 00:02:11,200 --> 00:02:13,930 tendrá que ser alto y flaco. 45 00:02:13,930 --> 00:02:17,710 >> -Y Todos los cines haría tiene que conseguir demolido y reconstruido. 46 00:02:17,710 --> 00:02:22,090 Y en el momento en que fueron reconstruidos, Mila Kunis sería vieja y fea. 47 00:02:22,090 --> 00:02:24,342 >> -Aves Se estrellará contra ellos y morir. 48 00:02:24,342 --> 00:02:26,530 >> Ll del `todo se endurecen cuellos de mirando hacia arriba. 49 00:02:26,530 --> 00:02:29,800 >> -Y Nadie va a sentarse en la primera fila nunca más. 50 00:02:29,800 --> 00:02:37,170 >> -George Lucas volverá a la liberación de la estrella Guerras nuevo-- la edición flaco. 51 00:02:37,170 --> 00:02:41,860 >> -Yo Nunca fue realmente capaz de decir la historia que quería contar. 52 00:02:41,860 --> 00:02:46,030 Esta fue una gran oportunidad para mí experimentar con una nueva tecnología. 53 00:02:46,030 --> 00:02:48,150 >> -Eres un idiota. 54 00:02:48,150 --> 00:02:54,430 >> -Cada Vez que un dispositivo móvil se utiliza para grabación de vídeo, la tentación está ahí. 55 00:02:54,430 --> 00:02:56,370 Solo di que no. 56 00:02:56,370 --> 00:03:00,116 Di no a George Lucas. 57 00:03:00,116 --> 00:03:04,062 Di no a la vieja Mila Kunis. 58 00:03:04,062 --> 00:03:06,600 Diga no a los vídeos verticales. 59 00:03:06,600 --> 00:03:12,511 >> -Y Si ves a alguien haciendo, digamos, "no se está disparando esa ficticia derecho!" 60 00:03:12,511 --> 00:03:15,433 >> [REPRODUCCIÓN DE MÚSICA] 61 00:03:15,433 --> 00:03:18,842 62 00:03:18,842 --> 00:03:19,830 >> [FIN DE REPRODUCCIÓN] 63 00:03:19,830 --> 00:03:23,702 >> [Aplausos] 64 00:03:23,702 --> 00:03:27,598 >> [SALIDA DE AUDIO] 65 00:03:27,598 --> 00:03:44,041 66 00:03:44,041 --> 00:03:45,790 ROB BOWDEN: --simple forma de criptografía, 67 00:03:45,790 --> 00:03:49,500 que es básicamente el cifrado y descifrado de mensajes secretos. 68 00:03:49,500 --> 00:03:52,590 Así que aquí tenemos una muy simple juguete. 69 00:03:52,590 --> 00:03:56,900 Y la idea es el anillo exterior gira alrededor del anillo interior. 70 00:03:56,900 --> 00:04:01,610 Y se puede ver, tal vez si el zoom en, que-- es difícil de ver. 71 00:04:01,610 --> 00:04:05,090 Pero, al igual que, el número 1-- así, que se movía. 72 00:04:05,090 --> 00:04:09,120 >> El número 1 se asigna a la letra X, número 2 mapas a la carta 73 00:04:09,120 --> 00:04:11,630 J. increíblemente difícil no saltar hacia adelante. 74 00:04:11,630 --> 00:04:16,100 Carta 2 se asigna a J. Número 3 se asigna a D. Por lo tanto 75 00:04:16,100 --> 00:04:20,140 con este anillo se puede dar alguien un mensaje de 1, 2, 3. 76 00:04:20,140 --> 00:04:22,624 Por alguna razón usted quiero decirles XJD. 77 00:04:22,624 --> 00:04:24,540 Pero usted puede darles algún mensaje de números, 78 00:04:24,540 --> 00:04:28,460 y siempre y cuando que tienen este anillo, que puede descifrar lo que estás tratando de decir. 79 00:04:28,460 --> 00:04:32,510 >> Así que usted puede haber visto este ejemplo particular de la criptografía 80 00:04:32,510 --> 00:04:36,640 antes si la vuelta de la temporada de Navidad has visto una historia de Navidad. 81 00:04:36,640 --> 00:04:38,520 Si nunca has visto antes, a continuación, sólo 82 00:04:38,520 --> 00:04:41,060 encienda TBS a, literalmente, cualquier momento el día de Nochebuena, 83 00:04:41,060 --> 00:04:44,510 porque simplemente lo muestran espalda con espalda con espalda con espalda con espalda todo el día. 84 00:04:44,510 --> 00:04:46,744 Y el vídeo relevante es la siguiente. 85 00:04:46,744 --> 00:04:47,410 [REPRODUCCIÓN DE VÍDEO] 86 00:04:47,410 --> 00:04:50,020 -sea Conoce a todo el mundo que Ralph Parker es presente 87 00:04:50,020 --> 00:04:52,850 nombrado miembro de la Pequeña Orphan Annie círculo secreto 88 00:04:52,850 --> 00:04:56,490 y tiene derecho a todos los honores y los beneficios que ocurren al mismo. 89 00:04:56,490 --> 00:04:59,010 Firmado pequeña huérfana Annie. 90 00:04:59,010 --> 00:05:03,120 Refrendado Pierre Andre en tinta! 91 00:05:03,120 --> 00:05:07,460 Honores y beneficios Ya a la edad de nueve! 92 00:05:07,460 --> 00:05:12,530 >> [GRITA DE RADIO] 93 00:05:12,530 --> 00:05:13,030 -Vamos. 94 00:05:13,030 --> 00:05:14,000 Vamos a seguir adelante con ella. 95 00:05:14,000 --> 00:05:18,274 No necesito todo ese jazz acerca de contrabandistas y piratas. 96 00:05:18,274 --> 00:05:20,440 -Escucha Mañana por la noche con la aventura de conclusión 97 00:05:20,440 --> 00:05:22,540 del Negro del barco pirata. 98 00:05:22,540 --> 00:05:25,460 Ahora, es el momento para Mensaje secreto de Annie 99 00:05:25,460 --> 00:05:28,620 para ustedes miembros del Círculo Secreto. 100 00:05:28,620 --> 00:05:32,370 Recuerde que los niños, los únicos miembros de Annie círculo secreto 101 00:05:32,370 --> 00:05:34,880 puede decodificar mensaje secreto de Annie. 102 00:05:34,880 --> 00:05:39,100 Recuerde, Annie depende de ti. 103 00:05:39,100 --> 00:05:41,660 Establezca sus pasadores a B2. 104 00:05:41,660 --> 00:05:43,960 Aquí está el mensaje. 105 00:05:43,960 --> 00:05:44,680 12. 106 00:05:44,680 --> 00:05:45,180 11. 107 00:05:45,180 --> 00:05:45,679 2. 108 00:05:45,679 --> 00:05:48,110 -Estoy En mi primera reunión secreta. 109 00:05:48,110 --> 00:05:49,030 >> -25. 110 00:05:49,030 --> 00:05:49,834 14. 111 00:05:49,834 --> 00:05:51,040 11. 112 00:05:51,040 --> 00:05:51,854 18. 113 00:05:51,854 --> 00:05:52,670 16. 114 00:05:52,670 --> 00:05:54,570 >> -Oh, Pierre está en gran noche de voz. 115 00:05:54,570 --> 00:05:57,490 Me di cuenta de que esta noche mensaje era realmente importante. 116 00:05:57,490 --> 00:05:57,990 -3. 117 00:05:57,990 --> 00:06:00,080 25. 118 00:06:00,080 --> 00:06:01,580 Ese es un mensaje de Annie sí misma. 119 00:06:01,580 --> 00:06:02,880 Recuerde, no se lo digas a nadie. 120 00:06:02,880 --> 00:06:07,840 121 00:06:07,840 --> 00:06:11,130 >> -Cinco Segundos más tarde, estoy en el único habitación de la casa donde un niño de nueve años 122 00:06:11,130 --> 00:06:15,830 podía sentarse en la intimidad y la decodificación. 123 00:06:15,830 --> 00:06:16,620 ¡Ajá! 124 00:06:16,620 --> 00:06:17,340 B! 125 00:06:17,340 --> 00:06:20,210 Fui a la siguiente. 126 00:06:20,210 --> 00:06:23,300 E. La primera palabra es "ser". 127 00:06:23,300 --> 00:06:25,880 S. Venía más fácil ahora. 128 00:06:25,880 --> 00:06:28,400 U. 25. 129 00:06:28,400 --> 00:06:30,528 Eso es R. 130 00:06:30,528 --> 00:06:31,278 -Vamos, Ralphie! 131 00:06:31,278 --> 00:06:31,861 ¡Tengo que ir! 132 00:06:31,861 --> 00:06:33,182 -Voy A estar bien abajo, Ma! 133 00:06:33,182 --> 00:06:36,038 Caramba. 134 00:06:36,038 --> 00:06:42,840 T. O. "Asegúrese de" - asegúrese de que? 135 00:06:42,840 --> 00:06:44,770 ¿Cuál fue la huerfanita Annie tratando de decir? 136 00:06:44,770 --> 00:06:46,381 Asegúrese de que? 137 00:06:46,381 --> 00:06:47,825 >> -Randy Tiene que ir! 138 00:06:47,825 --> 00:06:48,866 Por favor, ¿salir? 139 00:06:48,866 --> 00:06:49,783 >> Derecho -Todos, mamá! 140 00:06:49,783 --> 00:06:51,786 Estaré fuera cierto! 141 00:06:51,786 --> 00:06:53,606 Yo estaba más cerca ahora. 142 00:06:53,606 --> 00:06:55,550 La tensión era terrible. 143 00:06:55,550 --> 00:06:57,050 ¿Que era? 144 00:06:57,050 --> 00:06:59,905 El destino del planeta puede pender de un hilo! 145 00:06:59,905 --> 00:07:01,736 >> -Ralphie, Randy tiene que ir! 146 00:07:01,736 --> 00:07:05,680 >> -Voy A estar bien a cabo, por el amor de Dios! 147 00:07:05,680 --> 00:07:07,170 ¡Ya falta poco! 148 00:07:07,170 --> 00:07:08,150 Mis dedos volaban. 149 00:07:08,150 --> 00:07:09,980 Mi mente era una trampa de acero. 150 00:07:09,980 --> 00:07:11,496 Cada poro vibró. 151 00:07:11,496 --> 00:07:13,268 Era casi claro! 152 00:07:13,268 --> 00:07:13,767 Sí. 153 00:07:13,767 --> 00:07:14,609 Sí. 154 00:07:14,609 --> 00:07:15,108 Sí. 155 00:07:15,108 --> 00:07:16,449 Sí. 156 00:07:16,449 --> 00:07:20,240 Asegúrese de beber su Ovaltine. 157 00:07:20,240 --> 00:07:20,740 Ovaltine? 158 00:07:20,740 --> 00:07:26,687 159 00:07:26,687 --> 00:07:27,520 Un comercial de mala muerte? 160 00:07:27,520 --> 00:07:32,040 161 00:07:32,040 --> 00:07:34,920 Hijo de puta. 162 00:07:34,920 --> 00:07:35,890 >> [FIN DE REPRODUCCIÓN] 163 00:07:35,890 --> 00:07:39,650 >> ROB BOWDEN: Así que es como Ovaltine refiere a la criptografía. 164 00:07:39,650 --> 00:07:42,290 Básicamente CS50 simplemente anuncian Ovaltine, por lo que pudimos 165 00:07:42,290 --> 00:07:44,400 ser un comercial de mala muerte para Ovaltine. 166 00:07:44,400 --> 00:07:44,900 Correcto. 167 00:07:44,900 --> 00:07:47,120 Así que ahora la ciencia actual equipo. 168 00:07:47,120 --> 00:07:50,670 Recuerde que el lunes lo dejamos buceo profundo en cuerdas. 169 00:07:50,670 --> 00:07:52,820 Así que estábamos tratando con la cadena "Zamyla." 170 00:07:52,820 --> 00:07:55,130 Y estábamos reconociendo el hecho de que podemos tratar 171 00:07:55,130 --> 00:07:57,510 "Zamyla" como una secuencia de caracteres. 172 00:07:57,510 --> 00:07:59,740 Y recordemos que hemos aprendido la notación soporte. 173 00:07:59,740 --> 00:08:01,995 Así que si esto se almacenaron en una cadena "s", luego 174 00:08:01,995 --> 00:08:05,860 si dijéramos s soporte de 0, que lo haría indicar la Z. letra mayúscula 175 00:08:05,860 --> 00:08:09,790 Y si dijéramos s soporte 1, que indicaría la primera minúscula, 176 00:08:09,790 --> 00:08:14,220 y así sucesivamente hasta s abrazadera 5, lo que indicaría la última a. 177 00:08:14,220 --> 00:08:17,090 >> Ahora recuerde que el longitud de esta cadena es 6, 178 00:08:17,090 --> 00:08:23,220 pero los índices en la cadena son 0 a 5, Z a través de ese durar. 179 00:08:23,220 --> 00:08:28,650 Así que esto ahora se inscribe en un panorama más amplio de la memoria de su computadora, su memoria RAM. 180 00:08:28,650 --> 00:08:32,020 Por lo tanto el programa que alguna parte usted está funcionando su ordenador 181 00:08:32,020 --> 00:08:34,780 hay que recordar Zamyla en algún lugar de la memoria. 182 00:08:34,780 --> 00:08:36,029 Así que puedo tener un voluntario? 183 00:08:36,029 --> 00:08:38,840 184 00:08:38,840 --> 00:08:40,181 Sí por favor. 185 00:08:40,181 --> 00:08:50,120 186 00:08:50,120 --> 00:08:51,500 ¿Y cuál es tu nombre? 187 00:08:51,500 --> 00:08:52,410 >> DEAN: Dean. 188 00:08:52,410 --> 00:08:53,550 >> ROB BOWDEN: Dean? 189 00:08:53,550 --> 00:08:54,910 Encantado de conocerte, Dean. 190 00:08:54,910 --> 00:08:58,240 Así que ven aquí, y vamos a tener que dibujar 191 00:08:58,240 --> 00:09:00,740 en nuestro bonito diseño ingenioso de la memoria. 192 00:09:00,740 --> 00:09:05,950 Ahora me gusta pensar en la memoria como una tira larga de bytes, 193 00:09:05,950 --> 00:09:11,090 pero sólo con fines de exhibición vamos simplemente de izquierda a derecha, de arriba abajo. 194 00:09:11,090 --> 00:09:11,590 ¿De acuerdo? 195 00:09:11,590 --> 00:09:22,030 >> Así que voy a mostrar una program-- Getstrings.c. 196 00:09:22,030 --> 00:09:25,760 Y por lo que todo este programa es haciendo es solicitar cuatro cuerdas 197 00:09:25,760 --> 00:09:28,830 por parte del usuario con GetString de impresión y luego 198 00:09:28,830 --> 00:09:30,950 lo que primero entró en cadena era. 199 00:09:30,950 --> 00:09:32,840 Estamos haciendo caso omiso del dos al cuatro. 200 00:09:32,840 --> 00:09:33,610 OK. 201 00:09:33,610 --> 00:09:38,210 Así que aquí ahora-- cuando Yo primero s1 petición. 202 00:09:38,210 --> 00:09:39,740 Así que usted es el ordenador. 203 00:09:39,740 --> 00:09:41,680 Y va a implementar GetString. 204 00:09:41,680 --> 00:09:46,710 Así que usted solicita una cadena de mí, y yo digo, está bien, Dean. 205 00:09:46,710 --> 00:09:47,900 Dar la cadena "Dean". 206 00:09:47,900 --> 00:09:50,300 >> Así en algún lugar de memoria que que recordar "Dean". 207 00:09:50,300 --> 00:09:52,160 Así que escribir en la memoria alguna parte. 208 00:09:52,160 --> 00:09:58,270 209 00:09:58,270 --> 00:09:59,210 Perfecto. 210 00:09:59,210 --> 00:09:59,880 OK. 211 00:09:59,880 --> 00:10:01,740 Así que ahora que hemos S2. 212 00:10:01,740 --> 00:10:03,869 Y s2 va a ser una petición a GetString. 213 00:10:03,869 --> 00:10:05,160 Así que voy a entrar en una cadena. 214 00:10:05,160 --> 00:10:08,720 Voy a entrar en "Hannah". 215 00:10:08,720 --> 00:10:10,586 Así, entre "Hannah" en algún lugar en la memoria. 216 00:10:10,586 --> 00:10:18,860 217 00:10:18,860 --> 00:10:19,360 Sí. 218 00:10:19,360 --> 00:10:23,000 A-H. 219 00:10:23,000 --> 00:10:25,550 >> OK, así que ahora s3. 220 00:10:25,550 --> 00:10:28,380 Y va a ser otro solicitar a GetString. 221 00:10:28,380 --> 00:10:37,020 Y lo que ahora escriba "María". 222 00:10:37,020 --> 00:10:37,520 Correcto. 223 00:10:37,520 --> 00:10:40,980 Y luego hay una última solicitud a GetString, s4. 224 00:10:40,980 --> 00:10:42,580 Así que, yo no lo sé. 225 00:10:42,580 --> 00:10:45,640 ¿Qué tal vamos con antidisestablishmentarianism. 226 00:10:45,640 --> 00:10:49,460 Así que entrar en esa en la memoria. 227 00:10:49,460 --> 00:10:50,400 Sí. 228 00:10:50,400 --> 00:10:53,970 Así que hacer "Rob". 229 00:10:53,970 --> 00:10:54,560 >> OK. 230 00:10:54,560 --> 00:10:58,410 Así que ahora explain-- ¿por qué deja estos espacios? 231 00:10:58,410 --> 00:11:01,340 ¿Por qué tiene esto en blanco espacio aquí, aquí, y aquí arriba? 232 00:11:01,340 --> 00:11:05,170 233 00:11:05,170 --> 00:11:05,670 Sí. 234 00:11:05,670 --> 00:11:09,450 Así notar cuando voy imprimir s1-- así que si nos 235 00:11:09,450 --> 00:11:11,890 tenía en marcha "Hannah" justo al lado de "Dean" 236 00:11:11,890 --> 00:11:14,360 ¿cómo sabemos cuando la cadena "Dean" termina? 237 00:11:14,360 --> 00:11:19,470 Así que la impresión de la cadena s1 puede tener acaba de imprimir "DeanHannahMariaRob" 238 00:11:19,470 --> 00:11:22,720 si no tiene ninguna pista cuando "Dean" en realidad termina. 239 00:11:22,720 --> 00:11:23,240 >> Correcto. 240 00:11:23,240 --> 00:11:27,650 Así que en la memoria la forma en que realmente representar a este final de una cadena 241 00:11:27,650 --> 00:11:29,940 es con barra invertida cero. 242 00:11:29,940 --> 00:11:32,620 Así que este espacio es exactamente lo que queríamos. 243 00:11:32,620 --> 00:11:34,040 Debe ser una barra invertida cero. 244 00:11:34,040 --> 00:11:37,690 Esta será una barra invertida cero, y esto será una barra invertida cero. 245 00:11:37,690 --> 00:11:41,585 Y usted puede tener un fabuloso premio por ser un voluntario perfecto. 246 00:11:41,585 --> 00:11:44,910 247 00:11:44,910 --> 00:11:45,860 Tome una bola de la tensión! 248 00:11:45,860 --> 00:11:49,040 249 00:11:49,040 --> 00:11:49,700 >> OK. 250 00:11:49,700 --> 00:11:54,420 Así que esta barra invertida carácter cero es cómo indicar el final de una cadena. 251 00:11:54,420 --> 00:11:57,120 Es la forma en que un programa determinado quiere imprimir una cadena, 252 00:11:57,120 --> 00:11:59,760 es cómo-- recordamos que aprendimos la función strlen la semana pasada? 253 00:11:59,760 --> 00:12:00,940 Longitud de la cadena? 254 00:12:00,940 --> 00:12:03,770 Es la forma de longitud de la cadena es capaz de determinar cuánto tiempo una cadena es. 255 00:12:03,770 --> 00:12:05,810 Simplemente sigue iterando sobre los caracteres 256 00:12:05,810 --> 00:12:08,217 hasta que encuentra el barra invertida carácter cero. 257 00:12:08,217 --> 00:12:11,050 Así que lo importante darse cuenta sobre el carácter de barra invertida cero 258 00:12:11,050 --> 00:12:14,950 Se está representado por todos los ceros en los bits. 259 00:12:14,950 --> 00:12:18,980 Así cuenta de que esto es distinto del carácter cero. 260 00:12:18,980 --> 00:12:23,010 Así que el carácter cero, si usted recuerda en el ejemplo que ha dado al final 261 00:12:23,010 --> 00:12:27,360 de la conferencia donde los personajes mapa a-- como mapas Capital a 65. 262 00:12:27,360 --> 00:12:29,130 Minúscula mapas a 97. 263 00:12:29,130 --> 00:12:30,890 B minúscula sería 98. 264 00:12:30,890 --> 00:12:35,220 Así que el número 0 mapas a-- no lo hago saber de la parte superior de mi cabeza. 265 00:12:35,220 --> 00:12:36,400 44 o 45. 266 00:12:36,400 --> 00:12:37,890 En algún lugar en esa región. 267 00:12:37,890 --> 00:12:40,850 >> Así que el carácter 0 es un número real. 268 00:12:40,850 --> 00:12:44,350 Pero cero barra invertida mapas a todos los bits cero. 269 00:12:44,350 --> 00:12:46,380 Así que hay una distinción entre barra invertida cero, 270 00:12:46,380 --> 00:12:48,450 que llamaremos el terminador nulo. 271 00:12:48,450 --> 00:12:53,210 Hay una distinción entre barra invertida cero y el carácter cero. 272 00:12:53,210 --> 00:12:54,350 >> Correcto. 273 00:12:54,350 --> 00:12:57,520 Así que hablar un poco más sobre las cuerdas. 274 00:12:57,520 --> 00:13:01,470 Así que vemos aquí es así como sería distribuida en la memoria. 275 00:13:01,470 --> 00:13:07,940 Así que esta idea de cadenas como una secuencia de characters-- por lo que el equipo oficial 276 00:13:07,940 --> 00:13:10,750 sciency plazo para la secuencia es una matriz. 277 00:13:10,750 --> 00:13:13,790 Así que podríamos llamar una cadena una serie de caracteres. 278 00:13:13,790 --> 00:13:17,770 Y en realidad hay otros datos tipos que podemos hacer arreglos de. 279 00:13:17,770 --> 00:13:19,975 >> Así que para motivar a esto, mira un ejemplo. 280 00:13:19,975 --> 00:13:22,810 281 00:13:22,810 --> 00:13:29,812 Lo llamaremos ages0.c voy copiar y pegar nuestra plantilla. 282 00:13:29,812 --> 00:13:32,470 283 00:13:32,470 --> 00:13:33,410 OK. 284 00:13:33,410 --> 00:13:39,378 Así que en este programa lo que querer hacer es agarrar la edad 285 00:13:39,378 --> 00:13:45,160 de tres estudiantes en el curso. 286 00:13:45,160 --> 00:13:49,240 Así sabemos que el int age-- y ahora voy a decir 0. 287 00:13:49,240 --> 00:13:53,140 Así que es posible que desee decir edad1, pero a efectos que veremos en breve, 288 00:13:53,140 --> 00:13:57,187 Voy a decir int age0 equivale getInt. 289 00:13:57,187 --> 00:13:59,270 Así que la misma llamada a getInt que hemos estado usando yo 290 00:13:59,270 --> 00:14:01,561 no pasar a ser incitando diciendo: "dame la edad." 291 00:14:01,561 --> 00:14:03,120 Pero justo solicite. 292 00:14:03,120 --> 00:14:06,510 >> Y edad1 equivale getInt. 293 00:14:06,510 --> 00:14:09,600 Y int edad2 equivale getInt. 294 00:14:09,600 --> 00:14:14,070 Así que, de nuevo, tres estudiantes, pero en última instancia, los índices variables 295 00:14:14,070 --> 00:14:16,890 son age0 través edad2. 296 00:14:16,890 --> 00:14:17,550 OK. 297 00:14:17,550 --> 00:14:23,960 Así que este programa va a hacer lo que sea que queremos con age0, edad1 y edad2, 298 00:14:23,960 --> 00:14:27,670 pero este programa en última instancia funciona para tres estudiantes. 299 00:14:27,670 --> 00:14:28,380 >> OK. 300 00:14:28,380 --> 00:14:32,110 Así que ahora lo que si quiero cuatro estudiantes? 301 00:14:32,110 --> 00:14:36,000 Bueno, voy a tener que volver en mi código, cambiar el comentario, 302 00:14:36,000 --> 00:14:39,840 y ahora tenemos un int edad3 equivale getInt. 303 00:14:39,840 --> 00:14:40,610 OK. 304 00:14:40,610 --> 00:14:43,660 Así que ve el problema aquí? 305 00:14:43,660 --> 00:14:47,310 Cuál es el problema con este tipo de configuración? 306 00:14:47,310 --> 00:14:47,810 Sí. 307 00:14:47,810 --> 00:14:53,110 308 00:14:53,110 --> 00:14:53,610 Sí. 309 00:14:53,610 --> 00:14:56,360 Así que estamos creando un variable para cada estudiante. 310 00:14:56,360 --> 00:15:00,140 Ahora que funciona, pero en última instancia, ¿qué pasa si ahora 311 00:15:00,140 --> 00:15:06,500 digo: "Quiero tomar la edad de ocho estudiantes o 16 estudiantes 312 00:15:06,500 --> 00:15:11,340 o los sin embargo muchos estudiantes de los cientos de estudiantes en CS50 313 00:15:11,340 --> 00:15:16,750 o los miles de estudiantes en el campus o los miles de millones de personas en el mundo? 314 00:15:16,750 --> 00:15:19,130 Así que en última instancia, esto no es sostenible. 315 00:15:19,130 --> 00:15:21,990 Cada vez que se ve a sí mismo copiando y pegar el código de este tipo, 316 00:15:21,990 --> 00:15:25,050 por lo general, debe sentir que hay una mejor manera. 317 00:15:25,050 --> 00:15:31,290 >> Así que aquí es donde introducimos una declaración de matriz. 318 00:15:31,290 --> 00:15:34,564 Así que cuando se declara una matriz, esto es lo que el formato general 319 00:15:34,564 --> 00:15:35,480 va a ser similar. 320 00:15:35,480 --> 00:15:36,664 Vamos a decir que el tipo. 321 00:15:36,664 --> 00:15:38,830 y luego vamos a dar el nombre de esa matriz, 322 00:15:38,830 --> 00:15:41,150 tal como lo definimos ninguna variable dada. 323 00:15:41,150 --> 00:15:43,980 Y, finalmente, estamos utilizando esta notación soporte de nuevo 324 00:15:43,980 --> 00:15:47,480 pero en un contexto diferente de cómo estábamos usando antes. 325 00:15:47,480 --> 00:15:51,860 >> Así que aquí esto parece normal declaración de variables que hemos visto. 326 00:15:51,860 --> 00:15:54,890 Así que hemos visto int x punto y coma antes. 327 00:15:54,890 --> 00:16:00,020 Bueno, ahora podríamos ver algo como int x soportes 5. 328 00:16:00,020 --> 00:16:04,020 Y poner esta idea en la Programa getInt que tener-- 329 00:16:04,020 --> 00:16:08,850 por lo que podemos poner en práctica esto de la misma manera. 330 00:16:08,850 --> 00:16:13,630 >> Digamos que en CS tendemos a utilizar n como el número de algo. 331 00:16:13,630 --> 00:16:16,150 Así que aquí vamos a almacenar cuatro estudiantes. 332 00:16:16,150 --> 00:16:25,960 Y ahora podemos decir int edad soporte no N- bastante conseguirlo yet-- 333 00:16:25,960 --> 00:16:32,210 para declarar una matriz de cuatro estudiantes. 334 00:16:32,210 --> 00:16:38,050 Entonces, ¿cómo esto se verá en memoria será similar a este. 335 00:16:38,050 --> 00:16:39,570 Desactive esta. 336 00:16:39,570 --> 00:16:46,606 Y vamos a tener un lugar en memory-- voy a poner esta allá arriba. 337 00:16:46,606 --> 00:16:52,690 338 00:16:52,690 --> 00:16:53,808 >> Así en algún lugar de la memoria. 339 00:16:53,808 --> 00:16:58,760 340 00:16:58,760 --> 00:16:59,727 Uno dos tres CUATRO. 341 00:16:59,727 --> 00:17:03,383 342 00:17:03,383 --> 00:17:09,849 Tenemos cuatro enteros en una fila para esta serie de cuatro números enteros. 343 00:17:09,849 --> 00:17:13,820 Así, en la actualidad, ¿cuál es la tamaño de una de estas cajas? 344 00:17:13,820 --> 00:17:17,190 345 00:17:17,190 --> 00:17:17,690 Sí. 346 00:17:17,690 --> 00:17:18,390 Es cuatro bytes. 347 00:17:18,390 --> 00:17:19,690 Es de 32 bits. 348 00:17:19,690 --> 00:17:22,310 Así que ahora esto es diferente de la matriz que nos 349 00:17:22,310 --> 00:17:24,020 vio anteriormente, el conjunto de caracteres. 350 00:17:24,020 --> 00:17:28,540 En una cadena de cada caja fue sólo un byte, porque un personaje es sólo un byte. 351 00:17:28,540 --> 00:17:32,170 Pero con una matriz de enteros, cada uno caja tiene que ser cuatro bytes en orden 352 00:17:32,170 --> 00:17:34,060 para adaptarse a todo un número entero. 353 00:17:34,060 --> 00:17:37,197 Así que esto es lo que una serie de cuatro enteros se vería así. 354 00:17:37,197 --> 00:17:40,510 355 00:17:40,510 --> 00:17:43,870 >> Y luego de vuelta a código. 356 00:17:43,870 --> 00:17:47,460 Ahora queremos realmente tienda enteros en esa matriz. 357 00:17:47,460 --> 00:17:53,470 Así que ahora este es un muy, muy, muy patrón común que en algún punto 358 00:17:53,470 --> 00:17:54,680 convertido en la memoria muscular. 359 00:17:54,680 --> 00:17:56,710 Así int i es igual a 0. 360 00:17:56,710 --> 00:17:57,940 i menor que n. 361 00:17:57,940 --> 00:18:01,850 i plus plus. 362 00:18:01,850 --> 00:18:05,790 Grupo de edad i es igual getInt. 363 00:18:05,790 --> 00:18:15,100 >> Así que este bucle, este formato, usted debe conseguir muy acostumbrado. 364 00:18:15,100 --> 00:18:20,010 Así que esto es por lo general la forma en que lo haremos iterar sobre casi cualquier matriz. 365 00:18:20,010 --> 00:18:23,690 Ahora note este tipo de explica por qué desde el principio 366 00:18:23,690 --> 00:18:29,870 que no teníamos para los bucles de ir para int i es igual a 1, i de menos de o igual a 10. 367 00:18:29,870 --> 00:18:34,200 La razón es que a partir de cero hace que este trabajo bien con matrices. 368 00:18:34,200 --> 00:18:36,270 Así que las matrices son cero indexados. 369 00:18:36,270 --> 00:18:40,360 Si esta matriz es de longitud 4, los índices son del 0 al 3. 370 00:18:40,360 --> 00:18:42,880 >> Así que a través de la primera iteración de este bucle for 371 00:18:42,880 --> 00:18:49,930 vamos a establecer la edad Soporte 0 igual a una llamada a getInt. 372 00:18:49,930 --> 00:18:52,440 Así que lo que me pasó para entrar en el teclado. 373 00:18:52,440 --> 00:18:56,970 En el segundo paso, estamos el establecimiento de edad1 igual a getInt. 374 00:18:56,970 --> 00:18:58,230 Tercer paso, edad2. 375 00:18:58,230 --> 00:18:59,880 Edad3 pase final. 376 00:18:59,880 --> 00:19:05,750 Así que si en la primera pasada del bucle Entro en el número 4 en el teclado, 377 00:19:05,750 --> 00:19:07,740 entonces vamos a insertar un 4 aquí. 378 00:19:07,740 --> 00:19:11,470 Si en la segunda pasada entro 50, vamos a poner un 50 aquí. 379 00:19:11,470 --> 00:19:15,180 En el tercer paso que podría entrar en negativo 1, 1 negativo, 380 00:19:15,180 --> 00:19:21,810 y, finalmente, si entro 0-- y Ahora recuerde que esto era Índice tres. 381 00:19:21,810 --> 00:19:25,350 >> Después de bucle, i es va a ser incrementado a 4. 382 00:19:25,350 --> 00:19:27,770 i ya no es menor que n, que es 4. 383 00:19:27,770 --> 00:19:29,840 Y partimos fuera del circuito. 384 00:19:29,840 --> 00:19:32,578 Entonces, ¿qué tendría de malo esto? 385 00:19:32,578 --> 00:19:38,140 386 00:19:38,140 --> 00:19:38,729 [Inaudible]? 387 00:19:38,729 --> 00:19:39,604 AUDIENCIA: [inaudible] 388 00:19:39,604 --> 00:19:45,880 389 00:19:45,880 --> 00:19:46,400 >> Sí. 390 00:19:46,400 --> 00:19:51,550 Así que el array sólo tiene cuatro lugares, lo que significa que los índices de 0 a 3. 391 00:19:51,550 --> 00:19:55,630 Así que si este fuera el caso, lo haría tomar el valor 4 en algún momento. 392 00:19:55,630 --> 00:20:00,910 grupo de edad 4 será la creación cualquier cosa que esté por aquí 393 00:20:00,910 --> 00:20:02,920 lo que tengo que decir, introduzca 6. 394 00:20:02,920 --> 00:20:05,010 Eso va a configurar esta a 6. 395 00:20:05,010 --> 00:20:06,560 >> Pero no sabemos lo que hay por aquí. 396 00:20:06,560 --> 00:20:08,836 Esto no es memoria que teníamos acceso. 397 00:20:08,836 --> 00:20:10,710 Así que si usted recuerda de la conferencia anterior, 398 00:20:10,710 --> 00:20:14,350 que estaba imprimiendo valores de Zamyla y en algún momento él golpeó esta segmentación 399 00:20:14,350 --> 00:20:17,990 culpa. Así que probablemente va a ver muchos fallos de segmentación como usted 400 00:20:17,990 --> 00:20:20,530 poner en práctica algunos de los conjuntos de problemas. 401 00:20:20,530 --> 00:20:24,950 Pero esta es una de las formas en que usted puede encontrar una segmentación 402 00:20:24,950 --> 00:20:28,540 culpa, cuando se inicia el acceso la memoria de manera que no debe ser. 403 00:20:28,540 --> 00:20:34,117 Así que no tenemos acceso a este lugar y esto es un error. 404 00:20:34,117 --> 00:20:37,760 405 00:20:37,760 --> 00:20:40,190 >> Así que esto es mejor. 406 00:20:40,190 --> 00:20:45,820 Ahora hay todavía una pequeña problema con este código. 407 00:20:45,820 --> 00:20:50,720 Y eso es básicamente que somos sigue estancado en cuatro estudiantes. 408 00:20:50,720 --> 00:20:52,940 Ahora bien, si quiero usar ocho estudiantes, OK. 409 00:20:52,940 --> 00:20:54,350 No es gran cosa. 410 00:20:54,350 --> 00:20:58,120 Puedo entrar, cambiar la comentar y cambiar n. 411 00:20:58,120 --> 00:20:59,760 Ahora esto va a funcionar con ocho estudiantes. 412 00:20:59,760 --> 00:21:02,190 Si compilo esto y correr esto, se mostrará mí-- 413 00:21:02,190 --> 00:21:07,870 solicitará enteros para ocho estudiantes y se acaba de trabajar. 414 00:21:07,870 --> 00:21:11,850 Pero es menos que ideal a necesitar recompilar el programa cada vez 415 00:21:11,850 --> 00:21:15,960 Quiero cambiar el número de estudiantes que quiero entrar en las edades para. 416 00:21:15,960 --> 00:21:22,990 >> Así la mejora final sobre esto, como veremos aquí-- estamos 417 00:21:22,990 --> 00:21:26,177 va a solicitar el número de personas. 418 00:21:26,177 --> 00:21:28,010 Aquí tenemos un número de las personas en las habitaciones 419 00:21:28,010 --> 00:21:29,880 o cualquier edades de las personas en la habitación. 420 00:21:29,880 --> 00:21:33,300 Pero vamos a solicitar el número de personas en la sala por parte del usuario. 421 00:21:33,300 --> 00:21:36,171 Así que este es exactamente el mismo do-while bucle que hemos visto antes. 422 00:21:36,171 --> 00:21:37,920 Es exactamente el mismo do-while que 423 00:21:37,920 --> 00:21:40,050 se puede implementar en el set problema. 424 00:21:40,050 --> 00:21:43,102 Así que, mientras que son entrar en un n menos de 1, 425 00:21:43,102 --> 00:21:45,310 por lo que no tiene que estar en menos una persona en la habitación. 426 00:21:45,310 --> 00:21:47,407 Como siempre y cuando sean entrar en un n menos de 1, 427 00:21:47,407 --> 00:21:48,990 entonces vamos a seguir haciendo de nuevo. 428 00:21:48,990 --> 00:21:50,906 Por favor, introduzca el número de personas en la habitación. 429 00:21:50,906 --> 00:21:53,550 Ahora, una vez que tengamos el número de personas en el habitación-- 430 00:21:53,550 --> 00:21:58,020 por lo que podría entrar en que hay 200 personas en esta sala. 431 00:21:58,020 --> 00:22:05,480 Entonces aquí vamos a venir y declarar una matriz de tamaño 200. 432 00:22:05,480 --> 00:22:10,220 Estamos declarando matriz que es lo suficientemente grande como para contener 200 edades. 433 00:22:10,220 --> 00:22:15,370 Al bajar, es el bucle for que usted conseguirá muy acostumbrado. 434 00:22:15,370 --> 00:22:19,490 Así iterar sobre esta matriz, asignando a cada ubicación 435 00:22:19,490 --> 00:22:23,020 en esa matriz un entero, y a continuación, en última instancia, aquí estamos 436 00:22:23,020 --> 00:22:28,340 sólo conseguir un ejemplo de la iteración sobre esa matriz, no para asignar valores, 437 00:22:28,340 --> 00:22:30,150 pero para acceder valores. 438 00:22:30,150 --> 00:22:33,810 >> Así que aquí vemos que están diciendo, de un año a partir de ahora, 439 00:22:33,810 --> 00:22:40,470 física% i estará% i años de edad, donde el primero% i es i + 1. 440 00:22:40,470 --> 00:22:43,010 Así que i es la variable de índice. 441 00:22:43,010 --> 00:22:49,420 Y la segunda% i va a ser el valor almacenado en la matriz edades plus 1. 442 00:22:49,420 --> 00:22:54,217 Así que esta más 1 es sólo porque somos diciendo-- esta más 1, i más 1 edades. 443 00:22:54,217 --> 00:22:57,050 Este plus 1 es sólo porque somos diciendo: un año a partir de ahora la persona 444 00:22:57,050 --> 00:22:58,280 será este viejo. 445 00:22:58,280 --> 00:23:01,080 >> Entonces ¿por qué es esto que más 1? 446 00:23:01,080 --> 00:23:04,064 ¿Por qué tenemos un plus 1 allí? 447 00:23:04,064 --> 00:23:04,564 Sí. 448 00:23:04,564 --> 00:23:07,410 449 00:23:07,410 --> 00:23:07,930 Sí. 450 00:23:07,930 --> 00:23:10,510 Así que recuerde matrices son cero indexados. 451 00:23:10,510 --> 00:23:14,840 Así que si estamos imprimiendo esto para alguien que acaba de leer la salida, 452 00:23:14,840 --> 00:23:19,380 entonces probablemente quieren ver algo como persona uno, persona número uno, 453 00:23:19,380 --> 00:23:21,160 será de 20 años de edad. 454 00:23:21,160 --> 00:23:23,570 Persona número dos será de 15 años de edad. 455 00:23:23,570 --> 00:23:27,420 Ellos preferirían no ver persona número cero es de 15 años de edad. 456 00:23:27,420 --> 00:23:36,460 >> Así que la compilación de esto y sólo ver lo que parece como-- Crear un espacio. 457 00:23:36,460 --> 00:23:43,560 Hacer edades compilaciones. 458 00:23:43,560 --> 00:23:45,080 Ejecución de las edades. 459 00:23:45,080 --> 00:23:46,580 Vemos número de personas en la habitación. 460 00:23:46,580 --> 00:23:48,850 Así que voy a decir que hay tres personas en la habitación. 461 00:23:48,850 --> 00:23:54,000 Edad de la persona número uno, digamos 15, 20, 25. 462 00:23:54,000 --> 00:23:59,680 Y ahora voy a decir dentro de un año ahora van a ser 16, 21, 26. 463 00:23:59,680 --> 00:24:02,900 Vamos a ver que esto funciona con un n que no es igual a 3. 464 00:24:02,900 --> 00:24:07,940 Así que si digo número de personas es 5, uno, dos, tres, dos, uno, dentro de un año 465 00:24:07,940 --> 00:24:11,170 van a ser dos, tres, cuatro, tres, dos años de edad. 466 00:24:11,170 --> 00:24:16,500 Así que pude igual fácilmente n han ser 10.000. 467 00:24:16,500 --> 00:24:21,270 Ahora voy a estar sentado aquí durante bastante un tiempo de entrar en las edades, pero esto funciona. 468 00:24:21,270 --> 00:24:26,000 >> Así que ahora en la memoria algún lugar nos tener una matriz de tamaño 10000, 469 00:24:26,000 --> 00:24:28,830 así que en última instancia 40000 bytes, porque hay 470 00:24:28,830 --> 00:24:31,222 cuatro bytes para cada uno de esos números enteros. 471 00:24:31,222 --> 00:24:33,180 Así que hay una gran variedad de tamaño de 10.000 en lo que podamos 472 00:24:33,180 --> 00:24:36,201 almacenar las edades de esas 10.000 personas. 473 00:24:36,201 --> 00:24:36,700 Correcto. 474 00:24:36,700 --> 00:24:40,070 Preguntas sobre nada de esto? 475 00:24:40,070 --> 00:24:41,892 Sí. 476 00:24:41,892 --> 00:24:43,350 ¿Qué pasa si usted le dio un número negativo? 477 00:24:43,350 --> 00:24:44,870 Veamos qué pasa. 478 00:24:44,870 --> 00:24:49,320 Así que en este número especial caso-- de personas en la habitación, uno negativo. 479 00:24:49,320 --> 00:24:52,580 Rechazó que, porque hasta aquí nos ha tocado 480 00:24:52,580 --> 00:24:57,180 estar manejando el hecho de que si n es menos de la que vamos a volver a preguntar. 481 00:24:57,180 --> 00:25:01,780 Si intenta declarar una matriz de tamaño negativo, 482 00:25:01,780 --> 00:25:03,950 por lo general no funciona. 483 00:25:03,950 --> 00:25:05,570 >> Entonces intentemos. 484 00:25:05,570 --> 00:25:08,000 Vamos a ignorar lo que sea valor que la entrada para n 485 00:25:08,000 --> 00:25:10,571 y decir las edades int negativo. 486 00:25:10,571 --> 00:25:12,410 Vamos a ver si es que compila. 487 00:25:12,410 --> 00:25:14,100 No estoy seguro. 488 00:25:14,100 --> 00:25:14,920 No. 489 00:25:14,920 --> 00:25:18,280 Así las edades se declara como un matriz con un tamaño negativo. 490 00:25:18,280 --> 00:25:22,540 Así adelantado que reconoce un conjunto no puede ser de tamaño negativo y lo rechaza. 491 00:25:22,540 --> 00:25:26,840 Ahora, si no manejamos este bucle do-while correctamente, 492 00:25:26,840 --> 00:25:28,810 si no nos marchábamos si n es menor que 1-- 493 00:25:28,810 --> 00:25:32,690 digamos que simplemente no tenía en absoluto 494 00:25:32,690 --> 00:25:35,940 y en su lugar nos agarramos un entero. 495 00:25:35,940 --> 00:25:40,710 No importa lo que entero es, declaramos un arreglo de ese tamaño. 496 00:25:40,710 --> 00:25:44,250 >> Así que el compilador no puede posiblemente quejarse ahora. 497 00:25:44,250 --> 00:25:48,780 Si compilo esto-- por lo que no se puede quejar, 498 00:25:48,780 --> 00:25:51,480 porque no puede saber que soy va a introducir un número negativo, 499 00:25:51,480 --> 00:25:52,550 que podría ser válido. 500 00:25:52,550 --> 00:25:54,633 Por todo lo que sabe, yo podría introduzca un número positivo, 501 00:25:54,633 --> 00:25:56,000 que es perfectamente válido. 502 00:25:56,000 --> 00:26:01,090 Así que me imagino que si entro negativo 1 personas en la sala, la segmentación de culpa. 503 00:26:01,090 --> 00:26:06,040 >> Tan bien. 504 00:26:06,040 --> 00:26:13,160 Así que vamos a añadir esta atrás justo mantener lo que era originalmente. 505 00:26:13,160 --> 00:26:15,640 Así que las edades. 506 00:26:15,640 --> 00:26:18,120 Ahora si quiero probar un negativo age-- así que vamos a 507 00:26:18,120 --> 00:26:19,710 dicen que hay cinco personas en la habitación. 508 00:26:19,710 --> 00:26:23,180 Edad de la persona número uno es negativo 4, persona de tres 509 00:26:23,180 --> 00:26:26,500 es cero, persona tres-- Aceptar. 510 00:26:26,500 --> 00:26:29,850 Así que aquí, a partir de ahora, el número de personas al año uno será negativo 3 años de edad. 511 00:26:29,850 --> 00:26:32,830 Así que probablemente no tiene sentido. 512 00:26:32,830 --> 00:26:37,220 Pero eso es sólo porque mirando en el código de todo lo que estamos haciendo 513 00:26:37,220 --> 00:26:40,260 está solicitando getInt. 514 00:26:40,260 --> 00:26:44,110 >> Ahora, si hubiéramos tenido la Función GetPositiveInt 515 00:26:44,110 --> 00:26:49,690 o que habíamos simplemente hecho esto tipo de mismo bucle mientras allá abajo, 516 00:26:49,690 --> 00:26:52,340 entonces esto funcionaría perfectamente bien. 517 00:26:52,340 --> 00:26:54,200 Pero en este particular, caso, nosotros no hacemos 518 00:26:54,200 --> 00:26:57,772 pasar a ser el manejo de valores negativos. 519 00:26:57,772 --> 00:26:59,147 ¿Alguna otra pregunta sobre matrices? 520 00:26:59,147 --> 00:27:02,290 521 00:27:02,290 --> 00:27:03,250 OK. 522 00:27:03,250 --> 00:27:09,380 >> Así que ahora hemos visto matrices. 523 00:27:09,380 --> 00:27:12,500 Y vamos a tener que utilizar esto para los argumentos de línea de comandos. 524 00:27:12,500 --> 00:27:14,680 Así que en conjunto de problemas dos-- Sé que muchos de ustedes 525 00:27:14,680 --> 00:27:18,040 aún podría estar trabajando en el set problema uno, sino de problemas de dos está subiendo. 526 00:27:18,040 --> 00:27:22,260 En el problema fijó dos, vas a deberán tratar con cadenas, matrices, 527 00:27:22,260 --> 00:27:23,950 y los argumentos de línea de comandos. 528 00:27:23,950 --> 00:27:26,270 >> ¿Cuáles son los argumentos de línea de comandos? 529 00:27:26,270 --> 00:27:29,570 Ahora, se puede ver aquí abajo un pequeño teaser de exactamente lo que es 530 00:27:29,570 --> 00:27:30,950 va a estar pasando. 531 00:27:30,950 --> 00:27:32,950 Vemos int main, argc inc, soportes argv cadena. 532 00:27:32,950 --> 00:27:34,560 533 00:27:34,560 --> 00:27:38,130 Así que primero vamos a tratar de interpretar lo que está tratando de decir. 534 00:27:38,130 --> 00:27:40,800 Ahora ok. 535 00:27:40,800 --> 00:27:44,637 >> Así que en la línea de comandos debe estar acostumbrarse a algunos de estos comandos 536 00:27:44,637 --> 00:27:48,580 ahora, y lo que has de ejecutar cd en el terminal antes. 537 00:27:48,580 --> 00:27:52,100 Así que si decimos pset1 cd, usted sabe que eso debe 538 00:27:52,100 --> 00:27:55,050 estar cambiando en el directorio pset1. 539 00:27:55,050 --> 00:27:59,120 >> Ahora nota que nunca has escrito un programa como esto antes. 540 00:27:59,120 --> 00:28:03,120 Cada programa que usted ha escrito, debe ejecutar, por ejemplo, el DOT recortar Mario, 541 00:28:03,120 --> 00:28:06,779 punto slash codicioso, y luego usted podría pedirá entrada. 542 00:28:06,779 --> 00:28:08,570 Ahora, eso no es lo que cambio de directorio hace. 543 00:28:08,570 --> 00:28:12,770 Cuando se ejecuta cd, no luego decir, qué directorio quieres cd en? 544 00:28:12,770 --> 00:28:17,200 En su lugar, usted acaba de decir, pset1 cd, y simplemente entra en el directorio pset1. 545 00:28:17,200 --> 00:28:20,430 >> Así que de manera similar tenemos otros ejemplos. 546 00:28:20,430 --> 00:28:21,540 hacer hola. 547 00:28:21,540 --> 00:28:25,760 Cuando se ejecuta hacer, no luego decir, qué programa te gustaría hacer? 548 00:28:25,760 --> 00:28:29,620 Usted acaba de decir, en el línea de comandos hacen hola. 549 00:28:29,620 --> 00:28:31,060 >> Move es otro ejemplo. 550 00:28:31,060 --> 00:28:34,840 Éste nos estamos moviendo la mario.c presentar hasta un directorio. 551 00:28:34,840 --> 00:28:38,060 Así que ahora sabemos con este ejemplo realmente estamos pasando dos argumentos. 552 00:28:38,060 --> 00:28:42,090 Hay mario.c como primer argumento, y punto punto es el segundo argumento. 553 00:28:42,090 --> 00:28:46,140 Y luego cuando se ejecuta hace, usted ver que realmente largo comando line-- 554 00:28:46,140 --> 00:28:50,580 que realmente largo de comandos impreso en la línea de comandos. 555 00:28:50,580 --> 00:28:53,590 Así que mucho command-- este es sólo una pequeña parte de la misma, 556 00:28:53,590 --> 00:28:56,090 pero ahora tenemos tres argumentos de la línea de comandos. 557 00:28:56,090 --> 00:28:59,750 Dot guión cero, hola, y hello.c. 558 00:28:59,750 --> 00:29:03,497 >> Así que estos son de línea de comandos Las discusiones, argumentos 559 00:29:03,497 --> 00:29:05,580 que está pasando en el línea de comandos para que 560 00:29:05,580 --> 00:29:08,680 no tiene que ser impulsado cuando se ejecuta el programa. 561 00:29:08,680 --> 00:29:13,090 Sería frustrante si cuando Ejecutó sonido metálico que dijo: "Está bien, 562 00:29:13,090 --> 00:29:15,630 que program-- que archivo estás compilando? 563 00:29:15,630 --> 00:29:17,010 Hola C. 564 00:29:17,010 --> 00:29:19,440 Lo banderas ¿verdad gustaría entrar? o guión. 565 00:29:19,440 --> 00:29:21,190 Qué te gustaría el archivo que se llama? 566 00:29:21,190 --> 00:29:21,690 Hola. 567 00:29:21,690 --> 00:29:25,290 No, sólo ejecuta clang dash o hola hello.c. 568 00:29:25,290 --> 00:29:28,820 >> Así que mirando hacia atrás en esto. 569 00:29:28,820 --> 00:29:32,920 Ahora argc argc-- es el recuento de argumentos. 570 00:29:32,920 --> 00:29:36,620 Es el número de la línea de comandos argumentos introducidos en la línea de comandos. 571 00:29:36,620 --> 00:29:39,720 Bueno, técnicamente argv-- la v significa vector, 572 00:29:39,720 --> 00:29:41,460 que básicamente significa matriz. 573 00:29:41,460 --> 00:29:42,680 Pero se puede ignorar eso. 574 00:29:42,680 --> 00:29:47,540 Argv-- tenemos argv cuerda, así soportes argv cadena. 575 00:29:47,540 --> 00:29:50,150 Así que esta es otra forma de corchetes que no has visto antes. 576 00:29:50,150 --> 00:29:52,300 Soporte de manera que hemos visto notación cuando hemos dicho, 577 00:29:52,300 --> 00:29:53,970 como, cadena s es igual Zamyla. 578 00:29:53,970 --> 00:29:56,910 s 0 soporte accede a la Z. carácter 579 00:29:56,910 --> 00:30:00,720 >> También hemos visto corchetes cuando dijimos int edades acorchetan 5. 580 00:30:00,720 --> 00:30:03,160 Eso declaró una matriz de tamaño 5. 581 00:30:03,160 --> 00:30:06,280 Así que aquí es una versión de la soportes que no han visto antes. 582 00:30:06,280 --> 00:30:09,630 Así que este tipo de argv cadena que sería completamente familiarizado 583 00:30:09,630 --> 00:30:12,050 que no sería más que una cadena. 584 00:30:12,050 --> 00:30:14,520 Ahora los paréntesis indican que se trata de una matriz. 585 00:30:14,520 --> 00:30:19,920 Así soportes argv cadena de medios que argv es una matriz de cadenas. 586 00:30:19,920 --> 00:30:22,540 Ahora técnicamente una cadena es una serie de caracteres. 587 00:30:22,540 --> 00:30:26,400 Así que esto es ahora una matriz de un conjunto de caracteres. 588 00:30:26,400 --> 00:30:31,490 Pero es mucho más fácil que pensar esto como una matriz de cadenas. 589 00:30:31,490 --> 00:30:34,900 >> Entonces ¿por qué podrían los soportes estar vacío? 590 00:30:34,900 --> 00:30:38,170 Al igual que, ¿por qué no podemos decir, soporte de 5, soporte n? 591 00:30:38,170 --> 00:30:40,700 592 00:30:40,700 --> 00:30:41,200 Sí. 593 00:30:41,200 --> 00:30:43,731 594 00:30:43,731 --> 00:30:44,230 Sí. 595 00:30:44,230 --> 00:30:46,396 No sabemos cuántos insumos allí van a ser. 596 00:30:46,396 --> 00:30:53,560 Así que si nos fijamos en el ejemplo sonido metálico, decimos Clang tablero o hola hello.c. 597 00:30:53,560 --> 00:30:56,710 En este caso particular, no suceda haber tres argumentos de la línea de comandos. 598 00:30:56,710 --> 00:31:00,522 Y así el brackets-- ya veremos en un segundo no sería tres. 599 00:31:00,522 --> 00:31:01,730 Técnicamente sería cuatro. 600 00:31:01,730 --> 00:31:04,030 Pero los soportes, lo haríamos por ejemplo, hay tres. 601 00:31:04,030 --> 00:31:08,220 Pero ahora, si nos fijamos en movimiento mario.c punto punto, los soportes 602 00:31:08,220 --> 00:31:09,760 nos gustaría poner dos en ellos. 603 00:31:09,760 --> 00:31:12,884 >> Y hay un montón de comandos que tener un número variable de línea de comandos 604 00:31:12,884 --> 00:31:13,620 argumentos. 605 00:31:13,620 --> 00:31:17,430 Así que lo que esta versión de la notación de corchetes indica 606 00:31:17,430 --> 00:31:20,820 es que argv es una matriz de cadenas. 607 00:31:20,820 --> 00:31:24,360 Pero no sabemos cuántos cuerdas están en esa matriz. 608 00:31:24,360 --> 00:31:27,090 ¿Y cómo entonces sabemos cómo muchas cadenas están en la matriz? 609 00:31:27,090 --> 00:31:28,870 Ese es todo el argc punto. 610 00:31:28,870 --> 00:31:32,300 argc nos dice cuánto tiempo argv es. 611 00:31:32,300 --> 00:31:36,500 >> Así que la última cosa a tener en cuenta es que, técnicamente, 612 00:31:36,500 --> 00:31:40,820 el comando en sí cuenta como una de los argumentos de la línea de comandos. 613 00:31:40,820 --> 00:31:45,330 Así pset1 cd, hay dos argumentos de la línea de comandos. 614 00:31:45,330 --> 00:31:50,260 El programa en sí mismo, cd, y luego la parte argumento real de la misma, pset1. 615 00:31:50,260 --> 00:31:54,490 Cualquier programa que usted ha escrito hasta el momento ha tenido puntos de una línea de comandos argument-- 616 00:31:54,490 --> 00:31:55,320 slash Mario. 617 00:31:55,320 --> 00:31:57,350 Ese es el único argumento de línea de comandos. 618 00:31:57,350 --> 00:32:00,900 >> Así que ahora mirando clang dash o hola hello.c. 619 00:32:00,900 --> 00:32:01,905 Entonces, ¿qué es argc? 620 00:32:01,905 --> 00:32:05,260 621 00:32:05,260 --> 00:32:06,080 4. 622 00:32:06,080 --> 00:32:08,140 Así argc es 4. 623 00:32:08,140 --> 00:32:12,140 Clang, soporte de manera argv 0 es sonido metálico. 624 00:32:12,140 --> 00:32:15,630 argv soporte 1 es rociada 0. 625 00:32:15,630 --> 00:32:21,870 argv soporte 2 es hola y argv soporte 3 es hello.c. 626 00:32:21,870 --> 00:32:26,813 Ok, así que las preguntas sobre este tema, y ​​luego vamos a mirar algunos ejemplos programáticos. 627 00:32:26,813 --> 00:32:29,460 628 00:32:29,460 --> 00:32:30,480 >> OK. 629 00:32:30,480 --> 00:32:36,260 Así que vamos a echar un vistazo a hello3.c. 630 00:32:36,260 --> 00:32:41,890 Así que esto debe ser familiar de uno de los primeros ejemplos c 631 00:32:41,890 --> 00:32:45,800 teníamos donde nos acaba de decir hola mundo, pero ahora esto es más general. 632 00:32:45,800 --> 00:32:52,300 Así que aquí estamos diciendo hola % s barra invertida n argv soporte 1. 633 00:32:52,300 --> 00:32:57,440 Notice-- tan arriba hasta este punto, esto es lo que mi archivo de plantilla ha parecido. 634 00:32:57,440 --> 00:33:01,800 Tuve int main (void), y luego lo haría hacer algo en la función principal. 635 00:33:01,800 --> 00:33:05,100 Ahora en cambio, una vez que empezamos tratar con argumentos de línea de comandos, 636 00:33:05,100 --> 00:33:07,890 tenemos que declarar un diferente forma de principal. 637 00:33:07,890 --> 00:33:11,930 >> Así que mirando hello3 de nuevo, la principal va 638 00:33:11,930 --> 00:33:15,990 tomar dos argumentos ahora-- int argc, el número de argumentos de línea de comandos, 639 00:33:15,990 --> 00:33:20,970 y la cadena argv paréntesis, el real cuerdas entraron en la línea de comandos. 640 00:33:20,970 --> 00:33:26,560 Así que voy a cambiar eso plantilla para reflejar este hecho. 641 00:33:26,560 --> 00:33:29,060 Ahora cada vez que escribes un programa, si no lo hace 642 00:33:29,060 --> 00:33:33,720 deben realizar ninguna de línea de comandos argumentos, a continuación, sólo tiene que utilizar int main (void). 643 00:33:33,720 --> 00:33:37,070 Pero ahora, cuando usted está escribiendo programas de argumentos de línea de comandos, que 644 00:33:37,070 --> 00:33:40,350 usted va a estar haciendo para el problema establecer dos-- así que ahora que usted está funcionando 645 00:33:40,350 --> 00:33:42,630 programas que necesitan para tomar argumentos de la línea de comandos, 646 00:33:42,630 --> 00:33:45,250 es necesario tener principal de este formulario. 647 00:33:45,250 --> 00:33:51,290 >> Así aquí-- este es el gran uso del argumento de línea de comandos. 648 00:33:51,290 --> 00:33:54,100 Así impresión argv 1. 649 00:33:54,100 --> 00:33:59,180 Aceptar así que vamos a compilar y ejecutar este programa. 650 00:33:59,180 --> 00:34:02,440 Hacer hello3. 651 00:34:02,440 --> 00:34:03,570 Compila. 652 00:34:03,570 --> 00:34:06,870 Dot slash hello3. 653 00:34:06,870 --> 00:34:08,920 Y digamos, "Rob". 654 00:34:08,920 --> 00:34:10,760 Hola Rob. 655 00:34:10,760 --> 00:34:14,940 Si digo: "Hola Maria," hola María. 656 00:34:14,940 --> 00:34:15,719 Hola Maria. 657 00:34:15,719 --> 00:34:18,639 Hannah todavía dice, "hola María, "porque no soy 658 00:34:18,639 --> 00:34:21,340 hacer algo con nuestra argv 2. 659 00:34:21,340 --> 00:34:22,590 Argv 2 ahora sería "Hannah". 660 00:34:22,590 --> 00:34:25,030 Argc sería 3. 661 00:34:25,030 --> 00:34:27,735 ¿Y si lo hice? 662 00:34:27,735 --> 00:34:31,980 663 00:34:31,980 --> 00:34:34,679 Así hola nulo. 664 00:34:34,679 --> 00:34:38,760 >> Le tocó brevemente en el hecho que, técnicamente, GetString 665 00:34:38,760 --> 00:34:42,429 podría devolver null, pero vamos a obtener una mucho más en lo nulo en realidad es. 666 00:34:42,429 --> 00:34:47,449 Pero tomarlo como una cuestión de hecho de que no es en general malo. 667 00:34:47,449 --> 00:34:50,179 Hicimos algo mal si se imprime "hola nulo." 668 00:34:50,179 --> 00:34:52,179 Y la razón por la que lo hizo algo mal es-- así, 669 00:34:52,179 --> 00:34:56,179 cuando me encontré hello3 slash dot, argc era 1. 670 00:34:56,179 --> 00:34:59,680 Así que eso significa que la longitud de argv era 1. 671 00:34:59,680 --> 00:35:05,110 Si una matriz es de longitud 1, el único índice válido es cero. 672 00:35:05,110 --> 00:35:08,550 Y aquí argv 1 está fuera el rango de esta matriz. 673 00:35:08,550 --> 00:35:13,410 Era similar a la anterior, cuando traté para almacenar 6 fuera de la final de la matriz. 674 00:35:13,410 --> 00:35:18,100 Así que estoy tratando de acceder a algo fuera de los condes argv, 675 00:35:18,100 --> 00:35:21,340 y estamos recibiendo nulo. 676 00:35:21,340 --> 00:35:24,360 >> Así que una mejor versión de esto, una mejora, 677 00:35:24,360 --> 00:35:27,010 está comprobando explícitamente argc. 678 00:35:27,010 --> 00:35:33,580 Así que si argc es igual a 2, lo que significa que nos encontramos algo así como hello3 slash dot Rob. 679 00:35:33,580 --> 00:35:36,840 Y va a imprimir "hola Rob." 680 00:35:36,840 --> 00:35:39,850 Si argc no es igual a 2, entonces sólo va 681 00:35:39,850 --> 00:35:42,560 hacer caso omiso de lo que pones en el argumento de línea de comandos 682 00:35:42,560 --> 00:35:43,960 como argumentos de línea de comandos. 683 00:35:43,960 --> 00:35:47,168 O si usted no puso ninguna en absoluto, es sólo va a ignorar eso y decir, 684 00:35:47,168 --> 00:35:47,960 "Hola Tu." 685 00:35:47,960 --> 00:35:51,490 >> Así que la elaboración de este. 686 00:35:51,490 --> 00:35:54,500 Hacer hello4. 687 00:35:54,500 --> 00:35:56,790 Y corriendo hello4. 688 00:35:56,790 --> 00:36:00,010 Ejecución de esta manera, lo que debe ser impreso? 689 00:36:00,010 --> 00:36:01,330 "Hola Tu." 690 00:36:01,330 --> 00:36:02,810 Hola Tu. 691 00:36:02,810 --> 00:36:05,870 ¿Qué pasa con hello4 Rob? 692 00:36:05,870 --> 00:36:06,950 "Hola Rob." 693 00:36:06,950 --> 00:36:10,580 Y, por último, hola Rob María es simplemente "hola You" de nuevo, 694 00:36:10,580 --> 00:36:13,677 porque no realmente entrar algo que esperaba. 695 00:36:13,677 --> 00:36:15,510 Ha introducido más nombres de lo que podía manejar, 696 00:36:15,510 --> 00:36:19,500 por lo que sólo por defecto en el hola que el comportamiento. 697 00:36:19,500 --> 00:36:23,040 Así que las preguntas sobre esto? 698 00:36:23,040 --> 00:36:26,290 O argumentos de línea de comandos? 699 00:36:26,290 --> 00:36:28,690 >> OK, así que echar un vistazo a un par más ejemplos del uso de 700 00:36:28,690 --> 00:36:34,230 de línea de comandos arguments-- primero hemos argv tablero 1 punto c. 701 00:36:34,230 --> 00:36:38,510 Así que los comentarios regalan lo este programa debería estar haciendo. 702 00:36:38,510 --> 00:36:42,460 Pero note ahora-- este bucle for, Esto coincide con el patrón exacto 703 00:36:42,460 --> 00:36:43,390 Decía antes. 704 00:36:43,390 --> 00:36:46,240 Nos toca estar utilizando argc en lugar de n. 705 00:36:46,240 --> 00:36:48,880 Ahora argc es realmente el n. 706 00:36:48,880 --> 00:36:51,260 Es la longitud de la matriz argv. 707 00:36:51,260 --> 00:36:59,600 Así se iterar sobre el argv array printf-ing cada valor argv. 708 00:36:59,600 --> 00:37:04,730 >> Así que si hago esto. 709 00:37:04,730 --> 00:37:08,232 Hacer argv 1. 710 00:37:08,232 --> 00:37:09,940 Compila. 711 00:37:09,940 --> 00:37:11,620 Dot slash argv 1. 712 00:37:11,620 --> 00:37:15,530 Sólo correr esto, impresiones del punto de barra argv 1 713 00:37:15,530 --> 00:37:18,500 ya que era la única línea de comandos argument-- el nombre del programa. 714 00:37:18,500 --> 00:37:22,080 Siempre habrá por lo menos: argc no puede ser menor que uno, 715 00:37:22,080 --> 00:37:25,910 ya que no siempre lo hará, al menos, ser el nombre del programa a ejecutar. 716 00:37:25,910 --> 00:37:32,040 Así argv 1 Rob imprimirá argv 1 y luego en la nueva línea "Rob". 717 00:37:32,040 --> 00:37:36,350 >> Así que en la primera iteración de este bucle, i es 0. 718 00:37:36,350 --> 00:37:39,090 Argv 0 es el nombre del programa. 719 00:37:39,090 --> 00:37:40,010 Dot slash argv 1. 720 00:37:40,010 --> 00:37:43,770 Y luego argv 1 es mi primera argumento de línea de comando, que es Rob. 721 00:37:43,770 --> 00:37:45,920 En este punto, estamos igual a argc. 722 00:37:45,920 --> 00:37:48,210 Rompemos fuera del circuito y hemos terminado. 723 00:37:48,210 --> 00:37:53,940 Así que esto va a funcionar para una arbitraria número de argumentos de la línea de comandos. 724 00:37:53,940 --> 00:37:58,550 Note que imprime argv 0, argv 1, 2 argv, argv 3, 4 argv. 725 00:37:58,550 --> 00:38:00,150 Y no hay argv 5. 726 00:38:00,150 --> 00:38:01,460 argc es igual a 5. 727 00:38:01,460 --> 00:38:06,960 Así que en argc-- i es igual a 5, rompemos fuera del circuito. 728 00:38:06,960 --> 00:38:07,950 OK. 729 00:38:07,950 --> 00:38:11,315 Así preguntas sobre que antes mirar un ejemplo más complejo? 730 00:38:11,315 --> 00:38:14,190 731 00:38:14,190 --> 00:38:16,860 >> Así argv 2. 732 00:38:16,860 --> 00:38:17,830 Correcto. 733 00:38:17,830 --> 00:38:20,610 Así que todavía estamos imprimiendo los argumentos de la línea de comandos. 734 00:38:20,610 --> 00:38:23,170 Pero ahora cuenta de que tenemos un anidado de bucle. 735 00:38:23,170 --> 00:38:24,670 Entonces, ¿qué está haciendo esto? 736 00:38:24,670 --> 00:38:28,430 Así que el primer bucle está haciendo exactamente lo que lo hacía antes. 737 00:38:28,430 --> 00:38:30,950 Todavía estamos looping más cada argumento de línea de comandos, 738 00:38:30,950 --> 00:38:34,260 pero ahora esta segunda loop-- que hemos También visto algo como esto antes. 739 00:38:34,260 --> 00:38:38,600 Cuando fue iterar sobre Zamyla imprimir Z-A-H-Y-L-A. 740 00:38:38,600 --> 00:38:44,816 Así que este segundo bucle para int j es igual 0, n es igual a strlen del soporte argv i. 741 00:38:44,816 --> 00:38:49,170 >> Así que vamos a pensar por primera el-- vamos a caminar a través. 742 00:38:49,170 --> 00:38:53,560 Vamos a pensar en lo que el equipo haría hacer si me encontré con este programa tan solo dot 743 00:38:53,560 --> 00:38:56,030 slash argv guión 2. 744 00:38:56,030 --> 00:39:03,590 Así que si me encontré con este código, a continuación, argc va a ser igual a 1. 745 00:39:03,590 --> 00:39:07,050 Y la cadena argv-- sólo hay va a ser un índice en argv, 746 00:39:07,050 --> 00:39:12,370 y que va a ser igual a dot slash argv 2-- el nombre del programa. 747 00:39:12,370 --> 00:39:19,170 >> OK, así que ahora i es igual a 0, i menos de 1, i plus plus para int j es igual a 0, 748 00:39:19,170 --> 00:39:23,880 n es igual a strlen de argv soporte 0, por lo que en la primera iteración de este bucle. argv 749 00:39:23,880 --> 00:39:27,250 Soporte 0 es slash dot argv 2. 750 00:39:27,250 --> 00:39:29,320 Entonces, ¿cuál es la longitud de esa cadena? 751 00:39:29,320 --> 00:39:32,480 Bueno, dot recortar A-R-G-V guión 2. 752 00:39:32,480 --> 00:39:35,020 Así strlen de que será de 8. 753 00:39:35,020 --> 00:39:37,500 Así que j es igual a 0, n es igual a 8. 754 00:39:37,500 --> 00:39:39,530 Mientras j es menor que 8, j ++. 755 00:39:39,530 --> 00:39:44,080 Y con eso nos vamos a estar la impresión de un solo carácter, el cual 756 00:39:44,080 --> 00:39:47,350 es argv soporte i soporte de j. 757 00:39:47,350 --> 00:39:49,826 >> Así que la única i es cero. 758 00:39:49,826 --> 00:39:51,700 Todavía sólo tenemos una argumento de línea de comandos. 759 00:39:51,700 --> 00:39:53,890 En ese primera iteración del bucle for, estamos 760 00:39:53,890 --> 00:39:56,950 va a ser la impresión argv soporte 0 0 abrazadera. 761 00:39:56,950 --> 00:39:58,325 Y entonces j se va a incrementar. 762 00:39:58,325 --> 00:40:01,650 Y vamos a la impresión argv soporte 0 soporte 1. 763 00:40:01,650 --> 00:40:04,150 Y luego argv soporte 0 soporte 2. 764 00:40:04,150 --> 00:40:09,030 >> Así que este es nuestro primer encuentro de matrices multidimensionales. 765 00:40:09,030 --> 00:40:12,770 Recuerda antes de que te dije argv que es técnicamente 766 00:40:12,770 --> 00:40:15,950 una matriz de matrices de caracteres. 767 00:40:15,950 --> 00:40:24,360 Así que aquí si me dijo algo así como cadena s es igual a soporte argv i, 768 00:40:24,360 --> 00:40:29,590 y entonces me dije: s soporte de j, esto sería el cumplimiento de la misma cosa. 769 00:40:29,590 --> 00:40:31,960 Ahora, usted ha visto s soporte de j antes. 770 00:40:31,960 --> 00:40:36,680 Eso es sólo acceder a la j-th carácter de esta cadena. 771 00:40:36,680 --> 00:40:48,010 Así que con esto, estamos recibiendo la carácter j-ésimo del argv-i. 772 00:40:48,010 --> 00:40:51,450 >> Entonces, ¿qué se debe esta última instancia de salida? 773 00:40:51,450 --> 00:40:53,210 Hacer argv 2. 774 00:40:53,210 --> 00:40:54,730 Compila. 775 00:40:54,730 --> 00:40:56,340 Dot slash argv 2. 776 00:40:56,340 --> 00:41:03,790 "Rob Maria Hannah" y darnos un poco de espacio. 777 00:41:03,790 --> 00:41:07,050 Así que vemos que esta es la salida punto en su propia línea y barra 778 00:41:07,050 --> 00:41:08,920 en su propia línea y en su propia línea. 779 00:41:08,920 --> 00:41:11,260 Está imprimiendo cada carácter individual 780 00:41:11,260 --> 00:41:12,950 de cada argumento de línea de comandos. 781 00:41:12,950 --> 00:41:15,960 Y a continuación, entre ellos, debido a esta nueva línea 782 00:41:15,960 --> 00:41:19,380 estamos imprimiendo aquí abajo, en entre ellos que va a imprimir una nueva línea. 783 00:41:19,380 --> 00:41:24,540 >> Así que esto es similar a el tablero argv previa 1, 784 00:41:24,540 --> 00:41:26,459 que cada impresa argumento de línea de comandos, 785 00:41:26,459 --> 00:41:28,500 pero ahora estamos imprimiendo los argumentos de la línea de comandos 786 00:41:28,500 --> 00:41:31,950 y luego a través de cada iteración carácter de cada argumento de línea de comandos 787 00:41:31,950 --> 00:41:35,400 para obtener este resultado. 788 00:41:35,400 --> 00:41:36,870 ¿De acuerdo? 789 00:41:36,870 --> 00:41:40,570 Así que las preguntas sobre esto? 790 00:41:40,570 --> 00:41:45,130 >> Una cosa a destacar es que arguments-- de línea de comandos 791 00:41:45,130 --> 00:41:49,990 por lo que están separadas por espacios como que, naturalmente, esperar que sean. 792 00:41:49,990 --> 00:41:53,050 Así que una cadena puede tener espacios en el mismo. 793 00:41:53,050 --> 00:41:57,380 No es súper importante, pero si quería que el tercer argumento de línea de comandos 794 00:41:57,380 --> 00:42:01,226 Para tener un espacio en él, entonces yo podría decir algo como esto. 795 00:42:01,226 --> 00:42:04,470 796 00:42:04,470 --> 00:42:05,550 ¿De acuerdo? 797 00:42:05,550 --> 00:42:12,190 Así que esta ahora siendo sólo tiene tres de línea de comandos, así arguments-- 4. 798 00:42:12,190 --> 00:42:17,620 Dot slash argv tablero 2, Rob, María, y Hannah Bloomberg. 799 00:42:17,620 --> 00:42:18,320 OK. 800 00:42:18,320 --> 00:42:19,310 Preguntas sobre esto? 801 00:42:19,310 --> 00:42:22,700 802 00:42:22,700 --> 00:42:24,894 >> No hay nada especial sobre el carácter de espacio. 803 00:42:24,894 --> 00:42:27,810 Es sólo pasa a ser que el de línea de comandos trata el carácter de espacio 804 00:42:27,810 --> 00:42:29,226 como la forma de separar cada argumento. 805 00:42:29,226 --> 00:42:32,048 806 00:42:32,048 --> 00:42:33,000 Correcto. 807 00:42:33,000 --> 00:42:39,950 Entonces conjunto de problemas dos-- que vas a ser 808 00:42:39,950 --> 00:42:43,240 mirando a la criptografía de clave secreta. 809 00:42:43,240 --> 00:42:47,700 Por lo tanto, similar al ejemplo vimos de A Christmas Story, 810 00:42:47,700 --> 00:42:52,840 usted va a ser la aplicación de algunas algoritmos que, dado un mensaje, 811 00:42:52,840 --> 00:42:55,560 vas a poder para cifrar el mensaje 812 00:42:55,560 --> 00:42:58,730 que sólo alguien con ese secreto llave, con ese anillo decodificador, 813 00:42:58,730 --> 00:43:01,090 debe ser capaz de descifrar. 814 00:43:01,090 --> 00:43:04,839 >> Así que esa es la edición estándar. 815 00:43:04,839 --> 00:43:07,130 Vas a ser la implementación dos versiones diferentes. 816 00:43:07,130 --> 00:43:09,620 Si le sucede a echar un vistazo por lo que el hacker edition-- ahora, 817 00:43:09,620 --> 00:43:12,600 vamos a dar que una cadena como esta, 818 00:43:12,600 --> 00:43:15,240 lo que representa una contraseña cifrada. 819 00:43:15,240 --> 00:43:19,990 Así que su objetivo es averiguar lo que la contraseña es descifrada. 820 00:43:19,990 --> 00:43:26,950 Ahora bien, esto es en realidad cómo contraseñas se almacenan en una gran cantidad de ordenadores, 821 00:43:26,950 --> 00:43:31,290 y que sólo se almacena este cadena aleatoria de caracteres. 822 00:43:31,290 --> 00:43:34,440 Tienes que encontrar la manera de llegar de esta cadena aleatoria de caracteres 823 00:43:34,440 --> 00:43:36,140 a lo que era la contraseña original. 824 00:43:36,140 --> 00:43:39,060 825 00:43:39,060 --> 00:43:43,290 >> Y, por último, después de esto conjunto de problemas, usted debe 826 00:43:43,290 --> 00:43:46,100 ser capaz de entender lo que esto significa. 827 00:43:46,100 --> 00:43:51,650 Así que usted aprenderá a descifrar este tipo de cadena aleatoria. 828 00:43:51,650 --> 00:43:56,390 Del mismo modo, si usted recuerda de semana 0, que podría haber visto este URL. 829 00:43:56,390 --> 00:44:00,210 Y usted debería ser capaz de descifrar esto eventualmente. 830 00:44:00,210 --> 00:44:04,810 Puede que no seas feliz cuando usted descifrar y haga clic en el enlace. 831 00:44:04,810 --> 00:44:05,700 Correcto. 832 00:44:05,700 --> 00:44:06,591 Eso es todo por hoy. 833 00:44:06,591 --> 00:44:12,095 Así que nos vemos la próxima semana! 834 00:44:12,095 --> 00:44:18,315 >> [REPRODUCCIÓN DE MÚSICA ELECTRÓNICA] 835 00:44:18,315 --> 00:47:15,619