[REPRODUCCIÓN DE MÚSICA] JASON HIRSCHHORN: OK, todo el mundo. Bienvenido a la Sección. Esta es CS50, nuestra misma primera sección super. Como todos ustedes saben, la próxima semana secciones regulares comenzarán, pero esta semana estamos todos juntos. No es a mí mismo. Mi nombre es Jason. Soy un profesor de Ciencias de la Computación. Tenemos Andi, quien es la cabeza de la TA CS50. Y Scaz, el profesor Brian Scassellati, él es un profesor de Ciencias de la Computación. Somos los cabezas CS50 en Yale. Siempre se puede enviar por correo electrónico nos heads@cs50.yale.edu. Estaremos en conferencias. Estaremos en horario de oficina. Si alguna vez hay algo que podamos haga por ti, todo lo que necesita, no dude en acercarse a nosotros. Entonces, ¿qué vamos a hacer hoy? O antes de eso, lo que hay subiendo esta semana? Así horario de oficina es de lunes, martes, Miércoles y jueves, de 8:00 a 11:00. Hay un horario en el sitio web. Secciones, como he mencionado, están empezando la semana que viene. Y te darás cuenta de lo que esta semana Tiempo de su sección es, qué día es, y quién es su TA. Boletín de problemas 1 se debe a jueves a las mediodía, viernes al mediodía con un día de retraso. Sí, usted tiene nueve días de retraso. Y hay nueve boletines de problemas. Y sólo se puede utilizar uno día de retraso por juego problema. Sí, en efecto, todo el problema conjuntos se deben viernes al mediodía. Eso es todo. Todo lo que los detalles están en el programa de estudios. Todos los viernes, tenemos almuerzos. Nos gusta hacer este gran Por supuesto se siente un poco más pequeño. Así que le invitamos a confirmar su asistencia. Almuerzo libre con su compañero compañeros de clase y el personal. cs50.yale.edu/rsvp. Todas estas cosas que Tengo en la pantalla, y más, usted puede encontrar cs50.yale.edu o cs50.harvard.edu, si ir a Harvard y están viendo esto en línea. También en esos sitios web, hay son un montón de recursos para usted. Cada conferencia no sólo tiene el video de la conferencia, pero también notas. Alguien observará el conferencias y tomar notas para usted. Por lo que sólo puede pagar atención durante las clases, o puede usar sus notas / nuestra notas para complementar sus propias notas. Hay toboganes en línea. La fuente code-- todo David alto en la conferencia, o Scaz alto conferencia, que código fuente está disponible en línea así como como yo, videos mencionado. Secciones, así mismo, todos serán filmados. Todas esas diapositivas estará disponible. Todo ese código será estar disponible para usted. Hay pantalones cortos en la página web donde Miembros del personal CS50 pasan de cinco a 10 minutos que pasan por temas para usted. Algunos de los que ya tienes encontrado en los boletines de problemas. Horas de oficina, como he mencionado, lunes a jueves, de 8:00 a 11:00. CS50 Estudio es un recurso fantástico. Hay problemas de práctica, diapositivas de muestra, errores conocidos que los estudiantes les gusta correr en, esencialmente para todos los temas que cubrirá en este curso. Y, por último, en esta diapositiva al menos, Reference50 que le da la información en todas las funciones de C usted podría posiblemente esperar de usar y muchos, muchos más. Una vez más, que dot dot dot al la parte inferior de la pantalla es para indicar que hay incluso más recursos en esos dos sitios web: cs50.yale.edu, cs50.harvard.edu. Entonces, ¿qué vamos a hacer hoy? Bueno, primero que voy a dar nos fijamos en los recursos. Ya hizo que uno. Míranos. Ahora, vamos a ir Tipos de datos y operadores en C. Entonces Andi vendrá aquí y ir más bibliotecas en C, printf (), una función con la que ya está familiares o se convertirá rápidamente en muy familiar. Y usted también se pasa de condicionales y bucles. Y finalmente, Scaz repasará el ID CS50. Si usted no ha Paloma en Ya en el problema Set 1, así como la forma de utilizar el comandos de terminal y útiles y luego le dan algunos demos y la práctica de codificación en el ID CS50. Antes de saltar a esta el contenido de este lado, ¿Alguien tiene alguna pregunta hasta ahora? Excelente. OK. Cambio de marchas. [CAMBIO DE GEARS] Ese era yo el cambio engranajes en un coche manual. Así que los tipos de datos en C, puede no sólo tener una variable x y tienen que estar en la línea 10, un entero, tal vez el número 1, en la línea 20, un número decimal 10.5, y las líneas a continuación, un par de más tarde una cadena, me encanta CS50. En C, las variables sólo pueden ser una cosa y sólo una cosa. Y lo que hay que darles tipos. Y en este foro, nos tener una lista de tipos. Hay caracteres, que representar caracteres. Así que eso es una letra A, B, C, D. Esto también puede ser un espacio, o que también se puede un carácter de nueva línea. No son números enteros, que son sólo números, toda numbers-- o números enteros rather-- pero sin decimales. Para decimales, tenemos números de punto flotante. Números de punto flotante son números con decimales. Luego están los largos, que son enteros esencialmente más largos. Se dará cuenta de que un largo es 8 mientras que un int es 4. Voy a llegar a eso en un segundo. Eso es porque anhela pueden almacenar hasta más enteros que un int pueden almacenar. Doble es un largo flotador. Y por último, tenemos cadena, que es un tipo de que es probable que haya usado antes. Si incluye hashtag # includeCS50.h en el archivo de origen, entonces usted puede utilizar un tipo de cadena. No es en realidad construida en C. Hay un par de otros tipos también. Pero estos son los principales con que va a utilizar y el encuentro. C como, otra vez he dicho, cada variable-- que sólo puede ser un tipo y un solo tipo. Eso es porque C es una forma estática lengua escrita a máquina, a diferencia a las lenguas escritas de forma dinámica donde si crea una variable usted puede cambiar lo que está almacenado en a medida que avanza en su programa. Por aquí en la mano derecha lado, tengo los diferentes tamaños de estos tipos de datos en bytes. Así que un carácter es 1 byte. Eso es de 8 bits. Y eso significa, porque 8 pedacitos hay ocho 0s y 1s. Vimos esas demostraciones en el primer semana con que las bombillas binarios. Con 8 bits o 1 byte, podemos representar los números del 0 al 255. Correcto. Si todos los 8 bits son 0 eso es 0. Si el primer bit es 1, que es el número uno, y así sucesivamente, todo el camino hasta 255. Y es por eso que para los personajes que puedas tienen esencialmente hasta 255 de ellos, pero eso es mucho para cubrir todos los personajes que necesitan utilizar. Para enteros, usted puede tener 0 y entonces usted tiene 2 a la 32 menos 1. Esos son el número de opciones usted tiene para los enteros. Durante mucho, tienes 0 a 2 a la 64 menos 1. Así que hay muchos, muchos, más opciones para anhela. Cuerdas, que es un signo de interrogación porque eso es un cliffhanger para más adelante. Sí. Me di cuenta de que todo el mundo es en el borde de su asiento, como lo que es ese signo de interrogación? Es un cliffhanger. Finalmente nos cubriremos el tamaño de cuerdas y hablan más sobre cuerdas. Debido a que la cadena es en realidad una de las ruedas de entrenamiento nos ponemos en este curso desde el inicio y luego sacar adelante sucesivamente, porque las cadenas en C en realidad son punteros a matrices de caracteres. Pero, de nuevo, eso es un Cliffhanger para más adelante. Antes de pasar a cualquier pregunta, comentarios, inquietudes acerca de esta diapositiva? OK. Debo ser un explicador fantástico. También cuando se está programando, usted va a utilizar estos operadores. Realmente signos simples que pueden hacer sencilla operaciones, con el que probablemente son ya muy familiar. Por ejemplo, a la derecha lado, vemos añadir. Para agregar, que acaba de hacer un signo más. Y lo que podría tener de dos variables x e y. Usted puede hacer x + y en el código. Tal vez usted quiere decir que a-- tener el número 7 y 3, desea almacenar que en una variable llamada suma. Usted puede hacer int para el tipo, el espacio suma, el nombre de la variable, = 7 + 3; ¿Cómo sería esa tienda en suma? Cualquier persona? Si tuviera en suma = 7 + 3. Lo que se almacena en suma? Usted sólo puede gritar hacia fuera. AUDIENCIA: 10. JASON HIRSCHHORN: 10! Eso es exactamente correcto. ¿Y en suma = 7-3, Acabo de utilizar ese signo tablero. ¿Qué va a ser almacenado? AUDIENCIA: 4. JASON HIRSCHHORN: 4. Suma es probablemente el nombre equivocado para esa variable, pero 4 sería almacenado. Para multiplicar en C, utilice el pequeño Personaje estrella, no utiliza una x. Dividir, use un Delantero No recortar el símbolo de división. Y para modulo, utilice el símbolo de porcentaje. Así que digamos que quiero ver int z = 7% 3, lo que se almacena en z? Entonces, eso es esencialmente preguntando qué hace modulo? ¿Alguien sabe lo que hace de módulo? Sí. y 4. ALTAVOZ 1: Es el resto. JASON HIRSCHHORN: Es la resto cuando se divide. Así 7 dividido por 3 es 2 resto 1. Así 1 se almacenaría. Hiciste resta, pero así es como funciona. Eso es lo que hace el operador de módulo. Se necesita un número lo divide por otro número y vuelve a ti el resto. Así que de nuevo, el 7% 3 te da 1, porque 7 dividido por 3 es 2 resto 1, y devuelve el resto. ¿Y vamos a volver a subir un paso a la señal de división. Si lo hiciera 7 / dividido por 3 hace Alguien sabe lo que volvería? ALTAVOZ 2: 2. JASON HIRSCHHORN: ¿Por qué 2 y no 2.333? ALTAVOZ 2: Creo que es corta después de todo el número. JASON HIRSCHHORN: Así eso es exactamente correcto. En C, si lo hace la división de dos enteros 7 dividido por 3, obtiene la respuesta que en este caso, 2.3333 para siempre y comprueba que el punto decimal y chuletas todo después del punto decimal y que sólo le devuelve 2. Así que si lo hacía 8 dividido por 3. Que en realidad, sabemos que para volver 2.666, pero chuletas de todo lo que fuera en punto decimal, trunca todo, y simplemente devuelve a usted 2. Así 6 dividido por 3, 7 divididos por 3, 8 dividido por 3, todos vamos a volver a usted 2. ¿Alguien sabe, o tiene una conjetura, en cuanto a cómo yo podía llegar la respuesta completa si quiero que decimal? Sí. Adelante. ALTAVOZ 3: Utilice un flotador? JASON HIRSCHHORN: ¿Qué quieres decir? ALTAVOZ 3: Porque usted dijo que el float es para los números [inaudible] JASON HIRSCHHORN: Correcto. Entonces, eso es exactamente correcto. 7 es un número entero. Pero si quería a su vez que en un número de punto flotante, Yo tendría que almacenar esa como 7.0 porque el equipo que realmente está stupid-- vimos que con el ejemplo- PB y J sólo hará exactamente lo que le dices. Así que si usted escribe 7, que creo que es un entero. Si se escribe 7.0, a pesar de que saben esas cosas son equivalentes, se trata de que como un número de punto flotante. Así que si usted lo hizo 7,0 dividida por 3 o dividido por 3,0, diría, OK, ahora estamos tratando con flotadores. Me volveré a vosotros 2.333333 siempre. Pero en realidad no siempre, porque como vimos también en la conferencia, estos números de punto flotante no son exactamente precisa. Así que si usted quiere que decimal, o una parte de ese decimal, entonces usted tiene que servicio- uno de ellos tiene que ser un número de punto flotante y el equipo tiene que entender que este es un punto flotante eres tratando, no es un entero. ¿Tiene preguntas sobre esa mesa en la derecha, hasta el momento? O su izquierda, su a la izquierda, a mano izquierda. Sí. ALTAVOZ 4: Derecho. Porque así como un regular enteros, lo haría write-- tendrías que escribir flotar? JASON HIRSCHHORN: Sí así. Bueno, si usted desea crear una variable que es un flotador, que necesita decir flotador z es igual a algo. ALTAVOZ 4: OK. JASON HIRSCHHORN: Pero si yo quería hacer 7 dividido por 3 y conseguir que el decimal, Yo haría flotador z = 7,0 / 3,0; y que me daría el punto flotante número. ALTAVOZ 4: OK. JASON HIRSCHHORN: Si lo hice algo así como int z = 7 / por 3, que me dé un número entero, porque esos son todos los enteros. ¿Tiene sentido? ALTAVOZ 4: Si. JASON HIRSCHHORN: OK. Excelente. ¿Alguna otra pregunta sobre esa mesa? De Verdad? Estoy tan emocionada. OK. Así que algunas otras cosas que va a utilizar, muchas veces en condiciones o bucles, son estos tipos de operators-- este tipo de expresiones booleanas. Y como hemos aprendido, == es lo que utilizar para comprobar si dos cosas son iguales. Así que aquí estoy comprobando si x == y, vamos a otra vez suponga que x es 7 ey es 3. Así que si escribía 7 == 3, lo que habría que volver a mí? ¿Es eso cierto o falso? AUDIENCIA: Falso. JASON HIRSCHHORN: OK. Siento que todo el mundo puede conseguir éste. Así que todo el mundo, lo que habría que devolver? AUDIENCIA: Falso. JASON HIRSCHHORN: Falso. Excelente. 7 no es igual a 3. Así 7 == 3 volvería falsa. Usted tiene un signo no es igual, así que si yo Chequeado 7! = 3, lo que habría que devolver? AUDIENCIA: Verdadero. JASON HIRSCHHORN: Verdadero. Excelente. Alguien fue muy enfático en la parte de atrás y apreciar eso. Entonces usted tiene menos de operador, menos de o igual a operador, operador mayor que, mayor que o igual a operador. Así que uno más prueba de cordura. Si tuviera 7 es mayor que o igual a 3. Lo que habría que devolver? AUDIENCIA: Verdadero. JASON HIRSCHHORN: Verdadero. Sí. Eso, reverso trastienda de la habitación, fantástico. Puede combinar estos expresiones si se quiere, también, con una lógica y que está && O un OR lógico que es || ||. Y por lo que ahora se puede probar de dos cosas juntos-- es eso gracioso? ¿Por qué es tan gracioso? Así que si yo quería, lo que puedo decir es 7 mayor que 3 y 2 es de menos de 4? Bueno, si 7 es mayor de 3, eso es cierto. 2 es inferior a 4, eso es cierto. Así que todo esto volvería realidad. Si he probado 7 es mayor que 3 y- Sólo estoy recogiendo números aleatorios aquí-- 4 es menor que 2, bueno, eso es falso. Tan cierto y falso maquillaje falso. Y usted puede seguir y que se combinan como muchas condiciones juntos como desee. ¿Alguien tiene alguna pregunta, comentarios, preocupaciones hasta ahora? Y veo que algunos de ustedes tomar fotografías me de en la pantalla, algo que se agradece. Con suerte, no es SNAPCHAT. Con suerte, es para sus notas. Pero todos ellos van que estará disponible en línea. Así que usted no tiene que tomar fotos de esto. Como he mencionado, todo estará disponible en línea para usted. OK. Estoy a punto de llegar fuera del escenario, también lo hace a nadie quiero decir nada antes que eso suceda? ¿Preguntas? [Interponiendo VOCES] JASON HIRSCHHORN: Oh, detente. Ustedes son demasiado agradable. OK. Voy a etiquetar a cabo. Vamonos. ANDI Peng: Vamos hacer un cambio micrófono incómoda ahora. JASON HIRSCHHORN: Soy va a llevar esto adelante. ANDI Peng: Agradecemos el apoyo, chicos. ¿Puedes escucharme? ¿Es bueno eso? Perfecto. Hermosa. Permítanme que meto en. OK. Por lo tanto, estoy a punto de hacer como un gigante información de volcado de ustedes en este momento. Y no se preocupe en absoluto si son no seguir cada pequeña línea de lo Estoy a punto de mostrar. Como dijo Jason, todo es completamente en línea. Así que vamos a tratar de introducir todos a los conceptos cubierto en algunas de estas diapositivas. Así que sólo tienes que seguir adelante. No se preocupe si usted no entiende todo; Sin embargo, si en algún momento te sientes perdido, levanta su mano, vamos a detener, no se preocupe. Guay. Así que creo que algo que David tiene Ya tipo de mencionado en la conferencia y Jason ha aludido tipo de al día de hoy es lo que una biblioteca es. Así que en la programación, tenemos estas cosas llamadas bibliotecas. Cuando, en esencia, todo se es sólo un conjunto de las funciones, es decir esencialmente sólo código que es ya ha sido escrito por alguien más que todos podemos usar dentro de nuestros programas. Entonces, ¿cómo una normal de trabajo de la biblioteca, ¿verdad? Usted entra a la puerta de la biblioteca. Usted tiene todos estos libros que usted puede sacar y se puede acceder a la información dentro de esos libros. Lo mismo en la programación. Usted tiene una biblioteca que ya tiene escrito por otras personas. Y la forma en que se puede, como programador o un estudiante, puede tener acceso a esa biblioteca es a través del hashtag # include. Por ejemplo, en C que tendrá tres C-- más comúnmente utilizado tres estándar C libraries-- la biblioteca de entrada / salida, la biblioteca de cadena, y la biblioteca de matemáticas. Así que dentro de su primera problema de pareja fija, esos serán los tres que usted está utilizando principalmente. Así como David ya explicó en conferencia, la E / S estándar biblioteca o la biblioteca estándar de entrada / salida hace exactamente eso. Le permite, en el código, a la entrada cualquier cosa, desde el usuario y de salida que a la pantalla, esencialmente la impresión a la pantalla. Y así, cada vez que utilice cualquiera de las funciones, por ejemplo, la función printf (), que vamos a ir en la siguiente diapositiva, asegúrese de incluir el estándar de E / S biblioteca o de lo contrario no va a ser capaz de utilizar la función printf (). Porque, como el programador En realidad nunca escribió esa función, usted está utilizando a alguien código de otra persona dentro de su propio código. Hace que todo el mundo tiene sentido? Guay. Y entonces esencialmente lleguemos a la biblioteca string.h y la math.h biblioteca, .h simplemente significa biblioteca, otras bibliotecas que eventualmente a utilizar dentro de su código. Sin embargo, para los propósitos de esta biblioteca, también tener-- de este class-- también tenemos lo que se llama la biblioteca CS50, cs50.h, en el que, por su lectura han creado muchas funciones importantes y útiles. Así que como programador puede cuestas fuera lo que ya hemos escrito para que de disponible esta función para usted para su uso. Voy a estar cubriendo un par de las funciones de uso común, pero saben que estos son todo Googleable línea. Siéntase libre, tire hacia arriba de la biblioteca y CS50 entonces usted tiene todas las funciones allí. Sí. ALTAVOZ 5: Así que si usted no estaba usando el software que se proporciona a nosotros por la clase, hace que significaría que tendríamos que descargar y encontrar esta cabecera presentar a nosotros mismos y decir el equipo en el que es? ANDI Peng: Muy buena pregunta. Exactamente. Así que es como si no estás físicamente presente en una biblioteca, no hay manera para que usted pueda realmente ir y acceder a ella. Así mismo con la programación en C, tiene que asegurarse de que usted está usando nuestra aparato porque la biblioteca ya está han incorporado en ella. Y luego, cuando hashtag #include, de la biblioteca allí. Sí. Buena pregunta. Cada uno bueno? Guay. Correcto. Así que vamos a golpear, en esencia, lo que es la primera función que que como programadores son va a utilizar dentro de nuestro código. Esto se llama la función printf (). Así, la función printf (), ya que no tengo ya se ha dicho en la última diapositiva, está incluido en el estándar de E / S, estándar de entrada / salida, biblioteca. Así que asegúrate de lo que sea que estés using-- oh, déjame agarrar el láser pointer-- cada vez que usted está utilizando la función printf (), usted tiene que incluir el estándar de E / S biblioteca o bien, cuando se compila, usted va a obtener un error porque el equipo va a ser como, oh No sé donde printf () es, que no me estás diciendo donde printf () es. Bien printf () está incluido en el E / S estándar, por lo que cuando se utiliza printf (), asegúrese de tener que línea por encima de su código. Así, por ejemplo, printf () aquí es una función. Todo lo que hace es imprimir algo dentro de los paréntesis para el usuario. ¿Alguien quiere tomar una puñalada a lo que esta línea de código correcto aquí se va a imprimir? Por lo tanto, la respuesta está en la pantalla. Cualquier persona? VERDI: La parte inferior. ANDI Peng: Verdi, ¿por qué no te vas adelante y decir toda la declaración? VERDI: Hola, mi nombre es Andi, y tengo 20 años de edad. ANDI Peng: Ah, encantador. Así que en esta línea vamos a imprimir, Hola, mi nombre es Andi, y tengo 20 años de edad, que es de hecho una declaración verdadera. Sintaxis. Así par de cuestiones sintácticas que ustedes quiere asegurarse de que usted sabe. Citas. Las comillas dobles cuentan la equipo que todo el interior se va a imprimir. Todo dentro de la lata acaba de ser exactamente cómo escribe que, a excepción de comúnmente en el extremo, vamos a querer incluir un hash-- oh sorry-- un guión n. Así que un guión n. ¿Alguien quiere tomar una conjetura en lo que hace a nuestro código? Sí. ALTAVOZ 6: pone en una nueva línea. ANDI Peng: Exactamente. Así que todo esto hace es permitir que pase lo que pase después de esto, después de esta declaración, a imprimir a una nueva línea. Así que cuando usted está escribiendo su código que no tiene las cosas al azar tachuelas hasta el final que usted no quiere. Que todo se vuelve prolijamente impreso una línea y luego empezamos en la línea siguiente. ¿Alguien recuerda lo que punto y coma hace cuando estamos de codificación? Sí. ALTAVOZ 7: Declaración. ANDI Peng: Lo siento? ALTAVOZ 7: ¿Termina la declaración? ANDI Peng: Sí. Así que en C, o cualquier programación el lenguaje, el punto y coma denota el final de una línea de programación. Así por ejemplo, en Inglés utilizamos periodo decir, oh este es el final de una frase. En la programación, lo mismo, tenemos una punto y coma para indicar el final de una línea. Muchas veces, cuando estás empezando a programar, usted se da cuenta olvide añadir un punto y coma y luego intenta ejecutar su código y no funciona. Y usted es como, ¡Ah, no lo sé sé por qué, que debería estar trabajando. Es probable que usted probablemente ha olvidado un punto y coma o un soporte o algo en alguna parte. Entonces, eso es importante recordar. Guay. De acuerdo, a mano alzada, cómo muchas personas aquí tienen cada vez tomada AP Ciencias de la Computación o programado en Java antes, alguna vez? OK. Encantador. Eso no será aplicable entonces, pero en Java, tienen algo que se llama System.out.println que no existe en C. Así que en C, siempre que que desee agregar en las variables en todo lo que quieras imprimir, hay una sintaxis específica que vamos a utilizar. Eso se llama la placeholding-- esencialmente añadimos marcadores de posición en su lugar del número entero o la variable que queremos imprimir. Así como ustedes pueden ver que hemos incluido una nueva cabecera biblioteca archivo aquí. La biblioteca CS50. Y contenida dentro de esa biblioteca CS50 es una función común que va a utilizar en nuestro curso llamado getInt (). ¿Alguien quiere tomar una puñalada en lo getInt () posiblemente puede estar haciendo. AUDIENCIA: [inaudible] ANDI Peng: Lo siento. No se podía oír. Maddie, nadie. MADDIE: Oh, se le solicita por un entero. ANDI Peng: Exactamente. Así esta función, otro función que ya está sido escrito por alguien más que podemos pedir a ahora. Todo lo que es es pedir al usted, el usuario, para introducir lo que quieras como el código ejecuta y almacena whatever-- en este caso estamos getInt () - ing, lo que significa que estamos la obtención de un número entero. Y vamos a almacenar que en otro número entero que simplemente hemos hecho llamados edad. Eso tiene sentido para todo el mundo? Guay. Así que ahora que hemos almacenado este entero, que hemos nos impulsados ​​desde el usuario, en esta variable, tenemos creado de tipo int llamada edad, podemos seguir adelante y lugar esa función en nuestra printf (). Así que la sintaxis general de printf () es que donde quiera en su físico real línea que desea incluir ese número entero, usted hace ese símbolo ahí, el símbolo de porcentaje, con el tipo de variable que desee. Así que en este caso la edad es un número entero. Así que vamos a incluir % i porque es un número entero. Y luego después de su declaración, vas hacer coma y el nombre de la variable. Así que aquí, vamos a imprimir cabo, Hola, mi nombre es Andi, y estoy año en blanco de edad. Hashta-- o, sorry--, con lo que la edad de entrada I. Así que si yo fuera a la entrada 20 para mi getInt () aquí, sería imprimir exactamente lo mismo. Pero, si quería algo de entrada más, como tal vez 40 o 45, entonces usted vería que reflejaban en consecuencia en el código. Así que este es un ejemplo de algo en el cual imprime y se ve a usted como si se trata de la misma cosa, pero por debajo de la capucha de el equipo hay realmente cosas muy diferentes pasando. Guay. Correcto. ¿Y qué si queremos múltiples variables? Muy fácil. La misma cosa. También tenemos una nueva función aquí llamados GetString (), También se incluyen dentro de la biblioteca CS50, que lo único que hace es pedir al usuario para una cadena, que es sólo un conjunto de caracteres, así como una sentencia o como un nombre. Así que en este caso, tendríamos dos marcadores de posición% s para cuerda y% i por entero. Y vamos a seguir que por las dos variables que desea incluir en el orden en que aparecen en la sentencia. Así, por ejemplo, mi nombre es blanco, quiero un nombre allí, así que voy a tener el nombre primero. Y luego después, quiero edad, quiere tener segunda edad. Y así, si quería entrada, Hola, mi nombre es Andi, y tengo 20 años de edad. Si introduce Andi y 20, el exactamente lo mismo imprimiría; Sin embargo, ahora tenemos dos guardaron variables de nombre, así como int. Sí. ALTAVOZ 8: ¿Sería capaz de ejecutar si se cambiara Nombre y edad al final de eso? ANDI Peng: Sí. Eso es realmente buena pregunta. Así que cuento largo, no. Debido nombre y age-- lo tipo de variable es el nombre? ALTAVOZ 8: String. ANDI Peng: ¿Y qué tipo de variable es la edad? ALTAVOZ 8: Integer. ANDI Peng: Así que aquí tenemos un marcador de posición de cuerda y entero, ¿no? Así que si usted fuera a cambiar estos, el equipo no va a saber. Se va a comprobar si hay una cadena, y si intenta darle un int, que va a ser como espere Estoy confundido, que me dijo que debería ser asignación de memoria para un int. Y aquí, cuando que espera un número entero y le das un nombre y una cadena en lugar, sino que también va a ser muy confuso, no se ejecutará exactamente de la manera que lo necesite. Así que aquí, nombrando y la sintaxis es muy importante para el funcionamiento de código. Cada uno bueno? Sí. Maddie. MADDIE: Aquí, sé que hemos visto en ejemplos en clase, donde piden ¿cuál es tu edad, ¿cuál es su nombre. En este caso, sería eso que doesn't-- si fuéramos a ejecutar este código, no pediría eso? Pero lo haría sólo dos números de entrada y luego se iría así? ANDI Peng: Sí, exactamente. Así que si quería para que pantalla, por favor, introduzca su edad, usted puede agregar una función printf () que dice: Por favor introduzca su edad, sobre eso. Buena pregunta. Sí. ALTAVOZ 9: Entonces, ya sería incluido en getInt () [inaudible]. ANDI Peng: No, en realidad no lo es. Así que todo esto no es más que impulsa una pantalla vacía para que el usuario introduzca algo. Si usted lo quiere, si usted lo quiere para imprimir algo que le dice al usuario como, por favor déme su edad, entonces usted tendría que printf () que a ti mismo. Debido a que todo el mundo utiliza este función para diferentes cosas, usted podría estar almacenando la edad, usted podría estar almacenando dirección, usted podría estar almacenando números de teléfono. Y lo que es realmente hasta usos individuales de sus hombres ' por lo que quieres que diga. Sí. ALTAVOZ 10: Por lo tanto, sólo para aclarar, en donde hacer que introducir el nombre y la edad de manera que se muestra en lugar de% s? ANDI Peng: Al igual que en el usuario? ALTAVOZ 10: Sí, como la forma de hacer yo hacer it-- dónde pongo Andi, y donde puedo poner 20? ANDI Peng: Sí. Así que si usted fuera a realmente ejecutar este código, No estoy realmente ejecuta el código, esto es sólo aquí en este momento. Si tuviera que ejecutar el código, lo haría compilar el código, hacer que el archivo, ejecutar el código, y luego lo haría ser sólo dos plazas para mí a introducirla. Sí. Ustedes verán cuando juegas todo con el código usted mismo. Muy bien vamos a mover en la siguiente sección de lo vamos a estar cubriendo en la actualidad. Vamos a repasar lo sentencias condicionales son. Así que si ustedes recuerden y recordar de conferencia, sentencias condicionales, todo lo que son son un conjunto de instrucciones a la computadora en que si una determinada condición es verdadera, ejecutar el código dentro de esa condición. Así que en esencia Scratch-- el gran tema a partir de hoy es que ustedes tienen ya todo visto la lógica detrás de todo que estamos cubriendo. Y todo lo que estamos haciendo es traducir algo eso fue muy intuitivo en Scratch, y difícil de codificación que en la sintaxis que va a utilizar para la clase que es C. Así que, lógicamente, todo este bloque era es ese pedazo de código de allí. Sí. OK. También nos metemos en un if ... else declaración que es sólo una capa añadida de complejidad a la sentencia if donde el equipo echa un vistazo a esta y ve si esta condición se cumple, hacer lo de dentro de estos dos soportes, else-- tan poco como el valor predeterminado si no cumple con la condición-- hacer esto. Es como un tenedor en la carretera. Si está lloviendo fuera, puse en una chaqueta de lluvia, cosa nada otra cosa no me puse una chaqueta de lluvia. ¿Esa lógica tiene sentido para todo el mundo? Guay. Correcto. Así como un duro ejemplo de esto que veríamos en C es si yo quería crear un denominadas horas de tarea variables. Y si las horas de tarea es menos de cinco, digo vida es grande. Es maravilloso. Sin embargo, dicen que la lucha es real-- que es lo que todos en este Lunes por la tarde hasta Science Hill son probablemente haciendo bien ahora-- AUDIENCIA: [risas] ANDI Peng: Se forma en que que, gracias por eso. La forma en que podríamos codificar esto en C es si: asumamos ya tenemos una variable de tipo int llamado horas de tarea aquí. Si las horas de tarea está a menos de de cinco printf (), La vida es grande. Recuerde mantener / n, porque quieres una nueva línea después. Impresión Else, La lucha es real. ¿Todo el mundo entiende cómo Me pasó de este bloque en este bloque de código? Guay. Correcto. Así que ahora vamos a echar un vistazo a múltiples sentencias si en total. Así que vamos a asumir la propósito de este programa era que solicitar al usuario un grado. Nos pronta usando getInt () para una grado, y se introduce un valor, y desea mostrar qué tipo de calificación que obtuvieron. Así que si yo tuviera que diseñar un programa, significa típicamente en todos nuestros ojos, El 90-100 es un A, el 80-90 es una B, y así sucesivamente y así sucesivamente. ¿Qué problema hay con este pieza de código que no es haciendo lo que quiero que haga. Sí. ALTAVOZ 11: Tienen límites inferiores, pero que no tienen límites superiores. ANDI Peng: Exactamente. ¿Acaso todo el mundo escucha lo que dijo? No va a ser superior límites, pero no hay límites más bajos. Lo sentimos, revés, límites más bajos, no hay límites superiores. Así que le gustaría tomar una puñalada en el decir lo que se va a imprimir en esta pantalla si tuviera que ejecutar este código. ALTAVOZ 11: un error? ANDI Peng: un error? Gran conjetura, que no está bien. ¿Alguien tiene otra puñalada? Sí, Aaron. AARON: Si usted pone en algo más grande que 90, sería una muestra de todos los grados que tienes. Sería demostrar que tienes una A, tienes un B, tienes una C. ANDI Peng: Sí. Eso es exactamente correcto. Así que, eso sería maravilloso. Sin embargo, son mutuamente exclusivo, creo. Si tuviera que ejecutar este trozo de código. Y luego vamos a decir, yo introducido el grado del 95. Así que 95 ya está guardado en INT llama grado. Así C es un lenguaje que corre por arriba a abajo, así que va a siempre previo a fondo. Así que va a venir aquí, leer si grado es mayor que o igual a 90, printf () que obtuvo una A. Genial, tener un 95, eso es mayor que 90. Se va a imprimir, Tengo una A. Va echar un vistazo en este caso, se va dicen, bueno 95 también es mayor que 80, que va a imprimir también tiene un Got un signo de exclamación B, y así sucesivamente y así sucesivamente. Así como todos podemos ver, este es un error común que puede ocurrir cuando estamos escribir código a tener en cuenta. Cualquier persona, cualquier pregunta sobre por eso lo que estaba sucediendo? Excelente. OK. Entonces, ¿cómo podemos solucionar este problema, es, obviamente, la siguiente pregunta lógica. Bueno, tenemos estos hermosos cosas llamadas si otra persona si lo demás si else. Así se puede ver, si usted quiere para cambiar ese problema, quería hacer cada uno de los condiciones mutuamente excluyentes, deberá añadir una cosa ... if. Y estos de supuesto-- pensar en ellos como escaleras, o como peldaños en la ladder-- puede agregar ya que muchos de éstos como usted desear para tantas condiciones como desee. Así que aquí, si introduce grado para ser 95. Si el grado es mayor que 95, printf (), tengo una A. Grande. Se va a ver una cosa ... si y va a conocer, ¡Oh, no, Yo ya ejecutó la primera persona. Yo sé-- o la primera si: Sé que Yo no tengo que mirar a cualquiera de estos porque uno de ellos ya ha sido cierto. Así que va a ejecutar desde arriba hacia abajo. Tan pronto como el primero es cierto, entonces que va a pasar por alto todo lo demás de los demás ... IFS. ¿Tiene sentido? Así, de esta manera usted tiene diferentes niveles de comprobación y tan pronto como uno de ellos es falso, el resto son también, que ni siquiera comprobar. Guay. Correcto. Así que este es un ejemplo de una diferente tipo de sentencia condicional vemos con menos frecuencia, pero vamos a ver ellos y usamos. Y son a menudo más eficiente para ciertos casos. Así que tenemos lo que se llama una sentencia switch. Así que antes hemos cubierto lo que es una cosa declaración, un if ... else. Aquí, tenemos lo que son llamada sentencias switch. Así que cuando lo usamos interruptor declaraciones es la clave? Así, en una sentencia switch, se por lo general, por lo general, en realidad Sólo puede enteros de entrada para su variable que se esté examinando. Así que si yo quería comprobar para ver si un determinado number-- por ejemplo un grado, si me dieron un 90. Quiero que ver si eso es una A, B, o C. Yo podría tener un caso aquí. Sin embargo, el caso tiene a ser otro constante. Así que en este sentido, la sentencia switch sólo puede comprobar la igualdad de dos números. No comprueba para nada más. Así que eso es algo que es muy cuidado de cuando usted está utilizando esto. Así que aquí, si quería comprobar para ver si mi calificación de 90 es igual a 90 o 80 o 70 o 60, y luego de impresión el grado correspondiente, Me gustaría ser capaz de escribir que en una sentencia switch. Así que va a venir aquí, cheque es este número entero igual a esta constante? Si no, que va a saltar. Es igual a la constante dos, y así sucesivamente y así sucesivamente, hasta llegar a la omisión, si ninguno de ellos son iguales. Tan pronto como uno de ellos se establece para que sea igual, que va a hacer esto línea de código y descanso. Lo que significa que va a golpear ese correr, romper, y acaba de saltar por completo a la parte inferior del código. Así que en ese sentido el tipo de funciones como un si else if else if comunicado. Así que aquí está un hormigón ejemplo para ustedes. Así que vamos a suponer que yo quería crear una variable llamada años fundada. Y quiero pedir al usuario que introduzca el año en que su escuela fue fundada. Así que puede crear una sentencia switch aquí. Y vamos a decir, yo de entrada 1636. Este código aquí va a ver interruptor año fundó lo que equivale a 1636. Se va a ver el caso 1636, oh esos son iguales, printf () No debería estar en esa escuela en el norte? Porque se supone que no lo hacen ir aquí si van a Harvard, romper y pase a la final. Si yo fuera a la entrada de 1701, que Supongo que todos nosotros lo haría de entrada, sería omitir este caso, vamos a caso dos, que es de 1701, e imprimir Bienvenido a Yale! Romper, pase a la final. Cosa que usted probablemente está tomando este curso línea en el que caso-- impresionante bienvenida a Yale-- que va a ir a la impresión por defecto, Hola Internet! Y romper. Sí. ALTAVOZ 12: ¿Se puede utilizar otro en lugar de por defecto allí? ANDI Peng: No, porque el manera que toda esta función interruptor se construye, la sintaxis que necesitará utilizar mayúsculas caso por defecto. Es como el caso de los demás si, esta Es un solo caso caso por defecto. Sí. ALTAVOZ 13: Usted tal vez ya se dijo esto, pero puede tener más de dos casos? ANDI Peng: Sí, usted podría tener tantos casos como quieras. Piense en ello como al igual que añadiendo infinitamente sucesivamente. ALTAVOZ 14: Si conmutada 1.701 mil con 1636, en realidad no hacen un derecho diferencia? Es sólo va a ser la comprobación de ella. ANDI Peng: Esa es una muy buena pregunta. Y nos tocamos esto más adelante, pero sólo saben que es el interruptor declaración se infinitely-- es más eficiente de lo que y si else if porque opera utilizando un tipo diferente de la función que que permite, esencialmente, a poco saltar directamente a la caso de que necesite para estar en. Sí. ALTAVOZ 14: Cool. Gracias. ANDI Peng: Sí ALTAVOZ 14: Y no podía ver casos similares, y mayor que. ANDI Peng: No. Entonces, eso es lo que está limitando acerca de la sentencia switch es que tienes tener constantes sólo, sólo números enteros. Sí. OK. Así que esto es algo que usted chicos se encontrarán con menos frecuencia de, pero yo sólo quería introducirlo en el caso. Aquí tenemos lo que es llamado un operador ternario. Cuando en esencia, es como un if compila en una sola línea. Aquí, voy a ir a la siguiente línea, el página siguiente, porque es más fácil de ver. Así que todos hemos visto este derecho? Esto es bastante fácil de seguir. Si quisiera hacer una variable llamada de cuerda llamado s, si un cierto número Le doy es inferior a 100, me desee asignar baja a la cadena, más que quiero asignar alta. Esto aquí es hacer la misma cosa exacta esos ocho líneas de código están haciendo. Así que aquí quiero crear una cadena variable. Y esta es la condición que soy comprobar, si un número es menor que 100, a continuación, se asigna el valor de la baja, otra cosa asignar el valor de alta. Estas diapositivas estarán en línea, no se preocupe si ustedes no lo entiendo esto. Esto es sólo una manera más sencilla, una más forma eficaz de escribir código. OK. Así que ahora vamos a entrar en lo que, para la mayoría de la gente son como un muy, muy confuso cosa que pensar en un principio. La sección de bucle. Así que hoy, vamos a hablar alrededor de tres tipos de bucles. Vamos a comenzar con un tiempo bucle, entonces hablar de un do while, y luego hablar de los bucles. Así que, esencialmente, para los más estudiantes visuales por ahí, tenemos, en esencia, una gráfica descripción de lo que hace un bucle while. Así que en una programación, que comenzaría y entrar en el bucle en un momento determinado. Se comprueba una condición. Y si la condición es verdadera, se ejecuta el código dentro. Y usted se vuelve alrededor y comprobar. Si sigue siendo cierto que sigue corriendo este código vueltas y vueltas en un bucle. Sin embargo, el segundo que la condición se convierte en falsa, usted va a romper y poner fin al ciclo. Y esto es esencialmente el sintaxis que vas a usar. Mientras que una cierta condición es verdad a hacer esto, si no es cierto, que va a pasar a la final y seguir adelante con su programa. OK. ¿Alguien tiene un ejemplo en lo que puede potencialmente suceder si trato de ejecutar este trozo de código? Por cierto, eso es Scaz SAJ--, Andi, Jason-- vamos a firmar nuestros correos electrónicos, El amor, la SAJ. Esos somos nosotros. OK. Alguien tiene un ejemplo, o tienen una idea de lo que esto imprimir? Tipo de una pregunta con trampa. Así que aquí, recordar la condición estamos comprobando es para mientras cierto. Así, mientras que esto es cierto, es va a imprimir, me encanta SAJ! ¿Hay algún punto en el que nos habíamos cambiar esto a algo de otra manera? No, ¿verdad? Así que aquí, tenemos encontrado lo que probablemente va a estar molestando mucho sus programas, el bucle infinito. Usted encontrará que si ejecutar este trozo de código, que sólo va a mantener la impresión, me encanta SAJ! Si bien apreciamos el apoyo, no queremos que los ordenadores a chocar porque mantener la impresión Me encanta SAJ! Así que por favor, por favor, evitar el bucle infinito porque nunca va para evaluar en false y nunca vas dejar el bucle. Y usted va a ser aspirado siempre. Guay. OK. El segundo tipo de bucle hablaremos de hoy es el do while, do while. Y se llama un do while porque usted tiene un do y un tiempo. Así que esto es bastante similar a un tiempo lazo, pero un poco diferente. Aquí, vamos a hacer lo de dentro de este mientras que una cierta condición es verdadera. Así que si yo fuera C y el ordenador que estoy corriendo por este pedazo de código, Echo un vistazo en la parte superior. Voy a C, digo hacer esta cosa. Y entonces puedo comprobar, si bien esto Es cierto, tengo que repetirlo. Pero mientras que esto es falso, entonces me muevo hacia adelante y nunca vuelvo a ese bucle de nuevo. ¿Alguien puede tomar una puñalada a lo que la diferencia entre este bucle y la que se limitó a era prácticamente. Sí. ALTAVOZ 15: La condición viene después y no antes? ANDI Peng: Exactamente. Así que ella dijo que la condición viene después, no antes. En última instancia, la diferencia entre este y el bucle while es que sólo vamos a hacer lo de dentro de este, independientemente de si su condición es verdadero y, a continuación, comprobar el estado. Así que en este caso, usted es always-- de esta manera, siempre estás asegurándose lo que hay dentro se ejecuta al menos una vez antes de la comprobación para ver si desea que se ejecute de nuevo. Y aquí es un ejemplo cuando queremos usarlo. Así por ejemplo, si yo quería tener una variable de tipo int llamada edad, y quiero incitar el usuario para su edad, Yo voy a hacer printf () ¿Cual es tu edad? edad = getInt (), que es preguntar al usuario. Y algunas personas va a ser muy molesto. Y usted no quiere errores en su programa de alguien ingresar como, oh Estoy negativo 4 años de edad o lo que sea. En cuyo caso, si hacer eso, esto se evalúa true, lo que significa que voy a tienes que mantener volver y hacer esto. Así que esto va a seguir re-preguntar al usuario para darte como un verdadero número de años de edad y es va a seguir adelante hacia atrás y rehacer hasta que te dan una verdadera edad mayor que uno, o no cero. Así pista, pista. Esto va a ser muy, muy útil para uno de sus problemas PSet. Sí. ALTAVOZ 16: ¡Vaya, lo siento. ANDI Peng: Sí. ALTAVOZ 16: ¿Hay, no para ser un imbécil, pero- ANDI Peng: No se preocupe. ALTAVOZ 16: --¿Hay diferentes reglas aquí, ¿O simplemente se olvida para poner la cita? ANDI Peng: Oh Yeah. Lo sentimos, pero eso es totalmente mi mal. Eso fue sin duda supone que es una cita. Buena atrapada. Eso no ha ejecutado. OK. Así que el último tipo de bucle hablaremos sobre y, en última instancia, la clase de los más complejo es el bucle for. No se preocupe si usted no lo hace saben lo que eso significa. Es bastante confuso al principio. Vamos a repasar un ejemplo. Todo lo que sucede en un bucle for es que tiene tres estados que se va a incluir. Así que para una cosa determinada, eres va a inicializar una variable. Vas a agregar a la condición de que este bucle seguirá funcionando. Y luego, al final de la lazo, usted va a actualizarlo. Puede actualizar la variable que desea seguir la pista. Así que normalmente utilizamos para los bucles para cuando que desee ejecutar un bucle para un cierta cantidad de veces y ya sabemos, Oh quiero este bucle se ejecute como 10 veces, entonces usted hacer-- voy a ir más un ejemplo de la página siguiente. Así que aquí, por ejemplo, en Scratch, si quería algo que repetir 10 veces, todo lo que tenía que decir era, repita 10 veces I love SAJ! que es una más aceptable muestra de apoyo para nosotros en lugar de la bucle infinito. En este caso, la forma en que lo haría transición a C y de escritura es decir, para int-- Voy a crear o declarar una variable de tipo int llamado i. Voy a inicializar a 0, por lo que i = 0; y esto va a ser mi condición. Así que i es menor que 10. Y luego en el end-- la última declaración que eres va a tener es la actualización de lo que ocurre con la variable de i al final de su ciclo for. Así que es un poco confuso, ya que diferentes partes de esta línea están sucediendo en diferentes tipos de bucle. Pero voy a ir a través de una pseudocódigo de ejemplo que y tal vez explicar esta sólo un poco mejor. Así que aquí. Ese es el lazo que acabamos de ver. Esencialmente en pseudocódigo, lo que está sucediendo en este programa, es primero que estoy creando i, inicializar a 0. Estoy comprobando si i es menos de 10, en cuyo caso la primera vez que es porque 0 es menor que 10. Así, el bucle se va a ejecutar. Y luego voy a imprimir esta línea. Y luego, al final de esta línea, a la derecha aquí, yo voy a hacer la subasta i, i ++, todo lo que significa es incrementándolo por uno. Así que ahora es 1. Debido a que una vez fue 0, si incrementa es, ahora es 1. Y luego voy a volver al principio del bucle y puedo comprobar el estado. Es la condición sigue siendo cierto? Sí, 1 sigue siendo inferior a 10. Así que va a imprimir de nuevo, ir y luego incrementar i, y se les la condición de forma continua, de forma continua, hasta que finalmente consigue hasta el punto donde i es 10. Usted va a imprimir esto 10 veces y luego me va a ser igual a 10. Vas a comprobar el estado. Es 10 menos de 10? No, eso es falso. Por lo tanto, este bucle no va correr, se va a romper, y usted va a continuar con su código. Así como ustedes pueden ver, este Es realmente un gran ejemplo de un bucle se puede programar en ese tiene una duración de una determinada cantidad de veces. Todo el claro? Sí. ALTAVOZ 17: ¿Qué hay de la subasta exponencialmente, se diferencia de codificación? ANDI Peng: Usted can-- iremos sobre esto en la siguiente diapositiva. Buena pregunta. Es anyone-- antes de pasar en-- nadie en absoluto confusa, porque se trata de un concepto muy difícil. No se preocupe, si you're-- Aceptar. Guay. Correcto. Sólo una diapositiva general. Este bucle mientras está haciendo la exactamente lo mismo el bucle for era. Es sólo escrito de manera diferente. Ustedes pueden leer detenidamente las diapositivas a su conveniencia más tarde. Pero sólo sé que hay múltiples maneras de escribir lo mismo a pasar con diferentes bucles. OK. Así que, ahora nos metemos en la cuestión de qué si tenemos un bucle dentro de un bucle. Estamos recibiendo en bienes Tipo de Inception cosas aquí. Cuando usted quiere hacer cosas múltiple veces dentro de otras cosas que hacer las cosas varias veces, querer lo que se llama un anidado de bucle. Para aquellos de ustedes que primero ver esto y conseguir muy confuso, todo lo que estamos haciendo aquí está teniendo un bucle donde tenemos una variable de fila. Pero dentro de ella, también tenemos otra para el bucle de una columna variable llamada. Y le recomiendo a todos ustedes que se confunden para mantener primero track-- dibujar esto, dibuje esto. No trate de justa razón a través de él, lo alcanzará. En tu cabeza, en este pedazo de papel, o lo que sea, la fila de escritura, no perder de vista lo que la fila es igual. Escribe la columna, hacer un seguimiento de lo que la columna es igual a. Y no perder de vista lo que es imprimir con cada iteración. Cada iteración de este bucle, cada iteración del lazo más grande que, sólo seguir siguiendo la lógica. Y te garantizo que, te encantará lo que ves, porque también es muy aplicable para sus boletines de problemas. Guay. Correcto. Así que lo más importante que ustedes son probablemente todos pensando en este momento, son su problema Establezca 1s, que se deben Jueves / Viernes. En su programa water.c, Sugerencia vas a tener para pedir al usuario para una entrada. Dentro de su programa de mario.c vas a tener para utilizar un bucle anidado para, que es un bucle dentro de un bucle for, para imprimir un bloque de pirámide, en esencia como lo que Mario tiene que saltar a través. Y luego dentro de su greedy-- o tal vez Hacer realidad el cambio, si alguno de ustedes alguna vez ha oído hablar de eso-- usted va a tener que ser muy cuidado de los primeros valores de coma flotante. Recuerde decimales flotantes y enteros no son la misma cosa. Lleve un registro de cuál es cuál. Y usted va a utilizar sentencias condicionales, también. Muy bien, lo último. Tengo un par de minutos para el final. Estilo. Así que esto es algo que no se hace en realidad efectuar la eficiencia, o el funcionamiento real de su código. Sin embargo, nos afecta como su grado, como sus lectores. Afecta a ti mismo, si eres tratando de encontrar un problema. Afecta la legibilidad del código. Así estilo, como cuando usted está tratando de el estilo de un ensayo para Inglés, si usted no tuvo párrafos, que tiene todo tipo del involucró juntos en una línea, hace que sea muy difícil para cualquiera para leer su ensayo, incluso si sus puntos son lógicamente sonido. Lo mismo en la programación. Usted puede tener horriblemente oscura código que Scaz cubrirá, y todavía puede correr y función. Pero para nosotros, como sus preciosas TA, la OMS estar leyendo y evaluando sus conjuntos de procesadores, eso no es muy agradable. Así que por favor, por el bien de nosotros y usted mismo, cuando usted está tratando de arreglar un problema en su código, y que está tratando de leer su propio código, que asegúrese de seguir algunas convenciones que vamos a repasar. Así que en primer lugar. Dé a sus variables de nombres significativos. Si desea almacenar un número entero llamada edad, por favor nombrarlo edad. No nombrarlo altura. Cuando usted está tratando de almacenar una edad en la altura, hace que todo muy confuso para nosotros. No nos gusta ser confundido. ¿No le gusta ser confundido. A nadie le gusta ser confundido. Si usted va a crear algo, nombrarlo algo significativo. Sin embargo, en bucle, sola las variables de carácter son generalmente muy bien. Y en bucle, si quieres simplemente i, y j, k, no dude en hacer eso. Inicialización consistente. ¿Entonces que significa eso? Eso significa técnicamente, teóricamente, puede iniciar y crear múltiples variables en la misma línea. Así, por ejemplo, puedo crear un entero llamado scaz_age, y entero llamado andi_age = 20, y un entero llamado jason_age en la misma línea. Y también puedo asignar sólo uno de ellos y no a los otros a los valores. Les pedimos que por favor no hagas eso. Porque aquí se ha creado esencialmente tres variables, pero sólo uno de ellos en realidad tiene un valor. Y luego, cuando estamos tratando de leer su código, o si usted está tratando de arreglar un problema en su código, es muy confuso para seguir. Así que para su legibilidad, por nuestra lectura, no hagas eso. Llaves consistente. Algunas personas les gusta poner su llaves en diferentes lugares. En realidad no importa. Sólo asegúrese de que usted es coherente en su propio código de dónde te gusta ponerlos. Espaciado consistente. Si pones un espacio después de un bucle, siempre hacer eso. No se limite a recibir clase de hacerlo en algunos lugares, no lo hacen en otros. Apenas sea consistente. En segundo lugar, si alguien quisiera para examinar la Guía de Estilo CS50, que oficialmente tenemos una guía de estilo que que todas estas convenciones dice, y más. Está en línea. Es como cs50.net/style o algo asi. Puede google. La consistencia es la clave. Así que no te lo otras personas están haciendo, sólo asegúrese de que usted es consistente dentro de su propio código. ¿Alguien tiene alguna pregunta acerca de eso? Sí. ALTAVOZ 18: Así que la cosa correcta que ver con la inicialización es sólo todos ellos tienen en una separada línea, es que lo que estás diciendo? ANDI Peng: Así que rara vez he suceder esto. Pero si usted quiere, si querías ser como el ahorro de espacio en su código, o lo que sea, usted puede hacer esto. Les pedimos que simplemente no inicializar una cosa y no a los demás. Así que si usted quiere hacer int scaz_age, int andi_age, int jason_age, eso está bien. Eso sí, no inicializar un solo y no a los demás es todo. ¿Preguntas? Correcto. Voy a pasar por el micrófono, y el puntero láser, y el testigo a Scaz en este punto. Esto es incómodo. Aquí está. BRIAN Scassellati: Gracias. ¿Cómo es eso de sonido? El sonido es bueno? . Excelente. OK. Así, hola a todos. Voy a tratar de trabajar a través de un ejemplo práctico con usted. Y vamos a utilizar CS50 de entorno de desarrollo, lo que se llama el entorno de desarrollo integrado. Y ya has visto esta demostrado en la conferencia. Y en el problema Set 1, eres va a tener una oportunidad para usarlo, y jugar con , y acostumbrarse a ella, porque vamos a utilizarlo por el resto del semestre. Así que en este IDE, usted tiene lo que parece como un explorador de archivos muy tradicional Más en un lado. Usted tiene una porción de hasta superior a dónde va para ver su código fuente, su CFile, el código que usted escribe. Y abajo abajo, podrás tener una ventana de terminal que se va a utilizar para tanto compilar su programa y para ejecutar o ejecutar su programa. OK. Así que para darnos un poco de fundación, en esa ventana de terminal, usted va a ser utilizando un conjunto de comandos que son comandos estándar en todo la mayoría de los sistemas Unix o Linux. Y por lo que si usted ha utilizado alguna vez cualquier forma de Unix, Ubuntu, o cualquiera de los otros sabores, estos van a parecer familiar. Si usted no tiene, no se preocupe. No hay nada complicado sobre ellos. Sólo están usando una diferente sintaxis, una denominación diferente convenciones de lo que he visto antes. Así que hacer una lista de los archivos dentro de un directorio en particular, que van a utilizar un comando llama ls, o lista. Si quieres ver todo con todos los detalles, vamos a usar un comando argumento de la línea con ls -l. Y que te muestro todo en más detalle, incluyendo los permisos para un archivo. Para cambiar de directorio, vamos a usar el comando cd. Y podrás cambiar de directorio tanto para ir a su directorio personal. Eso es todo por cd sí, cd con de dos puntos volverán ustedes a uno nivel a su directorio anterior. Y que también puedes cd a un subdirectorio tecleando cd y el nombre de ese subdirectorio. También puede crear nuevos directorios. Y vamos a caminar a través de este en tan sólo unos minutos. Pero sólo para poner todo en la pantalla. Para que usted pueda verlos. Usted también tiene la capacidad para manipular archivos directamente desde la línea de comandos. Podrás copiarlos, a moverlos, o para eliminarlos, es decir, de manera efectiva, para eliminarlos. El IDE CS50 le da el pleno poder de los argumentos de línea de comandos. Y eso significa que también puedes hacer cosas muy peligrosas. OK. Por ejemplo, usted puede eliminar, o que es borrado, un archivo sin preguntar para una confirmación. E incluso se puede eliminar recursively-- eso es el tablero r flag-- toda una subdirectorio y todo su contenido. OK. Están listadas en rojo porque debe pensar "Peligro" cada vez ves esas cosas. OK. Correcto. Ahora, por fin, las cosas que son va a ser muy valioso para usted, hay algunos buenos trucos saber lo que estás navegando a través de esta ventana de terminal. En primer lugar, se puede borrar la pantalla en cualquier momento con solo teclear en claro. Y vas a ver me hago muy a menudo. También se puede simplemente mostrar el texto de un archivo escribiendo más y luego el nombre del archivo. A continuación, será capaz de desplazarse hacia atrás y sucesivamente con ese justo con la barra espaciadora y las teclas de flecha. Si usted tiene, como hemos hecho hoy en la conferencia, un programa que se ejecuta de forma continua en bucle infinito, que puede detener ese programa de ejecutar escribiendo en control, que es la celebración de la tecla Control-C. Y es posible que tenga que hacer esto varias veces. El equipo se pone muy por delante de ti. Y a veces es necesario darle un par de intentos antes de que en realidad vienen a través. También será capaz de ordenar a través de los comandos que acaba de escribir usando la tecla de arriba, clave flecha, y luego la tecla de flecha hacia abajo. Y lo que es más útil es su lugar de escribir los nombres de archivo largos, podrás a la pestaña uso autocompletar algunas instrucciones. Ahora vamos a demostrar todos los que en tan sólo un segundo. Así que si usted no recuerda ellos, no se preocupe. Estas son cosas que usted va a recoger y utilizar a medida que avanzamos. OK. Así que en C-- diferencia de Scratch-- C es un lenguaje compilado. Eso significa que vamos a tener una fuente file-- ese es el texto que se escribe, los comandos que usted escribe, la printf () declaraciones, los lazos, todo else-- y vamos tomar ese archivo y entregarlo fuera a un programa llamado el compilador. El compilador tomará que el texto que has escrito y traducirlo en las instrucciones binarias de que su equipo es en realidad va usar. Eso se llama el objeto o el archivo ejecutable. Si nos fijamos en este archivo, vas para ver el código que has escrito. Si nos fijamos en este archivo, vas para ver una secuencia aleatoria de caracteres que no tienen sentido alguno. Eso es porque este es el binario. No es la intención para que usted pueda estar leyendo. Sin embargo, cada vez que quieren ejecutar algo, lo que vas que se ejecuta es el archivo objeto. Así que cuando trabajamos con ellos archivos, vamos a escribir un archivo en C. Entonces vamos a compilarlo, utilizando un comando como marca que invocará el estruendo compilador para el lenguaje C. Y eso va a producir un objeto presentar, como una salida, o en este caso, el nombre, mi archivo, que yo he puesto en. Correcto. Así que vamos a tratar en realidad esto. Así que se me ocurrió un ejemplo de lo que quería probar. Y una de las cosas que me fascina es la animación. Así que vamos a tratar de hacer un poco de animación utilizando sólo caracteres ASCII. Caracteres que se pueden imprimir fácilmente ahora. Así que aquí es mi mejor intento a crear para usted la animación de un conejito corriendo a través de la hierba alta. Ahí está. OK. Así que no está funcionando todavía, pero es de pie en la hierba alta. Ahora bien, si yo fuera un animador, en la vieja escuela versión de la animación, lo que haría es yo produzco una imagen de este conejito en la hierba. Y entonces me gustaría producir otra foto-- otra lo que llamaron cell-- que había movido el conejo sólo ligeramente. Y luego un tercero que tenía el conejito se acercó un poco más lejos. Y me gustaría producir un todo secuencia de estas células. Algunos, donde el conejo ha terminado en el lado izquierdo. Y luego se mueve lentamente, uno por uno hacia el medio. Y a continuación, desde la mitad más a la derecha. Y si yo fuera entonces, realmente suerte, pude armarlo y podría animarlos. Y ahí está mi conejito corriendo a través de la hierba. Esa es mi gran PowerPoint truco para el día. OK. Así que esto es tan bueno como se pone. OK. Así pues, aquí una vez más, aquí está nuestra conejito corriendo por la hierba. ALTAVOZ 19: Una vez más. BRIAN Scassellati: Uno más tiempo, de acuerdo. Ahí está su conejito. OK. Así que hoy lo que vamos que hacer es que vamos para tratar de automatizar el proceso de de producir estas células. No vamos bastante llegar al punto de ser capaz de poner a todos juntos. Pero, vamos a tratar de automatizar el proceso de generación de esta secuencia. Y esto es mucho de lo que animación de hoy es como. Es decir, usted no hace las cosas necesariamente dibujando todo a mano. Nosotros usamos una computadora para automatizar partes de ese proceso. OK. Así que permítanme conmutar ahora a nuestro IDE CS50. Y he creado para nosotros-- y dejar Me zoom en un poquito bit-- tengo creado para nosotros un punto de partida. Cada vez que les pedimos que sentarse y escribir una pieza de código, lo que realmente estamos pidiendo que hagas es que estamos pidiendo para resolver un problema. Y la forma en que usted debe pensar en hacer que es comenzando con algunos simple parte de esa solución. Y luego construir a partir de esa parte. Y eso es lo que vamos a hacer hoy. Así que en lugar de tratar a la vez que escribir todo el montón de código que es va a producir los 10 células de animación, vamos a empezar lugar con una pieza que funciona. Y luego vamos a construir un poco en torno a ese y un poco más y un poco más. Ahora lo bueno de solución de los problemas de esta manera es que le permitirá empezar siempre con algo que usted sabe obras e introducir un cambio gradual. Y eso es una gran manera para aprender a codificar, ya que cada vez que realice una cambio, nos vemos el impacto que tiene. OK. Así que aquí está nuestro punto de partida. OK. Así que al principio de mi archivo, Tengo stdio.h #include hash. Eso es lo que puedo conseguir el printf () para trabajar. Entonces tengo mi función principal. Y esto todavía se ve un poco arcana u oscuro para algunos de ustedes. Eso está bien. Lo único que dice es que la función principal toma medios sin arguments-- void nada en C. Y regresa por convención un entero. Principal siempre devuelve un entero, por lo general un código diciendo cosas ha ido bien o no fue así. OK. Pero principal tiene que tener que formar para nosotros en este momento. Entonces me he puesto en tres líneas de código. Y junto a cada línea de código, he puesto un comentario. Ahora una de las cosas que vamos a insistir en que lo hace, y es como un importante práctica de programación, es para comentar siempre su código. Siempre anote en un Inglés comentario algo que cree que la Se supone código para hacerlo. De esa manera, más adelante, cuando vuelves a él, usted puede verlo y se puede decir, oh, me acuerdo de lo que era tratando de hacer con esto. O cuando un TA se sienta con usted para tratar de ayudarle en horas de oficina, pueden ver esto y se van, yo ver lo que estaba tratando de hacer, pero en lugar de esto es lo que realmente está sucediendo. OK. Así que tengo tres partes en mi código, Voy a primer lugar de impresión algunos puntos en el inicio. Entonces voy a imprimir mi conejito muy elegante. Y a continuación, algunos poco de puntos al final. Y estas tres sentencias print debe familiar a usted en este momento. Todo lo que estoy haciendo en la cada uno de ellos es que soy imprimir una secuencia de caracteres. No hay variables que intervienen. Todo es simple y llanamente. OK. Así que si voy por ahora a mi terminal-- vamos a ver si puedo conseguir esta vuelta fuera-- y yo voy a escribir clara de nuevo. ALTAVOZ 20: ¿Usamos el doble barra comentar? BRIAN Scassellati: ¿Puede utilizar el sí double--. Hay múltiples formas de dejar comentarios en C. Uno forma es utilizar la doble barra. La otra es utilizar una barra y una estrella y luego cerrar con una estrella y una barra. Correcto. En primer lugar, voy a empezar a navegar por aquí. Así que si me voy a mi directorio personal, He cambiado directorios allí, Voy a mirar y ver lo que hay en ese directorio, ls, listar a cabo. Voy a ver que tengo tiene dos subdirectorios. Vamos a hacer de este un poco más grande aquí para que todos podamos verlo. Veo que tengo tiene dos subdirectorios. Voy a cambiar de directorio para entrar en área de trabajo. Y yo voy a escribir sólo por parte de ella, y luego simplemente pulse Tab. Y que va a completar el resto para mí. Lujoso. Voy a mirar y veo en área de trabajo. Y ahora mismo, estoy trabajando en la supersección que estamos enseñando ahora. Así que voy a entrar en ese directorio. Y, por último, mirar y ver. Y tengo ese archivo bunny.c. Está bien así que me deja claro una vez más. Y yo voy a ahora-- nuevo Estoy aún permaneciendo en ese directorio y me dice que estoy en ese directorio supersección. Voy a seguir adelante y hacer mi conejito programa. Y ese comando, haga conejito, mientras que suena un poco raro, También invoca el compilador sonido metálico. Y ha producido para me una salida que es un funny-- un ejecutable archivo ejecutable llamado conejito. OK. Puedo entonces, y esto suena peor aún, ejecutar conejito. OK. Y vamos a ver lo que hace. OK. Eso es un poco de lo que me esperaba. Tengo mi imagen del conejito de ahí, pero yo como que quería todo por sí mismo. ¿Qué me perdí? ALTAVOZ 21: Raya vertical l ó n slash. BRIAN Scassellati: N Slash. OK. Así que vamos a volver aquí. Y voy a salir de eso. Y voy a ir de nuevo en éste. Y vamos a echar un vistazo ahora desde mi función principal aquí. ¿Entonces, qué debería hacer? Quiero terminar la línea. Así que voy a poner en un comentario. Voy a poner en un printf (). Y ¿qué es lo que tengo que poner? / n. OK. ¿Qué tengo que terminar con? Punto y coma. Correcto. Ahora, uno de los de verdad cosas importantes es asegurarse de cada vez que haga un cambio en el código, que lo guarde. Si no ha guardado el código, que eres va a notar una pequeña estrella allá arriba. Y esa estrella que dice no han ahorrado este código. Si compilo ahora mismo, no es va a reflejar cualquiera de esos cambios, porque el compilador analiza el archivo eso es en el disco, no el archivo que es abrirá en su editor. Correcto. Así que vamos a guardarlo y luego vamos a ir justo aquí abajo, volver a salir. Ven a mi terminal. Y vamos a aclarar el espacio de nuevo. Y podemos seguir adelante y una más tiempo a que nuestro programa de conejito. Y ejecutar el conejito. Eso no funcionó tampoco. Slash incorrecto. Así que si nos fijamos en lo que tengo, me pongo un / n en allí, pero tuve la barra mal. Todo lo que el equipo hace es muy explícito. ¿De acuerdo? Un pequeño error de puntuacion, y de repente usted no consigue lo que quiere. Correcto. Así que vamos a acercar a salir de nuevo. Volveremos. Bien hacer que la reparación muy rápido. Vamos a poner la barra derecha. Vamos a salvarla. Tendremos amplía la imagen. Por alguna razón, eso no es ser feliz, pero vamos a seguir adelante y vamos a volver a la terminal de aquí. Aclararlo. Nos acercamos. Y una vez más, vamos a hacer conejito. Y ahora, efectivamente, funciona. Hooray. OK. Así que vamos a tratar de hacer de este un poco más general. Vamos a ver si en vez de sólo imprimir un fotograma concreto, vamos a ver si podemos hacer que esta para que podamos obtener todos 10 de esos marcos animados que queríamos tener. Así que de nuevo, vamos a tomar un paso a la vez. Primero vamos a generalizar, no por lo que hago todos los marcos, pero también lo hago cualquiera marco que puede ser que quiera. Entonces, ¿cuál es la diferencia entre los marcos? ¿Es el conejo de la misma? AUDIENCIA: Sí. BRIAN Scassellati: Sí. ¿Cual es la diferencia? AUDIENCIA: Posición. BRIAN Scassellati: Su posición, ¿no? Y ¿Cómo puedo controlar su posición? ¿Cuántos puntos estoy poniendo al principio y el número de puntos que soy poniendo al final. Así que tuve cinco en el principio y al final de cinco. Vamos a sustituir a la cinco con un bucle for. OK. Y yo voy a crear una para lazo, ahora que va a decir, Voy a imprimir un número de puntos al principio. Voy a utilizar una variable. Digamos, ¿qué tal i como el contador en mi lazo. Y yo voy a declararlo encima de la tapa. Y luego, en el bucle for Tengo que hacer tres cosas. Lo primero que tengo que hacer es lo que necesito para inicializar i. ¿Qué debo inicializar que comience a ser? 0. OK. Entonces tengo que decir, lo que es la condición de terminación? ¿Cuándo debo parar? Bueno cuántos puntos tiene usted que desee imprimir en este caso? AUDIENCIA: Cinco. BRIAN Scassellati: Cinco de nuevo? ¿Qué tal vamos a hacer algo diferente, hicimos cinco. Vamos a mostrar que es diferente. ALTAVOZ 22: Dos. BRIAN Scassellati: Dos. OK. Así que si quiero dos puntos, ¿qué debo poner aquí? AUDIENCIA: Tres. BRIAN Scassellati: Tres. OK. ¿Cuántas veces es que va a pasar? Eso va a pasar por tres veces, 0, 1 y 2, derecha? Muy bien, volvamos a dos. Ahora vamos a llegar dos puntos. ¿Y qué es lo que quiero hacer cada vez que voy por el lazo? Lo que tiene que cambiar cada vez que voy a través de? ALTAVOZ 23: Añadir un punto. BRIAN Scassellati: Tengo que seguir adelante. Voy a añadir un punto. Voy a imprimir un punto, cada vez que a través del bucle. Pero ¿cómo voy hacer el seguimiento de cómo muchas veces he estado a través del bucle? Estoy usando i, que variables, ese contador. Así que a través de todo el tiempo, me voy para incrementar el contador en uno. Ahora, eso es lo mismo para mí como diciendo i = i + 1. Eso está bien. Podría hacerlo que-- Me gusta el taquigrafía, así que voy a decir i ++. OK. Vamos a hacer lo mismo aquí abajo en la parte inferior. Sólo Yo como que hice eso. Voy a dejar que ustedes hacer éste por completo. Correcto. Entonces, ¿qué debo escribir aquí? Aquí está mi bucle for. Yo voy a hacer un printf () y me voy para hacerlo de modo que sólo se imprime un punto en esa parte inferior. ¿Qué debo escribir dentro de este bucle for ahora? Bueno, en primer lugar lo que variables que debo utilizar? ALTAVOZ 24: j. BRIAN Scassellati: Me vendría bien j. ¿Puedo utilizar el mismo? ¿Puedo usar i de nuevo? Sí. Eso está bien, porque el Is que estoy usando aquí, Yo no los necesito de nuevo cuando Me pongo a este punto. Entonces, ¿qué debería inicializar i para? ALTAVOZ 25: 10. BRIAN Scassellati: 0. ¿Qué debo comprobar? ¿Cuántos puntos ¿necesito ahora al final si yo tengo dos puntos al principio? Necesito de ocho al final, así que lo que debería comprobar, i inferior a: AUDIENCIA: Siete, ocho, nueve. BRIAN Scassellati: Escuché siete. Oí ocho. Y oí nueve. OK. Así que todos estamos en el derecho ball-- Jason dice 10. OK. Si necesitaba dos puntos para el primero, cuántos hacer Yo-- y necesito ocho puntos para el última uno-- puse dos arriba, ¿qué debo poner abajo? AUDIENCIA: Ocho. BRIAN Scassellati: Ocho. Debido a que va a contar de cero a siete. Y eso es ocho veces a través del bucle. OK. Y ¿qué es lo que tengo que hacer al final? AUDIENCIA: i ++. BRIAN Scassellati: i ++. Correcto. Así que eso está bastante bien allí. Vamos a intentarlo y vamos a ver lo que hace. OK. Así que vamos a guardarlo. Niza y salvos. Nos acercamos a salir. Vamos a tratar aquí en la terminal. Nos acercamos. Vaya. Nos va a hacer, una vez más, hacer nuestro programa de conejito. Y seguir adelante y ejecutar conejito. Y ahí está. Así que nuestro conejito. Cuando tiene dos puntos en el inicio y ocho puntos al final. Todo el mundo sigue conmigo? OK. Así que hemos construido para arriba. Construimos un solo conejito, un cuadro en particular. Ahora que hemos sido capaces de generalizar que para construir más, diferentes tipos de marcos. Ahora vamos a seguir adelante, y tienen que genera no sólo un marco, pero vamos a generar 10 marcos, donde poco a poco hacen que el conejito se mueve todo el camino a través del campo. Correcto. Volvamos. Y vamos a tratar ahora. Entonces, ¿qué es lo que realmente necesito cambiar aquí? ¿Qué tengo que cambiar? ALTAVOZ 26: Primero tiene que cambiar el número máximo de puntos al principio. Porque si estamos haciendo 10 puntos, que va a necesitar hasta escalar. BRIAN Scassellati: Sí. Así que ahora tengo que tipo de cableado hacer siempre dos puntos al comienzo y siempre hacer ocho puntos al final. Quiero construir otro bucle, ¿verdad? Porque no quiero construir una sola imagen del conejito, Quiero construir 10 fotos de conejo. Así que necesito para construir otro bucle, y como voy a través de ese lazo, Quiero cambiar el número de puntos que se imprimen al principio y cuántos puntos puedo imprimir al final, basado en qué ciclo a través del bucle Estoy dentro. Correcto. Así que vamos a otro contador. Alguien dijo antes de j, así que vamos a hacer otra j. Y ahora, vamos a construir otro bucle for. Lo que va dentro de ese bucle? Este material tiene que ir dentro del bucle, ¿verdad? ¿El conejito tiene ir dentro del bucle? ¿Necesito un conejito en cada uno de los 10 cuadros? AUDIENCIA: Uh-huh. BRIAN Scassellati: Sí. Quiero un conejo en cada de los 10 cuadros, ¿verdad? ¿Qué hay de los puntos de Al final, qué necesito eso? OK. Así que voy a sangrar todos ellos. Voy a destacar todos esto, y voy a golpear Tab. Y eso va a empujar todo un poco, por lo que es fácil para mí a ver lo que hay en el circuito. Y luego voy a terminar la misma. Digamos que. ¿De acuerdo? Ahora, en este bucle que Estoy building-- gritos, hacer que por lo que puede ver-- Tengo mi contador j. Voy empecé a 0. ¿Cuántas veces lo que quiero ir a través de este circuito? AUDIENCIA: 10 veces. BRIAN Scassellati: 10 veces. Entonces, ¿qué número debo poner aquí? AUDIENCIA: 9, 10. BRIAN Scassellati: 9, 10, alguien tiene que decir 11, ¿no? Quería dos puntos antes y poner i menos de 2. Quería ocho puntos, Puse i menos de 8. Ahora quiero ir a través de 10 veces, así que pusieron j inferior a: AUDIENCIA: 10. BRIAN Scassellati: 10. Allá vamos. Y ¿qué debo hacer al final de j? ++, Incrementarlo. OK. Ahora, aquí está la parte difícil, lo que es va a pasar ahora si hago esto? ¿Voy a imprimir 10 cuadros? ALTAVOZ 27: Creo todos ellos van a ser los mismos. BRIAN Scassellati: Ellos todo sea lo mismo, ¿no? Debido a que todos ellos están todavía va poner dos puntos al principio. Pero no quiero que todos ellos tener dos puntos al principio. ¿Cuántos puntos hacer yo quiere al principio? AUDIENCIA: Cambio. BRIAN Scassellati: I queremos que cambie, ¿verdad? Entonces, ¿qué tengo yo aquí que está cambiando cada vez que el bucle pasa por? AUDIENCIA: Número de puntos, j. BRIAN Scassellati: j, el número de puntos. Así que puedo cambiar esto a ser j. La primera vez a través de la lazo, ¿qué es eso va a ser? ¿Qué puedo configurar j para en un principio? AUDIENCIA: 0. BRIAN Scassellati: Entonces, ¿cuántos veces voy a hacer esto? 0. La segunda vez a través del bucle, j de va a ser 1 porque incrementarlo. ¿Cuántos puntos voy a imprimir? 1. La tercera vez a través del bucle, cuántos puntos voy a imprimir? AUDIENCIA: Tres. BRIAN Scassellati: j va a ser 3. ¿Cuántos puntos voy a imprimir? Oh, lo siento, j Va a ser 2. ¿Cuántos puntos voy a imprimir? AUDIENCIA: 2. BRIAN Scassellati: 2. OK, así que voy a seguir incremento que a medida que avanzamos. ¿Qué hay de abajo? ¿Qué pasa aquí? No quiero 8 siempre en el extremo más? ALTAVOZ 28: 10. BRIAN Scassellati: Quiero 10 puntos? Quiero que cambie, también. Entonces, ¿qué quiero que cambie? AUDIENCIA: [inaudible]. BRIAN Scassellati: Bueno, si yo tener cinco puntos al principio, cuántos de punto puedo llegar al final? AUDIENCIA: Cinco. BRIAN Scassellati: Si tengo seis puntos al principio, cuántos puedo llegar al final? AUDIENCIA: Cuatro. BRIAN Scassellati: Si tengo siete puntos al principio, cuántos puedo llegar al final? AUDIENCIA: Tres. BRIAN Scassellati: Si tengo j conseguido puntos en el comienzo, cuántos puedo llegar al final? 10-j. OK. Así que vamos a tratar de eso. Así que me voy a salvar a nuestro programa de conejito. Una vez más vamos a alejar. Iremos a nuestro terminal. Vamos a aclararlo. Y hacer un zoom. Haremos nuestro programa conejito, nuevo. Y vamos a ejecutarlo. UH oh. Espera, vamos a alejar. ¿Obtuve 10 cuadros? Bueno, cuántos conejitos qué veo ahí arriba? 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Tengo 10 fotogramas. ¿Son todos iguales? AUDIENCIA: Sí. No. BRIAN Scassellati: No. Esa primera, la conejito está lejos de la izquierda. Y aquí, el conejo es el momento en el ALTAVOZ 29: Derecho. BRIAN Scassellati: Así, lo que me olvidé de hacer? ALTAVOZ 30: Iniciar una nueva línea. BRIAN Scassellati: Olvidé para iniciar una nueva línea, de nuevo. Lo mismo error que hice antes. Muy bien, vamos a arreglar eso. Ahora, todavía tengo el código en allí para hacer una nueva línea. ¿Por qué no funciona? ALTAVOZ 31: No es dentro del bucle. BRIAN Scassellati: Oh, no es dentro del bucle. Eso es correcto. Está sentado fuera de aquí. Y el bucle for es todo eso es dentro de ese texto. Así que me voy a mover esto dentro del bucle for. Y voy a Tab frente a muestran que está en el lugar correcto. Y ahora, vamos a guardar de nuevo. Vamos a alejar. Vamos a cambiar a nuestro terminal. Acercar. Vamos a rehacer nuestro programa de conejito. Y ahora, ahora tenemos nuestros 10 fotogramas. [Aplausos] BRIAN Scassellati: OK. So. Aquí está nuestra anidado para los bucles. Hemos sido capaces de generar en el bucle interno cuántos puntos que quería imprimir al comienzo, al final. Y el bucle exterior controlado el número de fotogramas que estaba construyendo. Empezamos con un pequeño kernel del problema, y construimos a partir de ese punto. Correcto. Vamos a hacer un paso más. ¿Estás listo? Hay una cosa aquí donde hemos realidad un poco conseguimos mayor complejidad de lo que necesitamos. Echemos un vistazo. Así que en nuestro programa de conejito, si Alejar aquí, De hecho, me hago parte de la misma cosa una y otra vez. ¿Qué debo hacer eso es una especie de lo mismo repite dos veces? ALTAVOZ 32: Imprimir los puntos. BRIAN Scassellati: Sí Imprimo esos puntos dos veces. En realidad, yo debería tener este comentario aquí. Imprimo algunos puntos en el comenzando, hasta aquí. Y luego imprimo algunos puntos al final. Y lo hago tipo de exactamente la misma cosa. Lo que vamos a empezar trabajando en las próximas semanas es ser capaz de tomar esos bloques de código que usamos una y otra vez, y mediante un proceso llamada abstracción, vamos a sacarlos y escribirlas una vez para que podamos entonces reutilizar una y otra vez. Así que vamos a intentar eso. Listo? Vamos a tomar este bloque de código. Y yo voy a sacarlo de allí. Y yo voy a define-- hacia abajo en la parte inferior, Voy a escribir una nueva función. No va a devolver nada. Y yo voy a llamarlo printDots. Se va a tomar uno argumento, un entero que dice howManyDots debo imprimir. Y ahora en lugar de imprimir j puntos, voy a imprimir decirle howManyDots debo imprimir. Y hay un pequeño problema aquí. ¿Alguien sabe lo que es? ¿Qué tengo que aparece en la lista aquí eso no está definido? AUDIENCIA: [inaudible] BRIAN Scassellati: Bueno, ¿cómo muchos puntos se define hasta aquí, pero estoy usando esa variable i. Así que me voy a tomar esa variable i y yo voy a definirla en aquí en su lugar. Así que ahora que va a estancia-- perdón, consiguió el bloqueo de mayúsculas en somehow-- estoy va a seguir i en aquí. Así que ahora aquí está mi pequeña función o sub-rutina, y dice, cuántos puntos voy a imprimir? Y que va a ir a través de este lazo y imprimir una y otra vez. Entonces puedo modificar mi programa aquí. Y ¿qué me llamo esa función? printDots. Así que voy a llamar printDots. ¿Cuántos puntos es lo que quiero para imprimir primera vez ante el conejo? AUDIENCIA: j. BRIAN Scassellati: j. ¿Cuántos puntos es lo que quiero para imprimir al final, después de que el conejo? 10-j. Y hay una cosa que me falta. Como se vio en la conferencia de hoy, vamos a declarar printDots hasta antes para dar el prototipo. OK. Así que lo que he hecho es que he intentado aislar esa parte de código reutilizado que he hecho una y otra vez. Y he tratado de sacarlo de manera que todo eso está contenido en un solo lugar. De esa manera, si tengo un error en alguna parte, Sólo tengo que arreglarlo en un solo lugar. Correcto. Así que vamos a guardarlo. Y vamos a asegurarnos de que funciona. Así que vamos a salir. Vamos a ir de nuevo a nuestra terminal. Nos acercamos. Vamos a hacer ese proceso conejito. Oh. Y me ha dado una advertencia. ¿Qué es lo que me dice? Bien en cualquiera de estas veces, siempre quieren para desplazarse hasta el primer error-- Ahora en este caso, sólo tengo una. Me dice en bunny.c, en la línea 8, la columna 9, hay un problema. Se dice, que ha declarado este i variable y usted no lo ha usado. Ahora, normalmente, eso es no es el peor error. Esa es una tarea fácil de arreglar. Y de hecho, podemos volver atrás en el. Podemos volver a Bunny. Y en este caso, todo lo que tienen que hacer es deshacerse de i, porque no estamos usando i dentro de principal más. Estamos usándolo dentro de nuestra sub-rutina. Así que vamos a guardar eso. Volveremos. Y hacer un zoom. Vamos una vez más hacemos conejito. Y allí están nuestros 10 fotogramas. OK. Cada vez que le den un procedure-- Sí. ALTAVOZ 33: Tengo una-- Estoy confundido. ¿Se puede volver al código? BRIAN Scassellati: Sí. ALTAVOZ 33: Así que, cuando escribiste su prototipo, el argumento de que si hubiera llamado fue llamado howMany? Pero, below-- BRIAN Scassellati: Ah, sí. ALTAVOZ 33: ellas --denominado algo diferente, yo no lo entiendo. BRIAN Scassellati: ¿Por qué son diferentes. Así que esa es una gran pregunta. Así que la pregunta era, hasta aquí, escribí howMany, y abajo, escribí howManyDots. La razón es que en su prototipo, en realidad no está prestando atención a los nombres que usted está poniendo en. Todo lo que realmente le importa es que es un entero. Se quiere saber la forma de lo que usted está poniendo en. Ahora stylistically-- oops-- lo que debería No, es que me gusta hacer estos partido. OK. Debido a que va a ser mantenerlo más fácil para mí recordar. Pero eso fue mi error Sí. ALTAVOZ 34: Y así para el prototipo funcione, simplemente escribiendo esa línea, escribir el prototipo, permite que la función que viene justo debajo de él para ir a la final y recuperar lo que eso significa? BRIAN Scassellati: Lo que significa es cuando el compilador pasa por, que va desde la parte superior de el código para la parte inferior. Y lo que este prototipo es, es que es básicamente una promesa. Dice que va a ser una función definida en alguna parte. Va a ser llamados printDots. Y va a tomar un argumento eso va a ser un número entero y que va a regresar nada, nula tipo. OK. Les prometo que va a ser definido algún lugar del camino. Pero cada vez que ver que, a medida que avanza hacia abajo por el resto de mi función principal, que quiero que trates de que en función que toma una entrada entero. Y así, cuando el compilador se cae a través de este, se ve esa promesa. Y cuando se pone abajo, sigue adelante, sigue adelante, que encuentra la primera vez se menciona printDots. Y dice, Oh, usted está dando mí este j. j es un número entero. Bueno me prometió que haría ser un entero y eso es correcto. Eso está bien. Y, finalmente, hacia abajo en la parte inferior, antes de llegar a la final de mi archivo, hago mi promesa y yo lo defino. ¿De acuerdo? ALTAVOZ 35: Por lo tanto, la saves-- programa guardará los espacios en blanco que va y llena al final? BRIAN Scassellati: No es acerca de la asignación de memoria. En realidad es sólo de lo Tipo estás esperando ver. En caso de que esta cosa tiene uno argumento, o cinco argumentos? En caso de tener que ser números enteros que se le da, o cadenas? Eso es todo lo que está buscando que hacer es comprobar, me estás dando la tipo de argumento. ¿De acuerdo? Correcto. Déjame que te dejo con otro poco para mirar. Arte ASCII no es el gran modelo de la animación como lo es hoy. Pero algunas personas, por supuesto, tomar las cosas y empujan a sus extremos. Esto es, como David demostró en la conferencia, una pieza de código que usted debe en ningún caso tratar de duplicar ustedes mismos. Debido a que es terrible estilísticamente. De hecho, está diseñado para ser tan más difícil posible de leer. OK. Así que, para hacer de nuevo, vamos a acercar aquí. Voy a ir ahora, cambio de directorio. Voy a subir un nivel, de nuevo a mi espacio de trabajo. Voy a continuación, cambiar de directorio en este otro directorio que he creado. Y esta es la Internacional Ofuscado C Programming Contest. Medios ofuscado como duro como sea posible de entender. Así que por favor, no te asustes si te fijas en esto y va, no puedo leer eso. Ese es el punto de la misma. ¿De acuerdo? Pero, tenemos esta maravilloso programa que estoy va a mirar con solo teclear más. Y vamos a ver si puedo alejar sólo un poco, así que usted puede verlo Y este es el programa. Se llama endo.c. Y parece que este cubo con tipo de las letras F-L-U-I-D en el mismo. Esto es en realidad un programa. Está escrito en el más oscuro de manera que los autores pudieran posiblemente Escribelo. Pero es un pequeño pedazo maravilloso que genera un modelo de dinámica de fluidos. Y así nos vamos a dar ese modelo de una entrada que se parece a esto, de un staired conjunto de contenedores con un poco de líquido, algunos líquido, en la parte superior. Y vamos a tener que simular lo que está sucediendo a él. Así que voy a llamar a esa función, endo. Y voy a darle ese archivo de entrada que he tenido. Y no es nuestra epítome del arte ASCII. Un simulador de dinámica de fluidos completa funcionando en unas pocas líneas de código. Ahora, ¿qué es realmente muy sorprendente de este pequeño programa es que me quiero parar ahora, así que voy a utilizar lo mando? AUDIENCIA: Control-C. BRIAN Scassellati: Control-C. OK. Así que voy a utilizar Control-C. C Que va a detenerlo. Voy a borrar de nuevo. Y ahora voy a invocar la programa, ejecutar el programa, utilizando como entrada. Y vamos a ver la dinámica de fluidos simulación de que se derrita. OK. Por favor, no deje que el programa ser lo que te confunde. Es sólo para que podamos terminar en algo fresco e interesante. OK. Buena suerte con sus conjuntos de problemas. Estaremos encantados de responder preguntas después de clase. Gracias mucho, chicos.