[Powered by Google Translate] [MÚSICA ROCK] [MÚSICA - "Happy Together" LAS TORTUGAS] David Malan: Hoy comenzamos nuestra exploración de la fundamentos de la ciencia de la computación y la introducción, Ahora, a la técnica de programación, de los cuales es que sólo un ejemplo. Pero en el mismo sentido de la resolución de problemas, saben que Día Puzzle tradicional CS50 es mañana. Si aún no has enviado un RSVP para el evento, usted puede ir a cs50.net/rsvp. Usted puede traer equipos de dos o tres o cuatro. Usted será desafiado con problemas como el que viste allá en el principio. Todos los nuevos problemas este año si participó el año pasado, y tendrá la oportunidad luego de ganar premios fabulosos. Entre ellos, un Wii y algunos certificados de regalo y artículos similares, a la vez que salir con CS50 estudiantes y compañeros de clase y la pizza y Facebook. Así que más que el mañana si quieres. Esta es, pues, CS50, para aquellos de ustedes unirse a nosotros para la primera vez. Y sé que este curso está especialmente decidido a conseguir a través de este curso hasta su término final, momento en el que tendrá no sólo una comprensión de estos fundamentos de la informática, sino que tendrá que esta habilidad muy práctico conjunto que puede tomar de nuevo a su propio departamento, si se trata de ciencias de la ingeniería, matemáticas aplicadas, las ciencias físicas y naturales ciencia, o similares. En efecto, ¿qué es tan emocionante de la informática estos día es que es tan sólo aplicable a los todo tipo de campos. Y aunque hoy en día, sólo arañar la superficie de un lenguaje de programación muy tradicional conocido como C, vamos a en lugar de mirar a algo llamado Scratch, algo con que esa historia de amor cookie fue ejecutado por uno de sus predecesores en los últimos años, a contar historias, crear juegos, para crear arte interactivo, y para realmente empezar a envolver nuestro mente alrededor de algunas de las construcciones fundamentales que subyacen en la programación, pero en un contexto, como se verá, es que mucho menos miedo, eso es mucho menos misterioso, de lo que se ve en poco tiempo. Y darse cuenta, también, para aquellos de ustedes que nos acaba de unirse a este semestre, las frases en que terminamos conferencia del miércoles, no es tan importante cuando usted termina su relación con compañeros de clase en esta clase, pero en el que, por el final del semestre en la semana 11, terminan con respecto a ti mismo en el día de hoy. Así que sin más preámbulos, este es también digno de mención que los menos cómodo, aquellos en algún punto intermedio, están también, por su diseño de este curso, no a cualquier desventaja vis-a-vis los más cómodo que entra en esta categoría. Como verás en las semanas por venir, tenemos diferentes pistas de fondo de nuevo dispares, secciones para los menos cómodo, más cómodo, aquellos en algún lugar en el medio. Como podrá ver este fin de semana y la próxima semana, dos versiones de la mayoría de los conjuntos de problemas, tanto en edición estándar y hacker para que todos puedan auto-selecciona por el camino con el que se sienta más cómodo. Así que hoy, nos sumergimos en esta programación lenguaje llamado Scratch. Es un lenguaje de programación gráfica, y sin embargo tiene la mismas características de algunos de los lenguajes de alto nivel que vamos a explorar más adelante en el semestre, entre ellos C y JavaScript y PHP. Pero va a permitir a nosotros para evitar algunas de las distracciones desde el principio de la sintaxis, las cosas como puntos y comas, paréntesis, y otros detalles arcanos que, a primera vista, no son en absoluto intelectualmente interesante y tienden a ponerse en la forma de una cierta comprensión fundamental. En términos de la estructura de soporte ahora por delante, se dio cuenta de esto herramienta, CS50 Discutir, que estará vinculada a la del curso sitio web el día de hoy, es el foro de discusión en línea en el que serás capaz de hacer preguntas a los demás y personal, y es también una herramienta, como veremos la próxima semana, que vamos a utilizar muy integradamente en las horas de oficina también. De hecho, las horas de oficina comenzará el lunes, y francamente, el primer semana del horario de oficina es bastante bajo llave. No creo que usted encontrará todo lo que Rasguño inaccesible. Es bastante explica por sí mismo, como vamos a ver, ¿y qué lo usaremos para hoy es para extraer algunas de las las ideas fundamentales que, por tanto, persisten a lo largo de la resto del semestre. Pero a partir del lunes, a las 8:00 PM hasta 23:00 será en horas de oficina durante las vacaciones de Annenberg cerebro. Seccionamiento dos comenzará esta noche, así que en algún momento este fin de semana, ir a cs50.net/section, y te se le pedirá una serie de preguntas. Entre ellos, ¿cómo describiría su nivel de confort al día de hoy? No hay regla dura y rápida en cuanto a quién está en qué cubeta. Es justo el tipo de cosa que usted probablemente sabe si están entre los que el menos confortable o de otra manera. Y ahora, tutoriales. La especificación del conjunto de problemas para esta semana, tanto estándar y la edición pirata por igual, está en línea en cs50.net partir de ahora. Y verás que la primera de estas ediciones, la edición estándar de cada semana, va acompañado de algo de lo que llamar a un tutorial de código, una sesión dirigida por uno de los becarios de los cursos de enseñanza para guiarle a través de, proporcionar consejos, y se obtiene por un camino particular cuando se trata para iniciar estos boletines de problemas. Así, con cada uno de estos boletines de problemas, si alguna vez querer por ti mismo ¿por dónde empezar, comenzar con estos tutoriales. Y de hecho, permítame presentarle Zamyla Chan, esta año compañero docente que estará al frente de todos y cada uno uno de estos tutoriales. Zamyla? [Aplausos] ZAMYLA CHANDLER: Oh, hola a todos. Mi nombre es Zamyla. Soy un joven estudiando ingeniería en Winthrop House. Pero creo que ésta quepa en tantos cursos de informática como yo puede, por lo que estoy realmente entusiasmado de liderar este año tutoriales. Tutoriales, para mí, son una parte esencial de mi CS50 experiencia. Durante el tutorial, para todo p-set, vamos a ir a través de el conjunto de problemas juntos, mirar por encima de los problemas, el tipo de dividir para arriba en pedacitos manejables. Te voy a dar consejos, técnicas, para obtener a través de E INTRODUCCIÓN. Espero verlos a todos en los tutoriales. Si usted no puede asistir en persona, entonces por favor sintonice en línea. David Malan: Excelente. Gracias, Zamyla. Así que darse cuenta de que los recorridos son, de hecho, un viernes tarde, pero esto es deliberadamente por diseño para que aunque prefiere no asistir a clase un viernes tarde, los vídeos estarán hasta lo más rápidamente sobre el fin de semana. Así que darse cuenta de que cs50.net estarán todos los Zamyla tutoriales. Y que no es la fecha y hora de hoy, a las 3:00 PM, Harberd Hall, 104. Y algunos de los compañeros docentes también han preparado algunas observaciones para que en ausencia del acusado para darle un poco de perspectiva en cuanto a cuál es su experiencia que entra y salir de CS50 era. Así que si podíamos apagar las luces por un momento, yo te doy parte del personal del CS50. JACKSON Steinkamp: Tomé CS50 año pasado como estudiante de primer año en la caer, y absolutamente me dejó alucinado. Yo nunca había tomado clases de programación anterior, y nunca entró con toda la informática experimentar en absoluto. Y así, he oído los rumores acerca de la clase y decidió tomarlo. JULIA Mitelman: Fue muy divertido, muy atractivo. Todavía, a día de hoy - Hace poco vi que tengo el disco que David nos dio en nuestro primer día de clase. Lo había colgado en mi pared. Esto es probablemente un poco nerd, pero me quedé en en mi pared durante la clase como un recordatorio de lo bueno que era. TRAVIS DOWNS: Es tan vergonzoso. JACKSON Steinkamp: La informática es algo que debe tratar incluso si usted no es uno de las ciencias tradicionales. Es su propia experiencia, y CS50 se asegurará de que usted es bien apoyado a través de ella con su verdadero ejército de TFS. ALI Nahm: Lo tomé como un estudiante de primer año, y así lo hizo mucho de nuevos amigos. También me he presentado a esta concentración todo toda la escuela de ingeniería, por lo que lo recomiendo encarecidamente y le damos la bienvenida a nuestra familia CS50. Yaniv Yacoby: CS50 sólo te enseña cómo utilizar las herramientas que son muy accesibles. Sólo se necesita un ordenador portátil, se necesita un navegador web, y usted Necesitamos aprender a escribir algo de código, y usted puede construir realmente cosas interesantes. KAREN XIAO: Es tan bueno ser capaz de hacer algo y que la gente lo use y que la gente lo ve, y eso es lo que realmente me gusta de ella. Tim McLaughlin: - un sentido de comunidad, creo que, en este por supuesto, más que cualquier otro curso que he tomado hasta ahora. No sólo estás tomando otro - usted no está llenando otro requisito. No sólo vamos a conferencias e ir a la sección. Pero estás haciendo un montón de cosas que son todos acerca de programación y todo sobre la tecnología, pero no es así Realmente te sientes como una clase más de las veces. TRAVIS DOWNS: ¿Y en el primer día, repartieron torta, y Me vendieron al instante. JACOB PRITT: caramelos gratis y pizza. ZAMYLA CHAN: - sin importar su nivel de interés, creo que que CS50, te divertirás y podrás intelectualmente estimulado. MARK GROZEN-SMITH: Siempre es una fiesta en la clase, y es un fiesta cada noche trabajando en su p-set. JACKSON Steinkamp: Cada vez que termine un boletín de problemas, se sentirá como usted ha terminado un proyecto. MELISSA NIU: Fue el primer año, y se hizo la compra. Yo tenía mis cuatro clases listo, y yo estaba en Annenberg. Y me encuentro con un amigo, y él dice, hey, voy de compras esta clase llamada CS50, y usted debe venir conmigo. Acabé teniendo que ese otoño, y después de esa clase, que pensé que tal vez voy a menores en CS. Pero aquí estoy, tres años después, todavía está estudiando ordenador la ciencia y de hecho lo está haciendo como un mayor, y me encantó cada momento de ella. ROB BOWDEN: No tengo ni idea. ALI Nahm: Vamos a ver. MELISSA NIU: locura. Ponencia 1: Siento que sería muy cliché. Que acababa de decir, como, impresionante. Yaniv Yacoby: Accesibilidad. JACOB PRITT: caramelos gratis y pizza. TRAVIS DOWNS: No se puede bajar una clase que se reparte la torta. Tim McLaughlin: Energética. VIPUL Shekhawat: Essential. ROB BOWDEN: Déjame pensar en una respuesta. Creo que tengo algo. Oh, dios. Sí, mi nombre es Rob Bowden, y esto es CS50. [Aplausos] David Malan: Muy bien, así que vamos a empezar a pintar un cuadro de la dirección en la que podemos ir, y vamos a introducir este concepto aquí conocido como pseudocódigo. Así que no es un pseudocódigo de programación lenguaje en sí mismo. No es nada técnico per se, pero es sólo una especie de forma general de expresarse con bastante precisión, bastante algorítmica, procesalmente justa, pero sin tener que preocuparse por el idioma que usted está expresando usted mismo pulg Es cierto modelo de Inglés y lenguajes de programación con que usted sea familiar, para que podamos empezar escribir este tipo de cosas sobre la marcha. Y de hecho, Joseph, ¿podría usted pedir prestado al escenario para ser escriba aquí? He seguido adelante aquí con anticipación y olvidado de poner unos calcetines de hoy, y esto va a ser uno de nuestros más ejemplos ridículos. Ahora, te necesito aquí. Voy a hacer la parte de calcetines. Así que aquí tenemos un pequeño bloc de notas. Esto es, literalmente, sólo TextEdit en Mac. No estamos realmente va a escribir un programa ejecutable, pero sólo vamos a empezar a esbozar pseudocódigo basado en en algunos de los consejos que usted proporciona a mí aquí. Así que aquí está mi pila de calcetines en casa. No tengo calcetines cuando me despierto por la mañana, y ahora estamos que escribir un programa, un algoritmo de clases, con el que para obtener estos calcetines en los pies. Y en el camino, vamos a ver si podemos tropezar, o encuentro, algunas de las ideas que usted va a tener que empezar pensar mucho más seriamente en la programación no sea que sus programas no se comportan bien como se esperaba. Así que siéntate aquí. Tengo mi pila de calcetines. ¿Qué es lo primero que un ser humano razonable sería hacer cuando el objetivo es poner en un par de calcetines? Que alguien me dé un paso, y sólo el primer paso. ¿Sí? AUDIENCIA: Dobla hacia abajo. David Malan: Inclínate, está bien. Paso dos. Paso dos. AUDIENCIA: Toma tu calcetín. David Malan: Toma tu calcetín. Vale, ambigüedad tan leve aquí, y este es uno de los primeros obstáculos que que se supone que deliberadamente Encontramos aquí. Es un poco ambiguo, así que toma tu calcetín. Está bien, me quedo con este, pero un ordenador, realizar en un poco, no va a tener ese tipo de instinto humano de sólo escoger el más cercano. Vamos a tener que empezar, en poco tiempo, expresando nosotros mismos con mayor precisión. De acuerdo, entonces el segundo paso es levantar el calcetín. Vamos a tomarlo. Paso tres. En la parte posterior. AUDIENCIA: Encuentra una pareja. David Malan: Encuentre par coincidente. Bien, eso es bueno. Tuve que elegir este calcetín. Así que el objetivo es encontrar una coincidencia de calcetín, ahora, pero lo Qué significa eso? Un ser humano es razonable, al igual que el miércoles, cuando me supo encontrar Mike Smith en una guía telefónica, sólo un poco de fue con su instinto. Pero aquí, es, obviamente, este calcetín aquí, pero de una computadora no va a ser tan instintivo. Un equipo que va a tener una colección de bits, como hemos discutió el miércoles, y son los organizado de alguna manera en la memoria. Pero el punto es que un equipo sólo tiene la capacidad de a mirar las cosas de una en una, y de hecho, incluso se los seres humanos - a pesar de que se siente como que miró hacia abajo ya la ruptura segundo después yo sé dónde está el calcetín, mi cerebro y mis ojos presumiblemente tuvo un rápido descremada de los calcetines, y enganchado a continuación a la que nos ocupa. Así que si podemos ser aún más deliberado ahora como un ordenador, ¿Cómo puedo encontrar a este par a juego? Bueno, tenemos que iterar. Tenemos que quizás lazo sobre este lío de los calcetines en el piso por el que me diga algo como PARA CADA calcetín, recogerlo , y si la misma forma y tamaño que el otro, entonces punto, punto, punto, vamos a continuar la historia. Así, por cada calcetín, así que recoger esto. Reviso es éste igual a esta. No es, por lo que dejar de lado lateral. Entonces iterar de nuevo. ¿Es esta una igual? No, no lo es, así que lo puse a un lado. ¿Es este? No. Éste? No, y así sucesivamente. Y, por último, con suerte, voy a encontrar este calcetín aquí. Así que si se trata de la misma forma, tamaño, tómalo. Y ahora, ¿cuál sería el siguiente paso en esta lista? ¿Sí? AUDIENCIA: Identificar derecha de la izquierda. David Malan: Está bien, identificar a derecha e izquierda, por lo que Afortunadamente, este tipo de obras. Un poco simétrico, o me he gastado sólo ellos de esa manera. Muy bien, así que me he identificado la derecha. Y ahora, antes de continuar, permítanme señalar lo que José estado haciendo aquí como una especie de programador versado. Así que de nuevo, no hay una sola manera de hacer esto, pero más allá de numeración de las líneas, Joseph ya ha empezado a hacer esto especie de sangría. De hecho, esta es una convención muy común en la programación, por lo que cuando se hace algo repetitivo, bucles estilo, estamos dando a entender con la frase en Inglés "PARA CADA calcetín, "la convención en pseudocódigo y, como veremos, lenguajes de programación habituales, es justo guión. Pulsa la barra espaciadora varias veces, presione la tecla Tab o similar, para que anidado debajo "PARA CADA calcetín" es el pedazo de cosas que tiene que hacer como resultado de ese bucle. Así que eso es todo lo que está transmitiendo semánticamente. Ahora, mientras tanto, el "Si se trata de la misma forma y tamaño," la hecho de que "Take it" una sangría adicional sólo significa eso es lo único que debe hacer si esa condición, si esa rama, que tenedor en la carretera, es de hecho verdad. Así que ahora aquí, estamos en el cuarto paso, identificar a la derecha ya la izquierda. He identificado derecha. Give me paso cinco. Y técnicamente, realmente podríamos llamar el para cada cosa - probablemente debería numerar todas las líneas si vamos a hacer esto. JOSEPH: [inaudible] David Malan: [inaudible]? Bueno, está bien, está bien, vamos a hacerlo a tu manera. De acuerdo, entonces el paso cinco, ¿cómo podemos hacer el calcetín derecho? ¿Cómo procedemos próximo, aquí? ¿Sí? AUDIENCIA: Levante la pierna derecha. David Malan: Levante la pierna derecha, está bien. Paso seis? Rápidamente. Si. AUDIENCIA: Encuentre un extremo abierto del calcetín. David Malan: Está bien, encontrar el extremo abierto del calcetín. Tan bueno. Así que aquí, de verdad, un instinto muy común sólo sería poner en calcetín derecho, pero eso también es bastante ambigua. A menos que el ordenador o humano sabe exactamente lo que quiere decir, no va a ser para ejecutar eso, así que aquí, no tengo encontró la apertura del stock. Paso siete? AUDIENCIA: Tócate los dedos de los pies. David Malan: dedos de los pies Touch. Bien, ahora vamos - Está bien, me voy a tomar algunas libertades aquí. Gracias. Paso ocho? Póngase calcetines. Está bien, así que ahora, creo que estamos lo suficientemente cerca a una especie de toma esta uno en casa. Muy bien, así que esto va para arriba. Voy a tomar algunas libertades con lo que significa, en realidad. Coloque el calcetín en. Muy bien, ahora paso nueve? AUDIENCIA: Colocar el pie hacia abajo. David Malan: Gracias. Paso nueve, poner pie en el suelo, y ahora, repetimos puede. Así que probablemente, ahora podemos entrar en el paso 10 y decir identificar dejó calcetín, pero eso es probablemente ya está hecho. Y entonces, puedo ordenar de repetir estos pasos. Pero este tipo de petición de principio. Antes, la última vez que queríamos repetir algo, hizo iterativamente, una y otra vez, una PARA Cada bucle por así decirlo. ¿Tendría sentido utilizar un bucle con el fin de manejar tanto la izquierda y la media derecha? Porque se siente como si estas operaciones son más o menos idénticos, excepto por el hecho de que uno comienza aquí y uno comienza aquí? ¿Tenemos bucle, o simplemente seguir los pasos de escritura 10 y 11 y 12? AUDIENCIA: Loop. David Malan: Muy bien, así bucle. De hecho, me podría haber dicho simplemente seguir adelante. ¿Por qué es este el caso? Bueno, esto es en realidad el primero de nuestra no-obvio decisiones de diseño y, de hecho, uno de los indicadores con los que vamos a empezar a evaluar, para nosotros y para usted, el calidad de un programa es lo bien diseñado que es. ¿Ha hecho la mínima cantidad de trabajo necesario para hacer el trabajo lo más rápidamente, ya sea en términos de su tiempo o en términos de tiempo de funcionamiento de la computadora? ¿Cuántas operaciones hace que se necesita para ejecutar? Así que podría decirse que esta es una oportunidad para un bucle porque tan pronto como comience a copiar y pegar, como José eficazmente sería empezar a hacer en un momento, usted está perdiendo el tipo de tiempo, y que está siendo doblemente expresivo. Pero al mismo tiempo, estos son en realidad dos especiales casos, izquierda y derecha. Y mientras que antes, podría tener 10 o 20 o más medias en una pila, que sin duda no tiene sentido tener 50 líneas de código diciendo mira esto calcetín, luego el siguiente, entonces el siguiente. Aquí, es un poco menos obvio, y me propuso que que podíamos ir en cualquier dirección. O bien podría tener ese lazo, aunque sólo los bucles dos veces, o podemos simplemente copiar y pegar un poco aquí con el fin de hacer el trabajo. Pero este programa está libre de errores, por así decirlo. Es posible que tenga algunos errores, errores o casos de esquina, así Hablaré, pues, que en realidad no anticipar. Nada salió mal esta vez, pero lo que pudo haber salido mal durante la ejecución de este programa? AUDIENCIA: Usted no tiene ningún calcetines. David Malan: Así que no puede haber medias hay alguna. Así que vamos a considerar ese caso esquina. Así que si pudiéramos retroceder hasta el paso uno, paso uno era tan doblar hacia abajo, de manera que concuerda. El segundo paso, toma tu calcetín, pero luego encontrar calcetines a juego, identificar la derecha. Es como que hizo un montón de suposiciones, y esto es, francamente, ¿por qué a veces el programa bloquee. Si usted, el programador, han hecho ciertas suposiciones, como seguramente no va a ser calcetines o seguramente no va a ser memoria disponible en el ordenador, seguramente no va ser espacio en el disco en el disco duro - Bueno, si usted hace estos supuestos, y que no lo es, de hecho, la realidad, ¿quién sabe lo que a veces la computadora vamos a hacer? Y a veces, cuando recibe el balón de playa giratorio o el congelado Windows o similares, eso es precisamente debido a que algunos programador no previó esos casos extremos llamados. ¿Qué otra cosa podría haber ido mal en este programa? ¿Sí? AUDIENCIA: Usted no tiene la pierna derecha y la pierna izquierda. David Malan: Bueno, tal vez no tenga tanto una pierna derecha y un la pierna izquierda, por lo que este programa puede no ser universalmente aplicable. ¿Otros? AUDIENCIA: Usted podría haber recogido un calcetín huérfano. David Malan: Podría haber cogido un calcetín huérfano, por lo que un no correspondiente calcetín que sólo no tiene hermanos porque he lo perdió, se rompe, es en el lavado todavía, o similares. Así que, también, en realidad no ha sido manipulado. ¿Sí? PÚBLICO: Es posible que ya tenga calcetines. David Malan: Ya podría tener calcetines. Yo en realidad no check. SI usted no tiene los calcetines, y luego proceder a hacer la línea uno y dos. Y eso podría suceder. Te quedas dormido con los calcetines y similares, así eso, también, un caso esquina muy razonable. Y tal vez otro? AUDIENCIA: El calcetín está al revés. David Malan: Así que el calcetín está al revés, así que hicimos ningún error comprobar, en definitiva. No comprobar si el estado del mundo es como esperamos. No comprobar si en realidad encontramos lo que estamos buscando. Y a pesar de que esto es una especie de un ejemplo ridículo la participación de calcetines, al final de la día, esto es exactamente la tipo de mentalidad es necesario tener al escribir programas, incluso en Scratch, así como en C, en JavaScript, en PHP, porque de lo contrario, los programas se presentan el equivalente de esa pelota de playa o simplemente dar vueltas resultados inexactos. Así que muchas gracias aquí a nuestro escribano José. [Aplausos] David Malan: Muy bien, ¿y qué es, en hecho, un programa de ordenador? Bueno, vamos a echar un vistazo rápido a un representante de uno aquí. Así que este es un programa escrito en un lenguaje llamado C. C es nuevos lenguajes muy antiguos en estos días, pero muchos se construyen en la parte superior de la misma. De hecho, PHP, uno de los lenguajes web centradas vamos a usar hacia el final del plazo, se tiene lo que se llama un intérprete, un programa que está escrito en C, pero más de eso en muchas semanas a partir de ahora. Pero este programa, y ​​esto es lo que significa escribir un programa, si bien de manera muy simple. Tenemos una sintaxis bastante críptico aquí, pero se puede probablemente adivinar, incluso si nunca has programado antes, lo que que hace el programa. De hecho, yo no sé lo que printf es, pero ciertamente imprimir evoca la idea de imprimir algo. Y sí, este programa es en última instancia va a imprimir las palabras "Hola, mundo". Ahora, si usted tiene un Mac o un PC o un ordenador con Linux, lo más probable son, al menos si ha descargado algún libremente software disponible, que podría haber estado escribiendo programas en su propio ordenador portátil desde hace bastante tiempo. En Mac OS, por ejemplo, hay un programa llamado Terminal que viene con un Mac, que es por lo general en su Carpeta Utilidades, y por lo general se abre un negro y blanco o una ventana en blanco y negro en el que aparece un indicativo en el cual puede escribir comandos. Así que esto es realmente una reminiscencia de lo que las computadoras solía ser antes gráfica de usuario interfaces, interfaces de usuario, llegó. Ahora, en Windows, tiene un mecanismo similar en la forma del símbolo del sistema. Pero, ¿qué voy a hacer es abrir, digamos, TextEdit otra vez, por lo que el mismo programa que utilizábamos para pseudocódigo hace un momento, y yo voy a seguir adelante y escribir mi primer programa. Incluir stdio.h, sea lo que sea, int main vacío, sea lo que sea, y luego en el medio aquí, printf ("hola, mundo."). Y luego cita estrecha, cerrar paréntesis, punto y coma. Ahora voy a seguir adelante y acaba de golpear Comando-S. Voy seguir adelante y guardar esto como hello.c, por lo que la convención en el mundo de la programación C es el nombre del archivo del punto c. Voy a poner justo en el directorio de Inicio John Harvard, aquí, haga clic en Guardar, y ahora me voy a ir a este ventana de terminal, que de nuevo es este indicador en blanco y negro donde puedo ejecutar comandos. Puedo ejecutar programas escribiendo su nombre, no por doble clic en los iconos en el sentido habitual. Pero la cosa se trata de C es que un lenguaje como C primero viene en esta forma, algo que se llama código fuente. Algo que se parece un poco como el Inglés, pero es definitivamente menos como el Inglés de un pseudocódigo de José momento antes. Es un poco más arcano. Parece que seguir algunas pautas o reglas. El hecho de que tengo las llaves, punto y coma, comillas, soportes en ángulo, se siente como un equipo se le ocurrió esta tipo de lenguaje. Pero si me voy, ahora, a esta ventana de terminal, puedo correr un comando que se va a convertir ese código fuente es algo que se llama código objeto. Eso va a convertir Inglés-como sintaxis a ceros y unos, los mismos tipos de ceros y unos que nosotros habló el miércoles. Ahora, me voy a correr un comando llamado Clang. Más sobre esto en las próximas semanas, pero es un programa con que puedo convertir hello.c en un montón de ceros y unos. Ahora, me he encontrado este comando. He corrido Clang, y luego me dijo que correr a ti mismo en el archivo llamado hello.c, que he creado hace un momento, y nada parece suceder. Pero en realidad, si me metió en mi directorio personal, me gustaría ver que este programa estúpidamente llamado a.out ahora existe. Esto es sólo el nombre predeterminado para un programa cuando se escribe en C. Podemos cambiar este tiempo, pero es la a.out nombre del programa que acaba de convertir en ceros y unos. Y ahora que él es ceros y unos, mi Mac, en este caso, o el PC con Windows, puede entender los bits, los ceros y unos. Y así, cuando yo pulse Enter, veo "hola, mundo!" Pero es un poco buggy. Yo no acababa de decir "hola, mundo: el aire: - jharvard". El aire es el nombre de mi equipo. Jharvard es el nombre de la cuenta, así que lo hice con claridad omitir en el programa? Una especie de salto de línea. No le pegué el equivalente a Enter o el retorno de carro, y esto es, de nuevo, testimonio del hecho de que los ordenadores pueden sólo hacer lo que les dicen que hagan. Y el hecho de que yo no le dijo al mover el ordenador cursor a la línea siguiente - así, no es seguro que va a hacer sólo lo presuntuosamente para mí. Así que si vuelvo a ir a mi programa, y ​​digo \ n - Entonces, \ n, como pronto veremos, es la forma de representar las cosas extrañas como caracteres de nueva línea, cosas que de otro modo sería el resultado de pulsando la tecla Enter. Pero, por ahora, sólo sé que pulsando la tecla Enter se acaba de hacer nuestro código parecer extraño, por lo que el mundo decidieron, ya sabes lo que, para mantener las cosas más bonitas, para mantenerlo en una línea, vamos a acaba de decir \ n representa una nueva línea. Permítanme volver a guardar mi archivo, vuelva a la ventana de terminal, y vuelva a ejecutar a.out, Intro. Aún con errores, pero ¿por qué? AUDIENCIA: [inaudible] David Malan: Sí, así que tengo que volver a compilar. Así que para compilar un programa sólo significa convertir lo de la fuente código para el código objeto del código fuente, en ceros y unos. Ahora bien, el mero hecho de que llegué a guardar en la presente edición de textos no teniendo en esos ceros y unos, porque primero tiene que tell Clang hey, he cambiado de esas líneas de código, el código fuente. Es necesario regenerar a.out. Nada parece haber pasado, pero en un ordenador, en una línea de comandos, por así decirlo, cuando no pasa nada, que por lo general significa que todo está bien. Cuando algo sucede, significa usted en mal estado, en general. Así que vamos a ir ahora a a.out, y de hecho ahora tengo "hola, mundo ". Y ahora, ¿qué pasa con estos ceros y unos? Donde, de hecho, son los? Bueno, no puedo realmente sólo un poco de hurgar muy eficazmente. Permítanme abrir TextEdit. Esto es a.out. Déjenme seguir adelante y abrir esto, y esto es al parecer lo que mi programa parece. Así que he abierto, hello.c no, pero a.out. Pero esto no es realmente lo que mi programa es en realidad. Es evidente que esto es algún tipo de caracteres alfabéticos. Veo que no hay ceros y unos, pero esto es porque a.out es un programa. Ceros y unos - pero TextEdit, como su nombre indica, es al igual que el Bloc de notas de Windows, es un editor de texto, por lo que es confundiendo todos esos ceros y unos como aunque lo fueran, ¿qué? Caracteres ASCII. Así que recuerda el miércoles, sólo se le ocurrió esta asignación arbitraria de números, o bits, a las letras del alfabeto y los símbolos de puntuación y similares. Así TextEdit, que es un editor de texto se malinterpretando esos patrones de ceros y unos que se supone que son palabras de impresión, como "hola, mundo". Les está mostrando como ASCII, y por eso se ve un poco desordenado. Ahora, hay algunos indicios de corrección de aquí. Observe si destaco, hay un atisbo de realidad "hola, mundo, "así que en algún lugar de ese programa es la frase que escribí. Pero vamos a seguir adelante y ahora veo con un programa diferente. Esto no es un usaremos a menudo, pero también viene con un Mac y estará dentro del aparato CS50. Déjenme seguir adelante y abrir con un programa llamado XXD. De vuelta en el día, la mayoría de los programas fueron nombrados bastante críptica, y por lo que la tendencia continúa. Pero-b significa escupir a cabo este programa en forma binaria. No lo ejecute. Muestra a mí como ceros y unos, y esta es la C programa que acabo de escribir. Ahora bien, yo, como ser humano aquí, sinceramente, no tienen idea de lo que estos diversos patrones de ceros y unos representan. De vuelta en el día, yo, con mis tarjetas perforadas o similares, lo haría en realidad hay que buscar lo que estos diversos patrones de 01111000, en realidad representan. O peor aún, que tendría que hacer la perforación o la creación de estos patrones de ceros y unos. Pero por ahora, tener fe en que una CPU, Intel Inside, así decirlo, dentro de todas nuestras computadoras en estos días, sabe cómo interpretar estos ceros y unos. Y algunos ceros y unos significar impresión. Algunos ceros y unos significa reproducir un sonido. Algunos ceros y unos significar tomar la entrada del usuario desde un teclado. Hay todo tipo de diferentes modelos, pero por suerte, como seres humanos, en general, sólo tiene que preocuparse acerca de la programación en este nivel bastante alto. Y en otras clases CS puede ahondar más profundamente y buscar las cosas como esos ceros y unos, o aún otras cosas fijas. Así que ahora vamos a convertir esto. Vamos a pasar muy rápidamente de C y pasar a algo un poco más reconfortante, un poco más emocionante, en el que podemos volver nuestras animaciones y sonidos y similares, que claramente nos han escapado en esta interfaz bastante primitivo. Así que este mismo programa en C puede ser representada ahora en este lenguaje de programación llamado rasguño de la siguiente manera. Este es el equivalente de este programa hola mundo escrito en esta pieza del rompecabezas estilo lenguaje llamado Scratch. Así que permítanme seguir adelante y abrir el programa mismo. Se volvió a pedir Scratch. Es de libre disposición, y esto es lo mismo que Empiece hoy mismo en. Así que aquí es Scratch, y está dividida en unos pocos diferentes piezas. En la parte superior derecha, tenemos la llamada fase, y de hecho, ahí es donde las galletas realizó sólo un poco atrás. Y en esa etapa son cosas llamadas sprites, caracteres o objetos o entidades. Realmente no importa lo que piensa de ellos, pero cosas son programables, móviles, y en este caso, esto, programa que nuestro estudiante escribió tiene un par de pan de jengibre galletas, un par de galletas circulares, una gran cantidad de corazones, un montón de gafas. Debido a esto, él o ella es capaz de programar cada uno de los caracteres individuales por separado. Ahora bien, ¿qué significa para programar estos personajes? Bueno, déjame seguir adelante y hacer clic en esta cookie mano izquierda y desplácese hasta la parte superior izquierda aquí. En la parte superior izquierda de la pantalla ahora es el la llamada área de scripts. Esta es una especie de pizarra en blanco, en un principio, sobre el que puedo arrastrar y soltar las piezas del rompecabezas que, francamente, hacer exactamente lo que dicen. En la parte superior de la pila de pedazos del rompecabezas es la palabra Al hacer clic encima Bandera Verde, y si no te diste cuenta antes, la forma en que comenzó esa canción cookie fue hacer clic, literalmente, una bandera verde. Así que esa pieza del rompecabezas en la parte superior izquierda hay significa que cuando el clics humanos de la bandera verde, procedió a hacer las siguientes cosas. Ahora bien, ¿qué hicieron galleta proceder a hacer? No se sabe muy bien cómo interpretar esto todavía, pero la galleta aparentemente establezca su ranura a cero, entonces se esperaba tres segundos, luego cambió de grupo a uno, entonces Esperó un segundo, y luego cambió su ranura de nuevo a uno. Y luego esta realidad se parece un poco a un error, no debe tiene que cambiar su ranura y otra vez a menos que sea se cambia en otra parte, pero esta serie de medidas es lo que está dictando el comportamiento de esta cookie en particular. Así que en realidad no desplazarse hacia atrás y mirar algo tan complejo todavía. Déjenme seguir adelante e ir a Archivo, Nuevo, y obtener un borrón y cuenta nueva. Así que ahora, en efecto tener un área vacía guión, un escenario vacío, con nuestro duende rayado defecto, y en la parte superior izquierda en mi pantalla tengo la paleta de la totalidad de su piezas disponibles puzzle. Y no vamos a pasar casi que muchas de estas cosas hoy, porque, una vez más, la mayoría se explican por sí, pero lo haremos tratar de categorizar y destacar las similitudes con estos lenguajes futuros a los que vamos a bucear. Y aquí arriba a la izquierda es la primera Bandera Verde Cuando Seguido, así que voy a arrastrar esto aquí, alejar un poco. Y si hago clic en la bandera verde, nada sucede porque No he incluido ninguna lógica, cualquier declaración por así decirlo, a esa bandera verde, así que déjame ir hasta el categorías aquí. Actualmente estoy en la categoría de control. Estoy en vez de ir a bajar a la categoría Apariencia, y hay un montón de cosas aquí que digas Di, Piensa, cambio de color, vestuario Switch. Así que usted puede hacer cosas tontas con los trajes y sonidos y similares. Déjenme seguir adelante y decir Say y ahora note como me arrastre y colocar esta pieza del rompecabezas, va a querer aferrarse en la forma correspondiente. Así que cuando me vaya a continuación y soltar el ratón, se bloquea juntos, y ahora si me voy de aquí y haga clic en la bandera verde, el gato es de hecho saludar porque eso es lo que hay dentro de esta caja blanca. Pronto veremos que esta caja blanca es lo que se llama una argumento, o un parámetro. Es una forma de cambiar el comportamiento de, en este caso, una pieza del rompecabezas, pero si quiero decir exactamente lo que dije antes, decir hola, mundo, ahora puedo volver por aquí, Haga clic en Reproducir y "hola, mundo" es lo que se dice. Así que literalmente estamos programando ahora. No es todo lo que obliga de un programa, pero por lo menos que es un poco de algo más convincente que parece que, en A primera vista, así. Y podemos obtener muy rápidamente tanto más expresiva porque en Scratch, como en otros idiomas, no es todo tipo de declaraciones no, acaba de decir o imprimir algo, pero usted puede hacer cosas como espera, como acabamos de ver con la cookie, un cierto número de segundos. Puede reproducir sonidos en el entorno de Scratch sólo como se hace en una reproducción de sonido de ordenador normal del programa. Usted puede comprobar lo que se llaman expresiones booleanas. Así que ahora, vamos a empezar a añadir a nuestra caja de herramientas un poco de terminología que en realidad se refiere al ejemplo que José y yo aquí con los calcetines. Así que las declaraciones son declaraciones de hechos. Haga esto. Una directiva para el sprite, o me lo humano, para hacer algo. Una expresión booleana es algo que tiene un valor, un llamado valor de verdad, eso es un cero o uno, falsa o cierto, apagado o encendido, no o sí. Realmente no importa lo que pienses sobre esto, pero es un binario Estado. Como Nate discutido en vídeo del miércoles, dos cosas diferentes. Así que en Scratch, expresiones booleanas pasar a buscar como estos objetos azul aquí, y en este caso, la cuestión marca implica que usted está haciendo una pregunta. ¿Está el gato, o el duende, tocando el puntero del ratón? Así que esto es sólo un ejemplo de un bloque de Scratch que está pasando que nos permita comprobar si o no, es el ratón toca el sprite en la pantalla? Y esto puede ser útil si usted realmente quiere hacer las cosas con el ratón. Además de las expresiones booleanas, tenemos cosas como es el ratón hacia abajo, para que pueda detectar ese tipo de cuestionar también. Podemos hacer las matemáticas si usted quiere realmente, y hay usos realidad más convincentes para que este sólo pura de aritmética, como ya veremos. Pseudo aleatorio y hacer que su programa parecen pensar o se comportan de manera diferente sobre la base de unos valores aparentemente al azar, y luego tenemos cosas como expresiones booleanas como AND. Así que si usted realmente quiere comprobar dos valores, vamos a ver en Raspe que realmente podemos probar si esto es cierto y esto es cierto. Por ejemplo, en el caso de mis calcetines, que podría haber en el muy extremo preguntado si calcetín izquierdo está encendido y calcetín derecho está encendido, deje de hacerlo. Está todo hecho para el día, así que sería una oportunidad para que. Así que vamos a seguir adelante y tratar de reconstruir algunas de ellas junto y entrar en un par de ejemplos más convincente que esta. Así que déjame ir delante aquí y abrir algunos de los ejemplos que siempre estará en la página web de la asignatura, así, y abrir hello2. Así que en hello2 aquí, tenemos un programa que se está haciendo un poco cosas, pero no lo hace tan eficazmente como lo haríamos. Así que aquí se dice "hola, mundo" durante un segundo y luego espera por un segundo. Y lo hace de nuevo, y luego lo hace de nuevo. Así que si hago clic en la bandera verde, Scratch dice: "Hola, mundo. ¡Hola, mundo. ¡Hola, mundo. "Y esta es, obviamente, ahora candidato para mejora. ¿Cuál es la mejora marginal, con suerte, podemos ahora si hacer scratch apoya el concepto? Una especie de bucle. Una especie de repetición, ahora, estaría bien, así que permítanme realmente intentarlo. Permítanme realmente ir y seguir esto. Así que aviso se puede desprender bloques tan fácilmente como usted puede agregar a adjuntarlos. Déjame ir bajo control, desplácese hasta aquí, y de hecho, hay esta pieza del rompecabezas aquí, repetida y siempre y Siempre If. Así que hay un número de maneras de expresar construcciones de bucles en Scratch. La que probablemente quiere aquí no es para siempre, porque sólo desea que esto ocurra tres veces, pero Repita probablemente. Así que me arrastra Repita hasta aquí, arrastrar y soltar, y ahora en lugar de decir "Hola, mundo" en tres ocasiones separadas, déjame arrastrar esta pieza del rompecabezas aquí. Y a pesar de que no parece encajar, el programa es inteligente lo suficiente como para darse cuenta de que crecerá para llenar, así que es el formas que la materia y no el tamaño absoluto. Vamos a cambiar la repetición a tres, y ahora me deja ir adelante y arrastrar espere un segundo en allí también. Va a romper adentro también, y por eso ahora me voy a arrastrar estos chicos de aquí y simplemente tirarlos a la basura porque no los necesita más. Permítanme alejar la imagen y haga clic en la bandera verde ahora, y tenemos el mismo programa, pero, como yo predije antes, mejor diseñado porque se puede imaginar lo mal que este programa tendría, sin duda estéticamente, si tiene que empezar a copiar y pegar, copiar y pegar, o arrastrar y soltar las cosas darn mismos una y otra vez. Ahora, simplemente diciendo cosas en la pantalla, la impresión al pantalla, en realidad no es tan emocionante, así que vamos a abrir un varianza tercero aquí. Y ahora, como se verá, este da gusto ser molesto - [MEOW] David Malan: - pero también es algo lindo. [MEOW] David Malan: Bueno, mejor así, y sin duda podemos usar esa misma transición de fragmentación esto en un bucle estructura, pero vamos a hacerlo más interesante aún. Déjenme seguir adelante y abrir una variación cuarto aquí, donde tomar las cosas un paso más allá. Así que de acuerdo con esto, tonto aunque esto es en primera mirada, lo que este programa va a hacer? Va a maullar una vez. ¿Por qué? Bueno, uno es, hasta donde yo sé, siempre inferior a dos. No hay noción de aleatoriedad aquí. Literalmente, he codificado uno y dos, pero este es un ejemplo ahora de utilizar realmente una expresión booleana. Al igual como lo hizo José en su pseudocódigo, la sangría SI a encontrar calcetines a juego, haz lo siguiente, aquí tenemos una expresión si uno es menor de dos THEN - y, de hecho, incluso tenemos un poco de sangría, donde el morado es un poco sangría a la derecha - Entonces usted va a jugar el maullido de sonido. Ahora, en este caso, que uno es siempre inferior a dos, por lo que este es una especie de pérdida de la condición. Pero vamos a ser capaces, como veremos, para tapar otras cosas en estos marcadores de posición donde uno y dos son ahora. Así que vamos a avanzar ahora al ejemplo cinco de estos varios saludos y mirada a lo que este programa va a hacer. Así que ahora, en una sentencia de Inglés, ¿cómo funciona esto programa de comportarse? AUDIENCIA: Meows mitad del tiempo. David Malan: la mitad de Meow parte del tiempo, por lo que esta es una forma de transmitir una idea muy simple. A pesar de que se esté utilizando algunas desigualdades aquí en algunos números, esto es en realidad un programática Así, de manera precisa, de decir si la moneda sale cara, vaya adelante y maullar. O a la inversa, si la moneda sale cruz, no miau. Y en este caso, ¿cómo expresar eso? Vamos a escoger un número al azar entre 1 y 10, y si eso número es inferior a 6, adelante, miau. ¿Y cómo llegó esto aquí? Bueno, de nuevo, sólo la cuenta de arrastrar y soltar y cosas encaje. Así que ahora vamos a ver si esta aleatoriedad funciona. Déjenme seguir adelante y haga clic en la bandera verde. [MEOW] David Malan: Muy bien. [MEOW] David Malan: Muy bien. Bueno, bueno, así que nos dieron cabezas, cabezas, colas eficaz. Tails. [MEOW] David Malan: Heads. [MEOW] David Malan: Excelente. Siempre es difícil cuando sólo estadísticamente se obtiene una mala ejecutar, y es todos los jefes, y el programa en realidad no trabajar como era de esperar. Pero esta vez, funcionó, y parece que tenemos, si lo hiciéramos este número infinito de veces, las probabilidades del 50%. Ahora, de nuevo, no todo es tan interesante, justo lo que los gatos miau, así que vamos a ver si podemos avanzar en esto un poco más lejos aquí en la sexta versión. Así que ahora, tenemos versión realmente molesto - [Maullidos cada pocos segundos] David Malan: - y esto es lo que se conoce, en general, como un bucle infinito. Así bucle infinito en este caso se siente mal. Es, definitivamente, va a empezar a sonar mal, y sin embargo infinito lazos no son siempre malas. ¿Puede pensar en el contexto de programas de ordenador en el que había en realidad quieren un bucle infinito? ¿Sí? AUDIENCIA: Si usted quiere comprobar una condición. David Malan: Está bien, si desea mantener el control de una enfermedad? ¿Cómo qué? AUDIENCIA: [inaudible] David Malan: Bueno, bueno, así que si tienes algún programa, algún tipo de cosas domótica, en la que desea constantemente monitor es algo así. ¿Son las luces encendidas? ¿Son las luces encendidas porque tal vez usted tiene un temporizador y desea que se apaga, es posible que tenga que hacer algo una y otra vez. Y de hecho, hablando de los temporizadores, cualquiera de ustedes que han relojes en tu ordenador o relojes digitales, es una bucle infinito. Se continúa actualizando el tiempo porque es constantemente la comprobación y el control y la comprobación tiene el tiempo cambiado, y si es así, oh, mi dios. El reloj finalmente ha cambiado. Es necesario mostrar ese valor para usted. Así, mientras la mayoría de los ciclos infinitos de tiempo son un error, o por lo menos una decisión de diseño pobre, a veces lo hacen tienen su valor. Bueno, vamos a seguir avanzando para hello7. Así que ahora el programa se ponen un poco más interactivo. Permítanme hacer un zoom aquí, de nuevo, esto es lo que es bueno acerca de Scratch. Y vamos a usarlo para que quede claro, Scratch, sólo hoy y en problema la semana que viene configurado. Pero el lunes, nos sumergimos en C. En este programa, lo hace, siempre, el siguiente. SI tocar el puntero del ratón - ahora, ¿quién es el contexto aquí? Bueno, y observe que quien selecciona aquí abajo, en el fondo derecho es el gato, sprite, así que estas secuencias de comandos, esto programa, se aplica a él específicamente. Así que si el gato está en contacto con el puntero del ratón, entonces va para jugar a este y esperar dos segundos, y repita hasta la saciedad. Así que vamos a seguir adelante y llegar a jugar. No pasa nada, pero si quiero acariciar al gato ahora, yo simplemente puedo. [MEOW] David Malan: Adorable. [MEOW] David Malan: Bueno, menos molesto, pero también consigue aburrido, así que vamos a seguir adelante y ver si no podemos inyectar una lógica poco más. Ese fue el ejemplo de siete. Aquí en el ejemplo ocho, vamos a introducir una condición ELSE. Tanto literal como un tenedor en la carretera, en la que se puede ir hacia la izquierda o usted puede ir a la derecha, una condición en la programación lenguaje como Scratch, o como veremos C, puede permitir ir en una dirección u otra a través de un IF ELSE construir. Así que, literalmente, SI tocar puntero del ratón, este se reproducirá un sonido, de lo contrario va a jugar este otro sonido, miau. Ahora, si usted puede deducir del nombre de estos sonidos, puede probablemente adivinar lo que este programa está destinado a evocar la idea de. Este gato está maullando feliz. [MEOW] David Malan: Felizmente, pero no bastante como para ser tocado. [ROARS] David Malan: Así que ahora tenemos un gato que va a gritar en usted. Bueno, bueno, un último ejemplo con los gatos aquí, y vamos versión abierta de nueve de esto aquí. Así que ahora, tenemos el siguiente sonido más molesto que he podido encontrar, así que tenemos una morsa o león marino que aquí va a haga lo siguiente. [Foca] David Malan: Bueno, esto continuará hasta que averiguar cómo este programa funciona. Así que esta vez, este animal tiene dos guiones, y es lo que interesante aquí es que estos scripts se va a ejecutar en paralelo. Por lo tanto, ya que ambas comienzan con una bandera verde se hace clic, es como ir de esta manera, y ambos programas se inician de ejecutarlo una vez incluso si están bucle para siempre. Así que en el script de alto, tengo un poco de lógica. ¿Qué funcionalidades que proporcionan hasta allí? [Foca] AUDIENCIA: [inaudible] David Malan: Si se trata de qué? [Foca] AUDIENCIA: Si silencia a cero, se va a seguir jugando el sonar. [Foca] David Malan: Está bien, está bien. Así que si silenciado, sea lo que sea, esa cosa naranja es cero, A continuación, reproducir el sonido de lobos marinos y pensar "Oh, hola, "durante dos segundos. Ahora, yo no sé lo que es silenciado, pero cero evoca la idea de falso o apagado. Así que si silenciada es falso, por lo que si no está silenciado, mantener la reproducción del sonido. De acuerdo, bien, ¿cómo podemos desactivar esta cosa? Bueno, echemos un vistazo a la segunda secuencia de comandos ahí abajo. El segundo guión dice establecer silenciado a cero. Observe también es naranja, así que lo que hace es que los arañazos colores bloques en el mismo tono que si es una especie de lógicamente relacionados. Así como recargar silenciado era de color naranja, por lo que se silencia aquí mencionado en el bloque naranja. Pero esto es una asignación de variables, por lo que al igual que en álgebra, tienes x e y y z, en la programación tiene variables, pero son generalmente - hagamos una pausa por un momento y figura como para detener esta ladridos. ¿Cómo puedo hacer esto? [Foca] David Malan: Muy bien. Se detuvo. Bien. Así como en el álgebra tiene variables x, y, z, pero en programación, que tiene variables como x, y, y z es generalmente mal visto, porque no son del todo expresivo. Ellos no tienen ningún significado semántico alguno, por lo que en la mayoría lenguajes de programación, las variables pueden tener plena nombres de pleno derecho o palabras o frases similares en silencio, para decir lo que hacen. Así que este segundo script también se escucha siempre, y dijo que si la tecla, el espacio tecla del teclado, es presionado, signo de interrogación. Así que hay una condición con una expresión booleana que es va a responder a una pregunta sea verdad o falso, entonces tengo dentro de ella si la tecla de espacio se presiona y SI apagado es cero, ajuste silenciado a uno, ELSE establecer silenciado a cero. Así que este otro tenedor en la carretera, y observe cómo he anidar las dos condiciones IF, es una manera de comprobar es la Barra espaciadora presionada porque si es así, yo tampoco quiero ir esta o esa manera. ¿Y cómo invertir el valor de apagado? Tengo que comprobar es cero? Si es así, lo convierten en uno, de lo que sea cero para alternar tanto sus dos estados. Muy bien, así que tenemos a continuación algunas de estas fundamental construcciones. Tenemos expresiones booleanas, y se dan cuenta, también, estos son no todo lo que no familiar. De hecho, aquí está una captura de pantalla rápida de su curso de Harvard CS50 herramienta de compras, y cualquier sitio web por ahí que tiene casillas de verificación y menús desplegables que realmente, todo este tiempo, ha sido el uso Expresiones booleanas. En este caso aquí, si hace clic en la casilla de verificación junto a Por supuesto mayor que o igual a 4,5, o el siguiente al mismo facultad, se especifica una expresión booleana. Muéstrame los cursos para los que dicha expresión es verdadera. O a la derecha, no entre en conflicto con los cursos que estoy adoptar, si es que se comprueba, entonces sí, usted quiere comprobar esa condición, más que quieras ignorarlo. Así expresiones booleanas son una especie de todo, pero cuando los ponemos en condiciones, si las condiciones de SI, SI Vigilara, o incluso podemos simular más profundo niveles, IF ELSE IF ELSE - así que eso es una especie de estado ternario. Usted puede ir de esta manera o de esta manera o de esta manera. Podemos mantener las cosas de anidación para ir en direcciones diferentes. Así scratch tiene estos lazos, como siempre. Tiene estas características como la repetición 10, algunos número finito de veces. Tenemos la capacidad actual para definir las variables, por lo que en este caso He señalado, por ejemplo, a medias llamados variables. He inicializado a 0, y eso es otra dirección que podríamos haber tomado aquí con José, el cual tal vez sólo un seguimiento de cuántos calcetines que tengo en y terminar el programa cuando el valor de esa variable es 2. Eso sería otra manera de una especie de generalización que problema y hacer algo una y otra vez. Bueno, vamos a seguir adelante y ahora introducir un par de cosas nuevas. Así que aquellos de ustedes que tienen experiencia previa de programación se Sabemos que muchos de los idiomas tienen matrices o vectores o listas y, de hecho, Scratch tiene algo como esto, también. Así que vamos a ver si no podemos llevar las cosas al siguiente nivel aquí. Si tiene la posibilidad, ahora, con estas piezas del rompecabezas para añadir algo, como una palabra o un número, una variable, no puedo empiezan a acumular las cosas. Y esto es en realidad bastante a propósito para cosas como juegos, juegos de rol donde eres un poco por los alrededores un mundo de fantasía recogiendo cosas, recoger las cosas, ganar puntos, o similares. Es posible que desee hacer un seguimiento de algún tipo de inventario, y de hecho, eso es lo que uno de nuestros antiguos alumnos aquí hizo con algo que se llama Fruitcraft RPG. Así que permítanme seguir adelante y abrir esta cosa aquí, y en Fruitcraft, tenemos este mundo hacia la parte superior. Así que permítanme seguir adelante y haga clic en la bandera verde. Aviso en la parte superior izquierda es una especie de inventario. Eso es implementado en Scratch como lo que vamos a llamar a una matriz o una lista, y ahora tenemos esta pequeña animación. Así que cuando empezamos antes con esta historia de amor cookie, y luego avanzó a los gatos y leones marinos, ahora podemos tener lo que es aún más interactivo. Y este tipo azul poco, puedo empezar a moverse por su pequeño hogar aquí. Así que parece que tiene una salida de aquí, así que estoy usando las teclas de flechas, arriba, abajo, izquierda, derecha. Y ahora estoy fuera, así que es lo que tenemos aquí. Parece que una naranja, y, de hecho, tan pronto como me toque la color naranja, se dejó caer en mi inventario. Si me voy de aquí a las cerezas, ahora tengo algo más en mi inventario. Y esto es todo bonito y lindo, pero pensar en cómo, ahora, en este se implementa. Bueno, tenemos esta noción de una lista, y eso es al parecer un pieza del rompecabezas que usted acaba de decir lo que quiere añadir a la misma, añadir naranja, añadir las cerezas. Ahora, ¿qué es este chico poco de azul haciendo? Bueno, él es un sprite. Y es de suponer, la naranja y las cerezas - ellos mismos eran sprites separados. Y el uso de las condiciones en las expresiones booleanas, las estudiante era probablemente capaz de expresar si es hombre azul cerezas tocar a continuación, añadir las cerezas de palabras para su inventario, y luego también ocultar el sprite cereza. Así que debajo del capó, que probablemente todavía es una cereza Sprite allí. Hemos contado a llegar a ser efectivamente invisible. Ahora, si me sigues andando por aquí, también podemos hacerlo Lo proximal, donde puedo ir y leer el cartel. Así que si hombre azul tocando signo, podemos tener este bloque Say al igual que el gato nos habló en palabras, hola, antes, "Got un poco de fruta? Lleve al lugar fruto. "Muy bien, ahora lo que, al parecer, Tengo mis instrucciones. Yo puedo ir de aquí hasta el lugar de frutas, alinear a mí mismo con la puerta. Ahora, yo estoy aquí. Puedo ir hasta el hombre en el mostrador. Se detecta que estoy cerca de él, por lo que no tiene por qué ser absolutamente idéntica tocar, y me he ganado el juego. Así que tenemos Fruitcraft RPG. Así que podemos hacer las cosas aún más avanzados que esto. Podemos añadir sonidos. Podemos añadir aleatoriedad pseudo. Podemos añadir complejidad. Déjame ir adelante aquí, y en vez de hacer esto por mí mismo, deja que te enseñe una de las presentaciones más sofisticadas nos dieron el año pasado de una persona que se llamaba Blake. ¿Podemos tener un voluntario que es cómodo que aparece en cámara y es para jugar un juego? ¿Y de ahí? Vamos arriba. Muy bien, así que el juego que usted acaba de saberlo, se ofreció para jugar - [Aplausos] David Malan: - es algo de antaño llamado "Frogger". ¿Cuál es su nombre? RENDA: Renda. David Malan: REDNA? RENDA: Es como Brenda con una b. David Malan: Bueno, Renda. David. Gusto en conocerlo. Así que aquí en "Frogger", y si podemos aumentar el volumen justo un poco, se encuentra esta pequeña rana verde en la parte inferior. Puede utilizar la izquierda, derecha, arriba y abajo, y su objetivo es cruzar la calle, cruce el río, y tocar las hojas de lirio en la parte superior. Aw. Una t más - rehacer, ¿de acuerdo? Vamos a dejar de golpe. Nadie lo vio. [Aplausos] [Aplausos] David Malan: Si. Muy bien hecho. Excelente, gracias. Así que no había Frogger. Ahora que sabes lo que has llegado a vosotros mismos, voluntario uno más para un diferente juego presentado por otro estudiante. ¿Quieres venir a arriba? ¿Cuál es tu nombre? RICHARD: Richard. David Malan: Richard. Muy bien, Richard, vamos arriba. [Aplausos] David Malan: Tiene algo que va a sonar familiarizarse pronto, así que aquí están sus instrucciones. Así que en cierto momento, algunas piezas del rompecabezas se van a desplazar hacia arriba en la pantalla que se ven bien a la izquierda o la derecha arriba o hacia abajo. Vas a tener que tocar las teclas de dirección, de tal manera que corresponde a las piezas del rompecabezas que se alinean con los marcadores de posición en la parte superior. Así que cuando usted ve una flecha hacia la izquierda, y las líneas hacia arriba con la izquierda flecha, pulse la flecha de la izquierda. Usted puede comenzar. [MÚSICA - "Stronger" Kayne West] David Malan: Todo correcto, gran aplauso para Richard. [Aplausos] David Malan: Muy bien hecho. Gracias. [Aplausos] David Malan: Volando y, aparentemente, una especie de intimidante como podría ser la de implementar algo como aparentemente sofisticado como este, se dan cuenta de que el estudiante no partían y acaba de escribir esto de una vez. Más bien, se puede descomponer un problema aparentemente tan complejo como esta en pedazos mucho más pequeños, y esto, también, es Va a ser un tema. La peor cosa que puedes hacer por escrito un programa en la mayoría de cualquier el lenguaje es para sentarse, ponerse realmente emocionado, escriba el maldita cosa, y entonces sólo espero que funcione por el vez que haya terminado de escribir. Más bien, el proceso de la programación general, debería ser muy deliberado, muy iterativo, en el que sólo establecer medidas muy pequeñas para ustedes mismos, trozos pequeños Qué quieres arrancar con los dientes, y así que usted tiene estos cordura cheques, hitos pequeños que puedan cumplir. Y luego construir en la parte superior de los que crean más cosas sofisticadas fijas. Así, por ejemplo, ¿cómo hacemos para la implementación de un juego como este? Bueno, sinceramente, me volvería a empezar con sólo apoyar una tecla a la vez. Vamos a implementar el soporte para la flecha izquierda. De modo que el estudiante tuvo que crear de alguna manera en Photoshop, o en Raspe sí mismo usando el editor gráfico pequeño, un tecla de flecha que se parece a la de arriba a la izquierda allí, el marcador de posición grises. Entonces el estudiante tenía que averiguar qué x, coordenada y en lo puso, dónde ponerlo en la ventana. 0, 0 es aquí, así que tienes que calcular el número de píxeles, o puntos, para compensar esa flecha de la parte superior de la pantalla. Y luego, una vez que esté en funcionamiento, el programa en realidad no hacer nada, por lo que este caso es necesario un sprite en segundo lugar, para ejemplo, una flecha verde que apunta hacia la izquierda también, y usted A continuación, deberá comenzar a escribir algunos scripts para ello. Y te das cuenta, tal vez, que estas cosas empezaron a llegar a velocidades diferentes, y los colores fueron en diferente lugares, y eso es debido a que el estudiante usa un poco de aleatoriedad pseudo. Y por casualidad pseudo, me refiero sólo a recoger un número entre algo y algo porque se puede comenzar con las cosas del mapa, como si el número está entre uno y cinco, bueno, vamos a hacer la cosa verde. Si es entre 6 y 10, vamos a hacer la pieza del rompecabezas rojo en su lugar. Siempre y cuando usted tiene una manera de generar algún tipo de aleatoriedad, puede tomar decisiones sobre la base de que aleatoriedad. Y sigo diciendo seudo aleatoria, porque hay un pequeño y sucio secreto. Las computadoras no pueden llegar a números aleatorios. Ellos sólo pueden hacer lo que les dicen porque son dispositivos creados por el hombre. No pueden adivinar un número como nosotros los humanos sentir como nos sea posible. Un equipo tiene que hacer algo matemático para conjurar la ilusión del número matemático, utilizando a veces la día actual del tiempo como un insumo para averiguar lo que número para volver, pero más de eso en otro momento. Por ahora, sólo sé que podemos generar aleatoriedad pseudo. Así que una vez que tengo la capacidad para la flecha izquierda para comenzar que aparece en momentos diferentes y a velocidades diferentes, entonces Me puede volver atrás y añadir un poco de estos si las condiciones. SI este elemento sprite está en contacto con el otro, y la flecha izquierda ha pulsado la tecla - por lo que las tres condiciones en ese caso. Puedo usar ese bloque AND tal vez, en este caso - Entonces quiero seguir adelante y aumentar la puntuación. Y en la parte superior, tenemos un resultado, tenemos Awesome, Cool, bueno, y Boo. Así que hay cinco variables que al parecer este estudiante utiliza para realizar un seguimiento de estos indicadores diferentes. Así que en resumen, el resultado final es increíble. Es divertido, es divertido de jugar, es atractivo, pero esto no es donde el estudiante comenzó. Él o ella comenzó a un conjunto mucho más pequeño de pasos. ¿Cuáles son algunos otros bloques de construcción que podemos tejer en estos programas? Bueno, hay un concepto distinto en la mayoría de los idiomas, Rayar entre ellos, conocido como roscas. Así que un equipo no puede realmente realmente hacer varias cosas a la tiempo, por lo menos no lo general. Más bien, un equipo generalmente tiene un solo CPU, e incluso Aunque las computadoras son súper rápido y puede, por lo tanto, crear la ilusión de hacer varias cosas a la vez - revisar su correo, obtener al instante mensaje, la impresión de un documento - en realidad, un ordenador es sólo saltar de impresión para enviar mensajes instantáneos para enviar correos electrónicos, volver y volver y volver y que adelante tan rápido que lentos humanos ingeniosos no se dan cuenta que en realidad es explotación de dichos programas un poco a la vez. Ahora, esto un poco de blanco se encuentran en estos días, ya que, hoy en día, muchos de nuestros ordenadores son lo que se denomina multi-core, por lo que tiene una CPU de múltiples núcleos, pero, lo que es algo así como tener múltiples CPUs. Y así, a veces, las computadoras pueden realmente hacer varias cosas a la vez, pero generalmente dentro de un programa, los programas confiar en estas cosas llamadas roscas. Así que un hilo es algo así como un programa en miniatura que puede coexisten con otro programa en miniatura y puede correr en paralelo, o al menos se puede ejecutar bajo la ilusión de que se están ejecutando al mismo tiempo. Así arañazos apoya estas cosas llamadas roscas. Usted puede tener varias secuencias de comandos de ejecución a la vez, igual que nosotros hizo con el león marino, y esto nos permite en realidad entonces tienen interacciones entre estos sprites. Déjame ir por delante aquí y tire hacia arriba, digamos, hilos, y jugar de la siguiente manera. Tenemos dos sprites, cada uno de los cuales vamos a ver sólo tiene un guión. Y te das cuenta parece que hay un poco de inteligencia en el gato en éste porque está cada vez más cerca - [ROARS] David Malan: - cada vez más al pajarito. Entonces, ¿cómo es el sistema operativo pájaro? Bueno, vamos a echar un vistazo a la primera ave. El guión pájaro dijo cuando la bandera verde se hace clic en, vaya a x es igual a negativo y es igual a 115 y 150. Así que me di cuenta de una ubicación aleatoria donde yo quería que el ave para empezar, y que sólo le dejó caer allí por defecto. Entonces siempre si no tocando gato, así que esto es diferente tipo de construcción de bucle, pero la misma idea, hacer esto una y otra una y otra vez. Siempre y cuando usted no está tocando el gato, se mueven tres pasos, y si estás en el borde, rebote, donde es una especie de reflexión en el sentido de billar. Así es como el ave se mueve alrededor tipo de aparentemente al azar, pero es sólo porque está rebotando las paredes en este caso. Ahora el gato, por su parte, es una especie de trampa. El gato, cuando la bandera verde se hace clic en Sí, se inicia en alguna ubicación, un lugar al azar - al menos en parte como por la selección de bloques al azar verde allí - y luego para siempre si tocar al ave, reproducir el sonido león, y luego dejar de guión. Así que cuando me dijo que cancelar o salir antes, hay un rompecabezas pieza en Scratch que se acaba de cerrar el programa en ese punto porque es una especie de lógica por hacer. Pero por lo demás, aquí, fíjate en lo que va a pasar. Punto hacia el pájaro y avanzar un paso. Así que este punto hacia el ave es una especie de ventaja al gato tiene en que es homing en el ave en movimiento, y podemos ahora que este programa sea aún más interesante. En lugar de mover un paso a la vez por cada ciclo de la CPU, por huelga de peaje de la campana, por decirlo así, déjame seguir adelante y mover, digamos, cinco pasos a la vez como el gato. Haga clic en Ejecutar, y ahora realmente lo encuentra rápidamente. Si duplicamos esto más de 10 pasos, es como que va adecuada para él. Ahora, podemos dar el pájaro, tal vez, un poco de ventaja. Vamos a ir al pájaro y decir en lugar de mover tres pasos, lo vamos a pasar 30 pasos. Pero todavía quedó atrapado en el final. Así que aquí tenemos dos hilos. Está encarcelado en Scratch con dos guiones y dos sprites, pero la idea en otros idiomas es que se puede escribir, en esencia, demasiados programas como éste y tener correr de verdad, o imaginariamente, en paralelo. Ahora bien, también existe este concepto en programación conocido como eventos, y esto es algo que no veremos en C, el lenguaje conocido como C. Vamos a ver hacia el final del semestre en la programación web, cuando introducimos JavaScript y el noción de construcción de páginas web que son dinámicas e interactuar con los usuarios. Así, en este caso, tenemos un ejemplo muy simple de dos sprites, niño y niña, cada uno de ellos con su respectivo hilos, pero de alguna manera estos dos son inter-comunicación por medio de algo que se llama los acontecimientos. Así que déjame ir delante aquí y acercar guión del chico, que se parece a esto. Cuando hace clic en bandera verde, para siempre hacer lo siguiente. Si el espacio clave, o la barra espaciadora, se pulsa, por ejemplo Marco por dos segundos, que es puramente estético en el pantalla, un bocadillo pequeño, pero luego emitir. Así difusión es otra pieza Scratch que es representante de una clase de funcionalidad en la programación que permite a los diferentes programas, diferentes hilos, a inter-comunicación, para enviar alguna manera mensajes, uno a otro. Pasar un trozo de papel en clase es una especie de baja tecnología equivalente. Así evento transmitido. Puedo enviar este mensaje, y la palabra evento es completamente arbitraria. Rayado a veces tiene estas listas desplegables, así que se acercó con una palabra al azar como evento porque ahora, lo que el niño hace al presionar la clave es que emite este evento. Y si miro ahora en el guión de la niña, su guión es super simple, porque todo lo que tiene que hacer es no actuar cuando la bandera verde se hace clic. Está diseñado para la acción cuando reciba Lo dijeron ellos, "Event", y en ese momento, ella está escuchando, por consiguiente, el evento llamado una y otra vez. Tan pronto como se reciba ese caso, ella va a gritar Polo durante dos segundos. Y por lo que tal vez pueda deducir de esto exactamente lo que el resultado que viene va a ser. Permítanme clic en la bandera verde. No pasa nada porque tengo que hacer qué? AUDIENCIA: barra espaciadora. David Malan: barra espaciadora. Boy dice Marco, chica dice Polo. Pero eso no es de codificación fija per se. Esa es la intercomunicación entre las secuencias de comandos, por lo que ahora tienen la capacidad de hacer que los programas aún más complejo en el que estos dos son de alguna manera inter-comunicación. Así pues, en qué dirección podemos tomar esto? Pues bien, en conjunto problema 0, en realidad, el objetivo es divertirse con Scratch. Para la edición pirata, en su lugar se divertirá con más versión sofisticada de Scratch llamado BYOB, urbanizado Sus propios bloques, pero la idea es la misma. Usted será capaz de - Sí, eso fue deliberado. Venía de Berkeley. BYOB es la versión de la edición pirata de esto, pero a la vez demografía, la edición estándar y edición pirata por igual, el objetivo a la mano para la próxima semana es en realidad para sumergirse en profundo, ensuciarse las manos con la programación, y hacer algo interesante, hacer algo interactivo, haga algo artístico, hacer algo divertido que en realidad demostrar, de manera que a finales de semana, tendrá un proyecto, no sólo para su primera CS50 conjunto de procesadores, pero vas a tener un poco de algo que se puede mostrar en Annenberg para amigos o familiares, incluso por subirlo a la página web del MIT. Y así, como dije el miércoles, se espera que el 90% de la clase, en general, a hacer las ediciones estándar. Darse cuenta de que también hay esta salida para aquellos de ustedes que de lo contrario puede ser que se encuentre un poco aburrido con lo básico y realmente quiere sumergirse y crear una visión que ya tenemos con conocimientos previos en este más amigable ambiente. Así que me tire otro ejemplo que uno de nuestros ex estudiantes aquí hizo y decirles algo a través del canto. Que del mismo modo, ya que esto juega, piense en cómo usted va sobre la la aplicación de este programa utilizando precisamente estos mismos bloques de construcción, un poco de aleatoriedad, y un pseudo- poco de canción familiar. Si pudiéramos subir el volumen un poco? [MÚSICA - "Es Raining Men" The Weather Girls] David Malan: Eso es todo por CS50. Nos vemos el lunes. [Aplausos]