[Powered by Google Translate] DAVID J. MALAN: Muy bien, este es CS50 y es esta la final de la semana 1, así que las tarjetas están en estudio y el número total de compañeros de clase que tiene este año es de 745. Y estamos muy contentos de tener a muchos de ustedes en el curso este semestre, pero a pesar de este curso es tan grande, darse cuenta de que se trata de estas cosas como almuerzos viernes, como las horas de oficina, secciones 15-persona, y que así sucesivamente son realmente la intención de crear este más íntimo ambiente. Así que, aunque es posible que se reúnen una o dos veces por semana, aquí en Sanders, sabemos que gran parte de su experiencia en este curso será mucho estar en manos de al lado de sus compañeros de clase y el personal docente. Así que aquí vamos, Fall 2012. Así que recordar que la última vez que terminó con una nota de imprecisión, hablando de la representación de los números. Y nos fijamos en uno de los fracasos que ocurrieron en el mundo real, cuando se trataba de malentendidos cómo funcionan las computadoras. Bueno, hoy vamos a revisar otra de esas ideas así como continuar con nuestra discusión del cliente CS50 y C, y lo que significa realmente para programar. Pero en primer lugar, a sólo un par de anuncios torbellino. Secciones comenzará este domingo, y la primera semana es siempre un poco de un comienzo rápido, ya que sólo se puso en los formularios de la sección. Estamos haciendo lo mismo, ahora, con los compañeros docentes, ahora que conozcan sus horarios, por lo que estamos apuntando, por Sábado por la mañana, hacer un seguimiento con usted con su sección asignación y TF. Darse cuenta de que van a empezar al día siguiente, domingo o el lunes o el martes. Y luego vamos a acomodar cambios de sección a medida que surjan en los días por venir. Las horas de oficina, por su parte, son, de nuevo, esta noche, 8 PM a 11, en Annenberg, así como mañana por la noche. A pesar de que los conjuntos de problemas se deben generalmente los jueves al mediodía, se da cuenta que tiene un máximo de cinco días de retraso para gastar, por lo tanto, la disponibilidad de horas de oficina el jueves si dinero en efectivo en uno de esos días de retraso y, por lo tanto presentar, algo el viernes. Permítanme sugerir que Scratch es una de las más divertidas, entre los el juego de llaves más bajas problema. Y me gustaría colgar en esos días finales, estratégicamente, sólo para más tarde en el semestre en que la vida empieza a ponerse en el camino con exámenes parciales y otras clases. Serie de problemas 1, por su parte, se publicarán en el curso de sitio web de este viernes, como se verá en la caminata del curso a través de video, que será filmado a las 2:30 PM el viernes y luego publicado en línea por el día siguiente. Así que terminamos el lunes. Quiero - en realidad, una nota aquí. Debido a que las clases - porque Sanders no es exactamente prestan sí a lo casual Q & A de vuelta y vuelta terriblemente bueno, estamos va a intentar algo un poco nuevo este año, en el que si usted no se siente cómodo levantar la mano o simplemente prefieren no levantar la mano en una habitación como esta, vamos a tener algunos de los compañeros docentes y las entidades emisoras dotación cs50.net/discuss durante la conferencia. Así que si usted tiene una pregunta, porque yo estaba completamente claro acerca de algo o tienes curiosidad sobre algunos tema, trate de publicar allí. Marque con una etiqueta de Clase, y vamos a hacer todo lo posible hoy y la próxima semana - nos volveremos probar esto - para alinear ya sea por medios electrónicos, en línea, o si se siente como que debería realmente se traten de forma masiva, uno de los compañeros docentes o de CAs levantar la mano y pedir anónimamente en su nombre. Así que vamos a darle una oportunidad y ver lo bien que funciona. Pero, por supuesto, continuar elevando las manos como usted quisiera. Así última vez que reveló que el 10% o un décimo-no es, en hecho, 0,1, como se les enseñó hace muchos años. Es de hecho, un valor como este. Pero eso no es totalmente cierto, ¿no? Sólo tenemos esta restricción en los ordenadores por lo que, si sólo tiene una cantidad finita de memoria, RAM, o más específicamente bits, bueno, hay sólo un número finito de cosas que puede representar. Por ejemplo, si tenemos el número cero, y queremos representan en binario, utilizando ocho bits, donde un bit, de nuevo, es un cero o un uno, podríamos representarlo como 00000000. Y eso es un poco innecesariamente prolija. Al igual que en el sistema decimal en el mundo real, en general, si desea escribir el número 123, se humanos probablemente no escribo 00000123 pesar de que, funcionalmente, que es el mismo número exacto. Acabamos de caer ceros a la izquierda, por así decirlo. En binario, podemos hacer lo mismo. Binario y cero, cero y binario es igual a cero. Usted sólo necesita un único bit. Pero, de nuevo, la unidad de medida más común en el mundo de la informática es bytes, ocho bits. El hecho de que un poco, bastante inútil. Ocho bits, no terriblemente útiles, pero por lo menos es más útil que una única unidad de medida. Así que con ocho bits, por lo general va a representar binario. Así que aquí tenemos a los números cero, uno, dos, y luego, como Nate hizo en el video el miércoles pasado, podemos seguir contando hasta siete, ocho. Y si usamos más y más bits, se puede contar hasta el infinito. Pero si sólo tiene un número finito de estos bits, al igual que en el caso de cualquier sistema informático, o incluso misiles sistema, bueno, en realidad sólo tiene un cantidad finita de precisión. Así que si quieres para representar el número como 0,1, también, la equipo tiene que escoger y elegir. Y si sólo tiene un número finito de números que puede representan, puede acercarse hasta 0,1 por ti, pero no puede necesariamente le da exactamente el valor que desee. Y este es sólo uno de los retos de las computadoras, debajo de la capucha, por suerte. A medida que avanzamos más en el semestre, éstos nivel inferior detalles se vuelven mucho menos interesante, pero la duda aplicación de estas ideas pueden tener un mundo muy real ramificaciones. Uno de ellos es una diversión poco. ¿Cuántos de ustedes han visto la película Space Oficina asombroso? Si usted no tiene, que es su no oficial tarea para la semana. Pero en el espacio de oficina, los becarios en esa película toma ventaja de precisamente esta idea, pero en realidad robó desde otra película que podría tener visto, incluso años antes. Así que te voy a dar unos segundos de este trailer de esta película increíble y este es en gran medida académicamente relevante. [JUEGOS DE VÍDEO] La verdad es que estoy siendo promovidos. Puedo programar un virus que rasgará que colocar a lo grande. Bueno, ¿cómo funciona? Cada vez que hay una transacción bancaria donde el interés es computarizada, hay miles al día, el equipo termina con estas fracciones de un centavo. Pero yo no voy a hacer nada ilegal. Ilegal? Samir, esto es América. Usted tiene que juro por Dios. Si nadie sabe sobre esto, pero nosotros, ¿de acuerdo? No hay miembros de la familia, sin novias, nadie. [Inaudible]. No te preocupes, hombre, no se lo diré a nadie. [Película termina] Muy bien, así que tal vez encontraron esta película mejor que la mayoría personas aquí, pero, en cualquier caso, el virus que eran tratando de crear - y en las películas, en cualquier momento que lo llamaría algo un virus, que generalmente no es realmente un virus. Es simplemente un programa que alguien escribió que hacer algo. Y en este caso, los chicos estaban tratando de escribir un programa que se aprovecharon de su empresa llamada Innotech de sistema informático, mediante el cual las computadoras, también, incluso cuando En relación al dinero, no puede necesariamente representan el dinero exacto. Así que, aunque es posible que tenga $ 0.10 en su cuenta bancaria, 0,10, bueno, el equipo realmente puede pensar que usted tiene esta centavos muchos en su cuenta bancaria. Y así, lo que estos chicos estaban aspirando a hacer - y robó la idea, resulta de Superman III, donde Richard Pryor hizo lo mismo - que eran esencialmente escribir programas que aspiran a tomar todo el final números, todas las diminutas fracciones pequeñas, diminutas de monedas de un centavo, y drenando los fuera a fin de que los seres humanos sólo pensamiento, oh, es sólo 0,10 dólares allí, pero todos los que números finales eventualmente se suman. Así que una idea maravillosa y divertida en la que salió por la culata película en particular. Pero en el mundo real, también, hay mucho más en relación implicaciones de este tipo de cosas. Y una de las razones para sumergirse en el campo de la informática ciencia es, de nuevo, su aplicabilidad no a la ciencias de ingeniería solo, pero a sólo otros campos también. Así que esta es una mirada menos optimista de lo que puede salir mal, pero también es bastante abrir los ojos, me parece, cuando se trata de entender exactamente cómo las tecnologías omnipresentes como computadoras y la programación o en estos días, en forma de software. Así que este próximo clip se trata sólo de seis minutos, sigue donde lo dejamos la última vez, pero nos permite mirar un poco más en profundidad a tales de estos temas uno. Déjame pasar directamente a donde lo dejamos, que estaba aquí. Y tenemos la segunda parte de dos, durante unos seis minutos aquí. [PLAY MOVIE] Plagado tecnología de cohetes modernos. En 1991, con el inicio de la primera guerra del Golfo, el Patriot misil experimentado el mismo tipo de el problema número de conversiones. Y como resultado, 20 personas, 20 soldados estadounidenses, murieron y cerca de 100 resultaron heridas, cuando el Patriot, que se suponía para proteger contra los Scuds entrantes, no pudo disparar un misil. Cuando Irak invadió Kuwait y Estados Unidos puso en marcha un desierto Storm a principios de 1991, baterías de misiles Patriot fueron desplegados para proteger a Arabia Saudí e Israel desde Irak Ataques con misiles Scud. El Patriot es un EE.UU. mediano alcance superficie-aire del sistema, fabricado por la empresa Raytheon. El tamaño de los interceptores Patriot sí mismo, se trata aproximadamente 20 pies de largo y pesa alrededor de 2.000 libras. Y lleva una ojiva de alrededor de - Creo que es más o menos 150 libras. Y la propia cabeza es un explosivo de alta potencia que tiene fragmentos a su alrededor. La carcasa de la cabeza de combate está diseñado para actuar como perdigones. Los misiles se llevan cuatro por contenedor y son transportado por un semi-remolque. El Patriot antimisiles sistema se remonta al menos a 20 años. Originalmente fue diseñado como un misil de defensa aérea para derribar aviones enemigos, en la primera Guerra del Golfo. Cuando la guerra llegó, el ejército quería usarlo para disparar por Scud, no aviones. La fuerza aérea iraquí no es tanto de un problema, pero el Ejército Estaba preocupado por misiles Scud. Y así trataron de actualizar el Patriot. Interceptar un misil enemigo que viaja a Mach 5 se va a ser un reto suficiente. Pero cuando el Patriot fue trasladado de urgencia en servicio, el Ejército no era consciente de una modificación iraquí que hicieron su Scuds casi imposible de alcanzar. Lo que pasa es que los Scud fueron llegando eran inestables. Se tambalea. La razón de esto era que los iraquíes, con el fin de obtener 600 kilómetros fuera de un misil de alcance de 300 kilómetros, se peso de la ojiva delantera y hizo la ojiva más ligero. Así que ahora la Patriot está tratando de llegar a la Scud, y la mayoría de el tiempo, la abrumadora mayoría de las veces, lo haría sólo volar por el Scud. Una vez que los operadores del sistema Patriot Patriot dio cuenta de la no alcanzó su objetivo, que detonó la carga explosiva Patriot. Para evitar posibles víctimas, se permitió a caer al suelo. Eso fue lo que mucha gente vio, como grandes bolas de fuego en el cielo, e incomprendido como intersecciones de ojivas Scud. Si bien, en el cielo de la noche, Patriotas parecía ser Scud destruyó con éxito, en Dhahran, no podía haber error sobre su desempeño. Allí, el sistema Patriot radar perdió la pista de un Scud entrante y nunca puso en marcha debido a un defecto de software. Fue a los israelíes que descubrieron por primera vez que cuanto más tiempo el sistema estaba en, mayor es el tiempo de discrepancia se convirtió, debido a un reloj incorporado en el ordenador del sistema. Unas dos semanas antes de la tragedia en Dhahran, el Israelíes informaron al Departamento de Defensa que el sistema estaba perdiendo el tiempo. Después de ocho horas de funcionamiento, se dieron cuenta de que el sistema fue que se vea con menos precisa. El Departamento de Defensa respondió diciendo a todos las baterías Patriot no abandonar los sistemas durante un largo tiempo. Nunca dijeron lo que un tiempo fue - 8 horas, 10 horas, 1.000 horas. Nadie lo sabía. La batería Patriot destinado en el cuartel de Dhahran y su reloj interno defectuoso había estado en más de 100 horas en La noche del 25 de febrero. Es seguido el tiempo con una precisión de una décima parte de un segundo. Ahora décimo de la segunda es un número interesante porque que no puede ser expresado en binario, exactamente, lo que significa no se puede expresar exactamente en cualquier computadora digital moderna. Es difícil de creer. Pero usar esto como un ejemplo. Tomemos el número de un tercio. Una tercera no puede ser expresado en decimal, exactamente. Una tercera parte se va en 0,333 para el infinito. No hay manera de hacer eso con una precisión absoluta en decimal. Ese es exactamente el mismo tipo de problema que ocurrió en el Patriot. Cuanto más tiempo el sistema funcionó, peor es el error de tiempo llegó a ser. Después de 100 horas de funcionamiento, el error en el tiempo era sólo aproximadamente un tercio de un segundo. Pero en términos de focalización de un misil que viaja a Mach 5, que dio lugar a un error de seguimiento de más de 600 metros. Sería un error fatal para los soldados en Dhahran. Lo que pasó es un lanzamiento de Scud fue detectado por la alerta temprana satélites y sabían que el Scud venía en su dirección general. No sabía de dónde venía. Corresponde ahora al componente de radar de la Patriot sistema, la defensa de Dhahran, para localizar y hacer un seguimiento de la misil enemigo entrante. El radar era muy inteligente. En realidad se podría seguir la posición de la Scud y luego predecir dónde sería probablemente la próxima vez que el radar envía un pulso de salida. Eso se llama la puerta de distancia. Luego, una vez que el Patriot decide ha pasado suficiente tiempo para ir atrás y comprobar la ubicación para la próxima detectada objeto, vuelve. Así que cuando volví al lugar equivocado, entonces no ve objeto, y decide que no había ningún objeto. Era una falsa detección y baja de la pista. El Scud entrante desapareció de la pantalla del radar. Y segundos después, se estrelló contra el cuartel. El Scud mató a 28 y fue el último despedido durante la primera Guerra del Golfo. Trágicamente, el software actualizado llegó a Dhahran el día siguiente. Y la falla de software había fijado, cerrando un capítulo en la turbulenta historia de los misiles Patriot. PATRIOT es en realidad un acrónimo de "Tracking Phased Array Intercepción de destino. " De acuerdo, por lo que un resultado mucho más doloroso de no muy la comprensión de este mundo. Y la comida para llevar, de verdad, de la película es que la solución no se reinicie el sistema de defensa antimisiles de vez en cuando. Y así, una vez más, uno de los objetivos de este curso, sin duda en una escala más humilde que estas aplicaciones, es Todo el mundo realmente abierto los ojos a exactamente cómo usted va sobre la máquinas de hacer lo que usted quiere que hagan y cómo se van hacer eso correctamente, mientras que en el camino haciendo bien, con elegancia, y así sucesivamente. Y así, hoy, vamos a sumergirnos en un poco más de esto, pero por lo que no vamos demasiado rápido, especialmente para los menos cómoda, sino también para poder mantener el interés de los los más cómodos, vamos a comenzar rápidamente con un poco de resumen de algunas de estas ideas. Y de nuevo, pregunte a distancia, tanto en persona o en línea, si usted tiene preguntas para que podamos mantener a todos en la misma página. De modo que el aparato CS50, paso hacia atrás, es lo que, en sus propias palabras? Está bien si no tienes idea de lo que esas palabras pueden ser todavía. [Inaudible] Bueno, por lo que una interfaz universal para - que todos podemos compartir. Por supuesto. Así, se podría, por ejemplo, te dirá que vayas a algún sitio web, descargar este software para Mac OS. Descargue este software para Windows, configurar en un lado a otro. Pero la realidad es que luego nos encontramos con innumerables técnicas apoyar temas. Y también en estos días, gran parte de lo que se hace del lado del servidor, en el mundo de la informática, especialmente cuando se trata desarrollo web y aplicaciones basadas en web, es en realidad muy a menudo se realiza en equipos UNIX o Linux, a diferencia de Mac o PC con Windows. Así que entre los upsides, entonces, de la utilización de esta cosa llamada el CS50 Appliance es que todos tendremos el mismo entorno. Así que todo el mundo está en la misma página sin importar el hardware que llegó a la escuela con pero también se incursionando en exactamente el mismo entorno que usted va a utilizar hacia semestre final, así como para el desarrollo web, así como en la futuro para aplicaciones reales de los mismos. Entonces, más concretamente, el aparato CS50 es una pieza libre de software que permite ejecutar otro sistema operativo, Linux, en este caso, en su propio ordenador, en una ventana. Ahora no sólo puedes descargar el aparato. Usted necesita un programa con el que jugar o correr el aparato. Y ese pedazo de software se conoce generalmente como un hipervisor. Los hipervisores se presentan en forma de productos como VMware, Virtual Box, Parallels. Todo tipo de empresas hacen software libre y comercial, por igual. Lo que vas a ver en el problema Set 1 son las instrucciones sobre cómo obtener software gratuito con el que funcionar el aparato CS50. Y una vez que usted lo hace, usted tendrá, en una ventana de tu Mac o PC, un entorno de escritorio que se ve bastante como este, donde tiene un menú de inicio-como cosa en el inferior izquierda esquina. Tiene una carpeta de inicio, o el directorio de inicio, en la parte superior izquierda allí, un bote de basura, y así sucesivamente. Así que vamos a desmenuzar los detalles necesarios sobre la marcha. Pero ahora vamos a empezar a bucear en C. Así C es este lenguaje de programación, similar en espíritu a Scratch, pero mucho menos gráfica, pero, irónicamente, mucho más potente una vez que llegue conocedores de la misma. Así que en C, escribimos programas de escritura de código fuente, que es esta sintaxis similar al Inglés, similar a los calcetines demostración de que hicimos la última vez que le permite expresarse con bastante precisión, si arcanely, a la computadora. Entonces, ¿qué tipo de producto de software es lo que realmente necesita para escribir programas en un lenguaje como C, basándonos en nuestra conversación el lunes? [Inaudible] OK, sólo necesitas un editor de texto. Usted no necesita ningún software especial per se para escribir programas. Sólo se necesita un editor de texto como el Bloc de notas de Windows, TextEdit en Mac, o algo que se llama gedit, en el mundo de la Linux, que vamos a utilizar aquí. Y eso es todo, para escribir los programas. Pero la escritura es sólo la mitad de la ecuación. A continuación, deberá ejecutarlas. Pero para ejecutar programas - no se puede ejecutar el código fuente. En su lugar, tiene que hacer lo que a él primero? Si. DAVID J. MALAN: Es necesario compilarlo. Y, por otro, compilar el código fuente significa - [Inaudible] DAVID J. MALAN: Exactamente. Traduciendo esto a ceros y unos. Porque todos nosotros, en estos días, tienen equipos que tienen CPUs, casi todos los cuales están hechos por una compañía llamada Intel, y Intel Inside, significa que no esta dentro de su cerebro ordenador, conocido como la CPU. Y una de las cosas que hace que el cerebro es, sabe cómo entender los patrones de ceros y unos. Sabe lo que representa el patrón de bits Además, lo que patrón representa restas, ¿qué modelo de bits representan la impresión, y la creación de un sonido audible. Así que en resumen, la CPU, junto con el sistema operativo, que es una pieza de software que se ejecuta en la parte superior de la CPU, por así decirlo. Juntas, esas dos piezas saber cómo ejecutar programas que nosotros los humanos escribir. Así que si entro en el Appliance CS50 aquí, tengo que abrir un editor de texto y puedo acceder a este en un par de maneras. Me puede ir a Menú, Programación, y entonces puedo seleccionar - No, no ese menú. Puedo ir a Accesorios / gedit aquí para abrir mi editor de texto pequeño. O más simplemente, puedo hacer clic en este icono pequeño en la parte inferior esquina izquierda. Y ahora me sale este ambiente aquí. Es muy evocador de un editor de texto simple, con sólo una o dos diferencias. En la parte superior, donde está el cursor parpadeante, aquí es donde Puedo empezar a escribir el código. En el fondo es esta cosa llamada la ventana de terminal. ¿Y qué tipo de cosas que puedo hacer en este la llamada ventana de terminal? [Inaudible] Está bien, así que voy a ejecutar órdenes. Y algunos de los comandos que corrió el lunes eran un poco crípticos al principio, pero para ls lista, cd cambio de directorio, para rm, para eliminarlo. Así que es una especie de camino de la vieja escuela de navegación de su computadora, usando sólo el teclado y los comandos textuales, y no, en general, con el ratón. Pero vamos a ver, en poco tiempo, este hecho nos da una poco más de potencia y un poco más precisión con la cual expresarnos. Y luego aquí a la izquierda, sólo vamos a ver, a medida que comenzamos software de escritura, un pequeño resumen de la programa que hemos escrito en la parte superior izquierda. Pero vamos a ver que de nuevo en poco tiempo. Así que vamos a hacer algo muy simple aquí. Permitidme que seguir adelante e ir a Archivo, Guardar, y estoy va a hacer clic en jharvard aquí, más a la izquierda, y jharvard es, de nuevo, el nombre de mi carpeta de inicio, mi archivos personales, yo, ahora es John Harvard, como todos ustedes pronto será John Harvard en este entorno. Él tiene este directorio Inicio, Mis documentos y demás, que desea guardar y, ahora, este archivo pulg Así que voy a llamarlo hello.c. Entonces me voy a ir a continuación y haga clic en Guardar, y ahora lo que tenemos aquí es una ficha llamado hello.c, tanto como otro tipo de editor. Así que ahora vamos a seguir adelante y empezar a escribir un programa. int main (void). Y luego me hice la última vez, printf, para la impresión formateada, ("Hola, mundo!" ). Casi completa. Pero me falta un par de detalles. Lo que falta en este programa que realmente necesito para que se compile en realidad? Si. [Inaudible]? DAVID J. MALAN: Sí, así que tengo que incluirá la norma I / O biblioteca. Así que esto tiene que ir por encima de principal, así que sólo voy a hacer un poco de espacio para ella allí. Y yo voy a hacer # include. Y noten los paréntesis angulares allí. Y en un aparte, gedit es un usuario poco amigable, si a veces un poco confuso, ya que trata de ayudar a su ojos cuenta de lo que se alinea con qué. Así que el hecho de que mi cursor está al lado de este ángulo soporte, observe cómo se destaca el otro ángulo soporte más uno esto. Y eso es sólo para llamar mi atención sobre el hecho de que yo tienen simetría. Y la simetría en la programación es generalmente una buena cosa. Del mismo modo, si muevo el cursor hasta el final, observe cómo el llaves se alinean para mostrar que, sí, tengo una abierta y uno cerrado, por así decirlo. Muy bien, y no puedo hacer otra cosa. No es estrictamente necesario, pero una buena práctica, por no decir devuelve 0. Y 0 retorno hace lo que para nosotros aquí? ¿O significa que? [Inaudible] DAVID J. MALAN: Pero no pasa nada. Y, francamente, es difícil para gran parte a ir mal en un programar este corto. Así que sólo estoy siendo súper explícito de que todo está bien. Yo, el ser humano, cuando ejecuto este programa, probablemente nunca lo hará ver que 0. En general, estos números que están siendo devueltos a partir de principal sólo educar a sus jefes a los seres humanos cuando algo va mal. Y te dan un poco de pop up de error del sistema diciendo: uno, dos, tres, o cualquiera que sea el número que fue fue realmente devuelto. Así que nada malo en esto? [Inaudible] DAVID J. MALAN: Así que esto no es tanto un error funcional pero una estética. Probablemente debería poner en un carácter de nueva línea allí en el final de esta cadena para que realmente mover el cursor a la siguiente línea, y el programa sólo se ve un poco más bonito. Así que ahora me dejes ir a mi ventana de terminal y amplía la Y esto de aquí, se llama el sistema. Se me acaba de recordar quién soy, jharvard @ aparato, donde aparato es el nombre del equipo que estoy. Entre paréntesis figura la tilde, el símbolo garabato, que representa qué? AUDIENCIA: directorio de inicio. DAVID J. MALAN: directorio de inicio. Así que eso es sólo una notación abreviada para decir que están en su carpeta personal donde todos sus archivos de ir de forma predeterminada. Así que ahora, aquí, puedo escribir ls para ver la lista. Y lo único que veo aquí en este momento es hello.c. Y eso es bueno, porque yo acabo de escribir esto. Así que vamos a seguir adelante y me hacen hello. Y noten que no estoy escribiendo hacer hello.c. En su lugar, sólo estoy escribiendo el nombre base del archivo, hola. Y que, como vimos el lunes, sólo se infiere que quiero el. c archivo. Así que ahora que he escrito hacer hello. Ahora veo este comando bastante largo y continuará viendo esto una y otra vez. Pero para ser tañido claro, la palabra que acaba de aparecer, ese es el compilador real. Hacer es una utilidad de generación. Es sólo un programa más fácil de usar que me salva, en la largo plazo, de tener que escribir increíblemente tedioso largo comandos como esa. Así que se podría ejecutar Clang manualmente. Se podría escribir todo eso manualmente. Sólo se pone muy aburrido. Y así que es sólo un programa que simplifica nuestras vidas y ejecuta comandos más complejos para nosotros. Muy bien, ¿y ahora qué archivo debo tener en mi directorio actual? No sólo hello.c, pero también saludar. Así que si quiero correr hola, recordemos que digo dot slash, donde los medios de punto entrar en la carpeta actual, donde quiera que son, a continuación, ejecute el programa llamado hola, y, de hecho, ahora, Tengo hello world. De acuerdo, cualquier pregunta sobre el flujo de trabajo o la sintaxis de lo que acabas de hacer? Muy bien, así que vamos a tomar las cosas a un nivel superior de nuevo. Así que esto fue decepcionante para escribir un programa que sólo nunca dice hola, mundo. Así que lo cambiamos, el lunes, decir hola, David. Es un poco más personal, pero igual de duro codificado como el primera versión. Así que no es tan convincente. Pero existe, en C, además de las funciones duda impresión, funciones que permiten obtener información del usuario. Y la forma en que lo hizo, el otro día, fue como sigue. Antes de imprimir algo, llegué por primera vez algo del usuario. Así que vamos a hacer esto otra vez. Cadena s, donde s es sólo un nombre arbitrario, aquí, por un cadena, es igual a GetString. Entonces, ¿qué fue GetString? Obviamente obtiene una cadena que, basándose en su nombre. Pero lo que es, más técnicamente? Es una función. Así que es una función que no viene con C per se. CS50 personal escribió esto. Y así, para usar esto, no se puede simplemente incluir stdio.h, También debe incluir qué? Si. Así cs50.h, que es simplemente un archivo que escribió hace algunos años. Lo instalamos en el aparato para que usted junto a todos los archivos estándar. Y así, en estas primeras semanas de la clase, vamos a utilizar esto sólo para simplificar el proceso de hacer muy básico cosas como conseguir entrada del usuario. Porque, como veremos en un par de semanas, el usuario conseguir la entrada en una lenguaje como C es en realidad sorprendentemente compleja, sobre todo porque no se sabe de antemano, por lo general, ¿cómo cantidad de cosas que el usuario va a escribir pulg Y cuando usted no sabe la cantidad de datos que puede esperar, no saber la cantidad de memoria para asignar. Y si usted realmente tiene un usuario de confrontación que está tratando de para introducirse en el sistema, bloquear el equipo, bueno, generalmente el primer método de ataque es, tal como lo hice en Lunes, escriba toda una secuencia larga de caracteres al azar, pulse Enter y vea lo rompe. Por lo general, si se rompe un programa, que alude a una falla de seguridad, potencialmente. Sin duda alude a usted, el programador, después de haber hecho una error, pero más peligroso, que podría haber hecho una error relacionado con la seguridad y, en general veremos que así es como máquinas están comprometidos hasta la fecha, tanto en el mundo de la web y de los programas en la línea de comandos, así. Está bien. Así que la cadena s es igual a getString. Así que ahora más concretamente, ¿qué significa la línea 6 aquí? Así, la función de la derecha se pone cadena, toma cuántos argumentos? Bien. Así que nada. Un poco de cordura comprobar. Un argumento, de nuevo, es sólo una entrada a una función para alterar su comportamiento por defecto de alguna manera. Pero en este caso, yo no quiero alterar el comportamiento de GetString. Yo sólo quería llegar a una cadena. Así que puse nada en los paréntesis y luego puse un punto y coma demarcación de la final de la línea de código. Ahora, el signo de igualdad no significa igual, per se. Significa asignación, lo que significa poner lo consigue emitida en el interior de lo que es justo a la izquierda. Así que en la izquierda, decimos que hemos declarado una cadena llamado s. Y más específicamente, hemos asignado la memoria interna de que vamos a poner los bits que representan una secuencia de personajes. Pero por hoy, hemos asignado o se declara una cadena. Está bien. Así que ahora, una vez que hayas hecho esto, quiero conectar el valor de s, no el valor de David. Así que esto está mal ¿por qué? Así que esto es sólo, literalmente, la s no modificable. Es decir "hola, s", que no es lo que quiero. Así que puedo hacer esto. El signo de porcentaje es un marcador de posición, pero ahora tengo que pasar a imprimir un segundo argumento. Recordemos que los argumentos a funciones están separadas por comas, por lo que el próximo coma aquí pongo después de esto la letra s. Y en este contexto actual, s es la variable, y printf, al recibir las dos entradas - la cadena en el lado izquierdo y el nombre de la variable s a la derecha - se podrá conectar a este último en la primera para nosotros, y sólo imprimir una cadena bien precioso que contiene lo que sea que hemos escrito pulg Así que vamos a probar esto. Va a seguir adelante y alejar la imagen, de nuevo a mi ventana de terminal. Acercar al final aquí. Vuelva a hacer hello. Clang parece haber sido repetición. Voy a escribir. / Hello Intro. Nada parece estar ocurriendo todavía, pero es en esta pantalla que puedo escribir algo como Nate, Enter, y ahora tenemos Hola, Nate. Y puedo hacerlo de nuevo con Rob, y así sucesivamente. Así que espero que ahora este programa se comporta como pienso. Ahora, no toda amigable para el usuario. No tengo ni idea de lo que se esperaba de mí. Así que sin duda podemos limpiar esto un poco. Déjame volver aquí, y en lugar de buceo y preguntar al usuario para una cadena, permítanme decirles explícitamente la usuario lo que estoy esperando. Así printf ("Introduzca una cadena:" ); Así que no hay variables aquí. No hay signos de porcentaje. Sólo la frase en Inglés simple. Permítanme ahora pasar a la final aquí y volver a ejecutar mi programa. Pero nada parece haber cambiado. ¿Por qué? Tengo que volver a compilar. Así error fácil de cometer. Pero usted tiene que no sólo guarda el archivo pero volver a compilar el programa. Y así, si puedo volver a hacer funcionar hola, ahora Clang ejecuta. Ahora se puede ejecutar. / Hello. Y ahora veo "Introduzca una cadena:". Bien. Ahora es un poco más fácil de usar. Nate, Enter, hola, Nate. Bueno, vamos a intentarlo de nuevo y empezar a pensar sobre los casos de esquina. Así como en scratch, es recomendable o se están alentado en la especificación de pensar tipo de lo que podría pasar mal si usted no anticipa todo lo que el usuario puede hacer. Bugs, por lo tanto, podría resultar. Así que introduzca una cadena - ¿qué es un caso extremo en esta lista? ¿Qué es un escenario que yo, el programador, que no tenga previsto? Si. Bien. ¿Y qué si escribo en una serie como esta? Está bien. Por lo tanto, todavía funciona. Gramaticalmente no tiene sentido. Pero por lo menos funciona el programa. ¿Cuál es otro caso de la esquina? Algo que no esperaba. ¿Sí? Bien. Así que podríamos hacer algo así como un número muy, muy grande. Así que vamos a hacer esto aquí. Permítanme alejar por un segundo, quisiera destacar. No se puede copiar y pegar aquí. Está bien. Así que no se puede copiar y pegar en la ventana de terminal, así que vamos a simplemente simularlo. Permítanme alejar la imagen, va a envolver. No voy a hacer esto por mucho tiempo, porque no lo hará en realidad romper en este programa. Pero podría. Intro. Pero no fue así. Está bien. Pero es un caso genuino rincón. Y la única razón por la que se comportaron correctamente, por lo que hablar, se debe a que la función GetString CS50 es en realidad diseñado bajo el capó, como veremos en un par de semanas, para asignar automáticamente RAM más y más, más y más de memoria del sistema operativo, cuando se da cuenta, wow, realmente has escrito en algo bastante largo. Ahora, esto es un poco de una mentira piadosa. Si realmente hizo una pausa durante un buen rato y me escribió en algo así como 5 mil millones de caracteres en el teclado aquí, o realmente dio copiar y pegar un poco, que muy posiblemente podría hacer que el programa se bloquee. Sólo un poco más difícil de simular que con una finita cantidad de tiempo. ¿Cuál es otro caso de la esquina que pudimos probar? ¿Sí? Si. Así que ¿por qué no respondes nada? Así que en realidad tiene que tomar alguna acción, porque de lo contrario el programa va a sentarse allí parpadeando todo el día. Pero si simplemente pulse Enter - Bien, ahora, todavía se ve mal. ¿Acaso no chocar, pero tal vez ahora hay una oportunidad para empezar a aplicar un programa más riguroso que comprueba efectivamente. Y si la cadena, la oración, la palabra que yo escribió en tiene longitud 0, bueno, tal vez debería gritar a la usuario, o le digo o le permite introducir una cadena de nuevo, de modo que conseguimos realmente lo que parece ser un comportamiento correcto y no sólo la supervisión completa de mi parte. Pregunta en la espalda? Número decimal. Así que podríamos intentar eso. 1,10000005. Parece que va a funcionar realmente bien. Y que en realidad se espera. A pesar de que podría haber escrito ese número hay, o un mayor número anterior, se dan cuenta de que cuando estás escribiendo usuario entrada y estamos usando la función GetString, no importa si lo que estoy escribiendo se ve como un número. Recordemos que de acuerdo con ASCII, todo en su teclado tiene un valor numérico que se puede asignar a un carácter, un char. Así que en este caso, a pesar de que podría escribir un número, el equipo va a pensar que es, por así decirlo, como una cadena - algo que se ve como un número, pero es realidad no es un número. Pero eso es en realidad una transición perfecta, porque ahora podemos de hecho la transición a programas de escritura que utilizar otros tipos de datos. Así que además de usar caracteres, o más bien, además de utilizar cuerdas, cuenta de que tenemos otros tipos de datos en C así como en otros idiomas. Un char, como su nombre indica, es un personaje único. Un flotador es un valor de punto flotante, y eso es sólo una fantasía manera de decir un número real - algo que tiene un decimal punto en que con algunos números a la izquierda y / o derecha. Un valor int es un entero, que es sólo un número como 123. Y ahora lo más interesante son cosas como doble. ¿Qué dijimos una habitación doble era la última vez? Es 64, derecha. Así que, por lo general un float es de 32-bit - por lo que es todo este tiempo en la memoria, utiliza 32 ceros y unos a representan valores - un doble es literalmente el doble, el cual significa que usted puede representar grandes números, o puede representar números más precisos. Así que usted puede tener más números después del punto decimal, pero como el hombre dijo en el video, incluso algo tan simple conceptualmente como 1/3 no puede representarse con precisión por un equipo, porque con el tiempo se le acaba de bits, y por lo tanto, sólo se puede hacer .33333333 tantas veces, en el que usted acaba de decir que me he quedado sin representación espacio, tengo que llamar a sólo un día y representarla un tanto imprecisa así. Y un largo tiempo - nombre estúpido, pero es porque hay un tipo de datos conocida como long en C que casualmente es a menudo 32 bits, al igual que un int es de 32 bits, pero es un tiempo largo general 64 bits. Por lo tanto, sólo significa que usted puede representar más números que esto. Está bien. Así que si realmente quieres empezar representando las cosas, puede ser que necesite más tipos sofisticados, y es por eso que contamos con cadena. Así, en la biblioteca CS50, ese archivo llamado cs50.h, hemos en realidad declaró un tipo de datos, por así decirlo, llamada cadena, pero string en realidad no existe. Esto es, una vez más, una de estas capas que vamos a pelar de nuevo en una semana o dos y tirar a la basura, y de hecho mirar debajo del capó a lo que en realidad es una cadena, y cómo está representada. También vamos a ver valores booleanos. Entonces, ¿qué era un bool en el contexto de Scratch? Es cierto o falso. Así que es un valor que es verdadero o falso, encendido o apagado, 1 o 0, sin embargo quiere ver el mundo. Así que en C, gracias a la biblioteca CS50, que a su vez incluye otra biblioteca debajo de la capucha, tenemos el acceso a un tipo de datos que se llama bool, que se literalmente nos permite asignar los valores true o false para las cosas en un programa. Así que vamos a seguir adelante aquí y escribir un pequeño programa que hace algo relacionado con números. Así que permítanme volver al Dispositivo CS50, déjame seguir adelante y crear un nuevo archivo llamado aquí - vamos a decir algo simple, como math.c. Está bien. Y ahora sube a la parte superior de mi programa, estoy va a hacer el habitual - # Include, así que puedo usar printf, int main (void) - vamos a volver, con el tiempo, lo que significa int aquí, lo que significa vacío aquí, pero por ahora, sólo sé que usted tiene que comenzar programas como este. Ahora voy a seguir adelante y decir algo un poco diferente - printf ("Dame un número:" ). Entonces me voy a hacer int n = getInt, porque Resulta getInt es otra función en la biblioteca CS50 además GetString. Y ahora me voy a hacer algo estúpido, como "gracias para el% d ", para el número entero decimal, y luego coma n, y a continuación, devuelve 0. Así que de nuevo, devuelve 0 no tiene nada que ver con el número que estoy preguntar al usuario. Sólo significa que al final de todo, presumiblemente, es así. Así que déjame ir a mi ventana de terminal aquí. Déjame escribir make matemáticas, introduzca. Y algo está mal. Hacer las matemáticas no funcionó. Este es el primero de nuestros mensajes de error. ¿Por qué? Un críptico poco, pero - Si. Así cs50.h. Así que de nuevo, especialmente al principio, podrás escribir tu primer programa conjunto de procesadores 1 en secciones, en horas de oficina, y francamente, va a ser abrumador a veces lo que estas cosas en realidad están diciendo. Pero te darás cuenta muy pronto empiezan a caer en los cubos mediante el cual éste significa que usted ha dejado una de la # incluye en la parte superior del archivo. Y Clang, el compilador, se le informa de ello por decir, en lugar imaginario, la declaración implícita de getint función no es válido. Está bien. Entonces, ¿qué significa eso? Sólo significa que usted ha declarado implícitamente en getInt el sentido de que no se ha declarado explícitamente. Para declarar explícitamente int, hay que enseñar Clang que existe. Y la solución muy simple para esto es para enseñarlo por incluyendo este otro archivo, cs50.h, en la parte superior de su archivo. Porque literalmente, lo que hace es # include le dice Clang más o menos para ir a buscar el archivo llamado cs50.h, copiar, pegarlo automáticamente en la parte superior de mi programa por mí, y luego convertir el código fuente en ceros y unos. Pero eso, obviamente, sería muy aburrido si nosotros, los humanos tenían para ir copiando y pegando estos archivos grandes todo el tiempo, # include tan sólo hace todo de forma automática sin enturbiar mi código con otra persona biblioteca. Y una biblioteca es más que otro archivo que contiene las funciones y otras cosas que alguien ha escrito, de que somos aprovechar para nuestro propio bien. Está bien. Vamos a intentarlo de nuevo. Hacer matemáticas. Intro. Bueno. Así que parece haber funcionado. Así que permítanme ahora funcionan las matemáticas;. / Matemáticas. Ingrese me da un número, 123. Gracias por el 123. Ahora vamos a probar con otro caso de la esquina. Una cadena es bastante generoso, ya que un cadena puede ser cualquier cosa. Puede parecer que los números, parece personajes, se parecen a las palabras. Pero un int es un entero. Así que ahora si soy el usuario difícil, y está diciendo "Dame un número ", lo que si trato de hacer algo como 0,1? Bueno, eso es un número, y es consistente con la gramática que se utiliza aquí, pero por debajo de la capucha, estoy de curso usando el getInt función. Así que vamos a ver qué pasa. Intro, vuelva a intentarlo. Está bien. Voy a ser difícil y simplemente pulse Enter de nuevo. Enter, Intro. Así que ahora parece que getInt es un poco más poderoso que GetString. Nosotros, el personal, implementado de tal manera que si se observa no nos ha dado un entero - y un int es un número decimal contienen ceros, unos, dos, tres, cuatro, cinco, seises, sietes, ochos, o nueves. Y eso es todo. No hay puntos decimales, ni personajes, ni signos de puntuación. Parece que tenemos que cooperar. Así que voy a tratar de cuatro, cinco, seis, y eso me ayuda a pasar. Así que en realidad, para ser anal aquí, probablemente debería decir "Dame un número entero "con el fin de transmitir al usuario exactamente lo que pretendo. Ahora vamos a pensar bajo la campana. No vamos a ver cómo se implementa cs50.h hoy, que biblioteca. Pero si se sigue diciendo reintentar, reintentar, reintentar, lo que la programación construir estoy usando presumiblemente por debajo de la campana implementar eso? Así que sólo un bucle, ¿verdad? Una de las ideas más sencillas que hemos visto en Scratch. The Forever construir, construir la repetición. Es de suponer que, en este programa, por debajo de la campana, incluso a pesar de que está escrito en C y no cero, que está haciendo algo que se llama equivalente a siempre si el usuario no tiene escribió en un número entero, por ejemplo reintentar, reintentar, reintentar, reintentar, por lo que finalmente, cuando lo hacemos llegar un entero, entonces salir de ese bucle. Entonces, ¿qué otras funciones pueden usamos aquí en la biblioteca del CS50? Bueno, un poco de las obvias, por lo menos sobre la base de la Tipos de datos que ahora sabemos que existen. Implementamos GetString, getInt, sino en todo el primeras semanas del término, también se puede utilizar GetFloat y GetDouble y GetLongLong con el fin de obtener exactamente los Tipos de datos que desee. Debido a que el detalle clave aquí es que a diferencia de otros idiomas, como Python y Ruby, en el que no necesariamente tienen que declarar el tipo de datos de una variable - usted no tiene que decirle a la computadora qué tipo de cosas te vas a poner en la variable - en C, usted tiene que ser siempre tan precisa. Así que si quieres una variable llamada n, un trozo de almacenamiento que en este caso pasa a ser de 32 bits por convención, tiene que decirle a la computadora que estos bits son va a almacenar un número - No es un personaje, no una cadena, no un flotador. Y esto se refiere a la cuestión que efectivamente encontré la semana pasada. Si estamos usando ceros y números de seres para representar no sólo números, pero A y B y C, como en el mundo es un equipo va a saber que este patrón de bits en realidad representa el número 65, en lugar de representar el letra A, que casualmente, según ASCII, recuerdo, era equivalente a 65? Así que estos tipos de datos proporcionan un contexto para el equipo, por lo que se sabe si estos bits se debe interpretar como una int o como una cadena. Cualquier pregunta, entonces, a este respecto? ¿Sí? DAVID J. MALAN: Buena pregunta. Si sacamos stdio.h, guardamos el archivo - déjame ir a la ventana de terminal y ejecute make matemáticas, zoom y entrar - ahora me sale un error diferente, porque soy implícitamente declarando cuál es la función ahora? Printf. Así que ahora he creado un nuevo problema, cuya solución es esencialmente el mismo. Tengo que poner eso de vuelta. AUDIENCIA: [inaudible] DAVID J. MALAN: Oh. Así que si saco - Bueno, sí. Así que si me quito la inclusión de la E / S de la biblioteca hasta aquí, y entonces estás diciendo que si me deshago de printf, obtener deshacerse de printf? Sí. Esto debería funcionar, porque ya no estoy usando cualquiera - gritos. ¿Acabo de mentir? Oh, está bien. Esto no funcionará debido a un nuevo error que acaba de presentar. Y éste es un poco más fáciles de entender. ¿Cuál es el problema? Sin usar la variable n. Así que este error es el resultado de haber configurado el aparato a ser particularmente pedante, gritar realmente en por todos los errores posibles, incluso si es una especie de un error no fatal como esto - ¿es realmente tan grande tratar de que me asignaron un int, poner un número en él, y luego acabo de hacer nada con él? Así que funcionalmente, no. Eso no va a romper el programa. Es sólo un poco estúpido, ¿verdad? No hay valor para haber pedido ese número, almacenados en una variable, si nunca vamos a hacer nada con ella, ya sea imprimir o guardar. Así pues, en este caso, Clang está reconociendo como mucho, y que está diciendo sin usar la variable n. Así que podemos arreglar esto, si realmente queremos. Pero de nuevo, esto no es una buena programación ahora. Así que sólo podía hacer esto - bajar aquí, déjame limpiar la pantalla, hacer matemáticas. Eso funciona. Ahora puedo ejecutar mi programa de matemáticas, toma de entrada - bueno, eso era malo. Toma de entrada, y que es todo lo que hace, en este caso. Así que en realidad, vamos a probar un caso, otra esquina que no pensó antes. En este caso - aquí, vamos a volver a la que es una poco más fácil de usar. Déjame volver aquí y hacer funcionar de nuevo las matemáticas. ¡Vaya, qué hice mal? Tengo que hacer retroceder aún más. Bien. Ahora estamos de vuelta en el estado original, donde todos es de esperar también. Y ahora si me quedo matemáticas, 123 parece funcionar. Pero esto no es realmente una prueba eficaz, por decir sólo bien, eso funciona. 789, que funciona. Es hora de presentar. Porque hay otros casos de esquina aquí. Una cadena que realmente no nos dan muchos problemas al escribir un gran cantidad de personajes. Pero ¿y si escribo en esto? Dar en el número 1 de mucho, mucho aquí - bien, se está haciendo un poco aburrido, así que voy a parar aquí, y voy a presionar Enter. ¿Qué demonios ha pasado? Así que en realidad esto puede ser explicado. Así que se lo toma como binario? Un buen pensamiento, pero no, no es el hecho de que se tomó como binario, porque en realidad, eso era sólo una especie de coincidencia. Podemos hacer esto otra vez. Así que no hay 2 en el sistema binario, que es probablemente suficiente de todos modos. Intro. Así que ese no era el problema. ¿Qué más? Exactamente. Así que pensar en volver a lo que realmente es un int. Es 32 bits que colectivamente se interpretan como un número. Si tiene 32 bits, que significa que cada uno de los bits puede ser un 0 o un 1, 0 o un 1. Así que eso significa que hay dos posibilidades para este bit, dos posibilidades para esto, dos posibilidades para esta bit - por lo que es 2 veces 2 veces - de manera que es 2 a la potencia 32 es el número total de permutaciones de ceros y unos, si usted tiene 32 marcadores de posición, ceros o unos, en frente de usted. Así que si tengo 2 a la 32, matemáticamente, que es lo que? Así que es mucho. Son las 4 millones de dólares, más o menos. Y 4 mil millones no parece ser lo que fue impreso aquí. De hecho, esto se ve más cerca de 2 millones de dólares. Pero esto no es una coincidencia. El hecho de que el ordenador se ha malinterpretado mi número enorme, mi enorme secuencia de unos y entonces mi gran secuencia de dos en dos, ya que alrededor de 2 mil millones, se explica cómo? Hay un límite en el int. Hay un sin duda un valor máximo que se puede representar. Pero por lo general es 4 mil millones, ¿no? Si 2 a la 32 es aproximadamente 4 mil millones, que parece que es el mayor número. Así que no es un residuo, sino un buen pensamiento. Los números negativos. Así que si usted tiene 4000 millones las cosas posibles que puede representar con estas diversas permutaciones de 32 0 y 1s, bueno, es lógico pensar que los seres humanos puede ser que desee representar no sólo números enteros positivos pero enteros negativos. Y de hecho, esa es la suposición de que C hace. Así que con 32 bits, puede representar aproximadamente 2 negativo millones de todo el camino hasta positivo 2 mil millones. Y así, en este caso, lo que realmente estamos viendo es sólo al margen de la capacidad de nuestro entero, y tenemos, por lo que para hablar, se desbordó un número entero. Hemos tratado de meter más bits en lo que realmente puede encajar. Así, el resultado final es que tienen esencialmente las 1 bits. Hemos volteado todas nuestras bits en, hemos tratado de representar el mayor número posible, pero es evidente que no es casi lo suficientemente grande como para representar las dos cosas que acabo escrito pulg ¿Sí? AUDIENCIA: [inaudible] DAVID J. MALAN: Buena pregunta. ¿Por qué no podemos simplemente representa que negativo como se acaba de firmar un personaje? Así que es absolutamente posible, y entonces podríamos ahorrar un bit adicional. Sin embargo, usted todavía va a tener que representar ese guión, y que te va a costar por lo menos algo, presumiblemente un poco. Así que sí, podríamos tener 32 bits que se utilizan para obtener el número, pero ahora necesitamos otro poco utilizado para nuestro guión símbolo, el signo menos. Así que ahora tenemos 33 valores de bit, lo que podemos hacer, pero es No de la manera que se hace. Hicimos una sentencia de llamada hace años, 32 bits es una especie de unidad de medida aquí. Así que vamos a usar uno de estos bits con eficacia a representa la negatividad, y 31 bits para representar el número. Otras preguntas? Está bien. Eso es mucho. ¿Por qué no seguir adelante y tomar nuestros cinco minutos de descanso aquí? Está bien. Así que de nuevo, no poner demasiado énfasis en las aplicaciones matemáticas de la programación, vamos a arrancar este ejemplo antes de pasar a otras construcciones, sólo porque se ilustran algunos puntos de tropiezo comunes en algunos de los conceptos básicos a la hora de escribir programas. En este caso, haciendo expresiones aritméticas que tienen algún relevancia interesante a la sintaxis. Así que esto es sólo una fórmula con la que podemos convertir temperatura de Fahrenheit a Celsius. Si usted no recuerda, esto es sólo la fórmula. Así que si lo conectamos en Fahrenheit valor de 32 grados, que es congelación, que va a ser 32 menos 32 es 0, y de hecho, 0 en grados Celsius es también la congelación. Así cordura registro rápido allí - esa es la fórmula familiar. Permítanme pasar al aparato, sin embargo, y comenzar escribir un programa que se llama, como, f2c, "Fahrenheit a Celsius punto c ". Y en la parte superior aquí, voy a empezar con # include stdio.h, y yo voy a hacer int main (void), y otra vez, volveremos en el futuro en cuanto a qué significa int allí y lo vacío significa que hay. Y ahora déjame seguir adelante y poner en práctica un programa que básicamente hace esta conversión para nosotros. Así printf, digamos, la temperatura en grados Fahrenheit. Y luego me deja seguir adelante y obtener el valor para el usuario. ¿Qué tipo de valor debería obtener de los usuarios, si quiero que me dieran una temperatura en Fahrenheit? ¿Sí? ¿Qué te propones? Si. Así flotador se siente bastante razonable. Tenemos, de nuevo, sólo algunas opciones que que hemos visto hasta el momento. Tenemos cosas como char, float doble, int, long long, bool, string. Así que de estos, el flotador se siente bastante razonable. Nos vendría bien un derecho doble, porque, si de verdad queremos representan la temperatura de un ser humano - 98,60000 - podríamos utilizar 64 bits para hacer eso, pero se siente como exageración para la temperatura. Así que vamos a ir con flotador. Ahora necesito una variable. Sólo para no complicar las cosas, voy a llamarlo f, pero bien podría llamarlo correctamente la temperatura, pero tampoco está bien. Así float f = GetFloat. Tan pronto como ahora ha decidido utilizar GetFloat, sin embargo, me necesita hacer una corrección. Si. Así que tenemos que incluir # , de lo contrario el compilador va a gritar a nosotros. Ahora que tengo un flotador, déjame ir adelante y hacer el conversión. Así que primero, permítanme entrar en el hábito de aquí comentando mi código. Así que de nuevo, un comentario es sólo una notación para el ser humano que es no forman parte del programa en sí, pero uno, que ayuda entender lo que hizo al día siguiente, ni el siguiente meses, ayuda a su compañero de enseñanza entender lo que hiciste o lo que pretendía hacer, por lo que es práctica general muy bueno. Cada pocas líneas de código, escribe un comentario a usted o su compañero. Así que aquí, voy a decir: "Preguntar al usuario para la temperatura." No tiene que ser una frase completa, sólo una frase corta. Pero la idea detrás comentando en C es que cada uno de sus observaciones en caso de que la autonomía - o, digamos, un TF o un colega - a rozar su programa y saber exactamente lo que hace, no por tanto la lectura del código, pero al leer los comentarios que, debe ser breve y claro. Muy bien, así que ahora quiero seguir adelante y decir, "Convert Fahrenheit a Celsius. "Así que voy a seguir adelante y hacerlo, digamos, flotar c. Vamos a seguir Celsius como un valor de punto flotante. Y déjame tomar una puñalada en esto. La fórmula es, de nuevo, hasta aquí. Como 5.9 veces menos F 32. Así que vamos a hacer esto. Así que 5 dividido por 9, menos - ¡Vaya, me lo arruinó todo ya. Times. Así que 5.9 veces menos F 32. Así F menos 32, punto y coma. Y ahora, aquí, voy a seguir adelante y decir, imprimir resultado. Y esta parte es fácil. Printf. ¿Cómo hago para imprimir esto? Bueno, podría decir: "Ese número en grados Celsius es% f \ n", sólo para algunos estética. Y entonces, ¿qué valor es lo que quiero conectar aquí como de printf El segundo argumento? Bien. Así que c. Así que vamos a empezar con esto y luego simplemente devolver 0. Una vez más, no tiene nada que ver con las matemáticas. Sólo significa que todo está bien. Ahora, ¿es esto correcto, este programa? Está bien. Así que he cometido algunos errores. Incluso si usted no tiene idea de lo que es la programación, puede ordenar de vuelta a la escuela primaria inferir lo que la errores aquí podría ser. ¿Cuál es uno de los primeros? AUDIENCIA: [inaudible] DAVID J. MALAN: Si. Así que nos falta paréntesis. Fue deliberado que hice paréntesis en la keynote deslice aquí, porque no hay en realidad esta noción de orden de las operaciones, o precedencia, en el que ciertas operaciones - multiplicación - tienen una mayor unión, tienen mayor prioridad, que las cosas como suma o resta. Para ello hemos hecho esto durante años sólo para dejar en claro exactamente qué operación matemática se debe hacer primero. Así que probablemente debería imitar exactamente esto. De lo contrario, el equipo está probablemente va a tratar de hacer algo así como dividir 5 por 9, y luego multiplicar F, luego restar 32 de todo el asunto. Lo cual no es, de hecho, lo que queremos hacer. Así que vamos a poner entre paréntesis. Vamos a añadir mis paréntesis aquí, paréntesis aquí. Vamos a poner esto aquí. Aquí, me di cuenta de otro error que cometí en el camino. ¿Sí? AUDIENCIA: [inaudible] DAVID J. MALAN: Ah. Bueno. Así que en realidad tienen el mismo número entero división cuestión de antes. Puedo corregir eso, vamos a ver lo que el síntoma es. Pero vamos a tener que corregir una otro error aquí. ¿Sí? AUDIENCIA: [inaudible] DAVID J. MALAN: Si. Por lo tanto, el error estúpido que hice, pero increíblemente importante. El equipo no se va a convertir sólo la vista gorda y dejar que usarme F capital, cuando en realidad declarado la variable como una f minúscula aquí, en la línea 8. Así que tengo que corregir en mi línea 11 capitalización, que un momentos antes era una F mayúscula por error. ¿Qué pasa aquí? Si esto no fuera así en minúsculas? Debe ser, sino que es una coincidencia. Eso% f no tiene nada que ver con la variable. Así que para ser super claro aquí, déjame seguir adelante y cambiar el nombre de este, en pocas palabras, "temperatura". Déjame cambiar el nombre de esta "temperatura". No dejes que me cambie el nombre de esta. Porque, de nuevo, f% a nivel mundial significa, "flotando valor en puntos." No tiene nada que ver con mi variable. Sin embargo, "temperatura" por todo el lugar es un poco prolijo, así que voy a volver a mi minúscula "f" s. Ahora, déjame ir por delante hasta mi ventana aquí. Hacer f2c - que fue, de nuevo, el nombre arbitrario I dio a este archivo. Parece que ha compilado. Déjame correr f2c. Intro. La temperatura en Fahrenheit - vamos a hacer fácil. 32. OK, corregirlos. Pero, si ahora hago 212 para hervir - maldito. Está bien. Por lo tanto, claramente no corregir, si el TF intenta al menos dos valores. Entonces, ¿cuál es el problema aquí? Bueno, ya poner el dedo en cuál es el problema. Pero ¿por qué es así? Hasta aquí, cuando estoy haciendo la matemáticas de 5 dividido por 9. Entonces, conceptualmente, es perfectamente correcto. Totalmente coherente con la fórmula. Pero los ordenadores sólo hacen precisamente lo que les dicen que hagan. Y lo que estamos diciendo la computadora efectivamente aquí es dividir el entero de 5 por el número entero 9 y me da el resultado. El problema es, sin embargo, cuando se utiliza la división de datos tipos, la salida es el mismo tipo de datos que las entradas. Y así, si las dos entradas son a la vez ints, la salida se va a ser un int. Y así que 5 dividido por 9 es algo punto. Pero ¿cuál es el número entero más cercano al punto algo? Por lo tanto, en realidad es 0. Así como discutimos el lunes, después de todo el decimal punto queda truncada. Sólo se tira. Así que esto es un completo error, porque puede ser que también acaba de multiplicamos todo por 0 aquí. Ahora, puedo arreglar esto en un par de maneras. Yo podría hacer esto. 5,0 dividido por 9,0. Técnicamente, no tienes necesidad de hacer eso. Esto es suficiente para que sólo uno de los números de un flotador - o doble - al poner el punto decimal aquí. Porque lo que sucede ahora es cuando se divide un entero un flotador, o un doble, el equipo va a dar cuenta oh, uno de ellos es más preciso. Permítanme errar por el lado de darle más precisión que usted pretende. Así que convertirá el resultado - devolverá el resultado como un valor de coma flotante también. Así que iba a funcionar. Esto funcionaría. Y no hay un mecanismo distinto que vamos a ver en mayor detalle la próxima semana. En realidad se puede, ya que el programador, decirle a la computadora para tratar realmente un tipo de datos como si fuera otro. Así que yo podía hacer esto. Entre paréntesis, puedo decir algo como (float), abierto Paren, paren cerca. Y esto es lo que se llama "casting". Una vez más, más en esta próxima semana. Pero esto es sólo la forma programática de contar la computadora, sí sé 9 es un número entero o una larga. Yo sé que no es un valor de coma flotante. Pero tratarla como tal de todos modos. Así que para convertir un tipo de datos significa convertir de una a la otra. Francamente, esto es sólo un poco feo, así que me propongo ir respaldar a la sugerencia original de sólo convertir estas cosas a valores de punto flotante de forma manual. Por ahora es sólo súper claro lo que está pasando, y no es todo lo que distrae. Así que ahora vamos a ir de nuevo en mi ventana de terminal. Hacer f2c. Déjenme seguir adelante y ejecutar este. Y, en un aparte, te aburres escribiendo estos comandos una y otra vez, se dan cuenta que las computadoras, como Linux aquí, tienden a ser bastante inteligente. Y si golpeo para arriba, podemos ir a través de mi historia entera de comandos, arriba y abajo. Así que en este caso aquí, puedo ir hasta ejecutar make f2c. Estoy siendo gritado, porque yo sólo hice hace un segundo. Ya está actualizado. Así que ahora puedo correr f2c nuevo. Vamos a tratar de 32 grados Fahrenheit. Ahora vamos a tratar de 212 grados Fahrenheit. Phew. Parece que funciona. Ahora, esto es bueno, pero se siente un poco arbitrario que Estoy mostrando seis números después de los puntos decimales. ¿Cierto? Si usted es la persona el tiempo en TV, eres una especie de doofus si estás leyendo la temperatura a este grado de precisión. Así que vamos a simplificar esto. Así que en realidad van por aquí, a mi printf. Y sí, quiero flotar. Pero quiero precisar ahora la precisión. Y yo voy a ser un poco breve. Yo voy a decir, dame un punto después del punto decimal. Así que en lugar de decir f%, yo voy a decir% .1 f. Y esto sólo significa dame una posición después del punto decimal. Está bien. Vamos a intentarlo de nuevo. Permítanme volver a ejecutarlo después de compilar. Y ahora escribo en 32 años, y que vuelva a más sucinta valor. Y puedo escribir, ahora, 212, y volver a una más sucinta valor también. Y hay otras cosas que puedes hacer con printf. En realidad se puede especificar el ancho de la cantidad que debería ser. Si usted quiere tener acolchado en él, para que pueda alinear a la derecha o izquierda alinear todos los números o tratar de centrar las cosas. Así que darse cuenta de que hay pequeños trucos que se pueden hacer allí. Pero sólo se reducen a los códigos de formato, como el que tenemos allí. Así que en términos de esta cuestión de precedencia. Esta es una tabla muy aburrido ir a través metódicamente. Pero darse cuenta de que los autores de C han llegado a la reglas que especifican que los operadores tienen una mayor prioridad, más poder vinculante, que otros. Así, mientras que en la escuela primaria, por lo general sabía que era multiplicación y división, luego suma y resta, entonces algunas otras cosas. En un mundo de la programación, hay un gran ya lista de las cosas. Y esto no es algo que vale la pena memorizar ahora. Vas a aclimatarse a ella antes de tiempo. Pero al igual que en la escuela primaria, generalmente entre paréntesis resolver las cuestiones de prioridad, haciendo la súper clara a la computadora y humanos por igual lo que se pretende. Así que considere esto un poco chuleta allí. Pero la mayoría de esos detalles que no se llega a un tiempo. Está bien. Ahora, vamos a construir y alejarse de estos poco tonto ejemplos matemáticos. Siga utilizando los mismos fundamentos, pero el comienzo expresarnos un poco más como Scratch. Así que en Scratch, teníamos estas expresiones booleanas. Y en Inglés, una expresión booleana es lo que? Verdadero o falso. Es algo que se evalúa como verdadera o falsa. 1 o 0. Encendido o apagado. Lo que sea que quieras llamarlo. Ahora en Scratch, las piezas del rompecabezas se veía así. Y esa es la combinación, en la parte inferior hay, de tres piezas de un rompecabezas. Una conjunción - algo que tiene en blanco y en blanco. Y luego dos expresiones booleanas dentro de ella. Así que usted puede anidar expresiones booleanas para obtener más complicadas expresiones booleanas. Por ejemplo, si es sábado, y es agradable tiempo, y luego salir a la calle. O algo arbitrario así. Así que usted puede unirse a expresiones booleanas para llegar a un mayor valor de la verdad, cuya respuesta se basa en los más pequeños. Ahora, en C, por suerte, esta asignación es en realidad bastante simple. Los paréntesis ayudar a aclarar las cosas aquí. && Es lo que significa "y". Así es como vamos a convertir esos bloques de Scratch para C. Y para las condiciones que vimos en Scratch, en la mano izquierda lado allí, se pueden apilar de manera similar en C. Si x es menor que y, a continuación, hacer esto. Porque si x es mayor que y, a continuación, hacer esto. Otras ventas lógicamente deben ser iguales, por lo que dicen que son iguales. Así que ahora podemos comenzar a construir estas cosas. Así que vamos a hacer un ejemplo. Permítanme abrir un archivo que está en la página web de la asignatura que Yo escribí con antelación. Eso se llama nonswitch.c. Y vamos a ver por qué en un momento. Así que en este archivo - nonswitch.c-- cuenta por primera vez que hay un montón de comentarios en la parte superior. Eso es sólo explicar el nombre del archivo, lo que hace, y así sucesivamente. Y, al parecer, se muestra el uso de los operadores booleanos AND-ing - conjugar dos expresiones. Así que vamos a ver cómo funciona este programa. Incluyo mis dos archivos, cs50.h y stdio.h. Si desplácese hacia abajo, ahora, para el programa, que es un poco más largo de lo que hemos escrito antes, pero bastante legible. Así que primero imprime al usuario, en la línea 18, "Dame un número entero entre 1 y 10." Tan que está justo ahí. Ahora tengo el entero. Pero darse cuenta de que getInt - bastante simple. Es sólo va a conseguir un int. Esto va a asegurarse de que recibe un int y no un cadena o un flotador. Pero no va a hacer ningún tipo de comprobación de límites. No va a filtrar los números a ser entre un cierto rango. Así que tenemos que poner en práctica que nosotros mismos. Así como en Scratch, donde podría hacer una conjunción de dos expresiones, puedo hacer eso en C como sigue. Si n es mayor que o igual a 1, y n es menor que y o igual a 3, voy a muy arbitrariamente decreto que número a ser un número pequeño. Sólo por el bien de un comunicado. Porque si n es entre 4 y 6, print "Usted escogió un medio número. "De otro modo, si n es entre 7 y 10, escriba" escogido usted un número grande. "Else print" Usted escoge un número no válido ". Porque, lógicamente, que sigue si hemos agotado nuestra gama. Así que darse cuenta de esto no es del todo cómo escribimos mayor o igual en una clase de matemáticas. ¿Cierto? Por lo general, dibujarlo así, con la línea debajo de ella. Pero no hay tal clave en mi teclado. Por lo tanto el símbolo en C para expresar mayor o es igual a dos personajes, y el símbolo de menos de o es igual a dos personajes también. Está bien. Así que si ejecuta este programa, que es fácil adivinar lo que es vamos a hacer. Si vuelvo a ir adelante y hacer nonswitch, Enter. Y a continuación, ejecute nonswitch. Dame un número entre 1 y 10. Yo voy a dar 11. Elegí un número no válido. Voy a tratar el número 3. Elegí un número pequeño. Así que hay bastante sencillo. ¿Qué pasa si quiero cambiar el comportamiento de este programa y hacer algo un poco diferente en su lugar? Déjenme seguir adelante y decir esto. Déjame deshacerme de todo esto. Y permítanme decir if (n == 42). Y luego voy a seguir adelante y decir print "Usted tomó la respuesta correcta. "De otro modo vamos a seguir adelante y decir, printf ("Elegiste la respuesta incorrecta ");. Okay. El hecho de que. Ahora, algunos puntos que podemos hacer aquí. Uno, que no escriba el símbolo que se podría pensar es el más razonable. Cuando desee comprobar la igualdad, resulta que usted no utilice el signo igual. En su lugar, use el signo de igual a igual. ¿Y por qué podría ser eso, sólo intuitivamente? Si. AUDIENCIA: [inaudible] DAVID J. MALAN: Correcto. El signo igual se utiliza ya para la asignación. Alguien realmente no pensar en esto. Y ahora, cuando se trata de pruebas de igualdad, tenemos que ser más explícito, y decir igual a igual. Un error muy común es hacer esto. Y, si en horario de oficina o una semana en algún lado o en el próximas dos semanas se hace algo como esto y luego luchar con él durante 10 a 20 minutos tratando de averiguar lo que el bicho maldito es, darse cuenta de que usted es uno de los personas que hicieron este error. Por lo tanto, muy fácil de hacer. Pero el objetivo ahora es evitar este error. Esto podría evaluar, porque lo que se esta diciendo en realidad? Si n se hace 42. Así que la gente verbo usar, verbalmente, para expresar el concepto de asignación es "consigue". Así que si n se hace 42. Así que eso significa asignar 42 a n. Ahora tengo una expresión booleana entre paréntesis, dentro de esta condición, el valor del cual es 42. ¿Cierto? Porque si lo evaluará de adentro hacia afuera, el total respuesta, ahora, es de 42. Así que si usted hizo la pregunta, "si (42)," lo que es que realmente está diciendo? Pues bien, las expresiones booleanas sólo pueden ser verdaderas o falsas. 1 o 0. Encendido o apagado. Así que parece que tenemos aquí un caso de esquina, en el que todos de una repentino, estoy diciendo "si (42)". Eso no es un valor booleano. Entonces, ¿qué hacen las computadoras, sin embargo, es que esencialmente equivale nada que no sea 0 se interpreta para ser verdad. 1. On. Todos son funcionalmente equivalentes. Sólo el valor 0, la palabra clave o falso, como veremos finalmente ver, en realidad es falsa. Así que "si (42)" en realidad sería verdad, porque es distinto de cero. Así que para ser más precisos aquí, un valor booleano no es realmente tan Cierto o falso, pero para este caso, si es 0 o distinto de cero. Así falsa o no falsa. Y eso nos permite abarcar tanto más posibilidades en la expresión entre paréntesis. Así tenemos que, con tanta precaución, decir esto - si (n == 42). Simplemente porque tenemos que especificar una prueba de la igualdad, no una asignación de un valor. ¿Qué otra cosa es la pena señalar aquí? Estas llaves no son realmente necesarios. He estado haciendo sólo para ser quisiera hilar fino quisquilloso aquí. Pero cuando usted tiene una condición que sólo tiene una línea de código, para su conveniencia, los programadores no es necesario utilizar las llaves. Basta simplemente guión, por razones estéticas, y a continuación, escribir la línea de código. Sólo cuando se desea escribir dos líneas de código - para ejemplo, else printf ("¡Adiós!"). Si usted quiere hacer que, no funciona. Puede sangrar todo lo que quieras, pero el hecho de que tiene escribir dos líneas de código sin necesidad de utilizar llaves significa que este programa no se ejecuta correctamente o podría Ni siquiera compilar correctamente. Así que por ahora, para ser honesto, creo que el mejor hábito es sólo utilizar las llaves, y te darás cuenta de que hacen súper claro lo que está pasando. También, como un aparte - especialmente si usted está entre aquellos que utilizan los libros recomendados o recursos en línea - darse cuenta de que existe esta noción de estilo en programación. Y algunas personas prefieren poner la llave de cierre aquí en una línea. Algunas personas prefieren hacer cosas ridículas, como poner aquí. No hay una respuesta equivocada a la hora de estilo, pero esto es incorrecto. Sin embargo, algunas personas lo hacen. [Risas] DAVID J. MALAN: Así que hablar de esto ahora, simplemente porque como leer sobre cosas en los libros o en línea, usted va a obtener diferentes mensajes de diferentes maestros y diferentes autores. Y sólo se dan cuenta de que, funcionalmente, son generalmente equivalente, pero sea constante. Así que en este caso, vamos a normalizar el rizado llaves alineando aquí a la izquierda. Está bien. Así que vamos a seguir adelante ahora y ejecutarlo, y ver qué pasa con este programa. Hacer nonswitch. A continuación, ejecute nonswitch. Dame un número entero entre 0 y - por lo que no es relevante más, pero yo sólo voy a decir arbitrariamente 42. Y he elegido la respuesta correcta. Bueno, en realidad vamos a tomar esto en una dirección diferente. Resulta que hay un poco de otra sintaxis que puede utilizar en un programa. He aquí una nueva pieza de sintaxis que es funcionalmente el mismo, pero sólo introduce otra manera de expresarnos. Así que esto es lo que se llama una "declaración de cambio". Y un declaración interruptor funciona como sigue. Se requiere, entre paréntesis, el valor que desea "Interruptor" on. Usted quiere comportarse de manera diferente en función de su valor. Por lo tanto esto significa que el interruptor en el valor de n. ¿Y qué significa esto? Bueno, si n es 1 ó 2 ó 3, adelante e imprimir "Usted elegido un número grande "y luego romper. La razón de la ruptura es que la forma C es como funciona pronto como se encuentra un caso que coincide, comienza la ejecución todo el código debajo de ella. Así que si tengo una línea de código, como lo hago aquí en la línea 27, se es ejecutado. Si añado otra línea aquí, el fichero es ejecutado. Otra línea aquí, el fichero es ejecutado. El programa sólo deja de ejecutar lo que está por debajo de la declaración de caso aplicable cuando explícitamente decir "romper". Tan mal. Derecha, en este caso, como consecuencia de ello. 4 Caso o 5 o 6, de manera similar, va para imprimir un mensaje. En este caso, el número medio. Salto. Caso 7, 8, 9, 10, que va a imprimir "Elegiste un gran número. "Break. Y luego está, literalmente, una palabra clave denominada "default" que es eficaz como el "otro" constructo. Así nueva sintaxis, pero intelectualmente, nada nuevo aquí. Es como el Scratch. Si, de lo contrario si, de lo contrario si, tipo de bloque. Así que esa es la versión conmutada de este programa. Pero note que lo hicimos con números aquí. Permítanme abrir una segunda versión, sólo para mostrar algo un poco más concreto. Así que aquí tenemos grados en su lugar. Resulta que se puede utilizar switches no sólo en números enteros, pero en personajes. No en todos los tipos de datos, pero al menos en caracteres. Así que aquí, podríamos hacer algo como si el valor de C que el usuario escribió, en la línea 19, con la función GetChar, es mayúscula o minúscula a, vamos a interpretar como una calificación, y dicen que recogió una calificación excelente. Y abajo a lo largo de la instrucción switch, tenemos otro casos de "B" s y "C" s, y así sucesivamente. Pero ahora vamos a completar otra cosa. Y de nuevo, una especie de volar a través de algunos de estos ejemplos. Pero en realidad es para que podamos aplicarlas, ahora - o en realidad, sólo tiene que traducir ahora - a C. Así que déjame ir adelante y hacerlo. Voy a abrir un nuevo archivo. Y yo voy a hacer include. Y luego me voy a hacer int main (void). Déjame guardar este archivo como una loop.c. Sólo como un ejemplo. Y voy a seguir adelante y hacer lo siguiente. Quiero escribir un programa muy tedioso. Así 10. Vamos a hacer esto. 9. Está bien. Tan pronto como usted comience a hacer esto en la programación, usted es probablemente haciendo algo mal. Pero vamos a empezar por ahí de todos modos. Oops. Eso es realmente malo. 7. 6. 5. 4. Nada de lo que va a pasar cuando lleguemos a 0. 3. 2. 1. Bien. 0. Eliminar. Está bien. Así que devolverá 0. Así que este programa es, obviamente, va a hacer lo mismo tediosamente dice que va a hacer. Se va a imprimir todos los valores, de arriba a abajo. Así que me hacen bucle. Y entonces - gritos. Hacer circular. Yo estaba en el directorio equivocado. Y ahora déjame correr bucle. Intro. Woohoo. Muy bonito. Programa Niza, mucho tiempo. Está bien, pero ahora vamos a hacer esto mejor. Al igual que en Scratch, cuando comenzó a utilizar un bucle construir, en lugar de simplemente copiar y pegar toda la piezas de un rompecabezas, permítanme presentarles a esta cosa. Así que en C, hay varias construcciones de bucles, uno de los cuales tiene este aspecto. Un bucle "for" tiene tres cosas, separados por dos puntos y comas. Y, a continuación, en el interior del cuerpo del bucle, por así decirlo - la cosas dentro de las llaves - podemos hacer algo una y otra vez. Así que lo que tenemos aquí en la pantalla, esto es literalmente, sólo un comentario. El / / significa aquí viene un comentario. Este no es el código. Esto es sólo descripción de Inglés, para mí, el ser humano. Así inicializaciones, condiciones y actualizaciones. Bueno, vamos a ver cómo funciona esto. Esto me permite reescribir el programa de la siguiente manera. For - así que aquí viene mi loop - int i - aquí viene una variable llamada "i" - se inicializa a 10. Así que ahí está mi inicialización. Quiero hacer este circuito tan largo como "i" es mayor o igual a 0. Y en cada iteración de este bucle, quiero hay que hacer? -. Así que vimos + + el lunes. - Es el opuesto. Se reduce el valor de 1. Dentro de este ciclo, lo que quiero hacer realmente algo. Así que voy a decir algo como printf. No quiero decir que 10 ahora, porque esto obviamente es va a imprimir el mismo valor. ¿Qué es lo que quiero imprimir en cambio, probablemente? Si. Así que "i". Así que% d, i. Así que me voy a robar una de esas ideas de antes - esta sustitución de códigos de formato - y aquí abajo, en el fondo, voy a devolver 0, sólo por si acaso. Pero ahora, tengo un programa más sucinta. No es más que unas pocas líneas, y algunas líneas no 10 o 11. Déjame ir a mi mensaje aquí. Remake bucle. Vuelva a ejecutar el bucle. Y lo que parece ser la misma. Ahora, el programa no es más interesante. Pero ahora puedo escribir algo como esto. Yo puedo cambiar esto a 100. Luego puede volver a compilar mi programa. Y entonces puedo volver a ejecutar mi programa. Y ahora va super rápido en los ordenadores de hoy en día. Pero no tengo - y, de hecho, mi memoria de retroceso no incluso ir tan lejos. Ahí vamos. Así que ahí tenemos todo 100. Pero es fácil cometer errores aquí. ¿Cuál va a ser el comportamiento esperado si accidentalmente hacer eso? Así que se siente como infinito. Así que vamos a ver si el equipo se comporta. Así que déjame ir adelante y hacer bucle. Y déjame correr bucle. Así que vamos a volver a eso en un momento. Vamos a dejar que esa ejecución. Porque lo que debemos contar hasta, como mínimo? Es probable que al menos 2 millones de dólares, si tenemos que muchos bits, y estamos usando valores positivos. Así que vamos a volver aquí. Frente a este tipo de bucles, tenemos lo que se llama tiempo bucles. Por lo tanto, al igual que en Scratch, usted tenía siempre bloques, bloques y tenías que repetir. Del mismo modo, en C, sólo hay otras maneras de expresarse. Por lo que tiene esta noción de un bucle while que le permite expresarse de manera diferente. Y luego hay algo que se llama un bucle do-while, que funciona ligeramente diferente también. Y vamos a molestar estos aparte con el tiempo. Pero echemos un vistazo a este último aquí. Si entramos en - sigue funcionando. Es bastante infinita. Así que déjame ir en positivo, y mostrar cómo podemos realmente gobiernan la entrada del usuario un poco más eficaz. Es un programa bastante corto. Y aquí tenemos, en principal, una declaración int n. Así que dame una variable llamada n. Ahora, yo digo literalmente "Hacer". Y luego tengo abierto rizado abrazadera, llave de cierre cerca. Y después se da cuenta, después de eso, se dice que aunque n es menor que 1. Así que notar que estas líneas - 19 a 24 - redactar colectivamente un bucle do-while. Y de nuevo, la sintaxis nueva, no es una idea nueva. Es sólo otra forma de bucle, sintácticamente. Entonces, ¿qué hace esto? Hacer lo siguiente mientras que n es menor que 1. Entonces, ¿qué es lo que quiero hacer? Exijo que me des un entero positivo. Entonces yo realmente tratar de obtener un número entero de parte del usuario. Pero en términos de la orden de las operaciones aquí, debido a que el mientras condición es aquí, entonces me va a comprobar, es n menos de 1? Así que supongamos que el usuario - después de ser exigido de esta manera - tipos en el valor 0. Esta condición va a ser verdadera o falsa? Bueno, en realidad va a ser verdad. Dado que n es 0, y 0 es menor que 1. Entonces, ¿qué implica eso? Hazlo de nuevo. Hazlo de nuevo. Hazlo de nuevo. Sólo una vez que la condición se evalúa como false. Si escribo en 42. Pues no, 42 no es menor que 1. Por lo tanto, este bucle se realiza ejecutando. Y así, en ese momento, el programa va a decir, gracias por el 42, en este caso. Ahora que tiene esta forma de expresarse - No debemos esperar a que esto termine. Va a tomar algún tiempo. Continuará la próxima vez, tal vez. Pero ahora, usted tiene la capacidad de entender una suerte poco de humor geek. Disculpas. Esto no es representativo de humor en la ciencia de la computación mundo, pero es lindo. Final [risas] Vamos en esa nota. Y nos vemos el lunes. [Aplausos]