[Powered by Google Translate] ZAMYLA CHAN: Todo correcto todo el mundo,. Bienvenido al Tutorial 1. Este tutorial será el conjunto de procesadores 1, que es C. Espero que les todos se divirtieron con sus proyectos de Scratch. Así que ahora en este tutorial, estamos en realidad va a ser capaz de entrar en C, entrar en escribir algo de código máquina. Así que si no estaban en Tutorial 0, entonces estos tutoriales realmente - vamos a caminar a través de la conjunto de problemas, hablar a través de algunos consejos y técnicas comunes que puede utilizar. Vamos a romper la asignación hasta en pedacitos manejables, por lo que ustedes pueden empezar y es de esperar entender cómo hacerlo. Bien. Así conjunto de procesadores 1. Los conjuntos de procesadores de este año tendrá una estructura en la que la primera - que va a ser una sección de preguntas, una serie de preguntas que realmente también le ayudarán a empezar con el conjunto de procesadores, ayudará a practicar algunas técnicas que usted necesita. Y así estas preguntas, yo no voy a cubrir en el paso a paso, porque en su sección, su enseñanza asignado compañero en realidad va a caminar a través de los preguntas con usted. Al final de la sección, a pie con el respuestas a esas preguntas, pero también con la confianza de que usted puede poner en práctica algunas de las características que usted necesita para la última parte de la conjunto de procesadores. Pset 1 constituye Mario. Y eso es un programa pequeño y divertido en el que esencialmente escribir e imprimir una pirámide en medio de la típica escena de Mario. Y a continuación, la segunda parte de la conjunto de procesadores se denomina Greedy. Y así, en Greedy que actúan fundamentalmente como un codicioso cajero, en la que si alguien nos da una cantidad de dinero que queremos, podemos calcular la cantidad mínima de monedas que podemos volver a ellos todavía les da esa cantidad. Está bien. Así que cada tutorial tendrá una caja de herramientas. Y de nuevo, no se puede utilizar todas las herramientas de esta caja de herramientas o puede utilizar todos ellos. En cualquier caso, es muy bueno saber lo que que está equipado con. Así que tenemos el aparato CS50, que voy a mostrar que ustedes y presentarle a eso. A continuación, también en general, un buen estilo es definitivamente uno de nuestros herramientas más importantes. Estilo esencialmente se refiere a cómo es legible el código? Cuando alguien se va y lee el código, ¿tienen una vida fácil? ¿Pueden entender? Es elegante? Entonces vamos a hablar acerca de cómo obtener la entrada del usuario válido en su programa porque tanto Mario y codicioso, tendrá que pedir al usuario que introduzca y darle algún tipo de número. Así que queremos asegurarnos de que el número es válido. Entonces recuerde en Scratch, tuvimos bloques tales como repetición, Repita hasta que, o esperar, o para siempre. Así que vamos a la clase de traducir eso en C y ahora mirar como bucles for, while y do-while. Luego también tenemos también tendrá que mostrar los valores de nuevo en la pantalla, ya sea en Mario o en Greedy. Y lo que vamos a hablar sobre cómo imprimir cosas de las cadenas a enteros y carrozas. Y, por último, vamos a hablar de pseudocódigo, una realidad concepto importante que hay que recordar en este curso. Lo que me parece más me ayuda con los boletines de problemas es pensar y describir lo que quiero hacer antes de pensar en cualquier C. Pero justo describir la acción. Así que es una especie de pseudo entre Inglés y C, tipo de describiendo los procesos sin la sintaxis correcta pero proporcionar una estructura lo suficientemente bueno. Y así voy a tener algunos ejemplos de pseudocódigo para usted también en este tutorial. Bien. Entonces, ¿qué vamos a trabajar con el aparato CS50. Básicamente se trata de una máquina virtual que ejecuta una especie de computadora dentro de su propio equipo. Y esto tiene un montón de beneficios. Una de ellas es que se trata de un preset con muchas de las herramientas que usted va a necesita para CS50. A su vez, esto significa que todo el mundo está en el mismo terreno, ya sea Mac o PC u otro sistema operativo. Todos podemos ejecutar la máquina virtual. Y así, hay instrucciones en manual.cs50.net/appliance. Así que si usted va a ese enlace y sigue las instrucciones, entonces espero que usted será capaz de instalar el aparato. Así que primero, tendrá que instalar una aplicación, una aplicación real a ser capaz de ejecutar la máquina virtual. Y después de descargar el aparato. Pero, de nuevo, hay instrucciones en manual.cs50.net/appliance. Así que ya he descargado mi equipo y yo hemos instalado en VMware Fusion. Y así, una vez que he descargado el aparato, me fui a archivo. Fui a abrir y luego encontró donde yo almacena el aparato CS50. Y a partir de ahí, lo corrió aquí. Pero yo lo tenga instalado ya está aquí, así que vamos a echar un vistazo más de cerca. Está bien. Así que ahora estamos dentro CS50 Appliance. Lo hice de pantalla completa. Usted puede optar por hacerlo si así lo desea o simplemente como un pequeña ventana en el escritorio. Aquí tenemos un escritorio simple con una casa y un bote de basura. Pero si vas a Menú y luego a la programación, a continuación, ver que tenemos algo llamado Terminal. Y aquí, podemos navegar por nuestro equipo. Podemos escribir código. Pero, en realidad, vamos a estar usando un programa llamado gedit, o "g editar ", lo que es. Así que vamos a utilizar que uno que escribir código. Así que usted tiene estas dos herramientas que va a utilizar principalmente que escribir código. Luego, en otra parte, es como un ordenador normal. Contamos con un navegador. Elegimos Google Chrome. Lo que hemos hecho es que hemos creado un Dropbox para contener todos los los documentos. Y eso es algo que está muy animado. Dropbox utiliza la sincronización de nube y si es así - Así, por ejemplo, algo por casualidad - esperemos que no - sucede a su aparato, entonces todo habrá sincronizado en la nube. Está bien. Así que esas son las aplicaciones que va a utilizar en la CS50 Appliance. Ahora, para navegar alrededor de la línea de comandos. El terminal puede actuar como una especie de una manera realmente escribir comandos en - como, si usted es un Mac, un Finder. O si estás en Windows, creo que eso es "explorar mi ordenador "o algo por el estilo. Así que si nos remontamos en el aparato, vamos a abrir un ventana de terminal. Así que tiene este sistema, jharvard @ aparato. Vamos a hacer esto más grande. Bien. Así que si escribimos el comando ls, a continuación, que muestra todos los archivos en nuestro ordenador, en nuestro directorio actual. Los directorios son como si fueran carpetas. Utilizamos estos términos indistintamente. De acuerdo, hemos realizado una lista de los archivos que están en este directorio. Ahora bien, si queremos acceder, por ejemplo, nuestro Dropbox, entonces podemos cambiar de directorio. Así cd y luego Dropbox. Nos ls otra vez, y entonces vemos la lista de archivos que se encuentran en esta carpeta. Esto es análogo a me voy a mi casa, a continuación, hacer clic en Dropbox, y luego ver la lista aquí. Está bien. Así que vamos a decir - cuando ustedes van a hacer que su conjunto de procesadores 1, vamos a hacer una directorio llamado pset1. Así que estamos en Dropbox en este momento, como se puede ver en esta solicitará aquí. Así que vamos a hacer un directorio. Así mkdir, vamos a llamarlo pset1. Y ahora si nosotros ls otra vez, entonces ver que pset1 aparece. Y así, si queremos entrar pset1, entonces podemos entrar esa carpeta con el comando cd. Está bien. Así que de nuevo, vamos a ver si podemos - decir, vamos a hacerlo de otra manera. Esto es análogo a decir "Crear una nueva carpeta, pset1. Pero a medida que encuentres, podrás estar en contacto con el terminal mucho. Así que a veces es mucho más fácil, más rápido pierde un solo trabajar en la terminal para hacer ese tipo de cosas. Bien. Y entonces estos otros comandos. Hay un rm para eliminar un archivo. Así que simplemente escriba rm y luego el nombre de la archivo para eliminarlo. Vamos a entrar en algunos ejemplos de esto más adelante. Y luego tenemos algo que se llama el comando man, que trae un manual para un tipo de función. Una vez más, voy a traer a colación un ejemplo real de eso más adelante. Así que otra herramienta muy importante, como he mencionado brevemente antes, es el estilo. Así que, esencialmente, el estilo tiene que ver con la lectura. ¿Habrá alguien más sea capaz de leer, seguir y entender su código? Esto es especialmente importante para usted, usted mismo, en realidad. Si te vas a quedar hasta fines de codificación, y más tarde le volver atrás y usted es como, ¿qué significa esto variable? Digamos que estamos trabajando en un proyecto de grupo con alguien, y te ambos tienen que ver el uno al otro de código. Es muy importante que usted nombre a las variables correctamente y hacer que se vea bien, porque eso hace toda la diferencia. Pero por encima de todo, estamos en un curso en estos momentos. Así que por el interés de CS50 y especialmente para su Teaching Fellows y niveladoras que buscarán en su conjuntos de procesadores, por favor, utilice el estilo correcto. Y sus compañeros de enseñanza será muy feliz. Así que de nuevo, el estilo de sangrado incluye las cosas correctamente, especialmente el uso de sus aparatos y sangría esos. Nombrar variables de algo que tiene sentido. En estos momentos seguimos la convención cuando se tiene varias palabras en el nombre de la variable, entonces conectarlos con un guión bajo, como se ve en que nombrar ejemplo allí. Entonces, finalmente, algo que se llama números mágicos. Esencialmente, cuando usted está leyendo a través de código y decir tiene una variable - decir, no tiene una variable pero sólo decir que está bien, hasta tal y tal es menos de 10. A continuación, su hija va a ir bien, espera, ¿De dónde provienen de ese 10? Así que en realidad explica usted importa mucho. Para ayudarle a explicar son los comentarios. Los comentarios son probablemente la cosa más importante incluir en sus programas. Y no sólo le ayuda a explicar en realidad - le ayuda a explicar su tipo de razonamiento vas a lo largo. Y si lo hace, de nuevo, va a ser mucho más fácil volver en el código y el tipo de entender lo que está haciendo allí. Una vez más, los estudiantes de me gusta comentarios. Así que un comentario así y - algo así como puntos de regalo. ¿Y quién no le gustan los puntos gratis? Usted también puede tener múltiples líneas de comentarios. Y por eso he incluido una especie de plantilla aquí. Esencialmente, por lo general estos se utilizan en la parte superior de tu programa a la clase de explicar, en general, lo que el conjunto de problemas tiene. Incluya su nombre, la fecha, etc. Y por eso, como dije en el comentario de varias líneas, manual.cs50.net/style_guide tiene más consejos y reglas sobre estilo de bucles, etc. Bien. Así que ahora que te lo he dicho un poco de estilo, vamos a ver esta acción en. Está bien. Así que aquí, Tommy nos ha escrito una deliciosamente horrible, ejemplo de estilo en un programa. Así que usted ve aquí, todo bien. Esto es realmente bien. Ya ves el comentario de varias líneas aquí. Lo comenzar con una barra inclinada y luego dos asteriscos. Se prosigue por, alineando los asteriscos a lo largo de la línea y luego terminar con un asterisco y una barra. Está bien. Así que eso está bien. Esto aquí está bien. Ha incluyendo sus bibliotecas. Pero entonces aquí tiene comentarios abarcan varias líneas. Hay un montón de cosas mal con esto. Comentarios abarcan varias líneas, aquí él está usando la sintaxis de las líneas de comentario sólo individuales. También está fusionando todo en el mismo comentario. Así que queremos evitar eso. Entonces aquí vemos que estas llaves, por ejemplo, son todos el lugar. La sangría es erróneo. En realidad, no le muestre donde definitivamente algo Comienza y termina otra cosa. Entonces, así, vemos que tiene una variable definida i = 5 aquí. Pero este cuatro viene de la nada, y no hay comentarios para explicar realmente dónde viene. Bien. Así que ahora vamos a ver algo que en realidad es lo mismo código excepto con mejor estilo. Así que de nuevo, este es el ejemplo de buen estilo, el ejemplo de varias líneas. Y entonces aquí es muy limpio. Vemos que empieza una sentencia if aquí, entra en una nueva línea, tiene una llave abierta. Entonces él tiene una muesca. Se mantiene esta sangría - mantiene esta indicación uniforme en todo el territorio programa y realmente se nota cuando un bloque de código se inicia, cuando un bloque de código termina. Esto puede parecer un poco quisquillosa de nuestra parte para comenzar con, pero ya verás como estás escribiendo código. Es muy útil ser capaz de separar esto. Y una vez más, sus alumnos realmente así. Y por lo que veo, en vez de limitarse a poner un número en allí, en realidad el nombre de las iteraciones variables. Y lo que no estamos realmente mirando este código en este momento pero sólo un poco de ver un ejemplo de estilo bien contra el mal. Y si nos fijamos en ellos lado a lado aquí, ¿verdad definitivamente prefieren leer el uno a la derecha. Está bien. Así que una última cosa antes de sumergirse en la verdadera sustancia de la conjunto de procesadores es cómo compilar y ejecutar el código. Y así, esencialmente cuando se escribe C, que en realidad no es traducido en el código máquina real, los ceros y los que la máquina puede leer e interpretar. Así que tenemos algo - Clang es un compilador que usamos para C. Hay muchos compiladores. Pero en CS50, vamos a utilizar Clang. Y así Clang básicamente se traduce de C a máquina código para usted. Así que vamos a ver un ejemplo - Bautismo en el aparato aquí. Está bien. Así que ahora mismo estamos en nuestro directorio home. En realidad no hay ningún código donde está. Así que vamos a cambiar nuestro directorio para Dropbox/walkthrough1, donde He guardado algo de código. Así que si pulsamos ls, entonces vemos que tengo una par de archivos de aquí. Está bien. Así que ya he escrito hello.c, así que vamos a compilar y luego ver lo que hace. Así que un comando de compilación básica sería entonces clang hello.c, esencialmente diciendo bien, compilar hello.c para mí. Hago clic en Enter, parece haber ido bien. Vamos a ls clic de nuevo. Este archivo a.out ahora ha demostrado. Y así a.out es un archivo ejecutable. Así que para correr, hacer un. / A.out. Y así vemos que este programa hello.c aparentemente imprime hola cinco veces. Está bien. Pero decir que no desea utilizar el nombre a.out. Por ejemplo, queremos ejecutar el programa hola ya que hace que sea más fácil de entender. Así que digamos que hello.c clang, y entonces esencialmente lo que necesita para pasar en algunas cosas que se llaman las banderas. Y diciendo esto está bien, así que quiero nombrar esta otra cosa. También se puede pasar en un montón de banderas diferentes, que vas a ver. Por lo tanto la bandera para nombrar a un programa algo que queremos es-o. Después-o, se escribe el nombre del programa. Vamos a llamarlo hola. Así que ahora vemos que en realidad tenemos un archivo ejecutable hola. Así que podemos correr, y hace lo mismo que antes. Así que ahora que tenemos hola, también podemos eliminar, por ejemplo, nuestro a.out. Así que rm para eliminar, a.out, su teléfono le pedirá, pregunte para que confirme si realmente desea borrar o no. Decimos y para sí. Y ahí vamos. A.out se ha ido. Está bien. Pero a veces es confuso para recordar toda la banderas que debemos incluir y teclear sonido metálico. Y como vemos cuando estamos usando programas más complejos, vamos a ser incluidas las bibliotecas diferentes. Y así, nuestros comandos a Clang obtendrá más y más. Por lo tanto incluido en el aparato CS50 es el comando make. Así que simplemente escribir make hello. Oops. Ya hemos hecho el archivo ejecutable. Así que me acaba de quitar. Ahora vamos a escribir make hello. Y usted ve aquí en esta línea que dice esencialmente hacer hola involucra a todos los comandos que entrar en él para usted. Por lo tanto incluido en el aparato CS50 es el archivo make. Así que, simplemente, cuando usted tiene un name.c archivo, entonces todo lo que hacen es decir hacer que el nombre del archivo. Y entonces tendrás un archivo ejecutable archivo con ese nombre. ¿Sí? Ponencia 1: Para mi computadora, en lugar de Clang dice GCC. Es como - ZAMYLA CHAN: Si. Así que el equipo podría decir GCC en lugar de Clang porque GCC es otro tipo de compilador. Si usted está en el Appliance CS50 aunque, entonces este debe utilizar Clang. Si no es así, entonces tal vez venir a hablar conmigo después o enviar sobre CS50 Comenta y podemos resolver eso. Está bien. Así que ahora que tenemos nuestro tipo de herramientas básicas hacia abajo, entonces puede sumergirse en Mario. Bien. Así que Mario es un programa en el que básicamente vamos a ser hacer que nuestra propia especie de versión primitiva del Mario juego de fondo. Ya sabes, Mario tiene generalmente un tubo y una árbol y algunos bloques. Y luego hay una especie de pirámide mitad. Así que sólo vamos a centrar en la pirámide de la mitad, hacer que el código tal que imprime los valores hash para la clase de bloques en este formato. Entonces, ¿qué va a pasar es que el usuario va a introducir una cierta altura de la pirámide, y entonces usted imprimir que fuera de tal manera que la parte inferior izquierda de hash - por lo que en la parte inferior derecha aquí - que uno se alinearán con la parte inferior izquierda de tu terminal. Bien. Así que la primera cosa que usted necesita - el primer problema pequeño mini que tenemos que abordar es cómo para obtener la entrada del usuario. Así que tenemos que estar lidiando con lo que el usuario introduce y luego tipo de cosas hay salida. Así que echemos un vistazo a buscar un archivo llamado apples.c que escribí que tiene que ver con las entradas y salidas. Bien. Así que aquí en la parte superior, he incluido algunas de las bibliotecas lo que necesito. El que realmente importa aquí es stdio (estándar I / O). Que se ocupa de con entradas y salidas estándar, porque vamos a se trata de entradas de usuario. Está bien. Así que empiezo mi función principal. Y entonces le pido al usuario bien, ¿Cuántas manzanas tiene? Entonces aquí, lo que hace esta línea - Asigno la variable i con el valor de getInt. Así getint es una función que se incluye en stdio. Y así, en esencia, que se ocupará de él para usted. Se le pedirá al usuario para un int. Lo que regresan, que se asignará a la la variable i. Y así, entonces es sólo un pequeño programa que disminuye la valor de I por 1 y luego se imprime el valor nuevo. Una cosa buena de gedit es en realidad que hay un mini terminal de la derecha aquí. Así, en lugar de tener que cambiar hacia adelante y hacia atrás entre gedit y el terminal, en realidad se puede lo ejecutas desde aquí. Así que primero vamos a entrar en el directorio correcto. Así que vamos a cambiar nuestros directorios para Dropbox/walkthrough1. Está bien. Así que ahora vamos a hacer las manzanas, compila para nosotros. Así que ahora vamos a ejecutar las manzanas. ¿Cuántas manzanas tenemos? Me dicen que tengo 3. Y dice "mwahaha voy a comer a uno de ellos", y dice "Ahora tiene 2 manzanas". Está bien. Así que vamos a correr de nuevo. Y digamos que tengo una manzana. Ahora tengo 0 manzanas. Bien. Así que este programa parece funcionar como se espera. Nos entrada a un número, que disminuye en 1 y, a continuación imprime de nuevo. Pero lo que si, por ejemplo, tengo -1 manzanas? Eso no acaba de tener sentido. Pero aún así es un número entero, por lo que el programa lo acepta. Y así le devuelve un número aún más negativo. Así que esa es una lección para nosotros que a pesar de la getInt función y los otros asociados, tales como GetFloat o GetString - a pesar de que aquellos nos llevará el tipo de datos correcto, por ejemplo, si yo acababa de decir [escribiendo], entonces me decía que vuelva a intentarlo. Así que esto va a hacer frente a cualquier tipo de datos de su entrada es pero no se compruebe en realidad, así, en realidad es un tipo de valor que yo quiero? Entonces una parte de Mario es que el usuario tiene que introducir un número que representa la altura de la pirámide medio que usted está haciendo. Y entonces, si estamos provocando en este usuario para la altura, entonces debe haber dos límites al respecto. ¿Cierto? En la especificación, que dice que no debe haber más de 23 personajes porque eso es un poco de la norma altura de la terminal. Pero entonces, ¿qué encuadernado, tal vez una cota más baja, podría queremos incluir? Si estamos realmente dibujar una pirámide, forma de pensar de nuevo a lo alto de una pirámide puede ser, puede jamás ser inferiores a un número determinado? ALTAVOZ 2: Por encima del tres. ZAMYLA CHAN: Hmm? ALTAVOZ 2: Por encima del tres. ZAMYLA CHAN: Ese es un buen punto. Podría ser - podríamos querer limitarla a sólo una pirámide de tres niveles. Pero vamos a pensar - digamos como una tabla hash se cuenta como una pirámide también. Entonces, ¿cuál debe ser nuestra actual límite inferior será? Pensando en las manzanas, no queremos un pirámide altura negativa. ¿Cierto? Bien. Así que cuando usted pide la entrada del usuario, entonces usted tendrá que incluir alguna forma de asegurarse de que el número entero que que le proporcionan no es negativo porque no se puede dibujar una pirámide negativa. Bien. Así que hay un par de maneras de hacer esto. Básicamente, una vez que pedir la entrada del usuario, que quiere demandar que te dan con la entrada correcta. Así que usted quiere exigir que se le proporcionará un número que no es negativo, sino también menos de 24. Así que nos enfrentamos a cero al 23, ambos inclusive. Está bien. Por eso queremos pedir continuamente - si no nos han dado un entero válido, quieren continuamente demandan no. Dame una entrada válida. Dame una altura válida. Así que recordar de nuevo en Scratch, tuvimos la repetición hasta que el bloque o Siempre Si el bloque. Esos son los bucles que son muy similares al bucle mientras y do el bucle while, que nos meteremos en sólo en un segundo. De modo que el bucle while tiene esencialmente una condición que compruebe eso es un valor booleano que usted coloca dentro de allí, como el bloques en cero con los ángulos. Eso es lo que ocurre dentro de los corchetes del bucle while. Así que tendrás que tener algún tipo de condición allí. Y como ya hemos comentado anteriormente, esta condición tienen que ver con los límites del entero que se introduce. Así que el estado tendría algo que ver con el hecho el número entero está dentro de los límites adecuados. Así que eso es un bucle while. Por ejemplo, usted puede solicitar el número entero y luego comprobar continuamente mientras que esta entrada no es válida. Por ejemplo, tenga en volver a preguntar, sigue pidiendo el usuario de un número entero. Así que eso podría ser una manera. Otra forma podría ser un do while, que es muy similar a un bucle while, excepto lo que es un hacer, mientras que hace es - puedes tipo de ver la sintaxis - es que tiene el hacer y luego el cuerpo del ciclo actual en primer lugar. Entonces tiene las condiciones while. Entonces, ¿qué while - lo que son útiles para que, efectivamente, es ejecutar el código por lo menos una vez y luego comprobar si la condición es cumplido o no. Así que si usted fuera a hacer un do while, entonces dentro de su declaración que usted puede solicitar un número entero porque vas a por lo que pedir al usuario una vez. Y luego, después de que los del sistema, entonces se puede decir muy bien, bien una vez que he hecho esto, es válido? Si es así, entonces usted puede seguir adelante. Pero si no es así, entonces sólo voy a actuar como un regular mientras bucle y luego seguir preguntando. Bien. Así que volvemos a Mario. Así que sabemos cómo se debe solicitar la intervención del usuario es correcta dentro de los límites adecuados. Así que ahora que realmente se necesita para dibujar la pirámide mitad. Parece que los caracteres de texto simples. Así que en realidad abierto - vamos a abrir una ventana y decir muy bien, así que si yo fuera en realidad va a hacerlo de forma manual, escriba una sola? Bien. Así que vamos a ver. Digamos, por ejemplo, queremos hacer una pirámide que es alineados a lo largo del lado izquierdo, a continuación, sólo haría - en Mario, el nivel superior tiene dos bloques en lugar de uno. Así que empezamos con dos. Hacemos clic en Aceptar. Lo hacemos tres, y luego cuatro, Enter, cinco. Bien. Así que es bastante simple. Salvo en este conjunto de problemas, lo queremos realmente para alinearse con el lado derecho de nuestra pantalla. Está bien. Entonces, ¿cómo puede uno de ustedes en realidad este tipo de tal manera que está alineado a lo largo de la derecha? En lugar de poner el picadillo en primer lugar, cómo usted puede ser de tipo moverlo a lo largo? ALTAVOZ 3: Escribe una línea? ZAMYLA CHAN: Hmm? ALTAVOZ 3: Escribe una línea? ZAMYLA CHAN: Si. Si. Se puede escribir como un guión o algo así eso, sino que se puede decir simplemente utilizar un espacio. Pongamos como en tres espacios aquí. A continuación, la siguiente línea, bueno, tendríamos que poner dos espacios. La siguiente línea, que sólo hay que poner un espacio. Y para nuestra última línea, que no pondría ningún espacio. Y ahí tenemos nuestra pirámide. Así que es una especie de - Recuerdo ese tipo de lógica. Y tratar de averiguar algún tipo de patrón que podemos luego traducir a C e involucran en algún tipo de bucle. Está bien. Así que digamos que tenemos una altura ocho, entonces nuestra primera hilera tendrá dos hashes. Sin embargo, para obtener los hashes, usted tendría que escribir algo espacios de antemano. ¿Cierto? Lo que hice es que yo pasé. Lo dibujé yo mismo, una pirámide en mi editor de texto, un pirámide, con una altura de ocho años y se ha calculado el número de espacios que necesitaba para hacer. Así que le dije que sí, bueno la primera fila es va a tener dos hashes. Pero antes de eso, tiene que introducir siete espacios. El siguiente tiene seis espacios y luego tres hashes, etcétera. Así que vamos a tratar de llevar esto a otro nivel de abstracción. ¿Qué pasaría si tuviéramos la enésima fila, cómo hashes y cuántos muchos espacios que necesitamos? ¿Alguien ve el patrón? Así que la primera fila tiene dos hashes. La segunda tiene tres. El tercero tiene cuatro. Así que la enésima fila tendría - ALTAVOZ 4 N + 1? ZAMYLA CHAN: Si. N más 1. Exactamente. Así vemos que el número de hashes va a ser - si estamos contando la primera fila para ser uno, entonces el número de hashes es sólo va a ser uno más que eso. Bien. Entonces ¿qué pasa con el número de plazas? Así que vamos a tratar de expresar esto en términos de la altura. Si la altura es de ocho, a continuación, la primera fila cuenta con siete espacios. Así que ese tipo de 8 corresponde a menos 1. ¿Cierto? Así que la segunda fila va a tener seis espacios, que es menos 8 2. Así que voy a dejar a usted a la clase de figura fuera el patrón para que. Bien. Pero en la programación, a veces realmente índice en cero. Así que empezamos de cero en vez de uno. Así, en lugar de la primera fila se llama la primera fila, vamos a estar llamando en la fila 0-th. Así que dependiendo de la manera que usted desea para su aplicación, se mucho cuidado si usted comienza en cero, si usted comienza a uno, su patrón va a ser compensado por una. Bien. Así que ahora que tipo de descubierto el programa, tengo que decir bien. Así, por cada tipo de nivel de la escalera, me voy a imprimir tal y tal número de espacios y, a continuación tal y tal número de hashes. Eso depende del modelo que hemos creado antes. Bien. Así que una manera de iterar y amable de ir a través de un número establecido de las cosas es un bucle, una especie de la repetición del bloque 10 o repetición similar y ha introducido un número de Scratch. Así que, esencialmente, para cada nivel de escaleras, vamos a querer imprimir los espacios primero. A continuación, imprima el número de hashes. Y entonces vamos a querer entrar en una nueva línea y luego repetirlo de nuevo para el siguiente bloque. Bien. Así que echemos un vistazo a los bucles for para un segundo para ver un tipo de forma para que podamos ir a través de un número determinado, vaya a través del número de pasos de esta pirámide mitad. Así que para bucles se compone de tres partes. En primer lugar, usted tiene una inicialización. Así que, esencialmente, se establece una variable. Va a estar en ese valor cada vez que para el arranque en bucle. A continuación, vamos a tener una condición. El bucle for se ejecutará sólo en tanto que condición se evalúa como verdadera. Y entonces usted tiene un problema de actualización. Así que tiene que ver con la variable que se inicializa. Así que, básicamente, una forma de asegurar que podamos salir del bucle, que no mantenemos en la ejecución de por siempre y para siempre. Porque a diferencia de Scratch, que en realidad no tienen un lazo llano Forever. En C, el programa tiene que terminar con el tiempo. Así que tenemos que asegurarnos de que de alguna manera hemos detenerlo. Bien. Así, un ejemplo de un bucle for que es posible que desee utilizar para Mario es esto. Así que tienes un entero i que comienzan en 0. Mientras que es menor que la altura, se ejecuta el cuerpo del bucle interior aquí. Después de que el cuerpo del bucle se ha ejecutado, entonces lo haría incrementar i en 1. Luego, el programa puedes volver a intentarlo - está bien, bueno, i es menor que la altura? Si es así, entonces usted podría continuar. Así que aquí está un ejemplo de cero indexación, donde empezamos a cero y luego - cuenta de que nuestra condición es menor que la altura. Así que decir que nuestra altura es de cuatro, por ejemplo, i comenzará a 0. Va a ser 1. Va a ser 2. Va a ser 3. Y luego, una vez que se actualiza, cuando el bucle para las actualizaciones, lo haré a continuación, se establece en 4. Pero 4 no es menor de 4, y así que hacíamos continuar con el resto de nuestro bucle. Bien. Así que empieza en cero. Pero también podríamos empezar a la una, por ejemplo. Pero desde que empezamos a uno, que tipo de tener que ir a una más tiempo al final. Así que por eso le sumamos el menor o igual a. Así que una de las grandes cosas que me gustan de ordenador programación es que no es tan muchas maneras de hacer las cosas. Así que usted puede elegir si desea empezar de cero, ya sea que comenzar a la una. Además, si quería, se podía utilizar un mientras que el bucle, por ejemplo. Así que usted podría - vamos a hello.c realmente abierto. Así que tenemos un bucle aquí. Se inicia en i = 0, i <5. Tengo un comentario aquí nos dice lo que hace. Imprime saludar cinco veces usando un bucle for. Pero también podría hacer que el uso de un bucle while también. Así que echemos un vistazo a cómo podemos hacer eso. Así que si vamos a simular un bucle for, también queremos imitar la inicialización, la condición, y la actualización. Así que la condición debe ser bastante simple ya que en el mientras que la sintaxis, cuando se mire, dice while (condición). Así que vamos a introducir la condición allí. i <5. Bien. Así que sabemos que queremos imprimir adiós. Sabemos que ese es el cuerpo de nuestro bucle. Pero nos falta la inicialización y la actualización, ¿no? Debido a que no puede tener un bucle infinito. Se tiene que terminar. Así que vamos a añadir algún tipo de inicialización aquí usando el misma que hemos utilizado en nuestro bucle para, int i = 0. Bien. Así que empezamos con un int i. Repetimos este bucle while, siempre y cuando i es menor que 5. Así que nos falta una cosa, que es la actualización. Entonces, ¿qué sería de actualización que tenemos que utilizar si eran esencialmente recreando el bucle for de arriba? Tenemos la inicialización i es igual a 0. Tenemos la condición i es menor que 5. Y entonces aquí es una actualización, ¿no? Así que queremos copiar eso. Queremos decir muy bien, i + +. Eso es lo mismo que decir i = i + 1. Pero ya que se usa con tanta frecuencia, forma abreviada de que es sólo diciendo i + +. Grande. Bien. Aquí realmente no ha salido de mi programa de manzanas. Así que sólo voy a haga clic en Control-C e inmediatamente que botas me fuera de mi programa y trae de vuelta a la terminal. Así que, por ejemplo, si te encuentras con un error en el que usted se olvidó de actualizar su bucle while de manera que lo haría terminar y entrar en un bucle infinito, entonces se puede utilizar Control-C para salir de eso. Está bien. Así que estamos en el directorio correcto. Así que vamos a hacer hello. Y luego, si corremos hola, vemos que el bucle adiós hace exactamente lo mismo que nuestro bucle for hace. Así que eso es sólo una sugerencia. Ya sea que usted está más cómodo con bucles for o con ciclos while, pueden ser intercambiables. Así que cualquiera que desea utilizar para iterar a través de - en este caso - la altura de la pirámide Mario. Y así, una vez más, esto es sólo un recordatorio, si se inicia en cero para la variable, entonces usted querrá tener una diferente condiciones que si usted comenzó a la una. Así que esta tabla sólo tipo de muestra un recordatorio. Si desea repetir 10 veces, por ejemplo, entonces usted Puede iniciar la variable en cero. Y su condición puede ser inferior a 10. Así que amable de su parte muestra la matriz de eso. Bien. Así que hemos pasado por Mario. Hemos dicho acuerdo, bueno tenemos que comprobar para la entrada correcta, cero e inclusiva 23. Nos vamos a encontrar algún tipo de patrón, algún tipo de forma de expresar la n-ésima fila o la fila i-ésima. Y vamos a decidir, Vale, vamos a imprimir este muchos espacios, esto hashes muchos, línea nueva. Está bien. Así que tenemos que. Así que ahora podemos pasar a Greedy. Greedy es un programa donde un usuario le da una cantidad de efectivo que esencialmente usted como el cajero que volver. Pero usted quiere utilizar monedas tan poco como sea posible. Y aquí es donde un algoritmo codicioso llega, donde vamos a querer utilizar la mínima cantidad de monedas posible hacer esa cantidad de cambio. Bien. Así, un ejemplo de esto en su solución podría ser algo como esto. Ejecuta. / Codicioso. Se le solicitará que decir bien, bien cuánto cambio se debe? Ese valor se va a ser un valor en dólares. Así que va a ser un flotador. El programa calculará el monto mínimo de monedas requeridas para hacer, en este ejemplo, $ 0,32. Y así, el número mínimo es de cuatro. Así que antes de decidir qué hacer, vamos a clase de paseo a través del proceso que usted puede ir sobre. Así que si la entrada es de 32, entonces esencialmente que voy a utilizar la menor cantidad de monedas si uso como muchos monedas grandes como sea posible. ¿Cierto? Así que es mucho más fácil de usar como cuarto comparación con cinco monedas de cinco centavos. Así que vamos a decir, tiene que devolver $ 0,32. Bueno, ¿puedo usar una cuarta parte en esto? Sí, se puede. Y entonces se reduciría a $ 0,07. Vamos a ver si puedo usar otro trimestre de reembolso. Bueno, no. No puede caber una cuarta parte en eso. Así que voy a pasar a la moneda más grande siguiente. ¿Puedo utilizar una moneda de diez centavos? $ 0.07, no usted no puede utilizar una moneda de diez centavos que pagar $ 0,07. Así que decir que no. Mover a la siguiente, que es un níquel. ¿Se puede utilizar una moneda? Sí. Siete es mayor de $ 0,05, por lo que podemos utilizar una moneda. Y luego tenemos dos centavos sobre la izquierda. ¿Podemos usar un centavo? Sí se puede. ¿Podemos usar un centavo? Sí. ¿Podemos usar un centavo? No, porque ahora tenemos éxito pagado la parte posterior del usuario. Así que en total tiene cuatro monedas utilizadas. Así que pensando en ese proceso, cada momento decidir bien, ¿Cuál es la moneda más grande que podemos utilizar? Una vez que usamos, que tipo de mantener una nota mental de cuánto más dinero que necesitamos para devolver el usuario, así como el número de monedas que han estado utilizando. Bien. Así que de nuevo, el primer paso - al igual que Mario - es preguntar al usuario una cantidad monetaria. Y así, esta cantidad va a ser - que va a tener un valor decimal, porque vamos a pedirles dólares. Así que tipo de datos no va a ser un número entero. Pero va a ser un - sí, un flotador. Pero al igual que las manzanas, los flotadores pueden ser positivos o negativos. Así que cuando te registras para los valores, usted va a querer para asegurar que su flotador - la entrada del usuario - es no negativo. Bien. Podríamos tratar con flotadores en nuestro programa conjunto, representan cuartos de 0,25, un 0,1 dimes, et cetera. Pero me resulta mucho más fácil de tratar en apenas centavos puros. También - y vamos a hablar de esto un poco más tarde - en C, puntos flotantes tienen algo que se llama la imprecisión. Así que cuando usted entra en 0,12, por ejemplo, el ordenador almacena realmente como como 0.1111119 o algo por el estilo. Así que es mucho más fácil convertir a centavos. Entonces, ¿cómo convertir un valor en dólares a centavos? ALTAVOZ 5: Times por 100? ZAMYLA CHAN: Si. Si. Así que lo haríamos veces por 100. Pero una cosa difícil sobre los puntos flotantes es que hay es una cierta imprecisión. Así que vamos a ver un ejemplo de ello. Así que voy a abrir imprecision.c. Bien. Este es un programa muy simple. Se pide un flotador, y se imprime de nuevo. Un buen consejo en la terminal es que puede simplemente escribir claro y entonces usted tiene una pantalla clara. Y lo que no es necesario buscar en cualquier salida anterior o cualquier errores o bugs informes, algo así. Bien. Así que vamos a hacer imprecisión. Vamos a ejecutarlo. Así que haven't - en mi código, no se imprime ningún mensaje ni nada de eso. Por lo tanto, sólo tiene un cursor parpadeante. Así que sólo me espera a la entrada de un flotador. Así let's - un flotador aleatorio. Y se ve que se imprime de nuevo, pero tiene algo extra números que definitivamente no aceptó. Así que queremos asegurarnos de que eso no lo hace suceder en nuestro programa. Así que lo que queremos hacer es asegurarnos de que realmente tipo de redondeará al valor adecuado. ¿Cierto? Y así, por suerte, tenemos una función llamada ronda incluido en el aparato. Está en la biblioteca matemática. Si quieres saber cómo utilizar todo el año, entonces usted realmente utilizar el manual. Puede hacer clic en redondo hombre. Entonces aquí se plantea - puede ser un poco difícil de descifrar, pero con el tiempo usted conseguirá la caída de ella. En cierto modo le muestra lo que hace la función y algo más posibles usos de que. Así que cuando usted finalmente consigue una entrada correcta, válida a partir de la usuario, entonces usted quiere convertir a centavos. Asegúrese de redondear el valor para que evitar esta flotando imprecisión punto. Bien. Para ello hemos pedirá al usuario una cantidad monetaria. Ahora lo que quiero hacer es comprobar esencialmente, ¿verdad? Bien, así que puedo usar la moneda más grande posible? Si puede, entonces que lo utilice. Usted mantiene un registro de cuántas monedas que ha utilizado hasta el momento y también la cantidad decreciente. ¿Cierto? Y entonces usted va a comprobar. Una vez que haya agotado especie de cuartos de final, quiere ir a lo siguiente posible. Así clase qué tipo de estructura de bucle o lo que podríamos desea utilizar para comprobar continuamente si todavía podemos utilizar una cuarta parte, por ejemplo? ALTAVOZ 6: Mientras mayor valor de? ZAMYLA CHANDLER: Sí, perfecto. Exactamente. Así, mientras que el valor es mayor que. Así, mientras que el valor que tenemos que dar la espalda es aún más grande que una cuarta parte, mientras que todavía podemos utilizar una cuarta parte, utilizar trimestres. Lleve un registro de eso. Y luego seguir adelante. Perfecto. Bien. Oh, aquí acabo incluyó sólo algunos consejos sobre cómo imprimir valores fuera. Así que en su función printf, hemos sido por lo general sólo tratando con cadenas. Pero cuando se quiere imprimir un int o cualquier tipo de dígitos, usted tiene que escribir una clase de tipo de marcador de posición. Así que está representado por el porcentaje,% d para enteros. Usted escribe que, a continuación, después usted realmente - después de una coma - poner en valor lo que realmente ocurre allí. Derecha. Bien. Así que hemos decidido que queremos comprobar si - una forma de hacerlo sería la de comprobar continuamente si todavía podemos utilizar cuartos, y luego use los cuartos, mantenga seguir, y luego pasar a la siguiente gran valor. Ahora, otro tipo de forma elegante que usted puede hacer esto es utilizando el módulo operador. Así que ya tenemos el más, menos, multiplicar y dividir disponible para nosotros. Sin embargo, el operador de módulo es muy guay. Lo que hace es que en realidad le devuelve el resto de dividir dos números. Así que si usted recuerda en la división larga cuando lo haría, por ejemplo, hace 74 dividido por 3, lo escribiría, prórroga, restar, y luego, al final es el número en la parte inferior el resto. Bueno, ¿qué módulo es lo que realmente te da eso. Así módulo 3 74 le pondrías a 2. Del mismo modo, 10 modulo 2 te da 0 porque no hay ninguna resto al dividir 10 por 2. 6 modulo 5, 5 va bien en un 6 veces y luego que haya un sobrante. Entonces, si usted tiene 7 módulo 9, y 9 es mayor que 7. Por lo tanto, no puede ir ningún otro momento. Así que es lógico que el valor de retorno es de 7. Así que si usted piensa en modulo, cómo se le da el resto después de dividir algo, puedes tipo de ver cómo podría ser capaz de utilizarlo en Greedy, ¿verdad? Así que si usted combinar el tipo de módulo tal vez con la división operador, o algo así, entonces usted podría tener un lugar fresco tipo de forma mathy abordar el conjunto de problemas. Así que ahora que sabemos que hay un par de diferentes formas en que podemos hacer esto - hay sin duda un montón de diferentes maneras de escribir, incluso los bucles while. Así que he escrito algunas pseudocódigo aquí. Puede que no sea idéntica a la especie de esqueleto de su código que se escribe. Pero esencialmente, el proceso y la manera de pensar es justo como lo discutimos. Así que, primero, la primera línea está diciendo a obtener una determinada cantidad en dólares. Y luego hay implícito convertirlo en centavos. Entonces, mientras cuartas partes se puede utilizar, queremos aumentar la cuenta. Y luego queremos disminuir la cantidad, el valor que estamos volviendo atrás. Como se ve aquí, no es bastante C. Pero también he sangría cosas, puse mis condiciones dentro de paréntesis. Así que ese tipo de me consigue comenzado. Y más tarde, puedo mirar para arriba la sintaxis. A menudo, la parte más difícil realmente de un problema es entender qué es exactamente lo que necesita hacer. Así que una vez que se escriba eso, entonces es mucho más fácil entonces se traducen en pseudocódigo. Y después de pseudocódigo, la sintaxis viene bastante fácil. Vemos, pues, mientras trimestres, se puede utilizar, aumentar el conteo, disminuir la cantidad. Si bien se puede utilizar monedas de diez centavos, entonces usted lo realice así sucesivamente y así sucesivamente, hasta que haya agotado todas sus monedas. De imprimir el número de monedas utilizado, que será el cantidad mínima para hacer que el usuario introduce el valor. Y allí tiene su algoritmo codicioso. Y luego, una vez que haya terminado, usted también ha terminado conjunto de procesadores 0. ¿Alguien tiene alguna pregunta acerca de algo? Está bien. Bueno, voy a quedarme un poco después si tiene cualquier pregunta. Esto fue tutorial 1. Gracias por venir.