[REPRODUCIENDO MÚSICA] DAVID J. MALAN: Está bien. Esto es CS50 y esto es el inicio de la Semana 2. Y te recuerdo que durante el último par de semanas, hemos sido la introducción de la computadora la ciencia y, a su vez, la programación. Y empezamos la historia por medio de Scratch, que lenguaje gráfico del Laboratorio de Medios del MIT. Y luego, más recientemente, la semana pasada, ¿verdad introducir un higher-- una lenguaje de bajo nivel conocido como C, algo que es puramente textual. Y, de hecho, la última vez que explorado dentro de ese contexto una serie de conceptos. Esto, recuerdo, fue el primer programa miramos. Y este programa, simplemente, imprime, "hola, mundo". Pero hay tanto magia aparente pasando. Hay esta #include con estos soportes de ángulo. Hay int. Hay (void). Hay paréntesis, corchetes, punto y coma, y ​​mucho más. Y así, recordar que introdujimos los arañazos para que pudiéramos, a ser posible, ver más allá que la sintaxis, las cosas que en realidad no es todo lo que intelectualmente interesante, pero desde el principio es, en absoluto, un poco complicado para envolver su mente alrededor. Y, de hecho, uno de los más comunes las cosas desde el principio en una clase de programación, especialmente para los menos cómodo y sentirse frustrado por y disparado por cierto sintáctica errores, por no hablar de los errores lógicos. Y así entre nuestros objetivos hoy en día, de hecho, la voluntad ser para equiparlo con un poco técnicas de resolución de problemas para saber cómo para resolver mejor los problemas propios en forma de depuración. Y como se recordará, también, que el ambiente que introdujimos última vez que se llama CS50 IDE. Este es un software basado en web que Le permite programar en la nube, por así decirlo, mientras se mantiene la totalidad de su archivos juntos, ya que nuevamente será hoy. Y recordar que nos revisited estos temas aquí, entre ellos, las funciones y bucles, y variables y expresiones booleanas, y condiciones. Y en realidad un poco más que nosotros traducido del mundo de los arañazos al mundo de la C. Pero la construcción fundamental bloques, por así decirlo, eran realmente sigue siendo el mismo la semana pasada. De hecho, en realidad sólo tuvimos una diferentes pieza del rompecabezas, si se quiere. En lugar de que púrpura guardar bloque, que en vez había printf, que es esta función en C que le permite imprimir algo y el formato de la pantalla. Introdujimos el CS50 Biblioteca, donde se tienen ahora a su disposición get_char, y get_int, y get_string, y algunas otras funciones como así, a través del cual se puede obtener de entrada de propio teclado del usuario. Y también echamos un vistazo a las cosas como estas: bool, y la carbonilla, y el doble, flotador, int, string LONG_LONG. Y hay incluso otros tipos de datos en C. En otras palabras, cuando se declara una variable para almacenar algún valor, o cuando se implementa una función que devuelve algún valor, puede especificar qué tipo de valor que es. Es una cadena, como una secuencia de caracteres? ¿Es un número, como un entero? ¿Es un punto flotante valor, o similar? Así que en C, a diferencia de los arañazos, que en realidad comenzó a especificar qué tipo de datos estábamos regresando o el uso. Pero, por supuesto, también nos encontramos con algunos límites fundamentales de la computación. Y en particular, este lenguaje C, el recuerdo que nos dimos un vistazo a desbordamiento de enteros, la realidad que si sólo tiene una cantidad finita de memoria o, específicamente, un número finito de bits, sólo se puede contar tan alto. Y así nos fijamos en este ejemplo aquí por el que un contador en un avión,, En realidad, si se ejecuta el tiempo suficiente se desbordarse y resultar en un software un error potencial físico real. También nos fijamos en flotante punto de imprecisión, la realidad que con sólo un número finito de bits, ya sea 32 o 64, sólo puede especificar tantos números después de un punto decimal, tras lo cual se comenzar a tener imprecisa. Así, por ejemplo, un tercio en el mundo aquí, en nuestro mundo humano, sabemos que es sólo un número infinito de 3s después del punto decimal. Sin embargo, un equipo no puede necesariamente representar un número infinito de números si únicamente permite que algunos cantidad finita de información. Así que no sólo tenemos que equipar con mayor poder en términos de cómo puede expresarse en un teclado en términos de programación, También nos limitamos lo en realidad se puede hacer. Y de hecho, los errores y los errores pueden surgir de este tipo de cuestiones. Y, en efecto, uno de los temas de hoy van a ser temas como la depuración y en realidad mirando debajo del capó la forma en que se introdujeron las cosas la semana pasada están efectivamente en práctica de manera que es mejor entender tanto las capacidades de las y las limitaciones de un lenguaje como C Y de hecho, vamos a pelar las capas de la más simple de estructura de datos, algo que se llama una matriz, la cual De cero pasa a llamar una "lista". Es un poco diferente en ese contexto. Y entonces también introduciremos una de las primero de nuestros problemas específicos de dominio en CS50, el mundo de criptografía, el arte de la aleatorización o en la información de cifrado por lo que puede enviar mensajes secretos y decodificar mensajes secretos entre dos personas, A y B. Así que antes de que la transición a ese nuevo mundo, vamos a tratar de equiparlo con un poco técnicas con las que se pueden eliminar o reducir al menos algunos de las frustraciones que es probable que haya encontrado durante la última semana solamente. De hecho, antes de que se tal-- algunos de sus primeros problemas en C. Y las probabilidades son, Si eres como yo, la primera vez intenta escribir un programa, incluso si usted piensa lógicamente el programa es bastante simple, Es muy posible que golpear una pared, y el compilador no va a cooperar. Hacer o no va Clang para hacer realidad su hacer una oferta. Y por qué podría ser? Bueno, vamos a echar un vistazo a, tal vez, un programa sencillo. Voy a seguir adelante y guardar esto en un archivo llamado deliberadamente buggy0.c, porque sé que a viciado de antemano. Pero podría no darse cuenta de que si esto es la primera o segunda o tercera programa que en realidad estoy haciendo a mí mismo. Así que voy a seguir adelante y escribir a máquina, int main (void). Y luego dentro de mis llaves, una muy familiar ( "hola, mundo-- barra invertida, n ") - y un punto y coma. He guardado el archivo. Ahora voy a bajar a mi ventana de terminal y el tipo de maquillaje buggy0, porque, de nuevo, el nombre del archivo de hoy es buggy0.c. Así que escribo hacer buggy0, Intro. Y, oh, Dios, recordar de la última vez que no hay mensajes de error es una buena cosa. Así que no hay salida es una buena cosa. Pero aquí tengo claramente cierto número de errores. Así que la primera línea de salida después de escribir hace buggy0, recuerdo, se emite bastante detallado de Sonido metálico. Debajo del capó, IDE CS50 está configurado utilizar un montón de opciones con este compilador de modo que usted no tiene pensar en ellos. Y eso es todo lo que la primera línea de medios que se inicia con Clang. Pero después de eso, los problemas comienzan a hacer su aparición. Buggy0.c en la línea 3, carácter 5, hay un gran error, rojo. ¿Que es eso? Declarando implícitamente función de biblioteca printf con el tipo int (const char *, ...) [-Werror]. Es decir, es muy rápido se pone muy arcano. Y, desde luego, en un primer momento vista, que no lo haría espero que lo entienda el totalidad de ese mensaje. Y lo que una de las lecciones hoy va a ser tratar de notar patrones, o cosas similares, a los errores que pueda tener encontrado en el pasado. Así que vamos a desmenuzar solamente esas palabras que parecen familiares. El grande, rojo de error es claramente simbólico de que algo anda mal. declarando implícitamente printf función de biblioteca. Así que incluso si yo no entiendo muy bien lo declarando implícitamente función de biblioteca medios, el problema seguramente se refiere a printf de alguna manera. Y la fuente de esa cuestión tiene que ver con lo que se declara. La declaración de una función es mencionar que para la primera vez. Y se utilizó la terminología de la semana pasada de declarar el prototipo de una función, ya sea con una línea en la parte superior de su archivo o incorporada a un fichero de cabecera llamada. Y en lo que hizo que decimos archivo la semana pasada que printf es cita, Fin de la cita, declarada? ¿En qué archivo es su prototipo? Así que si usted recuerda, la primera cosa que me con tipo, casi todos los programas última vez-- y accidentalmente hace un momento comenzó escribiendo myself-- era éste aquí-- hash-- # include