[REPRODUCCIÓN DE MÚSICA] ANDI Peng: Esto es CS50, y Bienvenida a la semana dos de la sección. Esto es en realidad mientras semana dos de nuestros class-- realidad, la primera semana que hemos tenido sección. Levantando la mano, ¿cuántos de ustedes llegó a súper sección de la semana pasada? OK, eso está bien. Eso está bien. ¿Cuántos de ustedes visto Super sección de la semana pasada? OK. Y ustedes hicieron bien el problema de establecer una? Así que voy a considerar que tenemos un grupo de niños muy inteligentes en esta clase y las cosas van a estar bien. OK. Así primero-- En primer lugar, sólo vamos a actualizar brevemente repasar el orden del día de hoy. Vamos a hablar de la logística del curso. Muchos de ustedes probablemente tiene preguntas acerca de cómo las cosas funcionan en este curso. Vamos a responder a ellos. Vamos a actualizar brevemente ir más bucles en caso cualquiera de ustedes perdieron súper sección. Hablaremos de mapeo ASCII. Hablaremos acerca de las matrices, funciones, argumentos de la línea de comandos. Y, por último, lo que ustedes probablemente todos realmente quiero estar aquí para aprender, es su PSet2. Vamos a tener algunos trucos agradables y consejos sobre cómo hacer eso. OK. Además, en segundo lugar, tenemos un montón de caramelos aquí. Cualquier persona que le gusta el caramelo, acaba de llegar aquí. Coge un poco. Tengo un montón. Tenemos una tonelada en la oficina. Yo realmente no quiero comer dulces durante todo el día. Ustedes deben comer todos los dulces, porque yo lo traje aquí para ustedes. Sólo comer dulces. Habrá dulces cada sección. Así que primero, ¿quién soy yo? Mi nombre es Andi Peng. Yo soy la cabeza de TA CS50 aquí en Yale. Y además de eso, también se ser-- si a alguien le como-- su funcionamiento amigo, tu hombro para llorar. Si la noche anterior debido de su conjunto de procesadores, no tienes idea de lo que está pasando, golpéame. Nos compadecemos juntos, etcétera. Sólo sé que estoy aquí como un recursos para usted como la línea del frente para ayudar a los chicos averiguar cómo para resolver problemas en CS50 y más allá. Mi correo electrónico es andi.peng@yale.edu. También enviaré a un individuo correo electrónico con mi número de teléfono en el mismo por lo que no todo el mundo en el Internet puede ver mi número de teléfono. No dude en llamarme en cualquier momento. En serio, mi teléfono es por lo general adjunto a la mano. Puedo no responder en un par de minutos. Puedo no responder dentro de un par de horas. Pero les puedo garantizar, si me e-mail, si me llamas, texto mí, voy a responder dentro de 24 horas. A menudo, voy a responder antes que, porque entiendo que todo el mundo tiene algunos problemas, y desea que sus respuestas por responder muy rápidamente. Sin embargo, si usted llama Me 30 minutos antes esa pieza que se debe Jueves noche-- ser así, Andi, ayúdame, No he started-- puedo dar que hombro para llorar. Pero tal vez sea hora de pensar en cómo no hacerlo la próxima vez. OK. Vaya. ¿Cómo puedo volver? Allá vamos. Así que en este supuesto, tenemos una tonelada de apoyo para todos. Además de simplemente secciones aquí, que usted cada semana llegar a pasar 90 maravillosos minutos conmigo, también tenemos horario de oficina. ¿Cuántos de ustedes ya tienen estado de las horas de oficina en busca de ayuda? Excelente. Eso es muy bueno para ver, porque nos con una plantilla de más de 45 TA y CA entrenado para este curso que está aquí para ayudar a chicos con sus conjuntos de procesadores. Los lunes están llevan a cabo en el TRULLO aula en 17 Hill House aquí en Yale. Martes y jueves, que están llevan a cabo en bienes comunes. 8:00-11:00 casi todos los días de la semana. Entra, salir. Cualquier problema, sin problema-- acaba de llegar en adelante, y luego le ayudaremos con eso. En segundo lugar, además de las horas de oficina y las secciones, también tenemos pantalones cortos. ¿Alguien ha visto un par de la pantalones cortos o recorridos en los videos ¿en el sitio web? OK. Así que son muy, muy servicial. Nuestra hermosa producción de Harvard equipo allá en esa escuela hacia el norte, se han filmado y producido estos videos tutorial increíbles. Van a tomar paso a paso a través de cómo hacer para resolver un problema. A menudo, si usted está confundido acerca de un concepto sencillo, un concepto singular, echar un vistazo, porque es probable que un corto en algún lugar en nuestro sitio web. Y por lo general es un gran recurso buscar cuando estás primero perdido sobre cómo manejar un problema. En tercer lugar, también tenemos study50 y reference50. Así que estudiar 50 en el sitio web es sólo un enlace. Es, creo, study.cs50.net o algo asi. Sólo Google él. Tenemos un montón de muestras preparadas. Tenemos un montón de pantalones cortos y cosas walkthroughs-- todo compilados muy agradable y limpio para todos ustedes chicos para navegar a través, consulte cualquier concepto que usted está confundido acerca. Sería probablemente será cubierto allá en study50. Reference50-- similar. Tenemos una gran cantidad de diversas notas fácilmente disponible para su disposición. Y por último, tenemos lo que es llama CS50 Discutir, un foro en el que, si la noche anterior que está haciendo sus problemas, dice, usted tiene una pregunta. Entre para CS50 Discuta. Publique una pregunta. Y entonces uno de los hundreds-- tal vez, thousands-- de compañeros tomar esta clase en línea se ingrese. Y tal vez alguien puede conseguir su respuesta antes de una lata TA. Básicamente se trata de sólo una foro en línea que todos podemos utilizar para discutir nuestros problemas. Eso es genial. OK. Así que el problema se pone. Estamos a punto justo en el gruesa del problema planteado dos. Muchos de nosotros ya tiene luchado a través de un problema de un conjunto. Ya sabemos que tal vez esperando para la última noche para hacer su pset No es la cosa más inteligente que hacer en CS50. Consejos y sugerencias esencialmente para el éxito se leen toda la especificación. ¿Cuántos de ustedes ya tienen leer la especificación de conjunto de procesadores 2? OK. Esa es una cantidad sólida. Sé que ustedes probablemente han reconocido por ahora las especificaciones son realmente largo. Son muy, muy larga. Es realmente difícil de leer cada línea de esa palabra cuidadosamente por palabra. Usted quiere simplemente descremada a donde que te dice que hagas algo. Te puedo garantizar, no hagas eso. Si lo haces, es probable que va a perder alguna parte donde se le dice cómo iniciar un problema o que te dice qué nombre Su problema o se le dice, esta es probablemente la mejor manera para empezar a hacer su problema. Y entonces se le perdió. Cuando intenta leer su spec mitad, una gran parte del importante información-- en que no estás va a ser capaz de realmente acceso. Así que lea toda la especificación. Trate de leer toda la especificación antes de llegar a la sección, porque entonces, cuando nos hablar del conjunto de procesadores, que todos podemos tener una idea de lo que está pasando. En segundo lugar, este es un concepto que me va a gustar hacer referencia mucho a lo largo del semestre del curso. Pero, en esencia, nuestro encuentro a mitad de camino, ¿no? Yo, como su ayudante técnico y Jason como plato gerente y Scaz como su profesor y David como su profesor y todos los demás TAs encantadoras en este curso, asistentes en este supuesto-- haremos nuestro mejor esfuerzo para asegurarse de que se establecen hasta para tener éxito en este curso. Vamos a celebrar sección. Vamos a tener horas de oficina. Vamos a responder a su teléfono llamadas, responder a sus correos electrónicos, hacer todo lo posible para que Asegúrese de que sus preguntas sean contestadas. Sin embargo, nos ayudan demasiado. Reunirse con nosotros hasta la mitad. Si vienes a las horas de oficina no haber ido a la sección, no habiendo visto las conferencias, al no tener idea de lo que está pasando, ser, que me ayude. Yo voy a ser como, bueno, lo siento. Quizá sea el momento de prestar que hombro para llorar, porque no estoy seguro lo que puedo hacer para ayudarte si no se intenta al menos ayuda a ti mismo un poco al principio. Reunirse con nosotros hasta la mitad. Ya sabes, por favor venga preparado para responder y obtener listo para participar en el material. Hace las cosas mucho más fácil para todos los involucrados. Sí, eso es prácticamente todo. Clasificación. Así que en el plan de estudios, es bastante en profundidad en relación con la forma en que grado. Pero, en esencia, el desglose en esto es el 50% de la calificación serán los conjuntos de procesadores, los cuales es precioso, porque eso es donde se está gastando el vasto mayoría de su tiempo en curso. Quizzes 40%, y su proyecto final será del 10%. Habrá dos pruebas a lo largo de el curso del semestre. Creo que los tiempos y las fechas son También figuran en el programa de estudios. La forma en que lo haremos debe calificar sus conjuntos de procesadores es que tenemos básicamente de cuatro valores que asignamos a cada grado. Contamos con un valor de alcance, corrección, diseño y estilo. Así que como ves, eso es algo de nuestra fórmula para el cálculo de conjuntos de procesadores. Tres damos más peso a la corrección, porque, obviamente, su entrenador debe probar para los casos que lo queremos para detectar si existen. Ustedes todos tienen check50 a su disposición. Es una función muy útil que ustedes pueden todos cargar su código a nuestros servidores, donde vamos a comprobar que para usted. Y usted ha visto los caras frowny, caras sonrientes. Son muy, muy servicial. Por favor, no ser el estudiante que como intentos para codificar en todas las respuestas a ellos. Sin duda, me he visto un conjunto de procesadores, donde alguien vio a todos los valores de check50 y que sólo dura codificados en-- si este número, imprima este número. Si ese número, imprima ese número. No hagas eso. A pesar de que técnicamente check50 es correcta, su manera de resolver el problema no es la correcta. Entonces sólo tiene que utilizar check50 moderación. Pero también asegurarse de que usted entender cómo está funcionando, el programa está funcionando Además de check50, porque no podemos probar cada posible caso de check50. Estaremos probando algunos de ellos. El diseño es en esencia, cómo bien diseñado es el código? Si usted es copiar y pegar múltiples líneas de código de muchas, muchas veces. Tal vez usted no tiene bastante el mejor diseño en el código. Tal vez es el momento de añadir ese bucle. En esencia, esto es sólo todo por tratar de hacer su código, tratando de escribir su código de manera más eficiente como sea posible para que su programa se ejecuta lo más rápido posible. Por último, tenemos el estilo. Así que el estilo es una especie de arbitrario, término subjetivo. Sé que tenemos oficialmente una guía de estilo 50 para CS50, donde te dice, oh, debe tener un espacio aquí. Usted debe tipo de formato su código de esta manera. Usted debe nombrar las cosas de esta manera. Realmente no me importa, por sí mismo, ¿cómo usted elige el estilo de su código, al igual que siempre y cuando permanezca constante. Por ejemplo, si te gusta dejar un espacio después de su hijo de cuatro antes de su bucle de cuatro, hacer eso todo el tiempo. No especie de hacerlo. No lo hagas otras veces. Si te gusta mantener rizado apoyos espacio de una manera determinada, acaba siempre hacerlo de esa manera. No especie de hacerlo en algún lugar aquí y en algún lugar no existe. Cuando estamos de clasificación, es muy difícil si tengo ni idea de cómo estás formatear su código, las cosas son extravagantes y fuera de lugar. Si te quedas consistente, es mucho más fácil para mí como el mayor ser capaz de leer el código. Es mucho más fácil para usted como estudiante ser capaz de mirar a través de su código y ver lo que está mal con que roza por qué hay problemas. El estilo es una de las cosas más fáciles que ustedes pueden hacer para obtener resultados completos. En esencia, si lo que importa, si usted paga cinco minutos de atención a su código de cada semana, usted debe será conseguir puntos de estilo completo. Por último, tenemos lo que se llama el multiplicador de alcance. Scope-- Sé que es un gran palabra, sobre todo en esta clase. Pero alcance, todo lo que significa es que usted está tratando los conjuntos de procesadores a la medida de su capacidad. Si se activa en tres de sus cuatro problemas y ni siquiera intentar la último, es probable que va a perder algunos puntos sobre el alcance. Incluso si usted acaba de empezar el problema, hacer lo mejor para caminar a través de él. Incluso si no funciona, convertirlo en, debido a que muestra y demuestra para nosotros que usted está tratando, que ha intentado establecer el problema a lo mejor de su capacidad. Y entonces podemos darle puntos completos de alcance. Ámbito de aplicación también es muy importante para cuando hablar de la caída de puntuación pset más bajo. Por eso, durante el transcurso de la semestre, ustedes tienen nueve conjuntos de procesadores. Y que en realidad vamos a estar disminuyendo la puntuación más baja de las nueve, pero sólo si tiene puntos de alcance completo. Así que si a su vez en un conjunto de procesadores incompleta, por desgracia, no podemos dejar caer que uno, debido a que su alcance los puntos no se completaron. Así que incluso si usted tiene la semana horrible donde se está muriendo y que está enfermo o su perro muere, su gato muere, y ya está sobrecargado con la tarea, simplemente tratar el conjunto de procesadores. Hazlo lo mejor que puedas. Si no funciona, no importa. Sólo entregarla. Por lo menos que podemos dar que puntos de esfuerzo. Una para el esfuerzo en esta clase. Al menos caída de puntuación más baja para el esfuerzo. Así que sí. Eso es practicamente todo. ¿Alguien tiene preguntas para ahora en la forma en que su grado en la clase? O alguno de estos? Cualquiera de estos para far-- secciones, las horas de oficina? Guay. OK. Así que este es un tema que no realmente le gusta hablar. Realmente no me gusta hablar de ello. Ustedes realmente no quiero oírme hablar de ello. Pero, por desgracia, todos tiene que hablar de ello. David pasó 20 minutos a dar una conferencia hablando de ello. Y ese es el tema de la honestidad académica. Así que todos aquí, probablemente, hemos escrito un ensayo en algún momento de nuestra carrera de Yale. Probablemente nos hemos metido una charla en la que hemos ha dicho que no plagiar nuestro ensayo, debido a que el trabajo no es el nuestro. En informática, tenemos el mismo tipo de concepto. Todo el trabajo que usted envíe, todo el código que escriba debe ser código que usted ha escrito. ¿No debería ser el código que tienes copiado de otro lugar. ¿No debería ser el código que usted Googled y se dejó caer en y no se sabe muy bien si funciona. Que tipo de tener un sentido de lo que está haciendo, pero en realidad no. En caso de duda, en esencia, es sólo ser razonable. En nuestro programa, tenemos toda una lista de cosas vemos como razonables frente no razonable. Por ejemplo, razonable es usted y su amigo discutir cuál es la mejor manera de ir acerca lógicamente la solución de un problema. Eso es bastante razonable. Lo que no sería razonable es si chicos se reunieron, escriben el mismo código, y se convirtió en el mismo código. Eso no es razonable. La misma cosa, una especie de un ensayo. Si usted quiere discutir con su amigo, oye, esto es lo que quiero escribir. Estos son los pasos que quiero tomar para escribir sobre ella, muy bien. Eso es maravilloso. Por favor, colabore con los demás. Si ustedes empezar escribir la misma cosa, girar en el mismo ensayo, eso es menos bien. Así que en caso de duda, simplemente no lo hagas. En este sentido, en el CS50, tenemos guiones que se ejecutan para automatizar para probar no sólo la corrección de su código, sino también la singularidad de su código. Así que por favor no nos ponga en la posición de tener que derivar su caso a EXCOMM. Por favor, sólo para todo el mundo, vamos a hacer de esto una experiencia maravillosa. Todo el mundo aprende mejor, todos somos más felices, y que está todo listo hasta tener éxito en este curso. Algo que es muy único acerca de esta clase que creo que cada uno debe realmente prestar atención a es que tenemos lo que se llama el pesar cláusula en nuestro plan de estudios. Así que, esencialmente, un plazo de 72 horas, si crees que has hecho algo usted no está realmente seguro de era adecuada, por favor venga a nosotros. Le prometemos que dentro de las 72 horas vamos a tratar el caso a nosotros mismos sin hacer referencia a una mayor autoridad en la administración. Así que si tú vienes a mí y decir, Andi, oye, lo siento mucho, pero creo que hay un par de líneas en mi código de la última noche que tipo de google, se bajó de la Pila Desbordamiento, copiar y pegar, y estoy realmente, realmente lo siento por eso, que me haga saber. Por favor, no dejar que se agraven y sólo espero que lo cojo. Vamos a atraparlo. Solo tiene que venir a mí. Déjame saber dentro de las 72 horas. Vamos a encontrar una solución. Y prometemos que no nos referiremos a autoridades universitarias esencialmente. Así que es en su mejor interés sólo ser honesto con todo el mundo involucrado en el curso. OK. OK. Así que ahora, rápidamente antes Sigo adelante, ¿alguien tiene preguntas con respecto a la logística sobre cómo los cursos que vamos a ejecutar, cómo secciones van correr, nada de eso? OK. Sí. AUDIENCIA: [inaudible]? ANDI Peng: Sí. Así quizzes-- ¿cuántos de ustedes son en la sección Lunes / Miércoles? ¿Cuántos de ustedes están en el Martes / Jueves? OK, así que es una fracción sólida aquí. Así que la forma en que se corre que en Yale es que van a tener dos por separado quizzes-- uno para cada sección- que se tomarán durante la clase. Creo que es de octubre a finales de octubre, algo así como la primera semana de la prueba. Sí, por lo que acaba de llegar a clase. Ese lunes o el miércoles usted tomará la prueba. Ese martes o jueves usted tomará un examen diferente. Pero el mismo material será cubierto. Sí. Buena pregunta. Sí. AUDIENCIA: ¿Dónde estamos ir a consultar nuestras notas? ANDI Peng: Sí. Así que va a enviar a cabo una e-mail lo que cada semana cuando pruebas son graded-- o, lo siento, cuando se califican conjuntos de procesadores. Conjuntos de procesadores son generalmente volvieron en el mediodía o viernes. Así que te prometo que lo haré tratar de conseguir de nuevo a usted por el mediodía del viernes siguiente. Cada vez que un conjunto de procesadores de grado, enviaré una notificación en el libro de calificaciones que te dice tu puntuación se puede ver en línea. Así que justo esta semana, después de que terminar con ley de conjuntos de procesadores de la semana pasada, ustedes van a llegar un e-mail notificación que le dice, bueno aquí es donde usted ir a ver sus calificaciones. Y se puede ver todos los desglose de sus calificaciones. Usted puede ver los comentarios. Oh, cosa rápida también. La sección de comentarios en la gran libro es donde probablemente pasar la mayor parte de mi tiempo de clasificación. Así que una cosa que es realmente importante cuando que ustedes están viendo sus calificaciones en sus conjuntos de procesadores no sólo se busca en la puntuación física sino también tomar tiempo para realmente leer mis comentarios. A menudo, eso te da retroalimentación de cómo se está resolviendo un problema. Si lo que necesita hacer algo un poco mejor, crítica constructiva por lo general es mejor dada en las sección de comentarios. Así que por favor, por favor, me voy pasar tiempo escribiendo comentarios. Por favor, te lo agradecería muchísimo si ustedes leería esos comentarios. OK. Guay. Correcto. Así que vamos a empezar a hablar y acaba de revisar rápidamente algunos de los materiales de semana cero justo lo que estamos en la página correcta para comenzando problemas de esta semana. Así que el bucle while es uno de los tres tipos de bucles hemos comentado anteriormente en esta clase. Un bucle while esencialmente que está escrito en la sintaxis donde, mientras que una cierta condición, hacer esto varias veces, ¿verdad? Piense en ello en este gráfico aquí. Usted va a comenzar en un cierto punto en el código. Vas a entrar en la condición de bucle si: No sé-- x es menor que uno. Si eso es cierto, vas para ejecutar el cuerpo del bucle. Y vas a seguir haciendo que de nuevo, una vez más, de nuevo, una y over-- que es por eso que es un loop-- hasta que su condición se convierte en falsa. Así de esta manera, un bucle while es una de las formas más simples para escribir cualquier tipo de condición que hay que repetir una y otra y otra vez. Sólo tenga cuidado de siempre estás escribiendo cualquier tipo de bucle que usted tiene una condición de salida como así como una actualización de lo que sea es para que su bucle no hace precisamente ejecutar una y otra vez hasta el infinito. En cualquier caso, te vas a querer asegurarse que va a modificar algún aspecto de su código o al final del bucle sólo para asegurarse de que usted tiene una manera de avanzar hacia la condición que desea satisfacer a extremo. ¿Eso tiene sentido para todo el mundo? Simplemente no queremos ser atrapados en esta espiral, donde vamos vueltas y vueltas y no hay manera de romper el bucle. Y cada bucle esencialmente tiene una manera de hacer eso. OK. En segundo lugar, muchos de ustedes en sus conjuntos de procesadores de Mario probablemente tenido que emplear este tipo de bucle. Se llama un do while. En primer lugar, ¿puede alguien decirme cuál es la diferencia entre un do while y un bucle while es? Sí. AUDIENCIA: El bucle Do While corre a primera [inaudible]. ANDI Peng: Sí, exactamente. Así que un do while siempre hace lo que sea está dentro de la do, dentro de los corchetes allí y hace que la condición antes de comprobar el-- siento, hace que el código antes la comprobación de la condición. Y esto es especialmente relevante para nosotros aquí en esta clase, porque la mayoría de veces vamos a querer provocar el usuario de algún tipo de entrada. Y luego, dependiendo de la entrada que nos dan, entonces podemos evaluar, oh, hacer tenemos que impulsar de nuevo? Así que en Mario, si el usuario le dio una altura negativo, por ejemplo, vas a primer mensaje y hacer lo que hay dentro. Entonces usted va a comprobar cuando. Ya sabes, es negativo 1, es que un número positivo? Si no es así, me voy a ir atrás y repetir el hacer y repetir y repetir y repetir hasta que finalmente se le dará un número que te gusta, que todo lo que podemos emplear en nuestro código. Es muy importante para esencialmente cualquier entrada del usuario. Puedo garantizar que cualquier tiempo en un conjunto de procesadores, donde le pedimos a la entrada cualquier tipo de código, estamos probablemente va a dar un caso de prueba en el que estamos te va a dar algo malo que es va a tratar de romper el código. Si tratamos de preguntarle a una entrada número entero, que sólo puede darle una cadena y ver cómo manejaría eso. Si le pedimos que emplear una edad, es posible que le dará un número negativo para ver cómo manejaría eso. Sólo asegúrese de que ustedes están poniendo a prueba para casos en los que no reciben la mejor de entrada, digamos. Y un do while es a menudo la mejor manera de diseñar su código para que cumple con ese ámbito. OK. OK. Así que este es probablemente el más bucle complejo de los tres que hemos visto hasta ahora. Y parece muy complicado en principio. Pero te garantizo que, una vez que ustedes conseguir la caída de cómo utilizar un bucle for, es una de las cosas más útiles, la mayoría de herramientas útiles en su arsenal para avanzar en esta clase. Así por ejemplo, en Scratch, tuvimos esta muy simple bloque que acaba de decir repita este seguro frases cierto número de veces. Por cierto, SAJ-- eso es Scaz Andi Jason. Nosotros muchas veces firmamos nuestro correos electrónicos SAJ. Si decimos SAJ, no ser confundido. Eso es sólo nosotros. Así que en Scratch, hemos sido capaces de tener un bloque que dijo, me encanta repetir SAJ! 10 veces. Muy sencillo. La lógica detrás de esto es una muy, muy simple, ¿verdad? Quiero ir primero a través de la primera tiempo y ver que, por segunda vez y ver que, por tercera vez, etc. y así sucesivamente, hasta llegar a 10. Y la forma en que representaría que en código es sólo a través de un sencillo bucle for. Así que para, usted va a declarar la variable de aquí, en este caso, con un int. Vamos a llamarlo i. Vamos a inicializar a 0. Y la edición de parada es va a ser i es menor que 10. Y la actualización va a ser i ++. Y dentro del bucle, que va para ejecutar hasta que finalmente golpea el extremo de la condición-- en el cual caso, que va a romper el bucle. Debe haber cosas que usted chicos han todo tipo de visto antes y tuvo que hacer para su problema de un conjunto. Alguien tiene alguna pregunta respecto de bucles en este momento? OK. Excelente. OK. Así que para aquellos de ustedes que tienen leer la especificación de conjunto de procesadores para esta semana Sabemos que vamos a tener que emplear algo llamado ASCII y tabla ASCII. Así que David, en la conferencia se dirigió brevemente cómo las computadoras essentially-- todo se codifica en un ordenador en binario, en ceros y unos. Y la forma en que las computadoras son capaces para almacenar diferentes valores además a ceros y unos son a través de la cartografía esos números para representar otros dígitos o esencialmente otros personajes. Así pues, en este caso, una ASCII table-- todo lo que hace es caracteres mapa, o caracteres, a los números. Así que el archivo de código fuente en su computer-- que ve, bueno, un montón de ceros y unos, ceros y unos, ceros y unos. Eso es lo que almacena en la memoria real del ordenador. Pero cuando los seres humanos quieren comunicarse con el ordenador, nos want-- decimos, por ejemplo, si quiero la A mayúscula, Voy a necesitar alguna manera de decirle a la computadora, oh, cuando escribo en mayúsculas A, quiero decir esta representación en binario. Y así, la forma de hacer que se lanzó una Lo arbitrario llama una tabla ASCII, donde nosotros, como seres humanos, como programadores, hace algún tiempo, arbitrariamente decidimos que iban a asignar estos números valores a estos personajes. Así que ustedes pueden google esta línea. Creo que hay un enlace a ella en su pset-- sólo una tabla de mapa ASCII, ASCII mesa. Simplemente se traduce binaria números en caracteres. Y va a ser muy útil para su conjunto de problemas cuando tu quieras calcular algo o si desee mostrar cierta caracteres o números enteros o manipular ciertos personajes. Va a ser muy importante que todos ustedes saber cómo navegar una tabla ASCII. Así, por ejemplo, la mayúscula A se representa por el número 65. Y la minúscula está representado por 97. Así que es importante saber que la diferencia entre los dos valores es 32. A menudo, si usted necesita para convertir de una a la otra, la diferencia es de 32. Y no te preocupes si eres tipo de confusa en esto al principio. Vamos a ir sobre la forma en que lo haría emplear esta en código real. OK. Así que para aquellos de ustedes con los ordenadores portátiles fuera, no dude en tirar de una tabla ASCII, porque estos probablemente requieren ustedes hacer referencia lo que los personajes son. OK. Así que sabiendo que cierta caracteres se asignan a determinados números, si tuviera que correr sólo el primer línea de esa code-- el printf una, minúscula con menos mayúscula A. ¿Alguien tener una conjetura sobre lo que sería impresión de la pantalla en este momento? Así que en primer lugar, lo que hace minúscula representan? ¿Qué número es que codificado en la tabla ASCII. ¿Apenado? AUDIENCIA: 97? ANDI Peng: 97, muy bien. ¿Y qué es mayúscula? AUDIENCIA: 65. ANDI Peng: Entonces, ¿qué es 97, menos de 65 años? AUDIENCIA: 32. ANDI Peng: OK. Así que ¿qué piensan ustedes que va a pasar cuando de entrada esa línea de código en mi computadora? AUDIENCIA: [inaudible]. ANDI Peng: Lo sentimos, hablar. Sin preocupaciones. Este es un muy seguro medio ambiente, menos la cámara. Todos vamos a-- sin preocupaciones. Así que todos vamos a fingir que es sólo nos escalofriante en esta habitación. Sin preocupaciones. Ninguna pregunta es demasiado estúpido. Ninguna respuesta es una respuesta estúpida. Probablemente voy a cometer errores en el curso de mi enseñanza. En serio, chicos, sólo blurt a cabo. Ten confianza en ti mismo, ¿sabes? Entonces, ¿qué fue eso? ¿Quién dijo que la última respuesta? OK. Grita que agradable y clara. AUDIENCIA: 32? ANDI Peng: 32. OK, vamos a ejecutar este código y ver si eso es lo que pasa. OK. Así como ustedes pueden tipo de ver, la notación típica tengo establecido aquí por cómo íbamos a emplear cualquier tipo de programa en nuestro ordenador. Tenemos nuestra función principal dentro de nuestra función principal. Yo sólo voy a copiar y pegue esta línea de código. También tenga cuidado cuando chicos están copiando y pegando el código. A veces, ciertos operadores no pegar sobre correctamente. En ese caso, el signo menos señal era en realidad un guión. Y por lo que el equipo no recogerlo. Así que tuve que volver atrás y vuelva a escribir físicamente eso. Sólo tenga cuidado al que ustedes están haciendo eso. OK. Vamos a ejecutar esta aquí. Así que vamos a cd en nuestra sección2. He llamado a este programa asciimath. Así que recuerda, cuando corremos ningún programa, queremos primero compilarlo mediante la ejecución a través de nuestra marca. Y luego queremos ejecutar realidad el programa haciendo punto-raya vertical. Así que vamos a ./asciimath. Derecha, ahí vamos. Y vemos 32. Bien hecho. Mereces un pedazo de caramelo. Caramelo para usted. Apenado. Correcto. OK. Así que podemos volver a nuestro ejemplo aquí. Aah, no. Aah. OK. Yo sólo voy a seguir así. OK. OK. Así como ustedes pueden ver, podemos hacer un montón de cosas muy interesantes, un montón de cosas muy interesantes, una gran cantidad de cosas muy complicadas que implican Caracteres ASCII y números. Una vez que llegue a la línea de cinco, eso es mucho para seguir adelante. No vamos a ir a través de la sección. No dude, si se puede, razonarlo en papel primero en lo que debería estar sucediendo cuando introduce una cadena como de valores. Por ejemplo, en la última línea, tenemos z-- que representa un cierto number-- A-- que también representa un ciertos number-- más 1 modulos 26 además de minúsculas a. Si ustedes seguir leyendo a través de estos, puede ver un patrón viene en cómo estamos manipulando el código. Lo recomiendo, recomiendo encarecidamente después de la sección a todos ustedes chicos van por delante y la entrada los todo en su computadora y ver qué tipo de los números están saliendo y el razonamiento a través de por qué esos son pasando, porque para sus conjuntos de procesadores que va a ser realmente importante para que usted entienda por qué ciertas cosas están sucediendo. Todas estas diapositivas estarán en línea. Así que no se preocupa por tratar de copiar físicamente notas. En línea de todo. En esta sección sí estará en línea. Toda mi código fuente que Estoy corriendo estará en línea. Sí. ¿Sabía usted todavía tiene una pregunta? AUDIENCIA: ¿Cuál es modulos? ANDI Peng: OK. Así módulo es un operador que va a ser bastante importante conjunto de procesadores de sus chicos Aquí. Así que la forma que los operadores en C y en el trabajo de programación es que usted tiene lo que se llama la símbolo de la división y el símbolo de módulo, que es como el signo de porcentaje. Así que en C, cuando haces un entero dividido por un entero con una barra, C tiene una tendencia a querer cortar off todos los puntos decimales, porque un número entero quiere para convertir a un entero. No va a querer ser un doble con un montón de decimales todo después de ella. Así que si lo hago 3 dividido por 2, que va para cortar el 0,5 y sólo le dará 1. Así que eso es algo para estar muy cuidadoso de cuando estás haciendo cualquier tipo de matemáticas en la programación, es que los números que quedan pueden no ser los números que estabas pensando, que es la razón por redondeo en su último conjunto de procesadores es tan importante. Modulo le da el resto. Así, por ejemplo, si lo hice 3 módulo 2-- modo 3 por ciento signo 2-- le daría el resto de ese. Así 3 dividido por 2 es 1,5. Es 1 resto de 1. Le daría a la 1, que es el resto de eso. Así que cuando ustedes se están moviendo a través de la tabla ASCII, módulo va a terminar siendo algo que es muy importante, y vamos a discutir eso más adelante. OK. Así que algo que es bastante, bastante nuevo y bastante único que hemos discutido esta semana es el concepto de lo que es una matriz. Así matriz es el primero tipo de estructura de datos que vamos a encontrar en esta clase. Toda la estructura de datos se está algún tipo de arbitraria, literalmente cosas como la estructura que nosotros como programadores hemos creado, que hemos puesto en nuestro código que puede contener otras piezas de código. Así que en este sentido, un array-- pensar en él como un archivador, donde si abre diferente estanterías de su gabinete, se puede acceder a diferentes cosas. En la memoria, un array sólo está haciendo lo mismo en el equipo. Usted puede tener diferentes que blocks-- llamarlos indices-- de una matriz. Es como un bloque, un estante de la memoria que hemos creado dentro de su equipo que puede introducir ciertas cosas en diferentes espacios. Así que con una matriz, siempre hay que specify-- tiene que especificar declarar un matriz en el siguiente formato. Vas a primera especificar el tipo de datos que desea crear de la matriz. Si quiero una matriz de enteros, Me voy a poner int allí mismo. Si quiero una matriz de cadenas, Me voy a poner cadenas allí, el nombre de su matriz, y luego vas a tener corchetes. Y dentro de los corchetes, eres va a tener el tamaño de su matriz. Algo que es realmente importante para tener en cuenta al crear arrays es que, una vez que se crea una array, que el tamaño no puede cambiar. Así que si usted sabe que en este momento usted tiene una matriz de tamaño 10, usted sabe que voy a tener 10 células dentro o 10 índices dentro de esta matriz, y que nunca va ampliar o disminuir no importa qué, y que hay Actualmente sólo 10 bloques de espacio asignado en su memoria que puede almacenar hasta 10 cosas de todo lo que has puesto. Así de esta manera, un tipo de datos de matriz, la estructura de datos que es una matriz es muy diferente de algunos otros que vamos a estar cubriendo más adelante en este curso. Sí. Por ejemplo, si usted quiere crear una matriz de tamaño 3 que variables contenidas de integer-- oh, lo siento, de temperature-- y la temperatura, de Por supuesto, es un número entero. Así que nos creamos int, que es el tipo de datos de lo que queremos guardar. Vamos a llamar a esta temperatura en aras de la nomenclatura de los nombres algo que todos entendemos. Y vamos a tener entre corchetes. Y queremos tres números. Así que vamos a poner de tres en el interior de la misma. Algo que es muy importante a tener en cuenta es que las matrices se indexan cero. Todo lo que significa es que usted comenzar con el índice de 0, y se ejecuta a través de la tamaño de la matriz menos 1. Así, por ejemplo aquí, tener una matriz de tamaño 3. Va a ser capaz de a celebrar tres valores. Pero los números que themselves-- número, la matriz, que índice, la matriz, son del 0 al 2. Así que chicos, ser muy, muy cuidadoso cuando usted va a través de sus problemas establecidos y la creación de cualquier tipo de matriz, porque muchas de las veces es muy, muy fácil de olvidar eso. En realidad, yo no tengo el índice de 3, que actualmente solo tener el índice de 2. Y si intenta acceder a la tercera índice, que va a ser lo que es llamado el terminador nulo. No va a realidad existir en la matriz. Y el equipo es No va a gustar eso. Así que tenga cuidado cuando que está accediendo cosas para asegurarse de que se acuerde que las matrices son cero indexados. OK. Así que el primer ejemplo es sólo una manera de crear una matriz. El segundo ejemplo que tengo a continuación es sólo una forma separada de la creación de lo que es el mismo de datos estructura que acabamos introducidos. Así que en vez de físicamente funcionando a través y poner en la temperatura de 0 es igual a lo que sea, la temperatura 1 es igual a lo que, de temperatura 2 iguales lo que sea, lo que pude en realidad sólo crear directamente todo en una sola línea entre corchetes temperatura iguales. Y fíjense en este caso, no es necesario para especificar el tamaño de su matriz es, porque el equipo va a ir a través y ver que hay tres elementos en esas llaves. Y se va a saber, está bien, Necesito una matriz de tamaño 3. No vas a necesitar de entrada es de la siguiente manera. Y también, si, de esa manera. ¿Alguien tiene preguntas con respecto a cómo hacemos arreglos o cómo funciona la estructura de una matriz? Sí. AUDIENCIA: [inaudible]? ANDI Peng: Sí, exactamente. Así que si usted fuera a declarar e inicializar una matriz el siguiente método, que es la segunda manera, usted puede simplemente dejar esos. Y la computadora sabe automáticamente que debe contar cuántos elementos están en esas llaves, separados por comas. Así que aquí ven 65, 87, 30. Así que el equipo sabe, oh, hay tres enteros. Sé que para crear un nombre de matriz temperatura con tres elementos en los mismos. Buena pregunta. Sí. AUDIENCIA: ¿No es posible la creación de una matriz con diferentes tipos de datos que se podía entrar en ella? Por ejemplo, con números enteros [inaudible]? ANDI Peng: A los efectos de esta clase, no, ahora mismo. Cuando se crea un conjunto de datos estructurar como una matriz, estás diciendo la equipo, hey, te necesito asignar este mucho memoria en mi disco duro, con cada celda de ser una cierto número de bits. Recuerde que aprendimos en la semana cero que datos diferentes tipos tienen diferentes tamaños? Así, por ejemplo, una cadena es una cantidad diferente de espacio que un char, que es una cantidad diferente de espacio a partir de un número entero. Y así, si no se especifica y mezclar y combinar qué tipos de variables usted tiene, el equipo de va a ser muy confuso. Y no va a saber la cantidad de memoria para darle. Así que para los propósitos de la derecha Ahora, las computadoras sólo pueden reconocer un tipo de una matriz. Buena pregunta. OK. Así que, naturalmente, la segunda pregunta que tenemos es, bueno, ahora que hemos creado un matriz y que hemos puesto todas estas cosas en la matriz, ¿cómo vamos va a ser capaz de acceder a él? Así que la estructura típica que siempre acceder a una matriz es nuestra preciosa para bucle. Te prometo que ustedes que vamos a ser viendo un montón de este hombre aquí. Esencialmente, cualquier momento que desee para introducir valores en una matriz o si desea acceder a ellos, la mejor manera de hacerlo es un bucle for, porque en un bucle for, que Sabes cuántas veces eres va a querer correr a través de la matriz, porque usted tiene una edición parada, ¿verdad? Y cada vez que se ejecuta a través, puede acceder a un elemento diferente de la matriz. Y también, esta es una razón por la cual típicamente comenzamos nuestro bucles en el valor 0, porque cuando se accede a las matrices, se puede acceder al índice cero. Y lo que es paralelo muy bien. Ustedes pueden haber querido escribir para int i es igual a 1. i es menor que o igual a 3. Pero no iba a funcionar tan bien aquí, porque sólo tener elementos de 0, 1, y 2. Y por lo que si usted fuera a comenzar su i en el elemento 1, 2, y 3, usted va a terminar corriendo fuera de los límites de la matriz, y las cosas malas van a suceder. Así que espero que ustedes ven el segue de por qué en las clases anteriores os enseñábamos chicos cómo ejecutar y formatear un bucle for la forma en que nos encontrábamos. Es porque, ahora que hemos la transición a las matrices, se puede ver por qué los 0 presta sí muy bien para el acceso. Así que la forma en que hacemos que es que-- Estoy simplemente imprimirlo aquí en aras de imprimirlo. Pero yo tengo mi marcador de posición, coma. Y el que accede real parte está sucediendo. El nombre de la matriz se llamó la temperatura. Así que es la temperatura y la i-ésimo elemento de la matriz. Así como para recorrer corre, que va a comenzar a 0. Se va a imprimir la Índice 0 ª de esta matriz. Luego se va a imprimir el primer elemento. Luego se va a imprimir a cabo la segunda. Y luego vamos a romper. Es claro en todo el mundo lo que está sucediendo? Excelente. Correcto. Así que aquí tenemos una forma de diciendo, si no queríamos para codificar me en-- como el programador. Yo no quiero realidad física puesto en cada elemento individual de esta matriz. Si quisiera lugar tener los valores de entrada del usuario, ¿cuál es la mejor manera de hacer eso? Bueno, aquí he creado esta hermosa función, en la que yo puedo declarar una matriz. Así int scores-- vamos simplemente decimos que queremos hacer una matriz que contenía los grados de los 18 de los estudiantes aquí en esta sección. Creo que tenemos un poco más de 18 niños de hoy. Pero por el bien de ejemplo, vamos a suponer que teníamos 18. Me gustaría crear un nombre de matriz con puntuaciones tipo int, porque las puntuaciones, por supuesto, son números. Y yo voy a tener 18 entre corchetes, porque ese es el número de estudiantes que quiero ser capaz de almacenar decenas de. Y la manera en que yo había pueblan la matriz es que yo había ejecutar a través de un bucle for, de Por supuesto, siendo 0 mi índice 0 ª. Y luego, con 18 siendo mi detener la edición, porque no hay 18 elementos de la matriz. Y luego me voy a hacer printf, introduzca anotar para student-- bla bla bla. ¿Puede alguien decirme por qué aquí estoy imprimir i + 1 y no yo? Es un poco un truco se trata, en realidad no. En realidad, no físicamente afectar a la ejecución del código. Sí. AUDIENCIA: [inaudible] 0? ANDI Peng: Sí, exactamente. Es un poco difícil de decir, bueno, eres el estudiante 0th en esta clase. Es un poco raro. Así que nosotros, como seres humanos, no me gusta pensar en cómo piensan los ordenadores. Así que, aunque en el equipo, es el almacenamiento de los valores en el 0 º índice, cuando somos seres humanos, no lo hacemos de verdad referirme a nosotros mismos como cero. Así que cuando me acaba de impresión que, Voy a imprimir y añadir 1 sólo por el bien de la claridad. Así que cuando imprimo, yo voy a ser capaz de imprimir los estudiantes del 1 al 18. En realidad, no afecta el funcionamiento de la código de ninguna manera, la forma en que se imprime. Pero tenga cuidado cuando estás en realidad el acceso a la matriz. Cuando vea los resultados i, notar aquí que soy en realidad acceso al índice 0 ª y no la 1 más 0-- o 1 más 1, En este caso, el índice de por lo que en realidad es clara. ¿Están todos tipo de OK en cómo esto se está ejecutando a través de y con todos los índices que soy poner un valor en la matriz y la creación de una matriz con 18 números que el usuario va a la entrada? OK. Guay. OK. Ahora nos movemos hacia algo que es bastante relevante para esta pieza establecer también. Sé que en la conferencia, David-- lo siento, tenías una pregunta? AUDIENCIA: ¿Se puede ampliar? ANDI Peng: Sí, así que lo intenté. Pero yo no lo sé. Por alguna razón, esta versión de PowerPoint es realmente no funciona bien con la pantalla. Así que sólo vamos para mantenerlo así. Todos ellos se subirán en línea. Lo siento chicos. Sí. OK. Así también podemos tener cuerdas. Así que si ustedes realmente me notice-- Sabe Rob se acercó esto en esa conferencia que did-- una cadena es en realidad sólo un conjunto de caracteres, si se piensa en ello, ¿no? Una cadena es un nombre o un frase o una palabra, ¿verdad? Si tuviera que crear una cadena denominada Andi-- sólo mi nombre, A-N-D-I. Se piensa en eso como una sola variable. Pero, en realidad, se descompone en apenas una serie de caracteres. Por lo tanto, tiene un carácter de una almacenan en un valor de matriz. Tiene un carácter de n almacenada en el segundo índice y así sucesivamente y así sucesivamente. Así, de tal manera, en realidad tienen este tipo de estructura establecida en lugar para nuestras cadenas. Así que aquí, si yo tuviera que introducir el palabra "comer" - por lo que la palabra cadena es igual conseguir cadena. Si tuviera que introducir la palabra "comer", que es físicamente la forma en que mi equipo está almacenando esa cadena en mi memoria. Y si quería ejecutar a través de ese y de impresión que fuera-- así que para en i es igual a cero, recuerda, en conferencia, algo cubierto que se llama strlen, o la longitud de la cadena. Porque en realidad no sabe lo grande que la matriz es de cualquier inputting-- del usuario Por ejemplo, he introducido la palabra "comer", y sé eso es tres caracteres de largo, ¿no? Así que podría poner en una de tres que hay y todo va a estar bien. Pero si su entrada del usuario algo eso es un número diferente de valores, usted va a no ser capaz de realmente Sabe que cuando se programa el código. Así que la forma en que manejamos los casos de prueba así es que tenemos algo llamada strlen, que es sólo una función que te dice cuánto tiempo una cadena es. Así strlen de la palabra. Mi palabra es comer. n es igual a strlen de la palabra. ¿Puede alguien decirme lo que valor efectivamente está ahí? Lo que n representa a la derecha Ahora, en este ejemplo, si tuviera comer? AUDIENCIA: 3. ANDI Peng: 3, exactamente. Así que tenemos para int i es igual cero, n es igual a 3, esencialmente. Y me va a correr hasta que sea menos de 3i ++. Y que va a ir en esencia a través y hacer lo mismo. Se va a imprimir todo valor y darle COMER. Es sólo que denota una diferente manera de escribirlo. Eso va a ser muy útil. Sí. AUDIENCIA: ¿Qué hay de los beneficios de poner n es igual a la palabra strlen dentro de ese bucle for [inaudible]? ANDI Peng: Sí. Así que si yo fuera a-- decir, por ejemplo, si yo fuera a hacer eso y después hacer-- oop-- que, en mi código, sería en realidad estar haciendo como la misma cosa. Sin embargo, la forma en que David explicó durante la conferencia, si alguno de ustedes recuerde, era que, como seres humanos, como programadores, Realmente tratamos de programar nuestra código para que nuestro equipo tiene trabajar como mínimo posible, por lo que que nuestro código es muy eficiente. Así que si tuviera que hay, lo que que pasaría a través de mi bucle for es que me declaro una primera i llamado la variable va a ser 0. Voy a comprobar, oh, lo que es lo strlen de palabra? Oh, el strlen es 3. Así es i menos de tres? Sí lo es. Voy a correr. Y entonces la segunda vez la vuelta el bucle, voy a incrementar i. i va a ser una. Y me va a comprobar, oh, pero ¿cuál es el strlen de la palabra? Oh, es tres. ¿Y que parecen tipo de desperdicio, cada vez que se ejecuta a través del bucle, a la comprobación de la función, a pesar de que los strlen de palabra en realidad nunca cambia? Así que es más potencia de un ordenador. Cuando empiezas a hablar acerca de las cosas que son miles de millones y miles de millones de lugares largo, imaginar su ordenador tener que ir físicamente a través y comprobar todo eso cada vez. Por eso, para hacer justo en aras de la eficiencia, tendemos a simplemente hacer esto, porque de esta manera, sólo estamos llamando a la función una vez en el principio, y que cada vez que pasa por que va para almacenar el valor 3 allí, que no lo hace que comprobar continuamente cada vez. Sí. AUDIENCIA: Lo sentimos. Justo [inaudible]. ¿Podría usted int n es igual a strlen y poner que por encima de la parte exterior del bucle for ¿así como? ANDI Peng: Sí. Usted podría hacer eso, absolutamente. La razón por la que tenemos aquí es porque la forma en que una de las obras de bucle es que se llama variable local en el sentido que todo lo que eres crear dentro del bucle for sólo existe en el interior del bucle for. Así que la única variable i existe en esos soportes. Y aquí las variables de N también sólo existe en esos soportes. Así que si usted fuera a utilizar strlen de palabra varias veces hasta abajo, absolutamente la mejor manera de hacerlo sería declarar hasta la parte superior por lo que no tiene que hacerlo una vez. Sí. AUDIENCIA: ¿Por qué tiene un nueva línea después de que el ciento ver si usted quiere poner todo las letras junto a él por separado? ANDI Peng: Oh, yo quería imprimirlas todas en cada línea. No importa. Sí, se trata de un formato. Esa es una buena pregunta, sin embargo. Sí, si quería imprimir todo en una sola línea, Yo no tendría el guión en. OK. ¿Todos bien? OK. Guay. Así que creo que he hablado suficiente. Turno de Ustedes se ejecute a través de la código y decirme lo que está mal aquí. ¿Dónde está el error? Así como usted puede ver, he declarado un nueva matriz de tipo cadena de clase llamada. Y he introducido Sam, Jess, y Kim en ella. Y estoy tratando de imprimir todos los elementos de la matriz. ¿Puede alguien decirme por qué esto me va a dar problemas? Te voy a dar 10 chicos segundo para pensar en esto. OK. ¿Sí? AUDIENCIA: ¿Es el centro izquierda igual a 3 o [inaudible]? ANDI Peng: Correcto. Entonces, ¿cuántas veces es esta realidad va a correr a través de este circuito? AUDIENCIA: Cuatro. ANDI Peng: Exactamente. Va a través de cuatro veces. Se va a ejecutar a través de a los 0, 1, 2, y 3, debido a que su elemento es i es menor que o igual a 3. No va a dejar cuando es 2. Se va a mantener ir hasta que llega a 3. Y como sabemos, hay sólo tres elementos de nuestra gama actual. Si intentamos acceder al cuarto elemento o el índice de 3, usted va a golpear a algún lugar en la memoria que no existe. Se llama el terminador nulo. Nada va a estar allí. Su equipo no se va a ser muy feliz contigo. Sí. ¿Alguien tiene preguntas sobre por qué lo que estaba sucediendo? Eso es un espacio común de evitar. Sí. AUDIENCIA: No ¿El primero deslice también tienen una cadena de 2? ANDI Peng: No. Así que, esencialmente, cuando usted está haciendo una matriz, ese derecho soporte allí, que number-- todo se dice que es la forma de muchos elementos que tienen. No es en realidad diciendo me los índices de nada. Así que en este caso, sé que quiero escribir con tres lugares, con tres lugares físicos a Sostengo lo que quiera celebrar. Así que por eso el número tres está ahí. Sin embargo, si quería acceder a la realidad, si lo que quería decir, printf número de soporte de clase, entonces usted va a poner realmente el índice de física allí. Sí, buena pregunta. AUDIENCIA: Así es la física Índice supone que es [inaudible]? ANDI Peng: Lo siento. ¿Puedes hablar un poco? AUDIENCIA: Así es el índice físico [Inaudible] cada una de las cajas? [Inaudible]? ANDI Peng: Sí. Así que me voy a ir de nuevo a la derecha aquí. Piense aquí. Tenemos una matriz de tamaño 3. Hay tres lugares, como, marcadores de posición física en aquí. Pero están nombrados 0, 1 y 2. Así que si quería acceder a ellos, el camino que yo les acceder printf es de lo que quisiera aquí. Usted tendría que imprimir el nombre de la misma, porque entonces el ordenador sabe, oh, tengo que mirar en esta matriz para el índice 0 ª. Sí. Pero el tamaño de la misma no cambia. El tamaño es de 3, sin tener en cuenta de cómo se les etiqueta. OK. ¿Todos bien? AUDIENCIA: Así que cada vez que [inaudible]? ANDI Peng: OK. Así que en este caso, no lo hacemos de verdad entrar en ella en estos momentos en el curso. Pero saber que un string-- como yo dijo antes, una cadena es esencialmente una serie de caracteres. Así que si puedo crear un array de cadenas, que tipo de tienen una gran variedad de gama de personajes, ¿no? Así que en este caso, porque yo tener una matriz de cadenas, si usted fuera a introducir una palabra muy larga, que todavía ocupa un solo espacio, porque esa es la cadena. Pero si tuviera que pensar en los personajes de esa matriz, entonces eso es ocupar mucho más personajes que cualquiera de las otras palabras son. No es realmente importante para este momento. Pero eso es sólo general cómo está funcionando. OK. Así que esto es algo que voy a dejar que hagas mucho en el transcurso del semestre. Necesito descansar mi voz. Ustedes necesita estimular ustedes mismos. Muchos de ustedes probablemente tienen que dormir en este momento. Estoy introduciendo problemas aleatorios donde nosotros como una clase o con un compañero a tu lado van para pasar un par de minutos discutiendo sobre cómo íbamos a ir sobre la solución o la creación de un programa como este. Así que ahora mismo, queremos para crear un program-- vamos a llamarlo upper.c-- que los conversos una palabra en minúsculas a una clase alta mayúscula string--, lo siento. Palabra en cadenas, lo siento, es sinónimo. Voy a cambiarlos a significar lo mismo. Sí. Tomar un par de minutos. No tiene que ser escrito en cualquier idioma. Justo en el código pseudocódigo o lógicamente la forma en que lo haría aun ir haciendo tal problema. Sí. [CONVERSACIÓN SIDE] También me di cuenta de que ustedes can-- Yo como que veo ya el programa. Supongo que mi falta de modo de presentador es un problema. Pero está bien. [CONVERSACIÓN SIDE] Sí, por favor, chicos. Venga conseguir caramelos. Venga conseguir caramelos. AUDIENCIA: ¡Sí! [CONVERSACIÓN SIDE] ANDI Peng: También, sí, Voy a empezar lanzando caramelos a las personas que no responden a las preguntas. Así que todos debemos responder preguntas. O supongo que la gente que no responder a las preguntas. Sí, revés. [CONVERSACIÓN SIDE] AUDIENCIA: [inaudible] ANDI Peng: Sí. Sí. [CONVERSACIÓN SIDE] Muy bien, chicos. Tomemos, como, 10 segundos más. [CONVERSACIÓN SIDE] Ok muchachos. Así que antes de empezar a tratar de en realidad físicamente escribir código, un buen hábito para desarrollar es que queremos primera clase de la razón lógicamente cómo íbamos a hacerlo. Usted quiere asegurarse de que, antes de que físicamente empezar a tratar de codificar en Mario, que haga Asegúrese de que usted tiene su pseudocódigo. Que se está llevando a través de lo que necesita para crear de manera que, cuando físicamente escribir su programa de tarde, usted es más capaz de detectar errores en el código y cosas por el estilo. Así que vamos a empezar justo por-- en Inglés, en pseudocódigo, ¿alguien quiere dar mí una explicación genérica de cómo íbamos a ir haciendo esto? Sí. AUDIENCIA: [inaudible]. ANDI Peng: Claro, no se preocupe. AUDIENCIA: ¿Se puede pedir a o pedir alguien para conseguir cadena 1-- sí, cuerda, y entonces-- ANDI Peng: Sí, por lo que este es un buen comienzo. Voy a empezar a escribir, lo siento, como usted habla. Asi que-- AUDIENCIA: --el minúsculas los números son más altos, ¿no? O las letras minúsculas tienen altos números? ANDI Peng: Exactamente. AUDIENCIA: Entonces restamos 32 de cualquier [inaudible]. ANDI Peng: Grande. Así que tipo de tener un sentido general de cómo trabajar sobre este problema. Sabiendo que hemos tipo de Aprendimos la forma física que las cadenas se almacenan en la memoria, lo que haces ya Sabes que vas a probablemente tiene que escribir en el código con el fin de moverse a través de la cadena? AUDIENCIA: Para bucle. ANDI Peng: Un bucle for, exactamente. Excelente. Así que tipo de tener un genérico pseudocódigo escrito ese tipo de está dando notas de cómo se se movería sobre la solución del problema. Ahora que tiene esto, puede hacer referencia para más tarde cuando usted está tratando de en realidad escribir el código. Así que en realidad podemos ir aquí. Y tengo una función llamada upper.c-- allí es-- apenas de una plantilla en blanco en este momento que ustedes van a Me gustaría saber sobre cómo escribir esta línea de no code-- línea de código. Será múltiples líneas de código. Al iniciar cualquier tipo del conjunto de procesadores en blanco, lo que es lo primero que necesito recordar a hacer? AUDIENCIA: [inaudible]. ANDI Peng: Gran Sip. Incluir. stdio.h. A menudo este es uno de Los errores más fáciles personas hará que cuando están escritura, es que van a se olvide de incluir un importante biblioteca que necesitan. Así que si sus horarios de oficina y usted es como, No sé por qué mi código no funciona. ¿Me puede decir por qué no está funcionando? Vamos a decir qué #include? Usted debe #include ella. OK. Así que tenemos el estándar de E / S aquí. ¿Es esa la única biblioteca vamos a necesitar aquí? ¿Qué más vamos a hacer? Apenado. Alguien acaba de gritar hacia fuera? AUDIENCIA: [inaudible]. ANDI Peng: Hay que ir. OK. ¿Y cómo hago para comenzar cualquier tipo de la función, cualquier tipo de función principal dentro de nuestro programa? Int principal. OK. ¿Qué puedo poner aquí dentro? ¿Cuál es la primera cosa que quieres hacer? Si queremos conseguir un cadena del usuario, ¿qué vamos a tener que hacer en esta primera línea? Lo sentimos, ustedes simplemente se siente libertad para hablar y en voz alta. Sólo gritar lo que sea. AUDIENCIA: Pida al usuario? ANDI Peng: ¿Cómo lo hacemos? Ask-- voy a escribir "pedir al usuario"? AUDIENCIA: Printf. ANDI Peng: OK. Printf. ¿Qué es lo que quiero printf? AUDIENCIA: Escriba algo. ANDI Peng: Al igual que? Chicos, pretenden como si yo fuera un ordenador. Físicamente me dicen cada paso que tengo que escribir aquí? ¿Estoy haciendo algo mal? ¿Debería haber escrito algo? AUDIENCIA: Usted necesita comillas. ANDI Peng: Necesito cotizaciones? OK. OK. AUDIENCIA: Y entonces nueva línea. Punto y coma. ANDI Peng: punto y coma? OK. Bien. AUDIENCIA: Y tal vez especificar que usted lo quiere en minúsculas? ANDI Peng: Grande. Ustedes se ríen de mí olvidarse de poner un punto y coma. Te garantizo que en algún lugar en el curso de esta clase, usted se olvide de poner un punto y coma, y le llevará tres horas a la figura por qué su código no funciona. Nos ha pasado a todos nosotros. Esto sucederá probablemente a usted. Póngase en un buen hábito de usar puntos y comas. OK. AUDIENCIA: ¿Usted desea para hacer la barra invertida en? ANDI Peng: Claro. ¿Quieres hacer la barra invertida en? AUDIENCIA: Sí. ANDI Peng: Grande. OK. ¿Que hago después? AUDIENCIA: Obtener cadena. ANDI Peng: Obtener cadena. Entonces, ¿qué escribo? Alguien? AUDIENCIA: String s. ANDI Peng: String s. AUDIENCIA: GetString. ANDI Peng: Alguien, puedes decirme dónde esta función GetString está viniendo? AUDIENCIA: string.h. ANDI Peng: string.h? ¿Crees que es de string.h? AUDIENCIA: [inaudible]. ANDI Peng: Hay que ir. Es de CS50.h. Si siempre está confundido en donde un archivo de biblioteca es o un archivo de cabecera es, google literalmente string.h, y te diré ¿cuáles son todas las funciones que están en string.h. OK. Así que ahora que he creado una cadena y he solicitar al usuario que, Me ha almacenado en una variable s con nombre, ¿qué tengo que hacer ahora? AUDIENCIA: Compruebe si está en minúsculas. ANDI Peng: Lo siento? AUDIENCIA: Compruebe si está en minúsculas. ANDI Peng: Muy bien, vamos a hacer eso. ¿Cómo puedo hacer eso? En realidad, para los fines de la clase en este momento, sólo vamos a asumir que todo que de entrada ya está en minúsculas. Si quería comprobar, lo haría simplemente añada una sentencia condicional que comprobó, que corrió a través de cada elemento de la matriz única y comprobado si es entre ciertos valores. Me olvido de lo que el número de los valores de minúsculas son. Usted puede mirar para arriba en la tabla ASCII. Pero sí, es un muy buen punto. Pero en este momento, sólo vamos a asumir que todas las cuerdas que de entrada son en minúsculas. OK. Entonces, ¿cómo hago para este problema siguiente? AUDIENCIA: Para bucle. ANDI Peng: Para lazo? OK. Dime lo que escribir. AUDIENCIA: Para int i es igual a 0. ANDI Peng: OK. AUDIENCIA: Oh, en realidad, entonces usted hacer una coma y hacer n es igual a strlen. ANDI Peng: cosa tan importante que yo creo que ella se dio cuenta aquí es que no teníamos que decir int n la segunda vez que hizo esto. Sólo tienes que saber que en una de bucle cuando se está declarando, que realmente no necesita el int de la segunda vez que haces una variable. Se puede decir n strlen. AUDIENCIA: De s. ANDI Peng: s. OK. AUDIENCIA: Entonces un punto y coma. ANDI Peng: Claro. AUDIENCIA: Y entonces [inaudible] n. Entonces i ++. ANDI Peng: Grande. Correcto. ¿Qué queremos interior de este bucle for ahora? Recuerde, si vamos a ejecutar a través de una cadena y ejecutar a través de una matriz, queremos comprobar las cosas en ella. ¿Qué vamos a necesitar? Esta es una especie de la parte difícil ahora. Alguien tiene una conjetura? OK. Así que primero, ¿cómo incluso el acceso? ¿Cómo podemos siquiera primer cheque o acceder a un elemento de la matriz? como hacemos eso? ¿Cuál es la notación que usamos para hacer eso? ¿Cuál es el nombre de esta serie se llama? Se llama s, ¿no? Recuerde, cualquier cadena es siempre una matriz. Así soporte s i, ¿verdad? Porque ese es el valor actual o valor del índice que estamos comprobando. Y vamos a establecer que la igualdad a-- queremos un valor en minúsculas, ¿verdad? Queremos convertir esa lower-- lo siento, queremos una mayúscula. Queremos convertir la minúscula valor en una mayúscula. Y así como-- Lo siento, ¿Cuál es tu nombre? AUDIENCIA: Heidi. ANDI Peng: Lo siento? AUDIENCIA: Heidi. ANDI Peng: Heidi. Al igual que Heidi dijo Inicialmente, estamos probablemente va a necesitar el-- estamos probablemente va a tener que restar 32 desde cualquier CHARC que es, ¿no? Debido a que en una ASCII mesa, la diferencia entre una letra minúscula y una letra mayúscula es 32. Así que cuando estamos haciendo esto, probablemente estamos va a querer restar 32, ¿no? Así que vamos a hacer s i. ¿Todo el mundo entiende por qué lo hice? Porque ahora, en nuestra serie, estamos comprobando el índice 0 ª, ¿verdad? Y en el índice 0 ª del cadena, que es el primer carácter. Y ese carácter que vamos a asumir que es minúscula. Si queremos que sea mayúscula, nos tiene que restar 32 de su valor, porque en nuestra ASCII mesa, así es como lo hacemos correspondiente a la siguiente valor que hace que sea mayúsculas. ¿Todo el mundo entiende eso? Sí. AUDIENCIA: ¿Podría usted también no minúsculas un minus-- ANDI Peng: Sí, así que eso es realmente buena. Voy a volver a eso pregunta después de que hacemos esto. Sí. Y luego si quiero ver lo que está pasando, Probablemente voy a que desee imprimir, ¿verdad? Que alguien me diga lo que Quiero imprimir aquí. AUDIENCIA: ciento printf c barra invertida [inaudible]. Ese es el valor de [inaudible] s i. ANDI Peng: s i, lo siento? AUDIENCIA: [inaudible]. ANDI Peng: No sé. ¿Qué piensas? AUDIENCIA: Bueno, yo wouldn't-- Supongo que no me bring-- Me gustaría llevarlo a cabo el en el interior, ya que [inaudible]. ANDI Peng: Oh, usted habría hecho eso? AUDIENCIA: Sí. ANDI Peng: Vamos a dejarlo así el camino que es, y voy a explicar por qué más tarde. Recuerde, incluso cuando usted tener un marcador de posición, usted quiere poner paréntesis alrededor. Correcto. Así que esto debe ser una función sólida aquí. Vamos a correr y ver si se compila. Hacer superior. UH oh. Eso no parece demasiado bueno. ¿Por qué está pasando esto? Al igual que con cualquier error, quieres ir atrás y comenzar con la primera, porque por lo general las causas de un error un montón de otros errores después de ella. Aquí vemos upper.c: 18: 25, que dice yo en este programa denominado upper.c, en la línea 18, el error de declarar implícitamente biblioteca de funciones strlen con el tipo bla unassigned--, no sé ¿qué pasa después de eso. Todo lo que me está diciendo en este momento está de que algo está pasando en el strlen. Y el equipo está confundido, porque es como, no sé lo que strlen es? ¿Qué significa que, probablemente, le dirá que se está perdiendo? AUDIENCIA: Te estás perdiendo [inaudible]. ANDI Peng: Tienes razón. Exactamente. Así que esto es en donde está importante asegurarse que todas las funciones que utiliza en su código está teniendo la cabecera correcta declararse en la biblioteca, o bien usted va a obtener un montón de errores y su código no va para saber lo que está pasando. Así que vamos a incluir string.h aquí. Ahora cuando tratamos de recopilar superior. Compilar correctamente. Vamos a ejecutar este programa. Así que escribir algo en minúsculas. ¿Qué es lo que ustedes quieren que escriba? Preguntad por algo. Muy bien, Charly acaba de entrar. Vamos a escribir el nombre de Charly. Charly en minúsculas. Y es de esperar, con suerte, esto es va a gritar y escupir Charly en mayúsculas. ¡Hurra! no todo el mundo entiende cómo Fui sobre solucionar eso? La forma en que puedo manipular usando números enteros algo que para resolver Yo quiero hacer en cuerdas, porque los caracteres y números enteros puede se hace referencia en la misma manera porque de la cartografía ASCII. Así que volver a su punto, si querido poner aquí en lugar de 32 A mayúscula minúscula menos un igual eso, que funcionaría igual de bien, porque eso es simplemente la diferencia entre esos dos valores. Si quiero hacer este charly nuevo--. Oh no. Creo que fuimos por el camino equivocado, sí? AUDIENCIA: [inaudible] minúsculas a. ANDI Peng: Hay que ir. Sí. Y fuera escupe charly. Así que tenga cuidado cuando estás valores restando recordar cuál es mayor que el otro. Por ejemplo, aquí se me olvidó que es en realidad una minúscula mayor que en mayúscula A. Así que cuando me tratado de restar a la inversa alrededor, me dieron negativo 32. Y mi equipo era como, No sé lo que es eso. Es la probabilidad sólo algunos al azar valor que no es muy bueno. Y así que asegúrese de que usted es restando en la longitud correcta para encontrar el carácter que desea. OK. ¿Hay alguien confundido sobre cómo anduvo escribir esta función? OK. Así que en realidad, una función ya existe en la biblioteca llamada ctype.h. Llamada ctype.h de la biblioteca. Esta función es en realidad ya escrito para usted. Se llama a la superior. Y así, a los efectos de este conjunto de procesadores, vas para encontrar que usted realmente desea utilizar muchas de las funciones contenidas dentro de la biblioteca ctype. Para es superior, para bajar, superior, es lower-- esas son todas las funciones que usted será capaz de utilizar muy, muy rápidamente en su propio código que hace exactamente lo que esto hace. Escribimos la manera de convertir una cadena a mayúsculas. Pero esto es en realidad el código que alguien más ha escrito y que se puede acceder a través de una función diferente. ¿Sí? AUDIENCIA: ¿Así que simplemente copiar una está ahí y que lo haga por cada carta? ANDI Peng: Sí, porque yo no lo hago preocuparse por los valores de a. Yo sólo me importa que la diferencia entre ellos es 32, ¿no? La diferencia entre minúsculas b mayúscula y B es también 32. Y la diferencia entre c y C mayúscula siempre es 32. Sólo tengo que preocuparse por el diferencia entre los dos, porque todas las letras seguir el mismo patrón, ¿no? Si tengo la diferencia entre uno de ellos, Yo sé cuál es la diferencia entre todos ellos es. Buena pregunta. Sí. ¿Todos bien? OK. Oop. OK. Así que otro concepto que es va a ser muy útil, ya que continuar desarrollando su código es esta idea de crear funciones o abstracción. Así que ahora, todos hemos tomado álgebra. En álgebra, se les enseña que hay esta cosa maravillosa llamada una función máquina, donde si entrada de un tipo de número, que corre a través de esta función maravillosa y hace estallar una salida diferente, ¿no? En el código, lo mismo sucede en cualquier tipo de función. Así que pude físicamente escribir en mi cuerpo de mi código una declaración principal que realmente hace cualquiera que sea el cuerpo del código está haciendo. Pero fuera de eso, también puede escribir muchas funciones diferentes que hacer muchas cosas diferentes. Por ejemplo, ya hemos comenzado a usar algunos de ellos. Printf-- que es una función que alguien más ya ha escrito que podemos llamar a nuestro código. Para upper-- en este caso, upper-- es otra función hemos escrito que puede llamar a nuestro código. Y así que supongo qué hacer incluso tenemos funciones? ¿Por qué no simplemente plop todos en la misma línea de código? Esto hace que sea fácil para todos. Pues bien, el razonamiento detrás de esa es, en primer lugar, la organización. Es realmente molesto ir a través de código de alguien y una función como printf. Si ustedes realmente sabía lo que el función printf implicaba escribir, es, como, 1.000 líneas de código. Si cada vez que quería a printf algo, Tuve que escribir 1.000 líneas de código, que sería muy molesto para leer, ¿derecho? Es por eso que acabamos de creado esta función abstracta que ya tenemos a alguien más ha escrito en otro lugar. Y cada vez que tenemos que usarlo en nuestro código, sólo tiene que decir printf. Y es capaz de utilizar la función alguien ha escrito en nuestro código. Hace más fácil organizativamente para leer código. En segundo lugar, es la simplificación. Simplifica los pasos que tenemos tomar para resolver nuestro problema. Printf, funciones como printf, funciones como a superior son todas las cosas que nos permiten simplificar nuestro código abajo por lo que es más fácil. Y lo último es la reutilización. Así que el hecho de que tenemos una función llamada printf que podemos llamar variados veces y permite que sea reutilizable. Si tuviera que escribir printf, Yo sólo escribo una vez. Sólo existe en aquel lugar. Si quería hacerlo de nuevo, lo haría que copiar y pegar todo eso en mi segunda línea de código. Es por eso que si creamos una función lo que existe fuera de nuestra principal, sólo podemos recurrir a y reutilizarlo siempre que necesitamos para que sea mucho más fácil para nosotros como programas para escribir. Así que la forma en que realmente escribiríamos una función es muy similar, ¿no? Esta es una especie de la primera instancia en la que vamos a ver una toma de función en un estilo diferente a la nuestra void main int. En este caso, si quería escribir una función llamada q, ¿verdad? Y el valor int aquí es todo lo que me dice, ¿qué quiero este funcionar para volver a mí? Si quiero cubicar un entero, Voy a querer entrada. Estos son los parámetros. Voy a las entradas de un valor de tipo int. Y voy a volver otro valor tipo de int. Y aquí, como usted puede ver, todo lo que estoy haciendo se cubicando lo que mi entrada es como mi salida y devolverlo. Así que todo lo que hace esta función es toma algún tipo de número entero. Se multiplica por sí mismo dos veces de modo que cubos en efecto. Y entonces se devuelve lo que la producción es. Así que en este caso, se trata de dos líneas de código que teníamos que escribir extra. Pero si quisiéramos llamar sobre esto varias veces, es mucho más fácil de escribir que uno línea de aquí que está en el cubo de tiene que pasar por varias veces. Así que la forma que esencialmente cualquier formateo para cualquier tipo de función va a existir es como aquí. Así que tenemos el nombre de la función. En este caso, se llama cubo. Y nombramos cubo porque es fácil de recordar. Puedes llamarlo cuadrados y de hecho, puede ser en cubos. No importa. Sólo un nombre que usted está la asignación de su función. Este derecho aquí, int, es la tipo del parámetro que necesita. Entonces, ¿qué hace esta función necesita para operar? Bueno, se necesita una entrada. Lo nombré entrada. Usted puede nombrar como quieras. Pero necesito algo de tipo int. Se va a ejecutar en realidad lo que hay dentro de aquí, el cuerpo de la función. Y luego el tipo de retorno aquí, este int-- todo lo que me está diciendo es que esta función es va a volver a mí en int. Así que va a disfrutar de un int, y que va a dar vuelta un int. ¿Todo el mundo entiende cómo el el formato de este tipo funciona? Guay. OK. Así que no te preocupes si esto parece un poco de derecho abstracto ahora. Esto es algo que vamos a hablar. Vamos a sumergirnos en el más profundo más adelante en el curso. La forma en que cualquier tipo de nivel superior la abstracción de estas cosas el trabajo es que, en la memoria, en su computadora, todo se almacena en este tipo de la pila, he de decir. Así que allá arriba en la parte superior. No sé si usted chicos pueden ver muy bien. Voy a tratar de hacer un zoom. Aquí, en la parte superior, que el texto física de lo que el equipo está interpreting-- todos los ceros y unos que existen dentro de nuestro ordenador. Y luego tenemos la inicializado datos e inicializar, lo que llamamos variables globales. Así variables que existen en todos los programas y en su totalidad, esencialmente, código. No se preocupe si ustedes son especie de claro en esto. Es en realidad no importa en este momento. Y luego tenemos lo que es llamada una pila en una pila. Piense en una pila literalmente como al igual que un montón de cosas, una pila de diferente cosas siendo empujados en la parte superior el uno del otro que almacenan los diversos variables y sintaxis dentro de su código. Y entonces aquí en la parte inferior, tenemos las variables de entorno de lo que se está ejecutando dentro de sólo su pequeña línea de código. Y sólo vamos a enfocar en en la parte real de la pila. Así que aquí, si tuviéramos que hacer un zoom en el solo esta zona de la pila, Esto es lo que parece. Y esto es realmente muy importante cuando ustedes hablan de funciones, debido aviso de que el memoria de tu computadora se almacenar las variables y las funciones y los parámetros de ambos su función y sus principales variables en diferentes lugares. Así que ahora, la principal es la función real que se está ejecutando en un código. Has sus parámetros almacenados aquí y sus variables locales almacenan aquí. Variable local sólo significa cualquier variable que sólo existen dentro de esa función. Y encima de ello, usted tiene esta función separada llamada cubo. Tienes que eso es parámetros así como los lugareños. Y la razón que pueda ver aquí es que lo que que sucede cuando toma en un cubo valor de su función principal es que en realidad se está copiando de que más. Así que si yo quería cubo 2 y volver 8, que 2 en realidad está introducida como un parámetro y es copiado de manera que usted lo tiene existente en dos lugares diferentes en la memoria. Y hay que tener mucho cuidado en recordar que uno de los en realidad estás manipulando. Y un ejemplo de lo sucedido eso sería muy, muy malo existe aquí. Así que aquí, tengo, en teoría, un programa de aquí, una función principal que estoy declarando un int x es igual a 1. Estoy declarando otra int y es igual a 2. Y entonces yo estoy corriendo a través de esta función llamada de intercambio, donde supongo que está intercambiando los dos valores. Y luego voy a imprimirlos, ¿verdad? Eso es lo que quiero este programa hacer. Así que vamos a venir y echar un vistazo. Así que si yo escribo una realidad diferente función, como se puede ver, tenemos nuestra función principal aquí. Y luego tenemos nuestro segunda función aquí. Canje de Vacío. Void simplemente significa que es no va a devolver nada. El nombre de la función es llamado swap, y es ir a la ingesta de dos variables, int a y int b, de su función [inaudible]. Así que, esencialmente en aquí, estamos pasando x e y en esta función. Y si tuviéramos que Creamos esto-- por lo que queremos para crear un valor temporal, ¿no? Vamos a asignar esa a una. Y luego una va a ahora igual b. Y b va a estar de vuelta donde el valor de temperatura era, que es una, porque cuando quiere cambiar las cosas, no se puede simplemente desea intercambiarlos. Tienes que mantener uno aquí, así que recuerda lo que es, porque una vez cambias uno, se le olvida lo que el valor original, ¿verdad? Así que en teoría, este programa debería funcionar, ¿no? Si quisiera cambiar la dos, que deberían cambiar. Así que vamos a correr y ver si funciona. Así como ustedes pueden ver, x una vez fue 1 e y fue una vez 2. Y si puedo imprimir a cabo, x sigue siendo 1 ey es 2. Hmm, este programa no parece ser trabajando de la manera que quiero que funcione. ¿Alguien quiere tomar una foto en adivinar qué estaba ocurriendo esto? Tiene que ver con la forma en que las cosas son diferentes almacenada en diferentes lugares de la memoria. OK. Así que ustedes no tienen que preocuparse demasiado sobre esto ahora mismo. Pero saber que el cubo de locales variables fueron a y b, porque aquí en nuestra función, hemos declarado a y b como las variables que existen dentro de cubo, esa función. Pero como se puede ver, los parámetros que está tomando en estaban siendo almacenados aquí. Pero no estábamos en realidad devolver nada. No estábamos realmente cambiando x e y. Estábamos cambiando ay b. Habíamos copiado x e y en algo que se llama a y b. Pero en realidad nunca manipulado x e y ellos mismos. ¿Están viendo lo que está sucediendo? Es que simplemente hemos copiamos más, pero nosotros no hemos guardado realidad un seguimiento de dónde se encontraban en la memoria. Y lo que ahora el equipo está mirando, oh, tengo ejecutar esta cosa a través esta hermosa función. Pero x e y son todavía x e y. Nada ha pasado ellos por el hecho de que esos parámetros y variables locales se almacenan en una diferente colocar en la memoria. Y esta es una de nivel superior concepto que vamos a empezar a ver más adelante en el curso. Pero sólo sé que esto es un problema que puede ocurrir y que vamos a averiguar la manera de cómo a frente a esto más adelante en el curso. OK. Correcto. Así que el último concepto que estamos realmente va a cubrir eso va a ser útil para el conjunto de procesadores esta semana son lo que se llaman argumentos de la línea de comandos. Así que Rob en su conferencia fue a través de tipo de brevemente sobre cómo funcionan. Esencialmente saber que cuando estás escribiendo como una función principal, cuando escribió funciones antes en el pasado, tuvimos void main int. Y la razón por la que tuvo nula allí fue porque nuestros programas no lo hicieron necesitar valores de entrada para funcionar, ¿no? Cuando me encontré con Mario, yo no necesitaba que en realidad sólo tiene que escribir algo cuando me encontré con Mario. Yo podría pedir al usuario más adelante. Pero eso no siempre será el caso. Por ejemplo, en este El problema de la semana fija, usted va a pedir que, Además de ejecutar su programa, usted va a querer entrada ciertas cosas en la recta como usted ejecutar el programa. Así que la forma de hacer que se llama un argumento de línea de comandos, que es como un argumento puede introducir directamente como usted está tratando de ejecutar el programa. Así que la notación para esto, es bastante compleja de futuro, pero en realidad no es que difícil. Así int main-- eso es sólo su función principal. En comas argc soportes argv cadena. Así que todo lo que está diciendo es que este int argc-- todo lo que se le dice es que aquellos son el número de argumentos el equipo debe esperar. Así que una cosa que es verdad importante no perder de vista es el nombre físico de su programa cuenta como uno de esos argumentos. Así que si yo quería tener mi programa correr más una línea de comandos adicional argumento, en realidad estoy va a tener dos. Argc en realidad va a ser dos. Y luego argv cadena bracket-- todo lo que está haciendo, que me está dando una matriz de cadenas que es va a simplemente mostrar y almacenar lo todos esos argumentos de la línea de comandos son. Así por ejemplo, si yo quería tener este programa, ./copy archivoentrada archivosalida archivosalida, ¿verdad? Eso es sólo un comando típico Linux. Lo que en realidad es argc? ¿Cuántos argumentos de la línea de comandos hay en realidad en este? Todo esto hace es hacer una copia de un infile del nombre de un archivo y lo copia en otro archivo, ¿verdad? Eso es todo esto está haciendo. Como se puede ver, lo estoy haciendo en una sola línea sin realmente necesitar el programa. ¿Cuál es nuestra argc en este caso? ¿Cuántos argumentos tenemos? AUDIENCIA: ¿Tres? ANDI Peng: Tenemos tres, exactamente. Así que es muy intuitivo basta pensar que es sólo el infile y el archivo de salida. Pero saber que el nombre físico del programa que se está ejecutando cuenta como una. Así que en este caso, argc es en realidad tres. ¿Qué te parece, lo que es argv 0? Recuerde, todo el argumentos de la línea de comandos se almacena en una matriz de cadenas. Así que si trato de acceder a ella, lo que sería argv soporte 0 dame? AUDIENCIA: [inaudible]. ANDI Peng: Exactamente. Me daría el punto slash copia, porque eso es el elemento 0 ª, la primer elemento de mi matriz. ¿Qué pasa con argv 1? AUDIENCIA: Infile. ANDI Peng: Infile, exactamente. ¿Qué pasa con argv 2? AUDIENCIA: OUTFILE. ANDI Peng: OUTFILE. Esto es un poco complicado ahora. ¿Qué piensan ustedes argv 3 se va a darme si trataba de imprimir que fuera? AUDIENCIA: [inaudible]? ANDI Peng: ¿Usted tiene una mano? Sí. AUDIENCIA: Una alternativa. ANDI Peng: Exactamente. Así que recuerda, en la conferencia que tener al final de una carrera de algo llamado un terminador nulo? Vamos a entrar en esto también más adelante en la clase. Pero saber que en la notación, la forma en que su equipo Sabe que es el final de la matriz es que pone algo llamado un nulo terminador o un guión cero. Así que si se intenta acceder a argv 3, te vas a ir a este tablero 0. Esto es aún más de una pregunta con trampa. ¿Qué pasa con argv 4? Así que esto es pasado terminador nulo, más allá de los límites de nuestra matriz. ¿Qué crees que va a sucederá cuando tratamos de hacer eso? AUDIENCIA: [inaudible]? ANDI Peng: Lo siento? Decir que un poco más fuerte? AUDIENCIA: [inaudible]. ANDI Peng: Sí. Ese es el nombre de la área lo más probable obtener. Pero saber que argv 4-- que permite el acceso lugares en su equipo de memoria que realmente no debe ser conmovedora, porque ahora usted sabe lo que es argv. Usted sabe que es una matriz de tamaño 3 que tiene puntos de copia, infile y archivosalida. Si trata de ir mucho más allá de que que eres más allá del terminador nulo, el equipo tiene, probablemente, algo almacenado en argv 4. Y que realmente no debería ser autorizarle a entrar en argv 4, porque usted tiene un archivo armario y sólo son permitido el acceso a esos tres estantes. Pero si intenta llegar mucho más allá de la plataforma de donde se le permite, usted va a empezar a jugar con otras cosas en la memoria del equipo. Eso va a ser muy, muy malo. Así que saber eso. Tenga mucho cuidado de que no sólo empezar azar acceso a los elementos de un array que no estaban en lo que quería crear. Sí. OK. Así que vamos a hacer otra ejemplo terminal de aquí. OK. Así que Rob rápidamente en conferencia El otro día se fue a través de este ejemplo, donde tenido int main int argv cadena argc corchetes, lo que me está diciendo que soy va a tener argumentos de la línea de comandos. Él tiene, si argc es igual es igual a 2-- recuerde, es igual a iguales significa la comparación. Si es igual a 2, entonces estoy va a imprimir hola, cualquiera que sea la primera elemento de la matriz es. Impresión Else, hola mundo. ¿Qué es esto va a suceder en esencia? ¿Puede alguien explicar en Inglés lo que este programa está haciendo? Sí. AUDIENCIA: Si alguien escribe en un comando y dijo su nombre y apellido, que no sólo va a imprimir la primero y decir hola, cualquiera que sea su nombre es. ANDI Peng: OK, vamos a ejecutarlo. Así, por ejemplo, si yo tuviera que hacer este archivo hacen hola hola a-- a-- ¿qué quieres que de entrada? AUDIENCIA: Nombre y apellidos. ANDI Peng: Nombre y apellido? Espacios? AUDIENCIA: Sí. ANDI Peng: ¿Puede alguien decir mí en este momento, lo que es argc? Justo ahí? Ups, lo siento. Permítanme volver. ¿Cuántos argumentos de la línea de comandos que trate: ustedes no pueden ver realmente. Pero voy a tratar de hacer un zoom. Lo estoy intentando. Sí, hay tres, ¿no? Es slash dot hola, es Andi, y es Peng. Entonces, ¿qué piensan ustedes este programa se va a imprimir? Oh. Oh, lo siento. Nombre equivocado. Está imprimiendo, hola mundo. ¿Alguien quiere explicar por qué está sucediendo? ¿Sí? AUDIENCIA: [inaudible]. ANDI Peng: Exactamente. Así que aquí, son condicionales Es decir, si argc es igual es igual a 2. Así que sólo en el caso de que hay dos argumentos de la línea de comandos. Entonces me voy a imprimir, hola, lo que sea. Pero otra cosa, voy a imprimir solo, hola mundo. Así que quiere a alguien darme un ejemplo de la forma en que sería capaz de realidad lograr que se desea imprimir el valor de argv 1? ¿Qué iba a tener que introducir aquí? Sólo una cosa, ¿verdad? Debido a que el punto para saludar ya cuenta como el primer argumento. Sólo tengo uno más. Así dot hola si me hago Andi. Hola, Andi. ¿Todos entienden por qué está sucediendo? Sí. AUDIENCIA: Entonces, el espacio entre el comando line-- es que [inaudible]? ANDI Peng: No. Así que el espacio en una línea de comandos argumento, x, de decirle a su equipo que este es el comienzo de una nueva cadena. Así argv cadena aquí-- que tiendas todos sus argumentos de línea de comandos en las cadenas. Y por lo que el espacio en la línea de comandos argument-- lo único que hace es decirle, esto es en el extremo de una cuerda y es el momento de pasar a otro. Sí. Esto es muy importante para el conjunto de procesadores, porque eres va a probar estos. Así que ¿alguien tiene alguna pregunta sobre esto? Vale, guay. ¿Sí? AUDIENCIA: Así que la razón por la que lo haría poner entero argumento calc lugar de [inaudible] sería cuando desee para escribir información adicional para [Inaudible]? ANDI Peng: Sí, exactamente. Algunos programas requieren que usted para introducir un argumento de línea de comandos que entra y que utiliza eso. Sí. AUDIENCIA: ¿Y qué si [inaudible]? ANDI Peng: Bueno, ¿qué tengo cambiar entonces en mi programa? AUDIENCIA: Sólo 3. ANDI Peng: ¿Por qué es que pasando, qué te parece? AUDIENCIA: Debido a que el [inaudible]. AUDIENCIA: Usted tendría que cambiarlo a 2 [inaudible]. AUDIENCIA: 1 y 2. ANDI Peng: 1 y 2, exactamente. Así que en este caso, es probable que quiero tener de dos printf statements-- uno que argv impreso 1 y el que imprime argv 2. Aquí. Que puedo hacer realidad que muy rápido. Ahi tienes. Oh. No es exactamente lo que querías. Pero si ustedes perder el tiempo con el formato, que va a salir. Sí. Guay. Sé que estamos un poco cortos de tiempo. Pero voy sólo para pasar rápidamente una par de minutos que pasan por helpful-- AUDIENCIA: Tienes dos minutos. ANDI Peng: Tengo dos minutos? Gracias. Algunos consejos PSet rápidas. Así que para este conjunto de procesadores, le recomiendo, como he dicho, a todos a leer la especificación. Vas a estar escribiendo un solo de tres programs-- llamada initials.c, uno llamado caesar.c, uno llamado vigenere.c. Algunos consejos importantes que ustedes realmente quieren tener en mente-- lo existe esta función llamada atoi-- como me gusta decir, a trois. No queda claro si eso es en realidad cómo lo dice. Pero todo lo que está haciendo, que está introduciendo. Convierte una cadena a un entero. Así que a representa ASCII para i entero. Es sólo la conversión de ASCII valores a valores enteros. Así que recuerde argv, la matriz que almacena todos los comandos de la línea arguments-- que todos ellos almacena como cadenas. Y por lo que si usted quiere ser capaz de tienen uno de ellos se convierten en un número entero, vas a tener utilizar este valor aquí. Modulo, como hemos cubierto anteriormente en la clase de hoy, permite que usted tenga la resto de lo que tengas. Así que si tenemos muy, muy un gran número de César, lo que si tenemos el final de una cadena de Vigenére? ¿Cómo vas a poder para conseguir que para envolver alrededor? Si me golpeó z y quiero que vaya de nuevo a una, ¿cómo voy a conseguir que para envolver alrededor? Probablemente quiera utilizar módulo en alguna parte. En segundo lugar, navegar alrededor su biblioteca. ctype.h. Eso es una nueva biblioteca que tenemos. Usted encontrará una gran cantidad de muy, muy isupper functions-- útil, islower, toupper, tolower, isalpha, etcétera. Todas las funciones que serán de gran utilidad cuando usted está tratando de averiguar, es este personaje una letra minúscula? ¿Cómo puedo convertir este cadena a una mayúscula? Todas estas cosas van a ser muy, muy útil para el conjunto de procesadores. OK. El horario de atención de esta noche son las 8:00 a las 11:00 en el aula TRULLO mañana así como el miércoles y el jueves por la noche. Las horas de oficina están en commons. Altamente sugerir chicos todo puede empezar inmediatamente, porque usted no desea ser que chico que la noche del jueves tiene problemas presentando el conjunto de procesadores y está como, yo no sé qué hacer. Empecé, he terminado, me presenté. Trate de dar un poco de ambiente, porque en siempre se producen problemas de código. Usted quiere asegurarse de que que usted se da un montón de tiempo para poder para completar los conjuntos de procesadores. Guay. Me quedaré por aquí. AUDIENCIA: ¿Es esta línea ya? ANDI Peng: Yo no sé si es ya en línea, pero será. Me quedaré por aquí si alguien tiene alguna pregunta ya. Gracias por venir.