[Música tocando] JASON HIRSCHHORN: OK, todo mundo. Bem-vindo à secção. Este é CS50, a nossa própria primeira seção super. Como todos sabem, na próxima semana seções regulares vai começar, mas esta semana estamos todos juntos. Há mim mesmo. Meu nome é Jason. Eu sou um professor de Ciência da Computação. Temos Andi, que é a cabeça de TA CS50. E SCAZ, Professor Brian Scassellati, ele é um professor em Ciência da Computação. Nós somos os chefes CS50 em Yale. Você sempre pode enviar e-mail nos heads@cs50.yale.edu. Estaremos à palestras. Estaremos no horário de expediente. Se há sempre qualquer coisa que pudermos fazer por você, qualquer coisa que você precisa, sinta-se livre para chegar até nós. Então, o que vamos fazer hoje? Ou antes disso, o que é chegando esta semana? Assim, o horário de expediente são segunda-feira, terça-feira, Quarta-feira, e quinta-feira, de 8:00-11:00. Há uma programação no site. Seções, como eu mencionei, estão começando na próxima semana. E você vai descobrir que esta semana cronometrar sua seção é, que dia é hoje, e quem é o seu TA é. Problemas 1 é devido em quinta-feira em meio-dia, sexta-feira ao meio-dia com um dia de atraso. Sim, você tem nove dias de atraso. E há nove conjuntos de problemas. E só pode usar um dia de atraso por conjunto problema. Sim, com efeito, todos problema conjuntos são devidas sexta-feira ao meio-dia. Isso é tudo. Tudo o que os detalhes estão no plano de estudos. Toda sexta-feira, temos almoços. Nós gostamos de fazer esta grande Claro sentir um pouco menor. Então você é bem-vindo a RSVP. Almoço grátis com companheiro colegas e funcionários. cs50.yale.edu/rsvp. Todas estas coisas que I ter na tela, e mais, você pode encontrar ou cs50.yale.edu cs50.harvard.edu, se você vai para Harvard e estão assistindo esta online. Também sobre esses sites, lá uma tonelada de recursos para você. Cada palestra não só tem o vídeo da palestra, mas também observa. Alguém vai assistir a palestra e tomar notas para você. Então você pode apenas pagar atenção durante as aulas, ou você pode usar suas notas / nossa notas para complementar suas próprias notas. Existem lâminas em linha. A fonte code-- tudo David passa por cima de uma conferência, ou SCAZ passa por cima palestra, que código fonte está disponível on-line também, como como eu, mencionado vídeos. Seções, da mesma forma, tudo será filmado. Todas essas lâminas estarão disponíveis. Tudo isso vai código estar disponível para você. Há curtos no site onde Membros da equipe CS50 passar de cinco para 10 minutos passando por tópicos para você. Algumas das pessoas que você já encontradas em conjuntos de problemas. Horário de expediente, como já referi, segundas-feiras a quinta-feira, das 8:00 às 11:00. Estudo CS50 é um recurso fantástico. Existem problemas de prática, lâminas de amostra, bugs conhecidos que os alunos gostam de correr para, para praticamente todos os nós tópico cobrirá neste curso. E, finalmente, neste slide pelo menos, Reference50 que lhe dá informações em todas as funções C você poderia sempre possivelmente esperar de usar e muitos, muitos mais. Mais uma vez, que dot dot dot com a parte inferior da tela é indicar que há mesmo mais recursos sobre esses dois sites: cs50.yale.edu, cs50.harvard.edu. Então, o que vamos fazer hoje? Bem, primeiro eu vou dar- você olhar para os recursos. Já fez isso. Olhe para nós. Agora, vamos passar por cima tipos de dados e operadores em C. Então Andi vai vir aqui e passar por cima de bibliotecas em C, Printf (), uma função com a qual você já está familiarizado ou vai se tornar rapidamente muito familiarizado. E você também vai passar por cima condicionais e loops. E, em seguida, finalmente, SCAZ vai passar por cima do ID CS50. Se você ainda não mergulhou já no Conjunto de Problemas 1, bem como a forma de utilizar o comandos do terminal e úteis e, em seguida, dar-lhe algumas demos e codificação prática no ID CS50. Antes de saltar para esta conteúdo deste lado, alguém tem alguma perguntas até agora? Ótimo. ESTÁ BEM. Mudança de velocidades. [Mudança de velocidades] Isso foi me deslocando engrenagens em um carro manual. Assim, os tipos de dados em C, você não pode apenas ter uma variável x e que ele seja na linha 10, um inteiro, talvez o número 1, na linha 20, um número decimal 10,5, e linhas, em seguida, um casal depois, uma corda, eu amo CS50. Em C, só podem ser variáveis uma coisa, e apenas uma coisa. E então você tem que dar-lhes os tipos. E neste fórum, nós tem uma lista de tipos. Existem caracteres, que suporte para caracteres. Então essa é uma letra A, B, C, D. Isto também pode ser um espaço, ou que também pode ser um caractere de nova linha. Existem números inteiros, que são apenas Números de números, todo ou inteiros rather-- mas sem decimais. Para decimais, temos números de ponto flutuante. Números de ponto flutuante são números com decimais. Depois, há longos, que são inteiros essencialmente mais longas. Você vai notar que um longo é 8 enquanto um int é de 4. Eu vou chegar a isso em um segundo. Isso porque longs pode armazenar até mais inteiros do que um int pode armazenar. Duplo é um longo float. E, finalmente, temos corda, que é um tipo que você provavelmente já usou antes. Se você incluir hashtag # includeCS50.h em seu arquivo de origem, então você pode usar um tipo de cadeia. Não é realmente construído em C. Há um par de outros tipos também. Mas estes são os principais queridos com que você vai usar e encontrar. C como, mais uma vez eu mencionei, cada variable---lo só pode haver um tipo e apenas um tipo. Isso porque C é uma estaticamente linguagem digitada, em oposição às línguas tipagem dinâmica onde se você criar uma variável você pode mudar o que está armazenado em -lo como você ir em seu programa. Por aqui à direita lado, eu tenho os diferentes tamanhos um destes tipos de dados em bytes. Assim, um personagem é um byte. Isso é 8 bits. E isso significa, porque 8 bocados há oito 0s e 1s. Vimos esses demos em primeiro semana com que as lâmpadas binários. Com 8 bits ou 1 byte, nós podemos representam números de 0 a 255. Certo. Se todos os 8 bits são 0 que é 0. Se o primeiro bit é 1, que é o número um, e assim por diante, todo o caminho até 255. E é por isso que para caracteres que podem ser têm essencialmente até 255 deles, mas isso é muito para cobrir todos os personagens, precisamos usar. Para inteiros, você pode ter 0 e então você tem 2 à 32 menos 1. Esses são quantas opções você tem para inteiros. Por um longo, você tem 0 a 2 à 64 menos 1. Então você tem muitos, muitos, mais opções para longs. Cordas, que é um ponto de interrogação porque isso é um cliffhanger para mais tarde. Sim. Eu poderia dizer que todo mundo na borda da sede, como o que é que o ponto de interrogação? É um cliffhanger. Vamos, eventualmente, cobrir o tamanho cordas e falar mais sobre strings. Porque string é realmente uma das rodinhas nós colocamos nesta curso no início e depois decolar mais tarde no, porque strings em C são realmente ponteiros a arrays de caracteres. Mas, novamente, isso é uma Cliffhanger para mais tarde. Antes de passar todas as perguntas, comentários, as preocupações com este slide? ESTÁ BEM. Eu devo ser um explicador fantástico. Além disso, quando você está programando, você está indo para usar esses operadores. Sinais realmente simples que podem fazer simples operações, com o qual você provavelmente está já muito familiar. Por exemplo, no lado direito lado, vemos adicionar. Para adicionar, você acabou de fazer um sinal Plus. E assim você pode ter duas variáveis ​​x e y. Você pode fazer x + y em seu código. Talvez você quer dizer que você a-- tem o número 7 e 3, você deseja armazenar que em uma variável chamada soma. Você pode fazer int para o tipo, o espaço soma, o nome da variável, = 7 + 3; O que seria essa loja em suma? Alguém? Se eu tivesse de sum = 7 + 3. O que seria armazenado em suma? Você pode apenas grite. AUDIÊNCIA: 10. JASON HIRSCHHORN: 10! Isto é exatamente correto. E na soma = 7-3, Eu só uso esse sinal traço. O que vai ser armazenado? AUDIÊNCIA: 4. JASON HIRSCHHORN: 4. Soma é provavelmente o nome errado essa variável, mas 4 seria armazenado. Para multiplicar em C, use o pequeno Caráter Star, você não usar um x. Para dividir, usar um Forward Não cortar o símbolo de divisão. E módulo, utilize o símbolo por cento. Então, digamos que eu quero ver int z = 7% 3, o que seria armazenado em Z? Então, isso é, essencialmente, perguntando o que é que modulo fazer? Alguém sabe o que modulo faz? Sim. y 4. COLUNA 1: É o restante. Jason HIRSCHHORN: É o resto quando você dividir. Assim 7 é dividida por 3 2 1 restante. Então 1 seria armazenado. Você fez a subtração, mas é assim que funciona. Isso é o que o operador módulo faz. É preciso um número divide-o por outro número e retorna para você o restante. Então, novamente, 7% 3 dá-lhe 1, porque 7 é dividida por 3 2 restante 1, e devolve o resto. E quanto vamos voltar a subir um passo para que sinal de divisão. Se eu fiz 7 / dividido por 3 faz Alguém sabe o que que gostaria de voltar? COLUNA 2: 2. JASON HIRSCHHORN: Por que dois e não 2.333? COLUNA 2: Eu acho que corta após o número inteiro. JASON HIRSCHHORN: Então, que é exatamente correto. Em C, se você fizer a divisão de dois inteiros 7 dividido por 3, ele recebe a resposta que neste caso 2,3333 para sempre e verificar que ponto decimal e corta tudo fora após o decimal e ele só retorna 2. Então, se eu fiz 8 dividido por três. Que na verdade, sabemos que para retornar 2.666, mas corta tudo fora em decimal, trunca-lo todo, e apenas retorna a vocês dois. Então 6 dividido por 3, 7 dividido por 3, 8 dividida por 3, estão todos indo para voltar para você 2. Alguém sabe ou tem um palpite, de como eu poderia realmente começar a resposta completa se eu quiser que decimal? Sim. Continue. COLUNA 3: Usar uma bóia? JASON HIRSCHHORN: O que você quer dizer? COLUNA 3: Porque você disse que o flutuador é para os números [inaudível] JASON HIRSCHHORN: Certo. Então, isso é exatamente correto. 7 é um número inteiro. Mas se eu queria transformar essa em um número de ponto flutuante, Eu teria que guardar essa como 7.0 porque o computador é realmente stupid-- vimos que com a example-- PB e J ela só vai fazer exatamente o que você diga a ele. Então, se você escrever 7, ele acho que é um inteiro. Se você escrever 7.0, mesmo que Sabe aquelas coisas são equivalentes, que ele trata como um número de ponto flutuante. Então, se você fez 7,0 dividido por 3, ou dividido por 3,0, ele diria: OK, agora estamos lidando com carros alegóricos. Vou voltar para você 2.333333 para sempre. Mas não é realmente para sempre, porque como também vimos na palestra, esses números de ponto flutuante não são exatamente preciso. Então, se você quer que decimal, ou uma parte do que decimal, então você tem que use-- um deles tem de ser um número de ponto flutuante e o computador tem de entender que este é um ponto flutuante você é lidando com, e não um inteiro. Quaisquer perguntas sobre essa tabela em do lado direito, até agora? Ou seu lado esquerdo, o seu à esquerda, seu lado esquerdo. Sim. COLUNA 4: Certo. Para apenas como um regular inteiros, você faria write-- que você tem que escrever flutuar? JASON HIRSCHHORN: Sim lo. Bem, se você quer criar uma variável que é um flutuador, você precisa dizer flutuador z é igual a alguma coisa. COLUNA 4: OK. JASON HIRSCHHORN: Mas se eu queria fazer 7 dividido por 3 e obter esse decimal, Eu faria flutuar z = 7,0 / 3,0; e que me daria o ponto flutuante número. COLUNA 4: OK. JASON HIRSCHHORN: Se eu fiz algo como int z = 7 / por 3, que me daria um inteiro, porque esses são todos os inteiros. Isso faz sentido? COLUNA 4: Sim. JASON HIRSCHHORN: OK. Ótimo. Quaisquer outras perguntas sobre essa mesa? Mesmo? Estou tão animado. ESTÁ BEM. Por isso, algumas outras coisas que você vai usar, muitas vezes em condições ou loops, são estes tipos de operators-- estes tipos de expressões booleanas. E como aprendemos, == é o que você utilizar para verificar se duas coisas são iguais. Então, aqui estou verificando se x == y, vamos novamente supor que x é 7 e y é 3. Então, se eu escrevi 7 == 3, o que teria que voltar para mim? Isso é verdade ou falso? AUDIÊNCIA: False. JASON HIRSCHHORN: OK. Eu sinto que todo mundo pode receber um presente. Então todo mundo, o que teria que voltar? AUDIÊNCIA: False. JASON HIRSCHHORN: False. Ótimo. 7 não é igual a 3. Então 7 == 3 retornaria false. Você tem um sinal não é igual, por isso, se eu verificado 7! = 3, o que teria que voltar? AUDIÊNCIA: True. JASON HIRSCHHORN: True. Excelente. Alguém foi muito enfático em a parte de trás e apreciar isso. Então você tem menos de operador, inferior ou igual a operador, maior do operador, maior que ou igual a do operador. Então, mais uma verificação de sanidade. Se eu tivesse 7 é maior que ou igual a 3. O que teria que voltar? AUDIÊNCIA: True. JASON HIRSCHHORN: True. Sim. Essa sala de volta, verso do quarto, fantástico. Você pode combiná-las expressões, se você gosta, assim, com um E lógico que é && Ou um OU lógico que é || ||. E então agora você pode testar dois together-- coisas é engraçado? Por que isso é engraçado? Então, se eu quisesse, eu posso dizer é 7 superior a 3 e 2 é inferior a 4? Bem, se 7 é maior de 3, isso é verdade. 2 é inferior a 4, isso é verdade. Então, essa coisa toda iria retornar true. Se eu testei 7 é maior do que 3 e- Eu só estou pegando números aleatórios aqui-- 4 é inferior a 2, bem, isso é falso. Assim, o verdadeiro eo falso fazer falsas. E você pode seguir em frente e você combinar como muitas condições, juntamente como você gostaria. Alguém tem alguma dúvida, comentários, preocupações tão longe? E eu vejo que alguns de vocês tirar fotos de mim na tela, que eu aprecio. Felizmente, ele não está snapchat. Esperançosamente, é para suas notas. Mas todos estes estão indo para estar disponível online. Então você não tem que tirar fotos disto. Como eu mencionei, tudo estará disponível on-line para você. ESTÁ BEM. Estou prestes a começar fora do palco, o mesmo acontece com qualquer um quero dizer nada antes que isso aconteça? Perguntas? [Interpondo VOZES] JASON HIRSCHHORN: Oh, pare. Vocês são muito agradável. ESTÁ BEM. Vou marcar para fora. Vamos lá. ANDI Peng: Nós vamos fazer uma mudança mic estranho agora. JASON HIRSCHHORN: Eu sou vai tirar isso. ANDI Peng: Agradecemos o apoio, pessoal. Você pode me ouvir? Isso é bom? Perfeito. Bela. Deixe-me apenas que dobrar em. ESTÁ BEM. Então, eu estou prestes a fazer como um gigante informações despejar sobre vocês agora. E não se preocupe se você é qualquer não seguir cada pequena linha do que Estou prestes a mostrar-lhe. Como Jason disse, tudo é completamente em linha. Apenas vamos tentar introduzir todos os conceitos coberta em algumas destas lâminas. Então, basta seguir junto. Não se preocupe se você não entende tudo; No entanto, se em qualquer ponto Você se sente perdido, aumentar o seu mão, vamos parar, não se preocupe. Legal. Então eu acho que algo que David tem já mencionado no tipo de palestra e Jason tipo de alusão para hoje é que é uma biblioteca. Assim, na programação, nós temos essas coisas chamadas bibliotecas. Sempre que, essencialmente, todos eles estão é apenas um conjunto de funções, que é essencialmente apenas código que é já foi escrito por alguém que todos nós podemos utilizar dentro de nossos programas. Então como é que um normal, trabalho biblioteca, certo? Você entra pela porta da biblioteca. Você tem todas essas livros que você pode puxar para fora e você pode acessar informações dentro desses livros. Mesma coisa na programação. Você tem uma biblioteca que já tem foram escritos por outras pessoas. E a maneira que você pode, como programador ou um estudante, pode ter acesso a essa biblioteca é através da hashtag # include. Por exemplo, em C nós tem a mais três C-- comumente usado três C padrão libraries-- a biblioteca de entrada / saída, a biblioteca de corda, ea biblioteca matemática. Então, dentro de sua primeira problema casal define, esses serão os três que você está usando principalmente. Assim como David já explicou em conferência, o padrão I / O biblioteca, ou o biblioteca padrão de entrada / saída faz exatamente isso. Ele permite que você, no seu código, a entrada nada do usuário e de saída que para a tela, essencialmente imprimi-lo para a tela. E assim todo o tempo que você usar quaisquer funções, por exemplo, a função printf (), que vamos passar por cima o próximo slide, certifique-se de incluir o padrão I / O biblioteca, ou então você não vai ser capaz de utilizar a função printf (). Porque você, como o programador na verdade nunca escreveu essa função, você está apenas usando alguém código de outra pessoa dentro de seu próprio código. Isso faz sentido todo mundo? Legal. E, então, essencialmente sujem a biblioteca e o math.h string.h biblioteca, .h apenas significa biblioteca, outras bibliotecas que você eventualmente estar usando dentro de seu código. No entanto, para fins desta biblioteca, que também have-- deste class-- temos também o que é chamado a biblioteca CS50, cs50.h, onde nós, para sua leitura criaram muitas funções importantes e úteis. Assim que você como um programador pode pegar carona off o que nós já escrevemos, para que deste disponível função para você para seu uso. Eu estarei cobrindo um par de as funções de uso geral, mas sabemos que estas são todos googleable online. Sinta-se livre, puxe para cima a biblioteca e CS50 então você tem todas as funções lá. Sim. COLUNA 5: Então, se você não fosse utilizando o software que é fornecida a nós por a classe, que faz significa que teríamos de encontrar e baixar arquivar este cabeçalho nós mesmos e dizer- o computador onde ele está? ANDI Peng: Ótima pergunta. Exatamente. Então, é como se você não está fisicamente presente em uma biblioteca, não há nenhuma maneira de você realmente ir e acessá-lo. Assim, a mesma coisa com programação em C, você tem que ter certeza que você está usando nosso aparelho porque a biblioteca é já sido incorporado nele. E então quando você hashtag #include, a biblioteca de lá. Sim. Boa pergunta. Todo mundo é bom? Legal. Tudo certo. Então, nós estamos indo bater, Essencialmente, o que é que a primeira função nós como programadores são vai estar usando dentro de nosso código. Esta é a chamada função printf (). Assim, a função printf (), como eu já disse no último slide, está incluído no padrão I / O, Standard input / output, biblioteca. Portanto, verifique se o que você está using-- oh, deixe-me pegar o laser pointer-- sempre que você estiver usando a função printf (), você tem que incluir o padrão I / O biblioteca ou então, quando você compilar, você vai obter um erro porque o computador vai ser como, oh, eu não sei onde printf () é, você não está me dizendo onde printf () é. Bem printf () está incluído no E / S padrão, então quando você usar printf (), certifique-se de que tem linha acima seu código. Assim, por exemplo, printf () aqui é uma função. Tudo que faz é imprimir algo dentro dos parênteses para o utilizador. Será que alguém gostaria de tomar uma facada em que esta linha de código à direita aqui vai imprimir? Assim, a resposta está na tela. Alguém? VERDI: A parte inferior. ANDI Peng: Verdi, por que você não vá em frente e dizer toda a declaração? Verdi: Olá, meu nome é Andi, e eu tenho 20 anos de idade. ANDI Peng: Ah, adorável. Assim, nesta linha que vamos imprimir, Olá, meu nome é Andi, e eu tenho 20 anos de idade, que é de fato uma afirmação verdadeira. Syntax. Então par de questões sintáticas que vocês querem ter certeza de que você sabe. Cotações. Aspas duplas contar a computador que tudo dentro vai ser impressa. Tudo dentro de lata ser exatamente como digitá-lo, exceto para vulgarmente no final, vamos querer incluir um hash-- oh sorry-- um traço n. Assim, um traço n. Alguém quer dar um palpite o que faz com que o nosso código? Sim. COLUNA 6: Coloca-lo em uma nova linha. ANDI Peng: Exatamente. Então, tudo isso faz é permitir que aconteça o que acontecer depois disso, após esta declaração, a ser impresso para uma nova linha. De modo que quando você está escrevendo seu código que você não tem coisas aleatoriamente acrescentos ao fim que você não quer. Isso tudo fica ordenadamente impressa uma linha e, depois, começar na linha seguinte. Alguém se lembra o que isso ponto e vírgula faz quando estamos codificação? Sim. COLUNA 7: Declaração. ANDI Peng: Desculpe? COLUNA 7: Será que acabar com a declaração? ANDI Peng: Sim. Assim, em C, ou qualquer tipo de programação linguagem, o ponto e vírgula indica o final de uma linha de programação. Assim, por exemplo, em Inglês usamos período quer dizer, oh este é o fim de uma frase. Na programação, a mesma coisa, temos um ponto e vírgula a indicar o final de uma linha. Muitas vezes, quando você está começando a programar, você vai perceber que você esqueça de fazer um ponto e vírgula e, em seguida, tentar executar o seu O código e ele não funciona. E você é como, Ah, eu não sei sei por que, ele deveria estar trabalhando. As chances são que você provavelmente esqueceu de um ponto e vírgula ou um suporte ou algo em algum lugar. Então, isso é importante para se lembrar. Legal. Tudo bem, show de mãos, como muitas pessoas aqui têm sempre tomado AP Ciência da Computação ou programado em Java antes, nunca? ESTÁ BEM. Adorável. Isso não será aplicável em seguida, mas em Java, você tem algo chamado System.out.println que não existe em C. Assim, em C, sempre que você quer adicionar em variáveis em qualquer coisa que você quer para imprimir, há uma sintaxe específica que vamos usar. Isso é chamado a placeholding-- essencialmente somarmos espaços reservados no lugar do inteiro ou a variável que deseja imprimir. Então, como vocês podem ver, nós incluímos um novo cabeçalho biblioteca de arquivos aqui. A biblioteca de CS50. E contido dentro dessa biblioteca CS50 é uma função comum que vamos usar em nosso curso chamado GetInt (). Alguém quer tomar uma facada em o que GetInt () pode possivelmente estar fazendo. AUDIÊNCIA: [inaudível] ANDI Peng: Desculpe. Não foi possível ouvi-lo. Maddie, ninguém. MADDIE: Oh, ele solicitará você para um número inteiro. ANDI Peng: Exatamente. Então esta função, outra função que já está foi escrito por outra pessoa que podemos invocar agora. Tudo o que é pedir a você, o usuário, a entrada que você quiser que o código está em execução e armazena whatever-- neste caso estamos GetInt () - ing, então isso significa que nós somos a obtenção de um número inteiro. E nós estamos indo para armazenar que em outro inteiro que acabamos fez chamada idade. Isso faz sentido para todo mundo? Legal. Portanto, agora que temos armazenado este número inteiro, que temos solicitado ao usuário, nesta variável, nós temos criado do tipo int chamado idade, nós podemos ir em frente e lugar essa função no nosso printf (). Assim, a sintaxe geralmente para printf () é que onde quer que em seu físico real linha que pretende incluir esse inteiro, você faz esse símbolo ali mesmo, o símbolo por cento, com a tipo de variável que você quer. Portanto, neste caso, a idade é um número inteiro. Então você está indo para incluir % i porque é um número inteiro. E, depois de o seu declaração, você está indo fazer vírgula eo nome da variável. Então aqui, nós estamos indo para imprimir fora, Olá, meu nome é Andi, e eu sou anos de idade em branco. Hashta-- ou, sorry--, idade com qualquer entrada I. Então, se eu fosse para entrada 20 para o meu GetInt () aqui, que iria imprimir exatamente a mesma coisa. Mas, se eu queria algo entrada outra coisa, como talvez 40 ou 45, em seguida, você iria ver que refletia em conformidade, o código. Portanto, este é um exemplo de algo em que ele imprime e olha para você como se fosse a mesma coisa, mas debaixo da capa de o computador há realmente coisas muito diferentes acontecendo. Legal. Tudo certo. Então, o que se queremos múltiplas variáveis? Bem fácil. Mesma coisa. Temos também uma nova função aqui chamado GetString (), Também incluídos dentro da biblioteca CS50, que tudo que faz é pedir ao utilizador para uma seqüência de caracteres, que é apenas um conjunto de caracteres, assim como uma sentença ou como um nome. Portanto, neste caso, teríamos dois espaços reservados% s para cordas e% i por inteiro. E nós estamos indo para seguir que por as duas variáveis que deseja incluir, na ordem que aparecem na sentença. Assim, por exemplo, meu nome é em branco, eu quero um nome lá, então eu vou ter o nome em primeiro lugar. E, em seguida, mais tarde, eu quero idade, quer ter segunda idade. E assim se eu quisesse entrada, Olá, Andi do meu nome, e eu tenho 20 anos de idade. Se eu introduzido Andi e 20, o exatamente a mesma coisa iria imprimir; no entanto, agora temos dois armazenados variáveis ​​de nome, bem como int. Sim. COLUNA 8: Seria capaz de executar se você alternou nome e idade no final do que? ANDI Peng: Sim. Isso é realmente boa pergunta. Então, longa história curta, não. Porque o nome e age-- tipo de variável é o nome? COLUNA 8: String. ANDI Peng: E ​​o que tipo de variável é a idade? COLUNA 8: Integer. ANDI Peng: Portanto, temos aqui um espaço reservado para cordas e inteiro, certo? Então, se você fosse para mudar estes, o computador não vai saber. Vai buscar por uma corda, e se você tentar dar-lhe um int, ele vai ser como esperar Estou confuso, você me disse que eu deveria ser atribuição de memória para um int. E aqui, quando ele espera um número inteiro e você dar-lhe um nome e uma corda em vez disso, ele também vai ser muito confuso, ele não será executado exatamente da maneira que você precisar. Então, aqui, nomeação e sintaxe é muito importante para a execução de código. Todo mundo é bom? Sim. Maddie. MADDIE: Aqui, eu sei que nós olhamos em exemplos em sala de aula, onde eles perguntam qual é a sua idade, o que é o seu nome. Aqui, isso seria ele doesn't-- se tivéssemos de executar esse código, que não iria pedir isso? Mas você teria apenas dois números de entrada e, em seguida, ele seria executado como esse? ANDI Peng: Sim, exatamente. Então, se você queria para que ele visor, introduza a sua idade, você pode simplesmente adicionar uma função printf () que diz: Por favor, indique a sua idade, acima dela. Essa é uma boa pergunta. Sim. COLUNA 9: Então, já seria incluído no GetInt () [inaudível]. ANDI Peng: Não, na verdade não é. Então, tudo isso faz é apenas solicita uma tela vazia para que o utilizador introduza alguma coisa. Se você quiser, se você quiser imprimir algo que informa ao usuário como, por favor me dê a sua idade, então você teria de printf () que a si mesmo. Porque todo mundo usa essa função para coisas diferentes, você pode estar armazenando idade, você pode estar armazenando endereço, você poderia armazenar números de telefone. E por isso é realmente até usos individuais de seus homens para o que você quer dizer. Sim. ALTO-FALANTE 10: Então, só para esclarecer, onde você inserir o nome ea idade de modo que ele aparece no lugar de% s? ANDI Peng: Como no usuário? ALTO-FALANTE 10: Sim, como como faço fazer ele-- onde posso colocar Andi, e onde posso colocar 20? ANDI Peng: Sim. Então, se você fosse para realmente executar este código, Eu não estou realmente correndo o código, este é apenas aqui agora. Se eu fosse para executar o código, eu o faria compilar o código, tornar o arquivo, executar o código, e então não haveria apenas dois espaços para que eu introduzi-lo. Sim. Vocês vão ver quando você joga ao redor com o código você mesmo. Tudo bem que estamos indo para mover para a próxima seção do que nós estaremos cobrindo hoje. Vamos repassar o que instruções condicionais são. Então, se vocês lembram e lembrar da palestra, instruções condicionais, todos eles são são um conjunto de instruções para o computador nas que se uma determinada condição for verdadeira, você executar o código dentro dessa condição. Assim, em Scratch-- essencialmente o grande tema a partir de hoje é que vocês têm já tudo visto a lógica por trás de tudo que estamos cobrindo. E tudo o que estamos fazendo é traduzindo algo que era muito intuitivo em Zero, e disco rígido codificação-lo na sintaxe vamos usar para a classe que é C. Então, logicamente, tudo isso foi bloco é aquele pedaço de código certo lá. Sim. ESTÁ BEM. Nós também entrar em um if ... else declaração, que é apenas uma camada adicional de complexidade para a instrução if onde o computador tem um olhar para este e vê, se esta condição for verdadeira, fazer tudo o que está dentro desses dois suportes, else-- assim como o tipo de padrão se ele não atende o condition-- fazer isso. É como uma bifurcação na estrada. Se está chovendo lá fora, eu coloquei em uma capa de chuva, que qualquer outra coisa outra coisa que eu não colocar em uma capa de chuva. Será que a lógica faz sentido para todo mundo? Legal. Tudo certo. Assim como um exemplo duro de este que veríamos em C é se eu queria criar um variáveis ​​chamados horas lição de casa. E se é menos horas de casa de cinco anos, eu digo A vida é grande. É maravilhoso. No entanto, dizem A luta é real-- que é o que todos nós nesta segunda-feira tarde até Science Hill estão provavelmente fazendo certo agora-- AUDIÊNCIA: [rindo] ANDI Peng: Eles maneira que nós seria, obrigado por isso. A maneira que nós seria codificar isso em C é se-- vamos supor já temos uma variável do tipo int chamado horas de casa aqui. Se as horas de trabalhos de casa está a menos de cinco printf (), A vida é grande. Lembre-se de manter / n porque você quer uma nova linha depois. Impressão Else, A luta é real. Será que todo mundo entender como I transferida a partir deste bloco para este bloco de código? Legal. Tudo certo. Então, agora vamos dar uma olhada em várias instruções If completamente. Então vamos supor que o propósito deste programa foi que pede ao utilizador para um grau. Nós aviso usando GetInt () para um grau, e um valor de entrada, e você deseja exibir que tipo de grau que eles têm. Então, se eu fosse para projetar um programa, eu significa normalmente em todos os nossos olhos, 90-100 é um A, é um 80-90 B, e assim por diante e assim por diante. O que está errado com este pedaço de código que não é fazendo o que eu quero que ele faça. Sim. ALTO-FALANTE 11: Eles têm limites mais baixos, mas eles não têm limites superiores. ANDI Peng: Exatamente. Será que todo mundo ouvir o que ela disse? Não vai ser superior limites, mas não há limites inferiores. Desculpe, outra maneira ao redor, limites mais baixos, não há limites superiores. Assim é que gostaria de tomar uma facada em dizer o que iria ser impresso neste tela, se eu fosse para executar este código. ALTO-FALANTE 11: um erro? ANDI Peng: um erro? Grande suposição, não muito bem. Alguém tem outra facada? Sim, Aaron. AARON: Se você colocar em algo maior do que 90, ele iria mostrar todas as notas que você tem. Ele iria mostrar que você tem um A, você tem um B, você tem um C. ANDI Peng: Sim. Isto é exatamente correto. Então, isso seria maravilhoso. No entanto, eles são mutuamente exclusivo, eu acho. Se eu fosse para executar esse pedaço de código. E então vamos apenas dizer, I introduzido o grau de 95. Então 95 está agora armazenado na o int chamado grau. E assim C é uma linguagem que sobe cima para baixo, por isso vai para sempre correr até a parte inferior. Então ele vai vir aqui, ler se grau é maior do que ou igual a 90, printf (), você tem um A. Ótimo, eu ter um 95, que é maior do que 90. Vai para imprimir, Eu tenho um A. Vai para dar uma olhada neste caso, vai dizer, a cavidade 95 é também maior do que 80, ele vai imprimir você também tem um got uma marca de exclamação B, e assim por diante e assim por diante. Assim como todos nós podemos ver, este é um erro comum que pode ocorrer quando estamos escrever código para olhar para fora. Qualquer pessoa, qualquer dúvida sobre por que isso estava acontecendo? Ótimo. ESTÁ BEM. Então, como podemos corrigir isso, é, obviamente, a próxima questão lógica. Bem, nós temos estes bonito coisas chamadas se else if mais se else. Assim você pode ver, se você queria para mudar esse problema, você queria fazer cada um dos condições mutuamente exclusivas, você gostaria de acrescentar uma outra coisa ... se comunicado. E estes course-- de pensar neles como escadas, ou como degraus na ladder-- você pode adicionar como muitos deles, como você quer para tantas condições como você quer. Então, aqui, se eu introduzido grau a ser 95. Se a nota é maior do que 95, printf (), eu tenho um A. Grande. Vai ver uma coisa ... se e vai saber, Oh não, Eu já executou a primeira pessoa. Eu sabe-- ou o primeiro se-- eu sei que Eu não tenho de olhar para qualquer um destes porque um deles já foi verdade. Por isso, vai a correr a partir de cima para baixo. Assim que o primeiro é verdadeira, então ele vai pular sobre todo o resto dos mais ... ifs. Isso faz sentido? Assim, desta forma você tem diferentes níveis de verificação e logo que um deles é falso, o resto são também, eles não vão mesmo verificar. Legal. Tudo certo. Portanto, este é um exemplo de uma diferente tipo de instrução condicional vemos com menos frequência, mas vamos vê-los e usá-los. E eles são muitas vezes mais eficiente para determinados casos. Então nós temos o que é chamado uma instrução switch. Portanto, antes de nós cobrimos o que é uma outra coisa declaração, um else if .... Aqui, nós temos o que são chamado declarações switch. Assim, quando usamos interruptor declarações é a chave? Assim, em uma instrução switch, você normalmente, tipicamente, na verdade você podem só inteiros de entrada para o seu variável que você está verificando. Então, se eu queria verificar para ver Se um determinado number-- por exemplo uma nota, se eu tenho um 90. Eu quero-o para ver se isso é um A, B, ou C. Eu poderia ter um caso aqui. No entanto, o caso tem para ser mais constante. Portanto, neste sentido, o interruptor declaração só pode vá para a igualdade de dois números. Ele não verifica para qualquer outra coisa. Então, isso é algo a ser muito cuidado de quando você está usando isso. Então, aqui, se eu queria verificar para ver se a minha nota de 90 é igual a 90 ou 80 ou 70 ou 60, e em seguida, imprimir o grau correspondente, Eu seria capaz de escrever que em uma declaração switch. Então ele vai vir aqui, verificação é este número inteiro igual a este constante? Se não, ele vai pular. É igual a constante dois, e assim por diante e assim por diante, até atingir o padrão, se nenhum deles são iguais. Assim que um deles é definido para ser igual, ele vai fazer isso linha de código e pausa. O que significa que vai bater esse correr, quebrar, e simplesmente ignorar completamente para a parte inferior do código. Então, nesse sentido o tipo de funções como um if else if else if. Então aqui está um concreto exemplo para vocês. Então vamos supor que eu queria criar uma variável chamada ano fundada. E eu quero pedir ao utilizador para introduzir o ano em que a escola foi fundada. Então, eu posso criar uma instrução switch aqui. E vamos apenas dizer, eu input 1636. Este código aqui vai ver interruptor ano, fundou o que equivale a 1.636. Vai ver o caso 1636, oh aqueles são iguais, printf () não Caso você seja naquela escola para o norte? Porque nós supor que não fazer aqui se eles vão para Harvard, quebrar e pular para o final. Se eu fosse a entrada de 1701, que Eu suponho que todos nós de entrada, seria ignorar este caso, vir até dois caso que é 1701, e imprimir Welcome to Yale! Quebrar, pular para o final. Senão você provavelmente está a tomar este curso online em que case-- impressionante bem-vindo para Yale-- está indo para ir para o impressão padrão, Olá Internet! E quebrar. Sim. ALTO-FALANTE 12: Pode-se usar mais em vez de padrão lá? ANDI Peng: Não, porque o forma que esta função inteira interruptor é construído, a sintaxe você precisa usar é case default. É como se a pessoa se, este é um case default. Sim. ALTO-FALANTE 13: Você talvez já disse isso, mas você pode ter mais de dois casos? ANDI Peng: Sim, você poderia tem o maior número de casos, como você deseja. Pense nisso como apenas como adicionando em infinitamente. ALTO-FALANTE 14: Se você comutada 1701 com 1636, ele realmente não faz um direito diferença? Ele só vai estar verificando para isso. ANDI Peng: Isso é um pergunta muito boa. E nós vamos tocar em cima isso mais tarde, mas apenas sei que é a chave declaração é infinitely-- é mais eficiente do que a que e se else if porque opera utilizando um tipo diferente de função que permite que você, para, essencialmente, a apenas saltar directamente para o caso você precisa ser no. Sim. ALTO-FALANTE 14: Cool. Obrigado. ANDI Peng: Sim ALTO-FALANTE 14: E você não podia fazer como casos e maior que. ANDI Peng: Não. Então, isso é o que está limitando sobre a instrução switch é que você tem ter Constantes só, apenas números inteiros. Sim. ESTÁ BEM. Então, isso é algo que você caras vão encontrar menos frequência de, mas eu só queria introduzi-lo no caso. Temos aqui o que é chamado um operador ternário. Onde essencialmente, é apenas como um if compilados em uma linha. Aqui, eu vou para a próxima linha, a próxima página, porque é mais fácil de ver. Então, todos nós já vimos esse direito? Isso é muito fácil de seguir. Se eu quisesse fazer uma variável chamada String com o nome s, se um certo número Dou-lhe está a menos de 100, I deseja atribuir baixo para a seqüência, outra coisa que eu quero atribuir elevada. Este aqui está fazendo exatamente a mesma coisa esses oito linhas de código estão fazendo. Então aqui eu quero criar uma variável string. E esta é a condição que eu sou a verificação, se um número é inferior a 100, em seguida, você atribuir o valor da baixa, outra coisa atribuir o valor de alta. Esses slides será on-line, não se preocupe se vocês não recebem esse baixo. Esta é apenas uma maneira mais simples, a mais forma eficiente de código escrito. ESTÁ BEM. Então agora nós vamos digite o que, para a maioria das pessoas são como um muito, muito confuso coisa a pensar em primeiro lugar. A seco de al. Então, hoje, nós estamos indo falar cerca de três tipos de loops. Nós vamos começar com um tempo loop, em seguida, falar sobre um loop Do While, e, em seguida, falar sobre para loops. Assim, essencialmente, para a mais aprendizes visuais lá fora, temos, essencialmente, uma gráfica descrição do que um loop while faz. Assim, em uma programação, você começaria e entrar no ciclo em um determinado ponto. Você verifica uma condição. E se a condição for verdadeira, você executar o código dentro. E você voltar ao redor e você vá. Se ainda assim é verdade que você continuar correndo este código ao redor e em torno de um loop. No entanto, o que segundo a condição se torna falsa, você vai quebrar e acabar com o loop. E isso é essencialmente o sintaxe que você vai usar. Enquanto uma determinada condição é verdade fazer isso, se não é verdade, você vai pular para o final e avançar com o seu programa. ESTÁ BEM. Alguém tem um exemplo sobre o que pode ocorrer potencialmente se eu tentar executar esse pedaço de código? By the way, que é SCAZ SAJ--, Andi, Jason-- vamos assinar nossos e-mails, Amor, SAJ. Somos nós. ESTÁ BEM. Alguém tem um exemplo, ou ter uma idéia sobre o que isto deve imprimir? Tipo de uma pergunta capciosa. Então, aqui, lembre-se a condição estamos verificando é ao mesmo tempo verdadeiro. Então, enquanto isso for verdade, é indo para imprimir, eu amo SAJ! Existe algum ponto em que estaríamos mudar isto para outra forma de alguma coisa? Sem direito? Então, aqui, temos encontrou o que é, provavelmente, vai ser incomodando muita seus programas, o loop infinito. Você vai achar que se você executar esse pedaço de código, ele só vai manter impressão, Eu amo SAJ! Enquanto nós apreciamos o apoio, nós não queremos seus computadores a falhar, porque você manter a impressão Eu amo SAJ! Então, por favor, por favor, evitar o ciclo infinito porque ele nunca vai avaliar para false e você nunca vai para sair do ciclo. E você está indo ser sugado para sempre. Legal. ESTÁ BEM. O segundo tipo de loop vamos falar hoje é o loop Do While, fazer enquanto loop. E ele é chamado um loop Do While porque você tem um fazer e quando. Então, isso é bastante semelhante ao de um tempo loop, mas um pouco diferente. Aqui, você vai fazer tudo o que está dentro deste enquanto uma determinada condição é verdadeira. Então, se eu fosse C eo computador que eu sou correndo por este pedaço de código, Eu dou uma olhada no topo. Eu ir para C, digo eu faça tal coisa. E então eu vá, enquanto este É verdade, eu tenho que repeti-la. Mas enquanto isso é falso, então eu seguir em frente e eu nunca voltar para esse ciclo novamente. Alguém pode tomar uma facada em que a diferença entre esse loop e aquele que apenas olhou para praticamente. Sim. ALTO-FALANTE 15: A condição vem depois, em vez de antes? ANDI Peng: Exatamente. Então ela disse que a condição vem depois, não antes. Em última análise, a diferença entre este eo loop while é que você está indo só para fazer tudo o que está dentro deste, independentemente da ou não a sua condição é verdade, e, em seguida, verificar a condição. Portanto, neste caso, você é always-- desta forma, você está sempre se certificando tudo o que está dentro é executado pelo menos uma vez antes de verificar para ver se você quiser que ele seja executado novamente. E aqui está um exemplo de quando iria utilizá-lo. Assim, por exemplo, se eu quisesse ter uma variável do tipo int chamado idade, e eu quero pedir- o usuário para a sua idade, Eu vou fazer printf () Qual a sua idade? idade = GetInt (), que é avisar o usuário. E algumas pessoas vão ser realmente irritante. E você não quer erros em seu programa de introduzir alguém como, oh Eu sou negativo 4 anos de idade ou qualquer outra coisa. No caso, se os que fazer isso, este avalia a verdade, o que significa que eu vou tem que manter a voltar e fazer isso. Então, isso vai mantê- re-solicitando que o usuário para dar-lhe como um verdadeiro número da idade e é vai manter vai voltar e refazer -lo até que eles dão-lhe uma verdadeira idade maior do que um, ou não zero. Então dica, dica. Isto será muito, muito útil para um de seus problemas PSet. Sim. ALTO-FALANTE 16: Whoops, desculpe. ANDI Peng: Yep. ALTO-FALANTE 16: Não existem, ser um idiota, mas-- ANDI Peng: Não se preocupe. ALTO-FALANTE 16: --are lá regras diferentes aqui, ou você simplesmente esquecer para colocar a citação? ANDI Peng: Oh Yeah. Desculpe, isso é totalmente o meu mau. Isso foi definitivamente suposto ser uma citação. Boa pegada. Isso não teria executado. ESTÁ BEM. Assim, o último tipo de loop vamos falar sobre e, em última instância, tipo dos mais complexo é o loop for. Não se preocupe se você não fizer isso sabe o que isso significa. É bastante confuso no início. Nós vamos passar por cima de um exemplo. Tudo o que acontece em um loop é que você tem três declarações que você está indo para incluir. Assim, para uma determinada coisa, você é indo para inicializar uma variável. Você está indo para adicionar a condição de que este ciclo vai continuar correndo. E, em seguida, no final da loop, você está indo para atualizá-lo. Você pode atualizar a variável que você deseja acompanhar. Então, nós geralmente usam loops para quando nós deseja executar um loop para uma certa quantidade de tempos e já sabemos, Oh Eu quero esse loop para executar como 10 vezes, então você fazer-- vou passar por cima um exemplo na página seguinte. Então, aqui por exemplo, no Scratch, se você queria algo para repetir 10 vezes, tudo o que tinha para dizer era: Repita 10 vezes Eu amo SAJ! que é uma forma mais aceitável demonstração de apoio para nós ao invés de o ciclo infinito. Aqui, como você faria transição para C e gravação que é para int-- eu estou indo para criar ou declarar uma variável do tipo int chamado i. Eu estou indo para inicializar que a 0, assim i = 0; e esta vai ser a minha condição. Então eu for inferior a 10. E, em seguida, no end-- a última declaração que você é vai ter é a atualização de o que acontece com a variável i no final do seu ciclo for. Então é meio confuso, porque diferentes partes desta linha estão acontecendo em diferentes tipos de Loop. Mas eu vou passar por cima de um exemplo de pseudocódigo que e talvez explicar esta apenas um pouco melhor. Então aqui. Esse é o ciclo que acabamos de ver. Essencialmente no pseudocódigo, o que está acontecendo neste programa, é o primeiro que eu estou criando i, inicializando-lo a 0. Estou verificando para ver se i é inferior a 10, em cujo caso a primeira vez que é porque 0 é menor que 10. Assim, o ciclo está indo para executar. E então eu estou indo para imprimir esta linha. E, em seguida, no fim da linha, direita aqui, eu vou fazer incremento i, i ++, tudo o que é meio incrementá-lo por um. Então eu agora é 1. Porque era uma vez 0, se eu incrementá-lo é, é agora um. E então eu vou voltar para o início do ciclo e eu verificar o estado. É a condição ainda é verdade? Sim, 1 é ainda inferior a 10. Então ele vai para imprimir isso de novo, ir e, em seguida, incrementa i, e verifique a condição continuamente, de forma contínua, até que, eventualmente, obter para o ponto onde i é 10. Você está indo para imprimir isso 10 vezes e então eu vai equivaler a 10. Você está indo para verificar a condição. 10 é inferior a 10? Não, isso é falso. Assim, este circuito não vai para correr, ele vai quebrar, e você está indo para continuar com o seu código. Então, como vocês podem ver, este é realmente um grande exemplo de um loop que você pode programar em que é executado por um determinado período de tempo. Cada um claro? Sim. ALTO-FALANTE 17: Que tal incremento exponencialmente, é que é diferente de codificação? ANDI Peng: Você can-- vamos sobre isso no próximo slide. Boa pergunta. É anyone-- antes de passar on-- qualquer pessoa em todo confuso, porque este é um conceito muito difícil. Não se preocupe, se you're-- OK. Legal. Tudo certo. Apenas um slide geral. Este loop while está fazendo o exatamente a mesma coisa para o laço era. É apenas escritas de forma diferente. Vocês podem ler os slides em sua conveniência mais tarde. Mas só sei que há múltiplos maneiras de escrever a mesma coisa acontecer com diferentes ansas. ESTÁ BEM. Então, agora nós começamos na questão do que se temos um loop dentro de um loop. Estamos entrando em reais Inception tipo coisas aqui. Quando você quer fazer as coisas múltipla vezes dentro de outras coisas que fazer as coisas várias vezes, quer o que é chamado um laço for aninhado. Para aqueles de vocês que primeiro ver isso e ficar muito confuso, tudo o que estamos fazendo aqui está a ter um loop onde temos uma variável de linha. Mas dentro dela, temos também um outro loop de uma coluna variável chamada. E eu sugiro a todos vocês que estão confusos a primeira manter track-- desenhar isso, chamar a isso. Não tente justa razão através dele, retirá-la. Na sua cabeça, neste pedaço de papel, ou o que quer, linha de escrita, acompanhar o que linha é igual a. Escrever coluna, manter o controle da coluna que é igual a. E acompanhar o que é imprimindo com cada iteração. Cada iteração deste ciclo, toda iteração do laço maior que, só continuar a seguir a lógica. E eu garanto que você, você vai adorar o que você vê, porque é também muito aplicável para seus conjuntos de problemas. Legal. Tudo certo. Então, a coisa mais importante que vocês são, provavelmente, todos pensando agora, são seu problema Definir 1s, que são devidos quinta-feira / sexta-feira. Em seu programa water.c, dica você vai ter para solicitar ao usuário para uma entrada. Dentro de seu programa mario.c você vai ter para usar um laço for aninhado, que é um loop dentro de um loop for, para imprimir um bloco de pirâmide, essencialmente como o que Mario tem que saltar através de. E, em seguida, dentro de sua greedy-- ou talvez Tornar a mudança, se algum de vocês já ouviram falar de isso-- você vai ter que ser muito cuidado com valores de ponto flutuante primeiros. Lembre decimais flutuantes e inteiros não são a mesma coisa. Mantenha o controle de qual é qual. E você está indo para usar instruções condicionais, também. Tudo bem, última coisa. Eu tenho um par de minutos do fim. Style. Então, isso é algo que não faz na verdade, a efectuar a eficiência, ou o funcionamento real do seu código. No entanto, isso nos afeta como seus niveladoras, como seus leitores. Efetua-se, se você estiver tentando encontrar um problema. Ela afeta a legibilidade do código. Então, estilo, como quando você está tentando estilizar um ensaio para Inglês, se você não têm parágrafos, você tem tudo tipo de misturados em uma linha, ele faz com que seja muito difícil para qualquer um para ler o seu ensaio, mesmo se seus pontos são logicamente som. Mesma coisa na programação. Você pode ter horrivelmente obscuro código que SCAZ vai cobrir, e ainda pode executar e função. Mas para nós, como seus assistentes técnicos encantadores, que irão estar lendo e avaliando seus Série de Exercícios, que não é muito agradável. Então, por favor, por amor de nós e de si mesmo, quando você está tentando consertar um problema no seu código, e você está tentando ler o seu próprio código, faça se você seguir algumas convenções que nós vamos passar por cima. Então, em primeiro lugar. Dê suas variáveis ​​nomes significativos. Se você deseja armazenar um número inteiro chamado de idade, por favor, nomeie-idade. Não nome dele altura. Quando você está tentando armazenar uma era na altura, ele faz tudo muito confuso para nós. Nós não gostamos de ser confundido. Você não gosta de ser confundido. Ninguém gosta de ser confundido. Se você estiver indo para criar algo, nomeá-la algo significativo. No entanto, em loop, single variáveis ​​de caráter são geralmente bem. E no loop for, se você quiser apenas i, e j, k, sinta-se livre para apenas fazer isso. Consistente inicialização. Então, o que isso significa? Isso significa que, tecnicamente, teoricamente, você pode iniciar e criar múltiplas variáveis ​​na mesma linha. Assim, por exemplo, posso criar um inteiro chamado scaz_age, e integer chamado andi_age = 20, e um número inteiro chamado jason_age na mesma linha. E eu também pode atribuir apenas um dos eles e não os outros para valores. Pedimos-lhe, por favor, não faça isso. Porque aqui você criou essencialmente três variáveis, mas apenas um deles na verdade, tem um valor. E então, quando estamos tentando ler seu código, ou se você está tentando consertar um problema no seu código, é muito confuso para seguir. Então, só para a sua legibilidade, para nossa capacidade de leitura, não faça isso. Chaves consistente. Algumas pessoas gostam de colocar seu chaves em lugares diferentes. Realmente não importa. Apenas certifique-se que você é consistente em sua próprio código de onde você gostaria de colocá-los. Espaçamento consistente. Se você colocar um espaço depois de um loop for, sempre faz isso. Não basta gostar tipo de fazê-lo em alguns lugares, não fazê-lo em outros. Basta ser consistente. Em segundo lugar, se alguém gostaria para ler o Guia de Estilo CS50, temos oficialmente um guia de estilo que diz-lhe todas estas convenções, além de mais. Está online. É como cs50.net/style ou algo assim. Você pode google. Consistência é a chave. Então não se preocupe o que outras pessoas estão fazendo, apenas certifique-se que você é consistente dentro de seu próprio código. Qualquer um tem dúvidas sobre isso? Sim. ALTO-FALANTE 18: Então a coisa apropriada a ver com a inicialização é apenas tê-los todos em um separado linha, é que o que você está dizendo? ANDI Peng: Então, eu raramente isso aconteça. Mas se você quiser, se você queria para ser como economia de espaço no seu código, ou o que quer, você pode fazer isso. Nós pedimos que você simplesmente não inicializar uma coisa e não os outros. Então, se você quer fazer int scaz_age, int andi_age, int jason_age, isso é bom. Só não inicializar um e não os outros é tudo. Perguntas? Tudo certo. Vou passar a microfone, eo ponteiro laser, e o bastão para SCAZ neste momento. Isto é estranho. Aqui está. BRIAN Scassellati: Obrigado. Como é que para o som? O som é bom? . Excelente. ESTÁ BEM. Então, oi a todos. Vou tentar trabalhar com um exemplo prático com você. E nós estamos indo para usar CS50 de ambiente de desenvolvimento, o que é chamado o Integrated Development Environment. E você já viu isso demonstrada em palestra. E no Conjunto de Problemas 1, você está vai ter uma oportunidade para usá-lo, e brincar com -lo, e se acostumar a ele, porque nós estamos indo para usá-lo pelo resto do semestre. Portanto, neste IDE, você tem o que parece como um navegador de arquivos muito tradicional ao longo de um lado. Você tem uma parte para cima topo onde você está indo para ver o seu código-fonte, o seu Cfile, o código que você escreve. E para baixo fundo, você vai tem uma janela de terminal que você vai usar para tanto compilar seu programa e para executar ou executar seu programa. ESTÁ BEM. Então, só para nos dar um pouco de fundação, em que a janela de terminal, você vai ser usando um conjunto de comandos que são comandos padrão em todo a maioria dos sistemas Unix ou Linux. E por isso, se você já usou qualquer forma de Unix, Ubuntu, ou qualquer um dos outros sabores, estes vão parecer familiares. Se você não tiver, não se preocupe. Não há nada complicado sobre eles. Eles estão apenas usando um diferente sintaxe, uma nomenclatura diferente convenção do que você já viu antes. Então, para listar os arquivos dentro de um diretório particular, eles vão usar um ls comando chamado, ou lista. Se você quiser ver tudo com todos os detalhes, você vai usar um comando argumento de linha com ls -l. E isso vai lhe mostrar tudo em maior detalhe, incluindo as permissões para um arquivo. Para alterar o diretório, você vai usar o comando cd. E você vai ser capaz de mudar o diretório tanto para ir para seu diretório home. Isso é apenas cd tudo por em si, cd com dois dots irá voltar-se uma nível para o diretório anterior. E você também pode cd para um subdiretório, digitando cd e o nome desse subdiretório. Você também pode criar novos diretórios. E nós estamos indo a pé através deste em apenas um minuto. Mas apenas para colocar tudo na tela. Para que você possa vê-los. Você também terá a capacidade para manipular arquivos diretamente a partir da linha de comando. Você vai ser capaz de copiá-los, para movê-los ou removê-los, isto é, efetivamente, para excluí-los. O IDE CS50 lhe dá a plena poder da linha de comando argumentos. E isso significa que você também pode fazer coisas muito perigosas. ESTÁ BEM. Por exemplo, você pode remover, ou que é de exclusão, um arquivo sem pedir para uma confirmação. E você pode até mesmo remover recursively-- que é o traço r flag-- um todo subdiretório e todo o seu conteúdo. ESTÁ BEM. Eles estão listados em vermelho, porque você deve pensar "Danger" cada vez você vê essas coisas. ESTÁ BEM. Tudo certo. Agora, finalmente, as coisas que são vai ser muito valioso para você, existem alguns bons truques para saber como você está navegando através desta janela de terminal. Primeiro, você pode limpar a tela em qualquer momento, apenas digitando em claro. E você vai ver me fazer isso com bastante frequência. Você também pode apenas exibir o texto de um arquivo digitando mais e, em seguida, o nome do arquivo. Você vai então ser capaz de rolar para trás e adiante com que apenas com a barra de espaço e as setas. Se você tem, como fizemos hoje, em palestra, um programa que está sendo executado de forma contínua em loop infinito, você pode parar esse programa de executar, digitando no controle, que está segurando a tecla Control-C. E você pode ter que fazer isso várias vezes. O computador fica muito à frente de você. E às vezes você precisa dar-lhe um par de tentativas antes que ela vai realmente se concretizar. Você também será capaz de tipo através dos comandos que você acabou de digitar usando a tecla para cima, tecla de seta, em seguida, a tecla de seta para baixo. E o que é mais útil é, em vez de digitar nomes de arquivos longos, você vai ser capaz de o Tab para uso autocomplete algumas instruções. Agora vamos demonstrar todos aqueles em apenas um segundo. Portanto, se você não se lembra -los, não se preocupe. Estas são coisas que você vai pegar e usar à medida que avançamos. ESTÁ BEM. Assim, em C-- ao contrário de Scratch-- C é uma linguagem compilada. Isso significa que nós estamos indo tomar uma fonte file-- que é o texto que você escreve, os comandos que você escreve, printf () declarações, os laços, else-- tudo e vamos para dar esse arquivo e entregá-la para um programa chamado o compilador. O compilador, então, tomar que o texto que você escreveu e traduzi-lo em as instruções binários se o seu computador é realmente vai usar. Isso é chamado de objeto ou o arquivo executável. Se você olhar para este arquivo, você está indo para ver o código que você escreveu. Se você olhar para este arquivo, você está indo para ver uma sequência aleatória de personagens que não fazem sentido algum. Isso é porque este é o binário. Não é feito para você estar lendo. No entanto, qualquer hora que você quiser executar alguma coisa, o que você vai estar em execução é o arquivo objeto. Então, quando nós trabalhamos com estes arquivos, vamos escrever um arquivo em C. Vamos então compilá-lo, usando um comando como make que irá invocar o clang compilador para a linguagem C. E que irá produzir um objeto arquivo, tal como um para fora, ou, neste caso, o nome, o meu arquivo, que eu coloquei em. Tudo certo. Então vamos realmente tentar isso. Então, eu vim com um exemplo do que eu queria tentar. E uma das coisas que me fascina é a animação. Então, vamos tentar fazer um pouco de animação usando apenas caracteres ASCII. Personagens que podem imprimir facilmente agora. Então, aqui é a minha melhor tentativa a criar para você a animação de um coelho que funciona através da grama alta. Ali está ele. ESTÁ BEM. Assim, ele não está funcionando ainda, mas ele é ali de pé na grama alta. Agora, se eu fosse um animador, na velha escola versão da animação, o que eu gostaria de fazer é que eu iria produzir uma imagem de este coelho na grama. E então eu iria produzir outra foto-- outro o que eles chamaram cell-- que tinha o coelho apenas ligeiramente movido. E em seguida, um terceiro que tinha o coelho movido um pouco mais. E eu gostaria de produzir um todo sequência destas células. Alguns onde o coelho é longo para o lado esquerdo. E, em seguida, move-se lentamente, uma por um em direção ao meio. E, em seguida, a partir do meio para a direita. E se eu fosse, então, realmente sorte, eu poderia colocá-lo em conjunto e eu poderia animá-los. E não é meu coelho correndo pela grama. Essa é a minha grande PowerPoint engano para o dia. ESTÁ BEM. Portanto, este é tão bom quanto ele ganha. ESTÁ BEM. Então, aqui mais uma vez, aqui é nossa coelho correndo pela grama. ALTO-FALANTE 19: Mais uma vez. BRIAN Scassellati: One mais tempo, tudo bem. Há seu coelho. ESTÁ BEM. Então, hoje o que vamos fazer é que vamos para tentar automatizar o processo de de produzir estas células. Nós não vamos muito chegar ao ponto de ser capaz de colocá-los todos juntos. Mas, nós estamos indo para tentar automatizar o processo de gerar esta sequência. E isso é muito do que animação hoje é como. Ou seja, você não precisa fazer as coisas necessariamente desenhando tudo à mão. Usamos um computador para automatizar partes desse processo. ESTÁ BEM. Então deixe-me passar agora a nossa IDE CS50. E eu criei para US-- e deixá- me aproximar um pouco aqui bit-- tenho criou para nós um ponto de partida. Toda vez que pedimos-lhe para se sentar para baixo e escrever um pedaço de código, o que estamos realmente pedindo para você fazer é que estamos pedindo para resolver um problema. E a maneira que você deve pensar em fazer isso é, iniciando com alguns simples parte dessa solução. E, em seguida, construir a partir dessa parte. E isso é o que vamos fazer hoje. Então, ao invés de tentar tudo de uma vez para escrever todo o monte de código que é indo para produzir aqueles 10 células animação, vamos iniciar em vez disso com uma peça que funciona. E então nós vamos construir um pouco em torno de que e um pouco mais e um pouco mais. Agora, a coisa boa sobre resolução de problemas desta forma é que ele permitirá que você começar sempre com algo que você sabe trabalha e introduzir uma mudança gradual. E isso é uma ótima maneira para aprender como codificar, porque cada vez que fizer uma mudança, você vê o impacto que tem. ESTÁ BEM. Então aqui está o nosso ponto de partida. ESTÁ BEM. Assim, no início do meu arquivo, Eu tenho de hash stdio.h #included. Isso é para que eu possa obter a printf () para trabalhar. Eu, então, eu tenho a minha função principal. E isso ainda parece um pouco arcana ou obscuro para alguns de vocês. Está ok. Tudo o que diz é que a função principal leva meios não arguments-- vazios nada em C. E retornos por convenção, um inteiro. Principal sempre retorna um inteiro, geralmente um código dizendo coisas correu bem ou não correu bem. ESTÁ BEM. Mas principal tem que ter esse formar para nós agora. Eu, em seguida, colocar em três linhas de código. E junto com cada linha de código, eu coloquei um comentário. Agora, uma das coisas que vamos insistir que você faz, e é tão importante prática de programação, é sempre a comentar o seu código. Sempre anote em um Inglês comentário algo que você acha que o código é suposto fazer. Dessa forma, mais tarde, quando você voltar para ele, você pode olhar para ele e você pode dizer, oh, eu me lembro que eu era tentando fazer com isso. Ou quando um TA se senta com você tentar ajudá-lo no horário de expediente, eles podem olhar para isso e ir, eu ver o que você estava tentando fazer, mas em vez disso está presente o que está realmente acontecendo. ESTÁ BEM. Então eu tenho três partes para o meu código, Eu estou indo em primeiro lugar impressão alguns pontos no início. Vou em seguida, imprimir o meu coelho extremamente extravagante. E então algum bocado de pontos no final. E estas três declarações de impressão deve parece familiar para você neste momento. Tudo o que eu estou fazendo na cada um deles é que eu sou imprimir uma seqüência de caracteres. Não há variáveis ​​envolvidas. Tudo é apenas plana. ESTÁ BEM. Então, se eu descer agora à minha terminal-- vamos ver se eu posso pegar isso de volta out-- e eu estou indo para digitar clara novamente. ALTO-FALANTE 20: Usamos o barra dupla a comentar? BRIAN Scassellati: Possa usar o sim double--. Há várias maneiras de deixar comentários em C. Um forma é a utilização do duas barras oblíquas. A outra é a utilização de uma barra e uma estrela e feche com uma estrela e uma barra. Tudo certo. Primeiro de tudo, eu vou começar a navegar por aqui. Então, se eu ir para o meu diretório home, Eu mudei diretórios lá, Eu vou olhar e ver o que é nesse diretório, ls, listar. Eu estou indo para ver que eu tenho tem dois subdiretórios. Vamos fazer deste um pouco maior para que todos nós podemos vê-lo. Eu posso ver que eu tenho tem dois subdiretórios. Eu vou mudar o diretório para entrar na área de trabalho. E eu vou apenas digitar parte dela, e depois é só apertar Tab. E ele vai completar o resto para mim. Chique. Vou olhar e ver na área de trabalho. E agora, eu estou trabalhando na SuperSection que estamos ensinando agora. Então eu vou para o diretório. E, finalmente, olhar e ver. E eu tenho esse arquivo bunny.c. Tudo bem então deixe-me esclarecer uma vez mais. E eu vou agora-- novamente eu sou ainda permanecer nesse diretório e isso está me dizendo que eu estou em esse diretório SuperSection. Eu estou indo para ir em frente e fazer o meu coelho programa. E esse comando, certifique-coelho, ao soar um pouco estranho, também invoca o compilador clang. E ele é produzido para me uma saída que é um funny-- um executável arquivo executável chamado coelho. ESTÁ BEM. Eu posso então, e isso soa pior ainda, executar coelho. ESTÁ BEM. E vamos ver o que ele faz. ESTÁ BEM. Isso é um pouco de o que eu estava esperando. Eu tenho a minha imagem do coelhinho lá, mas eu meio que queria tudo por si só. O que eu perdi? ALTO-FALANTE 21: Corte l ou barra n. BRIAN Scassellati: o Slash n. ESTÁ BEM. Então, vamos voltar aqui. E eu vou sair dessa. E eu vou voltar em um presente. E vamos dar uma olhada agora de minha principal função aqui. Então, o que eu devo fazer? Eu quero terminar a linha. Então, eu vou colocar em um comentário. Vou colocar em um printf (). E o que eu tenho que colocar em? / N. ESTÁ BEM. O que eu tenho para acabar com ele? Ponto e vírgula. Tudo certo. Agora, um dos realmente coisas importantes é ter certeza cada vez que você faz uma alteração em seu código, que você salvá-lo. Se não tiver guardado o seu código, você está vai notar uma pequena estrela lá em cima. E que a estrela diz que você não salvou este código. Se eu compilá-lo agora, não é vai refletir nenhuma dessas alterações, porque o compilador olha para o arquivo que está no disco, não o arquivo que é abrir no seu editor. Tudo certo. Então, vamos salvá-lo e depois vamos certo aqui em baixo, voltar para fora. Venha até a minha terminal. E vamos limpar o espaço novamente. E nós podemos ir em frente e mais um tempo de fazer o nosso programa de coelho. E executar o coelho. Isso não quer trabalhar. Barra errado. Então, se você olhar para o que eu tenho, eu coloquei um / n lá, mas eu tinha a barra errado. Tudo o que o computador faz é muito explícita. ok? Um pequeno erro de pontuação, e de repente você não consegue o que quer. Tudo certo. Então, vamos aumentar novamente para fora. Vamos voltar. Bem fazer essa reparação muito rápida. Vamos colocar a barra à direita. Nós vamos salvá-lo. Vamos zoom. Por alguma razão, isso não é ser feliz, mas vamos em frente e nós vamos voltar para o terminal aqui. Esclarecê-lo. Nós vamos ampliar. E mais uma vez, vamos fazer coelho. E agora com certeza, ele funciona. Hooray. ESTÁ BEM. Então, vamos tentar fazer isso um pouco mais geral. Vamos ver se em vez de apenas imprimir um quadro particular, vamos ver se podemos fazer isso para que possamos obter todas 10 desses quadros animados que queríamos ter. Então, novamente, vamos dar esta um passo de cada vez. Vamos primeiro generalizá-la, não de modo que eu faço todos os quadros, mas então eu faço qualquer um quadro que eu poderia querer. Então, qual é a diferença entre os quadros? É o coelho o mesmo? AUDIÊNCIA: Sim. BRIAN Scassellati: Yeah. Qual é a diferença? AUDIÊNCIA: Posição. BRIAN Scassellati: A sua posição, certo? E como faço para controlar a sua posição? Quantos pontos eu sou colocando no início e quantos pontos eu sou colocando no final. Então, eu tinha cinco anos na começando cinco e no final. Vamos substituir aquele cinco com um loop for. ESTÁ BEM. E eu vou criar um para laço agora que vai dizer, Eu estou indo para imprimir algum número de pontos no início. Eu vou usar uma variável. Vamos dizer, que tal como i o contador no meu loop. E eu vou declará-la em cima. E, em seguida, no loop for Eu preciso fazer três coisas. A primeira coisa que eu preciso fazer é que eu preciso para inicializar i. O que devo inicializar -lo para começar a ser? 0. ESTÁ BEM. Então, eu preciso dizer, o que é a condição de encerramento? Quando devo parar? Bem quantos pontos você deseja imprimir em um presente? AUDIÊNCIA: Five. BRIAN Scassellati: Cinco novamente? Que tal vamos fazer alguma coisa diferente, fizemos cinco. Vamos mostrar que é diferente. ALTO-FALANTE 22: Two. BRIAN Scassellati: Dois. ESTÁ BEM. Então, se eu quero dois pontos, o que devo colocar aqui? AUDIÊNCIA: Três. BRIAN Scassellati: Três. ESTÁ BEM. Quantas vezes é que vai passar? Isso vai passar por três vezes, 0, 1 e 2, certo? Tudo bem, vamos voltar para baixo para dois. Agora vamos ter dois pontos. E o que eu quero fazer cada vez que vou através do laço? O que tem de mudar cada vez que eu passar? ALTO-FALANTE 23: Adicionar um ponto. BRIAN Scassellati: Eu tenho que continuar. Eu estou indo para adicionar um ponto. Eu estou indo para imprimir um ponto, cada vez através do loop. Mas como eu manter o controle de como muitas vezes estive através do laço? Estou usando o i, que variável, que contador. Então, toda vez que passar, eu vou para incrementar o contador por um. Agora, isso é o mesmo para me dizendo i = i + 1. Está ok. Eu poderia fazê-lo isso-- eu gosto do taquigrafia, então eu vou dizer i ++. ESTÁ BEM. Vamos fazer a mesma coisa aqui em baixo na parte inferior. Só eu meio que fiz essa. Vou deixar vocês fazer este completamente. Tudo certo. Então, o que eu deveria escrever aqui? Aqui está o meu loop for. Eu vou fazer um printf () e eu vou para torná-lo assim que eu só imprimir um ponto em que a parte inferior. O que devo escrever dentro deste loop for agora? Bem, primeiro de tudo o que variáveis ​​que devo usar? ALTO-FALANTE 24: j. BRIAN Scassellati: eu poderia usar j. Posso usar o mesmo? Posso usar o i de novo? Sim. Isso é OK, porque o Is que eu estou usando aqui, Eu não preciso de los novamente quando Eu descer a esse ponto. Então o que devo inicializar a i? ALTO-FALANTE 25: 10. BRIAN Scassellati: 0. O que devo verificar? Quantos pontos eu preciso agora no final se eu tenho dois pontos no início? Eu preciso de oito no final, então o que que devo verificar, i menos than-- AUDIÊNCIA: sete, oito, nove. BRIAN Scassellati: Eu ouvi sete. Ouvi oito. E ouvi nove. ESTÁ BEM. Então, nós estamos todos no direito ball-- Jason diz 10. ESTÁ BEM. Se eu precisasse de dois pontos para a primeira, como muitos fazem I-- e eu preciso de oito pontos para o última um-- Eu coloquei um dois lá em cima, o que devo colocar lá em baixo? AUDIÊNCIA: Oito. BRIAN Scassellati: Oito. Porque isso vai contar de zero a sete. E isso é oito vezes através do loop. ESTÁ BEM. E o que eu tenho que fazer no final? AUDIÊNCIA: i ++. BRIAN Scassellati: i ++. Tudo certo. Então isso é muito bom olhar lá. Vamos tentar e vamos ver o que ele faz. ESTÁ BEM. Então, nós estamos indo para salvá-lo. Agradável e salvo. Vamos zoom out. Vamos tentar aqui no terminal. Nós vamos ampliar. Oops. Nós vamos, mais uma vez, fazer o nosso programa de coelho. E vá em frente e executar coelho. E aí está. Portanto, não há o nosso coelho. Onde tem dois pontos no início e oito pontos no final. Todo mundo ainda está comigo? ESTÁ BEM. Por isso, construiu-se. Nós construímos um coelho, um quadro específico. Agora nós temos sido capazes de generalizar que para construir mais, diferentes tipos de quadros. Agora vamos em frente, e ter que gerar não apenas um quadro, mas vamos gerar 10 molduras, onde se lentamente fazer o coelho mover todos do outro lado do campo. Tudo certo. Vamos voltar. E nós vamos tentar agora. Então, o que eu realmente preciso mudar aqui? O que eu preciso mudar? ALTO-FALANTE 26: Você primeiro precisa alterar o número de máximo de pontos no começo. Porque se nós estamos fazendo 10 pontos, ele vai precisar para se escalar. BRIAN Scassellati: Yeah. Então agora eu tenho que tipo de hardwired fazer sempre dois pontos no início e sempre fazer oito pontos no final. Eu quero construir um outro circuito, certo? Porque eu não quero construir apenas uma imagem do coelho, Eu quero construir 10 imagens de coelho. Então eu preciso construir um outro circuito, e como eu passar por esse loop, Eu quero mudar quantas pontos I imprimir no início e quantos pontos eu imprimi no final, com base no qual ciclo através do laço Estou dentro. Tudo certo. Então, vamos começar um outro balcão. Alguém j disse antes, por isso vamos fazer uma outra j. E agora, vamos construir outro para loop. O que se passa dentro desse loop? Este material tem que ir dentro do loop, certo? Será que o coelho tem para ir para dentro do loop? Preciso de um coelho em cada um desses 10 quadros? AUDIÊNCIA: Uh-huh. BRIAN Scassellati: Yeah. Eu quero um coelho em cada dos 10 quadros, certo? Como sobre os pontos em Ao final, eu preciso disso? ESTÁ BEM. Então, eu estou indo para recuar todos eles. Eu estou indo para destacar todos isso, e eu vou bater Tab. E que vai empurrá-los todo um pouco, de modo que é fácil para mim para ver o que está no circuito. E então eu vou acabar com ela. Digamos. ok? Agora, neste loop que Estou building-- whoops, que fazer para que você possa see-- Eu tenho o meu contador j. Vou começou a 0. Quantas vezes eu quero de passar por este ciclo? AUDIÊNCIA: 10 vezes. BRIAN Scassellati: 10 vezes. Então, qual número devo colocar aqui? AUDIÊNCIA: 9, 10. BRIAN Scassellati: 9, 10, alguém tem que dizer 11, certo? Eu queria dois pontos antes e colocá-i inferior a 2. Eu queria oito pontos, Eu coloquei i inferior a 8. Agora eu quero passar por 10 vezes, então eu coloquei j menos than-- AUDIÊNCIA: 10. BRIAN Scassellati: 10. Aí vamos nós. E o que eu faço no final para j? ++, Incrementá-lo. ESTÁ BEM. Agora, aqui está a parte complicada, o que é vai acontecer agora, se eu faço isso? Sou eu que vou imprimir 10 frames? ALTO-FALANTE 27: Eu acho que todos eles vai ser o mesmo. BRIAN Scassellati: Eles vão tudo ser o mesmo, certo? Porque todos eles ainda estão indo para colocar dois pontos no início. Mas eu não quero que todos eles têm dois pontos o início. Quantos pontos eu quer no início? AUDIÊNCIA: Mudando. BRIAN Scassellati: I quer mudar, certo? Então, o que eu tenho aqui que está mudando cada vez que o circuito atravessa? AUDIÊNCIA: Número de pontos, j. BRIAN Scassellati: j, o número de pontos. Então, eu posso mudar isso seja j. A primeira vez através do loop, o que é que vai ser? O que faço para definir j a pelo primeiro? AUDIÊNCIA: 0. BRIAN Scassellati: Então, quantas vezes eu vou fazer isso? 0. A segunda vez através do laço, j de vai ser um porque eu incrementá-lo. Quantos pontos eu vou imprimir? 1. A terceira iteração do loop, quantos pontos é que eu vou imprimir? AUDIÊNCIA: Três. BRIAN Scassellati: j vai ser 3. Quantos pontos eu vou imprimir? Oh, desculpe, j vai ser 2. Quantos pontos eu vou imprimir? AUDIÊNCIA: 2. BRIAN Scassellati: 2. OK, então eu vou continuar incrementando que à medida que avançamos. Como cerca de abaixo? O que se passa aqui? Eu não quero sempre 8 na extremidade mais? ALTO-FALANTE 28: 10. BRIAN Scassellati: Eu quero 10 pontos? Eu quero que ele mude também. Então como é que eu quero que mudar? AUDIÊNCIA: [inaudível]. BRIAN Scassellati: Bem, se eu tem cinco pontos, no início, quantos de ponto que eu recebo no final? AUDIÊNCIA: Five. BRIAN Scassellati: Se eu tiver seis pontos, no início, quantos eu chegar no final? AUDIÊNCIA: Four. BRIAN Scassellati: Se eu tenho sete pontos, no início, quantos eu chegar no final? AUDIÊNCIA: Três. BRIAN Scassellati: Se eu tenho j tem pontos no início, quantos eu chegar no final? 10-J. ESTÁ BEM. Então, vamos tentar isso. Então, eu estou indo para salvar nosso programa de coelho. Mais uma vez vamos diminuir o zoom. Vamos descer para o nosso terminal. Nós vamos limpá-la. E aumentar o zoom. Nós vamos fazer o nosso programa de coelho, novamente. E nós vamos executá-lo. Uh oh. Segure-se, vamos diminuir o zoom. Será que eu recebo 10 quadros? Bem, como muitos coelhos eu vejo lá em cima? 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Eu tenho 10 quadros. Eles são todos iguais? AUDIÊNCIA: É. Não. BRIAN Scassellati: Não. Que primeiro, o coelho está longe do lado esquerdo. E aqui, o coelho é muito sobre a ALTO-FALANTE 29: Certo. BRIAN Scassellati: Então, o que eu esqueci de fazer? ALTO-FALANTE 30: Iniciar uma nova linha. BRIAN Scassellati: Esqueci-me para iniciar uma nova linha, novamente. Mesmo erro que eu fiz antes. Tudo bem, vamos corrigir isso. Agora, eu ainda tenho o código lá para fazer uma nova linha. Por que não deu certo? ALTO-FALANTE 31: Não é dentro do loop. BRIAN Scassellati: Oh, não é dentro do loop. Está certo. Ele está sentado fora aqui. E o loop for é tudo que está dentro desse texto. Então, eu estou indo para mover esta dentro do loop for. E eu vou Tab na frente dele para mostrar que é no lugar certo. E agora, vamos salvá-lo novamente. Vamos diminuir o zoom. Vamos passar para o nosso terminal. Mais Zoom. Nós vamos refazer nosso programa de coelho. E agora, agora temos os nossos 10 frames. [APLAUSO] BRIAN Scassellati: OK. Assim. Aqui é o nosso aninhados para loops. Fomos capazes de gerar no loop interno quantos pontos eu queria para imprimir no início, no final. E o circuito externo controlado quantos quadros eu estava construindo. Nós começamos com um pouco núcleo do problema, e nós construímos a partir desse ponto. Tudo certo. Vamos fazer mais um passo. Esta pronto? Há uma coisa aqui, onde nós realmente tipo de got mais complexidade do que precisamos. Vamos dar uma olhada. Assim, em nosso programa de coelho, se eu diminuir o zoom aqui, Eu realmente fazer algumas das mesmas coisa uma e outra vez. O que eu faço que é uma espécie de a mesma coisa repetido duas vezes? ALTO-FALANTE 32: Imprimir os pontos. BRIAN Scassellati: Sim Eu imprimir esses pontos duas vezes. Realmente, eu deveria ter este comentário aqui embaixo. Eu imprimir alguns pontos no começando, certo aqui em cima. E então eu imprimir alguns pontos no final. E eu faço tipo de exatamente a mesma coisa. O que nós estamos indo para começar trabalhando em nas próximas semanas é ser capaz de tomar essas blocos de código que usamos uma e outra vez, e por meio de um processo de chamado de abstração, vamos retirá-los e escrevê-los uma vez para que possamos, em seguida, reutilizá-los uma e outra vez. Então, vamos tentar isso. Pronto? Nós vamos levar este bloco de código. E eu vou tirá-lo de lá. E eu vou define-- para baixo, na parte inferior, Eu vou escrever uma nova função. Ele não vai retornar nada. E eu vou chamá-lo printDots. Vai levar um argumento, um número inteiro que diz howManyDots devo imprimir. E agora em vez de imprimir j pontos, eu vou imprimir dizer howManyDots devo imprimir. E há um pequeno problema aqui. Alguém sabe o que é? O que eu tenho que está listado aqui que não está definido? AUDIÊNCIA: [inaudível] BRIAN Scassellati: Bem como muitos pontos é definido à direita aqui, mas eu estou usando essa variável i. Então eu vou levar essa variável i e eu estou indo para defini-la para baixo aqui ao invés. Então, agora ele vai estadia-- oops, tem o caps lock em somehow-- eu sou vai manter i para baixo aqui. Então agora aqui está a minha pequena função ou sub-rotina, e ele diz, quantos pontos é que eu vou imprimir? E ele vai passar por este ciclo e imprimi-las uma e outra vez. Posso, então, modificar meu programa aqui em cima. E o que eu chamar essa função? printDots. Então, eu vou chamar printDots. Quantos pontos eu quero imprimir pela primeira vez perante o coelho? AUDIÊNCIA: j. BRIAN Scassellati: j. Quantos pontos eu quero imprimir no final, após o coelho? 10-J. E há uma coisa que eu estou ausente. Como você viu na palestra de hoje, vamos declarar printDots -se acima para dar o protótipo. ESTÁ BEM. Então o que eu fiz é que eu tentei isolar a parte reutilizada de código que eu fiz uma e outra vez. E eu tentei puxá-lo para fora de modo que tudo isso está contido em um só lugar. Dessa forma, se eu tenho um erro em algum lugar, Eu só tenho que consertá-lo em um ponto. Tudo certo. Então, vamos salvá-lo. E vamos ter certeza que funciona. Então, vamos sair. Vamos voltar ao nosso terminal. Nós vamos ampliar. Nós vamos fazer esse processo de coelho. Oh. E isso está me dado um aviso. O que é que está me dizendo? Bem em qualquer destas vezes, você quer sempre para rolar até a primeira error-- agora em um presente, eu só tenho um. Ela me diz em bunny.c, na linha 8, coluna 9, há um problema. Diz, você declarou esta i variável e você não tê-lo usado. Agora normalmente, isso é não o pior erro. Isso é fácil de corrigir. E, de fato, podemos voltar no. Podemos voltar ao coelho. E, neste caso, todos nós tem a fazer é se livrar de mim, porque não estamos usando i dentro principal anymore. Nós apenas estamos usando- dentro da nossa sub-rotina. Então, vamos guardar isso. Vamos voltar. E aumentar o zoom. Vamos mais uma vez fazer coelho. E há de novo são os nossos 10 quadros. ESTÁ BEM. Toda vez que você está dado um procedure-- Sim. ALTO-FALANTE 33: Tenho um-- Estou confuso. Você pode voltar para o código? BRIAN Scassellati: Yep. ALTO-FALANTE 33: Então, quando você escreveu o seu protótipo, o argumento que você tinha-o nomeado foi chamado howMany? Mas, below-- BRIAN Scassellati: Oh yeah. ALTO-FALANTE 33: --called-lhes algo diferente, eu não entendo. BRIAN Scassellati: Por eles são diferentes. Então essa é uma grande questão. Portanto, a questão era, até aqui, eu escrevi howMany, e lá embaixo, eu escrevi howManyDots. A razão é que em seu protótipo, ele realmente não está prestando atenção para os nomes que você está colocando em. Tudo o que realmente se preocupa com é que é um inteiro. Ele quer saber a forma do que você está colocando em. Agora stylistically-- oops-- o que eu deveria Não, é que eu gosto de fazer essas jogo. ESTÁ BEM. Porque isso vai ser mantê-lo mais fácil para mim para recordar. Mas esse foi o meu erro Sim. ALTO-FALANTE 34: E assim para o protótipo a funcionar, basta escrever essa linha, escrever o protótipo, permite que a função que vem logo abaixo dela para ir para a final e recuperar o que isso significa? BRIAN Scassellati: O que isso significa é quando o compilador passa por, que vai desde o topo da seu código para o fundo. E o que este protótipo é, é que é basicamente uma promessa. Ele diz, não vai ser uma função definida em algum lugar. Vai ser chamados printDots. E isso vai levar um argumento que vai ser um inteiro e ele vai voltar nada, tipo void. ESTÁ BEM. Eu prometo a você que vai ser definido em algum lugar abaixo da estrada. Mas sempre que você ver que, como você ir para baixo através do resto da minha função principal, eu quero você tratar isso como uma função que leva uma entrada inteiro. E assim, quando o compilador vai para baixo por isso, ele vê essa promessa. E quando ele fica para baixo, continua indo, continua indo, ele encontra pela primeira vez printDots é mencionado. E ele diz: Oh, você está dando me este j. j é um número inteiro. Bem, você me prometeu que iria Ser um inteiro e isso é certo. Está ok. E, em seguida, finalmente, para baixo na parte inferior, antes de eu chegar ao final da minha arquivo, eu fazer bom em minha promessa e eu defini-lo. ok? ALTO-FALANTE 35: Então, o saves-- programa vai economizar espaços em branco que ele vai voltar e enche no final? BRIAN Scassellati: Não é sobre a alocação de memória. É realmente apenas sobre o que tipo que você está esperando para ver. Caso essa coisa ter um argumento ou cinco argumentos? Deve tê-lo ser números inteiros que lhe é dado, ou cordas? Isso é tudo que ele está olhando a fazer é verificar, você está me dando o direito tipo de argumento. ok? Tudo certo. Deixe-me deixá-lo com um outro pouco para olhar. Arte ASCII não é o grande modelo de animação, como é hoje. Mas algumas pessoas, é claro, levar as coisas e empurrá-lo para os seus extremos. Isto é, como demonstrado David em palestra, um pedaço de código que você deve, em nenhuma circunstância tentar duplicar a si mesmos. Porque é terrível estilisticamente. Na verdade, ele é projetado para ser o mais difícil possível para ler. ESTÁ BEM. Assim, para fazer de novo, vamos fazer zoom aqui. Eu estou indo para ir agora, altere o diretório. Eu estou indo para ir até um nível, de volta ao meu espaço de trabalho. Vou altere o diretório para esta outro diretório que eu criei. E este é o Internacional Ofuscado C Programação Concurso. Meio ofuscado como difícil como possível compreender. Então, por favor, não se assuste se você olhar para isso e ir, eu não posso ler isso. Esse é o ponto dele. ok? Mas, temos esta programa maravilhoso que eu sou indo olhar apenas digitando mais. E vamos ver se consigo diminuir o zoom apenas um pouco, para que você possa vê-lo E este é o programa. É nomeado endo.c. E parece que este balde com tipo das letras F-L-L-I-D em que. Este é na verdade um programa. Está escrito no mais obscuro maneira que os autores poderiam possivelmente escreva. Mas é um pequeno pedaço maravilhoso que gera um modelo de dinâmica de fluidos. E assim vamos dar que o modelo de uma entrada que olha como este, de um staired conjunto de recipientes com algum líquido, alguns líquido, no topo. E nós vamos ter que simular o que está acontecendo com ele. Então, eu vou chamar essa função, endo. E eu vou dar-lhe que arquivo de entrada que eu tive. E não é a nossa epítome da arte ASCII. Um simulador de dinâmica de fluidos completo funcionando em apenas algumas linhas de código. Agora, o que é realmente muito surpreendente sobre este pequeno programa é que eu quero parar agora, então eu vou usar o comando? AUDIÊNCIA: Control-C. BRIAN Scassellati: Control-C. ESTÁ BEM. Então, eu vou usar Control-C. C Isso vai impedi-lo. Vou limpar novamente. E agora eu vou chamar o programa, executar o programa, utilizando-se como entrada. E vamos ver a dinâmica de fluidos simulação do mesmo ponto de fusão. ESTÁ BEM. Por favor, não deixe que o programa ser a coisa que te confunde. É apenas para que possamos terminar em algo legal e interessante. ESTÁ BEM. Boa sorte com seus conjuntos de problemas. Nós vamos ser felizes para responder perguntas depois da aula. Muito obrigado, pessoal.