JASON HIRSCHHORN: Bem-vindo à CS50 seção, todos. Meu nome é Jason Hirschhorn. Eu sou um monte de TFs seu, mas um monte de pessoas venha se juntar a nós estudantes, extensionistas e estudantes on-line tentando olhar a seção se perdeu sua seção naquela semana ou só pegar se quisessem rever algumas material. Assim, de acordo com o programa, que todos de que você leu, correto? Eu vejo um monte de acenos de cabeça. Seções lhe proporcionar oportunidades para explorar o campo de material em um ambiente mais íntimo, bem como mergulhar atividades hands-on. Então, isso é basicamente o que estamos vai estar fazendo a cada semana. Nós vamos passar por aquilo que temos determinado a ser o mais importante tópicos abordados na aula, e os Provavelmente a mais útil e também mais provável que venha em conjuntos de problemas e em testes, e na sua codificação vida fora do CS50. Então, nós estamos indo para ir para esses temas, discuti-los, passar por cima deles, responder a quaisquer perguntas que vocês têm, e então vamos fazer um monte de problemas práticos de codificação. Vocês todos trouxe laptops, o que é fantástico. Esta é uma aula de ciência da computação. No entanto, muitos dos exercícios que fazemos, você não vai precisar de seus laptops para. Você pode fazê-los em uma folha de papel. É assim que você está indo para fazê-las no quizzes. E, de fato, essa é uma ótima maneira de realmente sei que você como fazer alguma coisa, se você não tem 50 Verifique a dependem ou Fazer a confiar em nós, dizendo você cometeu algum erro. Então, você é bem-vindo ao código da run.cs50.net aparelho ou, o que é outra ferramenta que lhe permite codificar on-line, mas eu também recomendo, se você ainda não experimentou, usando uma folha de de papel e tentar estas práticas problemas em uma folha de papel. Porque mais uma vez, que é em última análise, o que você vai ser pediu para fazer em quizzes. Então, vamos começar com o nosso agenda para hoje. Nós vamos passar por cima de algumas normas para nossa seção, então vamos mergulhar em matrizes, funções e linha de comando argumentos, que é o que vocês cobrimos na semana passada, em palestra e segunda-feira, eo que você vai cobrir mais de amanhã. E então, finalmente, vamos para falar sobre pset2. Se eu pudesse ter um show de mãos se não olhei para o problema conjunto de dois especificação. Vamos dizer todos. Fantástico. Vamos falar sobre conjuntos de problemas um pouco, mas se você ler o conjunto de problemas especificação, que é tudo que você precisa fazer. Se você ler isso antes de vir para classe e seção na terça-feira, você vai ser uma ótima posição. Podemos percorrer o conjunto de problemas, que é o que nós vamos para fazer no final. Nós vamos passar por a lógica, certifique-se todos estão na mesma página. Eu quero que você seja capaz de sair terça-feira me sentindo muito confortável com o que você precisa fazer para o conjunto de problemas desta semana, e se você não fizer isso, eu vou feliz ficar depois e trabalhar com você. Mas isso é uma coisa que você tem que fazer, mas eu acho que seria muito inteligente, apenas para ler o conjunto de problemas especificação de classe na terça-feira, que soa como uma muitos de vocês fizeram. Vou começar com uma agenda cada classe então você sabe para onde estamos indo. Isso também é útil para pessoas que assistem online, porque cada seção é codificado por cores, por isso, se você quiser vir para trás e apenas assistir a 10 minutos antes que toda a seção de 90 minutos, você pode simplesmente ir até a seção código de cores e olhar para essa parte. Então, eu tentei dividi-las em bom módulos que permitem a você - se você quiser voltar e rever, ou outros alunos que são apenas vendo uma seção para rever - para encontrar a coisa específica que querer prestar atenção para e aprender mais sobre. Doce. Normas. Eu sou um líder FOP no campus. Eu não sei se alguém fez FOP. Alguém fazer FOP? Uma pessoa fez FOP. Duas pessoas fizeram FOP. Incrível. Então FOP é o primeiro ano ao ar livre Programa de Orientação. Tomamos calouros para a floresta e fazer das experiências mais mágicas de suas vidas, correto? Sim. Soa sobre a direita. Então, eu só queria começar a nossa primeira seção discutindo algumas normas para a classe e nosso relacionamento porque eu acho que eles são muito importantes. Em primeiro lugar, como aqueles que são minha seção receberam e foi discutida em que e-mail, eu adoro isso. Esta é a minha parte favorita do ano. Eu estive tão animado. Estive aqui durante horas de hoje. Não deixei este edifício, exceto para ir comer, porque eu amo CS50 seção, amo ensinar, eu gosto muito de trabalhar com vocês. Uma das minhas maiores prioridades, se não meu prioridade número um, não só para esta classe, mas incluindo a minha outra classes e extracurriculares, é apoiar vocês e ajudar vocês, e fazer o meu melhor para ter certeza de que você caras têm um maravilhoso, divertido, produtivo envolvente, emocionante experiência nesta classe. Isso é o que eu estou comprometido. É por isso que eu amo fazer isso. Esse é o meu número de uma coisa, apoiar vocês. Se você tem alguma dúvida sobre palestra, o conjunto de problemas, seção, vida, mesmo se você quiser falar sobre vida, se sentir livre para chegar por favor. Você tem o número do meu telefone celular, você tem meu e-mail endereço, você tem a minha GChat. Você pode contactar-me em qualquer uma ou todas aqueles que sempre, mas provavelmente não vai conseguir a resposta sempre. Eu tento e voltar dentro de 24 horas. Muitas vezes será dentro 20 minutos ou 24 minutos. Eu deveria ter dito que para torná-la em paralelo. Mas você vai ter uma resposta muito rapidamente. Se você me texto de uma hora antes do conjunto de problemas é devido, vou acalmá-lo para baixo e fazer exercícios de respiração profunda com você, mas se você ainda não começou, você provavelmente não vai terminar, e Eu realmente não posso ajudá-lo lá fora mesmo que eu vou tentar o meu melhor. Então eu vou fazer de tudo Eu posso apoiá-lo. Por favor, sinta-se livre para se chegar é na seção de novo, em horário de expediente se você me ver, ou até mesmo do lado de fora. Estou feliz por marcar um horário para atender e trabalhar com problemas com ou passar por cima de material. Assim que é o número um, suporte. Eu vou fazer tudo que eu pode apoiá-lo. Número dois, reunião no meio. Tanto quanto eu gostaria de ser, eu sou não é onipotente ou todo-poderoso ou onisciente, então eu não sei tudo o tempo se o que estou fazendo está ficando transversalmente, se a maneira que eu estou ensinando a tópico ajuda você a aprender, ou se você estão confusos sobre um tópico, mas não levantar a mão ou pedir-me ou me envie um e-mail. Ou mesmo se você, mais uma vez, estão confusos sobre algo sobre o conjunto de problemas. Se você não chegar a mim, Eu não posso saber com certeza. Eu vou fazer o meu melhor para o check-in em Vocês, certifique-se que tudo é indo bem, tento ensinar as coisas de uma maneira que será propício para a maioria dos seus estilos de aprendizagem, mas se há nada que eu possa fazer, me avise. Ao longo destas linhas, se você quiser alguma ajuda com o conjunto de problemas, eu sou mais do que feliz em ajudá-lo com o conjunto de problemas. Nós vamos fazer um monte de que na direcção da segunda metade desta seção. Mas se você ainda não leu o problema define trás e ainda não assistiu a caminhada através e não assisti os shorts e esperando que eu te ensinar tudo o que foi filmado on-line ou que você pode encontrar em CS50 estudo, isso não é realmente justo comigo ou com seus outros colegas. Então, por favor, eu estou mais do que feliz em ajudar vocês, mas vocês tem que me conhecer em meio. Temos toneladas de recursos para Você está disponível no CS50. Eu mencionei alguns deles. Por favor, tirar proveito deles. Se você está confuso, eu estou mais do que feliz para ajudá-lo explicá-las em de outra forma, mas não é justo se alunos mostram-se em horário de expediente, não começou nada, e é Quinta à noite e eles estão esperando o TF para caminhar com eles através de cada coisa para o conjunto de problemas devido ao meio-dia do dia seguinte. Faz sentido? Mais uma vez, por favor, nos encontrar no meio. E, finalmente, as altas expectativas. Eu vou estar de classificação todo mundo que é na minha seção, ou marcando o seu conjuntos de problemas. Você não voltaram problema definir zero ou um ainda. Estamos muito sobre isso. Levou algum tempo para finalmente estabelecer seções, e agora podemos começar a classificação. Eu vou levá-los de volta para você o mais rapidamente possível. Esses são alguns dos meus orientandos lá fora. Eu vou levá-los de volta para você o mais rapidamente possível. E para o problema de conjunto de dois, estaremos em programar e vamos começar fazê-los para você muito rapidamente após você transformá-los dentro Quando você começa o seu conjunto de problemas para trás, você terá pontuação, como você sabe de leitura do currículo - exatidão, projeto, escopo e estilo pontuações. Você também terá comentários. Os comentários são mais importantes que os escores. Eu acho que é seguro dizer que. Pontuações são apenas um número de um a cinco. É difícil ler naqueles. É difícil melhorar daqueles. Mas os comentários serão apontar específico coisas que você fez bem ou áreas você pode melhorar e dar-lhe alguns ideias para o futuro ou alternativa maneiras de fazer as coisas. Então, por favor, por favor, por favor leia através dos comentários. Eu coloquei um monte de tempo em esses comentários. Por favor, leia com eles e não apenas deslocar para baixo para o fundo do PDF, procure a sua pontuação, ou ir em linha e encontrar a sua pontuação, e depois ignorar os comentários. Isso não é como você está vai ficar melhor. Isso não é como você está indo para aumentar sua pontuação final, apenas olhando para as pontuações. Por favor, olhe esses comentários. E ao longo da linha de grandes expectativas, mais uma vez, como eu disse, você podem ser pontuadas de um a cinco. Dois, Três, e quatros são os grande maioria das contagens você vai estar recebendo. E fives estão realmente raro. Há sempre coisas o que podemos fazer melhor. Sempre que eu codificar um programa, não há sempre algo que eu poderia ter feito melhor. Então, ao invés de dizer que você começa um período de cinco o tempo todo em tudo e fez tudo perfeito, eu não acho que qualquer de nós realmente acreditamos que nós - ou Felizmente, nós não fazemos tudo aperfeiçoar o tempo todo. Então não se preocupe se você não recebi cinco. A cinco não mapeia para um A, um quatro não mapeia para um B, três não não mapa em uma C. Isso não é como as pontuações trabalhar. Como Davi já disse muitas vezes, em final do semestre todas as suas pontuações e entrada de mim, seu TF, se reúnem e determinar a classificação final para você. Mas, novamente, não é cinco, A, quatro, B, et cetera. Então eu vou ter grandes expectativas para vocês. Vou esperar um bom problema conjuntos e eu vou dar o feedback como tal. E não vai dizer que você é indo para obter um grau pior. Está classificada em termos de o seu progresso de semana zero para o final do curso. E, finalmente, em termos de alta expectativas em sala de aula, eu adoro quando as pessoas participam. Entendo que algumas pessoas se sentem mais ou menos confortável participante. Outras pessoas estão participando não levantando a mão e falando o tempo todo. Mas nesta classe vão ser fazendo uma série de pequenos problemas, um monte de mini perguntas, e, em seguida, alguns maiores problemas de codificação. Então, definitivamente trabalhar estes exercícios fora quando fazê-las em seu computador ou em uma folha de papel. Mas eu também vou te dar algum tempo antes Alguém sempre tem que responder a algumas das perguntas que eu peço. Então porque eu vou dar-lhe algum tempo para pensar sobre isso, porque nós vamos fazer as coisas de parceiros, às vezes, Vou esperar que todos para ser contratado um pouco. E por falta de um termo melhor, não provavelmente será chamada fria, que é o lugar onde todo mundo vai ter a chance pensar sobre a resposta, e, em seguida, Eu ligo para você, e, em seguida, você vai dizer a resposta. Não se preocupe ou se assustar com isso. Já fiz isso no passado e nós encontramos que é muito mais bem-sucedido, também ler a pesquisa educacional em que a determinar se era ou não um boa tática. É muito útil, especialmente se você dar aos alunos tempo para pensar sobre o respostas e não torná-los apenas vir e dizer isso logo de cara. Mas se você não se sentir confortável responder, eu também sou muito bom em sentindo que fora, e nós não vamos colocá-lo no local, especialmente em a câmera, apesar de nenhum dos você está na câmera agora. Portanto, estas são as normas que eu tenho. Só mais uma coisa ao longo das linhas de encontrar no meio. Eu vou dar a vocês um monte de feedback. Por favor, me dê um feedback bem. Há um site, sayat.me/cs50. Portanto, é um feedback honesto. Se você quer dar a ele durante a seção, Eu recebo um e-mail sempre que isso acontece. Vamos fazer uma pausa um pouco, então eu vou olhar através do feedback depois. Se você tiver qualquer feedback, por favor, dê-me lá. Se você me dar feedback sobre o Q, que é maravilhoso, mas esse é o guia o que você faz no final. Mas isso vai ser no final do semestre para Eu não vou ser capaz de tirar qualquer um que feedback e transformá-lo em ensinar vocês melhor. Então, por favor, se você tem qualquer feedback, dê para mim. Eu amo feedback. Back to FOP, temos o feedback o tempo todo. Você pode me dar vantagens, coisas boas, deltas, coisas que eu posso melhorar. Você pode comentar sobre minhas roupas. Isso não vai ser tão útil, mas você é bem-vindos para comentar sobre qualquer e tudo. Por favor, por favor, me dê feedback. Eu valorizo ​​muito isso e Significa muito para mim. Mais uma norma, divertido. Nós vamos ter um monte de diversão. Espero que neste curso, você vai tem um monte de diversão. Teremos doces na seção. Teremos música. Estaremos espero conhecer um outra um pouco bem, então eu quero que este seja um divertimento, experiência envolvente. Eu sei que alguns de vocês já dormiram em as palestras que você teve hoje mais cedo, por isso espero que não vai ser agora o caso. E se é o caso agora, apenas não ronco porque isso poderia ser travado na câmera. Doce. Quaisquer dúvidas, comentários ou preocupações Antes de passar qualquer coisa temos falou? Grande. Então, nós estamos indo para ir em matrizes primeiro. Isto é como você fazer um array. Nós já vimos isso antes. Você tem um tipo de dados, você tem um nome, e então você tem um tamanho. Bem aqui, eu crio duas matrizes. O primeiro é um conjunto de caracteres, e tem 26 espaços. O segundo é um array de pontuação, e tem três espaços de três inteiros. Sim? ALUNO: São todos esses slides disponível em algum lugar para nós? JASON HIRSCHHORN: Ótima pergunta. A pergunta era: são todos Esses slides disponíveis? Sim. Todas estas lâminas estará disponível, e, no futuro, eu vou enviá-las para antes seção. Hoje, porém, porque este é o primeiro semana, tivemos um início tardio. Por isso, normalmente, você vai ter esses slides, mas elas estarão disponíveis on-line e Eu vou enviá-las para você logo após a aula. Quaisquer outras perguntas? Então, novamente, as matrizes são caixas, por falta de uma palavra melhor, que detêm múltipla elementos de um tipo de dados, e eles estão ao lado do outro na memória. E assim, mais uma vez, esta é a forma como você pode fazer dois tipos de matrizes. Então, depois que você fez com sua matriz que a primeira linha - pontuação int, suporte três, perto do suporte - você quer inicializar. Você quer colocar alguns valores lá. E é assim que você colocar alguns valores em lá, basta escolher o indice e escrever o número. Vamos tirar esta na placa. Todos podem ver? Todo mundo pode ver. Doce. Então isso vai ser meu array chamado Scores. Como você pode ver, é o tamanho três. Há três caixas de lá. Cada um pode caber o que tipo de tipo de dados? ALUNO: Integer. JASON HIRSCHHORN: Um inteiro em um presente. Nós escrevemos dezenas int, ea primeira palavra é o tipo de dados que vai ir nas caixas dessa matriz. Então, eu posso encaixar três. Por que eu tenho zero até lá na placa? Por que dizer pontuação de zero é igual a 1? Lembre-me de seu nome. ALUNO: Kurt. JASON HIRSCHHORN: Kurt. ESTUDANTE: sim. JASON HIRSCHHORN: Por quê? ALUNO: Porque o primeiro índice é zero, vamos começar a contar do zero. JASON HIRSCHHORN: Então, vamos começar a contar do zero. Isto é exatamente correto. Esta é a parte confusa e viagem vontade você, especialmente quando você está tentando percorrer matrizes, o que vamos fazer daqui a pouco. Começamos a contar do zero. Então, se eu quiser se referir ao primeiro caixa, não é uma caixa. Infelizmente, é caixa zero. A segunda é uma caixa, e no presente caso, o terceiro é uma caixa de duas. E sobre a caixa três? Onde caixa três é? Ou se eu quero fazer contagens, suporte três, faixa estreita, o que é isso? Então, você disse que o personagem nulo. Quaisquer outros pensamentos? O que é o suporte de marcar três suporte? ALUNO: Realmente não existe porque só definida como pontuação, suporte de três. JASON HIRSCHHORN: Então você diz ele realmente não existe. Em alguns casos, quando estamos lidando com cordas, geralmente nós vamos colocar um valor nulo personagem no final. Nós vamos chegar a isso em um segundo. Mas, neste caso, não há há uma terceira caixa aqui. Assim, a última caixa em qualquer matriz tamanho é menos 1. Então, se temos uma matriz de tamanho n, a primeira caixa está no zero, a última é em n menos 1. E, neste caso, ela não existe. Há algo aqui em memória, mas não é o nosso. Nós não ele próprio. Nós não pedimos para ele. Portanto, se tentar acessá-lo, o que vamos fazer um pouco, estamos indo provavelmente para entrar em apuros. Neste caso, estou inicializando meu matriz com três variáveis. Estamos colocando uma em caixa zero, um dois na caixa um, e três na caixa dois. Alguém tem alguma dúvida sobre inicializar um array? Então nós fomos ao longo deste agora. Scores, suporte de três, perto do suporte, que não existe. Estamos a zero indexados em ciência da computação, então começamos a contar do zero. A última caixa disponível para nós, é a terceira caixa, mas a caixa é chamado número dois. Lá em baixo, esta é uma alternativa maneira de inicializar arrays. Assim, em vez de criar uma matriz sobre linha, preenchendo a primeira caixa e, em seguida a segunda caixa, em seguida, a terceira caixa, você pode fazer tudo em uma única linha. Então, nessa linha, ambas as matrizes. Isso cria a mesma matriz exata como o que nós criamos aqui, mas só faz isso em uma linha. Agora nós criamos nossa matriz. Normalmente, uma vez que você criar uma matriz, você quero fazer alguma coisa com ele, se que é preenchê-lo ou fazer as coisas de fora e imprimi-los na tela. Neste caso, estamos passando por nossa conjunto pontuações, que inicializado em a primeira linha aqui em cinza. E, em seguida, na segunda linha, nós começamos iteração através da matriz. Alguém tem alguma dúvida sobre a estrutura de um loop? Então este é o loop for. Nós temos nossa condição inicial, e, em seguida, nossa condição final, e então nós iteração, i, cada loop. E nas chaves no presente para loop, o que acontece se eu fosse para executar este programa? Alguém pode me dizer o que teríamos? [? Matu? ?] Matu: Imprima todos os resultados em cada linha. Seria imprimir cada pontuação em uma linha separada. JASON HIRSCHHORN: O que exatamente seria imprimir? ALUNO: Seria imprimir um, depois dois, depois três. JASON HIRSCHHORN: Exatamente. Ele iria imprimir um, depois dois, depois três, cada um em linhas separadas, porque vamos através da matriz e você vai ver que o segundo, o printf declaração, pontuações i. Assim, na primeira rodada por meio de nosso para loop, i é igual a zero, o que significa que estamos ficando o valor em pontuação de zero - que, se voltar para nosso diagrama, é um - e enchimento em - oh, ele diz que c. Isso deve ser% d. Vou corrigir isso em um pouco quando Eu entrego isso para vocês. Mas nós estamos apresentando um inteiro por isso deve ser% d aqui, não% c. O que é% c para? ESTUDANTE: Caráter. JASON HIRSCHHORN: Caráter, exatamente. O que é o outro? Se você não quer fazer d% para um inteiro, o que mais você pode fazer? ALUNO: i. JASON HIRSCHHORN:% i, exatamente. Então, qualquer dúvida sobre a iteração através da matriz? Então o que acontece se não fizermos isso? Em vez de fazer i é inferior a três, nós i é menos que ou igual a três. O que acontece quando executar esse código? Sim, Annie? ALUNO: Eles estão indo para imprimir coisas estranhas na quarta linha. JASON HIRSCHHORN: Então você disse, é vai imprimir coisas estranhas no quarta linha? Alguém tem uma resposta à sua pergunta? Assim, as chances são de que, quando chegamos ao - Então, na quarta rodada através do nosso para loop, assim como você pensou, Annie, vai ser pontuações faixa três, que que já descobriu não existe, e nós vamos tentar e acessar isso, imprimi-lo fora, use-o de alguma forma. Assim, o computador provavelmente ficar com raiva de nós. Você está absolutamente certo. Pode fechar o programa completamente. Pode imprimir algo muito estranho. Você não pode dizer com certeza. As probabilidades são de que provavelmente vai ficar bravo com você e só sair imediatamente. Mas este é um erro comum que você vai ter onde você está apenas fora por um de o fim, e esse é um problema que vai praga que em toda a sua codificação. Uma maneira que eu gosto de fazer é apenas em um quadro branco, passar por cada iteração do laço na mão ou no papel para ver o que está acontecendo, e então você geralmente percebem, oh wait, eu não deveria ter ido para a menor ou igual a três. Eu deveria ter parado a dois, que é o que acontece se a sua condição é menos do que três. Quaisquer dúvidas tão longe? Doce. Então, todos vocês têm os seus computadores aberto. Nós vamos dar-lhe 2-3 minutos para escrever um programa que cria um array com os inteiros uma por cinco anos e, em seguida, imprime cada inteiro em uma nova linha. E se você tiver alguma dúvida, levante a mão. Estou feliz em passar por aqui. Como eu disse, vamos dar três minutos para escrever isso. Estão todos OK, se eu for a um nova janela e fechar isso? Sinto muito se você não teve a chance para terminar, mas vamos fazê-lo juntos agora. Então, na tela, eu # include cs50.h, # include stdio.h. Alguém pode me dizer o que essas duas linhas fazem? Michael? ALUNO: Incluem as bibliotecas CS50 que feito e que tem Steve salvo para que você possa usar para tornar sua vida mais fácil. JASON HIRSCHHORN: Então você disse que eles incluir as bibliotecas, uma que CS50 feita, cs50.h, e um que é apenas padrão, vem com o pacote C, stdio.h. O que quer dizer incluir as bibliotecas, embora? Você pode ser um pouco mais específico? ALUNO: Ele faz com que você pode utilizar certas palavras de código para uma funcionar acontecer sem ter que ir e fazer a função c si mesmo. JASON HIRSCHHORN: Você pode dar-me um exemplo? ESTUDANTE: Como printf é aquele que você pode usar. JASON HIRSCHHORN: printf. Então você disse que printf é um daqueles funções em vez de ter que printf escrever em seu próprio país, printf é incluído na verdade em stdio.h, assim você só pode usá-lo e assumir que ele vai trabalhar. Em stdio.h, se você abriu o arquivo, seria incluir como printf obras, todo o código para printf? Por que você está balançando a cabeça? ALUNO: Porque o arquivo de cabeçalho apenas inclui a declaração da função. JASON HIRSCHHORN: Exatamente. O arquivo de cabeçalho apenas inclui declaração da função. Então, basicamente, quando você compilar isso, bateu Faça a contagem, que vamos fazer em um segundo, o compilador sabe que se você usar printf, printf existe. Vai ser definido em algum lugar. Não é um problema para você usá-lo. E então, mais tarde, que vai incluir a zeros e uns que realmente contêm printf da implementação e fundi-los com o seu código. Como você se certificar de que inclui o uns e zeros para, por exemplo, obter corda? ESTUDANTE: Obter corda está cs50.h. JASON HIRSCHHORN: Certo. Então, que diz ficar corda existe, declaração da função. Mas então os zeros e uns, o binário arquivo que realmente inclui a implementação de corda get? Como você se certificar de que vai com seu programa? ALUNO: Passe o vinculador o argumento de linha de comando. JASON HIRSCHHORN: Passe o ligador no argumento de linha de comando. Como você faz isso? ALUNO: É a l-linha no bumbum JASON HIRSCHHORN: Exatamente. Você diz-l CS50, certo? Isso inclui os uns e zeros. ALUNO: Mas Fazer faz que, para você, certo? JASON HIRSCHHORN: Exatamente. Faça isso por você, mas, eventualmente, Você não terá que fazer, ou você vai ter que fazer uma fazer em seu próprio país, de modo que é um coisa boa para lembrar. Se você estava indo para usar um desses outras bibliotecas, não só você tem para escrever # include e em seguida, a biblioteca. Você também precisa vinculá-lo dentro E essas duas coisas são diferentes. L-CS50 é diferente de # include cs50.h. Então nós temos int main vazio encaracolados chaves, e agora vamos ao código dentro principal. A primeira linha que eu tenho aqui é um comentário que diz, criar uma matriz com ints de um a cinco. O que é uma boa palavra para descrever o que eu tenho agora na tela, apenas comentários dentro principal? O que nós chamamos isso? ALUNO: Pseudocódigo. JASON HIRSCHHORN: Pseudocódigo. Obrigado, Jeffrey. Isto é exatamente correto. Pseudocódigo. Vocês viram pseudocódigo antes? Levante sua mão se você já usou pseudocódigo antes de definir um problema. Cerca de metade de vocês. Eu recomendo o uso pseudocódigo para quebrar os problemas em menor, mais fácil de morder pedaços. Além disso, se você fizer o pseudocódigo, você ter os seus comentários já largamente embutido, assim você não tem que voltar e tentar descobrir o que você estava fazendo. Então, alguém pode me dar essa primeira linha para criar um array com ints um a cinco anos? Você? ALUNO: Int e, em seguida, você pode chamar qualquer número, e depois quadrado suporte de cinco anos. JASON HIRSCHHORN: números para int, colchete cinco. ALUNO: Igual, e então chaves. JASON HIRSCHHORN: Igual, chaves. ALUNO: Um, dois, três, quatro. JASON HIRSCHHORN: Um, dois, três, quatro, cinco. ALUNO: E então chaves e, em seguida, ponto e vírgula. JASON HIRSCHHORN: e Curly chaves e ponto e vírgula. Excelente. Imprimir cada int em uma nova linha. Pode alguém dar me que o código, por favor? [? Matu? ?] Vá em frente. ESTUDANTE: For ( JASON HIRSCHHORN: For ( ALUNO: int i = 0 JASON HIRSCHHORN: int i = 0 ALUNO: Ponto e vírgula i inferior a cinco. JASON HIRSCHHORN: Ponto e vírgula, i inferior a 5. ALUNO: Ponto e vírgula, i + +. JASON HIRSCHHORN: Ponto e vírgula, i + +. ALUNO: parênteses fechados, em seguida, chave de abertura. JASON HIRSCHHORN: parênteses fechados e duas chaves. Dentro das chaves? ALUNO: E então printf "% d / n" JASON HIRSCHHORN: Desculpe, espera. Printf "% d / n, citações fechada. ALUNO: E então citação fechado, vírgula, contagem, suporte i. JASON HIRSCHHORN: Comma, contagem, suporte i. ESTUDANTE: Desculpe, números suporte i. JASON HIRSCHHORN: Números, suporte de i. ALUNO: Desculpe. E, em seguida, fechado entre parênteses, ponto e vírgula. JASON HIRSCHHORN: Closed parênteses, ponto e vírgula. Vou guardar esse. Vamos fazer a conta. E como faço para executar o número? ALUNO: barra invertida. ALUNO: Dot barra - JASON HIRSCHHORN:. / Contar, exatamente. Obrigado. . / Contar. Um, dois, três, quatro, cinco em novas linhas. Parece que funcionou. Sim, Noah? ALUNO: Você também pode fazer igual ou igual a quatro, como i é inferior a ou igual a quatro? Existe alguma vantagem de fazer menos de cinco anos, ou apenas uma maneira diferente de escrevê-lo? JASON HIRSCHHORN: Então a questão é você poderia ter feito i é inferior ou igual a quatro, em vez de i é menor que cinco. Teria que ter trabalhado a mesma coisa? ALUNO: Deveria. JASON HIRSCHHORN: sim. É totalmente teria funcionam da mesma forma. Estilisticamente, é geralmente menor que, e você verá em um segundo quando nós cordas, você pode usar algo chamada strlen, que você já viu antes, para obter o comprimento da cadeia. E você não pode fazer menos do que ou igual strlen. Você poderia fazer menos do que ou igual strlen menos um. Então é só mais agradável para fazer menos do que strlen. Sim? ALUNO: E na real quizzes, fazer temos de fornecer comentários sobre o nosso código também? JASON HIRSCHHORN: A questão estava em testes, não é tem que fornecer comentários? Então, vamos falar mais sobre testes quando eles vêm para cima, mas em geral, um bom regra de ouro é sempre que você estiver escrever código, fornecer comentários. Se você obter o código errado, mas o comentar direito, você pode obter alguns crédito tanto de mim se eu estava classificação você em um conjunto de problemas ou em um quiz. Então, os comentários são sempre bom para oferecer. Doce. Conde. Excelente trabalho. Vamos seguir em frente. Strings. Strings. Nós já vimos isso antes na palestra. Isso fundiu minha mente quando eu encontrado pela primeira vez isso. Provavelmente não explodir de ninguém mente aqui, mas isso é OK. Strings são arrays de caracteres, e eles acabam com, como você disse antes, o terminador nulo, o que é este personagem / 0. Se vamos traçar uma corda no conselho, vamos desenhá-lo aqui. Então, quanto tempo é essa corda? Desculpe. Quanto tempo dura essa string? Estudante: [inaudível]. JASON HIRSCHHORN: Quatro? Por que é quatro? ALUNO: Porque o quinto lugar é para o caractere nulo. JASON HIRSCHHORN: Então o quinto lugar é para o caractere nulo. Então, se eu fosse para executar strlen em isso, ele me daria quatro. Corrigir. E a matriz, no entanto, se eu fosse inicializar essa matriz, quantos espaços eu teria que pedir? ALUNO: Five. JASON HIRSCHHORN: Five. Eu teria que perguntar para cinco, mas eu posso só colocar quatro personagens aqui porque eu preciso colocar isso nulo terminador no final. Então vamos escrever em "ohai" e colocar o terminador nulo no final. Vamos dizer que esta é uma string s é igual a este. Qual é a faixa de zero s? s suporte zero, Annie? ALUNO: O. JASON HIRSCHHORN: O, exatamente. s um suporte? s suporte de cinco anos? s suporte de cinco anos? ALUNO: Não existe. JASON HIRSCHHORN: Não existe. Exatamente. Legal. Qualquer dúvida sobre a compreensão strings como arrays de caracteres? OK, então. Mais um programa para vocês. Escreva um programa que pede ao usuário para uma string e então mostra cada personagem em uma nova linha. Então, vamos levar três minutos para escrever Neste programa, e depois vamos codificá-lo como um grupo. Desculpe. Você precisa ver isso? ALUNO: Não. JASON HIRSCHHORN: OK. Vamos dar mais um minuto para este código, ou pelo menos começar a fazer isso. Assim, você pode continuar trabalhando, mas eu vou para começar a passar por isso. Assim como antes, eu tenho na tela # Include cs50.h, # include stdio.h. int void main. Dentro chaves do principal, eu tenho dois comentários, pseudocódigo. Uma delas é pedir uma string do usuário. A segunda é imprimir cada personagem em uma nova linha. Então, Anna, você pode dar-me perguntar para uma string do usuário? ESTUDANTE: printf. JASON HIRSCHHORN: printf? ESTUDANTE: sim. ( JASON HIRSCHHORN: ( ALUNO: "dá-me uma corda. JASON HIRSCHHORN: "dar me um str - oops - string. ALUNO: / n "), ponto e vírgula. JASON HIRSCHHORN: Acabar com a string, parênteses fechados, ponto e vírgula. ESTUDANTE: sim. E então a próxima linha, corda s = get string. JASON HIRSCHHORN: String s = get string. ESTUDANTE: sim. E, em seguida, () JASON HIRSCHHORN: () ALUNO: Ponto e vírgula. JASON HIRSCHHORN: Ponto e vírgula. Fantástico. Então, eu vou pegar uma corda e Vou guardá-lo em quê? Qual é a variável chamada que você criou? ESTUDANTE: String s. JASON HIRSCHHORN: A variável é chamado s. É tipo string. Exatamente. A próxima coisa que queremos é imprimir cada personagem em uma nova linha. Quem pode me dar esse código? [Inaudível]? Você pode dar isso para mim? ALUNO: Claro. JASON HIRSCHHORN: Vamos fazê-lo. E muito. Eu não gosto de repetir o que você diz porque você está fazendo a coisa certa, mas eu tem que repetir de modo que quando eles transcrever isso, eles podem obter todas a saída de texto no transcrições. Então você pode apenas continuar falando. Infelizmente, não tenho dizer sobre você. Sinto muito, mas - ALUNO: Isso é bom. Para int i = 0 JASON HIRSCHHORN: Para int i = 0 ALUNO: Eu menos - JASON HIRSCHHORN: Ponto e vírgula. ALUNO: Antes disso, podemos colocar um variável de modo a obter int comprimento do nome? JASON HIRSCHHORN: Oh, você não quero colocar o ponto e vírgula? OK. Então o que você quer fazer depois de zero? ALUNO: Eu quero começar o comprimento da corda de s e definir que uma variável? JASON HIRSCHHORN: OK, Então, como eu faço isso? ALUNO: Então você faz comprimento int = JASON HIRSCHHORN: Int length = ALUNO: S-T-R-L-E-N. JASON HIRSCHHORN: S-T-R-L-E-N - ALUNO: É s. Colchetes. Jason HIRSCHHORN: (s). ALUNO: E então eu acho que você tem que colocar um ponto e vírgula entre os dois ints. JASON HIRSCHHORN: Um ponto e vírgula após a zero? ESTUDANTE: Yeah. Em seguida, coloque um ponto e vírgula depois disso, e você diz, i menos de comprimento. i menos de comprimento, que é a variável. ALUNO: E depois ponto e vírgula. JASON HIRSCHHORN: Ponto e vírgula. ALUNO: i + +. JASON HIRSCHHORN: i + +. Não é o nosso loop for. OK, dentro do loop for. ALUNO: E depois fazer printf. JASON HIRSCHHORN: printf. ALUNO: Suportes. JASON HIRSCHHORN: entre parênteses, aspas. ALUNO: Parênteses, citações,% c / n. JASON HIRSCHHORN:% c, OK. ALUNO: / n. JASON HIRSCHHORN: / n. ALUNO: citações fechado. JASON HIRSCHHORN: citações fechado. ALUNO: Vírgula. JASON HIRSCHHORN: Vírgula. ALUNO: S. JASON HIRSCHHORN: S. ALUNO: Bracket i. JASON HIRSCHHORN: Bracket i. ALUNO: E parênteses, em seguida, fechado. JASON HIRSCHHORN: parênteses fechado. ALUNO: E depois ponto e vírgula. JASON HIRSCHHORN: Ponto e vírgula. Fantástico. Então, vamos salvar este. Faça soletrar. Oh boy. Eu tenho um par de erros. Primeiro erro na linha 11, ele diz: Espera expressão, e está dando me um erro que o segundo int, há o erro. Há algum erro em torno de lá. Alguém sabe o erro que é? Kurt? ALUNO: Eu acho que deveria ser uma vírgula e não um ponto e vírgula. JASON HIRSCHHORN: OK, uma vírgula em vez de um ponto e vírgula. Assim é que tudo o que precisamos para corrigir? ALUNO: Não. JASON HIRSCHHORN: O que mais precisamos consertar? ALUNO: Nós temos que incluir string.h. JASON HIRSCHHORN: Include string.h. Onde é que eu preciso incluir isso? ALUNO: No mesmo lugar que você está incluindo as outras coisas, certo após incluir stdio.h. JASON HIRSCHHORN: Vamos ver se isso funciona primeiro porque, geralmente, eu gosto para corrigir uma coisa primeiro, e depois executar , e, em seguida, ver os erros que temos. Então, nós estamos indo para limpar o terminal com o controle n, vamos fazer fazer feitiço. Assim, outro erro na linha 11. Espera-vírgula. E eu ainda estou recebendo erros nesta linha. Por isso, não me deu um erro dizendo que não entende o que é strlen, mas ele está me dando erros neste linha, o que mais está errado? Mark? Marcus. ALUNO: Você tem que remover a segunda declaração int? JASON HIRSCHHORN: Remover o segundo int. Vamos tentar isso. Agora limpar o terminal. Faça soletrar. Erro. Implicitamente declarando biblioteca função strlen. Então, agora nós vemos esse erro. O que precisamos para incluir? ALUNO: STRING.H. JASON HIRSCHHORN: Include string.h, Vamos fazer # include string.h no topo da tela. Vamos salvar, faça soletrar. Agora compilado. Então, novamente, as coisas que precisava lembre-se a linha 12 em nosso loop para quando estamos a sua criação, int i = 0, comprimento = strlen (s). Esta é uma estratégia fantástica. O estilo deste é grande, o projeto deste é grande. Podemos ir para essas razões mais tarde, mas desta forma você só precisa chamar strlen uma vez, em vez de cada vez que você executa através do loop. No entanto, você precisa usar uma vírgula lá e você não precisa de novo int. Se você está declarando ambos os variáveis ​​em conjunto, você não precisa de novo int. E então, se você estiver indo para usar strlen, que é uma outra biblioteca função não incluído no stdio.h ou cs50.h, fazer -se de incluir string.h. Kurt? ALUNO: Então, se você não precisa dizer o tipo de comprimento é, isso significa que tem que ser um int? Você não pode ter dois diferentes tipos lá? JASON HIRSCHHORN: Então, você poderia tem dois tipos diferentes. O comprimento é um int aqui, no entanto. O comprimento é um int porque é vírgula e em seguida a mesma coisa. ALUNO: Então, ele assume que está acontecendo para ser o mesmo que o primeiro? JASON HIRSCHHORN: Exatamente. Nós não vamos fazer isso agora, mas você pode incluir duas variáveis ​​sobre a mesma linha usando um tipo de dados. Então, int x, y criaria duas variáveis. Assim, int x, y, se fazer isso, dá me uma variável x e y não utilizado porque não usá-los. Então, antes de colocar vazio é apenas um truque de fantasia, se você não usar algo, a usá-lo. Mas, como você vê, eu crio x e y na mesma linha, com uma vírgula. É a criação de dois inteiros ali mesmo. Então, sim, totalmente possível criar duas coisas na mesma linha separadas por uma vírgula. Vamos nos livrar daqueles que, no entanto. Portanto, não há mágica. Obrigado a vocês para codificá-lo para nós. Vamos fazer isso mais uma vez, execute-o. Dê-me uma string. [Inaudível], você fez mais do mesmo. Qual é a corda? ALUNO: Olá. JASON HIRSCHHORN: Olá. H-E-L-L-O, cada personagem em uma linha. Parece ótimo. Vamos executá-lo novamente. Sempre vai verificar para os casos de canto. O que é um bom caso para verificar canto? ALUNO: Um número? JASON HIRSCHHORN: Um número. Então, eu vou colocar em um, e ele imprime um. Ele não está pedindo cartas, de modo parece que os números de trabalho. Bom caso canto para verificar. O que é um bom canto caso para verificar? ALUNO: A seqüência em branco. JASON HIRSCHHORN: Hm? ESTUDANTE: Como uma string vazia. JASON HIRSCHHORN: string vazio. Então, não vamos colocar em qualquer coisa. E o que é impresso? ALUNO: Nada. JASON HIRSCHHORN: Nada. Parece que ele funciona. Você poderia tentar mais casos de canto, mas em geral, os números, um de dados é diferente grande para tentar, assim não é nada. Nada, zero, negativos são sempre grandes coisas para tentar coisas que você Deve teste, as coisas certamente vamos testar para e check 50 vai testar. Qualquer dúvida sobre spell.c? OK, vamos cabeça para trás. Eu tenho mais um programa para vocês escrevem. É chamado students.c. Este é um programa que pede ao usuário para cinco nomes, então escolhe aleatoriamente e imprime um dos nomes. Este programa é um pouco mais envolvido do que os dois últimos que escreveu, Então, por que não vamos demorar cinco minutos para codificá-lo individualmente, e depois vamos codificá-lo como um grupo. Este programa também envolvem algumas coisas você pode não ter visto antes, então se Você tem uma pergunta sobre, como fazer Eu faço isso, levante a mão. Eu vou vir e apontá-lo na direção certa. Mas nós também estamos fazendo isso porque esta vai ser uma boa maneira de introduzir algumas temas que são complicadas. Então ele funciona, certo? ESTUDANTE: Yeah. JASON HIRSCHHORN: Sempre que você liga em um conjunto de problemas, há muitas maneiras de fazer , mas alguns são mais elegantes do que os outros. Vamos mergulhar dentro # Include cs50.h. # Include stdio.h. void main int, chaves. Dentro das chaves, Eu tenho dois comentários. O primeiro é, pergunte ao usuário por cinco nomes. O segundo é, escolher aleatoriamente e imprimir um dos nomes. Então vamos fazer o primeiro, pergunte o utilizador durante cinco nomes. Quem pediu o usuário para cinco nomes e pode me dizer como fazer isso? Apenas duas pessoas fizeram a primeira parte. Três pessoas fizeram a primeira parte. Quatro, cinco. Tom, como você faz isso? ALUNO: Você poderia declarar uma string e, em seguida, nome, faixa cinco. JASON HIRSCHHORN: String Nome Chave cinco. Então o que é esta linha fazendo, name string suporte de cinco? ALUNO: Você iria declarar uma matriz de strings. JASON HIRSCHHORN: Este é uma matriz de strings. Quantas cordas vão para caber aqui? ALUNO: Five. JASON HIRSCHHORN: Five. Excelente. Vamos chamá-lo de nomes porque estamos indo para obter vários. OK, o próximo? ALUNO: E então você tem um loop - JASON HIRSCHHORN: Para loop. ALUNO: - para i = 0. JASON HIRSCHHORN: For (int i = 0. ALUNO: Ponto e vírgula. JASON HIRSCHHORN: Ponto e vírgula. ALUNO: Eu inferior a cinco. JASON HIRSCHHORN: Eu inferior a cinco. ALUNO: Ponto e vírgula. JASON HIRSCHHORN: Ponto e vírgula. ALUNO: i + +. JASON HIRSCHHORN: i + +. ALUNO: E parênteses, em seguida, fechado. JASON HIRSCHHORN: parênteses fechados, e, em seguida, algumas chaves. Dentro das chaves? ALUNO: E então printf. JASON HIRSCHHORN: printf. ALUNO: parênteses abertas, name% d. JASON HIRSCHHORN: Desculpe? ALUNO: Nome. JASON HIRSCHHORN: Nome. ALUNO: E então o espaço, e, em seguida,% d. JASON HIRSCHHORN: Nome, espaço,% d. ALUNO: E então / n, em seguida, fechado. JASON HIRSCHHORN: nome Então, espaço, % D / n, parênteses fechados. ALUNO: Comma, i + 1. Sinto muito. Citação fechado, e, em seguida, vírgula, i +1. JASON HIRSCHHORN: Closed citação, vírgula, i +1. ESTUDANTE: sim. E então a próxima linha - JASON HIRSCHHORN: i + 1. ESTUDANTE: sim. E então o próximo slide são os nomes suporte i. JASON HIRSCHHORN: Próxima linha são os nomes suporte i. ALUNO: = get string. JASON HIRSCHHORN: = Get - capital de G-E-T - string. Opa, desculpe. ALUNO: Open, parênteses fechados e depois - JASON HIRSCHHORN: aberto, fechado parêntese. ALUNO: Ponto e vírgula. JASON HIRSCHHORN: Ponto e vírgula. OK, então você inicializar a matriz de cordas, nomes e, em seguida, passar por uma loop for, e cinco vezes imprimir alguns pedir para o usuário e, em seguida, armazenar cinco cordas. Alguém tem alguma ajustes a isso? Tom, eu acho que todo mundo concorda com você. Parece muito bom. OK. Por que você fez i +1, embora? ALUNO: Eu quero dizer, não tem ser, mas i 1 de modo que seja um nome para nomear cinco. Caso contrário, seria nome zero a nomear quatro. JASON HIRSCHHORN: Então você fez i +1 porque senão ele teria impressos de zero a quatro, porque é assim que os computadores pensam, mas os seres humanos realmente não ler assim. Isso é outra coisa você vai encontrar. Às vezes, quando você imprimir algo para o usuário, você vai querer torná-lo um pouco mais bonita, e fazer i 1, neste caso, é um forma a torná-lo mais bonito. Eu também vejo cinco duas vezes, string nome é cinco, i é inferior a cinco. Eu sei onde você tem cinco. Você tem isso de mim dizendo Você cinco nomes. Mas se quisermos tornar o código um pouco mais robusto, uma coisa que nós poderia fazer é aqui, do lado de fora de int, nós poderíamos fazer algo como isso, # Define, e que nós poderíamos fazer NOMES 5. Então, basicamente, onde quer que eu escreva de capital N, A Capital, o capital M, E maiúsculo, S maiúsculo, essa seqüência, que irá substituir 5, em que, com o código. Ou vamos apenas chamá-lo - vamos basta chamá-lo NUMBER. Então, eu estou definindo todas as tampas NÚMERO ser 5. Então, agora, sempre que eu tenho o número 5, I pode substituí-lo com todos os números caps. E agora, se eu quiser mudar o número de nomes, tudo o que precisa fazer é esta linha, a linha de quatro, onde eu tenho # Define o número 5, mudar isso para 10, ou que altere a 4. Quando seu código fica maior, você não está vai se lembrar de você todos os lugares colocar quantos nomes que você queria, e em Para que você não perca um, este é uma boa maneira de fazê-lo, para encontrar algo lá em cima e depois é só usar essa frase por todo o seu código. Marcus? ALUNO: É isso estilisticamente preferido de definir globalmente a constantes n? JASON HIRSCHHORN: Assim é que estilisticamente preferido de todo o mundo definindo a n constante? Então você está dizendo que você poderia fazer, int numero = 5? ALUNO: Será que eles têm consoantes em C ou não? JASON HIRSCHHORN: Ou const - em iguais. Então você está dizendo apenas uma variável global? ESTUDANTE: Yeah. JASON HIRSCHHORN: Então, estilisticamente, não há, necessariamente, um direito responder, mas as duas coisas são melhores que apenas jogando estes aleatória números em todo o seu código. Nós os chamamos de números mágicos. Quando eu olhar para o seu código ou quando ninguém está lendo isso, eles Não quero apenas estes números aleatórios que não faz sentido. Mesmo o número 26, que é geralmente o número de letras do alfabeto, é melhor para definir ALFABETO em cima e salvar o número 26 em que string, se isso faz sentido. Ou em um conjunto de problemas, ao invés de - mais uma vez, nós não falamos sobre isso em o tempo, mas em vez de simplesmente jogá em todos os lugares a 25 ou 10, você pode salvar o número 25 como quarto ou 10 como DIME, e isso torna mais fácil para quem está lendo o seu código entender por que você escolheu esse número. E também para você, se você quiser atualizar seu código, torna-se um pouco mais robusto. Sim? ALUNO: É este código também vai estar disponível para nós depois? JASON HIRSCHHORN: Todos esses códigos que nós escrevemos juntos são vai ser enviado para você rapazes e disponíveis. Sim. Então, pergunte ao usuário cinco nomes. Aleatoriamente escolher e imprimir um dos nomes. Quem fez essa linha? Esta é a linha mais complicada aqui. Desculpe, Tom. Você fez um bom trabalho, mas este é um pouco mais complicado. Marcus, vá em frente. ALUNO: Bem, primeiro, você vai precisa incluir stdlib.h e time.h. JASON HIRSCHHORN: Então você está dizendo que a no topo, incluir mais duas bibliotecas. Você quer me incluir S-T-D-L-I-B dot H, Biblioteca Padrão, e o foi o outro? ALUNO: Time.h. JASON HIRSCHHORN: # include time.h. Portanto, estas são mais duas bibliotecas. Presumo que agora vamos estar usando funções que estão contidas nestes dois, e é por isso que você precisava para incluí-los? ALUNO: Então, primeiro você vai querer escrever srand. JASON HIRSCHHORN: Srand. ALUNO: (time (0) JASON HIRSCHHORN: Desculpe. Srand (time ( ALUNO: 0. JASON HIRSCHHORN: 0. ALUNO:)), ponto e vírgula. JASON HIRSCHHORN: Outro parêntese fechado? Ponto e vírgula. Vou apenas substituir o nulo com NULL. Ele vai fazer a mesma coisa, mas Geralmente, você verá NULL, que vamos falar sobre isso linha em um segundo. ALUNO: Estilisticamente melhor? JASON HIRSCHHORN: Geralmente, as pessoas NULL certo, mas mesma coisa. ALUNO: E então o nome int. JASON HIRSCHHORN: nome Int. ALUNO: = JASON HIRSCHHORN: = ALUNO: Rand. JASON HIRSCHHORN: Rand. ESTUDANTE: () JASON HIRSCHHORN: () ALUNO: número Modulo. JASON HIRSCHHORN: Qual é o modulo? O personagem? O personagem por cento? ALUNO: caráter cento. Modulo número que você definiu em cima. JASON HIRSCHHORN: Modulo NUMBER. ALUNO: E depois ponto e vírgula. JASON HIRSCHHORN: Ponto e vírgula. ALUNO: E então nova linha, printf. JASON HIRSCHHORN: printf. ALUNO: ( JASON HIRSCHHORN: ( ALUNO: " JASON HIRSCHHORN: " ALUNO:% s / n JASON HIRSCHHORN:% s / n ALUNO: " JASON HIRSCHHORN:% s / n " ALUNO: Comma, os nomes de espaço. JASON HIRSCHHORN: Espaço - ALUNO: Oh, eu acho, o que que chamamos aqui? JASON HIRSCHHORN: Nós o chamamos de nomes. ALUNO: suporte Open, nome. JASON HIRSCHHORN: Abra o suporte, o nome. ALUNO: suporte fechado. JASON HIRSCHHORN: suporte fechado. ALUNO:) JASON HIRSCHHORN:) ALUNO: Ponto e vírgula. JASON HIRSCHHORN: Ponto e vírgula. OK, vamos salvar. Vamos fazer este código. Alunos. Vamos executar esse código. Alunos. Não. / Aluno. . / Alunos. Nome. Diremos David. Nome dois, RJ. Nome de três, Rob. Nome quatro, Lucas. Nome de cinco, Joseph. E então ele imprime Joseph novamente. Então deixe-me correr de novo. Deixe-me fazer os mesmos nomes. David, RJ, Rob, Lucas, Joseph. E ele me deu a Davi neste momento. Então eu fiz a mesma coisa, mas deu me uma coisa diferente, e isso é porque, é claro, estamos pedindo para um nome aleatório. Então eu acho que, a partir de cima de mim vagando ao redor da sala, que a maioria das pessoas provavelmente tem a primeira parte direita, criação dessa matriz e, em seguida, ficando todos os nomes. Eu estou falando sobre as linhas 10 a 16. Mas as linhas 18 a 21 são, provavelmente, algumas coisas que você não tenha visto antes, então vamos passar por aqueles. Esta linha, srand tempo NULL é essencialmente - desculpe, vamos pular para baixo uma linha, rand (). Isso dá-lhe um número aleatório, um número inteiro aleatório. E se você bater em homem rand, que um monte de que você fez - M-A-N espaço R-A-N-D - no terminal como este, M-A-N espaço R-A-N-D, pressione Enter. Você viria até o manual e seria capaz de ler que o rand saídas de comando núme bytes pseudo-aleatórios Após a semeadura do número aleatório gerador de uma vez. Então, isso é uma descrição. Isso é o rand faz, dá um número aleatório quando você chamar essa função. Infelizmente, não é realmente aleatória porque se você apenas chamar aleatória sem ficar algumas sementes, alguns ponto de partida, ele sempre vai escolher a mesma e que utiliza uma fórmula para determinar o próximo. Então, se você chamar rand, ele só vai dar-lhe a mesma coisa. Será muito previsível. Na verdade, não será aleatória. Então o que precisamos fazer, por Marcus instruções para mim, eram rand sementes com outra coisa, que é o que a função srand faz. Semeia rand com algo um pouco mais aleatória do que a mesma coisa, e ele está semeando-lo com o tempo NULL, que é, apenas por convenção, o atual o tempo em segundos. Então você está assumindo que todo mundo não é vai executar o código no exato mesmo segundo, por isso é uma aposta segura que tempo NULL vai ser diferente cada vez que este código é executado. Aposta segura que assim, srand vontade rand sementes com algo diferente a cada vez. Então, por convenção, quando quer um número aleatório, escrevemos esta linha, srand NULL tempo, para nos dar uma grande semente mais aleatória, e depois corremos rand, que nos dá um número aleatório. Sim? ALUNO: Você pode dizer o que você quer dizer com semente? JASON HIRSCHHORN: Semente de in - assim rand vai escolher um número e vai usar algum fórmula para chegar lá. Por isso, vai começar com algo e, em seguida, transformá-lo em algo baseado fora dessa fórmula. Se você sempre dar-lhe a mesma coisa, ele sempre vai transformá-lo no mesma coisa. Assim que a primeira coisa que você dar é a semente. Então você quer dar algo diferente para começar com, e por isso vai transformá-lo em algo diferente. E, finalmente, a linha 20, isto é chamada a% modulo, e isso é confuso. Isso é algo que é um pouco diferente aqui que você realmente não tem na matemática da vida real. Mas, essencialmente, quando você toma um gigante número e dividir em C, o que acontece com o restante? ALUNO: Ele fica truncado. JASON HIRSCHHORN: Ele fica truncado. Então, 20 dividido por 3 é o quê? O que isso quer retornar ao você, 20 dividido por 3. Desculpe, 10 dividido por 3. O que isso quer voltar para você? Estudante: [inaudível]. JASON HIRSCHHORN: 10 dividido por 3 apenas retorna 3, não 3 restante 1. Então, o 10 módulo 3 retornos é apenas o restante, 1. Então, se você queria saber o que 10 dividido por 3 realmente era, se fosse fazer 10 dividido por 3, você terá a sua 3, e, em seguida, você faria 10 modulo 3 e você deseja obter a 1. Então você percebe que 10 dividido por 3 é 3, um resto. E nesta linha, pode ser rand qualquer número inteiro, essencialmente. Então modulo está dizendo, dividi-lo por número, o qual é, neste caso cinco. E se você dividir por um número, o número inteiro sempre tem de ser inferior a esse número. Então, se você está dividindo por um número 5, o restante é sempre vai ser de zero a quatro. Isso é apenas a forma como a matemática funciona. Assim, um grande número moduloed por um menor número sempre retornará restante e sempre retornar algum número que é menor do que o número que você dividido. Alguém tem alguma dúvida sobre modulo, porque ele vai vir em muito, muito útil, então eu quero ter certeza todo mundo entende isso? Legal. E vimos que este programa funcionou. OK, seguindo em frente. Assim, na próxima, vamos entrar em funções, e nós estamos indo para ir através do resto das coisas muito rapidamente porque eu quero chegar argumentos de linha de comando. Assim, as funções são, essencialmente, Como você viu, as caixas pretas. Eles levam as coisas chamados parâmetros, eles fazem alguma coisa para eles, seja mudá-los ou criar alguns efeitos colaterais, e, finalmente, eles cospem alguma coisa, o que é o valor de retorno. Alguém pode me dar uma razão por isso que usaria funções? Qualquer um? Uma razão pela qual usaríamos funções? Qualquer um? Eu vi as duas mãos. O que é um bom motivo? Marcus? ALUNO: Se você tiver que chamar o mesmo pedaço de código várias vezes. JASON HIRSCHHORN: OK, se você precisa para chamar o mesmo pedaço de codificar várias vezes. Jeff, se você tem um motivo diferente? ALUNO: Só para que você pode codificar menos. JASON HIRSCHHORN: Você pode codificar menos. Certo. Se você quer fazer algo muito - no código anterior, eu poderia ter escrito obter seqüência de cinco vezes, mas uma loop faz com que pareça mais agradável e você tem que escrever menos código. Funções são uma idéia similar. Se eu quiser fazer a mesma coisa um monte, movê-lo para uma função e chamar isso de funcionar cada vez. Isso vai fazer aquela coisa para você. Isso é um grande motivo utilizar funções. Então, anatomia de uma função. A função geral semelhante a este. Vai começar com o tipo de retorno, então você vai ter o nome. Vai levar os argumentos, caso contrário, conhecido como os parâmetros, e dentro essas chaves, você vai escrever seu código. Nós vimos uma função muito. Essa é principal. Aqui é principal sobreposta anatomia que eu tinha antes. O que int aqui significa? O que int significa? Quando eu escrevo int main (void). ALUNO: Tipo de retorno? JASON HIRSCHHORN: Desculpe? ALUNO: O tipo de retorno. JASON HIRSCHHORN: Int é o tipo de retorno, exatamente correto. Principal retorna um int. O que é o principal? ALUNO: nome da função. JASON HIRSCHHORN: Principal é o nome da função. Exatamente. E vazio? O que é o vazio dentro dos parênteses? ALUNO: Não é preciso qualquer valor externo. JASON HIRSCHHORN: void So - direita. Dentro dos parênteses, colocamos o parâmetros ou os argumentos dos função recebe, o que se passa no interior da caixa preta. Quando você escreve vazio, você está dizendo isso leva nada dentro Então int void main principal meio de não ter nada dentro Dentro das chaves, temos alguns código, e então vemos no final retornar zero. O que significa retorno de zero significa? Bem, nós falamos sobre o tipo de retorno. Principal precisa retornar um int. Isso é o que esta linha faz. Ele retorna um int, zero. É claro que não temos visto que muitas porque na programação que fazemos com as máquinas que fazemos e os compiladores nós usamos hoje em dia, você não precisa dessa linha. Principal é especial o suficiente para que ele saiba quando você chegar ao final do principal, apenas retornar zero se tudo correu bem. Na verdade, se alguma coisa não vai bem, principal, muitas vezes, retornar um diferente número significando que algo deu errado com o seu programa. Então, geralmente quando você ver o código, você Não escrevo retorno zero, mas é bom para saber que isso está acontecendo por trás da cenas porque sempre que você escrever um outro tipo de função, você está indo a necessidade de incluir uma linha de retorno. Se você está dizendo que eu vou retornar um int, você tem que escrever retornar algo. Se você disser vazio aqui no começo, void void principal, para exemplo, então ele não está voltando nada - vazio não significa nada - assim você não precisa que a linha de retorno. Mas você sempre escrever algo que não é para anular o tipo de retorno, você precisa uma linha que diz que retorno e você precisa colocar alguma coisa lá que corresponde ao tipo. Qualquer dúvida sobre isso? Doce. Scope. Isso é algo que nós temos tocou também. Cada variável, como sabemos, tem uma certa margem, e isso é basicamente falando sobre onde a variável pode ou não pode ser referenciada. E eu gostaria de dizer o que acontece entre chaves permanece dentro das chaves. Assim, por exemplo, se olharmos para este código, estamos definindo uma variável global fora do principal, int a, aqui em cima no topo. Estamos chamando outro int dentro de uma principal. Temos algumas chaves mais crespos, e estamos chamando outro um int. Temos três um no código. Estes não são a mesma coisa. Criei três variáveis ​​distintas. Então dentro destas encaracolado interior suspensórios, eu digo a = 4. Que um é que está falando, o primeiro, o segundo, ou o terceiro? ALUNO: o terceiro. JASON HIRSCHHORN: Ele está falando sobre o terceiro. Todos aqueles a realmente pode ser falou neste particular, exemplo, porque seu alcance tudo correr para essas chaves mais íntimos. No entanto, quando você chamar as coisas da mesma nome, há algo chamado escondido. Assim, você só lidar com ou consertar ou usar o variável mais recente, ou a um mais próxima de você. Assim, aqui dentro, isto é mais próximo de uma terceira a essa linha, a = 4, então afeta o terceiro. E a última linha, a = 2, o qual é um que está falando, o primeiro, segundo, ou um terceiro? ALUNO: Segundo. JASON HIRSCHHORN: Ele está falando sobre o segundo, uma. Claro que, a um terceiro está mais próximo em que o código, mas o terceiro um não existe fora essas chaves. Uma vez que você chegar a esse fechado encaracolado cinta, como é que ele se foi, essencialmente. Então, os dois únicos que lhe resta são aqueles os dois primeiros e, é claro, já que está mais próximo da segunda. Então, isso é uma coisa boa para lembre-se sobre o escopo. Por exemplo, eu tenho certeza que você encontrou fazer isso em um loop while. Se você inicializar a variável dentro o que while e depois tentar acessá-lo do lado de fora, você provavelmente tem algum aviso como, este variável não existe. Isso porque a idéia de escopo, que as coisas só existem dentro dessas chaves. Curly chaves são como um abraço gigante que você está dando ao seu código, é outro maneira de pensar sobre isso. Portanto, esta é uma outra função, algo para vocês código, hellofunction.c. Nós vamos pular que, por agora, mas isso é algo que eu encorajá-lo a praticar em seu próprio país. Escreva um programa em que as chamadas principais outra função que imprime uma saudação ao usuário. É essencialmente tomando Olá mundo e abstraindo que printf em outra função. Mas nós não vamos fazer isso agora porque não temos tanto tempo saiu como eu teria gostado. Então declaração da função. Nós já vimos isso antes também. Se você quer escrever uma outra função, você precisa deixar o computador conhecer e principal sabe que ela existe. Então, o que fazemos é acima principal, escrevemos o tipo de retorno, o nome eo parâmetros e, em seguida, abaixo principal, aqui, nós realmente copiar essa linha e em seguida, escrever o código real. Então, desta forma, se você chamar a função em principal no topo, principal sabe que Olá existe, por exemplo, se eu fosse para chamar Olá, e, em seguida, olha para a implementação abaixo. O que acontece se eu não incluir este linha em cima, anular Olá (void)? Se eu não incluir esta linha e chamadas principais Olá, eu sou vai receber um erro. Eu estou indo para obter um erro porque o compilador não sabe que essa coisa existe. Isto é semelhante a isso que não # include cs50.h. O que essencialmente cs50.h está fazendo está colocando obter corda lá em cima. É colocar obter int lá em cima. É colocar todos aqueles função protótipos antes principal de modo que quando você chamá-los em principal, principal sabe que essas coisas existem. Isso é o que esses arquivos h. Fazer. E por isso, se você estiver indo para fazer o seu próprio função, você tem que certificar-se de você colocar esse protótipo lá em cima. Qualquer dúvida sobre isso até agora? Argumentos de linha de comando. Isto é o que nós vamos terminar , e então espero que nós vamos espremer em alguns pset. Eu não sei se nós vamos ser capazes de espremer em que por causa do tempo, mas com vocês que estão aqui, e se você Querem dizer que depois de um pouco, nós pode passar por isso de fora. Mas vamos acabar com argumentos de linha de comando para os últimos 15 minutos. Nós acordado, Michael? Você está acordado? Bom. Eu não sei se você dormir com os olhos fechados. Seria complicado. Argumentos de linha de comando. Aqueles que são uma forma de passar informações em um programa. Eventualmente, nós vamos encontrar os outros. Mas, essencialmente, vamos parar escrever int main (void) se quisermos ter alguns argumentos de linha de comando. Nós vamos escrever essa coisa chamado int main (int argc, corda argv, colchetes. Isso é confuso. Isso é um monte de letras que não estão em Inglês humano, por isso estamos indo para descompactá-los agora. Argc significa contagem argumento - e de novo, tudo isso vai estar disponível online - e esse é o número de argumentos. Argv significa argumento do vetor, e aqueles são os próprios argumentos. É uma matriz de strings. Nós temos realmente visto uma matriz de cordas antes de hoje. Criamos um no último programa que codificada. Então, aqui está um exemplo. Eu escrevo. / Ohai CS50 seção na minha linha de comando. Argc, neste caso é igual a 3. Argv suporte 0 é ohai, argv suporte 1 é CS50, argv faixa 2 é a seção. Novamente, argc é o número de argumentos, e para te enganar um pouco bit, contamos sempre com o nome do funcionam como o primeiro argumento. Portanto, neste caso, há três argumentos, o nome da função e, em seguida, os dois que eu digitei dentro Em seguida, vamos para salvar aqueles próprios argumentos em argv. E, novamente, apenas, como vimos antes, fizemos esta última no programa que codificada. Você pode mover-se através da matriz de argv e obter essas strings. Isso é essencialmente o que fizemos no o fim do nosso último programa. Nós escolhemos um nome aleatório e, em seguida, foi para a nomes de suporte que quer e impresso a seqüência localizado lá. Em cima de apenas uma matriz, porque próprias cordas são matrizes, como falou, você pode ter matrizes de matrizes, que é essencialmente o que argv é. Uma maneira que você pode pensar sobre isto é as linhas e colunas. Eu posso chamar isso agora. Então argv - que não está apagando. Vamos desenhar sob ohai. Então, se eu escrevi em, seção CS50 ohai, Eu estou indo para truncar seção para este exemplo. Mas, essencialmente, o meu multidimensional array, ohai CS50, vamos fazer seita. Então, aqui, eu posso acessar - se eu apenas dar argv um número - isso é errado. O que há de errado neste diagrama? ALUNO: Comece pelo zero. JASON HIRSCHHORN: deve começar com zero. Eu provavelmente deveria também girá-lo, mas pois eu já tenha desenhado isso, estou vai deixá-lo lá por enquanto. Mas começa a zero. Isso é certo. Me desculpe se isso é pequeno. Vocês podem tipo de ver? Então, se eu fizer argv 0, eu vou obter todas ohai. Se eu fizer uma argv, eu vou pegar todos CS50. Se eu fizer argv 2, eu vou pegar todos seita. Mas agora, como dissemos, cordas são próprias matrizes. Então, o que eu posso fazer é que eu posso tratar essa como uma matriz multi-dimensional, e eu pode fazer algo ao longo das linhas de argv 0, 0, o que me dá apenas o caractere 0. Argv 0, 1, o que me dá apenas h. Argv 1, 3, o que me dá apenas este 0 aqui no CS50. Então, porque os próprios fios são matrizes, estamos colocando que na outra matriz. Temos agora array de arrays, e nós pode indexar a nossa primeira matriz e então o índice para o nosso segundo array. E, como seria de esperar, nós fazemos isso por apenas colocar os dois - fazemos os colchetes apenas ao lado um do outro. Portanto, neste exemplo, argv é uma CS50 e argv 1, 2, como dissemos, é apenas 5. Alguém tem alguma dúvida sobre arrays multi-dimensionais? Vocês estão fazendo incrível. Doce. Então, nós temos um outro programa aqui, e esta é a última coisa que nós somos vai fazer agora. Então, eu quero que você escreva um programa que leva o nome completo do usuário, duas e apenas dois argumentos de linha de comando e, finalmente, imprimir uma saudação ao usuário, que inclui seu primeiro nome. Então, por que você não tomar três ou quatro minutos para fazer isso, e depois vamos sobre ele como um grupo, e então vamos embrulhar? E, novamente, aqui, quando nós dizemos ter um nome completo acordo com a descrição do usuário deste problema, que deve ser de comando argumentos de linha, não utilizando obter string. Sim, Marcus? ALUNO: Então, quando você diz que dois comando argumentos de linha, é que, para além . o / run, ou - JASON HIRSCHHORN: Boa pergunta. Fazer, incluindo o. / Run, três argumentos de linha de comando. Ou, incluindo o. / Personalizado, em Neste caso, porque essa é a nome desse arquivo. Então argc seria três. Mas eu quero apenas dois argumentos dado ao programa. Devo especificar isso. Eu vou fazer essa mudança antes de eu postar estes e enviá-los para vocês. ESTUDANTE: E se você tem um nome do meio? JASON HIRSCHHORN: Se você tem um meio nome, você está sem sorte. Sinto muito. Ou se você só vai por Shakira, você também está fora de sorte. Sim? ALUNO: Então, quando as pessoas não têm cs50.h, eles definem argv como estrela argv de char? Ou ainda é chamado de cadeia argv? JASON HIRSCHHORN: sim. Então, string, novamente, máscara sobre o que exatamente está acontecendo lá. Isso vai ser descompactado talvez na quarta-feira, mas em breve. É como rodinhas. Porque essencialmente, é a mesma coisa. Então, vamos dar um minuto para o programa este, em seguida, vamos falar sobre como um grupo e, depois como eu disse, embrulhar. E eu acho que eles ainda são doces extra, então vocês devem espero ter que, ou por favor, tome isso. Desculpe se você ainda está escrevendo, mas eu quero mergulhar e nós pode terminá-lo juntos. Então, eu tenho escrito, # include cs50.h, # include stdio.h. int main (void), encaracolado cinta, encaracolado cinta, dentro de três linhas de pseudocódigo, ter o nome completo do usuário, duas e apenas duas linha de comando argumentos, imprima uma saudação ao usuário, que inclui seu primeiro nome. Assim, o primeiro, tomar nome completo do usuário. Quem pode me ajudar a tomar nome completo do usuário? Como eu faço essa parte? Vocês fazem a primeira parte? Pegue o nome completo do usuário. Bem, para que uma linha de comando argumento, o que devo escrever? O que devo mudar em minha declaração de função? ALUNO: Você não quer que ele seja mais vazio. JASON HIRSCHHORN: Exatamente. Eu não quero que ela seja anulada. O que eu quero que ele seja? ALUNO: argc Int. JASON HIRSCHHORN: Int argc. ALUNO: argv seqüência. JASON HIRSCHHORN: String argv. ALUNO: Suporte, suporte. JASON HIRSCHHORN: Suporte, suporte. É exatamente isso, e isso é na verdade, como eu vou conseguir nome completo do usuário. Eles estão indo para colocá-lo lá. De modo que um é feito. Então agora eu quero dois e apenas dois argumentos de linha de comando. Então Noé, o que é uma maneira que eu puder verificar o número de comando argumentos de linha que eu tenho? ALUNO: Você faz um if. JASON HIRSCHHORN: Se declaração, exatamente. O que eu quero que a condição? ESTUDANTE: Se argc superior a 3. JASON HIRSCHHORN: Se argc é maior do que 3. Se argc superior a 3, o que eu faço? ESTUDANTE: Return 1. JASON HIRSCHHORN: Return 1. Será que garantir que tenho duas e apenas duas? ALUNO: Não. Se é maior que argc 3 e inferior a 2. Jason HIRSCHHORN: Se argc é maior a 3 e argc é inferior a 2. O que é uma maneira que eu posso escrever isso em apenas uma linha, ou sem o uso de que e operador booleano? ALUNO: Não é igual a 2. JASON HIRSCHHORN: Se argc não é igual a 2. Exatamente. Então, se argc não é igual a 2, isto vai me dar a este programa, personalizado, quando eu executá-lo, e que vai me dar quantos argumentos de linha de comando? Quantos eu vou procurar? Desculpe. Deixe-me reformular isso. Se argc = 2, quantas coisas fez o usuário escrever na linha? ALUNO: Uma. JASON HIRSCHHORN: Apenas um. Então, antes, você estava certo, Noah. O que eu realmente preciso colocar lá? ALUNO: Isso é igual a 3. JASON HIRSCHHORN: ARGC não é igual a 3. Eu quero ser igual 3 porque eu quero personalização mais dos outros dois. Então, se argc não é igual a 3, o retorno 1. Por que você diz retornar 1? ALUNO: Porque isso significa que ele está errado. JASON HIRSCHHORN: Isso significa que é errado, eo que é que vamos fazer? ALUNO: Re-solicitar ao usuário. JASON HIRSCHHORN: Vai sair o programa, por isso vai ter que correr novamente, mas não temos nada aqui para pedir para eles novamente. Eu não pedi por isso. Então, isso é exatamente correto. Retorno 1 apenas sai do programa. Grande. E imprimir uma saudação ao usuário que inclui seu primeiro nome. Como posso fazer isso? Anna? ESTUDANTE: printf. JASON HIRSCHHORN: printf. ESTUDANTE: (" JASON HIRSCHHORN: ( ALUNO: "Olá JASON HIRSCHHORN: "Olá ALUNO:% s JASON HIRSCHHORN:% s ALUNO: / n JASON HIRSCHHORN: / n ALUNO: ", JASON HIRSCHHORN: ", ALUNO: argv JASON HIRSCHHORN: Desculpe? ALUNO: argv JASON HIRSCHHORN: argv ALUNO: colchetes 1. JASON HIRSCHHORN: Colchetes? ESTUDANTE: 1. JASON HIRSCHHORN: 1. ALUNO: E) ponto e vírgula. JASON HIRSCHHORN:) vírgula. Vamos executar este. Faça personalizado. . / Personalizado. É só sair. Por que sair? ALUNO: Você não colocou nenhum argumento. JASON HIRSCHHORN: Eu não fiz colocar todos os argumentos dentro Parece ótimo. Vocês acertaram em cheio. Então, novamente, você entrou em argv e você verificado no início argc. Esses são dois importantes coisas para lembrar. Assim, em nossos dois últimos minutos antes de nós deixar, não vamos chegar a pset dois, mas como eu disse, se você quiser ficar depois por 10 minutos, eu o faria ele feliz de ir mais com vocês a lógica para esses conjuntos de problemas. Nós tivemos um monte de cobrir hoje então eu não chegar até eles. Geralmente, eu gostaria de incluir que, no final. Então, se você quer ficar por aqui, ficar em torno de 10 minutos. Nós vamos fazer isso. Então, como eu mencionei no início, pset zero e um, teremos que retorno de volta para você como logo que possível. O objetivo é fazer com que pset um feedback, Comentários a parte, antes pset dois é devido. Então, se você cometeu alguns erros ou estilisticamente, as coisas poderiam ser melhores, você vai ter essa informação para que você não vai fazer as mesmas coisas em pset dois. E então, no futuro, você vai ter tudo de seu feedback e comentários pset de volta antes que o próximo é devido. Finalmente, se eu pudesse colocar em outro plugue para o gabarito. Esta é a sua primeira seção. Foi a minha primeira seção ensinar este ano. Vá até lá. Escrever coisas, boas e más, e eu vou usá-lo para fazer seção melhor da próxima vez. E por último, mais uma vez, se você precisa qualquer coisa, me avise. Estou mais do que feliz em ajudar vocês. Se você só quer doces, I terá doces extra. Estou feliz em trazê-lo para você. Este vai ser um curso incrível. Este é um dos, se não o meu favorito Claro, eu tomei em toda a minha vida, e eu espero que seja que maravilhoso para você. Então, eu quero fazer tudo em meu poder para torná-lo incrível para você. Vou enviar um e-mail se você estiver na minha seção ou Noah, e vai tentar agendar com cada um dos vocês um tempo de check-in sobre o próximo par de semanas para que eu possa obter um sensação de que seu fundo CS é, e também vai me ajudar a adaptar estes seções para melhor atender às suas necessidades. Então, isso é o que eu tenho alinhados. Mais uma vez, eu vou vê-lo do lado de fora Se você quer estar lá. Este foi de duas semanas secção. Obrigado a vocês muito.