[Música tocando] JASON Hirschhorn: OK, todo o mundo. Benvido á sección. Este é CS50, a nosa propia primeira sección super. Como todos saben, a próxima semana seccións regulares vai comezar, pero esta semana estamos todos xuntos. Hai min mesmo. O meu nome é Jason. Eu son un profesor de Ciencia da Computación. Temos Andi, que é a cabeza de TA CS50. E SCAZ, Profesor Brian Scassellati, el é un profesor en Ciencia da Computación. Somos os xefes CS50 en Yale. Sempre pode enviar correo-e nos heads@cs50.yale.edu. Estaremos á conferencias. Estaremos no horario de oficina. Se sempre hai algo que podemos facer por ti, calquera cousa que precisa, Sinto-se libre para chegar ata nós. Entón, o que imos facer hoxe? Ou antes diso, o que é chegando esta semana? Así, o horario de oficina son luns, martes, Mércores e xoves, de 8: 00-11: 00. Hai unha programación na páxina web. Seccións, como mencionei, empezan a próxima semana. E vai descubrir que esta semana cronometrar súa sección é, que día é hoxe, e quen é o seu TA é. Problemas 1 é debido en xoves mediodía, venres ao mediodía cun día de atraso. Si, ten nove días de atraso. E hai nove conxuntos de problemas. E só pode usar un día de atraso por conxunto problema. Si, efectivamente, todo problema conxuntos son debidas venres ao mediodía. Iso é todo. Todo o que os detalles están no plan de estudos. Toda venres, temos xantar. Nós gústanos de facer esta grande Claro sentir un pouco menor. Entón é así a benvida a RSVP. Xantar gratis con compañeiro compañeiros e funcionarios. cs50.yale.edu/rsvp. Todas estas cousas que I ter na pantalla, e máis, pode atopar ou cs50.yale.edu cs50.harvard.edu, se vai para Harvard e están a asistir esta liña. Tamén sobre estes sitios, alí unha tonelada de recursos para ti. Cada charla non só ten o video da charla, pero tamén observa. Alguén vai ver charla e tomar notas para ti. Entón podes só pagar atención durante as clases, ou pode empregar as súas notas / nosa notas para complementar as súas propias notas. Existen láminas en liña. A fonte code-- todo David pasa por encima dunha conferencia, ou SCAZ pasa por riba charla, que código fonte está dispoñible en liña tamén, como como eu, mencionado vídeos. Seccións, do mesmo xeito, todo será filmado. Todas estas láminas están dispoñibles. Todo iso vai código estar dispoñible para ti. Hai curtos na web onde Membros do equipo CS50 pasar de cinco a 10 minutos pasando por temas para ti. Algunhas das persoas que xa atopar en conxuntos de problemas. Horario de oficina, como xa referín, luns a xoves de 8:00 a 11:00. Estudo CS50 é un recurso fantástico. Existen problemas de práctica, láminas de mostra, erros coñecidos que os alumnos quere executar para, para practicamente todos os nós tema cubrirá neste curso. E, finalmente, neste foto polo menos, Reference50 que lle dá información en todas as funcións C podería sempre posiblemente esperar de usar e moitos, moitos máis. Unha vez máis, que dot dot dot com a parte inferior da pantalla é indicar que hai mesmo máis recursos sobre estes dous sitios: cs50.yale.edu, cs50.harvard.edu. Entón, o que imos facer hoxe? Ben, primeiro eu vou dar- ollar os recursos. Xa o fixo. Olle para nós. Agora, imos pasar por riba tipos de datos e operadores en C. Entón Andi vai vir aquí e pasar por riba de bibliotecas en C, printf (), unha función coa que xa está familiarizado ou vai facer rapidamente moi familiarizado. E tamén vai pasar por riba condicionais e loops. E, a continuación, finalmente, SCAZ vai pasar por riba do ID CS50. Se aínda non dicir xa no Conxunto de problemas 1, así como a forma de usar o comandos da terminal e útiles e, a continuación, darlle algunhas demos e codificación práctica no ID CS50. Antes de ir a esta contido deste lado, alguén ten algunha preguntas ata agora? Gran. Aceptar. Cambio de velocidades. [Cambio de velocidades] Isto foi me desprazando engrenaxes nun coche manual. Así, os tipos de datos en C, non pode só ter unha variable x e que sexa na liña 10, un enteiro, quizais o número 1, na liña 20, un número decimal 10,5, e liñas, a continuación, unha parella despois, unha corda, eu amo CS50. En C, só poden ser variables unha cousa, e só unha cousa. E entón tes que darlles tipo. E neste foro, nós Ten unha lista de tipos. Existen caracteres, que soporte para caracteres. Entón esta é unha letra A, B, C, D. Isto tamén pode ser un espazo, ou que tamén se pode un carácter de nova liña. Existen números enteiros, que son só Números de números, todo ou enteiros rather-- pero sen decimais. Para decimais, temos números de punto flotante. Números de punto flotante son números con decimais. Despois, hai longos, que son enteiros esencialmente máis longas. Vai notar que un longo é 8 mentres un int é de 4. Eu vou chegar a iso nun segundo. Porque longs pode almacenar ata máis enteiros que un int pode almacenar. Dobre é un longo float. E, finalmente, temos corda, que é un tipo que probablemente xa usou antes. Se incluír hashtag # IncludeCS50.h no seu ficheiro de orixe, entón podes usar un tipo de cadea. Non é realmente construído en C. Hai un par de outros tipos tamén. Pero estes son os principais queridos con que vai empregar e atopar. C como, unha vez máis mencionei, cada variable --- lo só pode haber un tipo e só un tipo. Porque C é unha estaticamente linguaxe introducida, en oposición ás linguas tipagem dinámica onde se crear unha variable pode cambiar o que está almacenado Lo como ir no seu programa. Por aquí á dereita lado, eu teño os diferentes tamaños un destes tipos de datos en bytes. Así, un personaxe é un byte. Isto é 8 bits. E isto significa, porque 8 bocados hai oito 0s e 1s. Vimos estes demos en primeiro semana que as lámpadas binarios. Con 8 bits ou 1 byte, podemos representan números de 0 a 255. Dereita. Todos os 8 bits son 0 que é 0. O primeiro bit é 1, que é o número un, e así por diante, todo o camiño ata 255. E é por iso que a caracteres que poden ser teñen esencialmente ata 255 deles, pero iso é moito para cubrir todos os personaxes, necesitamos empregar. Para enteiros, pode que 0 e entón tes 2 á 32 menos 1. Estes son cantas opcións ten para enteiros. Por un longo, ten 0 a 2 a 64 menos 1. Entón tes moitos, moitos, máis opcións para longs. Cordas, que é un punto de interrogación porque iso é un cliffhanger para máis tarde. Si. Podería dicir que todo o mundo no bordo da sede, como o que é que o punto de interrogación? É un cliffhanger. Imos, finalmente, cubrir o tamaño cordas e falar máis sobre cadeas. Porque cadea é realmente unha das Rodas pequenas poñemos nesta curso no inicio e despois despegar despois no, porque cadeas en C son realmente punteiros a arrays de caracteres. Pero, de novo, iso é unha Cliffhanger para máis tarde. Antes de pasar todas as preguntas, comentarios, os problemas con este slide? Aceptar. Debo ser un explicador fantástico. Ademais, cando está programando, está indo a usar estes operadores. Sinais realmente simple que poden facer simple operacións, co que probablemente está xa moi familiar. Por exemplo, na parte dereita banda, vemos engadir. Para engadir, que acaba de facer un sinal Plus. E así pode que dúas variables x e y. Podes facer x + y no seu código. Que quere dicir que a-- ten o número 7 e 3, quere almacenar que nunha variable chamada suma. Podes facer int para o tipo, o espazo suma, o nome da variable, = 7 + 3; O que sería esa tenda en suma? Anyone? Se eu tivese que sum = 7 + 3. O que sería almacenado en suma? Pode só grite. Audiencia: 10. JASON Hirschhorn: 10! Isto é exactamente correcto. E na suma = 7-3, Eu só uso ese sinal trazo. O que vai ser almacenado? Audiencia: 4. JASON Hirschhorn: 4. Suma é probablemente o nome incorrecto esa variable, pero 4 sería almacenado. Para multiplicar en C, use o pequeno Carácter Star, non usar un x. Para dividir, usar un Forward Non cortar o símbolo de división. E módulo, use o símbolo por cento. Entón, digamos que quero ver int z = 7% 3, o que sería almacenado Z? Entón, iso é, esencialmente, pregunta o que é que modulo facer? Alguén sabe o que modulo fai? Si. y 4. COLUMNA 1: É o resto. Jason Hirschhorn: É o resto cando dividir. Así 7 divídese por 3 2 1 restante. Entón 1 sería almacenado. Fixo a resta, pero é así que funciona. Iso é o que o operador módulo fai. É preciso un número divídese o por outro número e devolve para ti o restante. Entón, de novo, 7% 3 dálle 1, porque 7 divídese por 3 2 resto 1, e devolve o resto. E canto imos voltar a subir un paso para que sinal de división. Se eu fixen 7 / dividido por 3 fai Alguén sabe o que que quere volver? COLUMNA 2: 2. JASON Hirschhorn: Por que dous e non 2.333? COLUMNA 2: Eu creo que corta despois o número enteiro. JASON Hirschhorn: Entón, que é correcto. En C, se fai a división de dous enteiros 7 dividido por 3, recibe a resposta que neste caso 2,3333 para sempre e comprobar que punto decimal e corta todo fora despois do decimal e el só retorna 2. Entón, se eu fixen 8 dividido por tres. Que en realidade, sabemos que para volver 2.666, pero corta todo fóra decimal, trunca-lo todo, e só regresa a vostedes dous. Entón 6 dividido por 3, 7 dividido por 3, 8 dividida por 3, están todos indo a voltar a vostede 2. Alguén sabe ou ten un palpite, de como eu podería realmente comezar a resposta completa se eu queira que decimal? Si. Vai adiante. COLUMNA 3: Usar unha boia? JASON Hirschhorn: O que quere dicir? COLUMNA 3: Porque dixo que o flotador, para os números [inaudível] JASON Hirschhorn: Correcto. Entón, iso é correcto. 7 é un número enteiro. Pero se eu quería transformar esa nun número de punto flotante, Eu tería que gardar esta como 7.0 porque o ordenador é realmente stupid-- vimos que coa example-- PB e J ela só vai facer exactamente o que diga a el. Entón, se escribir 7, el creo que é un enteiro. Se escribir 7.0, aínda que Sabe esas cousas son equivalentes, que trata como un número de punto flotante. Entón, se fixo 7,0 dividido por 3, ou dividido por 3,0, el diría: OK, agora estamos lidando con coches alegóricos. Vou volver a vostede 2.333333 para sempre. Pero non é realmente para sempre, porque como tamén vimos na charla, eses números de punto flotante non son exactamente preciso. Entón, se quere que decimal, ou unha parte do que decimal, entón ten que use-- un deles ten que ser un número de coma flotante eo ordenador debe entender que este é un punto flotante é lidando con, e non un enteiro. Calquera preguntas sobre esa táboa en á dereita, ata agora? Ou o seu lado esquerdo, a súa á esquerda, o seu lado esquerdo. Si. COLUMNA 4: Correcto. Para só como un estándar enteiros, faría write-- que ten que escribir flotar? JASON Hirschhorn: Si lo. Ben, se quere crear unha variable que é un flotador, precisa dicir flotador z é igual a algo. COLUMNA 4: Aceptar. JASON Hirschhorn: Pero se eu quería facer 7 dividido por 3 e obter ese decimal, Eu faría flotar z = 7,0 / 3,0; e que me daría o punto flotante número. COLUMNA 4: Aceptar. JASON Hirschhorn: Se eu fixen algo así como int z = 7 / por 3, que me daría un enteiro, porque eses son todos os enteiros. Isto ten sentido? COLUMNA 4: Si. JASON Hirschhorn: Aceptar. Gran. Calquera outras preguntas sobre esa mesa? Realmente? Estou tan animado. Aceptar. Por iso, algunhas outras cousas que vai usar, moitas veces en condicións ou loops, son estes tipos de operators-- este tipo de expresións booleanas. E como aprendemos, == é o que utilizar para comprobar que dúas cousas son iguais. Entón, aquí estou comprobando se x == y, imos novo supoñer que x é 7 e y é 3. Entón, se eu escribín 7 == 3, o que tería que volver para min? Isto é certo ou falso? Audiencia: False. JASON Hirschhorn: Aceptar. Eu sinto que todo o mundo pode recibir un regalo. Entón todo o mundo, o que tería que volver? Audiencia: False. JASON Hirschhorn: False. Gran. 7 non é igual a 3. Entón 7 == 3 retornaría false. Ten un sinal non é igual, polo que, se eu Comprobarase 7! = 3, o que tería que volver? Audiencia: True. JASON Hirschhorn: True. Excelente. Alguén foi moi enfático en a parte de atrás e gozar iso. Entón tes menos de operador, inferior ou igual a operadora, maior operador, maior que ou igual a do operador. Entón, unha comprobación de sanidade. Se eu tivese 7 é maior que ou igual a 3. Que tería que volver? Audiencia: True. JASON Hirschhorn: True. Si. Esa sala de volta, verso do cuarto, fantástico. Pode combina-las expresións, se lle gusta, así, cun Correo lóxico que é && Ou un ou lóxico que é || ||. E entón agora pode probar dous together-- cousas é divertido? Por que iso é divertido? Entón, se eu quixese, podo dicir é 7 máis de 3 e 2 é inferior a 4? Ben, se 7 é maior de 3, iso é certo. 2 sexa inferior a 4, iso é certo. Entón, esa cousa toda vai voltar true. Se eu proba 7 é maior que 3 e- Eu só estou pegando números aleatorios aqui-- 4 sexa inferior a 2, ben, iso é falso. Así, o certo eo falso facer falsas. E pode seguir adiante e combinar como moitas condicións, xunto como lle gustaría. Alguén ten algunha dúbida, comentarios, preocupacións tan lonxe? E vexo que algúns de vós facer fotos de min na pantalla, que eu aprecio. Afortunadamente, non está snapchat. Esperanza, é para as súas notas. Pero todos estes van para estar dispoñible en liña. Entón non ten que facer fotos disto. Como mencionei, todo estará dispoñible en liña para ti. Aceptar. Estou a piques de comezar fóra do escenario, o mesmo acontece con calquera quero dicir nada antes de que isto ocorre? Preguntas? [Interpoñendo voces] JASON Hirschhorn: Oh, pare. Vostedes son moi agradable. Aceptar. Vou marcar para fóra. Imos. ANDI Pengo: Nós imos facer un cambio Mic estraño agora. JASON Hirschhorn: Eu son vai sacar iso. ANDI Pengo: Grazas polo apoio, persoal. Podes escoitarme? Isto é bo? Perfecto. Fermoso. Déixeme só que dobrar en. Aceptar. Entón, eu estou a piques de facer como un xigante información botan sobre vós agora. E non se preocupe se vostede é calquera non seguir cada pequena liña que Estou a piques de amosar-lle. Como Jason dixo, todo é totalmente en liña. Só imos tratar introducir todos os conceptos cuberta nalgunhas destas láminas. Entón, só tes que seguir xunto. Non te preocupes se non entende todo; Con todo, en calquera punto Se sente perdido, aumentar o seu man, imos parar, non se preocupe. Legal. Entón eu creo que algo que David ten xa mencionado no tipo de charla e Jason tipo de alusión para hoxe é que é unha biblioteca. Así, na programación, temos isto chamadas bibliotecas. Sempre que, esencialmente, todo están é só un conxunto de funcións, que é esencialmente só código que é xa foi escrito por alguén que todos podemos utilizar dentro dos nosos programas. Entón como é que un normal, traballo biblioteca, non? Entra pola porta da biblioteca. Ten todas esas libros que podes tirar para fóra e pode acceder a información dentro destes libros. Mesmo na programación. Ten unha biblioteca que xa ten foron escritos por outras persoas. E o xeito que pode, como programador ou un estudante, pode ter acceso a esa biblioteca é a través da hashtag # include. Por exemplo, en C nós ten a tres C-- comunmente usado tres C estándar libraries-- a biblioteca de entrada / saída, a biblioteca de corda, ea biblioteca matemática. Entón, dentro da súa primeira problema parella define, estes serán os tres que está a usar principalmente. Así como David xa explicou en conferencia, o estándar E / biblioteca, ou o biblioteca estándar de entrada / saída fai exactamente iso. Permite que, no seu código, a entrada nada do usuario e de saída que para a pantalla, esencialmente imprimir lo para a pantalla. E así todo o tempo que usar calquera funcións, por exemplo, a función printf (), que imos pasar por riba o seguinte foto, asegúrese de incluír o estándar E / biblioteca, ou non vai poder usar a función printf (). Porque, como o programador en realidade nunca escribiu esa función, só está a usar alguén código de outra persoa dentro do seu propio código. Isto ten sentido todo o mundo? Legal. E, entón, esencialmente sujem a biblioteca eo math.h string.h biblioteca, .h só significa biblioteca, outras bibliotecas que finalmente estar usando dentro do seu código. Con todo, para fins desta biblioteca, que tamén have-- deste class-- temos tamén o que se chama a biblioteca CS50, cs50.h, onde nós, para súa lectura crearon moitas funcións importantes e útiles. Así que como un programador pode incorporarse carona off o que nós xa escribimos, para que deste dispoñible función para ti para o seu uso. Eu estarei cubrindo un par de as funcións de uso xeral, pero sabemos que estas son todos googleable liña. Sinto-se libre, puxe para arriba a biblioteca e CS50 entón tes todas as funcións alí. Si. COLUMNA 5: Entón, se non fose utilizando o software que é proporcionada a nós por a clase, que fai significa que teriamos que atopar e descargar arquivar este cabeceira nós mesmos e dizer- o ordenador onde está? ANDI Pengo: Excelente pregunta. Exactamente. Entón, é como se non está fisicamente presente nunha biblioteca, non hai ningunha forma de ti realmente ir e acceder a ela. Así, o mesmo con programación en C, que ten que ter seguro que está a usar o noso aparello porque a biblioteca é xa foi incorporado nel. E entón cando hashtag #include, a biblioteca de alí. Si. Boa pregunta. Todo o mundo é bo? Legal. Todo ben. Entón, nós estamos indo bater, Esencialmente, o que é que a primeira función nós como programadores son vai estar usando dentro do noso código. Esta é a chamada función printf (). Así, a función printf (), como eu xa dixen no último foto, está incluído no estándar I / O, Standard input / output, biblioteca. Polo tanto, asegúrese de que o que está using-- Oh, déixeme coller o láser pointer-- sempre que está a usar a función printf (), ten que incluír o estándar E / biblioteca ou ben, cando compilar, vai obter un erro porque o ordenador será como, Oh, eu non sei onde printf () é, non está me dicindo onde printf () é. Ben printf () está incluído no E / S estándar, entón cando usa printf (), asegúrese de que ten liña anterior seu código. Así, por exemplo, printf () aquí é unha función. Todo o que fai é imprimir algo dentro dos parénteses para o usuario. Será que alguén quere tomar unha facada en que esta liña de código á dereita aquí vai imprimir? Así, a resposta está na pantalla. Anyone? VERDI: A parte inferior. ANDI Pengo: Verdi, por que non vaia adiante e dicir toda a declaración? Verdi: Ola, meu nome é Andi, e eu teño 20 anos de idade. ANDI Pengo: Ah, encantador. Así, nesta liña que imos imprimir, Ola, meu nome é Andi, e eu teño 20 anos de idade, que é de feito unha afirmación verdadeira. Syntax. Entón par de cuestións sintácticas que vós queredes estar seguro de que vostede sabe. Presupostos. Comiñas dobres contar a ordenador que todo dentro será impresa. Todo dentro de lata ser exactamente como escriba-lo, excepto para vulgarmente ao final, imos querer incluír un hash-- oh sorry-- un trazo n. Así, un trazo n. Alguén quere dar un palpite o que fai que o noso código? Si. COLUMNA 6 Pon-lo nunha nova liña. ANDI Pengo: Exactamente. Entón, todo isto fai é permitir que pase o que pase despois diso, tras esta declaración, a ser impreso para unha nova liña. De xeito que cando está escribindo o seu código que non ten cousas aleatoriamente recrecidos despois que non quere. Isto todo queda ordenadamente impresa unha liña e, despois, comezar na liña seguinte. Alguén se lembra o que iso punto e coma fai cando estamos codificación? Si. COLUMNA 7: Declaración. ANDI Pengo: Sentímolo? COLUMNA 7: Será que acabar coa declaración? ANDI Pengo: Si. Así, en C, ou calquera tipo de programación linguaxe, o punto e coma indica o final dunha liña de programación. Así, por exemplo, en inglés usan período quere dicir, oh que é o fin dunha frase. Na programación, o mesmo, temos un punto e coma a indicar o final dunha liña. Moitas veces, cando está comezando a programar, notarás que esqueza facer un punto e coma e, a continuación, tentar realizar o seu O código e non funciona. E é como, Ah, eu non sei sei por que, el debería estar traballando. As posibilidades son que probablemente esqueceu dun punto e coma ou un soporte ou algo en algún lugar. Entón, iso é importante para lembrar. Legal. Todo ben, concerto de mans, como moitas persoas aquí teñen sempre tomado AP Ciencia da Computación ou programado en Java antes, nunca? Aceptar. Encantador. Isto non será aplicable a continuación, pero en Java, vostede ten algo chamado System.out.println que non existe en C. Así, en C, sempre que quere engadir variables en calquera cousa que quere para imprimir, hai unha sintaxe específica que imos empregar. Iso é chamado a placeholding-- esencialmente sumarmos espazos reservados no lugar do enteiro ou a variable que desexa imprimir. Entón, como podedes ver, nós incluímos un novo cabeceira biblioteca de arquivos aquí. A biblioteca de CS50. E contido dentro desa biblioteca CS50 é unha función común que imos usar no noso curso chamado GetInt (). Alguén quere tomar unha facada en o que GetInt () pode posiblemente estar facendo. Audiencia: [inaudível] ANDI Pengo: Sentímolo. Non se puido escoitalo. Maddie, ninguén. Maddie: Oh, el solicitará vostede para un número enteiro. ANDI Pengo: Exactamente. Entón esta función, outra función que xa está foi escrito por alguén máis que podemos invocar agora. Todo o que é pedir a vostede, o usuario, a entrada que quere que o código está en execución e almacena whatever-- neste caso estamos GetInt () - ing, entón iso significa que somos a obtención dun número enteiro. E nós estamos indo para almacenar que noutro enteiro que acabamos fixo chamada idade. Isto ten sentido para todos? Legal. Polo tanto, agora que temos gardado este número enteiro, que temos solicitado ao usuario, nesta variable, temos creado do tipo int chamado idade, podemos ir adiante e lugar esa función no noso printf (). Así, a sintaxe xeralmente para printf () é que onde queira que no seu físico real liña que pretende incluír ese enteiro, fai ese símbolo alí mesmo, o símbolo por cento, coa tipo de variable que quere. Polo tanto, neste caso, a idade é un número enteiro. Entón está indo a incluír % I porque é un número enteiro. E, despois de que o seu declaración, está indo facer coma eo nome da variable. Entón aquí, nós estamos indo a imprimir fóra, Ola, meu nome é Andi, e eu son anos de idade en branco. Hashta-- ou, sorry--, idade con calquera entrada I. Entón, se eu fose para entrada 20 para o meu GetInt () aquí, que ía imprimir exactamente o mesmo. Pero, se eu quería algo entrada outra cousa, como quizais 40 ou 45, a continuación, que ía ver que reflectía de conformidade, o código. Polo tanto, este é un exemplo algo no que el imprime e mira para vostede como se fose o mesmo, pero debaixo da capa de o ordenador hai realmente cousas moi diferentes suceder. Legal. Todo ben. Entón, o que si queremos múltiples variables? Moi fácil. Mesmo. Temos tamén unha nova función aquí chamado GetString (), Tamén incluídos dentro da biblioteca CS50, que todo o que fai é pedir ao usuario para unha secuencia de caracteres, que é só un conxunto de caracteres, así como unha sentenza ou como un nome. Polo tanto, neste caso, teriamos dous espazos reservados% s para cordas e% i por enteiro. E nós estamos indo a seguir que por as dúas variables que quere incluir na orde que aparecen na sentenza. Así, por exemplo, o meu nome é en branco, quero un nome alí, entón eu vou ter o nome en primeiro lugar. E, a continuación, máis tarde, quero idade, quere ter segunda idade. E así se eu quixese entrada, Ola, Andi do meu nome, e eu teño 20 anos de idade. Se eu introducido Andi e 20, o exactamente o mesmo iría imprimir; con todo, agora temos dous almacenados variables de nome, así como int. Si. COLUMNA 8: Sería capaz de realizar se alternou nome e idade a finais do que? ANDI Pengo: Si. Isto é realmente boa pregunta. Entón, longa historia curta, non. Porque o nome e age-- tipo de variable é o nome? COLUMNA 8: cadea. ANDI Pengo: E o que tipo de variable é a idade? COLUMNA 8: Enteiros. ANDI Pengo: Polo tanto, temos aquí un marcador de posición para cordas e enteiro, non? Entón, se fose para cambiar estes, o ordenador non vai saber. Vai buscar por unha corda, e se tentar darlle un int, que vai ser como esperar Estou confuso, ten me dixo que eu debería ser asignación de memoria para un int. E aquí, cando espera un enteiro e darlle un nome e unha corda no seu lugar, el tamén vai ser moi confuso, el non se levará a cabo precisamente da forma que necesites. Entón, aquí, nomeamento e sintaxe é moi importante para a execución de código. Todo o mundo é bo? Si. Maddie. Maddie: Aquí, sei que nós miramos en exemplos en clase, onde preguntan cal é a súa idade, o que é o seu nome. Aquí, iso sería el doesn't-- se tivésemos de realizar ese código, que non ía pedir isto? Pero que tería só dous números de entrada e, a continuación, el sería executado como este? ANDI Pengo: Si, exactamente. Entón, se quería para que pantalla, insira a súa idade, pode simplemente engadir unha función printf () que di: Introduza a súa idade, enriba dela. Esta é unha boa pregunta. Si. COLUMNA 9: Entón, xa sería incluído no GetInt () [inaudível]. ANDI Pengo: Non, en realidade non é. Entón, todo isto fai é só solicita unha pantalla en branco para que o usuario introduza algo. Se quere, se quere imprimir algo que informa ao usuario como, por favor me dea a súa idade, entón tería que printf () que a si mesmo. Porque todo o mundo usa esa función para cousas distintas, pode estar almacenando idade, pode estar almacenando enderezo, podería almacenar números de teléfono. E por iso é realmente ata usos individuais dos seus homes para o que quere dicir. Si. Altofalante 10: Entón, só para aclarar, onde introduza o nome ea idade de xeito que aparece no lugar de% s? ANDI Pengo: Como no usuario? Altofalante 10: Si, como como fago facer ele-- onde podo poñer Andi, e onde podo poñer 20? ANDI Pengo: Si. Entón, se fose para realmente realizar este código, Non estou realmente correndo o código, este é só aquí agora. Se eu fose para executar o código, eu o faría compilar o código, facer o ficheiro, executar o código, e entón non habería só dous espazos para que eu introducir-lo. Si. Vostedes van ver cando xoga arredor co código vostede mesmo. Todo ben que estamos indo a ir á seguinte sección que estaremos cubrindo hoxe. Imos repasar o que instrucións condicionais son. Entón, se vostedes lembran e lembrar da charla, instrucións condicionais, todos eles son son un conxunto de instrucións para o ordenador nas que se unha determinada condición é certa, executar o código dentro desa condición. Así, en Scratch-- esencialmente o gran tema a partir de hoxe é que vostedes teñen xa todo visto a lóxica por tras de todo que estamos cubrindo. E todo o que estamos facendo é traducindo algo que era moi intuitiva en Cero, e disco duro codificación lo na sintaxe usaremos para a clase que é C. Entón, loxicamente, todo isto foi bloque é aquel anaco de código seguro alí. Si. Aceptar. Tamén entrar nun if ... else declaración, que é só unha capa adicional de complexidade para a instrución if onde o ordenador ten unha mirada a este e ve, se esta condición sexa verdadeira, facer todo o que está dentro destes dous soportes, else-- así como o tipo de patrón se el non atende o condition-- facelo. É como unha bifurcación na estrada. Se está chovendo alí fóra, eu coloque nunha capa de choiva, que calquera outra cousa outra cousa que eu non poñer en unha capa de choiva. Será que a lóxica ten sentido para todos? Legal. Todo ben. Así como un exemplo duro de este que veriamos en C é se eu quería crear un variables chamados horas lección de casa. E se é menos horas de casa de cinco anos, digo A vida é grande. É marabilloso. Con todo, din A loita é real-- que é o que todos o luns tarde ata Science Hill están probablemente facendo certo agora-- Audiencia: [rindo] ANDI Pengo: Eles xeito que sería, grazas por iso. O xeito que sería codificar iso en C é se-- imos supor xa temos unha variable de tipo int chamado horas de casa aquí. As horas de traballos de casa está a menos de cinco printf (), A vida é grande. Teña en conta que de manter / n porque quere unha nova liña despois. Impresión Else, A loita é real. Será que todo o mundo entender como I trasladada dende bloque para este bloque de código? Legal. Todo ben. Entón, agora imos dar un ollo a varias instrucións If completamente. Entón imos supor que o propósito deste programa foi que pide ao usuario a un grao. Nós aviso usando GetInt () para un grao, e un valor de entrada, e quere amosar que tipo de grao que teñen. Entón, se eu fose para proxectar un programa, eu significa normalmente en todos os nosos ollos, 90-100 é un A, é un 80-90 B, e así por diante e así por diante. O que está mal con este peza de código que non é facendo o que quero que faga. Si. Altofalante 11: Teñen límites máis baixos, pero eles non teñen límites superiores. ANDI Pengo: Exactamente. Será que todo o mundo escoitar o que dixo? Non vai ser superior límites, pero non hai límites inferiores. Sentímolo, outra forma arredor, límites máis baixos, non hai límites superiores. Así é que quere tomar unha facada en dicir o que ía ser impreso neste pantalla, se eu fose para executar este código. Altofalante 11: un erro? ANDI Pengo: un erro? Gran suposición, non moi ben. Alguén ten outra facada? Si, Aaron. AARON: Se pór en algo maior que 90, ía amosar todas as notas que ten. Ía amosar que ten unha A, ten un B, ten un C. ANDI Pengo: Si. Isto é exactamente correcto. Entón, iso sería marabilloso. Con todo, son mutuamente exclusivo, eu creo. Se eu fose para executar este anaco de código. E entón imos só dicir, I introducido o grao de 95. Entón 95 está almacenado na o int chamado grao. E así C é unha linguaxe que sobe arriba abaixo, polo que vai para sempre correr ata a parte inferior. Entón vai vir aquí, ler se grao é maior que ou igual a 90, printf (), ten un A. Gran, eu ter un 95, que é maior que 90. Vai imprimir, Eu teño un A. Vai para dar un ollo neste caso vai dicir, a cavidade 95 é tamén maior que 80, vai imprimir tamén ten un got unha marca de exclamación B, e así por diante e así por diante. Así como todos podemos ver, este é un erro común que pode ocorrer cando estamos escribir código para mirar para fóra. Calquera persoa, calquera dúbida sobre por que isto estaba pasando? Gran. Aceptar. Entón, como podemos solucionar isto, é, obviamente, a seguinte pregunta lóxica. Ben, temos estes bonito cousas chamadas se else if máis se else. Así pode ver, se quería para cambiar este problema, quería facer cada un dos condicións mutuamente exclusivas, desexa engadir outra cousa ... se comunicado. E estes course-- de pensar neles como escaleiras, ou como chanzos na ladder-- pode engadir como moitos deles, como tanto para tantas condicións como quere. Entón, aquí, se eu introducido grao sendo 95. Se a nota é maior que 95, printf (), eu teño un A. Grande. Vai ver unha cousa ... se e vai saber, Oh non, Eu xa executou a primeira persoa. Eu sabe-- ou o primeiro se-- sei que Non teño que mirar para calquera destes porque un deles xa foi feito. Por iso, vai a funcionar dende arriba cara abaixo. Así que o primeiro é certa, entón vai saltar sobre todo o demais dos máis ... IFS. Isto ten sentido? Así, deste xeito ten diferentes niveis de verificación e logo que un deles é falso, o resto son tamén, eles non van mesmo comprobar. Legal. Todo ben. Polo tanto, este é un exemplo dunha diferente tipo de instrución condicional vemos con menos frecuencia, pero imos velos e usalos. E son moitas veces máis eficiente para determinados casos. Entón temos o que se chama unha instrución switch. Polo tanto, antes de nós Cubrimos o que é outra cousa declaración, un else if .... Aquí, temos o que son chamado declaracións switch. Así, cando usamos chave declaracións é a clave? Así, nunha instrución switch, vostede normalmente, tipicamente, en realidade poden só enteiros de entrada para o seu variable que está comprobando. Entón, se eu quería comprobar a ver Un determinado number-- por exemplo unha nota, se eu teño un 90. Quero-o para ver se isto é un A, B, ou C. Eu podería ter un caso aquí. Con todo, o caso ten para ser máis constante. Polo tanto, neste sentido, o interruptor declaración poderá vaia á igualdade de dous números. Non parece para nada. Entón, iso é algo a ser moi coidado de cando está a usar iso. Entón, aquí, se eu quería comprobar a ver a miña nota de 90 é igual a 90 ou 80 ou 70 ou 60, e logo imprimir o grao correspondente, Eu sería capaz de escribir que nunha declaración switch. Entón vai vir aquí, comprobación é este número enteiro igual a este constante? Se non, que vai saltar. É igual a constante dous, e así por diante e así por diante, ata acadar o nivel, se ningún deles son iguais. Así que un deles é establecido para ser igual, vai facelo liña de código e descanso. O que significa que vai bater ese correr, romper, e ignorar completamente para a parte inferior do código. Entón, nese sentido o tipo de funcións como un if else if else if. Entón aquí está o formigón exemplo para vós. Entón imos supor que eu quería crear unha variable chamada ano fundada. E quero pedir ao usuario para introducir o ano en que a escola foi fundada. Entón, podo crear unha instrución switch aquí. E imos só dicir, eu input 1636. Este código aquí vai ver chave ano, fundou o que equivale a 1.636. Vai ver o caso 1636, oh aqueles son iguais, printf () non caso de que sexa naquela escola ao norte? Porque supoñer que non facer aquí se van a Harvard, romper e saltar para o final. Se eu fose a entrada de 1701, que Supoño que todos de entrada, sería ignorar este caso, chegar ata dous caso que é 1701, e imprimir Welcome to Yale! Romper, saltar para o final. Senón probablemente está a tomar este curso liña que case-- impresionante benvido para Yale-- está indo a ir a impresión estándar, Ola Internet! E romper. Si. Altofalante 12: Pódese usar máis en vez de patrón alí? ANDI Pengo: Non, porque o forma que esta función enteira interruptor está construído, a sintaxe vostede Debe usar é case default. É como se a persoa que, este é un case default. Si. Altofalante 13: Ti quizais xa dixo iso, pero pode ter máis de dous casos? ANDI Pengo: Si, podería ten o maior número de casos, como quere. Pense nisso como só como engadindo a infinitamente. Altofalante 14: Se conmutada 1701 con 1636, realmente non fai un dereito diferenza? El só vai estar comprobando para iso. ANDI Pengo: Isto é un pregunta moi boa. E nós imos tocar enriba iso máis tarde, pero só sei que é a clave declaración é infinitely-- é máis eficiente que a que e else if porque opera utilizando un tipo de función que permite que, para, esencialmente, a só ir directamente ao caso ten que ser no. Si. Altofalante 14: Cool. Grazas. ANDI Pengo: Si Altofalante 14: E non podía facer como casos e maior que. ANDI Pengo: Non. Entón, iso é o que está limitando sobre a instrución switch é que ten ter Constantes só, só números enteiros. Si. Aceptar. Entón, iso é algo que caras van atopar menos frecuencia de, pero eu só quería introducir-lo no caso. Temos aquí o que é chamado un operador ternário. Onde esencialmente, é só como un if compilados nunha liña. Aquí, eu vou á seguinte liña, a páxina seguinte, porque é máis fácil de ver. Entón, todos nós xa vimos ese dereito? Isto é moi doado de seguir. Se eu quixese facer unha variable chamada Cadea co nome s, se un número Doulle está a menos de 100, I quere asignar baixo a secuencia, outra cousa que quero atribuír elevada. Este aquí está facendo exactamente o mesmo oito liñas de código están facendo. Entón aquí quero crear unha variable cadea. E esta é a condición que eu son verificar si un número é inferior a 100, a continuación, asignar o valor da baixa, outra cousa asignar o valor de alta. Estes diapositivas será en liña, non se preocupe se vós non reciben ese abaixo. Esta é só unha forma máis simple, a máis forma eficiente de código escrito. Aceptar. Entón agora imos escriba o que, para a maioría da xente son como un moi, moi confuso cousa a pensar en primeiro lugar. A seca de al. Entón, hoxe, imos falar preto de tres tipos de loops. Nós imos comezar con un tempo loop, a continuación, falar sobre un loop Do While, e, a continuación, falar sobre a loops. Así, esencialmente, á máis aprendices visuais aí temos, esencialmente, unha gráfica descrición do que un loop while fai. Así, nunha programación, vostede comezaría e entrar no ciclo nun determinado punto. Vostede verifica unha condición. E se a condición é certa, executar o código dentro. E volver arredor e vaia. Se aínda así é certo que continuar executando este código ao redor e ao redor dun loop. Con todo, o que segundo a condición se fai falsa, vai romper e acabar co loop. E iso é esencialmente o sintaxe que vai empregar. Mentres unha determinada condición é verdade iso, se non é certo, vai saltar para o final e avanzar co seu programa. Aceptar. Alguén ten un exemplo sobre o que pode ocorrer potencialmente se eu tentar realizar ese anaco de código? By the way, que é SCAZ SAJ--, Andi, Jason-- imos asinar nosos correos electrónicos, Amor, SAJ. Somos nós. Aceptar. Alguén ten un exemplo, ou ter unha idea sobre o que isto debe imprimir? Tipo de unha pregunta capciosa. Entón, aquí, lembre-se a condición estamos comprobando é á vez certo. Entón, mentres iso é verdade, é indo para imprimir, eu amo SAJ! Existe un punto en que estariamos cambiar isto para outra forma de algo? Non, non? Entón, aquí temos atopou o que é, probablemente, será incomodando moita seus programas, o loop infinito. Vai considerar que se realizar ese anaco de código, el só vai manter impresión, Eu amo SAJ! Mentres nós Apreciamos o apoio, nós non queremos seus ordenadores fallando, porque manter a impresión Encántame SAJ! Entón, por favor, por favor, evitar o ciclo infinito porque non vai avaliar a false e nunca vai para saír do ciclo. E está indo ser sugado para sempre. Legal. Aceptar. O segundo tipo de loop imos falar hoxe é o loop Do While, facer mentres loop. E é chamado un loop Do While porque ten un facer e cando. Entón, iso é moi semellante ao dun tempo loop, pero un pouco diferente. Aquí, vai facer todo o que está dentro deste mentres unha determinada condición é verdadeira. Entón, se eu fose C eo ordenador que eu son correndo por este anaco de código, Eu dou un ollo na parte superior. Eu ir C, digo eu faga tal cousa. E entón eu vaia, mentres este Certo, eu teño que repetila. Pero mentres tanto é falso, entón eu seguir adiante e eu nunca volver a este ciclo de novo. Alguén pode tomar unha facada en que a diferenza entre este bucle e aquel que só mirou para practicamente. Si. Altofalante 15: A condición vén despois, no canto de antes? ANDI Pengo: Exactamente. Entón ela dixo que a condición vén despois, non antes. En último caso, a diferenza entre este eo loop while é que está indo só para facer todo o que está dentro deste, con independencia da ou non a súa condición é realidade, e, a continuación, comprobar a condición. Polo tanto, neste caso, é always-- deste xeito, está sempre se asegurarse todo o que está dentro é executado polo menos unha vez antes de comprobar a ver se quere que sexa executado de novo. E aquí está un exemplo de cando ía empregar. Así, por exemplo, se eu quixese ter unha variable de tipo int chamado idade, e quero pedir- o usuario para a súa idade, Vou facer printf () Cantos anos tes? idade = GetInt (), que é avisar o usuario. E algunhas persoas van ser realmente irritante. E non quere erros no seu programa de introducir alguén como, oh Eu son negativo 4 anos de idade ou calquera outra cousa. No caso, se os que facelo, este avalía a verdade, o que significa que eu vou ten que manter a volver e facelo. Entón, iso vai mantê- re-solicitando que o usuario para darlle como un verdadeiro número de idade e é manterá vai volver e refacer Lo ata que eles dan-lle unha certa idade maior que un, ou non cero. Entón información, información. Isto será moi, moi útil para un dos seus problemas PSet. Si. Altofalante 16: Whoops, desculpe. ANDI Pengo: Yep. Altofalante 16: Non hai, ser un idiota, mas-- ANDI Pengo: Non se preocupe. Altofalante 16: --are alí regras diferentes aquí, ou simplemente esquecer para poñer a cita? ANDI Pengo: Oh Yeah. Sentímolo, iso é totalmente o meu mal. Isto foi definitivamente quere que sexa unha cita. Boa captura. Isto non tería executado. Aceptar. Así, o último tipo de bucle imos falar sobre e, en última instancia, tipo dos máis complexo é o loop for. Non te preocupes se non fai iso sabe o que iso significa. É bastante confuso no inicio. Nós imos pasar por riba de un exemplo. Todo o que acontece nun loop é que ten tres declaracións que está indo a incluír. Así, para unha determinada cousa, é indo para iniciar unha variable. Vas para engadir a condición de que este ciclo vai continuar executando. E, a continuación, ao final da loop, está indo para actualiza-lo. Pode actualizar a variable que quere seguir. Entón, nós xeralmente usan loops para cando quere facer un loop para unha certa cantidade de tempo e xa sabemos, Oh Eu quero ese loop para realizar como 10 veces, entón fazer-- vou pasar por riba un exemplo na páxina seguinte. Entón, aquí por exemplo, no scratch, se quería algo para repetir 10 veces, todo o que tiña que dicir era: Repita 10 veces Encántame SAJ! que é unha forma máis aceptable demostración de apoio para nós en vez de o ciclo infinito. Aquí, como faría transición C e gravación que é para int-- eu estou indo a crear ou declarar unha variable de tipo int chamado i. Eu estou indo a iniciar que a 0, así i = 0; e esta será a miña condición. Entón eu sexa inferior a 10. E, a continuación, no end-- a última declaración que é vai ter é a actualización de o que pasa coa variable i ao final do seu ciclo for. Entón é medio confuso, porque diferentes partes desta liña están a suceder en diferentes tipos de loop. Pero eu vou pasar por riba de un exemplo pseudocódigo que e quizais explicar esta só un pouco mellor. Entón aquí. Ese é o ciclo que acabamos de ver. Esencialmente no pseudocódigo, o que está pasando neste programa, é o primeiro que eu estou creando i, inicializar-lo a 0. Estou comprobando a ver se i é inferior a 10, en cuxo caso a primeira vez que se porque 0 é menor que 10. Así, o ciclo vai a realizar. E entón eu estou indo a imprimir esta liña. E, a continuación, ao final da liña, dereita aquí, eu vou facer incremento i, i ++, todo o que é medio incrementa-lo por un. Entón eu agora é 1. Porque era unha vez 0, se eu incrementa-lo é, é agora un. E entón eu vou volver para o inicio do ciclo e eu comprobar o estado. É a condición aínda é verdade? Si, 1 é aínda inferior a 10. Entón vai para imprimir iso de novo, ir e, a continuación, incrementa i, e comproba a condición continuamente, de forma continua, ata que, finalmente, obter ao punto onde i é 10. Vas para imprimir iso 10 veces e entón eu vai equivaler a 10. Vas para comprobar a condición. 10 é inferior a 10? Non, iso é falso. Así, este circuíto non vai para correr, vai romper, e está indo a continuar co seu código. Entón, como podedes ver, este é realmente un gran exemplo dun loop que podes programar en que é executado por un determinado período de tempo. Cada un claro? Si. Altofalante 17: Que tal incremento exponencialmente, é que é diferente de codificación? ANDI Pengo: Vostede can-- imos sobre iso no seguinte diapositiva. Boa pregunta. É anyone-- antes de pasar on-- calquera persoa en todo confuso, porque este é un concepto moi difícil. Non te preocupes, se you're-- Aceptar. Legal. Todo ben. Só unha foto xeral. Este bucle while está facendo o exactamente o mesmo para o lazo era. É só escritas de forma diferente. Podedes ler os diapositivas na súa conveniencia máis tarde. Pero só sei que hai múltiples formas de escribir o mesmo pasar con diferentes ansas. Aceptar. Entón, agora comezan na cuestión do que se temos un loop dentro dun loop. Estamos entrando reais Inception tipo cousas aquí. Cando quere facer as cousas múltiple veces dentro doutras cousas que facer as cousas varias veces, quere o que se chama un lazo é aninhado. Para aqueles de vostedes que primeiro ver iso e ser moi confuso, todo o que estamos facendo aquí está a ter un loop onde temos unha variable de liña. Pero dentro dela, temos tamén outro loop dunha columna variable chamada. E eu suxiro a todos vostedes que están confusos a primeira manter track-- deseñar tanto, chamar a iso. Non tente xusta razón a través del, sacala. Na súa cabeza, neste anaco de papel, ou o que quere, liña de escritura, seguir o que liña é igual a. Escribir columna, manter o control da columna que é igual a. E seguir o que é imprimindo con cada iteración. Cada iteración deste ciclo, toda iteración do lazo grande que, só seguir a seguir a lóxica. E eu asegura que, vai adorar o que ve, porque é tamén moi aplicable para os seus conxuntos de problemas. Legal. Todo ben. Entón, a cousa máis importante que vostedes son, probablemente, todos pensando agora, son o seu problema Establecer 1s, que son debidos xoves / venres. No seu programa water.c, Consello terá para solicitar ao usuario a unha entrada. Dentro do seu programa mario.c terá para usar un lazo é aninhado, que é un loop dentro dun loop for, para imprimir un bloque de pirámide, esencialmente como o que Mario ten que ir a través de. E, a continuación, dentro da súa greedy-- ou que Facer o cambio, se algún de vós xa oíron falar de isso-- vai ter que ser moi coidado con valores de punto flotante primeiros. Lembre decimais flotantes e enteiros non son a mesma cousa. Manteña o control de cal é cal. E está indo a usar instrucións condicionais, tamén. Todo ben, último. Eu teño un par de minutos do final. Style. Entón, iso é algo que non fai de feito, a efectuar a eficiencia, ou o funcionamento real do seu código. Con todo, iso nos afecta como seus niveladoras, como os seus lectores. Efectúa a, se está intentando atopar un problema. Ela afecta a lexibilidade do código. Entón, estilo, como cando estás estilizar un ensaio para Inglés, se non teñen parágrafos, tes todo tipo de mesturados nunha liña, el fai que sexa moi difícil para calquera para ler o seu ensaio, aínda que seus puntos son loxicamente son. Mesmo na programación. Pode que horrible escuro código que SCAZ vai cubrir, e aínda pode realizar e función. Pero para nós, como os seus asistentes técnicos encanto, que han estar lendo e avaliando os seus Serie de exercicios, que non é moi agradable. Entón, por favor, por amor de nós e de si mesmo, cando estás fixar un problema no seu código, e estás ler o seu propio código, faga se seguir algunhas convencións que nós imos pasar por riba. Entón, en primeiro lugar. Dea súas variables nomes significativos. Se desexa almacenar un número enteiro chamado de idade, por favor, nomee idade. Non nome altura. Cando estás a almacenar unha era na altura, fai todo moi confuso para nós. Nós non nos gusta de ser confundido. Non lle gusta ser confundido. A ninguén lle gusta ser confundido. Se indo para crear algo, nomea-la algo significativo. Con todo, en loop, sinxelo variables de carácter son xeralmente ben. E no loop for, se quere só i, e j, k, Sinto-se libre para só facelo. Consistente arranque. Entón, o que significa isto? Isto significa que, tecnicamente, en teoría, pode iniciar e crear múltiples variables na mesma liña. Así, por exemplo, podo crear un enteiro chamado scaz_age, e integer chamado andi_age = 20, e un enteiro chamado jason_age na mesma liña. E eu tamén pode asignar só un dos eles e non os outros para valores. Pedímoslle, por favor, non fagas iso. Porque aquí creou esencialmente tres variables, pero só un deles de feito, ten un valor. E entón, cando estamos intentando ler o seu código, ou se estás fixar un problema no seu código, é moi confuso para seguir. Entón, só para a súa lexibilidade, para nosa capacidade de lectura, non fagas iso. Claves consistente. Algunhas persoas quere poñer o seu claves en lugares diferentes. Realmente non importa. Só asegúrese de que vostede é consistente na súa propio código de onde desexa poñelos. Espazamento consistente. Se pór un espazo despois dun loop for, sempre fai iso. Non basta gusta tipo de facelo en Nalgúns lugares, non facelo noutros. Só ten que ser consistente. En segundo lugar, se alguén quere para ler a Guía de Estilo CS50, temos oficialmente unha guía de estilo que dille todas estas convencións, ademais de máis. É en liña. É como cs50.net/style ou algo así. Pode google. Consistencia é a clave. Non te preocupes que outros están facendo, só asegúrese de que vostede é consistente dentro do seu propio código. Calquera ten dúbidas sobre iso? Si. Altofalante 18: Entón a cousa axeitada que ver coa arranque é só te-los todos nun separado liña, é que o que está dicindo? ANDI Pengo: Entón, eu raramente isto ocorre. Pero se quere, se quería para ser como economía de espazo no seu código, ou o que quere, pode facer iso. Nós pedimos que simplemente non iniciar unha cousa e non os outros. Entón, se quere facer int scaz_age, int andi_age, int jason_age, iso é bo. Só non arrincar un e non os outros é todo. Preguntas? Todo ben. Vou pasar a micrófono, eo punteiro láser, eo bastón para SCAZ neste momento. Isto é raro. Aquí está. BRIAN Scassellati: Grazas. Como é que para o son? O son é bo? . Excelente. Aceptar. Entón, ola a todos. Vou tentar traballar con un exemplo práctico con vostede. E nós estamos indo a usar CS50 de ambiente de desenvolvemento, o que se chama o Integrated Development Environment. E xa viu iso demostrada en charla. E no Conxunto de problemas 1, está terá unha oportunidade para usalo, e xogar con Lo, e afacerse a el, porque nós estamos indo a usalo polo resto do semestre. Polo tanto, neste IDE, ten o que parece como un navegador de arquivos moi tradicional ao longo dun lado. Ten unha parte superior arriba onde está indo para ver o código fonte, o seu Cfile, o código que escribe. E abaixo fondo, vai ten unha fiestra de terminal que vai empregar para tanto compilar o seu programa e para realizar ou realizar o seu programa. Aceptar. Entón, só para dar un pouco de fundación, en que a fiestra de terminal, vai ser usando un conxunto de comandos que son comandos estándar en todo a maioría dos sistemas Unix ou Linux. E por iso, se xa usou calquera forma de Unix, Ubuntu, ou calquera dos outros sabores, estes van parecer familiares. Se non ten, non se preocupe. Non hai nada complicado sobre eles. Están só usando un diferente sintaxe, unha nomenclatura diferente convención do que xa viu antes. Entón, para incluír os arquivos dentro dun directorio concreto eles van usar un ls comando chamado, ou lista. Se queres ver todo con todos os detalles, vai usar un mando argumento de liña con ls -l. E iso vai lle amosar todo en maior detalle, incluíndo os permisos a un arquivo. Para cambiar o directorio, vai empregar o comando cd. E vai ser capaz de cambiar o directorio tanto para ir para o seu directorio persoal. Isto é só cd todo por en si, cd con dous dots voltará a ser unha nivel ao directorio anterior. E tamén pode cd para un subdirectorio, escribindo cd eo nome deste subdirectorio. Tamén pode crear novos directorios. E nós estamos indo a pé a través deste en só un minuto. Pero só para poñer todo na pantalla. Para que poida velos. Tamén terá a capacidade para manipular arquivos directamente desde a liña de comandos. Vai ser capaz de copia-los, para mover los ou eliminar-los, é dicir, efectivamente, para borralos. O IDE CS50 lle dá a plena poder da liña de comandos argumentos. E isto significa que tamén pode facer cousas moi perigosas. Aceptar. Por exemplo, pode eliminar, ou que é de exclusión, un ficheiro sen pedir para unha confirmación. E pode incluso eliminar recursively-- que é o trazo r flag-- un todo subdirectorio e todo o seu contido. Aceptar. Eles están listados en vermello, porque que pensar "Danger" cada vez ve esas cousas. Aceptar. Todo ben. Agora, por fin, as cousas que son vai ser moi valioso para ti, existen algúns bos trucos para saber como está navegando a través desta xanela de terminal. En primeiro lugar, pode limpar a pantalla en calquera momento, só escribindo en claro. E vai ver me facelo con bastante frecuencia. Tamén pode só amosar o texto dun ficheiro escribindo máis e, a continuación, o nome do ficheiro. Vai entón ser capaz de rodar cara atrás e adiante que só coa barra de espazo e as frechas. Se ten, como fixemos onte en conferencia, un programa que está a ser executado de forma continua en loop infinito, vostede pode deixar este programa de realizar, escribindo no control, que está seguro a tecla Control-C. E pode ter que facer iso varias veces. O ordenador está moi por diante de ti. E ás veces precisa darlle un par de intentos antes de que vai realmente se concretar. Tamén será capaz de tipo través dos comandos que acaba de escribir usando a tecla para arriba, tecla de frecha, a continuación, a tecla de frecha cara a abaixo. E o que é máis útil é, en vez de escribir nomes de ficheiros longos, vai ser capaz de o Tab para uso autocomplete algunhas instrucións. Agora imos demostrar todos aqueles en só un segundo. Polo tanto, se non se lembra Los, non se preocupe. Estas son cousas que vai incorporarse e utilizar a medida que avanzamos. Aceptar. Así, en C-- a diferenza Scratch-- C é unha linguaxe compilada. Isto significa que nós estamos indo tomar unha fonte file-- que é o texto que escribe, os comandos que escribe, printf () declaracións, os lazos, else-- todo e imos para dar o ficheiro e entrega-la para un programa chamado o compilador. O compilador, entón, tomar que o texto que escribiu e traducir-lo en as instrucións binarios se o seu ordenador é realmente vai usar. Iso é chamado de obxecto ou o ficheiro executable. Se ollar para este ficheiro, está indo para ver o código que escribiu. Se ollar para este ficheiro, está indo para ver unha secuencia aleatoria de personaxes que non teñen sentido algún. Isto é porque este é o binario. Non está feito para ti estar lendo. Con todo, calquera hora que quere realizar algo, o que vai estar en execución é o arquivo obxecto. Entón, cando traballamos con estes arquivos, imos escribir un arquivo en C. Imos entón recompila-lo, usando un mando como make que invocar o clang compilador para a linguaxe C. E que xerará un obxecto ficheiro, como un para fóra, ou, neste caso, o nome, o meu arquivo, que engada en. Todo ben. Entón imos realmente tentar iso. Entón, eu vin cun exemplo do que eu quería probar. E unha das cousas que me fascina é a animación. Entón, imos tentar facer un pouco de animación usando só caracteres ASCII. Personaxes que poden imprimir facilmente agora. Entón, aquí é a miña mellor intento a crear para ti a animación dun coello que funciona a través da herba alta. Alí está el. Aceptar. Así, non funciona aínda, pero é alí de pé na herba alta. Agora, se eu fose un animador, na vella escola versión da animación, o que eu quere facer é que eu ía producir unha imaxe de este coello na herba. E entón eu ía producir outro picture-- outro o que eles chamaron cell-- que tiña o coello só lixeiramente movido. E a continuación, un terceiro que o coello movido un pouco máis. E gustaríame producir un todo Tras estas células. Algúns onde o coello é longo cara á esquerda. E, a continuación, móvese lentamente, unha por un cara ao medio. E, a continuación, a partir do medio cara á dereita. E se eu fose, entón, realmente sorte, eu podería poñelas en conxunto e eu podería animar a eles. E non é o meu coello correndo pola herba. Esa é a miña gran PowerPoint erro ao día. Aceptar. Polo tanto, este é tan bo que el gaña. Aceptar. Entón, aquí unha vez máis, aquí é a nosa coello correndo pola herba. Altofalante 19: Máis unha vez. BRIAN Scassellati: One máis tempo, todo ben. Hai seu coello. Aceptar. Entón, hoxe o que imos facer é que imos para tratar de automatizar o proceso de de producir estas células. Non imos moi chegar ao punto de poder poñelos todos xuntos. Pero nós estamos indo a tentar automatizar o proceso de xerar esta secuencia. E iso é moito do que animación hoxe é como. É dicir, non facer as cousas necesariamente deseñando todo á man. Usan un ordenador para automatizar partes dese proceso. Aceptar. Entón deixe-me pasar agora a nosa IDE CS50. E eu creei para US-- e deixá- me achegar un pouco aquí bit-- teño creou para nós un punto de partida. Cada vez que pedimos-lle para se sentir abaixo e escribir unha peza de código, o que estamos realmente pedindo para facer é que estamos pedindo para resolver un problema. E a forma que ten que pensar en facelo é, iniciando con algúns simple parte desa solución. E, a continuación, construír a partir desa parte. E iso é o que imos facer hoxe. Entón, en vez de tratar de todo dunha vez para escribir todo o monte de código que é indo para producir os 10 células animación, imos comezar no seu lugar cunha peza que funciona. E entón nós imos construír un pouco en torno a que e un pouco máis e un pouco máis. Agora, a cousa boa sobre resolución de problemas deste xeito é que permitirá que comezar sempre con algo que sabe traballa e introducir un cambio gradual. E iso é unha boa forma para aprender a codificar, xa que cada vez que fai unha cambio, ve o impacto que ten. Aceptar. Entón aquí está o noso punto de partida. Aceptar. Así, a principios do meu arquivo, Teño de hash stdio.h #included. Isto é para que eu poida obter a printf () para traballar. Eu, entón, eu teño a miña función principal. E iso aínda parece un pouco arcana ou escuro para algúns de vós. Está ben. Todo o que di é que a función principal leva medios non arguments-- baleiros nada en C. E retorno por convención, un enteiro. Principal sempre retorna un enteiro, xeralmente un código dicindo cousas foi ben ou non foi ben. Aceptar. Pero principal ten que ter ese formar a nós agora. Eu, a continuación, poñer en tres liñas de código. E xunto con cada liña de código, engada un comentario. Agora, unha das cousas que imos insistir que fai, e é tan importante práctica de programación, é sempre a comentar o seu código. Sempre anota nun Inglés comentario algo Que pensas que o código se quere facer. Desta forma, máis tarde, cando atrás para el, pode ollar para el e pode dicir, Oh, eu recordo que era tentando facer iso. Ou cando un TA senta contigo tentar axudar no horario de oficina, poden ollar para iso e ir, eu ver o que estaba tentando facer, pero no seu lugar está presente o que está realmente a suceder. Aceptar. Entón eu teño tres partes para o meu código, Vou en primeiro lugar impresión nalgúns puntos no inicio. Vou a continuación, imprimir o meu coello moi extravagante. E entón algún anaco de puntos ao final. E estas tres declaracións de impresión debe parece familiar para vostede neste momento. Todo o que eu estou facendo na cada un deles é que eu son imprimir unha secuencia de caracteres. Non hai variables implicadas. Todo é só plana. Aceptar. Entón, se eu baixar agora á miña terminal-- imos ver se podo pegar isto de volta out-- e eu estou indo a escribir clara novo. Altofalante 20: Usan o barra dobre en comentar? BRIAN Scassellati: Poida usar o si double--. Hai varias formas de deixar comentarios en C. Un forma é a utilización do dúas barras oblicuas. A outra é a utilización dunha barra e unha estrela e pecha cunha estrela e unha barra. Todo ben. Primeiro de todo, eu vou comezar a navegar por aquí. Entón, se eu ir ao meu directorio home, Eu mudei directorios alí, Vou mirar e ver o que é nese directorio, ls, listar. Eu estou indo a ver que eu teño ten dous subdirectorios. Imos facer deste un pouco maior para que todos podemos velo. Podo ver que eu teño ten dous subdirectorios. Vou cambiar o directorio para entrar na área de traballo. E eu vou só escribir parte dela, e despois é só usar Tab. E vai completar o resto para min. Extravagante. Vou mirar e ver no escritorio. E agora, eu estou a traballar na SuperSection que estamos ensinando agora. Entón eu vou para o directorio. E, finalmente, ollar e ver. E eu teño o ficheiro bunny.c. Todo ben entón déixeme aclarar unha vez máis. E eu vou agora-- novo eu son aínda permanecer nese directorio e iso está me dicindo que eu estou en ese directorio SuperSection. Eu estou indo a ir adiante e facer o meu coello programa. E ese mando, asegúrese coello, ao soar un pouco raro, tamén invoca o compilador clang. E se produce a me unha saída que é un funny-- executábel arquivo executable chamado coello. Aceptar. Podo entón, e iso soa peor aínda, realizar coello. Aceptar. E imos ver o que fai. Aceptar. Isto é un pouco de o que eu estaba esperando. Eu teño a miña imaxe do coelliño alí, pero eu medio que quería todo por si só. O que eu perda? Altofalante 21: Corte l ou barra n. BRIAN Scassellati: o Slash n. Aceptar. Entón, imos voltar aquí. E eu vou saír desta. E eu vou volver en un regalo. E imos dar un ollo agora da miña principal función aquí. Entón o que debo facer? Quero rematar a liña. Entón, eu vou poñer nun comentario. Vou poñer nun printf (). E o que eu teño que poñer en? / N. Aceptar. O que eu teño para acabar con el? Punto e coma. Todo ben. Agora, un dos de verdade cousas importantes é que seguro cada vez que fai un cambio no seu código, que salvalo. Se non está gardado o código, está Vai notar unha pequena estrela alí enriba. E que a estrela di que non salvou este código. Se eu recompila-lo agora, non é vai reflectir ningunha destas alteracións, porque o compilador mira para o ficheiro que está no disco, non o ficheiro que é abrir no seu editor. Todo ben. Entón, imos garda-lo e despois imos seguro aquí abaixo, volver para fóra. Veña ata a miña terminal. E imos limpar o espazo de novo. E podemos ir adiante e outro tempo de facer o noso programa de coello. E executar o coello. Isto non quere traballar. Barra mal. Entón, se ollar para o que eu teño, eu coloque un / N alí, pero eu tiña a barra mal. Todo o que o ordenador fai é moi explícita. OK? Un pequeno erro de puntuación, e de súpeto non consegue o que quere. Todo ben. Entón, imos aumentar de novo para fóra. Imos volver. Ben facer esa reparación moi rápida. Imos poñer a barra da dereita. Nós imos salvalo. Imos zoom. Por algunha razón, isto non é ser feliz, pero imos adiante e nós imos voltar para o terminal aquí. Esclarece-lo. Nós imos ampliar. E unha vez máis, imos facer coello. E agora con certeza, funciona. Hooray. Aceptar. Entón, imos tentar facelo un pouco máis xeral. A ver se no canto de só imprimir un cadro particular, imos ver se podemos facelo para que poidamos obter toda 10 destes cadros animados que queriamos ter. Entón, de novo, imos dar esta un paso á vez. Imos primeiro xeneraliza-la, non de xeito que fago todo cadros, pero entón eu fago calquera cadro que eu podería querer. Entón, cal é a diferenza entre os cadros? É o coello o mesmo? Audiencia: Si. BRIAN Scassellati: Yeah. Cal é a diferencia? Audiencia: Posición. BRIAN Scassellati: A súa posición, non? E como fago para controlar a súa posición? Cantos puntos son poñendo a principios e cantos puntos son poñendo ao final. Entón, eu tiña cinco anos na comezando cinco e ao final. Imos substituír aquel cinco cun loop for. Aceptar. E eu vou crear un para lazo agora que vai dicir, Eu estou indo a imprimir un número de puntos no inicio. Vou usar unha variable. Imos dicir, que tal como i o contador no meu loop. E eu vou declaralo la enriba. E, a continuación, no loop for Eu teño que facer tres cousas. O primeiro que eu teño que facer é que eu teño para iniciar i. ¿Que debería arrincar Lo para comezar a ser? 0. Aceptar. Entón, eu teño que dicir, o que é a condición de clausura? Cando debo deixar? Ben cantos puntos quere imprimir en un regalo? Audiencia: Five. BRIAN Scassellati: Cinco novo? Que tal imos facer algo diferente, fixemos cinco. Imos amosar que é diferente. Altofalante 22: Two. BRIAN Scassellati: Dous. Aceptar. Entón, se eu quero dous puntos, o que debo poñer aquí? Audiencia: Tres. BRIAN Scassellati: Tres. Aceptar. Cantas veces é que vai pasar? Isto vai pasar por tres veces, 0, 1 e 2, non? Todo ben, imos volver para abaixo para dous. Agora imos ter dous puntos. E o que quero facer cada xa que vou a través do lazo? O que ten que cambiar cada vez que eu pasar? Altofalante 23: Engadir un punto. BRIAN Scassellati: Teño que seguir. Eu estou indo a engadir un punto. Eu estou indo a imprimir un punto, cada vez a través do loop. Pero como eu manter o control de como moitas veces estiven a través do lazo? Está a usar o i, que variable, que contador. Entón, cada vez que pasar, eu vou para incrementar o contador por un. Agora, iso é o mesmo para me dicindo i = i + 1. Está ben. Podería facelo isso-- me gusta do taquigrafia, entón eu vou dicir i ++. Aceptar. Imos facer o mesmo aquí abaixo na parte inferior. Só eu medio que fixen esta. Vou deixar vostedes facer este completamente. Todo ben. Entón, o que eu debería escribir aquí? Aquí está o meu loop for. Vou facer un printf () e eu vou para facelo así que eu só imprimir un punto en que a parte inferior. ¿Que debería escribir dentro deste loop for agora? Ben, primeiro de todo o que variables que debo empregar? Altofalante 24: j. BRIAN Scassellati: eu podería usar j. Podo utilizar o mesmo? Podo utilizar o i de novo? Si. Iso é OK, xa que o Is que está a usar aquí, Eu non teño los de novo cando Eu baixar a ese punto. Entón o que debo arrincar i? Altofalante 25: 10. BRIAN Scassellati: 0. ¿Que debería comprobar? Cantos puntos necesito agora a finais se eu teño dous puntos no inicio? Necesito oito ao final, entón o que que debo comprobar, i menos than-- Audiencia: sete, oito, nove. BRIAN Scassellati: Eu oín sete. Oín oito. E oín nove. Aceptar. Entón, nós estamos todos no dereito ball-- Jason di 10. Aceptar. Se eu precisase de dous puntos para a primeira, como moitos fan I-- e eu teño oito puntos ao última um-- Engada un dous alí enriba, o que debo poñer alí abaixo? Audiencia: Oito. BRIAN Scassellati: Oito. Porque iso vai contar de cero a sete. E iso é oito veces a través do loop. Aceptar. E o que eu teño que facer a finais? Audiencia: i ++. BRIAN Scassellati: i ++. Todo ben. Entón iso é moi bo ollar alí. Imos tentar e imos ver o que fai. Aceptar. Entón, nós estamos indo a salvalo. Agradable e salvo. Imos zoom out. Imos tentar aquí no terminal. Nós imos ampliar. Oops. Nós imos, unha vez máis, facer o noso programa de coello. E vai adiante e executar coello. E aí está. Polo tanto, non hai o noso coello. Onde ten dous puntos no inicio e oito puntos ao final. Todo o mundo aínda está comigo? Aceptar. Por iso, construíu-se. Nós construímos un coello, un cadro específico. Agora temos sido capaces de xeneralizar que para construír máis, diferentes tipos de cadros. Agora imos adiante e ter que xerar non só un cadro, pero imos xerar 10 molduras, onde lentamente facer o coello mover todos do outro lado do campo. Todo ben. Imos volver. E nós imos tratar agora. Entón, o que eu realmente teño cambiar aquí? O que eu teño cambiar? Altofalante 26: Vostede primeiro que cambiar o número de máximo de puntos no inicio. Porque se nós estamos facendo 10 puntos, vai ter para escalar. BRIAN Scassellati: Yeah. Entón agora eu teño que tipo de Hardwired facer sempre dous puntos no inicio e sempre facer oito puntos ao final. Quero construír outro circuíto, non? Porque eu non quero construír unha imaxe do coello, Quero construír 10 imaxes de coello. Entón eu teño construír outro circuíto, e como eu pasar por ese loop, Quero cambiar cantas puntos I imprimir a principios e cantos puntos eu imprimir ao final, con base no que ciclo a través do lazo Estou dentro. Todo ben. Entón, imos comezar outro balcón. Alguén j dixo antes, así que imos facer outra j. E agora, imos construír outro para loop. O que pasa dentro dese loop? Este material ten que ir dentro do loop, non? Será que o coello ten para ir a dentro do loop? Teño un coello en cada un destes 10 cadros? Audiencia: Uh-huh. BRIAN Scassellati: Yeah. Quero un coello en cada dos 10 cadros, non? Como sobre os puntos en Ao final, eu teño diso? Aceptar. Entón, eu estou indo a recuar todos eles. Eu estou indo a destacar todos iso, e eu vou bater Tab. E que vai empurralo los todo un pouco, de xeito que é doado para min para ver o que está no circuíto. E entón eu vou acabar con ela. Imos dicir. OK? Agora, neste loop que Estou building-- whoops, Que facer para que poida see-- Eu teño o meu contador j. Vou comezou a 0. Cantas veces quero de pasar por este ciclo? Audiencia: 10 veces. BRIAN Scassellati: 10 veces. Entón, cal número debo poñer aquí? Audiencia: 9, 10. BRIAN Scassellati: 9, 10, alguén ten que dicir 11, non? Quería dous puntos antes e poñer-i inferior a 2. Quería oito puntos, Engada i inferior a 8. Agora quero pasar por 10 veces, entón eu coloque j menos than-- Audiencia: 10. BRIAN Scassellati: 10. Alí imos nós. E o que fago ao final para j? ++, Incrementa-lo. Aceptar. Agora, aquí está a parte complicada, o que é vai pasar agora, se fago iso? Son eu que vou imprimir 10 frames? Altofalante 27: Eu creo que todos eles será o mesmo. BRIAN Scassellati: Eles van todo ser o mesmo, non? Porque todos eles aínda están indo para poñer dous puntos no inicio. Pero eu non quero que todos eles teñen dous puntos o principio. Cantos puntos eu quere no inicio? Audiencia: Cambiando. BRIAN Scassellati: I quere cambiar, non? Entón, o que eu teño aquí que está cambiando cada vez que o circuíto atravesa? Audiencia: Número de puntos, j. BRIAN Scassellati: j, o número de puntos. Entón, podo cambiar isto sexa j. A primeira vez a través do loop, que é o que vai ser? O que fago para definir j a polo primeiro? Audiencia: 0. BRIAN Scassellati: Entón, cantas veces eu vou facer iso? 0. A segunda vez a través do lazo, j de vai ser un porque incrementa-lo. Cantos puntos vou imprimir? 1. A terceira iteración do bucle, Cantos puntos é que eu vou imprimir? Audiencia: Tres. BRIAN Scassellati: j será 3. Cantos puntos vou imprimir? Oh, desculpe, j será 2. Cantos puntos vou imprimir? Audiencia: 2. BRIAN Scassellati: 2. OK, entón eu vou seguir incrementando que a medida que avanzamos. Como case abaixo? O que pasa aquí? Non quero sempre 8 no extremo máis? Altofalante 28: 10. BRIAN Scassellati: Quero 10 puntos? Quero que cambie tamén. Entón como é que eu quero que cambiar? Audiencia: [inaudível]. BRIAN Scassellati: Ben, se eu ten cinco puntos, en principio, cantos de punto que eu recibín a finais? Audiencia: Five. BRIAN Scassellati: Se eu tivera seis puntos, en principio, cantos chegar ao final? Audiencia: Four. BRIAN Scassellati: Se eu teño sete puntos, en principio, cantos chegar ao final? Audiencia: Tres. BRIAN Scassellati: Se eu teño j ten puntos en principio, cantos chegar ao final? 10-J. Aceptar. Entón, imos tentar iso. Entón, eu estou indo a salvar o noso programa de coello. Unha vez máis imos reducir. Imos descender para o noso terminal. Nós imos limpa-la. E aumentar o zoom. Nós imos facer o noso programa de coello, de novo. E nós imos executalo. Uh-oh. Manteña-se, imos reducir. Será que eu recibín 10 cadros? Ben, como moitos coellos vexo alí enriba? 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Teño 10 cadros. Son todos iguais? Audiencia: É. Non. BRIAN Scassellati: Non. Que primeiro, o coello está lonxe do lado esquerdo. E aquí, o coello é moito sobre a Altofalante 29: Correcto. BRIAN Scassellati: Entón, o que eu esquezo de facer? Altofalante 30: Comezar unha nova liña. BRIAN Scassellati: Esquecín o meu para iniciar unha nova liña, de novo. Mesmo erro que eu fixen antes. Todo ben, imos corrixir isto. Agora, eu teño o código alí para facer unha nova liña. Por que non deu correcto? Altofalante 31: Non é dentro do loop. BRIAN Scassellati: Oh, non é dentro do loop. Iso é certo. Está sentado fóra aquí. E o loop for é todo que está dentro dese texto. Entón, eu estou indo a ir esta dentro do loop for. E eu vou Tab diante del para amosar que é o lugar seguro. E agora, imos garda-lo de novo. Imos reducir. Imos pasar ao noso terminal. Zoom. Nós imos refacer noso programa de coello. E agora, agora temos os nosos 10 marcos. [Aplauso] BRIAN Scassellati: Aceptar. So. Aquí é o noso aniñados para loops. Fomos capaces de xerar o loop interno cantos puntos quería para imprimir en principio, ao final. E o circuíto externo controlado cantos cadros estaba construíndo. Comezamos cun pouco núcleo do problema, e nós construímos a partir dese punto. Todo ben. Imos facer un paso. Está preparado? Hai unha cousa aquí, onde realmente tipo de got máis complexidade do que necesitamos. Imos dar un ollo. Así, no noso programa de coello, se eu reducir aquí, Realmente facer algunhas das mesmas cousa unha e outra vez. O que fago que é unha especie de o mesmo repetido dúas veces? Altofalante 32: Imprimir os puntos. BRIAN Scassellati: Si Eu imprimir eses puntos dúas veces. Realmente, eu debería ter este comentario aquí debaixo. Eu imprimir algúns puntos no comezando, non aquí enriba. E entón eu imprimir algúns puntos ao final. E fago tipo de exactamente o mesmo. O que nós estamos indo para comezar traballando nas próximas semanas é ser capaz de tomar esas bloques de código que usan unha e outra vez, e por medio dun proceso de chamado de abstracción, imos retirala los e gravala-los xa para que poidamos, a continuación, reutiliza-los unha e outra vez. Entón, imos tentar iso. Listo? Nós imos levar este bloque de código. E eu vou tiralo de alí. E eu vou define-- abaixo, no fondo, Vou escribir unha nova función. Non vai voltar nada. E eu vou chamalo printDots. Vai levar un argumento, un número enteiro que di howManyDots debo imprimir. E agora en vez de imprimir j puntos, eu vou imprimir dicir howManyDots debo imprimir. E hai un pequeno problema aquí. Alguén sabe o que é? O que eu teño que está listado aquí que non está definido? Audiencia: [inaudível] BRIAN Scassellati: Así como moitos puntos defínese á dereita aquí, pero eu estou usando esa variable i. Entón eu vou levar esa variable i e eu estou indo a define-la para abaixo aquí no seu lugar. Entón, agora que vai estadia-- oops, ten o bloqueo de maiúsculas en somehow-- son manterá i abaixo aquí. Entón agora aquí está a miña pequena función ou sub-rotina, e el di, Cantos puntos é que eu vou imprimir? E que vai pasar por este ciclo e imprimir-las unha e outra vez. Podo, entón, modificar o meu programa aquí enriba. E o que eu chamar esa función? printDots. Entón, eu vou chamar printDots. Cantos puntos quero imprimir por primeira vez ante o coello? Audiencia: j. BRIAN Scassellati: j. Cantos puntos quero imprimir ao final, despois do coello? 10-J. E hai unha cousa que eu estou ausente. Como viu na charla de hoxe, imos declarar printDots Se anteriormente para dar o prototipo. Aceptar. Entón o que eu fixen é que eu tente illar a parte reutilizada de código que eu fixen unha e outra vez. E eu tente puxa-lo para fóra para que todo isto está contido nun só lugar. Desta forma, se eu teño un erro en algún lugar, Eu só teño que reparalos lo nun punto. Todo ben. Entón, imos salvalo. E imos estar seguro que funciona. Entón, imos saír. Imos volver ao noso terminal. Nós imos ampliar. Nós imos facer ese proceso de coello. Oh. E iso está me deu unha advertencia. Que está me dicindo? Ben en calquera destas veces, quere sempre para rolar ata a primeira error-- agora nun presente, eu só teño un. Ela me di en bunny.c, na liña 8, columna 9, hai un problema. Di, declarou esta i variable e non telo usado. Agora normalmente, isto é non o peor erro. Iso é doado de corrixir. E, de feito, podemos volver o. Podemos volver ao coello. E neste caso, todos ten que facer é se librar de min, porque non estamos usando i dentro principal anymore. Nós só estamos usando- dentro da nosa sub-rotina. Entón, imos gardar iso. Imos volver. E aumentar o zoom. Imos unha vez facer coello. E hai de novo son os nosos 10 cadros. Aceptar. Cada vez que está dado un procedure-- Si. Altofalante 33: Teño um-- Estou confuso. Pode volver o código? BRIAN Scassellati: Yep. Altofalante 33: Entón, cando escribiu o seu prototipo, o argumento que tíñase o nomeado foi chamado howMany? Pero below-- BRIAN Scassellati: Oh yeah. Altofalante 33: --called-lles algo diferente, eu non entendo. BRIAN Scassellati: Por son diferentes. Entón esta é unha grande importancia. Polo tanto, a cuestión era, ata aquí, escribín howMany, e alí embaixo, escribín howManyDots. A razón é que no seu prototipo, realmente non está prestando atención para os nomes que está poñendo en. Todo o que realmente se preocupa é que é un enteiro. Quere saber a forma que está poñendo en. Agora stylistically-- oops-- o que eu debería Non, é que me gusta de facer esas xogo. Aceptar. Porque iso vai ser perder lo máis fácil para min para recordar. Pero ese foi o meu erro Si. Altofalante 34: E así para o prototipo a funcionar, só escribir esta liña, escribir o prototipo, permite que a función que vén debaixo dela para ir á final e recuperar o que significa isto? BRIAN Scassellati: O que isto significa é cando o compilador pasa por, que vai desde o principio da seu código para o fondo. E o que este prototipo é, é que é basicamente unha promesa. El di, non vai ser unha función definida en algún lugar. Vai ser chamados printDots. E iso vai levar un argumento que vai ser un enteiro e vai volver nada, tipo void. Aceptar. Eu prometer a vostede que vai ser definido nalgún lugar debaixo da estrada. Pero sempre que ves que, como ir para abaixo a través do resto da miña función principal, quero tratar isto como unha función que leva unha entrada enteiro. E así, cando o compilador vai para abaixo por iso, el ve esa promesa. E cando está abaixo, segue indo, segue indo, atopa por primeira vez printDots é mencionado. E el di: Oh, está dando me este j. j é un número enteiro. Ben, que me prometeu que ía Ser un enteiro e iso é certo. Está ben. E, a continuación, finalmente, para abaixo no fondo, antes de chegar ao final da miña arquivo, eu facer bo na miña promesa e eu define-lo. OK? Altofalante 35: Entón, o saves-- programa vai aforrar espazo en branco que vai volver e enche a finais? BRIAN Scassellati: non sobre a distribución de memoria. É realmente só sobre o que tipo que está esperando para ver. Caso esa cousa ter un argumento ou cinco argumentos? Debe telo ser números enteiros que lle é dado, ou cordas? Isto é todo o que está mirando que facer é comprobar, está me dando o dereito tipo de argumento. OK? Todo ben. Déixeme deixar con outro pouco para ollar. Arte ASCII non é o gran modelo de animación, como é hoxe. Pero algunhas persoas, por suposto, levar as cousas e empurra-lo para os seus extremos. É dicir, como demostrado David en charla, unha peza de código que ten que, en ningún caso tentar duplicar a si mesmos. Porque é terrible estilisticamente. En realidade, está deseñado para ser o máis difícil posible para ler. Aceptar. Así, para facer de novo, imos facer zoom aquí. Eu estou indo a ir agora, cambie o directorio. Eu estou indo a ir a un nivel, de volta ao meu espazo de traballo. Vou cambie o directorio para esta outro directorio que eu creei. E este é o Internacional Ofuscado C Programación Concurso. Medio ofuscado como difícil como posible comprender. Entón, por favor, non se asuste se ollar para iso e ir, eu non podo ler isto. Ese é o punto del. OK? Pero temos esta programa marabilloso que eu son indo ollar só escribindo máis. E imos ver se podo reducir só un pouco, para que poida velo E este é o programa. É nomeado endo.c. E parece que este balde con tipo de fonte F-L-L-I-D en que. Este é de feito un programa. Está escrito no máis escuro xeito que os autores poderían posiblemente escribilo. Pero é un pequeno anaco marabilloso que xera un modelo de dinámica de fluídos. E así imos dar que o modelo dunha entrada que mira como este, dun staired conxunto de recipientes con algún líquido, algúns líquido, na parte superior. E nós imos ter que simular o que está a suceder con el. Entón, eu vou chamar esa función, endo. E eu vou dar-lle que ficheiro de entrada que eu tiven. E non é a nosa epítome da arte ASCII. Un simulador de dinámica de fluídos completo funcionando en só algunhas liñas de código. Agora, o que é realmente moi sorprendente sobre este programiña é que quero deixar agora, entón eu vou usar o comando? Audiencia: Control-C. BRIAN Scassellati: Control-C. Aceptar. Entón, eu vou usar Control-C. C Isto vai impedilo. Vou limpar novo. E agora eu vou chamar o programa, executar o programa, utiliza como entrada. E veremos a dinámica de fluídos simulación do mesmo punto de fusión. Aceptar. Por favor, non deixe que o programa ser a cousa que che confunde. É só para que poidamos rematar en algo legal e interesante. Aceptar. Boa sorte cos seus conxuntos de problemas. Nós imos ser felices para responder preguntas despois da clase. Moitas grazas, persoal.