ROB: Muy bien. Bienvenidos a la primera sección. Soy Rob. JOSÉ: Soy José. ROB: Entonces vamos a bucear a la derecha adentro A primera hora de hablar de es el aparato. Así que espero que la mayoría de ustedes tienen descargado ya. Pero puedes ver las instrucciones en cs50.net/appliance. Oh dios, ahora soy consciente de sí mismo. Todavía oigo. JOSÉ: Wow, suena como es desorientado. ROB: Así que algunas personas han estado teniendo problemas con él, así que no espere hasta que el último minuto del problema establece en tratar de resolver el Appliance y descubrir que no está funcionando. JOSÉ: ¿Y si algo no está funcionando y usted necesita ayuda, usted puede ir a cs50.net/discussion donde tener un foro en el que puede enviar sus preguntas. Y vamos a llegar a ellos con el tiempo. ROB: Muy bien. Así que esto es lo que el aparato se parece. Una vez más, es sólo una forma completamente separada sistema operativo que se ejecuta dentro de cualquier sistema operativo que se están ejecutando en su computadora portátil. Y las cosas principales que usted lo va a hacer estar usando son gedit. Así que espero que esto ya tiene convertido en un sitio familiar. El terminal. Y también puede ejecutar Chrome dentro del aparato. Ha habido un par de personas que han informado de Internet No trabajar en el aparato. Y algunos de ellos sólo han asumido que no se supone que es Internet en el Appliance. Pero eso sí, se supone ser Internet. Voy a decir ahora mismo, pero no es así realmente significa nada. Si el internet no funciona, esto es lo que tienden a necesitar correr a arreglarlo. Si usted está teniendo problemas de Internet, no se recordarlo, sólo publicarlo en Discutimos, y lo diremos, ejecute eso. Pero Internet debería estar trabajando. Así que la única otra cosa - sí, nada lo demás es realmente relevante. Pero yo sólo quería señalar que - ver en esta esquina inferior derecha. Así que cada uno de sus aparatos deben tener una dirección IP. Y más tarde en el semestre, esta IP dirección será más relevante cuando que está trabajando en la web p-set, porque usted será capaz de acceder a la sitio web que está trabajando desde su Chrome local utilizando esta dirección IP. Pero lo que me gusta utilizar la dirección IP - y usted no tiene que hacer esto, sólo quiero señalarlo - está aquí. Así que esta es una ventana de terminal en mi Mac, esto no es en el Appliance en absoluto. Y usted puede buscar lo que este comando hace. Pero voy directamente a SSH a mi Appliance. No sé lo que la IP es. JOSÉ: 168 - 168.224.1.0. ROB: Así que una vez que he terminado con esto, ingrese Ahora, básicamente, esto es idéntico a un ventana de terminal dentro de mi Appliance. Así que casi nunca funcionó realmente desde dentro del propio aparato. Acabo siempre he funcionando en el fondo minimizado y SSHed en ella. El problema con esto es que no se va para ser capaz de utilizar fácilmente gedit directamente desde esta. Pero si quieres ser un verdadero fresco hacker, entonces usted debe acostumbrarse a una comando de la línea de edición de texto de todos modos. Así Vim y Emacs y Nano, todos estos diferentes alternativas. Nano tiende a ser el más fácil. Y creo que no tiene resaltado de sintaxis. Oh, no, es totalmente hace. Así que usted puede utilizar Nano, porque que uno es bastante fácil. ¿Ves todos estos comandos en la parte inferior. Este pequeño símbolo zanahoria. Si usted no ha visto antes, se le Probablemente verlo mucho ahora. Por lo general, significa la zanahoria control, como la parte inferior izquierda de tu teclado carácter de control. Así que aquí me está diciendo aquí - oh, no está cortado si agrandar Así de control, X es cómo Voy a salir. Y dice que puede golpear Y para Sí, para el ahorro, N para No. Así que eso es Nano. Vim y Emacs tienden a ser ligeramente más complicado y abrumador. Pero usted puede acostumbrarse a él, y luego te va a encantar. Así que eso es todo. JOSÉ: No hay necesidad de hacer eso. ROB: Si. Usted es libre de usar gedit para la resto del semestre. Así que cualquier pregunta relacionada a aparatos domésticos? O usted tiene alguna idea sobre qué más necesita ser hablado acerca el aparato? Sí. ALTAVOZ 1: Cuando SSHed en su cosa, fue el carmesí contraseña? ROB: Si. La contraseña para casi todo en el aparato que está pasando ser carmesí. ALTAVOZ 2: Instalar como un verdadero IDE en el aparato, ¿funcionará? ROB: Me imagino Eclipse tiene un Versión de Fedora, en cuyo caso, sí, usted puede hacer eso. Probablemente no es realmente vale la pena. ALTAVOZ 2: OK. Así que es probablemente más fácil si quería utilizar Eclipse, sólo tiene que utilizar el nativo y a continuación, subir a - ROB: Oh, eso también es probablemente más fácil. Pero usted puede conseguir que funcione dentro del aparato. JOSÉ: ¿Y para la cámara, la pregunta era, puede instalar otro IDE en el interior del aparato? ROB: Eclipse ser un ejemplo de una IDE. ¿Alguna otra pregunta Appliance? Está bien. Así que ahora vamos a pasar a la línea de comandos cosas relacionadas con la interfaz, de modo CLI. Y de nuevo, yo sólo voy a trabajar en aquí, porque este es idéntica a trabajando dentro de una ventana de terminal dentro del aparato. ¿Cómo está buscando esa fuente? ¿Eso es lo suficientemente grande? Está bien. Así que hay una gran cantidad de comandos que usted debe conseguir bastante utilizado para lo largo del semestre. Los dos grandes para navegar son ls, lista los archivos de este directorio, y cd, para cambiar de directorio. Así que puedo cambiar de escritorio y luego un patrón muy común es cd a un directorio e inmediatamente ls lo que está en el directorio. La gente también a veces no se dan cuenta que la finalización Tab es una cosa. Cd Así como, vh, y luego me golpeó Tab. Casi nunca escribo a cabo toda la cosa. Y luego si sigo golpeando Tab de nuevo, que va automáticamente Inicio Listado por mí. Así que puedo cd vhosts, host local. Y eso es sólo ir a - en caso de que usted no ha oído hablar del término antes, el directorio es sólo otra palabra para la carpeta. Así que ahora si que se ve - vamos a traer eso a la parte superior. Así que ahora si ves entre paréntesis, que ver la tilde poco, slash, vhost, recortar, host local. Así que la tilde, que se refiere a mi directorio personal. Es un directorio que está en cuando SSH pulg Es el directorio que está en cuando usted abre un terminal. Es el lugar donde empezar. Y así estoy dentro de mi directorio home, y yo estoy dentro del host virtual directorio dentro de mi directorio home. Y entonces yo estoy dentro de lo local sede de directorio dentro de eso. Por lo que algunas otras cosas útiles con cd - o bien, en general, por lo que siempre dot se refiere al directorio actual. Cd, de punto es un comando bastante inútil. Pero eso está cambiando a la directorio actual. Una más útil en términos de cd es punto, punto, que es sólo tiene que ir de un solo directorio. Y tenga en cuenta que estos - Quiero decir alias, pero estos símbolos, punto y punto, punto, los trabajos para casi cualquier comando que eres va a estar pensando en correr. Así como el cd es probablemente donde podrás el uso de la mayoría, pero estos no son cosas que simplemente cd entiende. Es más o menos algo que su totalidad línea de comandos entiende. Una gran cantidad de programas de comprender punto y punto, punto. Así que los otros los útiles - cd, Dash. Así que eso me va a llevar a la último directorio que yo era pulg Así que a veces voy a hacer algo así, oh, estoy trabajando aquí. Y veo un error con algo, y Iré a investigar yendo a algún directorio aleatoria en alguna parte. Y yo no sé si va a déjame entrar allí. Lo hará. Así que hago lo que quiero en este directorio. Bla, bla, bla, bla, bla. Y yo estaba como, ¿sí, quiero para volver a donde estaba. cd, guiones y me trae de vuelta. Así que me voy a tirar un montón de estos en el día de hoy. No espero a memorizar todos ellos. Es una especie de sólo sé de que existen. Y luego, más adelante, cuando usted es como, hmm, quiero volver a la directorio que estaba justo en, oh, espera, existe algo así. Usted no tiene que sólo tiene que escribir en todo el directorio de nuevo. JOSÉ: ¿Y el tiempo se acaba utilizarlos una y otra vez, y se convertirá en la memoria muscular. ROB: Si. Entonces, ¿cómo he dicho antes, que tilde es su directorio personal. Así que puedo cd, tilde. Pero yo ni siquiera tengo que eso si sólo - Voy a volver al directorio de modo que no es un ejemplo de sentido. Pero si acabo de hacer cd, eso es también la mismo que, vaya a mi directorio home. Hago Comando, K. JOSÉ: También puede escribir clara, la palabra, y se debe desactivarla. ROB: Y creo que también de control, L también lo hace. Así que un montón de diferentes maneras. Creo que hay algunas diferencias en el clara y Control, L se acaba realmente empujar a la parte superior e Todavía puedo retroceder. Comando, K destruye literalmente todo, y tú no puede moverse hacia arriba. Por lo menos, eso es cómo funciona en iTerm2. No sé cómo otras cosas - oh. Con sshing, así que si estás en Windows, vas a tener que descargar PuTTY con el fin de SSH, ya que Windows no lo hace tener como una herramienta integrada SSH. De Macs, puedes simplemente SSH directamente desde una ventana de terminal. Aceptar. ¿Preguntas? Con ls, así que algo se acostumbre a con la mayoría de estos comandos es - bien, sólo voy a hacer una. Ls, tablero, l. Así tablero, l es lo que vamos para llamar a una bandera para ls. Y muchos de estos comandos tienen banderas que se puede pasar a ellos. Así que en este caso, guión, l es una bandera que dice que me dará una completa lista de toda la información de estos archivos. Así que vemos aquí que el escritorio era modificada el 30 de julio a las 12:54. Descargas se modificó al 6 de septiembre. Estos son el tamaño actual y bytes de estos directorios. Usted no tiene que entender todo esto. Esta cosa de la izquierda, estos de drwx, que se convertirá en mucho más relevante más tarde, cuando usted tiene que hacer frente - que tiene que ver con quién tiene permisos a ver estos archivos. Y por lo que si usted no era el único usuario en este equipo, usted sería capaz de por ejemplo, OK, yo debería ser el único permitió mirar a este archivo o estoy va a permitir a todos mirar este archivo. Así que otra persona en mi equipo puede leer este fichero. Yo ni siquiera sé lo que esto - ¿Qué hace esto? JOSÉ: No estoy muy seguro, en realidad. ROB: No tengo idea. JOSÉ: Pero si usted no sabe, no hay un comando útil que puede utilizar para decirle lo que significa que la salida. Y si escribe en el hombre antes de la orden - por lo que M-A-N. ROB: Hombre. Así que el hombre es otro esto es muy útil. Y el hombre, ls. Así que las páginas de manual, que tienen tanto comandos que se va a utilizar en la línea de comandos, y también tienen funciones que serán relevantes con C. Así que usted puede el hombre - y no hice caso 3. Pero man 3 printf va a traer hasta la versión C de printf. Pero si acabo de hacer el hombre printf, esto es ir para que aparezca el comando printf eso ocurre en la línea de comandos. Así que el hombre, ls. Las páginas del manual pueden ser bastante abrumadora. Aquí, sin embargo, verá este listado de todas estas banderas que LS entiende. Así que si vamos a lanzarse, l, y - Yo sólo voy a tirar esto a usted. Pero con el fin de buscar, usted quiere para golpear primero la cuestión marca o botón de barra. Así que recortar. Y entonces puedo buscar para lo que quiera. Así que voy a recortar para el tablero, l. Y allí estaba. Así que utilice un formato de listado largo. Eso no ayuda a averiguar qué esa columna particular, quería decir, pero me asumir en algún lugar de aquí ello explicaría eso. Así que utilice las páginas del manual de cualquier comando que no entiende de inmediato. Estoy bastante seguro de que usted puede incluso hombre, hombre. Una interfaz para la línea manuales de referencia. Ah, una última que es quizás un poco es LS pertinentes, tablero, a. Así cuenta si acabo de hacer ls, Consigo estos cinco archivos. Si hago ls, guión, a, I conseguir muchos más archivos. Así que la cosa en común entre todos estos nuevos archivos es el punto de antemano. Así que la convención es que un archivo que comienza con un punto está oculto. ¿Así que no quieres ver ese archivo, no quiero tener que meterse con tu lista de directorios. Es sólo cuando se pide de manera explícita, bien, ls, guión, una, mostrarme. La una es sinónimo de todos los archivos, incluyendo las ocultas. Por lo que algunos otros comandos. Oh, las preguntas en ese momento? Sí. ALTAVOZ 3: Cuando usted hace un ls, a, ¿cuál es el punto, punto? ROB: Oh. Así que esto es lo que yo estaba hablando. Es lo mismo cuando Puedo gustaría cd, punto, punto. Así que, técnicamente, punto y punto, punto son archivos que existen en cada uno de guía donde el archivo de punto se refiere en el directorio actual. Así que si yo cd, punto, yo sólo voy permanecer en el directorio. Y punto, punto siempre se refiere a la anterior directorio de uno a nivel. Así que si entro en troncos y ls, guión, al, Veré punto, punto. cd a punto, punto me lleva al directorio anterior. Sí. Aceptar. Así que otra muy importante comando es rm. Así que eso es lo que vamos a utilizar para eliminar. Y déjame en realidad hago otra comando primero. Así mkdir. Mkdir es cómo se puede crear directorios. Y voy a crear un directorio temporal y entrar en ese directorio temporal. Y como era de esperar, está vacío. Pero si ls I, guión, una, todavía tienen puntos y punto, punto, porque se refiere a punto el directorio actual. Y punto, punto se refiere a la directorio anterior. Y los siempre existirá sin importar el directorio que se in Y este es un completamente innecesario comando, pero el tacto. Yo sólo lo uso, porque es una manera fácil de crear archivos. Así que toque una, toque b, toque c es sólo va a crear tres archivos llamados a, b y c que son completamente vacía. Así que el punto de crearme los de la primer lugar es sólo para que rm es cómo podemos eliminarlos. Así rm, a. Se va a preguntarme, retire fichero regular un vacío? Y luego voy a decir que sí. Por lo que si estoy seguro que quiero borrar ese archivo sin tener que estar solicite, retire archivo vacío regular?, a continuación, rm, guión, f va a ser el bandera que dice, forzar la quita sin incluso me llevó, oh, ¿estás Seguro que quiere eliminar el archivo? Sí, estoy seguro. Así rm, guión, fb se acaba hacerlo sin preguntar. Así que vamos a hacer algunas más directorios. mkdir, tmp2, cd, tmp2, tocar un toque b. Aceptar. Así que ahora me quiero quitar tmp2 como un directorio. Tmp2 Así rm. No se puede quitar tmp2, es un directorio. Así que la cuestión aquí es que no rm trabajar de inmediato en los directorios. Sólo ha significado para archivos como archivos que no son directorios. Y así, lo que podemos hacer aquí es rm, guión, r. Eso significa de forma recursiva, lo que podría no significa nada para ti todavía. Pero cuando se llega a la recursividad, que va a decir más. Así rm, guión, r, tmp2 va a recursivamente entrar en ese directorio. Así descenderá al directorio tmp2? Sí, vamos a entrar en eso. ¿Queremos eliminar tmp2 / a? Sí. ¿Queremos eliminar tmp2 / b? Sí. Ahora queremos eliminar la tmp2 directorio? Sí. Y por lo que ahora el directorio y todo dentro de que se ha eliminado. No es técnicamente un comando rmdir que se puede utilizar para eliminar directorios, pero sólo funciona en los directorios vacíos de todos modos. Y al ver que, vamos a hacer mkdir, tmp2 nuevo. Tmp2, toque a. Aceptar. Así que si trato de quitar dirtmp2, que va a decir, el directorio no está vacío. Así que casi nunca uso el remove comando dir de todos modos, porque rm, guión, r funciona en los directorios vacíos y los directorios no vacíos. Y también, si yo no quiero tener que pasar por todo ese proceso de descender en el directorio y extraer cada archivo individual, rm, tablero, rf, tmp2. Y ahora se ha ido. Algo que tener cuidado aproximadamente es rm, guión, rf. Y hasta me da miedo que escribirla, porque si accidentalmente pulse Enter o algo así. Así rm, guión, rf, tilde haría, sin me llevó, el f no solicita me, eliminará automáticamente mi directorio entero y todo en él. Así que usted puede pensar que es una estupidez. Y bueno, lo es. Pero puede suceder muy fácilmente por accidente si, por ejemplo, quería eliminar mi barra, directorio vhost. Y justo en la tipificación rápida, Accidentalmente hacer esto. Eso eliminará de forma recursiva tanto mi directorio principal y el directorio vhost en este directorio particular que sólo pasa a no existir en estos momentos. Pero esto todavía eliminar mi directorio entero. Por lo menos al no tener un f, me incitaría a primera. Y me gustaría ser como, oh, no, no quiero hacer eso. Pero la gente, slash, incluyendo me inclino a entrar en el hábito de siempre-ing rf. Incluso los archivos regulares que sólo puede i rm, c, tiendo a sólo rm, guión, rf, c. Sólo ten cuidado cuando estés-ing rf. ALTAVOZ 4: ¿Qué hacer C? ROB: C es que estoy hablando de ese archivo C En este directorio, que rm, c. JOSÉ: ¿Y que es más peligroso, si utiliza una estrella, se refiere a todo en el directorio. Así que lo que comúnmente tienden a hacer es que lo haré Entro en un directorio y quiero eliminar todos los archivos allí. Así rm, guión, rf, estrella. ROB: Si. Rm, guión, rf, estrella. JOSÉ: ¿Y si usted no tiene cuidado lo que está en el directorio - Yo no estaba en la temperatura, pero yo estaba accidentalmente en mi directorio home, entonces voy a quitar todo en mi directorio home. Y realmente he hecho eso antes, y Creo que usted ha hecho esto antes o Jay ha hecho eso antes. ROB: He eliminado accidentalmente - así que ignore ese comando para un poco. JOSÉ: No es divertido. ROB: Así que en el directorio bin slash es un montón de archivos binarios, donde habrá ser los familiares como sonido metálico. Bueno, clang y, básicamente, todos ellos cosas que estoy corriendo en el comando línea están en este directorio bin slash. JOSÉ: Al igual que ls está aquí. ROB: Así punto, raya vertical, ls se listar este directorio. JOSÉ: Rm es también en este directorio. ROB: He rm accidentalmente, bin rf-ed, que eliminó cualquier comando que pude posiblemente desear. Que luego me reinstalación de un nuevo Appliance en ese punto. JOSÉ: Así que tener mucho cuidado al utiliza este comando. AUDIENCIA: [inaudible]? ROB: Si. Eso también es un mal hábito para entrar. Si te fijas, ahora soy - así, no se puede notar, pero mi zoom-in quizá pueda. Así que ahora soy root @ electrodoméstico. Así jharvard es el usuario que queremos usted siempre esté utilizando. Root es el usuario que tiene permiso para no hacer absolutamente nada. Así notar cuando estoy jharvard, si trato de cd - lo que es un directorio que? Oh, la raíz es un buen ejemplo. Así cd, raíz. Permiso denegado. Porque si nos fijamos en este listado - y otra vez, usted no tiene que totalmente de entender esto. Sin embargo, estos tres guiones que opinan que no dejes que ningún otro usuario en este directorio. Y el directorio pasa a ser propiedad del usuario root. Así que el hecho de que soy jharvard y no uno que no es root es permitido en este directorio, eso significa que soy vas a obtener permiso denegado cuando tratar de cd en él. Así que cuando estoy raíz, tengo permiso para hacer absolutamente cualquier cosa, incluyendo borrar archivos esenciales para el aparato y destruir la cosa entera. Así que es un mal hábito para entrar simplemente pasear por su sistema operativo como root. Yo lo hago de todos modos. ¿Preguntas? Y me salgo de la raíz, quedo como jharvard. Aceptar. Comandos más relevantes. Así que volviendo a nuestra temperatura, la comando mv es sinónimo de movimiento. Usted puede mover un archivo. Ahora queremos llamarlo b, por lo que ahora se llama b. O tal vez queremos avanzar b de un solo directorio. Así que ahora vacíos de este directorio. Voy a volver a mi directorio personal, y vemos que b es aquí, porque el directorio personal era un directorio desde el directorio que b había estado adentro También hay cp. Así cp es copiar súper sección, punto, el texto. Puedo llamarlo s, punto, texto. Ahora tenemos dos súper sección, punto, texto, y s, punto, texto. Esto también funciona en los directorios. Me RF-ed un solo archivo. Así CP - Bueno, primero vamos a tratar de cp, tmp, tmp2. Así omitiendo directorio tmp. Así similares a RM, el comportamiento por defecto es que no funciona en los directorios. Y de nuevo, similar a RM, el valor por defecto comportamiento - así, conseguir que funcione con los directorios es un guión-r de distancia. Así que copiar de forma recursiva la temperatura directorio en tmp2. Y lo que ahora tenemos tanto tmp y tmp2, y que no es útil ya que tmp estaba vacía en el primer lugar. Tmp2. Ahora vamos a copiar tmp en tmp2. Y vemos que tmp2 también tiene el archivo una, porque el directorio y todo dentro de ese directorio fue copiado. Y eso puede ser un poco útil si, digamos que usted está trabajando el problema de establecer uno - o en realidad, los boletines de problemas posteriores son aún más importante, ya que será un manojo entero de archivos y las cosas. Pero lo que desea, por una fracción de en segundo lugar, usted es como, bien, estoy va a intentar algo diferente. Permítanme copio toda mi pset1 directorio en la copia de seguridad de modo que si pset1 Me acaban arruinar las cosas, no puedo volver a mi directorio de copia de seguridad. Hay formas más apropiadas de versiones de copia de seguridad de su código, pero esto siempre es una forma rápida de hacer sólo Asegúrese de tener una copia de algo que está a punto de modificar. Así que echo es también un comando de una sola vez que tipo de sillily se acaba de imprimir en la línea de comandos exactamente lo que quería hacer eco. Así que echo hola. Sólo vamos a imprimir hi. Echo hello world. Publicaremos hello world. Ahí entra en uso cuando iniciar la combinación de los comandos. Y de nuevo, no esperes a que en su totalidad entender esto todavía, pero es algo que ver. Y entonces, si usted está buscando en Google para ver ejemplos o te das cuenta de que quieres hacer algo, puede ser útil. Así que vamos, como un ejemplo, así que ls, tablero, l. Así que aquí veo la salida de ls, guión, l. Y yo digo, OK, quiero almacenar en un archivo que. Toda esta producción aquí, quiero poner en un archivo separado. Así que este pequeño símbolo mayor que es lo que vamos a llamar. Estamos reorientando la de salida en un archivo. Vamos a llamar a la bla archivo, porque eso es lo que yo suelo llamar siempre él. Así que ahora vemos que tenemos un presentar bla aquí. Y si lo abro, me encargaré de que es exactamente de la salida del comando que me acabo de encontrar. Y del mismo modo, se puede - si se trataba de la salida a un archivo, este es tomar la entrada de un archivo. ¿Qué es una orden que yo - JOSÉ: Creo que se puede utilizar menos o más, probablemente. ROB: Pero ¿qué tal un poco menos bla? No se. Si usted entra en este escenario, al igual que hay conjuntos de procesadores que es útil para. JOSÉ: Se puede canalizar en eco. Pipe el archivo en eco para verlo. ROB: Es la tubería. JOSÉ: Lo siento. ROB: Muy bien. Así que esta es la salida a un archivo. Se trata de obtener el texto del archivo y se la entrega al programa. Y también se verá este tipo. Así que esto es una especie de hacer ambas cosas a la vez. Y, de hecho, voy a introducir dos nuevos comandos sólo para hacer uso de ella. La historia es un comando muy útil que es sólo va a imprimir una lista de nada nunca me he encontrado una línea de comandos. Así que aquí vemos todo lo que tengo estado funcionando todo este tiempo. Mucha de ls. Y otro comando útil es grep que su propósito es buscar a través de texto en busca de patrones, así, en busca de cualquier cosa que quiero buscar. Y así un uso útil aquí es, digamos queremos aprovechar la historia. Y quiero que buscar los comandos donde I - ¿Qué es un una utilidad para buscar? JOSÉ: [inaudible]? ROB: ¿O vamos a ver para todos toca, por cualquier razón. Así que esto es lo que se verá así. Y usted no tiene que completamente entender eso. Pero la idea es que aquí, la historia está dando la misma salida que hizo aquí donde se imprima la totalidad historia de todo lo que siempre he corrido. Entonces estamos pasando eso - así que en lugar de imprimir a la pantalla, queremos transmitir que a la grep comando que está buscando todas las instancias de la palabra toque. Y así, el uso de esta combinación de la herramientas de la historia y grep, puedo ver, OK, he aquí todos los comandos que he correr, y aquí está un tanto común. Estamos en la parte inferior. Y también me ha de dar la orden Acabo de funcionar que tenía el palabra toque en ella. Sin embargo, la tubería es una cosa muy útil para combinar múltiples programas. Y, de hecho, es un acceso directo para alquiler me la historia salida de presentar bla, y déjame grep usando el bla archivo como lo que quiero para mirar por encima. Así que la tubería es sólo un atajo para esos dos comandos. Sí. ALTAVOZ 4: [inaudible]? ROB: Si. ¿Qué es - Oh. Vamos a probar. Así gato, perro, pez. Así que quiero a grep. Dash, r, de nuevo, va a ser recursiva, por lo que quiero descender todos los directorios. Quiero grep recursivamente para todos - y vamos a ver si temporalmente esta fuera del camino. Me haga caso. Aceptar. Así que quiero a grep temporalmente para todas las instancias de la palabra pescado. Así que aquí lo que estoy haciendo es grepping recursiva para la palabra pescado. Y la estrella significa sobre todo esto archivos de este directorio. Y por lo que me dio un permiso denegado, porque no se le permite leer que archivo en particular. Pero encontraron peces en el archivo, de prueba. Yo también podría decir que, en concreto, sólo que desee ver en el bla archivo, en cuyo caso no encontrará nada. Yo sólo quiero mirar en el archivo, de prueba. Encontrará los peces. Es un comando muy útil a saber en general. Hay algunas alternativas a grep que se supone que son más Programador amable, pero tiendo todavía recurrir a grep. ¿Preguntas? Aceptar. ¿Existen otros comandos? Oh. Sólo una sola vez una que siempre me encontrar a ser divertido es CAL. Así notar cuando estoy en esta hermosa modo de pantalla completa, no tengo ni superior como barra de herramientas o cualquier cosa. Así cal apenas me da un pequeño calendario que sea adecuado ahora cortada, supongo. Pero poco agradable de comandos. JOSÉ: Es [inaudible]. Otros comandos que pueda tener visto incluyen sonido metálico y crea. Vamos a ir sobre ellos en más detalle más adelante. Pero si usted ha estado trabajando en la PSET, usted debe ser familiarizados con los. ROB: Muy bien. Preguntas sobre la línea de comando cosas? Está bien. Así que vamos a pasar a algunos Cosas relacionadas-C. Variables matemáticas. Aceptar. Así que al igual que tuvimos matemáticas en Scratch, también puede utilizar las matemáticas en C. Antes de llegar a eso por completo, por lo variables. Recuerde que cada vez que se declara una variable, como int o float y x, que hay que darle el tipo antes el nombre de la variable. Así que los tipos que hemos visto hasta ahora son int, float, double, mucho, mucho, que me en realidad no sabemos si hemos visto que hasta ahora. Hay algunos otros. Hemos vemos caracteres. Hay pocas palabras, que es como si fuera el opuesto de largo a largo en donde está más pequeño que un número entero. También hemos visto cadena. Entonces, ¿qué hay de especial en la cadena? ¿Por qué iba yo a decir que es no es como int? ALTAVOZ 4: En realidad, no existe. ROB: Si. Así que la única razón por la que tenemos cadena es porque cuando lo haces hash, incluir cs50.h. Y vamos a ver ejemplos de esto más tarde - oh, que no maneja tan bien - donde cs50.h está haciendo algo a lo largo de las líneas de texto def, estrella char, string. Así que eso es decir que ni siquiera sabe lo que es una estrella de carbón todavía. Pero esto está diciendo que queremos cadena. Cualquier lugar que ha estado usando cadena, podría haber estado utilizando estrella char, que en realidad es un tipo que existe en el lenguaje C. Pero ya llegaremos a eso. Ah, y que va a la derecha de nuevo. Neat. Así mismo con bool donde la verdadera y la falsa. Eso no es realmente un tipo incorporado en C. En su lugar, es solo, tiene esto que el valor cero? Luego sólo tendremos que consideramos que es falsa. ¿Esto tiene el valor - así, tiene esto que cualquier valor que no es cero? A continuación vamos a considerar que es verdad. Así que una es verdadera, dos es verdadera, nada distinto de cero es verdadero. Así que estos son los que. Las preguntas sobre la declaración de variables y tipos de variables y todo eso? Sí. ALTAVOZ 4: Por largo tiempo, en el libro, que dijo que no tenía por qué ser largo long int. Pero funcionará igual de largo tiempo? ROB: Así que estos modificadores de tipo. Así int x. Así también podemos decir unsigned int x. Podemos decir short int x. Podemos decir long long int x. Pero casi ninguna de esas cosas que me acaba de decir, unsigned int, short int, int largo plazo, usted puede deshacerse de el int y que sólo asumirá que te referías a int. X lo tanto sin firmar, que sólo significa - usted sabe cómo normalmente con un int, se puede decir x es igual a 3 negativo? Con un int sin firmar, no se puede. JOSÉ: Y de nuevo, para la cámara, el pregunta era, ¿cuál es la diferencia entre long long int y sólo el tiempo largo? ROB: Si. Así lo haré casi nunca escribir long long int. Voy a escribir mucho, mucho. JOSÉ: ¿Alguna pregunta? ROB: OK. Pequeño recordatorio Que tonto de que es como declaramos una variable y inicializamos la variable y declarar otro variables e inicializar todo en un solo paso. Así que la declaración de la variable y la variable de inicialización no tienen a, pero puede ser en la misma línea. Así que tenemos los operadores matemáticos estándar que usted está acostumbrado a - más, menos, dividir el tiempo. También hay módulo, que ya veremos. No hay, por lo menos en C, un poder incorporado operador de exponenciación caret. Bueno, hay un operador de intercalación, pero no es el poder. JOSÉ: Pero no es la exponenciación, Sí. ROB: No utilice el símbolo de intercalación asumir que esto significa como cuadrado o lo que sea. Así que algunas cosas a tener en mente acerca de la división. Voy a estar. Así declaró respuesta initialize. Así que estamos diciendo respuesta flotador es igual a 1 dividido por 10. Imprimir respuesta a dos decimales. Y este es el tipo de cosas que yo sería el hombre printf para darse cuenta que ¿Qué diablos significa%, punto, 2f significa? Y eso sólo significa que, bueno, ignorando el 0,2. Y%, f es el que usamos para imprimir a flotar. El 0.2 está diciendo, de impresión que flotar con dos decimales. Así que este programa tiene un error, y es posible que han visto esto antes en alguna Por supuesto CS previa. Pero, ¿qué es ese bicho? ALTAVOZ 5: Zero. ROB: Si. Así que cuando decimos, la respuesta es igual 1 dividido por 10, queremos que el responder que es 0,1. Pero 1 dividido por 10, 1 es un número entero, 10 es un número entero. Y así, cuando hacemos un entero dividido por un entero, que vamos a volver un número entero. Así que 1 dividido por 10 es 0,1. Ya que tiene que darnos un número entero, que sólo va a tirar que decimal y decir que la respuesta es 0. Y así, cuando imprimimos contestar aquí, que va a imprimir 0.00. JOSÉ: Y así como una nota, que en realidad tira a la basura lo que hay después de la punto decimal. Así que si en vez tenías 6 dividido por 10, se podría pensar que le daría 0.6 y luego le redondear a 1. Pero en realidad, lo que sucede cuando se escriba tareas es que se cae por lo que es después del punto decimal. Así que 0.6 se convierte en 0. ROB: Si. Y vamos a decir truncado por eso. Así que cada vez que juegues a un int, el decimal se trunca. Así que la solución para que - no hay en realidad dos. Y yo voy a hacer ese segundo, porque ésta es una solución mucho más fácil. Así que una solución es utilizar flotadores en la división. Y realmente, es suficiente con hacer que uno de ellos un flotador. Pero es algo más clara justo para hacer los dos flotadores. Así 1,0 dividido por 10.0 es dividiendo dos flotadores. Así que la respuesta va a terminar siendo un flotador, y por lo que se correctamente imprimir 0.10 aquí. Algo que no funciona tan bien aproximadamente, es decir, bueno, claro, era fácil suficiente para convertir a un 1 flotar por lo que es 1,0. Pero ¿y si en lugar de eso tenía dos enteros como int x es igual a 1 y la int y es igual a 10, y luego queríamos hacer X dividido por Y? Así que no es fácil simplemente hacer x.0 o algo así. Así que la solución a la que está proyectando. Así que la fundición es una forma en C para convertir de un tipo variable a otra. Así que aquí, 1 es un número entero. Y al poner este flotador frente a ella, estamos lanzando 1 a un flotador. Y por lo que este se convertirá la 1 a un 1,0. Y esto va a convertir el 10 a un 10,0. Y luego las cosas se comportan de manera similar a la versión anterior sólo hemos visto donde, como era de esperar, se obtiene 0,10 y que va a imprimir eso. Y podemos hacer esto con variables, también. Así que podemos decir, float x dividido por flotador y. JOSÉ: ¿Alguna pregunta? ROB: Así como en matemáticas regular, tenemos prioridad de los operadores. Así que en la clase de matemáticas, es más probable llamarlo orden de las operaciones. Aquí, el término oficial es prioridad de los operadores. Pero la prioridad de los operadores, o la mayoría operadores, es como se puede esperar. Así que al igual que en matemáticas, 2 veces 10 es va a ser agrupados más de cerca que este 10 dividido por 2 y luego 2. El orden de las operaciones, que va a hacer 2 tiempos de 10, 10 dividido por 2, y luego que va a hacer 20 más 5 más 2. Así que es como se esperaba, y se puede utilizar paréntesis para agrupar expresiones. No se puede utilizar corchetes para agrupar expresiones. ¿Sí? ALTAVOZ 5: ¿Podría realmente simplemente retroceder un segundo? ¿Puedes echar un int a una cadena? ROB: Así que en C, puede convertir cualquier cosa quiere lo que quieras. Eso no quiere decir que sea una buena cosa que hacer. Así que cuando lanzas un int a una cadena, que significa - y vamos a entrar en este mucho más a fondo - JOSÉ: Mucho más tarde. ROB: yo no quería decir mucho más tarde, así que traté de cambiar mi sentencia. Vamos a entrar en mucho más a fondo más tarde cuando realmente cuando se tiene un variable de cadena - por lo que una cadena puede ser arbitrariamente mucho, ¿verdad? Y hemos estado diciendo que es un int cuatro bytes y de largo tiempo es de ocho bytes y un flotador es de cuatro bytes. Así que una cadena, como un int, sólo tiene un cierto número de bytes a la misma. Y eso va a ser de cuatro bytes. Pero una cadena puede ser bastante arbitrariamente larga, ¿no? Así que hola mundo ya, si eso es 10 personajes o lo que sea, eso es ya va a ser durante los 4 bytes Puedo caber en una cadena. Y entonces, ¿cómo funcionan realmente las cuerdas es que que son lugar de la memoria esa cadena está siendo cuidada. Y así por aquí, cuando digo cadena x iguales hola mundo, en el interior de x es Sólo digo, oh, hola mundo se almacena en este lugar especial en la memoria. Así que si tratamos de echar un entero en un cadena, entonces estamos tratando de interpretar una parte aleatoria de la memoria como una cadena. Y que casi siempre rompe cosas. JOSÉ: Pero si eso confunde usted, vamos a estar cubriendo lo más en profundidad más adelante. ROB: Si. Aquí es donde usted va para entrar en punteros. Y eso es una parte significativa dos semanas de este curso. ALTAVOZ 6: ¿Funciona igual que los objetos en otros idiomas o no realmente? ROB: En otras lenguas, objetos se representaría el uso de punteros. No es lo mismo, sin embargo. ¿Alguna idea? JOSÉ: No. No hay pensamientos. ROB: OK. JOSÉ: Siguiente. ROB: Sólo tienes que ir con eso. Está bien. Así módulo. Al igual que tenemos más, menos, dividir y multiplicar. Así módulo es uno que usted puede no han visto antes. Y simplemente dice, dan me el resto. Así 55% 10. El resto de hacer 55 dividido por 10 sería 5. Así 55% 10 es 5. Y 3% 5 sería 3. 8% 8 será 0. 16% 15 será 1. JOSÉ: Una cosa a destacar con esto, también, es que puede que no funcione como se esperaba si se utiliza un número negativo. Así negativo 5% 4, algunas personas Podríamos pensar que es - ¿qué le parece negativo 5% 4 sería? ALTAVOZ 5: Primero. JOSÉ: ¿Así que hay gente que dice uno, algunas personas dicen que uno negativo. Pero lo que - ROB: yo ni siquiera tienen , dijo uno de ellos. JOSÉ: Dos, lo siento. Hay gente que dice - ROB: Tres. JOSÉ: ¿Tres? ROB: Negativo - lo que fue el - negativo de cinco - JOSÉ: Tres, tres, tres. Lo siento. Debido modulo, por lo general, cuando has visto en otros lugares, por lo general significa devolver un número positivo, ¿no? ROB: Así que cuando decimos en matemáticas, del 10%, que tienden a querer darle - si mod 10, entonces esperamos obtener un número entre 0 y 9. Aquí, ese no es el caso que obtendrá los números negativos se devuelven. JOSÉ: ¿Así negativo 5% 4 sería negativo 1. ROB: Pero es raro que usted es-ing mod los números negativos, para empezar. Omita este. JOSÉ: Sí. ROB: Meh. Aceptar. Así que una última cosa a destacar sobre carrozas es que es un comportamiento peligroso, pero los flotadores no son una exacta representación. Así que volviendo a bytes más, recuerde que un int es siempre cuatro bytes y un flotador es siempre cuatro bytes. Así que el ejemplo de Lucas es bastante bueno. Así que piensa en 1 dividido por 3. Así 0,3333333. Si sólo tengo 32 bits, ¿cómo puede Almaceno 0.33333 exactamente? Y tal vez, por alguna razón, usted dice, bien, bien, vamos a decir de que este particular 1011001, vamos a Basta con decir que debe haber 0.333333. Bueno, es suficiente con un número finito de esos bits, por lo que es imposible representar cada punto flotante valor dado sólo 32 bits. Bueno, es imposible representar cualquier valor de coma flotante da infinita - así, dado cualquier número finito de bits. Así que la cuestión aquí es, bueno, cuando se utilizó para imprimir a dos decimales, nos hicieron llegar la respuesta correcta 0.10. Pero debajo de la capucha, es realmente siendo almacenado lo más cerca posible a 0.10 como esos bits puede representar. ¿Es esto en la siguiente diapositiva? ¿O no es así? JOSÉ: Sí, es eso. ROB: Blegh, blegh. JOSÉ: Sí, usted puede apenas tirar de las notas un poco. ROB: Yo sólo voy para ampliar en el último en eso. Oh, Dios mío, eso es [inaudible]. Así que ese número. Eso es lo que se va a imprimir si nos encontramos con ese programa. Y observe que no es realmente un gran problema si sólo estamos cuidando sobre como dos y cincuenta y ocho decimales. Como sólo nos originalmente imprimimos 0.10, y es por eso que vimos nada malo. Pero una vez que empezamos a entrar en el exacta, el número exacto que es que representa, vemos que no puede exactamente representar 0.1. Y parte del problema aquí es como, bien, eso está bien, pero, bueno, en primer lugar, ¿qué pasa si tratamos de hacer, respuesta igual a igual a 0,1? ¿Es que va a devolver verdadero o falso? Y lo que es difícil de decir. Creo que en realidad podría devolver true. Lo hará primero - No se. La respuesta es una vez que empezar a tratar con valores de coma flotante, que prácticamente tanto no deberían usar la igualdad a causa de esta imprecisión. Y por todo lo que sabe, es la centésima decimal que el punto flotante no pudo para manejar correctamente. Y así la igualdad se acaba de fallar incluso aunque el número - si hubieras estado utilizando números exactos, los números deben han sido exactamente el mismo. Es en el transcurso de 50 como cálculos utilizando estos flotante valores de punto, el error puede construir y más y más, y cosas apenas consiguen mal. JOSÉ: Y ha sido realmente famosos ejemplos de que esto ocurra. Al igual que los ingenieros de la NASA han llegado a este equivocadas, cohetes causan a explotar en el aire después de que han sido lanzados. Y un montón de temas por el estilo. Así que sí. ALTAVOZ 6: Cuando usted dice 0.3 f, Qué se trunca el resto? ¿O se redondea hacia arriba o hacia abajo? ROB: ¿Será printf alrededor de ella? JOSÉ: Creo que trunca printf. ROB: OK. Así que de manera similar podemos ir en la dirección opuesta dirección de este, donde, en este caso, lo más cerca que podría representar 0.1 fue con este número. El más cercano que podría ser capaz de representar 0.2 es en la dirección opuesta dirección, 0,199999996356 o algo así. Así que si nos fuimos en esa dirección de cosas, entonces printf 0.3 f regresarían 1.99 en lugar de 2.00. JOSÉ: ¿Y no estoy del todo seguro de eso. Es posible que desee escribir un pequeño, pequeño programa para sólo comprobar eso. ROB: Sin embargo, lo que sí estamos seguros es que si se trató de echar eso a un int, y echando a un int va a hacer que se trunque el decimal, si intenta convertir 1.9999999 a un int, obtendrá 1. Y así, en general usted debe utilizar el función ronda en la biblioteca de matemáticas. ¿Preguntas? Aceptar. JOSÉ: Pasemos ahora a las condiciones y las expresiones booleanas. Por lo que han visto estos antes. Y en realidad, déjame asegurarme de que mi equipo está en el formato correcto aquí. Espacio. Lo sentimos, pero vamos a tener que hacer frente a poco con punto de corte en los bordes. Pero sí, ustedes han visto esto antes de Scratch. Así que esto de aquí es una expresión que se utiliza en una sentencia condicional. Así que la respuesta mayor que cero voluntad decirle verdadero o falso. Y estos son muy importantes, porque que nos permiten introducir lógica en nuestro código. Así, por ejemplo, este es un programa escrito en scratch que pide al usuario para un entero y les dice si el entero que te daban era un número positivo o negativo. Y la conversión por aquí a ver es imprima primero la declaración, dame un entero. Y luego se les pregunta por un número entero. Y a continuación, utiliza la lógica condicional sobre aquí para comprobar si ese número era en realidad mayor que cero o no. Así que aquí tenemos una expresión booleana dentro de un condicional If. ¿Hay alguna pregunta? ¿Hay alguna pregunta acerca de eso? Aceptar. Así que hay algo más que mayor que, por supuesto. Puede construir expresiones booleanas utilizando la mayoría de los tipos de cosas que usted pensaría en matemáticas. Así mayor que. Eso debería ser un menor que. Lo siento. Y la separación. ROB: Dios no lo quiera usted lo deja. JOSÉ: Bueno. Por lo tanto mayor que, menor que, mayor que, o igual a, menor que, o igual a. Utilizamos igual doble para comprobar si hay la igualdad, porque solo es igual a medios asignación, ¿verdad? Sí. Y entonces podemos también no es igual por utilizando el signo de exclamación, es igual. Y este símbolo de exclamación puede También se ampliará de modo que si usted quiere invertir cualquier tipo de Boole expresión, se puede hacer eso. Así que esto se evaluará como true Sólo si la respuesta es menos que o igual a cero. ¿Tiene preguntas sobre eso? Aceptar. Así también puede combinar estos expresiones usando lógica Y y lógico Or. Así que esto es sólo el símbolo de Y, que debe ser Shift, 7. Y este es el símbolo de canalización, que es No es un caso menor L. Es el que eso es justo encima de la tecla de Intro. Así que utiliza dos de estos para simbolizar lógica y la lógica Or. Así que esto sólo devolverá true si la respuesta es uno, dos, tres, o cuatro. Y esto sólo se devolverá true si la respuesta está más allá de que a cada lado. Así que no es de uno, dos, tres, o cuatro. Y la forma en que utilizaría que en una expresión - ROB: O un cero o un cinco. JOSÉ: Cero o un cinco. Lo siento. Sí, sí, sí. Aceptar. Y por aquí ahora, de la misma manera que utilizaría esa expresión, una más pequeña lado la expresión de un Si condicional declaración, también lo utilizaría la misma manera, con solo colocar en el interior de los paréntesis de la instrucción If. Así que este printf sólo se disparará si la respuesta es uno, dos, tres, o cuatro. ¿Tiene preguntas sobre la combinación expresiones? Así que hay otra condicional Construimos que llamamos un If / Else. Así que, básicamente, esto significa ahora, OK, Si algo que yo quería ver no era verdadera, entonces ve al Else y realizar esa otra acción. Así que en este caso particular, me pregunté el usuario de un entero. Es el número entero mayor que cero? ¿Sí? Bueno, entonces escogieron un número positivo. Si no, entonces debe tener sido negativo o un cero. Así que eligió un número negativo o un cero en este caso. Sí. O un cero. Y luego también tenemos If / Else, Si y Else. Así que esto nos permite ejecutar una secuencia de cosas sólo si los primeros fallan. Así que en este caso, ahora estamos haciendo el último que usted escoge cero. Así que si ellos no escogieron un positivo ni un número negativo, entonces deben han recogido cero. Por lo que sólo se va por el cadena como esta. Así un ejemplo de cómo una Si es distinto de - un if / else es diferente de sólo una secuencia de IFS. Y esta es una pregunta común que la gente se pregunta es, bueno, si te pones así un 95 en CS50, ¿qué será este programa te lo dijo? ALTAVOZ 5: ¿Tienes una A. JOSÉ: Sí. Tienes todos los uno de esos derecha. ¿Tienes una A, que tienes una B, tengo una C y una D, ¿verdad? Así que todos estos se evaluaron en orden. Así, mientras que un 95 es mayor que 90, es también es mayor que 80, es también mayor que 70, y es también mayor que 60. Así que tienes todos esos grados. Y supongo que lo haría sólo quieren que el A. La manera de arreglar eso es reemplazar aquellos con Else / Si 's. Así que en este escenario, se ve que 95 es mayor que 90, y luego lo hace no evaluar el resto de los estados. ¿Una pregunta sobre eso? Así que hay otra clase condicional de estructura que tenemos aquí, que nos llame a una sentencia switch. Así que esto le permite comprobar básicamente lo que el valor de un número se pone en la sentencia switch es. Así que en este escenario, estamos cambiando en n, y nosotros estamos diciendo, oh, si n es uno, a continuación, imprimir esa declaración. Y a continuación, romper, lo que significa que la salida salir de la sentencia switch. Si no era uno, entonces, bueno, finalmente, comprobar todos los casos. Y así se comprueba si es uno o dos o tres, y se imprime en consecuencia. Y lo que aquí esta palabra clave por defecto medios es si ellos no entraron en ningún de los que, a continuación, decir no válido. Así que digamos que pido ny el usuario me da cuatro. Bueno, no coincide con ninguno de esos casos, por lo que se imprimirá lo que está en el sección default. Sí, la pregunta? ALTAVOZ 5: ¿Se puede utilizar Boolean expresiones en lugar de uno, dos, o tres? JOSÉ: Entonces la pregunta es ¿Se puede utilizar Expresiones booleanas en lugar de uno, dos y tres? Y en C, creo que No puede hacer eso. Pero en otros idiomas, lo que le podría encontrarse al final de la semestre como JavaScript, se puede. Bueno, usted tendría que calcular primero ese valor y, a continuación, use en el cambiar comunicado. ¿Sí? ROB: Así que parte de los beneficios del interruptor declaraciones se piensa de si lo hizo como If / Else, así como si n es igual a es igual a uno o lo que sea. Else / Si n es igual a es igual a dos, lo que sea. Else / Si n es igual a es igual a tres. Así que la forma en que el programa se ejecute es lo sería secuencialmente bajar esa lista y comprobar, es n uno? Nope. Es n dos? Nope. Es n tres? Sí. Haga esto. Mientras que con sentencias switch, es realmente capaz de compilar que sea muy rápido. Y tan pronto como lo dice interruptor, dice, está bien, n es dos, yo soy inmediatamente va a saltar a donde Se supone que debo comenzar a ejecutar. Yo no voy a comprobar en primer lugar, se n uno, es n dos? Se puede comenzar de inmediato haciendo lo que se supone que debe hacer. Y debido a eso, no se puede tener condiciones booleanas. O de lo que tendría que hacer el secuencial, como, bien, es n mayor que cero? Else es n mayor de 10 o lo que sea. JOSÉ: En este caso, si se ha utilizado Si / Si no, Si es así, entonces el interruptor haría ejecutar aproximadamente tres veces más rápido que el If / Else If. Podemos organizar el interruptor de tal de manera que no rompemos después de cada uno de los casos. Así que en este caso, estoy dividir el números que elegimos en uno y dos no es un número elevado y tres que son un número alto. Así pues, en este caso, si n es uno o dos, llegará el caso y luego lo hará caen a través, porque no hay descanso. Y que va a terminar aquí. Así que si elegimos una, que va a hacer el printf y luego romper para que ninguno de este se ejecuta. Y por supuesto, si entran en tres o alguna otra cosa, entonces se saltará esas y no ir allí, y se ejecutará en su lugar el línea correspondiente. ¿Hay alguna pregunta acerca de eso? ¿Sí? ALTAVOZ 4: ¿Quieres conseguir un error si se tenido un descanso después de un caso, pero no tener algo para que lo haga? JOSÉ: Entonces la pregunta es ¿le consigue un error si tiene un descanso después de caso de que uno, pero no hay nada que hacer? Y la respuesta es no. Usted no va a conseguir realmente un error. Sí, mm hmm. Así como una especie de un pequeño cambio aquí, Voy a poner un printf aquí. ¡Vaya. Así que lo imprimiría esto si Puse uno en como entrada? Sí. Se diría que no pasó un alto número dos veces, ¿no? Porque sería llegar a ese primer caso, no se rompería y caería hasta el segundo caso. ¿Una pregunta sobre eso? ROB: ¿Alguna otra pregunta? JOSÉ: OK, enfriar. Está bien. Así que no es otra cosa que llamamos un operador ternario, que es básicamente una sintaxis alternativa para hacer Si y luego lo demás. Y te permite hacerlo todo en una sola línea. Así que en este programa en particular, Estoy preguntando al usuario para n. Y si n es mayor de 100, le digo ellos escogieron un número alto. Else les digo que elegido un número bajo. Así que podemos usar esta sintaxis muy largo, cadena, S, y luego verifique si n es superior a 100 y asignar en consecuencia. Pero podemos hacer esto mucho más concisa mediante el uso de esta sintaxis operador ternario que consiste en una pregunta marca y dos puntos. Así que la interrogante es esencialmente hacer una pregunta, ¿no? ROB: zoom Tal vez en eso. JOSÉ: Sí. Buen punto. Así que este es el operador ternario. La primera vez que hago la pregunta, n es mayor que 100? Si lo es, entonces ejecuto el primer parte antes de los dos puntos. Si no es así, entonces ejecuto el segunda parte después de los dos puntos. Así que si n es mayor que 100, a continuación, se recoge alta y pone que en la cadena s. Si n es menor que 100, que recoge baja y luego pone eso en la cadena s. Así que se condensará este pedazo grande hacia abajo en esa sola línea. ALTAVOZ 5: ¿Eso es popular? JOSÉ: Sí, es muy popular para los cosas en esencia lo que desea do una asignación basada en algún tipo de condición. Y en este caso, estábamos tratando de para asignar un valor a la cadena s. No es tan - Supongo que en realidad no prefiero en los demás casos. Pero es especialmente útil para esta tarea. ROB: Eso es un patrón bastante común donde se tiene una variable que que vas a decir, si algo, ajuste esta variable a un valor; otra, establece esta variable a otro valor. Y ese es el escenario donde utilizar un ternario. JOSÉ: ¿Y usted está ahorrando un montón de líneas, ¿no? Y sólo hace que el código podría decirse que un poco más legible. Sí, la pregunta? ALTAVOZ 6: Para un ternario, ¿podrías ir, string s iguales seg, signo de interrogación? Y entonces usted podría tener, por ejemplo, cinco opciones diferentes. Y dependiendo de lo que el número de n fue, elegiría uno de esos? JOSÉ: ¿Así que la pregunta es, ¿hay una especie de sintaxis donde se puede hacer la cadena s es igual a N, y luego tener más de dos opciones después de que el signo de interrogación? Y una respuesta simple es no, no hay realmente una buena manera de hacer eso a menos que que desee anidar ternaria múltiple operadores dentro de la otra. Usted podría hacer como n mayor que 100, signo de interrogación, y luego otro operador ternario, n mayor que 50, signo de interrogación, y el nido de esa manera. Pero en ese escenario, el código es haciendo un poco ilegible y desordenado, y tal vez sería mejor ir sólo a una instrucción If / Else en ese punto. ROB: Y también, como nota al margen, PHP implementa incorrectamente el ternario operador de tal manera que ternarios anidados incluso no trabajan como deberían. JOSÉ: Sí. Así se pone un poco confuso, especialmente cuando vas a diferentes idiomas. ROB: Está bastante confuso que lenguas están equivocados al respecto. JOSÉ: ¿Así que en realidad, sólo para aclarar, ¿todo el mundo sabe lo que % S hace por aquí? ¿Una pregunta sobre eso? Supongo que sólo para la cámara, el% s básicamente nos permite poner un marcador de posición para una cadena. Y luego, al final, se especifica que el la variable que queremos poner en esta marcador de posición es s. Así que, básicamente, tiene s y se pone aquí. Y luego se imprimirá, que eligió un alto o recogido un número bajo. Aceptar. Así bucles le permiten realizar cosas con movimientos circulares, ¿verdad? Es posible que haya encontrado con esto en Arañazos en forma de bucles para siempre o Repetir Hasta o Repetir una determinada número de veces. ¿Por qué es tan bueno para nosotros? Pues bien, en C, digamos que tenemos este canción implementado en scratch que canta, esta es la canción que nunca termina. Simplemente sigue y sigue y por siempre y para siempre. Bueno, realmente no se puede hacer un programa que tiene un número infinito de printf declaraciones en ella, ¿no? Así que en este escenario en particular, de una manera que usted podría hacer este trabajo y para hacer que imprima siempre es en lugar de utilizar un bucle While. Así que un bucle while se ejecutará lo que hay en el cuerpo de los dos apoyos que pertenece a la misma sobre la base de lo que es la condición. Así, en este ejemplo particular antes, si queremos imprimir esto para siempre, lo que Qué podemos hacer? Bueno, claro, ¿no? Así que este tipo de combina la idea de alguna expresión booleana junto con un bucle. Y nos enteramos de Boole expresiones anteriores. Así que cada vez que la condición interior de Mientras que sigue siendo cierto, este bucle ejecutará y sigue y sigue. Y en este caso, si sólo suministramos con datos verdaderos, esto provoca un infinito bucle que imprime la canción una y otra vez y en lo que deseábamos antes sin tener un programa que tiene una infinita número de instrucciones printf, que es no es posible. Así que más convincente, sin embargo, usted puede utilizar esto con un variable y una condición. Así que digamos que queremos repetir la frase, totalmente descabellado, 10 veces. Entonces, ¿qué se puede hacer con un bucle While es primero puede inicializar un contador fuera variable de la Mientras bucle a 10. Y entonces, básicamente, cada vez que se vaya a través del bucle While, imprima la declaración y luego disminuye el variable contador hasta que al final, en algún momento, una vez que se resta lo suficiente veces, 1 de I bastantes veces - y sólo para aclarar, menos que menos significa que es igual a lo menos 1. Eso básicamente me traen a la punto en el que una vez llegué a cero, condición ya no es verdadera y por lo que sale fuera del bucle. Así que totalmente descabellado sólo imprime 10 veces. ¿Una pregunta sobre un bucle While? Aceptar. Así que hay una manera de hacer lo que acabamos de hizo de una manera más concisa con lo que llamamos un bucle. Por lo tanto un bucle Para consiste en un inicialización, una condición, y un actualización, al igual que teníamos antes en este bucle While. Así que vamos a echar un vistazo. En este ciclo While, tuvimos una inicialización, entonces tenía un condición de que nos registramos. Y luego tuvimos una actualización paso en la parte superior. Con un bucle For, esto básicamente toma estas tres cosas y lo condensa hacia abajo en una línea. Así que lo primero que se hace en el Para bucle es la inicialización. Y entonces usted hace un punto y coma, y ​​luego lo hace el estado, que es lo mayor que cero va por allá, y luego la etapa de actualización. Así que esto se lleva a cabo en el final del cuerpo del bucle. Así que estos dos programas son esencialmente equivalente. ¿Alguna pregunta? Entonces, ¿qué es una diferencia entre estos dos? ¿Alguien puede señalarlo? Podría ser un poco más sutil. Es sólo una diferencia muy pequeña. ¿Sí? ALTAVOZ 5: Usted no sería capaz de utilizar la variable i fuera del bucle Para [Inaudible]? JOSÉ: Exactamente. Así que esto es algo que vamos a llegar a más tarde llamado alcance variable. Pero, en esencia, este int vidas I fuera de este bucle While. Así que una vez este bucle Mientras se hace ejecución, voy a ser capaz de utilizar lo más tarde en en el programa. Mientras que con este bucle, esta int I está en el ámbito interior de este bucle. Y debido a que está en el interior de esta porción del bucle Para, que comienza en los paréntesis, y termina con la llave de allí. Cualquier cosa que se declara dentro de aquí no se puede utilizar al aire libre. Así que si trato de usar que fuera, que va a dime, símbolo declarado. Y, esencialmente, no lo haría ser capaz de utilizarlo. ROB: Y así, hace 10 años, en literalmente todos los casos, las llaves son lo que se utiliza para determinar el alcance de una variable. Así que ahí, int I es igual a 10 está declarada dentro de este juego de llaves. Y así, siempre y cuando se intenta utilizar I antes de que esta llave de cierre, está bien. Es posible que aparezca al escribir hacer, usted ver guión, guión, std, iguales, c99. Así que es una versión posterior de C que GCC ha implementado, que también da este acceso directo. Así que este utiliza para no ser permitido en C. Y se puede ver por qué, ya que este int I es fuera de este corchete pero todavía está considerado como en el alcance de estas llaves. Pero esto es una cosa muy conveniente, y lo que es una buena extensión. JOSÉ: ¿Alguna pregunta? Aceptar. Entonces, ¿qué es más útil es que a veces usted quiere una especie de dinamismo en su bucle, ¿verdad? Usted no quiere imprimir sólo necesariamente totalmente descabellado todo el tiempo, que desee contar desde 10 o algo así. Y lo que puede utilizar la variable de contador dentro de ese bucle también. Y en este caso, este programa sólo una cuenta atrás de 10 todo el camino hacia abajo. ¿Y qué se imprime? No imprimir cero, bien, porque cuando - Sí, también no se imprime 11. Por lo tanto, no se imprime cero, porque cuando I es cero, recuerdo, evalúa la condición antes de que entre en para ejecutar el cuerpo del bucle. Y cuando I es cero, esto es falso, por lo que no imprimir la cuenta atrás cero, sólo se imprime el recuento abajo 10 hasta el fondo a 1. Si realmente queremos que se imprima a cero, entonces podríamos poner un signo igual después de este signo mayor que. Aceptar. Así que una manera de hacer la validación de entrada, que es cuando usted le pide al usuario que hacer algo, usted quiere asegurarse de que seguir sus instrucciones, es utilizar el bucle While, ¿verdad? Así que en este caso particular, estoy pidiendo para un número positivo y entonces estoy la espera para la entrada. Y luego he comprobado Aunque la entrada es menor que cero, siga preguntando. Así que, mientras me dan un número eso no es positivo, sigue preguntando, seguir pidiendo, seguir preguntando. Pero lo que es una especie de extraño en esto? O lo que no parece óptima sobre esta estructura aquí? ¿Alguien? ¿Sí? ALTAVOZ 6: Te estás repitiendo la instrucción dos veces. JOSÉ: Así es. Así que tenemos dos instrucciones printf aquí, ¿verdad? Así que hay una manera de que pudiéramos conseguir esto sólo a uno que haría nuestra código más fácil de leer y un poco más limpio. Y entonces no tendríamos que han Entra en el doble de bien. Y una manera de que usted puede hacer esto es mediante el uso de un bucle Do-While. Y un bucle do-while es básicamente un diferente forma de un bucle While, donde lo que está dentro de las llaves será ejecutado al menos una vez. Así que aquí, declaro, int de entrada, fuera primero. Y entonces me acaba de decir, hacer esto mientras que la entrada de instrucciones es menor que cero. Así que golpea el Do primero. Siempre va a ejecutar este por lo menos una vez, por lo que siempre le pedirá al usuario para la entrada de al menos una vez. Y a continuación, se evalúa que la entrada, y continúa en un círculo. Sí, la pregunta? ALTAVOZ 6: ¿Hay una manera de hacerlo [Inaudible] tipos, al igual que si usted dice, GetString y alguien [inaudible] ¿hay alguna manera de [inaudible] JOSÉ: ¿Así que la pregunta es, ¿hay una manera de hacer la validación de entrada si el usuario no pone en el derecho tipo de variable? Así que si pedimos un int y darnos una cadena en lugar. Y en las funciones que implementamos para usted, GetInt, GetString en todas esas funciones, que en realidad ya hacer ese tipo de entrada de tipo básico validación bajo el capó. Así que si usted está utilizando las funciones que te dio, que en realidad no tiene que hacerlo. Pero si usted quiere mirar más en cómo en realidad se puede hacer eso, usted puede mirar bajo el capó en el archivo I/O-- No presente, las funciones de E / S estándar como una lectura de la entrada estándar y salida estándar. Y usted puede tener una mejor idea de cómo puede hacer eso. ROB: Un problema, sin embargo, es específicamente con el ejemplo que dijo que espera una cadena y entro en un int. ¿Cómo saber la diferencia entre querer intencionalmente la cadena 123 frente querer el int 123? Así cadena, es casi no hay validación, es sólo lo que introducido usted interpretar como una cadena. Int es más fácil, porque no importa la de entrada se toma por parte del usuario, que son teniendo siempre una cadena. Y para que la cadena se puede entonces comprobar, son todos ellos los dígitos numéricos en realidad? JOSÉ: OK. ¿Una pregunta sobre un bucle Do-While? ROB: Oh, y esto es también - que se remonta a su alcance, un algo común error está tratando de utilizar algunos locales variable a partir de dentro de este do-while bucle dentro de esta condición. Y en realidad, si nos libramos de esto y dijo, equivale int entrada GetInt, el compilador va a gritar nosotros, porque de entrada no existe fuera del ámbito de aplicación de estas llaves. JOSÉ: ¿Y es por eso que Necesitará esta línea aquí. Aceptar. Así también se puede salir de un lazo anticipadamente si usted quiere. Así que esta es una forma diferente de la implementación de lo que acabamos de implementamos. Y en lugar de utilizar la condición dentro de los paréntesis, estamos usando una Si la declaración en el interior del cuerpo del bucle Do-While. Y en el fondo, cuando la entrada es finalmente mayor que cero, lo haremos romper el bucle. Y así vamos a ir a por todas el camino hasta aquí. Y se puede ver que esto haría probablemente será preferido en este escenario, porque es un poco poco más limpio y un poco poco más fácil de leer. Considerando que la presente, que tipo de tener líneas adicionales en el mismo. Es sólo un poco más feo, Supongo que, en cierto sentido. Sí, la pregunta? ALTAVOZ 4: Romperá sólo recibe a salir de un juego de llaves? JOSÉ: Así es. Así que la pregunta se romperá sólo a salir de un bucle? Y la respuesta es sí. Así que si usted ha anidado bucles For, para ejemplo, si tengo Para int i es igual a 0 hasta 10 y luego por int J es igual a 0 hasta 10, si rompo del interior lazo, yo todavía ir al bucle exterior. Así que va a mantener la realización de la operaciones en el exterior. ¿Una pregunta sobre eso? ¿Sí? ALTAVOZ 5: Pero romper únicas funciones para llaves, no para otra declaraciones? [Inaudible] JOSÉ: ¿Así que la pregunta es se romperá única función de los bucles en contraposición a otras declaraciones como si? Y sí, ese es el caso, porque que está rompiendo hacia fuera de un bucle, a la derecha, en un sentido. ROB: En la gran mayoría de los casos, es este es el tipo de Si algo, a continuación, romper. Así que usted no tiene que romper para aplicar a Si el que está envolviendo a su alrededor. Y también, esto no es mucho de un bucle, pero recuerde que los interruptores son también escapado de por descansos. Vimos las pausas se utilizan con interruptores antes. JOSÉ: ¿Y usted también puede usarlas en los bucles while y for bucles. ¿Alguna pregunta? Aceptar. Así que la próxima es hasta funciones. Así que se podría haber usado uno de estos BYOB bloques en su proyecto de Scratch. Y esto permite, básicamente, definir un conjunto de instrucciones que se deben seguir. Y lo que quiero decir con esto es que vamos a pensar de vuelta a las matemáticas, a la derecha, el álgebra. Usted tiene lo que se llama una función de x, alguna variable, y digamos que esta función es f de x es igual a x más 5. Así que usted puede pensar en f de x como este negro caja que lleva en 15 y luego produce 20. Así de forma más general, una función es algo que toma algunos insumos y después produce algunas salidas. ¿Y por qué son buenas funciones? Son buenos para una serie de razones. Así que, ¿alguien quiere tomar una puñalada a lo que la organización quiere decir? En términos de qué funciones son útiles? ¿Sí? ALTAVOZ 4: Hace que su lectura del código. JOSÉ: Así es. Así que una de las cosas es que hace el código sea más fácil de leer, ¿verdad? En lugar de tener como int x es igual a x veces x veces x, puedo tener el cubo de x, que es más legible y más comprensible para un lector. La organización es también en términos de dividir el código en manejable porciones, de manera que en lugar de intentar poner en práctica todo esto en una larga sección en principal, se puede ordenar de dividirlo en como, OK, vamos a escribir una función al cubo algo, vamos a escribir una funcionar para cuadrar algo. De esa manera usted puede dividirlo en minúscula, pequeñas piezas que se pueden abordar en lugar de tratar de abordar un gran problema a la vez. ROB: O incluso pequeñas, pequeñas piezas que usted y su pareja puede hacer frente. JOSÉ: Sí. ROB: Así que en lugar de dos usted tratando de implantar un funcionar al mismo tiempo. JOSÉ: Simplificación. ¿Alguien quiere tomar una conjetura? ¿Sí? ALTAVOZ 5: Más repetición. JOSÉ: Así es. Así que una cosa que usted puede hacer con simplificación es que es una especie de sobre la misma línea que la reutilización es que una vez que escribo una función de cubo, que pueda sólo tiene que utilizar una y otra y otra vez de nuevo en mi programa en lugar de escribir x veces x veces x más y una y otra vez. Y aquí también la simplificación sólo significa que hace que su código de tipo de más fácil de depurar una vez se divide esto en funciones. Porque entonces usted puede localizar donde sus problemas de tipo de son. ¿Alguna pregunta? Así que otra idea es la abstracción, ¿verdad? Este cuadro negro. Como sabe usted lo que hace GetInt para recibir la entrada del usuario? Realmente no hemos dicho a usted, ¿verdad? Todo lo que hemos dicho es GetInt hace exactamente lo que dice que hace. Así que incluso si no le decimos cómo funciona, todavía sabe. Así que en este caso particular, se trata de una función cuádruple, que hace diferentes cosas para una entrada para producir una salida. Y usted puede cuadruplicar el número multiplicándolo por cuatro. O puede que llamamos poco cambiar por dos. Y vamos a cubrir este un poco más tarde. Y no hay necesidad de saber cómo esta función realmente funciona, siempre y cuando funciona como se indica. Así que bajo el capó, que podría ser como, devuelva los tiempos de entrada ocho dividido por dos. Y no vas a saber, ¿verdad? Todo lo que necesitas saber es hace lo que dice. Así que eso es lo útil acerca de la abstracción. Y otra cosa es una especie de esta idea de la localización de su código a uno particular la sección. Así que si usted tiene un problema, no lo hace tienes que ir por todo el código que intenta para fijar dónde estaba el problema. Así que en este caso, he implementado cubicar mal. Pensé cubo estaba multiplicando por tres. Así que en este caso, se trata de un programa que acaba de multiplicar por tres en todas partes. Y hay otro programa que tiene cubo factorizada fuera en una función. Y ahora si quiero arreglar mi error aquí, tengo que arreglar cada línea de código de este programa. Mientras que, por otro lado, si uso el función, sólo tiene que cambiar lo que estaba mal en un solo lugar. Así, en ciencias de la computación, que llamar a las entradas y salidas. Las entradas se denominan parámetros o argumentos y salidas se llaman devolver valores. Y vamos a ver cómo esto nos ayuda a clasificar de definir una función en un segundo. Así que esta es una definición de función para la cubicación. Así que toma una entrada, y luego devuelve ese número multiplicado sí mismo tres veces. Así que vamos a desglosar esta información. Así que tenemos una cabecera de la función, que consiste básicamente en tres cosas. Así que tenemos los parámetros, que son, como he dicho antes, la insumos para esta función. Y entonces le damos la función de un nombre. En este caso, se llama cubo. Y a continuación, especificamos lo que el tipo de del valor de retorno es. Así que en este caso, mi función cubo toma en un entero y también devuelve un entero. Así que si paso en dos, dos es un número entero, devuelve ocho a mí, lo que es un número entero. Así devolver parámetros de nombre de tipo. Preguntas acerca de eso? Y a continuación, el valor de retorno es en realidad especificado al final diciendo retorno y luego regresar lo contiene el valor devuelto. Así que en este caso, si lo ponemos todo en conjunto, una función toma en parámetros, se llama algo, y devuelve algo que es el tipo que se dice que iba a ser. ¿Alguna pregunta? Entonces, ¿cómo se utiliza una función? Bueno, escribimos una función y luego lo usamos en nuestro programa, ¿no? Así que lo llamé cubo, y entonces puedo usar cubo. Pero lo que es importante tener en cuenta es que el orden importa. Si tengo cubo debajo principal, es va a ejecutar en el cubo. Y en este punto, no hay nada llama cubo en el programa, y ​​es sólo va a ser así, no tengo ni idea de lo que es el cubo. Por lo tanto, le dirá, implícita declaración de la función. Ese es el error que aparece. Y así, en este caso, el cubo está por debajo principal, por lo que no va a saber de él. ALTAVOZ 5: Así principal es por lo general define la última función? JOSÉ: ¿Así que la pregunta es, es el principal suele ser el último Lo que a usted le define? Y no. Es porque normalmente como principal para estar en la cima, ¿verdad? Porque eso es lo primero que quiere abrir el programador de la programa para ver. Y entonces, ¿cómo podemos resolver este problema de que quiero principal para estar en la cima, pero el funciones que queremos, nos los quieren a estar por debajo principal sin embargo, ser capaz de utilizar ellos dentro de la principal? Bueno, utilizamos lo que llamamos un prototipo de función. Así que lo que es un prototipo de la función esencialmente se está en primer lugar se lo la firma o de la cabecera de la función de lo que queremos implementar abajo aquí, y lo ponemos en la parte superior de un programa. Así que en este caso, se dice que, bueno, más adelante en nuestro programa, vamos hacer una promesa para implementar esta función llamada int cubo, que toma entero de entrada. Así que ahora, ya que está por encima de principal, principal, que va a decir, oh, bueno, más adelante en el programa, que va a ser allí, así que puede hacer referencia a ella, así que voy a sólo se esperará a que, por ahora. Y a continuación, en la parte inferior, implementamos cubo. Y entonces principal se acaba de decir, así, se ordenará de enlace estos dos símbolos juntos. Y vamos a cubrir lo que significa más tarde. Y así sabrá que este es el función de cubo que se debe utilizar. ROB: El [inaudible] de querer principal en la parte inferior o superior, he visto tanto. Hay cosas que simplemente les gusta poner principal en la parte inferior. Pero una vez que un proyecto se pone particularmente grande, por lo general principal se encuentra en una presentar todos los suyos. Y en ese punto, al igual que el line cubo int haría - dentro de stdio.h son un grupo de líneas al igual que int línea de entrada de cubo int. Y así los prototipos son cosas que tienden a poner en los archivos de cabecera, al ese momento, no importa. Bueno, no importa. Aquellos siempre van en la parte superior. Y si principal no es un archivo propio, usted no tiene que preocuparse de poner prototipos de funciones individuales en el archivo. JOSÉ: ¿Y vamos a llegar a eso un poco poco más tarde, cuando Rob comienza a hablar sobre la compilación. Y por eso también hay una diferencia entre parámetro y argumento. Y parámetro es justo lo llamamos a estas entradas cuando definimos la función. Y lo llamamos un argumento cuando realmente pasarlo a la función. Así pues, en este caso, este es un parámetro, como hemos dicho antes. Y cuando realmente lo usamos por allá, cúbica de x, entonces x sí es lo que llamamos un argumento al cubo función. ROB: ¿Entonces los argumentos de los parámetros son - hay esta distinción, muy confundido indistintamente. En este punto, para mí, es como una de esas palabras que cuando lo vea en la naturaleza, no puede dejar de forma inmediata cuestión de si lo están usando en el contexto correcto, porque el diferencia es lo suficientemente sutil que sólo todo el mundo tiende - Yo casi siempre digo argumento independientemente de lo que quiero decir. JOSEPH: funciones y también son útiles para lo que llamamos efectos secundarios. Así que una función puede recibir ningún insumo, y también puede producir ninguna salida. Así que en este caso particular, estoy la definición de una subrutina que no tiene valor de retorno. Y con el fin de especificar que, utilizamos lo que llamamos un vacío aquí. Y por lo que el efecto secundario de esta función es que sólo imprime cosas a la página. En realidad, no toma ninguna insumos, y no lo hace en realidad producir cualquier salida. Pero esto podría ser útil en el sentido si usted quiere, por ejemplo, depuración algo en su programa, si desea escribir una pequeña subrutina que imprime, digamos, el contenido de memoria o algo así. Y así, estos efectos secundarios son a veces útil fuera del contexto de igual que las entradas y salidas. ¿Alguna pregunta? Y para finalizar este segmento en particular, ¿Qué hace este programa? Te voy a dar un par de chicos segundos para leer a través de él. En un nivel muy básico, lo que queremos decir es que intercambia x e y, ¿no? Entonces, ¿cuántos de ustedes piensan en realidad esto va a cambiar xey? Levanten la mano. Nadie. Aceptar. ¿Quién cree que lo hará No intercambiar xyy? Y la suma de que era No toda la habitación. Así que algunas personas no están seguros. Aceptar. Eso es razonable. Así que vamos a ir a través de lo que sucede cuando en realidad se llama a las funciones por primera vez en Para responder a esta pregunta. Así que esto es lo que la memoria Clase de parecer. Esto es algo así como un modelo simplificado de lo que la memoria se ve como cuando ejecuta un programa. Así que hay algo que se llama la pila hasta aquí y algo que se llama el montón. Y éstas crecen hacia el medio de memoria. Así que en este caso particular, cuando se llama a una función, consigue poner en la pila. Y entonces todo lo que está contenido en ese la función se queda en lo que llamamos marco de pila de la función. Y así, para conseguir una buena visualización de esto, let's - por ejemplo, tuvimos la principal del programa anterior. Y en el interior de la principal, que se llama cubo. Así principal sería primero van a la pila enmarcar, porque es la primera función eso se llama. Y luego, cuando el cubo se llama dentro de principal, que se puso en la parte superior de la principal dentro de la memoria. Así que lo que usted notará es que el cubo tiene sus propios parámetros y su propios lugareños. Así que cuando realmente pasa algo una función, los parámetros que se consigue son copias de lo que fue pasado desde principal. Y para explicar especie de esto, vamos a caminar a través de un programa. Así que tenemos la pila, lo que es sólo la parte de la pila. Y lo que hacemos es lo primero que inicializamos x e y a uno y dos. Así que tenemos estas pequeñas cajas. Están sentados en la pila del principal enmarcar en la pila. Contienen uno y dos. Ahora que llamamos intercambio. Lo que pasa es que pasamos x e y en cambio y cambio, crea sus propias copias de esas variables a utilizar en el interior de su marco de pila. Así que ahora por allá, tenemos una, que contiene el valor que tenía x, y b, que contiene el valor que y tenían. Así que uno, dos. Y te darás cuenta de que esto es independiente de x e y en el interior de la principal. Así que ahora creamos un temporal variable para contener una. Hemos establecido una igual a b, por lo que cambios de uno a dos. Y entonces nos pusimos b igual a la temperatura, que es uno. Y entonces ahora salimos fuera de esta función. Al salir de la función, el marco de pila se hizo estallar de la pila. Lo llamamos empuje. Usted aprieta un marco de pila en la pila y si usted hace estallar de la pila. Y así, lo que ocurre es todo lo que había en esa pila marco especie de justo sube en llamas. Y para que ya no existe. Pero, ¿qué nos damos cuenta? Nunca hemos cambiado realmente el los valores de x e y, ¿no? Así que aquellos se quedaron local principal. Y pasando cosas en swap, que en realidad nunca ha cambiado los valores. Y ¿cómo llamamos a esto? Nosotros llamamos a esto pasa por valor. Así que en C, cuando se pasa las cosas en funciones, se las pasa por su valor y hace una copia de ellos para la función de utilizar. Y vamos a aprender acerca de algo que se llama pasando por su posterior consulta, pero eso es una forma que puede resolver este problema. Pero no te preocupes por que hasta más tarde. ROB: Y en realidad, ese término, que pasa por referencia, por lo que C no tiene ni siquiera pasando por referencia. C exclusivamente ha de pasar por valor. No importa lo que hagas, siempre estás pasando una copia de algo. Es sólo que, al igual que en cierto modo me mencioné que antes con punteros y que una cadena es realmente sólo cuatro bytes que apunta a algún lugar de la memoria. Bueno, si tengo esta cadena y es me dice que es donde la cadena - bueno, si tengo este puntero a esta colocar en la memoria, entonces puedo pasar una copia de ese puntero a una función, y esa función todavía sabe dónde en memoria que es. Así que estos dos indicadores están señalando al mismo lugar en la memoria, y eso es lo que vamos a ser capaces de para modificar las cosas más allá de la marco de pila actual. JOSÉ: ¿Quieres hacer la compilación? ROB: No, son las 5:30. JOSÉ: OK. Es 05:30. Aceptar. Así que vamos a cubrir la compilación Supongo que en la próxima sección, o la sección de LEADER en ese punto. Y - ROB: ¿Alguna pregunta? JOSÉ: ¿Alguna pregunta? ¿Sí? ALTAVOZ 5: Uso de cadenas de CS50, cualquier funciones que queremos utilizar para aquellos, que será como funciones C. CS50 no ha entrado y hecho ningún adicional. ROB: Correcto. Cualquiera de los de C como [inaudible], que utilizaría los de nuestras cadenas. JOSÉ: Y una última cosa que quiero mención es que tenemos una guía de estilo para esta clase. ROB: Oh, sí. JOSÉ: Así que si vienes de un programación de fondo antes, podría tener ciertas convenciones cuando estás escribiendo código como poner llaves en la misma línea o particulares formas de sangría o nombrar las variables. En esta clase, queremos seguir un guía de estilo específica sólo porque, así, si usted sale y trabaja en la industria, que va a esperar seguir la guía de estilo de la empresa a la que vas a. Como por ejemplo, Facebook creo tiene un tipo particular de nombrar convención. Y hay diferencias entre el camello variables de la carcasa y al igual que separándolos con guiones bajos. Y también, creo que es más importante, al igual que por ejemplo, la sangría, ¿verdad? Nosotros empezamos llaves donde la condición es, y están en la línea siguiente. Y también ponemos llaves en incluso si es sólo una línea. Y muchas veces, hay maneras de hacer donde usted puede dejar estos aparatos de si se trata de una sola línea bajo la instrucción If. Pero en esta clase, queremos seguir un guía de estilo específico para que lo recibe utilizado para ese tipo de cosas. ROB: Sí, y Style 50 se va a hacer cumplir esta guía de estilo, y estamos va a utilizar Style 50 al grado de su código. Por lo que hace las cosas más fáciles para nosotros y esperemos que no debe hacer cosas que mucho peor para usted dado la estilo estandarizado no debería ser tan poco realista. JOSÉ: Y por último, para encontrar el estilo Guía, vaya a manual.cs50.net/style. Y sí. ALTAVOZ 4: ¿Vas a hacer cumplir caracteres por línea? ROB: Si. JOSÉ: Lo siento, chicos. ROB: Eso es como uno de los únicos. En este punto, estoy bien con 120. Estoy bien con decir 120 caracteres por línea. Entiendo que exista un límite. Creo que 80 es tan pequeño, pero estamos aplicarla. JOSÉ: En lo personal, creo que con C, 80 caracteres es más bien. Una vez que usted comienza a recibir a otro lenguajes como JavaScript y PHP, y no tan razonable que simplemente limitar a 80 caracteres. Aceptar. Bueno, eso fue la sección super. ¿Alguien quiere dulces? ALTAVOZ 4: Si.