PROFESOR: Así que el orden del día de esta semana, no es que la cantidad de cosas. Pero esperemos que muy, muy útil y relevante para ustedes esta semana. Pero vamos a pasar tal vez 15, 20 minutos hablando sólo de forma rápida sobre la lista de enlaces. Listas de enlaces van a ser cubiertos en el cuestionario. Así que tal vez sería muy útil para aprender un poco acerca de lo que es. Vamos a pasar la gran mayoría de la sección actual repasando problemas de práctica concurso cero. Y luego vamos a salvar tal vez 20, 30 minutos al final de las preguntas pendientes alguien tiene. Y luego, el último cinco minutos, voy para dar una bomba hasta el habla para el concurso. Ustedes todos quieren estar aquí para eso. Debido a que va a ser un buen momento. Muy bien, por lo que algunos el material en la lista de enlaces. ¿Cómo lo general están estructurados es usted tiene lo que se llama un nodo, ¿verdad? Usted tiene estas cosas llamadas nodos, que son estructuras. Voy a ir sobre cómo crear un nodo en la siguiente diapositiva. Pero, en esencia todos ellos vinculados listas se trata de datos que ha sido ensartados a través de punteros. Y así, la ventaja que tenemos de utilizar una lista enlazada más, quizás, como una matriz, es el hecho de que en una matriz usted necesita un bloque contiguo de memoria todo en el mismo lugar, uno después de otra, para poder tener eso. Considerando que la lista enlazada, usted podría tienen pequeños trozos aleatorios de la memoria todo el equipo ensartados por punteros. Y de esta manera puede acceder a la información que viene uno tras otra, después de la otra sin necesidad de sólo un pedazo enorme de la memoria en su ordenador en alguna parte. Y por lo que este es uno de los principales razones por las que utilizamos lista de enlaces. En segundo lugar, es muy fácil de forma dinámica cambiar el tamaño de la lista de enlaces porque en conjunto, cuando se declara una matriz, usted tiene un cierto valor establecido. Digamos que yo quería crear un arreglo de 10 enteros. Puedo crear una matriz de 10 números enteros, y eso es todo. Es 10. No sé qué hacer después de eso. Si quería hacer 11, no puede hacerlo. Si quiero que sea 9, no puede hacerlo. Mientras que en una lista de enlaces, puede agregar y borrar e insertar donde quieras. Usted puede cambiar el tamaño de forma dinámica su estructurar aquí, su estructura de datos. Y eso nos da mucha más flexibilidad añadida que no lo hacemos normalmente tener con matrices. Cualquier persona confundida en el básico estructura de cómo una lista de enlace es o por qué tenemos que usar uno sobre una matriz? Sí, vamos a repasar en detalle cómo crear en realidad uno. Pero esto es sólo un poco el sentido general en este momento. Guay. Y así matrices se ensartan de estas encantadoras pequeñas cosas llamados nodos. Todo lo que un nodo está es un tipo de estructura. Recuerde, una estructura es si querías para crear un cierto tipo de variable en C que aún no existes, que, como programador, en realidad puede crear usted mismo. Y así, este tipo de datos estructura se denomina un nodo, en realidad ha sido creado por nosotros, para que no existe en C por sí solo. Y la forma en que usted cree uno es que tienes la cabecera de typedef struct, que le dice al compilador que soy a punto de crear una estructura. Vamos nombre de "nodo". Y en el interior vamos para declarar una variable en, que se va a almacenar un valor. Y entonces también vamos a haber un puntero llamado "siguiente" que apunta a la siguiente nodo de la lista de enlaces. Y luego de terminar que fuera con sólo repetir nodo nuevo para el compilador sabe, OK ese es el final de mi estructura. Y así, de esta manera, estamos tipo de crear un pequeño arsenal lindo tipo de cosas con un y con un valor puntero. Y usted puede vincular a todos ellos junto con los punteros. Para que puedan ser de todo tipo ensartados en una cadena. Guay. ¿Se puede saber que un poco mejor? AUDIENCIA: Sí. PROFESOR: Muy bien. Así que la forma en que, como ustedes pueden ver, una lista de enlaces típica se estructura es que tienes una cabeza. Usted tiene el valor de la cabeza que no es siendo señalado por cualquier otro puntero. Pero va a señalar, o de referencia, otro nodo. El nodo después de que se va a hacer referencia a la nodo después de eso, y así sucesivamente y así sucesivamente hasta que finalmente golpeó Al final de su lista de enlaces. Y usted no tendrá un puntero allí. Y así, pensar como, en una cadena, o incluso si alguno de ustedes hechos, no sé, al igual que con Fruit Loops cuando eras pequeño. Usted haría unirlos y el desgaste alrededor de su cuello. ¿Cree que es exactamente lo mismo. Usted tiene estas pequeñas cosas que usted puede encadenar este punto a uno después de ella, a la que después de , y así sucesivamente y así sucesivamente hasta que tenga una cadena de una estructura de datos que se pueden utilizar como más te guste. Así que la forma en que esto se haría suelen insertar o eliminar cualquier nodo desde un enlace la lista es muy diferente dependiendo de donde ese nodo es. Así, por ejemplo, porque punteros son siempre apuntando a un valor específico, cuando se elimina o inserta un nodo, usted quiere asegurarse de que el puntero es todo lo que apunta a las cosas correctas. Así que si usted quería potencialmente insertar un nuevo nodo con el valor de una dentro de un enlace ordenada lista, todos sabemos aquí de la imagen que va a Entra en medio de la cabeza y dos, ¿no? Debido a que uno se adapte a la derecha allí. Pero la forma en que lo haría es por primera dereferencing el puntero de la cabeza y el envío de que a uno. Pero entramos en un problema aquí. ¿Alguien puede ver cuál es el problema es si tuviéramos que primero eliminar la referencia el puntero de la cabeza a uno? ¿Qué problema podríamos correr en si tratamos para añadir esta al frente de nuestra gama? AUDIENCIA: [inaudible] PROFESOR: Exactamente. Así que aquí tenemos un puntero que era una vez que apunta desde la cabeza a los dos. Pero si usted deshacerse de ese puntero, apuntan a uno, ahora tenemos ni idea a dónde ir para encontrar dos. Debido a que como ya he dicho antes, usted tiene un trozo gigante de la memoria en su ordenador. Todos estos nodos podrían ser intercaladas al azar en cualquier lugar en el equipo. Y usted no sabe cómo hacer para encontrar eso. Y así es necesario tener punteros señalando a todos los nodos en el extremo. O bien si accidentalmente eliminar la referencia de un sin primera asignación un valor primero, eres sólo va a perder todo después. Entonces, ¿qué vamos a hacer es, lo haría primero que desee crear un puntero en el nodo que desea insertar. Apunte a donde usted quiere insertar a, y luego después que podría apuntar la cabeza hacia atrás a uno. ¿Eso tiene sentido para todo el mundo aquí? Excelente. Piense en ello como al igual que una cadena. Si se agrega una cadena, que es un poco intuitiva cómo te va sobre la inserción de eso. Aceptar, por lo que es en realidad mucho más corto de lo que pensé que sería, una perorata de cinco minutos en las listas de enlaces. Sólo para que ustedes tienen la idea básica de lo que es. Aquí tenemos el programa de prueba cero. No dejes que esto te intimide. Sé que es una gran cantidad de información. Se ve muy aterrador. Es también una gran cantidad de, yo pensar, CSC tipo de términos. Cosas como cadenas hexadecimales, punteros, las asignaciones de memoria dinámica son términos que suenan muy asustadizo. Pero vamos a romperlos abajo, hacer algunos problemas de práctica para que ustedes todos están listos para esta prueba. ¿Cuántos de ustedes tienen ya comenzó a estudiar? OK, ustedes probablemente quiera para comenzar a ponerse en marcha en eso, debido a que el concurso es mañana. O jueves para algunos de ustedes. Sí, así que vamos a ir sobre algunos problemas de práctica. Si ustedes todos queremos tomar una hoja de papel, un lápiz. Vamos a simplemente pasar el gran mayoría de la sección actual repasando algunos de los que lo que ustedes tienen una idea de qué esperar en el cuestionario. OK. Un par de logística detalles así, para nadie que no ha estado en ese enlace allí, si vas a cs50.yale.edu, en el frente esta página hay un enlace que dice "Acerca del concurso Cero." Enlace te lleva allí. Si usted no lo ha leído, por favor leerlo. Porque te dice realmente importante información sobre el cuestionario. Voy a tirar esto hacia fuera de que sólo porque, físicamente, si ustedes no sabe dónde ir, vamos a tener problemas. Y lo que si su pasado en términos con A a N, ir al salón de actos del colegio de abogados. Y si sus últimas aperturas con P a la Z, ir al Auditorio Davies. Y esto sólo se aplica para personas en la sección Miércoles. Si usted está tomando la prueba en Jueves, usted va a SSS 114 donde su conferencia normalmente es. AUDIENCIA: [inaudible] PROFESOR: O a la Z, vas para ir al auditorio Davies. Voy a cambiar eso, ¿verdad? Oh, sí, sólo falla automáticamente. Ah, sí, que es Christa. Sí, mi mal. Sí, O a la Z, vas ir a Davies Auditorim. Voy a arreglar esto una vez que subir. Sí. Y luego también algo importante para la mente es que el miércoles, si usted es oficialmente inscrito en la sección miércoles usted debe tomar su concurso el miércoles. Y si usted está inscrito en Jueves, deberá llevar el concurso Jueves. Y es durante las horas de clase. ¿Dónde, creo que es de 1:00 a 2:15 los miércoles y dos y media-3:45 los jueves. Si usted tiene un conflictos irreconciliables, Excusas de Dean son lo único, por desgracia, podemos tomar. Debido a que hemos tenido una gran mayoría de las solicitudes para cambiar del miércoles al jueves. ¿Qué no podemos honrar a menos tenemos la petición de un Decano. OK. Así que antes de empezar en un par de los problemas de la práctica, Yo sólo voy a ir más Consejos útiles de Andy para el éxito. Chicos, cuando estudias, realmente querer practicar la escritura de código a mano. La primera vez que tomó un concurso CS, no lo hubiera hecho código de práctica de la escritura a mano antes y que era extremadamente impactante de lo difícil que era. Cuando ustedes no se meten en la hábito de escribir todo lo, se trata, naturalmente, de ser muy capaz de tener autocompletar soportes y puntos y comas allí. Cuando se escribe un vistazo con la mano, a veces es muy, muy fácil olvidar un punto y coma, o se olvide de cerrar un soporte, o se olvide de cerrar dos puntos, o algo asi. Así que cuando se escribe código a mano, es una sensación muy diferente. Así que ustedes, cuando se está trabajando a través de algunos de los problemas de la práctica, sería bueno practicar realmente hoy. O mañana, supongo, si estás tomar la prueba el jueves. En segundo lugar, tenemos la última, como, el valor de la práctica de ocho de años cuestionarios en línea. Concurso de este año será probablemente muy, muy similar a todos ellos. Todos son muy similares. De alguna manera entrar en el estilo de el tipo de preguntas lo que pedimos, el tipo de funciones que vamos a escribir en, etcétera, etcétera. Así que toma las pruebas de la práctica, especialmente bajo las limitaciones de tiempo. 75 minutos para hacer la prueba es no un montón de tiempo. Es muy, muy largo. Y lo que ustedes realmente quieren para asegurarse de que ustedes son el hábito de la escritura código a mano rápidamente. Debido a que usted no desea que la primera tiempo para ver una prueba de que la longitud estar en su prueba. Ustedes realmente quiere asegurarse que la práctica de antemano. En cuarto lugar, desea revisar la conferencias y sección diapositivas. Usted no tiene que memorizar cosas. En realidad, todo el mundo se le permite un una hoja de notas de papel blanco, frente y detrás. Ustedes pueden escribir o escribir. Si ves que necesitas memorizar nada, lo dejó en esa hoja. Te garantizo que usted no quiere ser atrapado en el medio de ese cuestionario siendo así, oh sí, ¿cuál es el tiempo de ejecución de este tipo frente a ese tipo. Sólo hay que poner abajo y copiarlo directamente desde la hoja de la nota. A continuación, puede en realidad sólo tiene que utilizar su cerebro para pensar en los problemas en lugar de tener que recordar hechos. Y así realmente aprovechar de ningún detalle de nicho que usted piensa que necesita para memorizar, plop abajo en la hoja de examen. OK, cualquier pregunta logísticamente en relación con el cuestionario antes de empezar alguna practican problemas de concursos? ¿Sí? AUDIENCIA: No he tenido la oportunidad mirar el cuestionario [inaudible] pero se que va a ser aplicación sobre todo, ¿O hay también va a ser, como, preguntas de cultura? PROFESOR: Es mucho. Por lo tanto, la forma en que yo haría describe el cuestionario es-- junté algunos problemas de práctica que me sacó de todos los concursos. Pero verás que hay dos principales tipos de preguntas que nos preguntarán ustedes. Se trata de un muy bajo nivel de detalle de cosas. Le daremos un pequeño trozo de código y decir, ¿hay algún error en esta lista? ¿Cuál sería la impresión de aquí? ¿Qué hará este código producir, etcétera. Así detalles de información de muy baja actividad. Y por el otro lado, vamos a tener muy alto nivel preguntas basadas en el conocimiento. ¿Puede explicar lo que el diferencia entre una búsqueda binaria y una búsqueda lineal es? ¿Por qué íbamos a querer utilizar uno sobre el otro? Tal vez, lo que es GDB? ¿Por qué queremos utilizar GDB? Nivel más alto, más fundamental preguntas de comprensión. Así verás una mezcla de los dos de ellos en su cuestionario. Cualquier otra cosa antes de que dirigirse directamente a ella? OK. AUDIENCIA: Una más. PROFESOR: Oh, una más. Apenado. AUDIENCIA: Sí, está bien. Así que estás diciendo 75 minutos es demasiado corto, como es poco probable que vamos a terminar? O, como, 75 minutos es exactamente el mismo tiempo ya que necesitaríamos si fuéramos preparado adecuadamente? PROFESOR: OK, por lo que el cuestionario es un reto. En definitiva, es un reto. Usted se encontrará con poco tiempo. Usted está probablemente va a golpear, como 10, 15 minutos para el final, y ser como, mierda. Tengo tanto que hacer. Y eso es totalmente bien. Todo el mundo va a sentir la misma manera. Apenas sea muy consciente de cuanto tiempo tienes. Y por eso te digo chicos hacen los exámenes de práctica. Porque lo que realmente le da un gran sentido de lo que la prueba va a ser así. Así que si usted se encuentra siendo capaz de terminar la práctica cuestionarios en una buena cantidad de tiempo, usted puede mantener un ritmo bueno, entonces usted no tendrá un problema el miércoles o el jueves. Guay. Así que si todo el mundo wants-- Creo la mayoría de la gente tiene hojas de papel ya. Voy a esencialmente sólo darle ejemplos de preguntas, dar a ustedes, como, un unos minutos para hacer ellos. Y vamos a repasar como clase lo que las respuestas a ellos son. Así que este es un muy típico pregunta temprano vamos a pregunte usted, sólo la conversión números entre diferentes bases. Binarios, como ustedes pueden recuerdo, es la base de dos. Decimal es base 10, o lo que como seres humanos normalmente interpretan. Hexadecimal es de base 16, que es cero al nueve, así como la A a la F. Así que hay cuatro números estoy pidiendo a ustedes para convertir aquí. Voy a dar lo desea, de tres a cuatro minutos para pensar en cómo iríamos sobre solucionar esto. AUDIENCIA: ¿Se nos permite calculadoras? PROFESOR: No lo harás necesitará calculadoras, sí. Creo además básica, creo, es Se les pedirá a todos ustedes por hacer. Y justo así que tipo de un sentido de cuando todo el mundo se hace, mira hacia arriba, onda, no sé, sonreír, mira feliz si ya está. Sí. Tal vez un par de minutos más. OK, vamos a traerlo. Estoy a propósito de ir a daros menos tiempo lo que probablemente necesita hacer algunos de estos problemas, simplemente porque quiero asegurarme de que obtenemos a través de un montón de problemas. Así que no se preocupe si usted no tienen la oportunidad de terminar. Totalmente bien, siempre y cuando usted tiene una idea de cómo ir sobre esto. Así que vamos a seguir adelante y hacer el primero. Así que primero, ¿alguien quiere decirme en binario, lo que haga cada uno de estos dígitos representar en términos de sus valores? ¿Sí? AUDIENCIA: Dos al potencia cero, dos a uno. PROFESOR: Exactamente. Asi que. Derecho, por lo que normalmente cuando estamos en la base 10 Todo esto representa son, como, 10 a la base de cero, ¿no? Ese es el lugar de su ser. Todo tu lugar de 10 es es 10 a la potencia de uno. Lugar de Usted es el 100 10 a la potencia de dos. Cualquiera que sea la base que está en está pasando que ver con la misma cosa, simplemente con una base diferente. Así binario, todo lo que es es base dos. Te vas a convertir todo el dígitos en dos a cualquier poder de ese dígito. Y así, en este sentido, puede tener una forma más fácil de ser capaz de sumar o resumir todos los números en orden para convertir en la base 10. Así que, ¿alguien quiere decirme lo que el respuesta a la primera es en base diez? AUDIENCIA: Dos, [inaudible] PROFESOR: Sí. AUDIENCIA: 42. PROFESOR: 42, ahí lo tienes. Así que la forma que tenemos esta respuesta era por haciendo dos, el primero, que es de dos. Más dos del tercero, que es ocho. Plus dos a la quinta, la cual es lo que sobra. Usted los resumes y es 42. ¿Hay alguien confundido sobre cómo hemos llegado hasta eso? Además tan básico, como Le dije, usted debe estar bien. Si no, bueno, podemos practicar eso también. Pero eso está bien. Guay. ¿Alguien quiere darme la responder a la segunda también? 50? Bien. Cualquier persona confundida sobre cómo conseguimos que sea? Enfriar, voy a tener la respuestas en la siguiente diapositiva. Así que no se preocupe si usted necesitará copiar hacia abajo. OK, así hexadecimal es un poco más complicado. pero yo te voy a mostrar chicos un acceso directo para saber cómo hacerlo. Así hexadecimal, como usted recuerde, todo lo que es ser de 16. Y debido a que los humanos no lo hacen realidad tener 16 números para representar que, vamos a partir de cero a nueve, que nuestra primera 10 valores, y luego hacemos la A a la F, que son los siguientes seis valores. Y así, la forma más fácil de ir de cualquier número binario a hexadecimal es separarlos en dos mitades. Y por lo que cualquier número binario que dará es probable que tenga ocho dígitos. Usted sólo puede romper hacia arriba en el centro. Así que la primera uno-- solo uno, solo uno, uno, uno, uno solo. Tipo de pensar que, ya sabes, dibuja una barra o una coma entre ellas. Y sólo se puede convertir directamente lo que sea esto es el primer número de hexadecimal, y todo lo que aquí es el segundo de hexadecimal. Así que recuerde de la notación común, lo empiezan valores hexadecimales con? AUDIENCIA: Cero. PROFESOR: 0X. Así que sabemos que en cualquier momento te pedimos para convertir cualquier número a hexadecimal, o en cualquier momento que usted ve ninguna número que comienza con 0X, usted sabe que es un valor hexadecimal. Y entonces usted va a pedir que determinar lo que estos dos dígitos son. Y la manera de hacerlo, del conteo de que la mitad y del conteo de ese medio. Así que en este ejemplo, lo que habría uno, uno, uno, uno ser? ¿Qué valor podría ser? Eso sería F, ¿verdad? Eso sería 15. Así que este sería F. Uno, uno, uno, uno aquí es también F. Así que uno, uno, uno, uno, uno, uno, uno, una en hexadecimal, todo lo que es es 0xFF. Debido a que este medio representa F, el valor de 15, y esto representaba un medio F, el valor 15. Porque recuerda, estamos a contar desde cero a nueve. Una es como 10, B es como 11, F es 15. ¿Tiene sentido a todo el mundo cómo llegamos de binario a hexadecimal? AUDIENCIA: Entonces ¿cómo hemos llegado 15 de la uno, uno, uno, uno? PROFESOR: Sí, esto es binario, ¿verdad? Imagínese esto es sólo un número binario. Así que hay dos a la cero, que es uno. AUDIENCIA: ¡Oh, OK. Así que sólo una total hacia fuera. PROFESOR: Sí, y luego que acaba totales que fuera. Eso es todo lo que es. AUDIENCIA: OK. PROFESOR: OK. AUDIENCIA: Entonces vas de binario a decimal a hexadecimal? PROFESOR: Eso es la manera más fácil de hacerlo, sí. No vas a decimal porque decimal tiene cero a nueve. Somos sólo un poco dividir esto en dos. AUDIENCIA: [inaudible] usando decimal a encontrar lo que coincide hasta en hexadecimal. PROFESOR: Quiero decir, eres del conteo de uso de las matemáticas básicas. AUDIENCIA: Sí. PROFESOR: Sí, más o menos. Es un poco confuso. Pero sólo sé que usted puede dividir lo que sea este valor es sólo en mitades. Mira, ¿qué es esto en binario? ¿Qué número es? Va a ser algo de cero a F. Aquí también va a ser algo de cero a F. Y entonces usted puede simplemente poner esos dos allí mismo. AUDIENCIA: OK. PROFESOR: Sí. OK. Así que chicos quiere tratar el siguiente, entonces? Cero, uno, cero uno, uno, cero, uno cero. Te voy a dar chicos como 30 segundos, ya que probablemente no sabías el truco para cómo hacer esto antes. OK, alguien quiere conseguir éste un tiro? 0x5A. PROFESOR: 0x5A. 5a. Bien. Así que esta aquí sería ser-- desea para decirnos cómo llegó eso? En primer lugar, ¿cómo llegaste a los cinco? AUDIENCIA: Debido a cero, uno, cero, uno es de cinco. PROFESOR: ¿Todos entienden ¿por cero, uno, cero, uno es de cinco? Tienes una aquí. No tienes nada en dos a la primera. En dos a la segunda, que tener uno, que es de cuatro. Entonces se agrega el cuatro más el uno, que tiene cinco. ¿Todos bien? OK. Y entonces lo que este ser y por qué? ¿Qué número tiene una corresponde a? AUDIENCIA: 10. PROFESOR: ¿Y esto en base dos? AUDIENCIA: [inaudible] PROFESOR: Exactamente. Así que este segundo valor aquí sería 0x5A. Todo el mundo buena sobre cómo convertir? Es mucho más sencillo de lo que crees que es. Solo quiero estar seguro sabes consejos útiles y trucos sobre cómo hacer eso. AUDIENCIA: ¿Por qué puede usted acaba de dividir que en medio de esa manera? Sólo como, OK, yo sólo voy a se preocupan por estos primeros [inaudible]? PROFESOR: Porque eso es en realidad el manera se representan los valores hexadecimales. 0X, que significa en realidad otra cosa que decirte que es un número hexadecimal. Y esto representa siempre los primeros cuatro dígitos. Y esto representa siempre los últimos cuatro dígitos. Y por lo que estas dos cifras solo corresponden a las diferentes bits. AUDIENCIA: Entonces vamos a always-- PROFESOR: Siempre estás va a conseguir ocho bits de valor. AUDIENCIA: ¿Es que al igual que una cosa aquí o que una cosa por todas partes? PROFESOR: Eso es sólo una cosa en computadoras, sí. AUDIENCIA: OK. Impresionante. PROFESOR: También, por lo que en este ejemplo convertimos de binario a decimal, y de binario a hexadecimal. ¿Quieren asegurarse de que usted también practicar ir al revés. Así que si yo te di 0xFF, podría dibujar que en binario, ¿verdad? Convierte F en binario, que es uno, uno, uno, uno, convertir F a binario, el cual es uno, uno, uno, uno. Así que nosotros podríamos pedirle que hacer al revés. Así decimal a binario, o hexadecimal a binario. Así que usted quiere hacer Asegúrese de saber en ambos sentidos. Probablemente vamos a hacerte una combinación de los dos. Sí, usted tiene una pregunta? Puedo ver-- eres bueno? AUDIENCIA: Sí. PROFESOR: OK. ¿Soy buena para borrar esto? Excelente. Muy bien, por lo que las respuestas están aquí, si alguien Es curioso tarde y confundirse. OK. AUDIENCIA: ¿Importa si ponemos nuestras letras en capitolio o minúscula? PROFESOR: Lo hace, porque en hexadecimal, por convención, todos los personajes están en mayúsculas. Así A a F son va a ser mayúsculo. Si usted pone una minúscula a, no sé si queremos necesariamente marcarlo mal. Pero en teoría, eso no es técnicamente cómo se supone que tienes que. Así que todos ellos deben estar en mayúsculas. Sí, buena pregunta. OK. Segunda pregunta. Considere este hermoso programa aquí. Voy a hacer la pregunta, Volveré esto. Así, en primer lugar, lo que está dentro de la norma io.h eso es de interés para el programa? En segundo lugar, lo que hace vacío significar en la línea de tres? Y en tercer lugar, ¿qué quiere regresar cero desde principal, como la línea de seis, por lo general significan? Si ustedes quieren escribir los abajo, ya que tengo que cambiar de nuevo a la diapositiva sólo para que pueda ver el código. Este es un ejemplo de, como, tal vez una alto nivel en cuestión le pedimos qué cosas quiere decir en un programa. Todo el mundo es bueno para mí volver a la diapositiva? Vale, guay. Así que te voy a dar a tipos como tal vez tres minuto para mirar éste rápida real. OK, así que éste es como bastante fácil, conceptualmente. ¿Alguien quiere decirme lo que es primero interior de hachís incluyendo nuestro archivo de biblioteca io.h estándar? ¿Por qué necesitamos esa biblioteca incluido para este programa? Lo que aquí es lo que necesitamos para? ¿Sí? AUDIENCIA: ¿Es que cuando pones que printf? PROFESOR: Exactamente. Así printf, cada vez que tener una entrada desde el usuario e imprimir algo a la pantalla, eso es la entrada estándar, la biblioteca de salida. Piense en ello que manera-- entrada, salida. ¿Tengo una salida? Sí. Así que sé que siempre voy a necesitará la biblioteca i.o estandarizar. Así printf es la función por el cual tenemos que acceder y hashtag incluye el biblioteca i.o estándar. OK. En segundo lugar, ¿qué significa vacío? Tenemos el principal int (void), lo que hace anular aquí significa aquí en la línea de tres? Sí, en la parte posterior. AUDIENCIA: [inaudible] PROFESOR: Exactamente. Así que recuerde, hemos aprendido comenzando con nuestra pset que en realidad se puede indique la línea de comandos argumentos que su programa, que función principal, toma como usted, el usuario, llámalo. Si tenemos vacío, eso significa que usted simplemente podría ejecutar directamente el programa sin ningún tipo de argumentos de la línea de comandos. Todo el mundo claro? OK. Y por último, ¿por qué nos molestamos haciendo esta cosa cero vuelta aquí? ¿Por qué tenemos un int principal? ¿Por qué no podemos simplemente tener void main vacío? ¿Sí? AUDIENCIA: Sólo para que podamos asegúrese de que el programa es salir con éxito, como se a diferencia de si fue contado. Y nosotros sabemos que eso es un tipo diferente de error. PROFESOR: Sí, exactamente. Esto es sólo una muy lo convencional que hacemos, es que justo al final de su programa, sólo para asegurarse de que su función principal está funcionando correctamente, siempre queremos hacer de retorno cero. A pesar de que puede necesariamente no ven que imprimen en cualquier lugar. Debido a que como programadores, ya sabes, si usted tiene muchas líneas diferentes de código y usted no sabe dónde estos van mal, y si ocurre un error que deseas asegúrese de que usted obtenga ese error. Y tan típicamente si algo sale mal que tendremos un regreso de uno solo para asegurarse de que sabemos que es. Así que si usted ve un retorno cero, que típicamente significa que su programa es ejecutado con éxito. ¿Bien? Guay. OK, segundo programa aquí. Considere eso. Y si ustedes ver a un flotar, ustedes probablemente puede tener una buena idea de lo que Estoy a punto de preguntarle. Así que cuando este programa ejecuta, como se puede ver, Estoy declarando un flotador dentro de mi función principal. Estoy dándole el nombre "respondió," y estoy configurando que igual a uno dividido por 10. Estoy imprimiendo, a uno decimal, que flotan. Y luego voy a volver a cero. Así que cuando la ejecución del programa, pensar de nuevo a codiciosos ahora, Este programa imprime 0.0. Como todos sabemos, es de esperar que todos saben, uno dividido por 10 no es un 0,00, que es 0,1. Pero explicar por qué este programa piensa que 1 dividido por 10 grabados al 0,1 otra de 0,1? Te doy chicos tal vez como 30 segundo a pensar simplemente rápidamente sobre eso y yo voy a volver al programa. OK. ¿Alguien quiere darle una oportunidad? En tres frases o menos, porque normalmente estamos va a restringir todas las respuestas tres frases o menos por lo que no acaba de regurgitar cosas al azar favoritas en tu concurso. Sí, tomar una foto. AUDIENCIA: Así que creo que hay esta cosa que se llama, como, [inaudible] Así que podría ser, por ejemplo, puede haber, como, 0.09, que, cuando se imprime la primera dígitos, sería a 0,0? PROFESOR: Close, no del todo. Christabell? AUDIENCIA: Estás divisoria y 10, y son ambos enteros. Y así, la forma en que se va para almacenarlo es como un entero. Y por lo que el número entero más cercano sería 0.0. Y eso es 0,1. PROFESOR: Sí, eso es muy bueno. Esa es la respuesta correcta. Así que este es un muy confuso concepto para un montón de niños. Y realmente quiero para asegurarse de que esto se ve reforzado en la cabeza de todos. Así que lo que llamamos flotante punto de imprecisión, donde la razón por la cual una gran cantidad de sus programas en codiciosos no funcionó inicialmente fue porque usted se olvidó de emitir su variable. Así lo dijo Christabell era del todo correcto. Un flotador es inherentemente impreciso. Debido a que en un ordenador, a la derecha, tenemos una cantidad finita de bits de memoria podemos usar para representar números. Así, por ejemplo, este ID CS50 es-- Creo que es un equipo de 64 bits. Un flotador sólo puede ser representado por una cantidad finita de esos bits. Y así 0,1 con ceros infinitos, que fue de 0,1 es, ¿verdad? Pero en realidad no podemos almacenar ese número en nuestro ordenador. Simplemente no tenemos memoria suficiente para hacerlo. Y así la aproximación más cercana lo que está almacenado en la memoria es en realidad algo así como 0.000 algo, algo, algo, algo. Lo cual, una vez que truncar que, redondea a 0,0. Y así, este ejemplo es sólo uno que demuestra un montón de problemas tenemos cuando estamos tratando de hacer mal las matemáticas sin poner como un entero diferente. Así que tener cuidado de que esto ocurra. En pruebas, si le damos un bloque de código y es como, lo que imprime al final? Y si se trata de un valor aleatorio que chicos deben saber por qué está sucediendo. ¿Sí? AUDIENCIA: Truncar es deshacerse de todo lo que después de un cierto punto? [INAUDIBLE] PROFESOR: Sí, lo que en realidad este es un muy mal ejemplo, porque en realidad lo que sea 0.100 se truncará hasta 0,1. Pero si tuviera que ejecutar it-- no lo hago recordar, porque el año pasado corrió en un programa diferente. Corrieron en algo llamado el CS50 Appliance, que es diferente de la ID. Ese fue un sistema de 32 bits, creo. Y así había diferentes números. Pero, en esencia, sólo sé que todo el concepto de truncamiento y cómo se acaba corta las cosas. Y por lo que si rounds-- AUDIENCIA: Sin redondeo. PROFESOR: Exactamente. Sí. Guay. Hola, en la parte posterior. Estamos repasando algunos preguntas de revisión concurso. Correcto. Así que considera un programa diferente aquí. Voy a dar a ustedes un par de minutos para leer sobre esto. Esto es algo que era para un muy recientemente que creo que soplaba mucho de ustedes las mentes de hombres. Pero vamos a hablar a través de este nuevo sólo para asegurarse de que entenderlo completamente. OK. OK. Cualquier persona necesita más tiempo para leer a través de este código? OK. Así que me parece que en este programa estoy la creación de dos cadenas mediante el uso de GetString. Una llamada s y uno llamado t. Y si son iguales es igual a la otra, debe imprimir "Usted escriba la misma cosa ". Pero elsewise, sería imprimir, "Usted escrito cosas diferentes ", ¿verdad? Parece muy, muy simple. Pero, sin embargo, si realmente tratar de escribir este programa, parece que incluso cuando de entrada las mismas cadenas exactas, todavía imprime, "Usted mecanografiado diferentes cosas! " ¿Alguien quiere tomar un oportunidad por qué este programa siempre responde que las entradas son diferentes, incluso cuando las palabras en sí son los mismos? Así que si yo fuera a input-- David amor utilizar un ejemplo como madre, ¿no? Minúsculas M-O-M de S, T es igual a minúsculas M-O-M. Si me encontré con esto a través de ese código, ¿por qué se imprimir "que ha escrito cosas diferentes?" ¿Necesita más a nadie tiempo para pensar acerca de esto? OK, creo que estamos bien. ¿Sí? AUDIENCIA: OK, así que es algo acerca de donde se almacena en la memoria, ¿no? PROFESOR: Sí. AUDIENCIA: En caso de que, como si esto cadena s se almacena en la memoria spot-- Estoy inventando esto-- es cero. PROFESOR: Claro. AUDIENCIA: Y cadena t se almacena a punto de la memoria, como, 167, y luego cero no es igual a 167. PROFESOR: Exactamente. OK, así que recuerde esta increíble revelación explicamos a ustedes la semana pasada, que cadenas no existen realmente? Cuando creamos algo que se llama cadena que estamos, en realidad, la creación de algo que se llama estrella de carbón. Que todo lo que es es un puntero a una cadena o a un array de caracteres. Y así, en este ejemplo, si estaban a la entrada de M-O-M el camino que mi equipo iba a guardarlo es dentro de la barra invertida de memoria cero, ¿no? Estos cuatro personajes, caracteres, sería almacenada en alguna parte. Y entonces estos cuatro personajes, barra invertida cero, se almacenan en otro lugar, ¿verdad? No tengo ni idea de dónde las direcciones son, están en alguna parte de mi equipo. Pero yo no sé exactamente dónde están. Cuando creo una cadena s, lo que realmente es es un puntero a la inicio de esta cadena. Y cuando creo este valor t, todo lo que es un puntero a aquí. Y así, cuando usted está tratando equiparar y comprobar para ver si s es igual a igual es igual a t, el ordenador es en realidad volver a que la dirección de esta m y la dirección de ese m. Y porque son de dos piezas separadas de datos que se almacenan en dos diferentes direcciones en el equipo, el equipo nunca va a reconocerlos como siendo el mismo. ¿Alguien quiere darle una oportunidad por lo que tendría que hacer si queremos corregir esto y tener un programa en ejecución correcta ¿en lugar? Piense en eso por un par de segundos. ¿Qué necesitamos para cambiar a conseguir este funcionamiento del programa la forma en que queremos que funcione? Sí, quiero tomar una puñalada en ella? AUDIENCIA: ¿Podemos tratar de eliminar la referencia al puntero y comprobar a través de la matriz? PROFESOR: Esa es una manera de hacerlo. Así que, ¿cuál es tu nombre? Lo siento, me lo recuerdes. Zee: Zee. PROFESOR: Sí, ¿y qué Zee sugerido sería absolutamente trabajar. ¿Correcto? Podríamos eliminar la referencia al puntero y en realidad ir y acceso los datos físicos en el interior de aquí. Y sólo podemos comparar toda la pantalla. Podemos decir, OK, puntero, dame lo que hay aquí dentro. Sería devolver un m. Y yo diría, puntero, dame lo que hay aquí dentro. Devolver un m. Realice los partido? Sí. Luego de pasar. Seguimos comprobando todo los dos cadenas de todo el camino hasta el final y ver si esos son iguales, si todos los valores son iguales. Y si todos los valores son iguales, entonces sabemos las cuerdas son ciertas. Absolutamente, así es como lo haríamos? ¿Alguien confundió en todo esto? Todo el concepto de cómo las cadenas en realidad sólo son punteros, y la forma en que realmente no existe? ¿Y por qué tenemos errores como la forma en que lo hagamos? Porque te garantizo chicos, punteros y la asignación de cadena y la memoria van a llegar. ¿Sí? AUDIENCIA: [inaudible] dereference ella, sólo hay que poner una estrella [inaudible] PROFESOR: Eso es. Así que para derererence un medio de puntero para ir a la dirección del puntero y obtener los datos, el valor allí. Y la manera de hacerlo es indicador de la estrella. No hay que confundir eso. AUDIENCIA: [inaudible]. PROFESOR: Sí. AUDIENCIA: Así que usted puede simplemente escribir si la estrella s iguales iguales estrella t. PROFESOR: Bueno, no. No. AUDIENCIA: Eso no es lo suficientemente bueno, ¿verdad? PROFESOR: No lo es, porque eres Sólo el control de la primera letra. Usted está probablemente va a necesitará algún tipo de un bucle que itera por cada personaje en ambas cadenas. Sí. Así que si quería comprobar sólo para ver si empezaban con la misma cosa, que puede hacer si, estrella s es igual a la estrella t. Entonces usted sabe que por lo menos comenzado con el mismo carácter. ¿Sí? AUDIENCIA: Así que la forma usted que sería como un embebido para bucle o puntero? PROFESOR: Sí. Prácticamente sólo un bucle for. Recuerde, David en la clase mencionada el azúcar sintáctico libre? Y tenía esta misma Lo confuso de la estrella t más uno, donde se integraría a través y que se mueva el puntero? La manera más fácil de hacer esto es solo t de i. Así que es sólo una matriz. La forma en que usted tendría una para bucle que pasó de cero a i, donde i es la longitud de la cadena, sólo podría escribir que en vez de hacer el toda puntero, cosa referencia. Así que estas cosas son exactamente equivalente en su ordenador. Ustedes probablemente no lo hará necesitan saber que, pero es bueno para sólo un poco tener en la parte posterior de su mente. Sólo sé que el equipo reconoce diferentes bloques de código como la misma cosa. Debido a que este es sólo mucho más de usuario amigable para nosotros presentar como si fuera una matriz. Es más fácil. AUDIENCIA: Entonces utilizar strlen que gustar, get-- PROFESOR: Sí. AUDIENCIA: OK. PROFESOR: Usted podría utilizar strlen o, si se no tenía strlen usted puede hacer hasta hasta llegar a la barra invertida cero para ambos. De cualquier funcionaría. Sí. AUDIENCIA: Así que es para eliminar la referencia de cada carácter individual si fuéramos realmente escribir este código, Sólo podía hacer camisetas soportes i desea con la estrella en la frente de ella? PROFESOR: Sí, es igual a equals s soporte de i, y luego sigo yo en movimiento abajo hacia arriba hasta llegar a la final. Sí, eso es lo que haría. Y voy a realmente tengo un lado ejemplo de cuando en realidad escribir strlen para que ustedes harán clase de llegar a jugar un rato con él un poco. Así es todo clara en apenas memoria, cadenas, punteros, direcciones de calidad? Algunos conceptos de más alto nivel que voluntad a ciencia cierta necesidad de saber sobre el concurso mañana. Correcto. Bien. Sí. OK, así que lo único que tendremos también pedimos usted, como lo hacemos todos los años en un concurso, es decir, supongamos que usted ha olvidado (que parece que nos olvidamos de hacerlo anualmente) en el que se declara el archivo de cabecera strlen. Y así que tenemos que volver a escribir nosotros mismos. Aquí hay una lista de directrices que podemos presentarle chicos donde se llega a suponer que s la cadena no será nulo. Usted puede asumir que s habrá terminó con una barra invertida cero. Así que ya sabes que es lo que que va a terminar con. Y, por ejemplo, que la longitud de hola sería cinco. Así que usted puede asumir que hola será de cinco, H-E-L-L-O. Usted no tiene que suponer que la backside cero representa la longitud. Este último que aquí, no lo hagas preocuparse de desbordamiento de enteros. ¿Alguien recuerda desbordamiento de entero es lo que? AUDIENCIA: Va más allá de la longitud de la [inaudible]. PROFESOR: Sí, se puede explicar un poco, ¿qué significa eso? AUDIENCIA: Entonces, supongo que se remonta al ejemplo truncar antes. Pero si usted tiene sólo tantos números que van más allá del número de bits que en realidad se puede asignarlo que será sólo un poco cortado. PROFESOR: Sí, así que en una típica ordenador, cuántos bits tenemos? AUDIENCIA: 32? PROFESOR: Sí, 32, a la derecha. Y eso es, qué, cuatro millones de dólares, dos mil millones? Cuatro millones de dólares, hasta cuatro millones enteros positivos, ¿verdad? Dos mil millones negativos, dos mil millones positivo, depende de cómo desea hacerlo. Y así que básicamente podemos tener suficientes números enteros que pueden ir hasta de dos a 31 menos 1, ¿verdad? Porque una vez que golpeó a dos a la 32, no lo hacemos tener esa cantidad de memoria en nuestro ordenador. Y así, en teoría, que podría llegar a un número es decir, como, dos a la 46a. Es un número enorme-culo, pero teóricamente podrías. Y desbordamiento tan entero es si intenta crear un entero que va más allá de lo que el equipo es capaz de almacenar. Y así ustedes para este ejemplo no tienen que preocuparse acerca de nosotros que le da un gigante cadena que es de dos a los caracteres 32ª largo. Eso sería realmente significa. Muy bien, así que sólo voy a dar ustedes la estructura de base de este. Vas a crear un función llamada int strlen donde Un pase en, una estrella char, o cadena, puntero a la cadena llamó s. Muy bien, todo el mundo que copiar hacia abajo. Guay. Otra Oops-- manera. Así que esto es como una especie de más duro pedazo de problema, así que te voy a dar unos cinco chicos a seis minutos de clase de una lluvia de ideas y escribir a cabo esta función. AUDIENCIA: No hacemos cuenta de [inaudible], nosotros no tenemos que usar entero? PROFESOR: No, no lo haces. Te voy a dar una pista chicos. Un bucle while puede ser muy útil aquí. Sí. Aquí caramelo. Caramelo también estará disponible para el concurso, creo. Así que ustedes será todo azucarada hasta mañana. Puede yo-- lo tienes. AUDIENCIA: OK. PROFESOR: Sí. Tal vez 30 segundos más o menos. Muy bien, si estás no se hace, no se preocupe. Nos moveremos por esto juntos. OK. Así que me voy a sólo el diseño del estructura básica para esta función aquí. Int strlen. En primer lugar, ¿alguien quiere decirle mí lo que int significa? Tenemos que tener en esta función. AUDIENCIA: strlen [inaudible]. PROFESOR: Exactamente. Así que pase lo que pase aquí, tenemos que devolver un entero. Y como se especifica en el spec, queremos return-- Vaya para él chicos, sólo seguir adelante. Está todo bien. Coma todo lo que no tengo a tomar de nuevo, en realidad. El int simplemente significa que eres va estar volviendo un entero. ¿Qué es este carbón estrellas s? ¿Que significa eso? AUDIENCIA: Al igual que, lo que se está introduciendo en. PROFESOR: Exactamente. Y lo que es casi el lo mismo que la estrella de carbón? AUDIENCIA: String? PROFESOR: Exactamente. Así que todo lo que estamos haciendo es dar esto un puntero a una cadena. OK. Guay. Además, no se olvide, si nos olvidamos para darle estos soportes, no te olvides de escribir tu mismo. Debido a que en teoría, su código es incorrecta si se olvida de escribirlos. Así siempre prestar atención. Al igual, pequeñas cosas que no se dan cuenta cuando se está programando en su computadora portátil, porque tu portátil lo hace por usted? No se olvide, cuando usted está escribiendo con la mano. ¿Sí? AUDIENCIA: ¿Pero cómo incorrecto? Al igual, podemos llegar todo el problema equivocado? PROFESOR: No, no. No te preocupes. En realidad es teóricamente posible para que usted consiga puntos completos en una pregunta incluso si su código nunca se queda en la vida real. Le sugiero que no lo intentas para que esto suceda. Por ejemplo, como si todo eso es que aquí es correcto, pero se olvida de dos puntos o un soporte, su código en realidad no correr. Pero podemos ser misericordiosos. ¿Sí? AUDIENCIA: ¿Tiene usted comentar en nuestro puño y letra? PROFESOR: No, no, no se preocupa por eso. Sin comentarios. Estilo debe ser bueno. Al igual, no smush todo en una sola línea. No vamos a ser felices con usted si usted hace eso. ¿Alguien quiere dame la primera línea? Sugerencia, es muy fácil. ¿Sí? AUDIENCIA: Int, n es igual a cero. Sólo tienes que configurar mostrador. PROFESOR: Entonces queremos alguna una especie de mostrador, ¿verdad? Yo sólo voy a nombrarlo "contar" en aras de la legibilidad. ¿Qué queremos para configurarlo igual? AUDIENCIA: Cero. PROFESOR: Sí. Punto y coma. También es punto y coma dibujo muy extrañas. Sólo la práctica de hacer eso. Así que queremos tener primero un contador de tipo int. Porque queremos contar hasta cómo muchos caracteres o letras son en esta cadena, ¿verdad? Primer paso muy fácil. OK, tal vez un poco más complejo Ahora, ¿cómo vamos a hacerlo? ¿Alguien quiere dame la línea de código que puede ser capaz de ayudar en bucle a través de lo que sea que es esto? Sí, valiente alma en la parte de atrás? AUDIENCIA: OK, así que mientras que el punto asteriscos, el sí, estrella de s, no es igual a cero, entonces hacer algo? PROFESOR: Eso es muy, muy cerca. Muy cerca. Así que voy a tratar dos cosas con eso. En primer lugar, no es exactamente cero. ¿Qué es? Es el terminador nulo, barra invertida que es cero. Así que son diferentes en términos de cómo están almacenados. Así que estás muy cerca. Y en segundo lugar, no queremos sólo mover el puntero. Queremos realidad acceder a los valores, ¿no? Y así, ¿cómo lo hacemos? Muy fácil. No pienses en punteros, no pienses en recuerdos. Volver a la segunda semana de este curso. AUDIENCIA: [inaudible]. PROFESOR: Al, ¿recuerdas? ¿Cuáles son las cadenas? ¿Cómo se almacenan en la memoria? AUDIENCIA: Están levantadas. PROFESOR: Se crían. Entonces, ¿cómo accedemos cada personaje dentro? AUDIENCIA: [inaudible]. PROFESOR: Exactamente. Así que lo que sucede en el interior rato-- aquí? S de - AUDIENCIA: I. PROFESOR: Oh, yo no existe, ¿verdad? AUDIENCIA: ¡Oh, cuente? PROFESOR: Podemos simplemente utilizar la cuenta, ¿no? AUDIENCIA: Lo siento, me llamó i. PROFESOR: Sí, está todo bien. Tenemos una variable hasta aquí eso es ya se ha declarado como nuestro contador. Así que ¿por qué no nos limitamos a usar que para moverse a través del bucle while? ¿Tiene sentido? Así, mientras que s de count-- quiere a nadie para darme lo que sucede después de aquí? AUDIENCIA: No es igual. PROFESOR: no es igual, ¿no? Es la explosión es igual, signo de exclamación es igual, lo que ustedes quieren llamarlo no equal-- AUDIENCIA: [inaudible]. PROFESOR: Sí. Recuerde comilla simple es para un char, comillas dobles son para una cadena. Tenga cuidado al usarlos. Así que cuando estamos mirando a través de la matriz, el último carácter, sabemos que no queremos que sea barra invertida cero. Así, mientras que. No estamos en el final de la cadena. ¿Qué es lo que queremos hacer en el interior? AUDIENCIA: Queremos añadir a la contador para que cuente plus plus? PROFESOR: Exactamente. Así que aquí vamos a hacer contar, contar plus plus. Falta una línea más. Casi estámos allí. ¿Qué estamos olvidando de hacer? AUDIENCIA: Volviendo a cero? PROFESOR: ¿Quieres volver a cero? AUDIENCIA: No, regresar a strlen. Espera. PROFESOR: ¿Qué se almacena en? AUDIENCIA: Count. Contar. PROFESOR: Exactamente. Así que aquí vamos a volver recuento. Porque lo que estamos haciendo aquí ultimately-- tenemos una variable contador que es va a incrementar a través de nuestra cadena. Vamos a seguir adelante, mantenemos va, vueltas y vueltas en este circuito. Y si bien no estamos en el final de este cadena, que es el terminador nulo. Y cada vez que pasamos por que, estamos agregando a nuestro mostrador. Y vamos más a lo largo de esta matriz. Y al final, una vez que golpear el terminador nulo, sabemos, oh, podemos romper, devuelva el conteo. Tenemos nuestra strlen. ¿Todo el mundo obtener la forma Esto se implementó? Mientras loops-- Sé que no tenemos hecho demasiado con ellos, pero son por lo general muy, muy útil si no sabes lo que estás parando condición tiene que ser necesariamente. ¿Pregunta? AUDIENCIA: ¿Podemos escribir nula con la condición de tiempo? PROFESOR: Si bien? Sí, por lo que en este problema te tuve chicos asumen que s no va a ser nulo. Porque recuerda, teóricamente, si yo te di un puntero que era demasiado grande de la memoria, que le daría la nula, ¿verdad? Eso es lo que el operativo sistema haría. Así que si yo no digo que asumir s sería nulo, es necesario comprobar. Así que aquí, lo haría, si s es igual a igual a null, devolver uno. Algo así. AUDIENCIA: [inaudible] cero. PROFESOR: OK, te lo diré por qué no se puede hacer eso. Porque recuerda en la memoria, a la derecha, aquí. Vamos a ir aquí. Tienes bloques gigantes de la memoria todos con rejillas que almacenan valores diferentes, ¿no? Y así toda una cadena de es-- ejemplo, si hemos de entrada hola, sería H-E-L-L-O barra invertida cero, ¿no? Y entonces, ¿quién sabe, como al azar cosas que están en aquí después de ella. En realidad no sabemos lo que hay. Y por lo que si usted fuera a hacer en lugar de la barra invertida cero, null, puede que no sea nulo. Debido a que sólo puede significar algunas otras cosas al azar que no pertenecen en su cadena. Y así, la forma en que siempre sabemos que una cadena termina con una barra invertida es cero. Y eso es siempre la forma en que comprobar para ver el final de una cadena. Null, todo lo que significa es que si tienes un puntero inexistente, primero de todo, o si su memoria es tan grande que usted no puede regresar, entonces sería nula. Así que tener mucho cuidado al diferenciar la diferencia entre la nula y la barra invertida cero. Sí. Todo el mundo de acuerdo con esto? OK. Así que tuve que ustedes escriban strlen. Factible también podríamos pedirle que escribes fuera de A a I, recuerda que "Atwoa" o lo que sea que ustedes quieren llamarlo? Esa función en Vigenére y César, que convierte un valor ASCII a un entero? Eso también ha subido en las pruebas anteriores de las funciones que le hemos pedido a escribir. Casi cualquier función que usted ha utilizado y es muy fácil escribir usted mismo, sensores gusta es menor, es superior, para reducir, al superior. Funciones que convertir un cadena de minúsculas a mayúsculas. Todos sabemos cómo hacerlo, ¿no? Es muy fácil. Sólo quiero estar seguro que can-- es el mismo proceso de pensamiento. Sólo iterar a través y usted da vuelta las cosas. Usted tampoco contar o cuando encender las cosas de manera diferente. Me suggest-- I no sé si vamos a pedir que memorizar lo mayúscula o de capital Z, o minúscula A o minúsculas z están en ASCII, pero yo sugeriría quizá por escrito que en el caso hacemos. Sólo para que ustedes tienen una referencia. Como mayúscula A es, qué, 197? Y entonces minúscula es como 50 algo. 65, sí, ahí lo tienes. Así que más o menos conocer la diferencia entre ellos es 32. Eso es muy importante. Sí. ¿Soy bueno en esto? OK. AUDIENCIA: Podríamos teóricamente escribir algún de ellos hacia abajo también en nuestra poco-- PROFESOR: Usted teóricamente simplemente podría copiar la función hacia abajo. Es verdad. AUDIENCIA: No [inaudible]. PROFESOR: Ustedes tienen una hoja. Ustedes tienen una hoja de notas. Puedes escribirlo. Puedes escribirlo. Puedes hacer lo que quieras con él. Sí. Por lo tanto teóricamente, si quiere, ir. AUDIENCIA: [inaudible] pero no lo hacemos de verdad necesariamente tienen que recordar el valor, podemos simplemente utilizar el de superior o de funciones inferior, a la derecha? PROFESOR: Sí. Pero si os dimos una pregunta que dice escribir a superior, entonces usted tendría que escribirlo. Así que ustedes pueden asumir que usted chicos tienen acceso a todas las funciones, pero si usted desea utilizar para la parte superior o para inferior, qué es lo que también hay que hacer? AUDIENCIA: [inaudible] utilizar CS50 [inaudible] PROFESOR: ¿Es CS50.h? Tenga cuidado allí. Así que para la parte superior, para bajar, es superior, es menor, funciones que implican manipulación de cadenas son todo dentro de ya sea el Ascii o dentro de la biblioteca matemática o dentro de la biblioteca de cadena. Así que si ustedes usan esas funciones, tenga cuidado de recordar para incluir esa cabecera. Así que quizás también algo que que desee incluir en su hoja, cuáles son la cabecera? ¿Cuáles son las bibliotecas usted ha estado usando? ¿Qué funciones son dentro de esas bibliotecas? Es importante. ¿Sí? AUDIENCIA: ¿Podríamos simplemente policía y hacer hashtag a través de la absolutamente cada carta que alguna vez visto así en todas las preguntas? PROFESOR: Usted podría. No sé lo feliz vamos a ser de grado que prueba que cada pieza de código es el doble de lo que tiene que ser. No sé, podríamos sacar un punto para el estilo. Pero teóricamente su código sería correcto. Ustedes podrían policía y basta con incluir todo. Eso también está bien, sí. AUDIENCIA: [inaudible]. PROFESOR: Sí. Yo sugeriría que no hacer eso sin embargo. Sí. AUDIENCIA: Cool. PROFESOR: Buena pregunta. AUDIENCIA: Entonces, el peor de los casos. PROFESOR: El peor de los casos. Si olvida totalmente, usted podría hacer eso. Sí. Sí, el código está ahí. Solía ​​n lugar del conteo, pero, usted conocer, lo que flota su barco. AUDIENCIA: Espere, por lo que no tendría que Hashtag incluir porque somos empezando por el int? PROFESOR: Sí, yo supuse que nos pidieron que escribir la función. Si usted quería estar seguro, probablemente podría ponerlo allí. Pero yo no me molesté, sí. Ni siquiera sé si necesita cualquier biblioteca para esto. Debido a que usted no está realmente la impresión cualquier cosa o nada, ¿verdad? Sí, yo no sé si necesita una biblioteca. OK. Este es también un poco más a lo largo las líneas de manipulación de memoria. Este tipo de poco complicado. Piensa sobre esto. Usted tiene una función llamada func. Podría haber llamado que lo que sea, pero elijo nombrarlo func. Lo tengo encima de mi principal. Recuerde, usted quiere tener una función después de que su principal, usted quiere asegurarse de que incluir el prototipo de la parte superior. Pero en este caso fue tan corto que sentí que podía simplemente incluirlo encima de la principal. No necesita tener el prototipo, porque ya está escrito arriba. Así que todo lo que estoy haciendo en mi función principal está creando entero x es igual a 10. Voy a llamar a mi función func, y luego imprimir algo. Y entonces eso es realmente lo func está haciendo. ¿Quieren que pensar en esto. Debido a que es un poco complicado. Es muy, muy difícil, en realidad. Piense en lo que esto programa sería hacer salir. Te voy a dar dos chicos minutos. Buenas discusiones? AUDIENCIA: Sí. PROFESOR: Sí. Muy bien, así que esto es complicado por una razón. Y es por eso que yo quería para llevar esto a la atención de todos. ¿Alguien quiere darme una sugerencia, un intento? ¿Cómo sería esta imprimir? Totalmente bien si te equivocas. ¿Sí? AUDIENCIA: Creo que es 100 y luego 10 en dos líneas separadas. PROFESOR: Y un 10? ¿Alguien tiene alguna otras conjeturas? ¿Sí? AUDIENCIA: Tal vez sólo 10 porque func no devuelve nada? PROFESOR: OK, así que tener conjetura número uno es que conjetura número dos es sólo va a imprimir 10. ¿Alguien tiene alguna otras conjeturas? OK. Así que vamos a caminar a través de este, ¿no? Siempre que reciba una pieza de código, no basta con ver y ser como, ah, eso es tantas cosas! ¡Estoy tan confundida! Al igual que, calmarse. Sólo sé que usted podría mirar a través de código línea por línea. Eso es todo lo que es. Es como leer un libro. Así que con cualquier función, siempre comenzamos a principal. Así que vamos a comenzará a las void main int, incluso el programa de ya deteriorada, ¿verdad? Comience en en void main. Int x es igual a 10. Así que voy a borrar esto. Voy a señalar a la memoria para que lo chicos pueden especie de ver lo que está pasando. Recuerde que aquí tenemos nuestra pila? Hasta aquí tenemos nuestra amontonarán en algún lugar aquí. Pila crece, ¿verdad? Y dentro de la pila, que tiene la red funcionan tan bien como todos de red variables locales. Así que aquí, int x es igual a 10. Dentro de nuestra función principal que estamos la creación de una variable llamada x. Estamos estableciendo que igual a 10. Aquí tienes algunos x, y ya está estableciendo que igual a 10, a la derecha, dentro principal. ¿Todos bien? Función. Así que ahora, dentro de nuestro principal función, estamos llamando la función que hemos escrito anteriormente. Así que estamos ahora entramos en la segunda función. Vamos a crear otro variables int x es igual a 100. ¿Qué está pasando aquí en la pila? ¿Qué sucede cuando se llama a un función que crea nuevas variables? ¿Qué sucede aquí en la pila? AUDIENCIA: [inaudible] pilas en la parte superior? PROFESOR: Sí. Así que en realidad crea una copia. Y que tipo de pilas en la parte superior. Piense en el stack-- una pila de libros, una pila de nada. Piles en la parte superior, en primer lugar en la última cabo, último en entrar, primero en salir. Así que va a crear una x aquí. Eso va a tener todos los funcs variables. Excelente. Así que ahora tenemos dos diferentes x de que representar dos cosas muy diferentes. Entonces vamos a imprimir el número entero de x. Así que vamos a imprimir 100, ¿verdad? Porque aquí es 100. Así que eso es lo primero que se va a imprimir. Como esta función devuelve nada, ahora esa función, esa línea en main está hecho. Todo el mundo bueno conmigo hasta ahora? Así que estamos ahora a través de dos de los tres líneas de nuestra función principal. Ahora vamos a la tercera línea. Vamos a printf. ¿Qué es este x dentro principal? ¿Qué es lo que representan? ¿Qué valor es x ahora? AUDIENCIA: 100. PROFESOR: Es 100? AUDIENCIA: Todavía 10. PROFESOR: Todavía 10. Sí. Porque recuerda, en el plazo nuestra func, x es igual a 100. Pero si volvemos la espalda a nuestra función principal, esa variable se almacena en una lugar diferente en nuestra pila. Así que ahora tenemos que volver a la chimenea principal, red de variables locales. Y aquí x es igual a 10. Y así vamos a imprimir 10. Así que ella tenía toda la razón. Vamos a tener la de salida de 100 y 10. ¿Sí? AUDIENCIA: Cuando malloc, es que la montón o la pila que es [inaudible]? PROFESOR: Cuando malloc, usted está tomando memoria del montón y su asignación. Así que usted no tiene meterse con nada de esto. Así que supongo que la comida para llevar más grande aquí hay algo que se llama alcance. Para aquellos de ustedes que estaban en la sesión de revisión de anoche, hablamos brevemente sobre esto. Alcance define cómo y cuando existen variables. O dentro de lo que enmarca qué existen las variables. Más o menos la regla general es decir, su variables-- si usted los crea dentro braces-- rizado existen sólo dentro de esas llaves. Así por ejemplo, en nuestra función de func, ves esas dos llaves. Si va a crear nada en el interior de la misma, es probable que todo lo que estamos haciendo es la creación de una pila y el almacenamiento que no. Lo mismo en el principal. Eso es sólo almacena dentro del principal. También quieres ser muy, muy cuidado aquí. Debido a que alcance también se presta a diferentes ejemplos. Así, por ejemplo para una bucle, por int i es igual a 0. I es menor que, no sé, 10. Yo plus plus. Y tienes código dentro de ella, ¿no? ¿De dónde viene esta variable, i, en realidad sólo existo? Sólo dentro del bucle for. Así que apuesto a que muchos de ustedes tienen Probablemente encontrado este error cuando que estás haciendo programas en sus conjuntos de procesadores. ¿Cuántos de ustedes han tratado de utilizar i fuera de un bucle for y tenía un error? Al igual que un enteros sin referencias ¿o algo asi? La razón por la que sucede es porque aquí estás la creación de algo que sólo existe dentro de su bucle. Y si intenta usarlo, i no lo hace en realidad existe fuera de ella. Así que, básicamente, un ordenador diciendo: Yo no sabes lo que estás hablando. Todo lo que sé es que yo era un aquí, pero ahora ya no. Así que si yo fuera a crear un bucle for dentro, ¿no? Y yo voy a crear otro, como int j, y tienen que hacer lo que sea. Y tienes un código dentro de ese bucle, j sólo existe aquí. Pero eso también existe dentro de i. Y así j sólo existe dentro de este bucle, mientras que existe en todo el asunto. Todo el mundo claro? Lo mismo con sentencias condicionales si quieres crear cualquier cosa. Lo mismo con bucles mientras que si desea crear nada. Eso es algo de lo que muy, muy cuidadoso acerca. Así que este era un buen problema en el sentido de que demuestra dos cosas. Se demostró por primera vez, el alcance. Y demostró también la asignación de memoria. Debido a que ustedes deben saber que funciones crecen hacia arriba en la pila. Y que cuando se llama a funciones, que está creando esencialmente una nueva pila de memoria. Eso es muy diferente de lo que su memoria es la red. Sí. ¡Uf! Todo el mundo en Aceptar en eso? Eso fue confuso. Muy buenos temas para repasar, porque usted está probablemente va a conseguir un poco complicado cosas como que en el cuestionario. Sí. Guay. Voy a poner usted consigue 100 en un línea y luego 10 en el otro. Sí, muy bueno. OK, ahora los chicos se llega la oportunidad de ser el TA. Tienes la oportunidad de responder a todas la encantadora mensajes de correo electrónico que a veces me pongo. Así que, queridos Andi, veo creo que algo es ir mal con mi compilador. Estoy seguro de que mi código es correcto, pero sigo obteniendo un fallo de segmentación cada vez que me encuentro. ¿Que esta pasando? Por favor, ayuda, mucho amor. Si ustedes tiene algo como que cómo respondería usted? Estas son en realidad muy común preguntas nos preguntarán ustedes. Es que si, le daremos un escenario, vamos a darnos su mejor respuesta a lo que está pasando. Alguien tiene una puñalada en lo que está pasando? ¿Sí? AUDIENCIA: Tal vez el desreferenciado nulo, algo así como el puntero se señala en algo nulo. PROFESOR: Sí, eso sería un ejemplo de cuando eso suceda. Pero lo que es la imagen más grande de lo que está pasando aquí? AUDIENCIA: ¿Es que usted está tratando para acceder a la memoria que no estás supone que tienen acceso a? PROFESOR: Exactamente. Así que pensar en un fallo seg, un off límites, área restringida en la memoria que no debe tocarse. Así que más o menos cuando se está tratando a index-- como por ejemplo, usted ha declarado array de cero a nueve. Pero intenta tocar ese décimo valor, usted no tiene acceso a eso. Debido a que usted no ha declarado. Y para que su equipo va mirar que sea similar, uh oh, estás tratando de ir fuera de los límites de un índice. Voy a darle un fallo de segmentación. Piense como segmento, ¿verdad? Un segmento adicional, la culpa es cuando intenta romper algo y que no debería estar allí. Fallo de segmentación es en cualquier momento intenta tocar las cosas que no debe tocarse. Así ejemplos comunes son un índice. Por supuesto, si usted está tratando tocar eso era nulo, que también funcionaría también. Si el puntero estaba tratando de tocar las cosas que no se deben tocar, que también podría funcionar tan bien. Lo más típico podrás ver esto en una matriz. ¿Todos bien? AUDIENCIA: Así que si quieres para acceder al punto 10a y sólo hay un límite de nueve años o algo así. PROFESOR: Sí, exactamente. Bastante. Guay. Estimado Andi. Así que tenemos estas maravillosas cosas llaman clases. Si Merge sort-- como nosotros sierra en el ejemplo, cuando David hizo todo cosa en class-- por qué, si es mucho más rápido que cualquiera de los otros tipos, ¿por qué nos molestamos saber cualquiera de los otros tipos? ¿Qué es esta pregunta realmente que le pregunta? ¿Qué hay de los tres palabra-- AUDIENCIA: ¿Cuál es la compensación? PROFESOR: Exactamente. Eso es lo que está haciendo la pregunta. ¿Cuál es el equilibrio entre Combinar especie versos cualquier otro tipo? AUDIENCIA: Toma la memoria, ¿no? PROFESOR: ¿Tiene usted explicar que un poco más? En primer lugar vamos a explicar tienda Combinar. ¿Cómo Combinar especie trabajar? AUDIENCIA: Así funciona por dividiendo todo en medio y luego poner juntos y la reasignación de ella con el fin, que cada vez que combinar los conjuntos. PROFESOR: Más o menos. Así que puedo sacar esto, pero sería llevarme cinco minutos a lo alcanzará. Mirar hacia atrás a la sección de diapositivas donde cubrimos Combinar tipo. Exactamente. Así que la forma de combinación de trabajos de ordenación es que divide las cosas por la mitad, y luego que sólo se ve en el primeros valores de todos ellos y clasifica sólo eso. Continuamente crea nuevas matrices y pone las cosas cada vez más en orden. Y así, mientras que eso es muy, muy rápido porque es-- ya sabes, una búsqueda binaria es n log n. Estás creando tantos diferentes matrices que eres el uso de una enorme cantidad de memoria. Y así, mientras que es más rápido, la compensación aquí es que usted está utilizando más memoria. Y así, sugerencia, ordena y búsquedas estaban cubiertos mucho más este año lo que han sido en años anteriores. Ustedes deben ver que reflejado en consecuencia en el cuestionario. Definitivamente, me gustaría gastar tiempo en ir más de lo que todos los diferentes tipos son, buscar la forma binaria, cómo lineal trabajo de búsqueda. Cómo quizás pseudocódigo codificar los a cabo. ¿Cuáles son los tiempos de funcionamiento? Algo así como tiempos de funcionamiento es muy fácil de copiar hacia abajo en una hoja de notas, ¿derecho? Es muy difícil cuando estás en el medio de la prueba y usted tiene que darse cuenta de eso. Copie abajo. Te garantizo que eres va a tener que saber eso. ¿Cuáles son las ventajas y desventajas? Peor de los casos, mejores escenarios para todos ellos, muy llegar a conocer. ¿Sí? AUDIENCIA: ¿Necesitamos saber cómo codificar Combinar especie? Al igual, es lo que necesitamos recordar el recursiva? PROFESOR: Lo dudo mucho, simplemente porque es como bastante complicado. Pero puede que no sea factible si pedirle que use pseudocódigo a cabo. Sí. Sí, está bien, uno más. Esto puede haber surgido en la última pieza en un poco. ¿Sí? ¿Todos oír eso? OK, así que más o menos de la primera todo, ¿qué tipo de programa sería darle una salida como esta? Recuerde que usted pide que aprender acerca de este nuevo tipo de herramienta de depuración? ¿Cuál era el nombre de ella? Valgrind, derecha Era un programa donde usted puede llamar a eso pude realizar un seguimiento de toda la memoria que está utilizando en su programa y que estaba pasando. Así que si tienes algo, como, definitivamente perdido, 40 bytes en un bloque. Probablemente usted no está recordando a liberarla. Porque si usted está usando bytes de memoria, eso significa que ha accedido a que la memoria, pero no ha sido capaz de liberarse. Así que usted quiere hacer Seguro que eres también utilizando libremente-- eso es un function-- para liberar a todos los de la memoria reasignado por malloc. Guay. Así que esta diapositiva, tendré para arriba. Está en todas partes en un montón de conferencias, en una gran cantidad de sección diapositivas. ¿De verdad quiere asegurarse que acaba de saber todo esto. Ya sea en su hoja de nota o si quiere memorizarlo, no dude en. Eso es muy, muy, muy importante. También una muy buena pregunta que podemos pedir. ¿Por qué es mirada Selección sort-- en Selección sort-- todos los tiempos de ejecución son N al cuadrado. Independientemente de cómo la lista llega a usted como, ¿por qué es sort-- Selección Te voy a dar 30 chicos segundo pensar en esto. Debido a que es un poco confuso. Se trata de una reflexión conceptual. ¿Por qué los tiempos de ejecución de la misma en tanto los peores y mejores escenarios? ¿Sí? AUDIENCIA: Debido Selección especie cada posición o el espacio en este pequeño arsenal cosa o lo que sea. Así que incluso en el mejor de los casos, incluso si está perfectamente ordenadas, sería aún tiene que ser así, OK, uno. En mi primer lugar tengo una. Y pasar por todos ellos. OK, uno es el más pequeño. Y luego va otra vez y es como, OK, dos es la más pequeña de todas las cosas. Pero todavía tiene que comprobar todos y cada uno. PROFESOR: Sí. Así, por ejemplo, vamos a decir Tenemos una lista, ya clasificado, una serie uno a cinco. La forma en que tipo de selección es que pasa por, comprueba estos dos. A continuación, comprueba los dos. Y entonces se comprueba y verifica. Mantiene comprobar todos ellos, independientemente de si o no en realidad está ordenada. Porque eso es simplemente la forma en que el tipo trabaja. Y por lo que esta cuestión es algo así como una pregunta conceptual pediremos. Donde primero, a saber qué tipo de selección es, a la derecha, para poder responder a la pregunta. Tienes que ser capaz de entender conceptualmente lo que está pasando. Y entonces usted puede aplicarlo y pensar, OK vamos a imaginar peor de los casos. Están todos en orden descendente. ¿Cómo afectaría eso que? ¿Y si es el fin de ascender? Si ya está ordenada? ¿Cómo afectaría eso los tiempos de ejecución? Y entonces tipo de selección, te darás cuenta que no importa realmente. Debido a que usted está comprobando toda la valores, independientemente de lo que está pasando. Y así las cosas buenas para recordar. ¿Por qué algunas clases difieren de los demás y la mejor y peor de los casos afectaría a todos ellos. Voy a golpear realmente en clase porque eso va a estar en el cuestionario. Sí. OK. Hay seis minutos para el final. Puedo tomar tres minutos de preguntas. También puedo colgar alrededor de como 20 minutos después de la sección si desea hacer preguntas también. ¿Alguien apenas tiene muy breve preguntas o cuestiones conceptuales son poco claros acerca de este momento? ¿Sí? AUDIENCIA: ¿Puedes hablar un poco poco acerca de los operadores bit a bit? PROFESOR: Sí. Así que los operadores bit a bit son algo que probablemente sólo podría querer poner en su hoja. Así quickly-- No quiero ir demasiado en profundidad porque de Harvard, en su opinión período de sesiones, la cubrió bastante bien. Operador de bits, hay cinco de ellos, ¿no? Hay una, que es x o función, no hay signo, que es la y. Pipe, que es el o. Y entonces usted tiene los dos diferentes tipos de turnos. Si te doy dos valores, si es Yo te doy, como, uno y uno. Lo que habría que evaluar a? Si te doy cierto y verdadero, cierto? ¿Qué hay de verdadero o falso? Siendo cierto, ¿no? Debido a que hay una o. Lo más probable es que te damos los números. Así que recuerde, uno es igual a verdadera, cero es igual a falso. Y nos podría darle estas cosas y pedirle que nos diga lo que pasa. Harvard cubre dentro de la primera 10 minutos de su sesión de estudio muy, muy bien. Así que ustedes quieren hacer Seguro que mira hacia atrás en eso. AUDIENCIA: ¿Es pisa5 va a estar en el concurso? PROFESOR: No. Ni siquiera mirar a pisa5 ahora. Es dificil. Así que ni siquiera te molestes en buscar en pisa5. Sin embargo, como algunos consejos y sugerencias, sugeriría que inicie pisa5 tan pronto como el concurso ha terminado. Este será el más duro semana, pero luego ustedes se la pasó en las colinas de verde y cachorros laminados, y está bien. Esta clase se pone significativa más fácil después del quinto conjunto de procesadores. Horario de oficina: AUDIENCIA son Domingo, Lunes? PROFESOR: Sí, así que las horas de oficina hará del domingo al lunes para el conjunto de procesadores. El horario de atención esta noche esencialmente sólo será crítica para el concurso. Si alguien quiere entrar y pedir la TA una pregunta, estaremos allí. Voy a tomar tal vez una pregunta más si alguien tiene una pregunta? ¿Sí? AUDIENCIA: Cuando estés nodos que definen, [inaudible] si dices estrellas nodo y luego otro, hace el ordenador de forma automática entiendes que eres refiriéndose a otro puntero? PROFESOR: No. AUDIENCIA: Usted tiene que reenlazar que [inaudible]? PROFESOR: Así que, básicamente, el estructura de un nodo es, recordemos, que es como se crea el nodo y entonces usted tiene un puntero llamada siguiente. Todo lo que estamos haciendo es tener la estructura allí. Tiene que asignar ese puntero en alguna parte. Así que las computadoras no lo hace sabe lo que está haciendo todavía. Tiene que asignar realidad cuando va a crear su lista enlazada. Y eso es lo que principalmente pset 5 estará encendido. Así que no te preocupes por nada de eso en este momento. AUDIENCIA: Así que no necesitamos centrarse demasiado en la lista de enlaces, justo la concepción general? PROFESOR: Just prácticamente pilas, colas, listas de enlaces, árboles, tablas hash. Sólo ser capaz de saber lo que son. No vamos a pedir te gusta nada específico porque en realidad no hemos hecho un conjunto de procesadores que la cubre nada de eso todavía. Así que en los últimos dos minutos antes Me puse libre para matar a este cuestionario. Más o menos, como, pensar en cómo ahora que ustedes han llegado en esta clase. Recuerdo que cuando la segunda semana de esta clase, algunos de ustedes pasar tres horas escribiendo agua. ¿Cuánto tiempo le llevará chicos escriban agua ahora? 30 segundos, tal vez? Piense en la cantidad ustedes han aprendido. CS es un tema muy, muy difícil. No hay duda de eso. Es difícil, por eso nadie se lo estudia. Es simplemente difícil. Y es totalmente bien. Y estoy muy orgulloso de que todo el mundo ha llegado tan lejos. Conjuntos de procesadores no son fáciles. Ellos toman mucho tiempo. Chicos, yo nunca le pedirá que escriba el juego de 15 o Vigenére en el conjunto de procesadores. No hay necesidad de simplemente asuste por eso. Todo lo que estamos probando aquí es evaluar su conocimiento conceptual, así como algunos de sus habilidades básicas de codificación. La prueba está diseñada para ser realmente difícil. Al igual, que está diseñado para que usted no obtiene 100. También está diseñado para que usted probablemente No ser capaz de terminar en 75 minutos. Y eso es totalmente bien. Soy un estudiante de mí mismo. Lo sé, lo odio cuando camino de un cuestionario ser así, mierda. Eso fue muy duro. Probablemente lo que va a happen-- y eso es totalmente bien, Te lo digo chicos ahora. Los medios en estas cosas no son altos en absoluto. Y para aquellos de ustedes que han estado recibiendo, como, tres en sus boletines de problemas, eso no quiere decir que estés va a conseguir un 60 por ciento en esta clase. Si usted recibe un 60% en el concurso, que no lo hace decir que vas a obtener una D en esta clase. Vemos, sobre todo yo, por aquellos de ustedes en mi sección, Yo veo lo difícil que ustedes están trabajando. Y guardo un registro de eso. Ustedes estarán bien. No hay memoria institucional de la felicidad al final del semestre. Debido a que todos los niños de Harvard están diciendo sus amigos, oh, estarás bien. Nadie te está diciendo chicos que aquí. Así que tengo que decir a ustedes que aquí. Ustedes estarán bien. Estoy muy orgulloso de todos ustedes. La prueba será dura. Estudio para ella, y después simplemente tirarlo a la basura. ¡Prepárate para aprender cosas nuevas. Y comer dulces. Nosotros hemos tienen un montón de caramelos. Obtener una buena noche de sueño. No, no dormir, porque eso sería muy malo. CS es mucha lógica. Si no duermes, no puede funcionar, y su cerebro no puede funcionar. Y voy a estar aquí para el próximo 20 minutos si alguien quiere pasar el rato. Ustedes van a acabar con él. Buena suerte.