1 00:00:00,000 --> 00:00:03,000 [Powered by Google Translate] [Artículo 3] [Menos Cómodo] 2 00:00:03,000 --> 00:00:05,000 >> [Nate Hardison] [Harvard University] 3 00:00:05,000 --> 00:00:08,000 >> [Esta es CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:10,000 >> Muy bien, vamos a empezar. 5 00:00:10,000 --> 00:00:13,000 Bienvenidos a la Semana 4 de CS50. 6 00:00:13,000 --> 00:00:19,000 Si ustedes abren un navegador web y abrir pset 3, 7 00:00:19,000 --> 00:00:23,000 Scramble con CS50, vamos a empezar a ir 8 00:00:23,000 --> 00:00:26,000 a través de la sección de preguntas allí. 9 00:00:26,000 --> 00:00:32,000 Al igual que la semana pasada, vamos a estar trabajando en CS50 Spaces, 10 00:00:32,000 --> 00:00:35,000 si también va a tirar para arriba, así que, 11 00:00:35,000 --> 00:00:43,000 y si sigues adelante y visite este enlace que tengo aquí en la parte superior. 12 00:00:43,000 --> 00:00:45,000 Es hora de empezar. 13 00:00:45,000 --> 00:00:51,000 Tenemos nuestro programa hi poco aquí. Nada loco. 14 00:00:51,000 --> 00:00:55,000 Una de las primeras cosas que quiero hacer con ustedes hoy es repasar algunas soluciones 15 00:00:55,000 --> 00:00:58,000 Set para el problema 1, el tipo de ejemplo soluciones, 16 00:00:58,000 --> 00:01:03,000 sólo para que pueda tener una idea de qué tipo de personal está escribiendo código, 17 00:01:03,000 --> 00:01:07,000 ¿qué tipo de estudiantes están escribiendo otros códigos, 18 00:01:07,000 --> 00:01:10,000 y hacer que usted tome una mirada en ella, porque sé que es raro 19 00:01:10,000 --> 00:01:14,000 al momento de enviar la solución a un conjunto de problemas y obtener comentarios 20 00:01:14,000 --> 00:01:18,000 en su propia versión, pero a veces es útil ver cómo otras personas lo hicieron, 21 00:01:18,000 --> 00:01:22,000 especialmente los que están bien buscando. 22 00:01:22,000 --> 00:01:27,000 En su mayor parte, yo estaba muy impresionado con las soluciones que ustedes producen. 23 00:01:27,000 --> 00:01:31,000 Todavía no he empezado a buscar en sus 2s conjunto de problemas, pero si eres como la primera, 24 00:01:31,000 --> 00:01:34,000 no significa nada más que cosas buenas. 25 00:01:34,000 --> 00:01:40,000 >> Si nos fijamos en mis revisiones, vamos a empezar hasta el fondo en Revisión 1, 26 00:01:40,000 --> 00:01:47,000 y vamos a echar un vistazo rápido a una solución de Mario. 27 00:01:47,000 --> 00:01:54,000 Si usted tira de esto, los programas que vamos a presentar son los correctos. 28 00:01:54,000 --> 00:01:56,000 No había problemas con la corrección de estos problemas, sino más bien, 29 00:01:56,000 --> 00:01:59,000 queremos hablar un poco acerca de los problemas de diseño diferentes 30 00:01:59,000 --> 00:02:03,000 que están siendo utilizadas aquí. 31 00:02:03,000 --> 00:02:08,000 Una de las cosas que era interesante acerca de la solución 32 00:02:08,000 --> 00:02:11,000 es que utiliza este nuevo constructo llamado libras definir, 33 00:02:11,000 --> 00:02:15,000 a veces también se refiere como un hash definir. 34 00:02:15,000 --> 00:02:18,000 Permítanme hacer un zoom sobre ella aquí. 35 00:02:18,000 --> 00:02:24,000 A # define le permite dar nombre a estos números en su programa. 36 00:02:24,000 --> 00:02:28,000 En este caso, la altura máxima de una pirámide en Mario 37 00:02:28,000 --> 00:02:34,000 tenía 23 años y en lugar de poner 23 en mi código 38 00:02:34,000 --> 00:02:37,000 nos referimos a que tan duro código 23 - 39 00:02:37,000 --> 00:02:43,000 esto da lugar la MAX_HEIGHT nombre a ese número, 40 00:02:43,000 --> 00:02:48,000 de modo que aquí en mi do-while 41 00:02:48,000 --> 00:02:51,000 en realidad se puede hacer referencia a MAX_HEIGHT 42 00:02:51,000 --> 00:02:55,000 en vez de poner el número 23 pulg 43 00:02:55,000 --> 00:02:57,000 [Estudiante] ¿Cuál es la ventaja de hacer eso? 44 00:02:57,000 --> 00:02:59,000 Esa es una gran pregunta. 45 00:02:59,000 --> 00:03:03,000 Una de ellas es la lectura. 46 00:03:03,000 --> 00:03:08,000 Una ventaja de utilizar este # define es la legibilidad. 47 00:03:08,000 --> 00:03:11,000 Cuando estoy leyendo el código, puedo ver lo que está pasando. 48 00:03:11,000 --> 00:03:15,000 >> Puedo ver en esta condición que aquí estamos probando 49 00:03:15,000 --> 00:03:19,000 para la altura es <0, lo que podríamos haber definido también 50 00:03:19,000 --> 00:03:22,000 ser de una altura mínima o una altura min. 51 00:03:22,000 --> 00:03:25,000 La otra ventaja es que se puede leer el resto de la línea para ver 52 00:03:25,000 --> 00:03:30,000 que también estamos comprobando para asegurarse de que la altura no es mayor que la altura máxima, 53 00:03:30,000 --> 00:03:35,000 porque vamos a seguir mientras que la altura es mayor que la altura max. 54 00:03:35,000 --> 00:03:40,000 La otra ventaja es, si puedo ampliar un poco aquí- 55 00:03:40,000 --> 00:03:49,000 si ejecuto este programa y lo ejecuto, por ejemplo, con un 23 en este momento, 56 00:03:49,000 --> 00:03:52,000 que muestra todos 23 filas así como así. 57 00:03:52,000 --> 00:03:54,000 Pero decir que era hora de cambiar la altura máxima, 58 00:03:54,000 --> 00:03:57,000 y ahora quiere limitar la altura máxima de las pirámides 59 00:03:57,000 --> 00:04:06,000 ser sólo decir-man, que era moderno. 60 00:04:06,000 --> 00:04:14,000 # Include, # define MAX_HEIGHT, 61 00:04:14,000 --> 00:04:18,000 y digamos que quería ponerlo igual a 10. 62 00:04:18,000 --> 00:04:22,000 Ahora, en este punto, todo lo que tenía que hacer era cambiarlo en esta ubicación. 63 00:04:22,000 --> 00:04:27,000 Me puede volver a compilar el código, y ahora si que intento escribir en el 12, 64 00:04:27,000 --> 00:04:30,000 va a preguntar otra vez. 65 00:04:30,000 --> 00:04:33,000 En este caso, sólo estamos utilizando MAX_HEIGHT vez. 66 00:04:33,000 --> 00:04:37,000 No es tan grande de una molestia de ir en 67 00:04:37,000 --> 00:04:40,000 y cambiarlo en el bucle mientras que si es necesario. 68 00:04:40,000 --> 00:04:44,000 Sin embargo, en los programas en los que está haciendo referencia el mismo número mágico 69 00:04:44,000 --> 00:04:47,000 una y otra vez, este mecanismo es # define muy útil 70 00:04:47,000 --> 00:04:52,000 porque usted acaba de cambiar una vez en la parte superior del archivo, es por lo general en el que los puso- 71 00:04:52,000 --> 00:04:57,000 y el cambio se filtra por el resto del archivo. 72 00:04:57,000 --> 00:05:02,000 >> Otras cosas que quería destacar en esta tarea que me pareció se veía muy bien, 73 00:05:02,000 --> 00:05:05,000 uno fue el nombramiento de las variables. 74 00:05:05,000 --> 00:05:14,000 Aquí se puede apreciar que tenemos las variables enteras llamadas fila y se llama altura. 75 00:05:14,000 --> 00:05:20,000 Espacios, hashes, ayuda a hacer que el código un poco más legible, 76 00:05:20,000 --> 00:05:25,000 hace que sea un poco más comprensible lo que realmente está pasando. 77 00:05:25,000 --> 00:05:31,000 Esto está en contraste con el uso, por ejemplo, letras al azar 78 00:05:31,000 --> 00:05:35,000 o simplemente gobbledygook completo. 79 00:05:35,000 --> 00:05:39,000 Una última cosa voy a señalar es que en los bucles for, 80 00:05:39,000 --> 00:05:45,000 a menudo estas variables iterador, esos contadores que se utilizan en su bucles for, 81 00:05:45,000 --> 00:05:51,000 es estándar y convencional para empezar con i y j y k 82 00:05:51,000 --> 00:05:54,000 Y pasando de allí si necesitas más variables, 83 00:05:54,000 --> 00:05:56,000 y esto es sólo una convención. 84 00:05:56,000 --> 00:05:58,000 Hay un montón de convenciones. 85 00:05:58,000 --> 00:06:00,000 Depende del lenguaje de programación que está utilizando. 86 00:06:00,000 --> 00:06:04,000 Pero en C, por lo general comienzan con i. 87 00:06:04,000 --> 00:06:08,000 No tiene sentido utilizar, por ejemplo, A o B 88 00:06:08,000 --> 00:06:13,000 dependiendo de la situación. 89 00:06:13,000 --> 00:06:15,000 Eso es todo por esta. 90 00:06:15,000 --> 00:06:25,000 Si ahora levantar Revisión 2, verá otro Mario, 91 00:06:25,000 --> 00:06:29,000 y este es similar a la de otro tipo que acabamos de ver, 92 00:06:29,000 --> 00:06:32,000 pero sí algo un poco fría. 93 00:06:32,000 --> 00:06:38,000 Si nos fijamos en esta sección aquí en el interior del interior de bucle, 94 00:06:38,000 --> 00:06:44,000 que están utilizando una sintaxis loco buscando aquí justo en esta línea. 95 00:06:44,000 --> 00:06:47,000 Esto se llama un operador ternario. 96 00:06:47,000 --> 00:06:53,000 Es una sentencia if else condensada en una sola línea. 97 00:06:53,000 --> 00:06:57,000 La condición es esta parte dentro de paréntesis. 98 00:06:57,000 --> 00:07:05,000 Es equivalente a decir si j 00:07:10,000 Y a continuación, lo que el contenido de ese bloque si serían son el espacio 100 00:07:10,000 --> 00:07:16,000 y entonces el contenido de lo que el otro sería este son #. 101 00:07:16,000 --> 00:07:20,000 Básicamente se trata de la asignación de un espacio para esta variable. 102 00:07:20,000 --> 00:07:24,000 Es poner un espacio en el contenido de la variable de bloque, 103 00:07:24,000 --> 00:07:29,000 si se cumple esta condición, y si la condición no se cumple, 104 00:07:29,000 --> 00:07:32,000 entonces la variable de bloque recibe este #. 105 00:07:32,000 --> 00:07:37,000 Y luego, por supuesto, en lugar de construir una cadena completa 106 00:07:37,000 --> 00:07:43,000 y la impresión de que todo al final esta solución se imprime un carácter a la vez. 107 00:07:43,000 --> 00:07:48,000 Pretty cool. 108 00:07:48,000 --> 00:07:53,000 >> Otro par de cosas para ver. Vamos a pasar a codiciosos. 109 00:07:53,000 --> 00:07:58,000 Ahora bien, si nos fijamos en codiciosos, esta primera solución 110 00:07:58,000 --> 00:08:00,000 las utiliza # define bastante. 111 00:08:00,000 --> 00:08:06,000 Tenemos una constante definida para cada uno de los diferentes números en este programa. 112 00:08:06,000 --> 00:08:12,000 Tenemos uno para centavos por dólar, una para cuartos, diez, cinco y un centavo, 113 00:08:12,000 --> 00:08:15,000 y ahora si desplácese hacia abajo y leer el código, 114 00:08:15,000 --> 00:08:22,000 podemos ver un patrón do-while imprimir todo lazo fuera. 115 00:08:22,000 --> 00:08:25,000 Un poco el quid de este problema fue dando cuenta de que 116 00:08:25,000 --> 00:08:29,000 usted necesita para convertir el flotador que se lee en parte del usuario a un entero 117 00:08:29,000 --> 00:08:32,000 de hacer con precisión las matemáticas, y esto se debe a que 118 00:08:32,000 --> 00:08:36,000 con números de punto flotante, como hablamos en clase brevemente, 119 00:08:36,000 --> 00:08:41,000 que no es posible representar con precisión cada valor único en la recta numérica 120 00:08:41,000 --> 00:08:47,000 porque hay infinitos valores entre 3 y, por ejemplo, 3,1, incluso. 121 00:08:47,000 --> 00:08:54,000 Usted puede tener 3,01 y 3,001 y 3,0001, y usted puede seguir adelante. 122 00:08:54,000 --> 00:09:00,000 Resulta que cuando se trabaja con dinero, a menudo se desea convertir 123 00:09:00,000 --> 00:09:05,000 en formato entero de modo que usted no está perdiendo centavos y ese tipo de cosas. 124 00:09:05,000 --> 00:09:09,000 Hacer eso y el redondeo fue clave. 125 00:09:09,000 --> 00:09:14,000 Esta solución utiliza un perfectamente sencillo, el algoritmo de gran 126 00:09:14,000 --> 00:09:17,000 que disminuye el número de centavos restantes, primero por trimestres, 127 00:09:17,000 --> 00:09:19,000 luego por monedas de diez centavos, y luego por monedas de cinco centavos, y luego por unos centavos, 128 00:09:19,000 --> 00:09:24,000 y aumentando el número de monedas de cada vez. 129 00:09:24,000 --> 00:09:31,000 >> Otra solución que vamos a ver, ya que el zoom e ir a la revisión 4, 130 00:09:31,000 --> 00:09:40,000 tuvo un comienzo muy similar, pero en lugar utilizar div y mod 131 00:09:40,000 --> 00:09:44,000 por aquí para calcular el número de centavos. 132 00:09:44,000 --> 00:09:50,000 Esto, el número de cuartos es igual al número de centavos dividido por 25, 133 00:09:50,000 --> 00:09:53,000 y la razón por la que esto funciona es porque estamos haciendo la división entera, 134 00:09:53,000 --> 00:09:58,000 por lo que es desechar el resto. 135 00:09:58,000 --> 00:10:02,000 [Estudiante] ¿Tenemos que comentar la búsqueda? 136 00:10:02,000 --> 00:10:05,000 Realmente depende. 137 00:10:05,000 --> 00:10:08,000 [Estudiante] Estás comentando más código aquí. 138 00:10:08,000 --> 00:10:16,000 Sí, y lo que hay un montón de diferentes filosofías sobre esto. 139 00:10:16,000 --> 00:10:21,000 Mi filosofía personal es que su código es realmente la verdad, 140 00:10:21,000 --> 00:10:24,000 al igual que el código es lo que realmente está ejecutando en el equipo, 141 00:10:24,000 --> 00:10:29,000 por lo que el código debe ser lo más legible posible para no necesitar tantos comentarios. 142 00:10:29,000 --> 00:10:33,000 Dicho esto, cuando usted está haciendo las cosas que son un poco complicado matemáticamente 143 00:10:33,000 --> 00:10:38,000 o algorítmica, es bueno para los comentarios, para que pueda 144 00:10:38,000 --> 00:10:43,000 añadir una dimensión extra, una capa extra a quien está leyendo su código. 145 00:10:43,000 --> 00:10:49,000 En estas soluciones, a menudo se comentan en mayor medida porque 146 00:10:49,000 --> 00:10:52,000 queremos ser capaces de distribuir y que la gente los recoja 147 00:10:52,000 --> 00:10:56,000 y leerlos con bastante facilidad. 148 00:10:56,000 --> 00:11:05,000 Pero definitivamente, estoy de acuerdo que este es pesado. 149 00:11:05,000 --> 00:11:07,000 [Estudiante] Sin embargo, en caso de duda, ir más pesado? 150 00:11:07,000 --> 00:11:10,000 En caso de duda, ir más pesada. 151 00:11:10,000 --> 00:11:17,000 Algunas veces la gente va a decir 0 retorno o algo por el estilo. 152 00:11:17,000 --> 00:11:20,000 Creo que es un comentario ridículo. 153 00:11:20,000 --> 00:11:22,000 Está claro que es lo que está sucediendo. 154 00:11:22,000 --> 00:11:25,000 No necesito Inglés para decirme eso. 155 00:11:25,000 --> 00:11:28,000 A veces la gente escribe cosas como "kthxbai!" 156 00:11:28,000 --> 00:11:32,000 Eso es algo lindo, pero también-no 157 00:11:32,000 --> 00:11:35,000 que no hace la diferencia entre los puntos que comentan o no. 158 00:11:35,000 --> 00:11:41,000 Ese tipo de comentarios son sólo ja, ja. 159 00:11:41,000 --> 00:11:43,000 Cool. 160 00:11:43,000 --> 00:11:48,000 >> En este punto, vamos a empezar a trabajar en el problema 3 sección de preguntas. 161 00:11:48,000 --> 00:11:52,000 Si ustedes sacar esto de nuevo, 162 00:11:52,000 --> 00:11:55,000 al igual que con la semana pasada, no vamos a ver los cortos en esta sección. 163 00:11:55,000 --> 00:12:00,000 Vamos a dejar que ustedes hacen eso en su propio tiempo y hablar de las preguntas. 164 00:12:00,000 --> 00:12:05,000 Pero ahora, en esta sección vamos a pasar un poco más 165 00:12:05,000 --> 00:12:11,000 hablando de menos de los fundamentos de codificación 166 00:12:11,000 --> 00:12:15,000 como lo hicimos la semana pasada, y en su lugar, vamos a centrarnos más en 167 00:12:15,000 --> 00:12:22,000 un poco más de la teoría, así que hablar de búsqueda binaria y ordenación. 168 00:12:22,000 --> 00:12:27,000 Desde aquellos de ustedes que han estado siguiendo a lo largo de la conferencia, 169 00:12:27,000 --> 00:12:30,000 ¿Puede alguien darme un resumen de lo que la diferencia es 170 00:12:30,000 --> 00:12:35,000 entre búsqueda y búsqueda binaria lineal? 171 00:12:35,000 --> 00:12:37,000 ¿Qué está pasando? Claro. 172 00:12:37,000 --> 00:12:42,000 Búsquedas lineales búsqueda a través de todos los elementos de la lista ordenada 173 00:12:42,000 --> 00:12:45,000 una por una por una por una por una, 174 00:12:45,000 --> 00:12:50,000 y búsqueda binaria divide la lista en dos grupos, 175 00:12:50,000 --> 00:12:57,000 Comprueba si el valor de teclas que se está buscando es mayor o menor que el valor del punto medio 176 00:12:57,000 --> 00:13:00,000 que usted acaba de encontrar, y si es menor, se va con la lista inferior 177 00:13:00,000 --> 00:13:03,000 y luego se divide de nuevo, hace la misma función 178 00:13:03,000 --> 00:13:07,000 todo el camino hacia abajo hasta que encuentra el punto medio a ser igual al valor en sí. 179 00:13:07,000 --> 00:13:10,000 Derecha. 180 00:13:10,000 --> 00:13:12,000 >> ¿Por qué nos importa? 181 00:13:12,000 --> 00:13:20,000 ¿Por qué hablamos de búsqueda binaria frente a la búsqueda lineal? 182 00:13:20,000 --> 00:13:22,000 Si. 183 00:13:22,000 --> 00:13:24,000 El binario es mucho más rápido, por lo que si se duplica el tamaño del problema 184 00:13:24,000 --> 00:13:27,000 da un paso más y no el doble. 185 00:13:27,000 --> 00:13:29,000 Exactamente. 186 00:13:29,000 --> 00:13:31,000 Esa es una gran respuesta. 187 00:13:31,000 --> 00:13:36,000 La búsqueda lineal está muy comprobación de un elemento a la vez, 188 00:13:36,000 --> 00:13:39,000 y como vimos en el primer día de la conferencia 189 00:13:39,000 --> 00:13:42,000 cuando David fue a través de su ejemplo guía telefónica 190 00:13:42,000 --> 00:13:45,000 y arrancó una página del libro de teléfono a la vez 191 00:13:45,000 --> 00:13:47,000 y seguí haciendo eso una y otra y otra vez, 192 00:13:47,000 --> 00:13:51,000 se lo va a tomar un tiempo muy largo para encontrar a alguien en la guía telefónica, 193 00:13:51,000 --> 00:13:55,000 a menos que, por supuesto, él estaba buscando a alguien en el principio del alfabeto. 194 00:13:55,000 --> 00:14:00,000 Con la búsqueda binaria, puede ir mucho más rápido, 195 00:14:00,000 --> 00:14:05,000 y no es sólo el doble de rápido o 3 veces más rápido o 4 veces más rápido. 196 00:14:05,000 --> 00:14:13,000 Pero el problema se hace más pequeña y más pequeña mucho más rápido. 197 00:14:13,000 --> 00:14:17,000 Para ilustrar esto, vamos a empezar a hablar de lo que está pasando 198 00:14:17,000 --> 00:14:21,000 cuando escribimos búsqueda binaria. 199 00:14:21,000 --> 00:14:27,000 El problema en cuestión es que si yo tengo una matriz de números, 200 00:14:27,000 --> 00:14:40,000 decir, 1, 2, 3, 5, 7, 23, 45, 78, 12323, 201 00:14:40,000 --> 00:14:47,000 y 9 con un montón de 0s después de ella, 202 00:14:47,000 --> 00:14:52,000 queremos ser capaces de averiguar lo que es realmente rápido en 203 00:14:52,000 --> 00:14:57,000 este conjunto de números. 204 00:14:57,000 --> 00:15:00,000 Sé que esto parece un poco tonto y artificial un poco, 205 00:15:00,000 --> 00:15:02,000 porque ahora mismo es. 206 00:15:02,000 --> 00:15:05,000 Tenemos un conjunto que no tiene elementos muy diversos en el mismo, 207 00:15:05,000 --> 00:15:08,000 y si le pregunto a uno de ustedes para saber si es o no 208 00:15:08,000 --> 00:15:11,000 23 está en la matriz, se puede hacer eso con bastante rapidez 209 00:15:11,000 --> 00:15:16,000 con sólo echar un vistazo a esto y decirme sí o no. 210 00:15:16,000 --> 00:15:20,000 El análogo a considerar es imaginar si este fuera, digamos, 211 00:15:20,000 --> 00:15:27,000 una hoja de cálculo de Excel con 10.000 filas, 20.000 filas. 212 00:15:27,000 --> 00:15:31,000 Por supuesto, usted puede hacer el comando o el F F control y buscar algo. 213 00:15:31,000 --> 00:15:33,000 También puede utilizar los filtros y el material de búsqueda, 214 00:15:33,000 --> 00:15:37,000 pero si tuviera que mirar a través de ese archivo línea por línea por línea, 215 00:15:37,000 --> 00:15:40,000 que le tomaría mucho tiempo para encontrarlo. 216 00:15:40,000 --> 00:15:42,000 Es un poco como en el ejemplo de agenda, también, donde 217 00:15:42,000 --> 00:15:44,000 nadie mira a través de una página de un libro de teléfono a la vez. 218 00:15:44,000 --> 00:15:47,000 Típicamente, la abra a la mitad, 219 00:15:47,000 --> 00:15:50,000 o en el caso de un lote de libros y diccionarios de teléfono donde 220 00:15:50,000 --> 00:15:54,000 en realidad se han introducido en la primera letra, 221 00:15:54,000 --> 00:16:01,000 le da la vuelta a la primera carta y abrir y empezar a ir por allí. 222 00:16:01,000 --> 00:16:03,000 >> Recordar de su nombre otra vez. >> Sam. 223 00:16:03,000 --> 00:16:05,000 Sam. 224 00:16:05,000 --> 00:16:11,000 Al igual que Sam dijo que el proceso de búsqueda lineal que va a ser muy lento, 225 00:16:11,000 --> 00:16:15,000 y en su lugar con la búsqueda binaria, la forma en que esto funciona es que 226 00:16:15,000 --> 00:16:21,000 cada vez que vamos a través de una iteración de nuestro algoritmo de búsqueda, 227 00:16:21,000 --> 00:16:27,000 vamos a dividir la lista en dos, esencialmente, 228 00:16:27,000 --> 00:16:33,000 en dos listas más pequeñas. 229 00:16:33,000 --> 00:16:39,000 Y luego, en la siguiente iteración del bucle, lo vamos a dividir de nuevo 230 00:16:39,000 --> 00:16:44,000 en otras listas más pequeñas. 231 00:16:44,000 --> 00:16:48,000 Como se puede ver, el problema se hace cada vez más pequeño y más pequeño 232 00:16:48,000 --> 00:16:55,000 porque guardamos medio descarte de la lista cada vez. 233 00:16:55,000 --> 00:16:59,000 ¿Cómo funciona esto de descarte? 234 00:16:59,000 --> 00:17:05,000 Así como un recordatorio, lo que vamos a hacer si nos quedamos un ordenador 235 00:17:05,000 --> 00:17:11,000 y estábamos, por ejemplo, la búsqueda para el número 5 en la lista 236 00:17:11,000 --> 00:17:15,000 es que se escoge un número en el centro. 237 00:17:15,000 --> 00:17:26,000 En el medio de esta lista, ya que hay 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 números, 238 00:17:26,000 --> 00:17:32,000 nos gustaría escoger el número, ya sea en la posición 4 o en la 5 ª posición, 239 00:17:32,000 --> 00:17:38,000 y que lo llamaría el medio de nuestra lista. 240 00:17:38,000 --> 00:17:42,000 Elija el número en medio. 241 00:17:42,000 --> 00:17:51,000 Entonces, al igual que Sam dijo, vamos a probar para ver si ese número es igual 242 00:17:51,000 --> 00:17:59,000 al número que queremos conseguir o nuestro número deseado. 243 00:17:59,000 --> 00:18:06,000 Si es igual, entonces lo hemos encontrado. Nosotros ganamos. 244 00:18:06,000 --> 00:18:12,000 Si no es igual, entonces hay un par de casos. 245 00:18:12,000 --> 00:18:15,000 Los dos casos son ya sea el número ha de ser mayor que el número que está mirando, 246 00:18:15,000 --> 00:18:19,000 o es menor que. 247 00:18:19,000 --> 00:18:25,000 Si es mayor, nos movemos hacia la derecha. 248 00:18:25,000 --> 00:18:33,000 Y si es menos, nos movemos hacia la izquierda. 249 00:18:33,000 --> 00:18:41,000 Y luego repetir el proceso de nuevo 250 00:18:41,000 --> 00:18:48,000 ya sea en la mitad derecha o la mitad izquierda de la lista. 251 00:18:48,000 --> 00:18:51,000 >> El primer problema en la sección de hoy es averiguar 252 00:18:51,000 --> 00:18:55,000 la forma en que puede comenzar a expresar esto en código C. 253 00:18:55,000 --> 00:18:58,000 Tenemos el pseudocódigo aquí. 254 00:18:58,000 --> 00:19:04,000 Lo que vamos a empezar a hacer es que me voy a levantar un nuevo espacio, 255 00:19:04,000 --> 00:19:09,000 guardar esta revisión para que tengamos estas notas para más adelante, 256 00:19:09,000 --> 00:19:20,000 vamos a borrar todo esto, y luego copiar y pegar desde el conjunto de problemas 257 00:19:20,000 --> 00:19:26,000 esta información en nuestros espacios, y espero que esto no se rompe. 258 00:19:26,000 --> 00:19:28,000 Perfecto. 259 00:19:28,000 --> 00:19:33,000 Si ustedes todo eso, copiar y pegar este código en el nuevo espacio, 260 00:19:33,000 --> 00:19:43,000 en uno en blanco. 261 00:19:43,000 --> 00:19:47,000 Vamos a tratar de Daniel. Si compila y ejecuta este programa, ¿funciona? 262 00:19:47,000 --> 00:19:49,000 >> No. ¿Qué está diciendo? 263 00:19:49,000 --> 00:19:53,000 Dice el control llega al final de la no función void. 264 00:19:53,000 --> 00:19:55,000 Sí, así que voy a tratar de ejecutarlo. 265 00:19:55,000 --> 00:19:59,000 ¿Han visto esto antes? ¿Sabe usted lo que esto significa? 266 00:19:59,000 --> 00:20:01,000 Bueno, vamos a analizar esto un poco. 267 00:20:01,000 --> 00:20:10,000 Es como decir a file.c en la línea 9, columna 1 tenemos un error, como usted ha dicho, 268 00:20:10,000 --> 00:20:16,000 y se dice que está derivada de la advertencia de error y la advertencia de tipo de retorno. 269 00:20:16,000 --> 00:20:18,000 Parece que algo está pasando con el tipo de cambio, lo cual tiene sentido. 270 00:20:18,000 --> 00:20:21,000 Tenemos una función no nula, lo que significa que tenemos una función 271 00:20:21,000 --> 00:20:24,000 que no volverá vacía. 272 00:20:24,000 --> 00:20:27,000 Una función de vacío es el que se parece a esto: 273 00:20:27,000 --> 00:20:35,000 void foo (), y es nulo porque el tipo de retorno es nulo, 274 00:20:35,000 --> 00:20:38,000 lo que significa que si tuviéramos algo aquí 275 00:20:38,000 --> 00:20:45,000 como return 1, obtendríamos un error del compilador para esto. 276 00:20:45,000 --> 00:20:49,000 Sin embargo, tenemos una función no nula. 277 00:20:49,000 --> 00:20:51,000 Nuestra función no nula en este caso es nuestra función de búsqueda 278 00:20:51,000 --> 00:20:56,000 porque tiene un tipo de retorno de bool. 279 00:20:56,000 --> 00:20:59,000 Cuando se dice que el control llega al final de una función no nula, 280 00:20:59,000 --> 00:21:02,000 es porque la búsqueda no tiene una sentencia return. 281 00:21:02,000 --> 00:21:04,000 No está volviendo algo de tipo bool. 282 00:21:04,000 --> 00:21:09,000 >> Podemos arreglar eso, y lo que creo que ustedes 283 00:21:09,000 --> 00:21:13,000 búsqueda debe devolver por defecto? 284 00:21:13,000 --> 00:21:16,000 ¿Cuál debe ser el valor de retorno por defecto de la búsqueda? 285 00:21:16,000 --> 00:21:19,000 Porque eso es lo que podemos hacer al final. 286 00:21:19,000 --> 00:21:21,000 Charlotte, ¿tiene usted alguna-? 287 00:21:21,000 --> 00:21:23,000 ¿Verdadero o falso? >> Verdadero o falso. 288 00:21:23,000 --> 00:21:26,000 ¿Cuál? 289 00:21:26,000 --> 00:21:28,000 Falso. No se. 290 00:21:28,000 --> 00:21:30,000 Falso? Vamos a intentarlo. 291 00:21:30,000 --> 00:21:32,000 ¿Por qué dices return false? Eso es una gran intuición. 292 00:21:32,000 --> 00:21:35,000 [Charlotte] No lo sé. 293 00:21:35,000 --> 00:21:39,000 Vamos a volver falsa en este caso, porque esta será nuestra forma predeterminada 294 00:21:39,000 --> 00:21:44,000 Si por alguna razón la lista está vacía o la aguja 295 00:21:44,000 --> 00:21:46,000 que estamos buscando no existe. 296 00:21:46,000 --> 00:21:50,000 Luego, al final, si no devolver true anteriormente en esta función, 297 00:21:50,000 --> 00:21:55,000 siempre sabemos que esta función va a decir No, no está en la matriz. 298 00:21:55,000 --> 00:21:58,000 No está en el pajar. 299 00:21:58,000 --> 00:22:03,000 Ahora bien, si compilarlo y ejecutarlo, me deja guardar esto para que podamos tirar de él hacia arriba. 300 00:22:03,000 --> 00:22:08,000 Ahora bien, si compilar y ejecutar nuestro programa, que se basa. 301 00:22:08,000 --> 00:22:12,000 Conseguimos nuestro sistema poco. 302 00:22:12,000 --> 00:22:20,000 Si lo golpeo 4-uh-oh. 303 00:22:20,000 --> 00:22:25,000 No imprima nada. Parece que todo terminó bien. 304 00:22:25,000 --> 00:22:35,000 Tenemos que llenar este pulg 305 00:22:35,000 --> 00:22:39,000 Hablamos sobre el algoritmo en pseudocódigo un poco atrás. 306 00:22:39,000 --> 00:22:44,000 Vamos a ver, salvo esto, 307 00:22:44,000 --> 00:22:49,000 y voy a tirar de ese algoritmo de nuevo. 308 00:22:49,000 --> 00:22:51,000 Vamos a golpear a este tipo. Nope. 309 00:22:51,000 --> 00:22:58,000 Ahí está. 310 00:22:58,000 --> 00:23:03,000 ¿Cómo podemos hacer esto? 311 00:23:03,000 --> 00:23:11,000 ¿Cuál sería una buena estrategia para iniciar la marcha este código? 312 00:23:11,000 --> 00:23:16,000 Tienes que escoger un número en el centro. 313 00:23:16,000 --> 00:23:23,000 ¿Cómo escoger un número en el medio de una matriz? 314 00:23:23,000 --> 00:23:25,000 ¿Alguna sugerencia? 315 00:23:25,000 --> 00:23:27,000 [Estudiante] Strlen dividido por 2. 316 00:23:27,000 --> 00:23:32,000 Strlen dividido por 2. Eso es un gran uno. 317 00:23:32,000 --> 00:23:35,000 Strlen trabaja con tipos especiales de matrices. 318 00:23:35,000 --> 00:23:38,000 ¿Qué tipo de arreglos? 319 00:23:38,000 --> 00:23:44,000 Arreglos de cuerdas, conjuntos de caracteres. 320 00:23:44,000 --> 00:23:48,000 Es el mismo tipo de concepto que queremos aplicar, 321 00:23:48,000 --> 00:23:52,000 pero no podemos usar strlen porque no tenemos una gran variedad de personajes. 322 00:23:52,000 --> 00:23:55,000 Tenemos una matriz de enteros. 323 00:23:55,000 --> 00:23:58,000 Pero, ¿qué strlen conseguir para nosotros? 324 00:23:58,000 --> 00:24:01,000 ¿Sabe lo que le puede pasar a nosotros? 325 00:24:01,000 --> 00:24:03,000 [Estudiante] Strlen nos lleva a la longitud. 326 00:24:03,000 --> 00:24:05,000 Exactamente, nos lleva a la longitud. 327 00:24:05,000 --> 00:24:09,000 Strlen obtiene la longitud de la matriz para nosotros. 328 00:24:09,000 --> 00:24:14,000 >> ¿Cómo conseguimos que en nuestro programa de búsqueda binaria? 329 00:24:14,000 --> 00:24:18,000 ¿Cómo obtener la longitud de un array? 330 00:24:18,000 --> 00:24:20,000 [Estudiante] Strlen? 331 00:24:20,000 --> 00:24:25,000 Usted puede obtener la longitud de una matriz de cadenas con el formato correcto C strlen. 332 00:24:25,000 --> 00:24:31,000 El problema, sin embargo, es que no tenemos una matriz de cadenas. 333 00:24:31,000 --> 00:24:36,000 Si miramos hacia atrás en este código, tenemos esta matriz de enteros. 334 00:24:36,000 --> 00:24:38,000 ¿Cómo sabemos cuánto tiempo es? 335 00:24:38,000 --> 00:24:44,000 [Estudiante] ¿Hay un equivalente de punto final, como l int o algo así? 336 00:24:44,000 --> 00:24:49,000 Resulta que hay en realidad no lo es, y así, en cierto modo, es esta 337 00:24:49,000 --> 00:24:52,000 una de esas cosas que es bueno saber acerca de C, 338 00:24:52,000 --> 00:24:57,000 que no hay manera de obtener la longitud de una matriz 339 00:24:57,000 --> 00:24:59,000 si todo lo que te dan es la matriz. 340 00:24:59,000 --> 00:25:02,000 La razón de que funciona con cadenas, la razón strlen obras, 341 00:25:02,000 --> 00:25:06,000 es porque si una cadena tiene el formato correcto, 342 00:25:06,000 --> 00:25:12,000 que tendrá ese especial carácter \ 0 en el final. 343 00:25:12,000 --> 00:25:16,000 >> También se puede imaginar si usted tiene una cadena con formato incorrecto 344 00:25:16,000 --> 00:25:20,000 y no hay carácter \ 0 existe, entonces la cosa no funciona. 345 00:25:20,000 --> 00:25:22,000 [Estudiante] ¿Se puede añadir el \ 0? 346 00:25:22,000 --> 00:25:24,000 Podríamos en este caso. 347 00:25:24,000 --> 00:25:29,000 Podríamos añadir algún tipo de \ 0 348 00:25:29,000 --> 00:25:33,000 o algún tipo de significar personaje y luego utilizar eso. 349 00:25:33,000 --> 00:25:36,000 Pero eso no va a funcionar bastante 350 00:25:36,000 --> 00:25:40,000 porque el 0 \ es para un tipo char, 351 00:25:40,000 --> 00:25:43,000 y aquí tenemos ints. 352 00:25:43,000 --> 00:25:46,000 La otra cosa es que si tuviéramos que utilizar un valor especial 353 00:25:46,000 --> 00:25:49,000 como -1 para marcar el final de una matriz 354 00:25:49,000 --> 00:25:54,000 entonces nunca podría almacenar un -1 en nuestros arrays enteros. 355 00:25:54,000 --> 00:25:56,000 Estaríamos atrapados. 356 00:25:56,000 --> 00:26:00,000 Resulta que la única manera de conseguir la longitud 357 00:26:00,000 --> 00:26:03,000 de una matriz en C es en realidad lo recuerdo 358 00:26:03,000 --> 00:26:08,000 cuando lo creó y luego pasar por ahí con la matriz 359 00:26:08,000 --> 00:26:14,000 de modo que cada vez que tengo una función que va a realizar algún trabajo 360 00:26:14,000 --> 00:26:18,000 en una matriz de enteros o flotadores o dobles, o lo que sea, 361 00:26:18,000 --> 00:26:22,000 También tengo que dar la función de la longitud de la matriz, 362 00:26:22,000 --> 00:26:26,000 y eso es exactamente lo que hemos hecho aquí en la función de búsqueda. 363 00:26:26,000 --> 00:26:30,000 Si nos fijamos, lo que hemos hecho cuando pasamos en nuestra amplia aquí, 364 00:26:30,000 --> 00:26:36,000 también pasamos en la longitud, el tamaño. 365 00:26:36,000 --> 00:26:41,000 Lo que ocurre es que hemos llamado aquí esta variable, 366 00:26:41,000 --> 00:26:43,000 este parámetro o argumento. 367 00:26:43,000 --> 00:26:46,000 Esto se conoce como lista de argumentos de una función o una lista de parámetros, 368 00:26:46,000 --> 00:26:51,000 y éstos también se llaman argumentos o parámetros. 369 00:26:51,000 --> 00:26:53,000 La gente utiliza términos diferentes en momentos diferentes. 370 00:26:53,000 --> 00:26:55,000 Yo a veces me intercambiarlos. 371 00:26:55,000 --> 00:27:00,000 Lo que pasa es que esta variable aquí es un nombre similar 372 00:27:00,000 --> 00:27:03,000 a este # define aquí. 373 00:27:03,000 --> 00:27:06,000 Pero no son la misma cosa. 374 00:27:06,000 --> 00:27:11,000 La capitalización es importante. 375 00:27:11,000 --> 00:27:14,000 >> Si nos fijamos en lo que sucede aquí, declaramos 376 00:27:14,000 --> 00:27:18,000 nuestra matriz int, que hemos llamado números. 377 00:27:18,000 --> 00:27:23,000 Lo hemos dado nuestro tamaño, lo que corresponde a nuestro # define en la parte superior. 378 00:27:23,000 --> 00:27:27,000 Va a ser 8. 379 00:27:27,000 --> 00:27:35,000 Y entonces fue cuando nos llame a nuestra función de búsqueda de abajo, 380 00:27:35,000 --> 00:27:40,000 pasamos en el número que desea buscar, que hemos solicite, 381 00:27:40,000 --> 00:27:43,000 obtenido del usuario. 382 00:27:43,000 --> 00:27:46,000 Pasamos de la matriz, estos números, 383 00:27:46,000 --> 00:27:51,000 y entonces también tiene que pasar en el tamaño de la matriz, 384 00:27:51,000 --> 00:27:57,000 y luego el valor de tamaño 8 se almacena 385 00:27:57,000 --> 00:28:01,000 o pasado a este número entero tamaño variable llamada. 386 00:28:01,000 --> 00:28:08,000 Tenemos el tamaño de la matriz. 387 00:28:08,000 --> 00:28:11,000 Ahora bien, si nos remontamos a lo que estábamos hablando antes, 388 00:28:11,000 --> 00:28:14,000 Creo Missy trajo a colación el punto de que lo que teníamos que hacer es conseguir la longitud de la matriz 389 00:28:14,000 --> 00:28:20,000 y lo divide por 2, y que nos dará el punto medio. 390 00:28:20,000 --> 00:28:22,000 Vamos a ver. 391 00:28:22,000 --> 00:28:25,000 ¿Puedo tener a alguien escribir esto y lo guarda en su espacio? 392 00:28:25,000 --> 00:28:27,000 ¿Qué hay de Leila? 393 00:28:27,000 --> 00:28:31,000 ¿Puedo tener que escribir esto en? 394 00:28:31,000 --> 00:28:35,000 Escriba la primera línea donde se toma la longitud de la matriz y obtener el punto medio 395 00:28:35,000 --> 00:28:41,000 y almacenarlo en una variable nueva. 396 00:28:41,000 --> 00:28:44,000 Te voy a dar un par de segundos. ¿Estás listo? 397 00:28:44,000 --> 00:28:46,000 [Estudiante inaudible] 398 00:28:46,000 --> 00:28:50,000 Claro, podría haber se calcula el punto medio 399 00:28:50,000 --> 00:28:55,000 de la matriz pajar dentro de la función de búsqueda 400 00:28:55,000 --> 00:29:03,000 utilizando la longitud de la matriz haystack, que es la variable de tamaño? 401 00:29:03,000 --> 00:29:08,000 No hay nada complicado aquí. 402 00:29:08,000 --> 00:29:12,000 [Leila] Just tamaño / 2 y sólo 403 00:29:12,000 --> 00:29:17,000 Y guardarlo, y pulse el botón Guardar para arriba aquí en la parte superior, 404 00:29:17,000 --> 00:29:19,000 y vamos a tirar de él hacia arriba. 405 00:29:19,000 --> 00:29:22,000 Perfecto. 406 00:29:22,000 --> 00:29:28,000 Ahí vamos. Awesome. 407 00:29:28,000 --> 00:29:30,000 >> Como es, ¿esta compilación? 408 00:29:30,000 --> 00:29:32,000 [Leila] No, tiene que ser más alto. 409 00:29:32,000 --> 00:29:34,000 [Nate] Sí, ¿y qué tenemos que hacer? 410 00:29:34,000 --> 00:29:36,000 [Leila] Como punto medio int o algo así. 411 00:29:36,000 --> 00:29:41,000 Awesome. Sí, vamos a hacer eso, int = punto medio tamaño. 412 00:29:41,000 --> 00:29:44,000 ¿Esta compilación? 413 00:29:44,000 --> 00:29:47,000 Vamos a borrar este comentario y sacarlo del camino. 414 00:29:47,000 --> 00:29:50,000 Lo que no se compilará sobre esto? 415 00:29:50,000 --> 00:29:52,000 No estamos haciendo nada con número entero, 416 00:29:52,000 --> 00:29:55,000 así que tenemos que imprimir o algo por el estilo. 417 00:29:55,000 --> 00:29:58,000 Sí, exactamente. 418 00:29:58,000 --> 00:30:00,000 Tendremos una variable no utilizada. 419 00:30:00,000 --> 00:30:02,000 ¿Qué otra cosa no va a funcionar esto? 420 00:30:02,000 --> 00:30:06,000 Creo que dijo algo, Sam. Punto y coma. 421 00:30:06,000 --> 00:30:08,000 Sí, me estoy perdiendo los puntos y comas. 422 00:30:08,000 --> 00:30:14,000 Va a ser algo constante durante todo el transcurso del plazo. 423 00:30:14,000 --> 00:30:17,000 La última cosa que voy a hacer es que voy a poner un poco de espacio en blanco en ambos lados 424 00:30:17,000 --> 00:30:23,000 de este operador aquí, ya que es típicamente cómo lo hacemos 425 00:30:23,000 --> 00:30:26,000 de acuerdo con nuestra guía de estilo. 426 00:30:26,000 --> 00:30:29,000 Tenemos el punto medio de nuestra matriz. 427 00:30:29,000 --> 00:30:32,000 Ahora bien, si recordamos a nuestro algoritmo, 428 00:30:32,000 --> 00:30:37,000 lo que fue el segundo paso que teníamos que hacer una vez que tengamos el punto medio? 429 00:30:37,000 --> 00:30:42,000 [Estudiante] Si es mayor [inaudible]. 430 00:30:42,000 --> 00:30:48,000 Sí, por lo que tenemos que hacer algún tipo de comparación, y qué estamos comparando aquí? 431 00:30:48,000 --> 00:30:53,000 Dijiste que si es mayor que. ¿Qué hay en esa frase se refiere? 432 00:30:53,000 --> 00:30:57,000 El número que aparece, si es mayor que el punto medio, y luego subir a la matriz? 433 00:30:57,000 --> 00:31:05,000 Exactamente lo que el número que aparece cuando nosotros- 434 00:31:05,000 --> 00:31:10,000 La aguja, por lo que estamos comparando a la aguja, 435 00:31:10,000 --> 00:31:12,000 y qué estamos comparando contra la aguja? 436 00:31:12,000 --> 00:31:15,000 Debido a que la aguja es lo que estamos buscando. 437 00:31:15,000 --> 00:31:18,000 Lo estamos comparando para llegar al punto medio. 438 00:31:18,000 --> 00:31:21,000 >> Pero ¿tiene sentido para verificar 439 00:31:21,000 --> 00:31:27,000 si la aguja del punto medio =? 440 00:31:27,000 --> 00:31:32,000 ¿Eso tiene sentido? 441 00:31:32,000 --> 00:31:35,000 ¿Alguien no está de acuerdo? 442 00:31:35,000 --> 00:31:40,000 Vamos a darle una oportunidad, si (== aguja punto medio). 443 00:31:40,000 --> 00:31:42,000 [Estudiante] printf No lo encontró. 444 00:31:42,000 --> 00:31:51,000 [Nate] printf ("Lo hemos encontrado \ n"); 445 00:31:51,000 --> 00:31:56,000 De lo contrario-Voy a empezar a hacer algo diferente aquí. 446 00:31:56,000 --> 00:32:00,000 Voy a empezar a poner llaves alrededor de si las declaraciones de todo el tiempo 447 00:32:00,000 --> 00:32:05,000 porque si añadimos más cosas, entonces 448 00:32:05,000 --> 00:32:07,000 no obtenemos los compiladores. 449 00:32:07,000 --> 00:32:09,000 Sí, Sam. Tienes un punto. 450 00:32:09,000 --> 00:32:12,000 El problema es que el punto medio representa una posición en la matriz, 451 00:32:12,000 --> 00:32:15,000 pero usted puede conseguir que representan el valor en esa posición de la matriz. 452 00:32:15,000 --> 00:32:17,000 Eso es un gran punto. 453 00:32:17,000 --> 00:32:19,000 ¿Todos oír lo que dijo Sam? 454 00:32:19,000 --> 00:32:22,000 Dijo que el punto medio como es 455 00:32:22,000 --> 00:32:28,000 representa sólo una posición en la matriz, pero no es el elemento real en la matriz. 456 00:32:28,000 --> 00:32:30,000 Si se piensa en el código como está escrito en este momento, 457 00:32:30,000 --> 00:32:35,000 si nos fijamos en esta serie aquí abajo, que cuenta con 8 elementos en ella, 458 00:32:35,000 --> 00:32:39,000 ¿cuál es el valor del punto medio va a estar en esta función? 459 00:32:39,000 --> 00:32:41,000 [Estudiante] 4. 460 00:32:41,000 --> 00:32:45,000 [Nate] 4. 461 00:32:45,000 --> 00:32:51,000 Si buscamos el número 4 - 462 00:32:51,000 --> 00:32:54,000 y que sólo puede ejecutar este código y poner una cara triste aquí 463 00:32:54,000 --> 00:32:58,000 porque no encontrarlo si ejecuta este código 464 00:32:58,000 --> 00:33:04,000 como está ahora, subirlo, edificio, déjame desplazarse hacia abajo, 465 00:33:04,000 --> 00:33:09,000 y si buscamos el número 4, 466 00:33:09,000 --> 00:33:18,000 que lo encontramos, pero no llegamos a este printf sí. 467 00:33:18,000 --> 00:33:23,000 Una de las razones es que no nos devolverá true, 468 00:33:23,000 --> 00:33:26,000 pero en realidad encontrar el número 4? 469 00:33:26,000 --> 00:33:28,000 Y Sam está diciendo no. 470 00:33:28,000 --> 00:33:31,000 ¿Qué encontramos? 471 00:33:31,000 --> 00:33:35,000 Realmente encontrado el punto medio, que si nos fijamos en la matriz aquí abajo, 472 00:33:35,000 --> 00:33:38,000 que va a ser el elemento en el índice 4 que estamos viendo, 473 00:33:38,000 --> 00:33:42,000 que tiene 23 años. 474 00:33:42,000 --> 00:33:46,000 >> ¿Cómo podemos realmente conseguir ese elemento en el punto medio 475 00:33:46,000 --> 00:33:48,000 y no sólo el propio punto medio? 476 00:33:48,000 --> 00:33:52,000 [Estudiante] Nos gustaría introducir caracteres o algo así? 477 00:33:52,000 --> 00:33:55,000 ¿Qué haría eso, sólo por curiosidad? 478 00:33:55,000 --> 00:33:57,000 ¿Nos puedes contar un poco más? 479 00:33:57,000 --> 00:34:02,000 Hay que transformar la posición en el número, 480 00:34:02,000 --> 00:34:05,000 por lo que tengo que hacer alguna conexión-Creo que es char, pero no pudo ser. 481 00:34:05,000 --> 00:34:07,000 Sí, eso es un buen punto. 482 00:34:07,000 --> 00:34:12,000 Hemos estado haciendo un montón de puestos de esta conversión en caracteres, estos personajes, 483 00:34:12,000 --> 00:34:14,000 en los boletines de ejercicios dos primeras. 484 00:34:14,000 --> 00:34:18,000 Resulta que aquí, esto es casi similar a 485 00:34:18,000 --> 00:34:24,000 el acceso a la i-ésima carácter dentro de una cadena, si eso tiene sentido. 486 00:34:24,000 --> 00:34:30,000 Aquí queremos acceder al elemento del punto medio. 487 00:34:30,000 --> 00:34:34,000 ¿Cómo podemos hacer eso? 488 00:34:34,000 --> 00:34:39,000 Kevin, ¿tiene usted alguna sugerencia de cómo podemos hacer eso? 489 00:34:39,000 --> 00:34:44,000 Usted podría hacer pajar, corchete abierto, medio, cerrado soporte. 490 00:34:44,000 --> 00:34:46,000 ¿Puedes escribir eso para nosotros? 491 00:34:46,000 --> 00:34:51,000 Guárdelo en aquí, y vamos a tirar eso. 492 00:34:51,000 --> 00:34:56,000 Estamos pensando en esta línea 9, 493 00:34:56,000 --> 00:34:59,000 y nos estamos dando cuenta de que no queremos comparar la aguja hacia el punto medio, 494 00:34:59,000 --> 00:35:03,000 pero en cambio, queremos comparar la aguja 495 00:35:03,000 --> 00:35:07,000 al elemento en el punto medio puesto dentro de nuestra gama pajar. 496 00:35:07,000 --> 00:35:10,000 Cool. 497 00:35:10,000 --> 00:35:12,000 Ahí vamos. 498 00:35:12,000 --> 00:35:15,000 Sí, eso se ve muy bien, si (== pajar aguja [punto medio]). 499 00:35:15,000 --> 00:35:18,000 Lo encontramos. 500 00:35:18,000 --> 00:35:22,000 Ahora bien, si nos encontramos de nuevo el código-nosotros un poco de bits 501 00:35:22,000 --> 00:35:26,000 compila, ejecuta, y ahora si nos fijamos para 4, 502 00:35:26,000 --> 00:35:30,000 no lo encuentra porque ahora estamos consiguiendo realmente el número 23. 503 00:35:30,000 --> 00:35:33,000 Estamos recibiendo el valor de 23, y eso es lo que estamos comparando a nuestro aguja. 504 00:35:33,000 --> 00:35:35,000 Pero eso es bueno. Eso es un paso en la dirección correcta. 505 00:35:35,000 --> 00:35:37,000 >> Eso es lo que estamos tratando de hacer. 506 00:35:37,000 --> 00:35:40,000 No estamos tratando de comparar la aguja contra las posiciones de la matriz 507 00:35:40,000 --> 00:35:44,000 sino más bien contra los elementos reales en la matriz. 508 00:35:44,000 --> 00:35:49,000 Si miramos hacia atrás de nuevo ahora en el siguiente paso en nuestro algoritmo, 509 00:35:49,000 --> 00:35:51,000 ¿cuál es el siguiente paso? 510 00:35:51,000 --> 00:35:57,000 Leila ya lo mencionó brevemente. 511 00:35:57,000 --> 00:36:00,000 [Estudiante] Revise para ver si es mayor o menor que y luego decidir en qué dirección moverse. 512 00:36:00,000 --> 00:36:03,000 [Nate] Sí, ¿cómo lo haríamos? 513 00:36:03,000 --> 00:36:07,000 ¿Se puede poner en un cierto I'Ll de ahorro de esta revisión, 514 00:36:07,000 --> 00:36:13,000 y luego, si pones en algunas líneas que harán eso. 515 00:36:13,000 --> 00:36:15,000 Sí, Charlotte. >> Tengo una pregunta. 516 00:36:15,000 --> 00:36:19,000 ¿No debería ser el punto medio - 1, porque lo primero es 517 00:36:19,000 --> 00:36:26,000 está indexado 0, así que si ponemos 4, eso no es realmente el personaje que estas buscando? 518 00:36:26,000 --> 00:36:30,000 Sí, y el otro problema que es- 519 00:36:30,000 --> 00:36:35,000 eso es una gran captura, porque lo que va a terminar pasando posiblemente 520 00:36:35,000 --> 00:36:42,000 si nos mantenemos en movimiento y no siempre ajustar inicialmente? 521 00:36:42,000 --> 00:36:46,000 Supongo que lo que podría terminar haciendo es tratar de acceder a 522 00:36:46,000 --> 00:36:49,000 el elemento en la posición 8 de la matriz, 523 00:36:49,000 --> 00:36:53,000 que en este caso no existe. 524 00:36:53,000 --> 00:36:56,000 Estaremos dispuestos a hacer algún tipo de contabilidad por el hecho de 525 00:36:56,000 --> 00:36:59,000 que tenemos una indexación cero. 526 00:36:59,000 --> 00:37:05,000 [Charlotte] Lo siento, me refería punto medio - 1 en los corchetes. 527 00:37:05,000 --> 00:37:08,000 Podemos hacer eso. 528 00:37:08,000 --> 00:37:10,000 Volveremos a este tema en un poco. 529 00:37:10,000 --> 00:37:13,000 Una vez que empezamos a llegar al bucle actual, 530 00:37:13,000 --> 00:37:16,000 que es cuando realmente va a ver esto entran en juego. 531 00:37:16,000 --> 00:37:21,000 Por el momento, no podemos hacer esto, pero usted es totalmente correcto. 532 00:37:21,000 --> 00:37:28,000 Que la indización de cero tendrá un efecto que hay que explicar. 533 00:37:28,000 --> 00:37:30,000 Vamos a ver. 534 00:37:30,000 --> 00:37:34,000 >> ¿Cómo es la mayor que y menor que-? 535 00:37:34,000 --> 00:37:36,000 [Estudiante] tengo cómo hacer el mayor que y menor que parte. 536 00:37:36,000 --> 00:37:41,000 Yo no estaba seguro de lo que desea imprimir si usted encuentra que es menos de la mitad pajar o superior. 537 00:37:41,000 --> 00:37:43,000 Aquí puedo salvar lo que he- 538 00:37:43,000 --> 00:37:47,000 [Nate] Sí, si guarda lo que tienes, y vamos a tirar de él hacia arriba. 539 00:37:47,000 --> 00:37:49,000 Ahí vamos. 540 00:37:49,000 --> 00:37:51,000 [Estudiante] Y puse signos de interrogación para lo que yo no sabía. 541 00:37:51,000 --> 00:37:54,000 [Nate] Eso se ve muy bien. 542 00:37:54,000 --> 00:37:58,000 Aquí tenemos signos de interrogación porque aún no sabemos 543 00:37:58,000 --> 00:38:06,000 lo que vamos a hacer todavía. 544 00:38:06,000 --> 00:38:12,000 ¿Qué queremos hacer-oops, tenemos unas llaves todos cobardes de nosotros. 545 00:38:12,000 --> 00:38:15,000 Vamos a corregir estos aparatos. 546 00:38:15,000 --> 00:38:19,000 Ahí vamos. 547 00:38:19,000 --> 00:38:22,000 Y así, ¿qué es lo que queremos hacer, de acuerdo a nuestro algoritmo, 548 00:38:22,000 --> 00:38:27,000 si no encontramos la aguja? 549 00:38:27,000 --> 00:38:32,000 Digamos, en el caso de que la aguja es menos de lo que estamos viendo. Kevin. 550 00:38:32,000 --> 00:38:34,000 Buscar sólo en la mitad izquierda. 551 00:38:34,000 --> 00:38:40,000 Bien, entonces vamos a poner un comentario aquí que dice "mira a la mitad izquierda". 552 00:38:40,000 --> 00:38:46,000 Y si la aguja es mayor que el pajar en el punto medio, ¿qué es lo que queremos hacer? 553 00:38:46,000 --> 00:38:48,000 [Estudiante] Entonces nos fijamos en la mitad derecha. 554 00:38:48,000 --> 00:38:53,000 Mira la mitad derecha, "mira a medias." 555 00:38:53,000 --> 00:38:58,000 No está mal. 556 00:38:58,000 --> 00:39:05,000 Bien, en este punto, las cosas se ven bastante bien. 557 00:39:05,000 --> 00:39:13,000 El problema con el código como está escrito es lo que? 558 00:39:13,000 --> 00:39:15,000 [Estudiante] Usted no tiene puntos finales de las dos mitades. 559 00:39:15,000 --> 00:39:18,000 Cierto, no tenemos puntos finales para las dos mitades. 560 00:39:18,000 --> 00:39:20,000 Asimismo, sólo se va a pasar por esto una vez. 561 00:39:20,000 --> 00:39:23,000 Sólo vamos a ver un punto medio. 562 00:39:23,000 --> 00:39:27,000 O bien el elemento está ahí, o no lo es. 563 00:39:27,000 --> 00:39:34,000 Para completar esto, tendremos que hacer algún tipo de repetición. 564 00:39:34,000 --> 00:39:39,000 Tenemos que seguir repitiendo hasta que nos encontramos con que 565 00:39:39,000 --> 00:39:43,000 o bien el elemento está ahí porque hemos reducido y finalmente lo encontró, 566 00:39:43,000 --> 00:39:46,000 o no está allí porque hemos buscado a través de todas las cosas 567 00:39:46,000 --> 00:39:52,000 en las mitades correspondientes de la matriz y se encontró que no hay nada en allí. 568 00:39:52,000 --> 00:39:56,000 >> Cada vez que tenemos esta repetición pasando, ¿qué vamos a utilizar? 569 00:39:56,000 --> 00:39:58,000 [Estudiante] Un bucle. 570 00:39:58,000 --> 00:40:00,000 Una especie de bucle. Sí. 571 00:40:00,000 --> 00:40:03,000 [Estudiante] ¿Podemos hacer un bucle do-while y la tengan en hacer eso y luego, mientras 572 00:40:03,000 --> 00:40:10,000 la aguja no es igual, estoy seguro de a dónde iba con eso. 573 00:40:10,000 --> 00:40:18,000 Pero algo así como hacer que el tiempo que no es igual al valor que la entrada del usuario. 574 00:40:18,000 --> 00:40:21,000 Sí, así que vamos a ver, ¿cómo podría escribirse? 575 00:40:21,000 --> 00:40:23,000 Usted ha dicho que vamos a utilizar un bucle do-while. 576 00:40:23,000 --> 00:40:26,000 ¿De dónde viene el comienzo hacer? 577 00:40:26,000 --> 00:40:33,000 [Estudiante] Inmediatamente después de la talla / 2. 578 00:40:33,000 --> 00:40:42,000 [Nate] Bueno, y ¿qué vamos a hacer? 579 00:40:42,000 --> 00:40:44,000 Vamos a llenar el rato. 580 00:40:44,000 --> 00:40:46,000 ¿Qué vamos a hacer? 581 00:40:46,000 --> 00:40:49,000 [Estudiante] No queremos hacer todas las cosas que tenemos en la parte de si? 582 00:40:49,000 --> 00:40:52,000 [Nate] ¿Es todo esto, genial. 583 00:40:52,000 --> 00:40:55,000 Copiar y pegar. 584 00:40:55,000 --> 00:40:59,000 Oh, hombre. 585 00:40:59,000 --> 00:41:03,000 Vamos a ver si esto funciona, si podemos ficha sobre esto. 586 00:41:03,000 --> 00:41:08,000 Hermosa. 587 00:41:08,000 --> 00:41:16,000 Muy bien, y nos ahorramos esto para que ustedes lo tienen. 588 00:41:16,000 --> 00:41:21,000 Muy bien, y vamos a hacerlo mientras- 589 00:41:21,000 --> 00:41:25,000 ¿cuál fue la condición mientras que buscabas? 590 00:41:25,000 --> 00:41:31,000 [Estudiante] Mientras que la aguja no es igual, así como el signo de exclamación. 591 00:41:31,000 --> 00:41:37,000 Pero no estoy seguro de lo que es todavía. 592 00:41:37,000 --> 00:41:39,000 [Nate] Sí, esta es una manera de hacerlo. 593 00:41:39,000 --> 00:41:41,000 Sam, ¿tienes algún comentario? 594 00:41:41,000 --> 00:41:43,000 [Sam] recordé cuando vi los videos, 595 00:41:43,000 --> 00:41:48,000 Tomé una captura de pantalla de una de las parecida a cuando hicimos el pseudocódigo para ello, 596 00:41:48,000 --> 00:41:52,000 existe una cierta relación entre MAX y MIN. 597 00:41:52,000 --> 00:41:58,000 Creo que fue algo así como si el máximo es siempre menor que min. 598 00:41:58,000 --> 00:42:00,000 Lo tengo. 599 00:42:00,000 --> 00:42:04,000 [Sam] O como si Max no es menos minutos o algo así, 600 00:42:04,000 --> 00:42:06,000 porque eso significaría que ha buscado en todo. 601 00:42:06,000 --> 00:42:13,000 >> Sí, ¿y qué hace que suene como máximo y mínimo se refiere? 602 00:42:13,000 --> 00:42:16,000 [Sam] Valores enteros-que los que van a cambiar 603 00:42:16,000 --> 00:42:18,000 respecto al lugar donde ponemos el punto medio. 604 00:42:18,000 --> 00:42:20,000 Exactamente. 605 00:42:20,000 --> 00:42:24,000 [Sam] En ese momento, va a [inaudible] calcular el máximo y el mínimo. 606 00:42:24,000 --> 00:42:29,000 Punto medio es esta idea max y min. 607 00:42:29,000 --> 00:42:35,000 ¿Tiene sentido para la gente? 608 00:42:35,000 --> 00:42:39,000 Si tuviéramos que empezar a ver cómo vamos a hacer esta iteración, 609 00:42:39,000 --> 00:42:43,000 tienes toda la razón que queremos utilizar algún tipo de do-while. 610 00:42:43,000 --> 00:42:49,000 Pero supongo que si tenemos en cuenta lo que está pasando en el lugar de esta matriz 611 00:42:49,000 --> 00:42:53,000 y lo que está ocurriendo en realidad-Voy a escribir por aquí- 612 00:42:53,000 --> 00:42:58,000 en la iteración muy primero de búsqueda binaria, tenemos- 613 00:42:58,000 --> 00:43:05,000 Voy a usar B y E para indicar el comienzo. 614 00:43:05,000 --> 00:43:10,000 Y luego, al final de nuestra matriz. 615 00:43:10,000 --> 00:43:14,000 Sabemos que el inicio es a las 4 por aquí, 616 00:43:14,000 --> 00:43:18,000 y sabemos que el fin está en 108. 617 00:43:18,000 --> 00:43:23,000 Digamos que está buscando el número 15. 618 00:43:23,000 --> 00:43:27,000 La primera vez que hacemos esto, como hemos visto anteriormente, 619 00:43:27,000 --> 00:43:30,000 el punto medio es o va a ser de 16 ó 23 620 00:43:30,000 --> 00:43:34,000 dependiendo de cómo calcular las cosas. 621 00:43:34,000 --> 00:43:37,000 Desde uniformemente divisoria en el medio nos daría este espacio 622 00:43:37,000 --> 00:43:42,000 entre 16 y 23, no se puede dividir uniformemente 623 00:43:42,000 --> 00:43:47,000 o dividirlo y llegar a un punto medio verdadero. 624 00:43:47,000 --> 00:43:49,000 Veremos a los 16. 625 00:43:49,000 --> 00:43:55,000 Nos daremos cuenta de "Hey, 16> 15 que estamos buscando". 626 00:43:55,000 --> 00:43:59,000 Para buscar entonces en la mitad izquierda de la matriz 627 00:43:59,000 --> 00:44:03,000 lo que vamos a terminar haciendo está desechando 628 00:44:03,000 --> 00:44:07,000 esta porción superior entero 629 00:44:07,000 --> 00:44:16,000 y decir: "Bueno, ahora nuestro punto final va a estar aquí." 630 00:44:16,000 --> 00:44:22,000 La siguiente iteración de nuestro bucle, ahora estamos mirando este arreglo, 631 00:44:22,000 --> 00:44:25,000 efectivamente haber descartado esta parte porque ahora 632 00:44:25,000 --> 00:44:30,000 si nos está tomando el punto medio de la diferencia entre el principio y el fin, 633 00:44:30,000 --> 00:44:34,000 encontramos nuestro punto medio a ser 8, 634 00:44:34,000 --> 00:44:40,000 que luego puede probar 8 para ver dónde se encuentra en relación con el número que estamos buscando, 635 00:44:40,000 --> 00:44:44,000 15, encontramos que 15 es mayor, 636 00:44:44,000 --> 00:44:49,000 así que tenemos que ir a la parte derecha de la lista, 637 00:44:49,000 --> 00:44:51,000 que conocemos porque somos seres humanos, y lo podemos ver. 638 00:44:51,000 --> 00:44:54,000 Sabemos que la parte derecha va a estar donde lo encontramos, 639 00:44:54,000 --> 00:45:01,000 pero el equipo no lo sabe, así que lo que voy a hacer es que en realidad va a 640 00:45:01,000 --> 00:45:04,000 han esta sube, y ahora el principio y el fin 641 00:45:04,000 --> 00:45:11,000 son el mismo lugar, de modo que el punto medio se convierte en el único número en la lista en ese punto, 642 00:45:11,000 --> 00:45:16,000 que tiene 15 años, y lo hemos encontrado. 643 00:45:16,000 --> 00:45:21,000 ¿Eso arrojar algo de luz sobre donde esta toda max y min notación va, 644 00:45:21,000 --> 00:45:24,000 hacer el seguimiento de los puntos finales de la matriz con el fin de averiguar 645 00:45:24,000 --> 00:45:35,000 cómo reducir las cosas? 646 00:45:35,000 --> 00:45:42,000 >> ¿Qué pasaría si esto no fuera igual al 15 ahora? 647 00:45:42,000 --> 00:45:52,000 ¿Qué pasa si buscábamos 15 y, en cambio, este número también fueron 16? 648 00:45:52,000 --> 00:45:54,000 Decíamos: "¡Oh, es mayor. 649 00:45:54,000 --> 00:45:57,000 Queremos ir de nuevo a la izquierda. " 650 00:45:57,000 --> 00:46:01,000 Y nos gustaría trasladar nuestra dirección hacia la derecha, 651 00:46:01,000 --> 00:46:06,000 momento en el que tenemos un punto final que sería contradictoria. 652 00:46:06,000 --> 00:46:09,000 No sería capaz de buscar cualquier elementos más 653 00:46:09,000 --> 00:46:13,000 porque ahora tenemos nuestro punto final y nuestro punto de partida, 654 00:46:13,000 --> 00:46:16,000 nuestro max y min nuestro, ahora se volcó. 655 00:46:16,000 --> 00:46:23,000 Buscamos a través de toda la matriz. No podemos encontrar nada. 656 00:46:23,000 --> 00:46:27,000 Ese es el punto en el que nos gustaría decir: "Bueno, vamos a dejar este algoritmo. 657 00:46:27,000 --> 00:46:34,000 No hemos encontrado nada. Sabemos que no está aquí. " 658 00:46:34,000 --> 00:46:36,000 ¿Cómo va? 659 00:46:36,000 --> 00:46:40,000 [Estudiante] ¿Cómo funciona exactamente el ordenador cambiar el final? 660 00:46:40,000 --> 00:46:45,000 ¿Cómo funciona el final antes de terminar el principio? 661 00:46:45,000 --> 00:46:48,000 El extremo termina antes del comienzo 662 00:46:48,000 --> 00:46:54,000 a causa de las matemáticas que vamos a hacer cada vez que hacemos esto. 663 00:46:54,000 --> 00:47:00,000 La forma de cambiar es que si nos fijamos en la primera vez que hacemos este canje 664 00:47:00,000 --> 00:47:03,000 donde tenemos el comienzo y el final 4 en la 665 00:47:03,000 --> 00:47:13,000 todo el camino hacia abajo en 108 y nuestro punto medio, por ejemplo, en 16 - 666 00:47:13,000 --> 00:47:20,000 Voy a volver a cero el 15-si estamos buscando a los 15, 667 00:47:20,000 --> 00:47:25,000 sabíamos que lo que hicimos cuando nos registramos el 16 y vio que era mayor 668 00:47:25,000 --> 00:47:28,000 y quería descartar toda la parte derecha de la lista, 669 00:47:28,000 --> 00:47:36,000 vimos que lo que queríamos hacer es mover este mensaje aquí. 670 00:47:36,000 --> 00:47:44,000 Efectivamente, el correo nos cambiaron a uno antes del punto medio. 671 00:47:44,000 --> 00:47:48,000 Del mismo modo, cuando hicimos esta iteración del algoritmo 672 00:47:48,000 --> 00:47:51,000 y el punto medio era menos 8, 673 00:47:51,000 --> 00:47:55,000 encontramos que 8 <15, así que queríamos que nos cambiaran la b 674 00:47:55,000 --> 00:48:00,000 uno pasado el punto medio. 675 00:48:00,000 --> 00:48:07,000 Ahora, el principio y el final son ambos juntos en este 15. 676 00:48:07,000 --> 00:48:10,000 >> Si hubiéramos estado sucediendo en busca de algún otro valor, no 15, 677 00:48:10,000 --> 00:48:14,000 o si este había sido 15 en vez de 16, 678 00:48:14,000 --> 00:48:20,000 habríamos encontrado que el correo que desea mover uno antes del punto medio. 679 00:48:20,000 --> 00:48:33,000 Ahora el e estaría allí volteado menos de la b. 680 00:48:33,000 --> 00:48:39,000 Vamos a ver cómo podemos realmente llegar a codificar este algoritmo. 681 00:48:39,000 --> 00:48:44,000 Sabemos que queremos tener este cálculo del punto medio. 682 00:48:44,000 --> 00:48:48,000 Sabemos también que queremos para seguir el principio y el final de la matriz 683 00:48:48,000 --> 00:48:51,000 de nuestra gama actual para que podamos entender 684 00:48:51,000 --> 00:48:56,000 donde esta mitad izquierda de la lista es y donde la mitad derecha de la lista es. 685 00:48:56,000 --> 00:49:03,000 Hacemos lo que sea con inicio y fin, 686 00:49:03,000 --> 00:49:07,000 o podemos llamarlos min y max. 687 00:49:07,000 --> 00:49:10,000 Voy a usar empezar y terminar este tiempo. 688 00:49:10,000 --> 00:49:15,000 Cuando empezamos, si miramos hacia atrás en nuestro ejemplo aquí abajo, 689 00:49:15,000 --> 00:49:20,000 nuestro principio se estableció en el principio de la matriz, como algo natural. 690 00:49:20,000 --> 00:49:25,000 ¿Qué índice es esto? Lo nuestro se debe empezar? 691 00:49:25,000 --> 00:49:27,000 Daniel. 692 00:49:27,000 --> 00:49:30,000 [Daniel] Haystack [0]. 693 00:49:30,000 --> 00:49:37,000 [Nate] Sí, así que pudimos igual a pajar [0]. 694 00:49:37,000 --> 00:49:40,000 El problema, sin embargo, es que esta no nos da la posición del primer elemento. 695 00:49:40,000 --> 00:49:45,000 Esto nos da el índice del primer elemento o el valor real en la que la primera posición. 696 00:49:45,000 --> 00:49:47,000 [Estudiante] Que se convierta al 0,20? 697 00:49:47,000 --> 00:49:52,000 [Nate] Qué va a hacer es, bueno, no va a hacer ninguna conversión. 698 00:49:52,000 --> 00:49:56,000 Lo que hará es que almacenará un 4 en comenzar, 699 00:49:56,000 --> 00:49:59,000 y entonces será difícil hacer comparaciones con empezar 700 00:49:59,000 --> 00:50:03,000 porque begin llevará a cabo el valor de 4, 701 00:50:03,000 --> 00:50:06,000 que es el principio de nuestra matriz, 702 00:50:06,000 --> 00:50:08,000 pero queremos hacer un seguimiento de los índices de la matriz 703 00:50:08,000 --> 00:50:11,000 en contraposición a los valores. 704 00:50:11,000 --> 00:50:17,000 En realidad, vamos a usar un 0, por el estilo. 705 00:50:17,000 --> 00:50:20,000 Para el final de la matriz-Charlotte trajo esto un poco antes. 706 00:50:20,000 --> 00:50:23,000 Aquí es donde vamos a tomar en cuenta la indexación cero. 707 00:50:23,000 --> 00:50:25,000 >> Charlotte, ¿cuál es el final de la matriz? 708 00:50:25,000 --> 00:50:28,000 ¿Cuál es el índice del extremo? 709 00:50:28,000 --> 00:50:30,000 [Charlotte] Tamaño - 1. 710 00:50:30,000 --> 00:50:32,000 Sí, y ¿qué talla debería usar? 711 00:50:32,000 --> 00:50:35,000 ¿Debemos utilizar el tamaño de capital o de tamaño minúsculo? 712 00:50:35,000 --> 00:50:37,000 Capital tamaño. 713 00:50:37,000 --> 00:50:42,000 En este caso, podríamos utilizar el tamaño de capital. 714 00:50:42,000 --> 00:50:45,000 Si queremos que esta función esté portátil 715 00:50:45,000 --> 00:50:48,000 y utilizar esta función en otros programas, 716 00:50:48,000 --> 00:50:50,000 de hecho podemos utilizar el tamaño minúsculas. 717 00:50:50,000 --> 00:50:52,000 Es bueno también. 718 00:50:52,000 --> 00:51:01,000 Pero Charlotte es totalmente correcto que queremos tener un tamaño - 1. 719 00:51:01,000 --> 00:51:03,000 En este punto 720 00:51:03,000 --> 00:51:05,000 [Estudiante] ¿Cómo es que usted puede utilizar el tamaño mayúsculas? 721 00:51:05,000 --> 00:51:07,000 ¿Cómo es que podemos usar mayúsculas tamaño? 722 00:51:07,000 --> 00:51:13,000 Resulta que estos # define son muy, 723 00:51:13,000 --> 00:51:19,000 bajo el capó, un texto como buscar y reemplazar, si eso tiene sentido. 724 00:51:19,000 --> 00:51:24,000 Cuando se compila el código, la fase de preprocesamiento 725 00:51:24,000 --> 00:51:27,000 del compilador pasa por el archivo, 726 00:51:27,000 --> 00:51:31,000 y busca por todas partes que usted ha escrito tamaño del capital, 727 00:51:31,000 --> 00:51:39,000 y reemplaza el texto literalmente, con un 8, así como así. 728 00:51:39,000 --> 00:51:42,000 En ese sentido, esto es muy diferente de una variable. 729 00:51:42,000 --> 00:51:45,000 No ocupa espacio en la memoria. 730 00:51:45,000 --> 00:51:52,000 Es un truco Reemplazar texto simple. 731 00:51:52,000 --> 00:51:57,000 En este caso, vamos a utilizar el tamaño. 732 00:51:57,000 --> 00:52:01,000 Desde aquí quiero hacer una especie de repetición, 733 00:52:01,000 --> 00:52:03,000 y estamos en el camino correcto con nuestro do-while. 734 00:52:03,000 --> 00:52:08,000 Queremos hacer algo hasta que una condición no se cumple ya, 735 00:52:08,000 --> 00:52:12,000 y como hemos visto anteriormente, vimos que esa condición 736 00:52:12,000 --> 00:52:19,000 era en verdad que no queremos que al final 737 00:52:19,000 --> 00:52:24,000 a ser menor que el comenzar. 738 00:52:24,000 --> 00:52:26,000 >> Esta es nuestra condición de parada. 739 00:52:26,000 --> 00:52:35,000 Si esto ocurre, queremos detener y declarar como, "Hey, no hemos encontrado nada". 740 00:52:35,000 --> 00:52:43,000 Para expresar esto, se desea utilizar algún tipo de bucle. 741 00:52:43,000 --> 00:52:49,000 En este caso, ¿sería un bucle do-while, un bucle, un bucle while? 742 00:52:49,000 --> 00:52:51,000 Tenemos un bucle do-while aquí. 743 00:52:51,000 --> 00:52:53,000 ¿Es que les guste este enfoque? 744 00:52:53,000 --> 00:52:59,000 ¿Crees que deberíamos intentar un enfoque diferente? 745 00:52:59,000 --> 00:53:01,000 Kevin, alguna idea? 746 00:53:01,000 --> 00:53:06,000 Podríamos tener un bucle while porque sabemos máximo 747 00:53:06,000 --> 00:53:11,000 sería mayor que min en los modos de arranque. 748 00:53:11,000 --> 00:53:14,000 Sí, así que no hay inicialización que tiene que suceder. 749 00:53:14,000 --> 00:53:17,000 Los bucles do-while son grandes cuando se tiene que inicializar algo 750 00:53:17,000 --> 00:53:21,000 antes de esa prueba, mientras que aquí 751 00:53:21,000 --> 00:53:26,000 sabemos que no vamos a mantener reinicializar ambos comienzan y terminan 752 00:53:26,000 --> 00:53:28,000 cada ronda del bucle. 753 00:53:28,000 --> 00:53:32,000 Sabemos que queremos iniciar, a continuación, comprobar nuestra condición. 754 00:53:32,000 --> 00:53:38,000 En este caso, en realidad va a ir con un bucle while simple. 755 00:53:38,000 --> 00:53:44,000 Resulta que do-while se utilizan con poca frecuencia. 756 00:53:44,000 --> 00:53:49,000 Un montón de lugares ni siquiera enseñan qué bucles while. 757 00:53:49,000 --> 00:53:53,000 Son buenos para el manejo de datos del usuario, por lo que hemos visto a muchos de ellos hasta ahora. 758 00:53:53,000 --> 00:53:59,000 Pero normal y bucles while son mucho más comunes. 759 00:53:59,000 --> 00:54:03,000 Resulta que esta condición como escrito 760 00:54:03,000 --> 00:54:09,000 realmente no nos hacen mucho bien, y por qué es eso? 761 00:54:09,000 --> 00:54:11,000 Lo siento, no sé su nombre. 762 00:54:11,000 --> 00:54:13,000 Soy Jerry. >> ¿Cómo? 763 00:54:13,000 --> 00:54:15,000 Es B-O-R-U-I. 764 00:54:15,000 --> 00:54:18,000 Oh, está bien. 765 00:54:18,000 --> 00:54:23,000 Yo no te veo en mi lista. 766 00:54:23,000 --> 00:54:26,000 Oh, es porque-oh, eso tiene sentido. 767 00:54:26,000 --> 00:54:31,000 ¿Tiene una idea de por qué este bucle while puede no funcionar como se pretende, 768 00:54:31,000 --> 00:54:38,000 tal como está escrita con la condición? 769 00:54:38,000 --> 00:54:43,000 [Jerry] ¿Quieres decir como quiere que todas las cosas después de que al-? 770 00:54:43,000 --> 00:54:46,000 Sí, por lo que hay una. 771 00:54:46,000 --> 00:54:49,000 Puede que tengamos que poner todas estas cosas en el bucle while, que es totalmente cierto. 772 00:54:49,000 --> 00:54:55,000 La otra cosa que es un poco más problemático, sin embargo, es que esta condición no funciona. 773 00:54:55,000 --> 00:54:57,000 [Estudiante] Debe darle la vuelta. 774 00:54:57,000 --> 00:55:04,000 Bien, por lo que esta condición no siempre será así inicialmente la forma en que hablamos de eso. 775 00:55:04,000 --> 00:55:08,000 Queremos hacer algo hasta 00:55:13,000 pero queremos hacer algo mientras 777 00:55:13,000 --> 00:55:21,000 empezar final ≤. 778 00:55:21,000 --> 00:55:24,000 >> Hay que invertir la lógica allí. 779 00:55:24,000 --> 00:55:27,000 Yo soy culpable de hacer esos errores todo el tiempo. 780 00:55:27,000 --> 00:55:31,000 [Estudiante] ¿Por qué tiene que ser menor o igual que? 781 00:55:31,000 --> 00:55:33,000 Porque ¿recuerdas el caso de que llegamos a 782 00:55:33,000 --> 00:55:36,000 donde había un solo elemento, y estábamos abajo, 783 00:55:36,000 --> 00:55:43,000 y nos quedamos mirando sólo el 15 en nuestro array? 784 00:55:43,000 --> 00:55:47,000 Y nuestro principio y nuestro fin era el mismo elemento. 785 00:55:47,000 --> 00:55:50,000 Queremos asegurarnos de que manejar este caso. 786 00:55:50,000 --> 00:55:54,000 Si hiciéramos un derecho menor que, 787 00:55:54,000 --> 00:55:58,000 que sólo sería capaz de llegar a un arreglo de 2 elementos. 788 00:55:58,000 --> 00:56:06,000 Una vez que llegamos hasta el último elemento, si ese fuera nuestro elemento, que nunca lo encontraría. 789 00:56:06,000 --> 00:56:10,000 Ahora aquí, podemos hacer exactamente como usted decía. 790 00:56:10,000 --> 00:56:15,000 Podemos empezar plopping cosas a la derecha en el medio de nuestro bucle while. 791 00:56:15,000 --> 00:56:20,000 Podemos plop en nuestro punto medio. 792 00:56:20,000 --> 00:56:24,000 Podemos tomar todo esto si las declaraciones, 793 00:56:24,000 --> 00:56:30,000 sacarlos de este bucle do-while, 794 00:56:30,000 --> 00:56:34,000 plop ellos, 795 00:56:34,000 --> 00:56:39,000 limpiar las cosas un poco, 796 00:56:39,000 --> 00:56:48,000 y voy a seguir adelante y salvar a esta revisión. 797 00:56:48,000 --> 00:56:53,000 Y en este punto, estamos bastante cerca. 798 00:56:53,000 --> 00:56:55,000 Sam. 799 00:56:55,000 --> 00:56:58,000 Creo que también hay que tener punto medio int size = - 1/2. 800 00:56:58,000 --> 00:57:01,000 Tengo, tamaño - 1/2. 801 00:57:01,000 --> 00:57:05,000 ¿Hay algo más que debemos cambiar en esa línea? 802 00:57:05,000 --> 00:57:10,000 Ese fue un buen partido. 803 00:57:10,000 --> 00:57:14,000 >> ¿Qué tamaño de hacerlo? ¿Estamos en constante cambio talla? 804 00:57:14,000 --> 00:57:17,000 Con el fin de mantener la línea de este tipo, tenemos que cambiar el tamaño. 805 00:57:17,000 --> 00:57:21,000 Tenemos que cambiar el tamaño cada vez que vamos alrededor del bucle for. 806 00:57:21,000 --> 00:57:25,000 Pero recuerdo cuando íbamos a través de nuestro ejemplo, sólo un poco antes, 807 00:57:25,000 --> 00:57:30,000 y tuvimos el inicio a las 4 808 00:57:30,000 --> 00:57:33,000 y al final todo el camino a 108? 809 00:57:33,000 --> 00:57:35,000 ¿Cómo se calcula el punto medio? 810 00:57:35,000 --> 00:57:38,000 Estábamos usando el tamaño? 811 00:57:38,000 --> 00:57:40,000 O que estábamos utilizando comienzan y terminan en su lugar? 812 00:57:40,000 --> 00:57:42,000 Es la diferencia entre el final y el principio. 813 00:57:42,000 --> 00:57:50,000 Exactamente, y exactamente cómo debo escribir que, Charlotte? 814 00:57:50,000 --> 00:57:52,000 Solamente deben - comenzar. 815 00:57:52,000 --> 00:57:55,000 Usted no tiene que hacer el - 1 816 00:57:55,000 --> 00:57:58,000 porque el - 1 se ha incluido en el final y el comienzo ya. 817 00:57:58,000 --> 00:58:00,000 [Nate] Great, tienes toda la razón. 818 00:58:00,000 --> 00:58:03,000 No tenemos que hacer el - 1, ya que - 1 se ha incluido 819 00:58:03,000 --> 00:58:08,000 y representó cuando inicializamos la variable final. 820 00:58:08,000 --> 00:58:11,000 >> ¿Hay algo más que deba hacer sintácticamente tener esta línea tiene sentido? 821 00:58:11,000 --> 00:58:13,000 [Estudiante] Más comenzar. >> Plus empezar? 822 00:58:13,000 --> 00:58:15,000 [Estudiante] al final. 823 00:58:15,000 --> 00:58:20,000 Porque se calcula únicamente la mitad de la longitud. 824 00:58:20,000 --> 00:58:26,000 Es necesario agregar el inicio. 825 00:58:26,000 --> 00:58:31,000 [Nate] ¿Qué haría este cálculo para nosotros? 826 00:58:31,000 --> 00:58:35,000 Si pensamos en la final de esta primera iteración del bucle, 827 00:58:35,000 --> 00:58:40,000 final va a ser en el índice de posición 7. 828 00:58:40,000 --> 00:58:43,000 Comience en la posición 0. 829 00:58:43,000 --> 00:58:47,000 Recuerda que estamos buscando, ya sea para 830 00:58:47,000 --> 00:58:52,000 posición 3 o la posición 4. 831 00:58:52,000 --> 00:58:56,000 Si nos fijamos en esta matemática, sólo para hacerlo un poco más tangible, 832 00:58:56,000 --> 00:59:02,000 poner algunos números aquí, tenemos 7, 0, 833 00:59:02,000 --> 00:59:10,000 así 7 a 0, y luego 2 / 834 00:59:10,000 --> 00:59:19,000 es 3 en la división entera, es decir. 835 00:59:19,000 --> 00:59:26,000 Entonces tenemos que agregar luego de vuelta a nuestra comenzar? 836 00:59:26,000 --> 00:59:28,000 No lo hacemos en este caso. 837 00:59:28,000 --> 00:59:31,000 En la primera iteración, va a estar bien porque begin es 0. 838 00:59:31,000 --> 00:59:36,000 Pero a medida que avanzamos, hacemos realmente todo sólo tiene 839 00:59:36,000 --> 00:59:42,000 final - comienza / 2. 840 00:59:42,000 --> 00:59:46,000 Hay un truco aquí otro, y eso es a saber, una de precedencia. 841 00:59:46,000 --> 00:59:49,000 [Estudiante] ¿Necesitamos paréntesis? 842 00:59:49,000 --> 00:59:53,000 [Nate] Exactamente, y eso es porque si no ponemos los paréntesis, 843 00:59:53,000 --> 00:59:58,000 entonces esta línea se interpretarán en lugar 844 00:59:58,000 --> 01:00:09,000 como (final) - (comenzar / 2), que definitivamente no quieren. 845 01:00:09,000 --> 01:00:11,000 ¡Cuidado con las reglas de precedencia. 846 01:00:11,000 --> 01:00:15,000 [Estudiante] ¿Por qué no acabar con ella + empezar? 847 01:00:15,000 --> 01:00:17,000 ¿Por qué no acabar con ella + empezar? 848 01:00:17,000 --> 01:00:19,000 [Estudiante] Por qué no es eso? 849 01:00:19,000 --> 01:00:24,000 ¿Por qué sería +? 850 01:00:24,000 --> 01:00:26,000 Creo que tienes razón. 851 01:00:26,000 --> 01:00:28,000 [Estudiante] Porque es normal? 852 01:00:28,000 --> 01:00:31,000 [Nate] + Fin empezar, tienes toda la razón. 853 01:00:31,000 --> 01:00:34,000 Wow, estoy totalmente metido la pata. Tienes razón. 854 01:00:34,000 --> 01:00:39,000 Si estuviéramos haciendo el signo menos, nos gustaría añadir el comenzar hacia adentro 855 01:00:39,000 --> 01:00:43,000 En este caso, es muy justo que queremos tomar el promedio de los dos, 856 01:00:43,000 --> 01:00:45,000 por lo que las quiero añadir, en lugar de restarlos. 857 01:00:45,000 --> 01:00:49,000 [Estudiante] También funcionaría si hubiera terminado - begin / 2 + de comenzar. 858 01:00:49,000 --> 01:00:55,000 Lo haría si lo hacemos-Creo que sí. 859 01:00:55,000 --> 01:01:00,000 >> Por ejemplo, si estuviéramos mirando a comenzar, 860 01:01:00,000 --> 01:01:04,000 y lo cambió por aquí 861 01:01:04,000 --> 01:01:08,000 a los 15. 862 01:01:08,000 --> 01:01:12,000 Ahora comience en la posición 2. 863 01:01:12,000 --> 01:01:15,000 End está en la posición 7. 864 01:01:15,000 --> 01:01:21,000 Si les restamos, obtenemos 5. 865 01:01:21,000 --> 01:01:24,000 Divida eso por 2, obtenemos 2. 866 01:01:24,000 --> 01:01:27,000 Y luego le añadimos 2 de nuevo, 867 01:01:27,000 --> 01:01:30,000 y que nos lleva a la cuarta posición, 868 01:01:30,000 --> 01:01:33,000 que está aquí, que es el punto medio. 869 01:01:33,000 --> 01:01:36,000 [Estudiante] ¿Tenemos que tener cuidado de envolver? 870 01:01:36,000 --> 01:01:39,000 ¿En qué sentido tenemos que tener cuidado de envolver? 871 01:01:39,000 --> 01:01:43,000 Si la suma o la diferencia entre 872 01:01:43,000 --> 01:01:45,000 dependiendo de cómo lo hacemos no es un número par. 873 01:01:45,000 --> 01:01:49,000 A continuación, el equipo se confunde si cuando es 2,5; 874 01:01:49,000 --> 01:01:52,000 Cómo se mueve hacia la izquierda o hacia la derecha para determinar cuál es el punto medio? 875 01:01:52,000 --> 01:01:54,000 Lo tengo. 876 01:01:54,000 --> 01:01:56,000 Resulta que la división entera, 877 01:01:56,000 --> 01:01:59,000 no siempre obtener estos números en coma flotante. 878 01:01:59,000 --> 01:02:01,000 Nunca obtener el decimal. 879 01:02:01,000 --> 01:02:04,000 Está totalmente descartado. 880 01:02:04,000 --> 01:02:08,000 Si usted tiene una computadora dividir dos variables int, 881 01:02:08,000 --> 01:02:11,000 y uno es 7, y el otro es 2, 882 01:02:11,000 --> 01:02:13,000 usted no recibirá 3,5 como resultado. 883 01:02:13,000 --> 01:02:16,000 Se obtendrá 3. 884 01:02:16,000 --> 01:02:19,000 El resto se descarta, por lo que es efectivamente el redondeo 885 01:02:19,000 --> 01:02:24,000 no una ronda, sino más bien un piso, si ustedes están familiarizados con el de las matemáticas, 886 01:02:24,000 --> 01:02:27,000 donde descartar completamente el decimal, 887 01:02:27,000 --> 01:02:31,000 y por lo que está esencialmente truncar la baja hasta la 888 01:02:31,000 --> 01:02:33,000 posición general, al número entero más próximo. 889 01:02:33,000 --> 01:02:38,000 [Estudiante] Pero entonces eso es un problema porque si usted tiene un conjunto de 7 elementos 890 01:02:38,000 --> 01:02:43,000 a continuación, que automáticamente toma el elemento tercero del punto medio en lugar de la 4 ª. 891 01:02:43,000 --> 01:02:46,000 ¿Qué hacemos con eso? 892 01:02:46,000 --> 01:02:49,000 Es problemático porque si tuviéramos una matriz de 7, 893 01:02:49,000 --> 01:02:54,000 lo volvería a escoger el tercero en lugar de la 4 ª. 894 01:02:54,000 --> 01:02:56,000 ¿Podría explicar un poco más? 895 01:02:56,000 --> 01:02:59,000 [Estudiante] Porque si usted tiene 7 elementos entonces el 4 º elemento 896 01:02:59,000 --> 01:03:04,000 sería el punto medio, ¿no? 897 01:03:04,000 --> 01:03:07,000 Recuerde que su comentario acerca de ser cero indexado, sin embargo. 898 01:03:07,000 --> 01:03:10,000 [Estudiante] Sí, por lo que en la posición 3. Ese sería el punto medio. 899 01:03:10,000 --> 01:03:12,000 Si. 900 01:03:12,000 --> 01:03:16,000 Oh, está bien. Ya veo lo que quieres decir. 901 01:03:16,000 --> 01:03:19,000 Es un poco extraño, ya que nos acostumbramos a esta noción de 902 01:03:19,000 --> 01:03:22,000 deshacerse de decimales. 903 01:03:22,000 --> 01:03:26,000 Eso es un gran punto. 904 01:03:26,000 --> 01:03:30,000 Vamos a terminar con esto. 905 01:03:30,000 --> 01:03:32,000 Hemos calculado nuestro punto medio. 906 01:03:32,000 --> 01:03:37,000 >> Estamos probando para ver si nuestra aguja es igual al valor medio. 907 01:03:37,000 --> 01:03:41,000 Estamos impresión de que lo encontramos, pero en realidad, ¿qué es lo que queremos hacer en esta situación? 908 01:03:41,000 --> 01:03:46,000 Hemos encontrado, por lo que queremos dejar que la persona que llama sabe que lo hemos encontrado. 909 01:03:46,000 --> 01:03:49,000 Tenemos una función que es una función con tipo booleano. 910 01:03:49,000 --> 01:03:54,000 La forma de indicar a la persona que llama de nuestra función que estamos listos para ir 911 01:03:54,000 --> 01:03:58,000 Se nos dice, "Hey, esto es cierto." 912 01:03:58,000 --> 01:04:00,000 ¿Cómo hacemos eso, Kevin? 913 01:04:00,000 --> 01:04:02,000 Estás asentir con la cabeza. >> [Kevin] Añadir return true. 914 01:04:02,000 --> 01:04:06,000 [Nate] Exactamente, devuelve true. 915 01:04:06,000 --> 01:04:12,000 Ahora, si no es igual, ¿cómo vemos la mitad izquierda? 916 01:04:12,000 --> 01:04:16,000 ¿Alguna idea? 917 01:04:16,000 --> 01:04:18,000 Stella, alguna idea? 918 01:04:18,000 --> 01:04:21,000 Es necesario establecer una nueva posición para el final. 919 01:04:21,000 --> 01:04:23,000 Si. 920 01:04:23,000 --> 01:04:29,000 Así que tenemos que hacer cargo de la mitad - el final. 921 01:04:29,000 --> 01:04:33,000 Grande. 922 01:04:33,000 --> 01:04:36,000 Tenemos que establecer una nueva posición para la final 923 01:04:36,000 --> 01:04:38,000 para mirar la mitad izquierda. 924 01:04:38,000 --> 01:04:41,000 Esto fue lo que hablamos antes, donde 925 01:04:41,000 --> 01:04:44,000 Sigo volviendo a este ejemplo. 926 01:04:44,000 --> 01:04:50,000 He aquí el comienzo, y luego tengo que al final todo el camino hasta aquí. 927 01:04:50,000 --> 01:04:53,000 >> Una vez más, si estamos buscando a 15, y nuestro punto medio es a los 16 años, 928 01:04:53,000 --> 01:04:56,000 y nos damos cuenta, "Oops, 16 es mayor. 929 01:04:56,000 --> 01:04:59,000 Queremos pasar a la mitad izquierda ". 930 01:04:59,000 --> 01:05:02,000 A continuación, se trasladaría al final de los 15, 931 01:05:02,000 --> 01:05:06,000 y lo hacemos mediante la adopción de una distancia desde el punto medio 932 01:05:06,000 --> 01:05:09,000 y estableciendo que, como nuestro nuevo final. 933 01:05:09,000 --> 01:05:12,000 Del mismo modo, si queremos mirar la mitad derecha, ¿cómo lo hacemos? 934 01:05:12,000 --> 01:05:14,000 ¿Tiene una idea? 935 01:05:14,000 --> 01:05:22,000 [Estudiante] Usted acaba de establecer comienzan a punto medio + 1. 936 01:05:22,000 --> 01:05:24,000 [Nate] Great. 937 01:05:24,000 --> 01:05:29,000 Y ahora, en el caso de que no encontramos nada, 938 01:05:29,000 --> 01:05:32,000 tiene que obtener cuidados para nosotros? 939 01:05:32,000 --> 01:05:36,000 Daniel, ¿eso te atendidos por nosotros? 940 01:05:36,000 --> 01:05:38,000 [Daniel] No. 941 01:05:38,000 --> 01:05:40,000 [Nate] Si lo hacemos a través de toda la matriz y no encontramos nada, 942 01:05:40,000 --> 01:05:42,000 donde sería ese ser atendidos, o debemos cuidar de él? 943 01:05:42,000 --> 01:05:44,000 [Daniel] La condición de tiempo. 944 01:05:44,000 --> 01:05:48,000 [Nate] Sí, la condición de tiempo, exactamente. 945 01:05:48,000 --> 01:05:51,000 Se hará cargo de ir a través de toda la matriz si no encontramos nada. 946 01:05:51,000 --> 01:05:53,000 Este bucle while terminará. 947 01:05:53,000 --> 01:05:56,000 Nunca he encontrado con esta condición, 948 01:05:56,000 --> 01:06:03,000 y podemos devolver false. 949 01:06:03,000 --> 01:06:10,000 También puede dejar este caso aquí de esa 950 01:06:10,000 --> 01:06:14,000 porque si esta afirmación es verdadera si, 951 01:06:14,000 --> 01:06:16,000 y nuestra función devolverá, 952 01:06:16,000 --> 01:06:21,000 así que básicamente va a abortar esta función en este momento 953 01:06:21,000 --> 01:06:24,000 cuando volvamos verdad. 954 01:06:24,000 --> 01:06:28,000 ¿Pero qué sucede con esta estructura aquí? 955 01:06:28,000 --> 01:06:34,000 ¿Esto funciona del todo, o hay algún error lógico ahí? 956 01:06:34,000 --> 01:06:37,000 >> Hay alguna falla lógica en allí, con la forma en que está establecido. 957 01:06:37,000 --> 01:06:40,000 ¿Qué podría ser? 958 01:06:40,000 --> 01:06:43,000 [Estudiante] ¿Por qué necesita el - y + 1 s? 959 01:06:43,000 --> 01:06:47,000 Que establece nuestra amplia para ser nuestro nuevo medio a la izquierda y la mitad derecha. 960 01:06:47,000 --> 01:06:51,000 [Estudiante] Pero ¿por qué no podría hacerlo sin el - y + 1s 1s? 961 01:06:51,000 --> 01:06:53,000 [Nate] Podríamos igual a la mitad? 962 01:06:53,000 --> 01:07:04,000 ¿Cuál podría ser problemático en eso? 963 01:07:04,000 --> 01:07:08,000 [Estudiante] Supongo que es ineficiente porque usted está comprobando un valor que ya se ha comprobado. 964 01:07:08,000 --> 01:07:11,000 [Nate] Exactamente, así que Sam es totalmente correcto. 965 01:07:11,000 --> 01:07:15,000 Si establece el final y el inicio igual al punto medio 966 01:07:15,000 --> 01:07:18,000 en lugar de - 1 y + 1 reflexivamente, 967 01:07:18,000 --> 01:07:22,000 en algún momento en el futuro vamos a terminar haciendo el registro de la mitad otra vez. 968 01:07:22,000 --> 01:07:26,000 [Estudiante] Empecé el conjunto de procesadores, y luego tuve algo así 969 01:07:26,000 --> 01:07:30,000 donde se me olvidó el 1 +, y se quedó atascado en un bucle infinito. 970 01:07:30,000 --> 01:07:34,000 Claro, porque en algún momento usted nunca va a conseguir comienzan y terminan 971 01:07:34,000 --> 01:07:39,000 a superponerse en realidad. 972 01:07:39,000 --> 01:07:41,000 Cool. 973 01:07:41,000 --> 01:07:44,000 Hay una falla más lógico, y es que esta duda debe ser 974 01:07:44,000 --> 01:07:48,000 un else if. 975 01:07:48,000 --> 01:07:55,000 ¿Por qué podría ser? 976 01:07:55,000 --> 01:07:59,000 >> La razón es que si no es una cosa-si te veo, Kevin? 977 01:07:59,000 --> 01:08:02,000 [Kevin] Sí, porque se está cambiando el punto final. 978 01:08:02,000 --> 01:08:05,000 [Nate] Exactamente. 979 01:08:05,000 --> 01:08:07,000 Estamos cambiando el punto final, 980 01:08:07,000 --> 01:08:12,000 y si se escribe así-nos volveremos hacer espacios entre- 981 01:08:12,000 --> 01:08:14,000 se comprobará este caso. 982 01:08:14,000 --> 01:08:18,000 Este caso, si tiene éxito, se cancelará de la función. 983 01:08:18,000 --> 01:08:21,000 A continuación, se comprobará este caso siguiente, 984 01:08:21,000 --> 01:08:24,000 y si tiene éxito, será ajustar el punto final, 985 01:08:24,000 --> 01:08:28,000 y después seguirá en marcha y verificar este caso. 986 01:08:28,000 --> 01:08:31,000 Pero en este punto, no queremos que continúe cheques. 987 01:08:31,000 --> 01:08:35,000 Afortunadamente, no hemos restablecer el punto medio aquí, 988 01:08:35,000 --> 01:08:39,000 y sabemos que este caso no tendrá éxito. 989 01:08:39,000 --> 01:08:44,000 Pero definitivamente quiere poner la cosa en si hay 990 01:08:44,000 --> 01:08:48,000 a pesar de que podría, en este caso 991 01:08:48,000 --> 01:08:52,000 ya que no está ajustando el punto medio, que haría una diferencia? 992 01:08:52,000 --> 01:08:54,000 No, porque estos casos son todos exclusivos. 993 01:08:54,000 --> 01:08:58,000 Una vez más, mi mal. 994 01:08:58,000 --> 01:09:01,000 No, creo que necesita esta persona si. 995 01:09:01,000 --> 01:09:05,000 Podemos darle una oportunidad y ejecutarlo y ver qué pasa. 996 01:09:05,000 --> 01:09:08,000 Construcción, ocurrió un error. 997 01:09:08,000 --> 01:09:12,000 Es probablemente porque dejé de estos by e aquí. 998 01:09:12,000 --> 01:09:14,000 Me gustaría saber más de los de arriba en la parte superior? 999 01:09:14,000 --> 01:09:16,000 No lo parece. 1000 01:09:16,000 --> 01:09:20,000 Nos alejar la imagen, construir, 1001 01:09:20,000 --> 01:09:24,000 ahí va, así que ahora si buscamos por 15, 1002 01:09:24,000 --> 01:09:28,000 Sí. 1003 01:09:28,000 --> 01:09:30,000 Permítanme zoom in 1004 01:09:30,000 --> 01:09:33,000 15, sí. Podemos volver a ejecutarlo. 1005 01:09:33,000 --> 01:09:36,000 Carga de código fuente, construcción, corriendo. 1006 01:09:36,000 --> 01:09:41,000 Podemos buscar por algo así como 13, 1007 01:09:41,000 --> 01:09:45,000 y no recibimos nada de imprimir, por lo que no está encontrando que para nosotros. 1008 01:09:45,000 --> 01:09:51,000 Eso es genial, porque no está en nuestra lista. 1009 01:09:51,000 --> 01:09:53,000 >> Ahora estamos fuera de tiempo. 1010 01:09:53,000 --> 01:09:55,000 Eso va a ser para esta semana. 1011 01:09:55,000 --> 01:10:00,000 Gracias por acompañarnos y nos vemos más tarde. 1012 01:10:00,000 --> 01:10:02,000 >> [CS50.TV]