[REPRODUÇÃO DE MÚSICA] DAVID J. MALAN: Tudo bem. Este é CS50 e este é o início da Semana 2. E você vai lembrar que, ao longo o último par de semanas, temos vindo a introduzir computador ciência e, por sua vez, a programação. E começamos a história por meio de Zero, que a linguagem gráfica a partir do MIT Media Lab. E, em seguida, mais recentemente, na semana passada, fizemos introduzir um higher-- um linguagem de nível mais baixo conhecido como C, algo que é puramente textual. E, de fato, última vez que explorado dentro desse contexto uma série de conceitos. Este, recall, era a própria primeiro programa nós verificamos. E este programa, muito simplesmente, imprime, "Olá, mundo". Mas há muito magic parecendo acontecendo. Há essa #include com estes colchetes. Há int. Há (void). Há parênteses, colchetes, ponto e vírgula, e muito mais. E assim, lembrar que introduzimos Raspadinha para que pudéssemos, idealmente, ver o passado que a sintaxe, o material que não é realmente tudo o que intelectualmente interessante, mas cedo é, absolutamente, um pouco complicado para envolver sua mente em torno. E, de facto, um dos mais comuns as coisas no início de uma classe de programação, especialmente para os menos confortável, é para se frustrado por e tropeçou por alguns sintática erros, para não mencionar a erros lógicos. E assim entre os nossos objectivos hoje, na verdade, vontade seja para equipá-lo com algum técnicas de resolução de problemas sobre como para resolver melhor os problemas próprios sob a forma de depuração. E você vai lembrar, também, que o ambiente que foi introduzida última vez que foi chamado CS50 IDE. Este é um software baseado na Web que permite programar na nuvem, por assim dizer, mantendo todo o seu arquivos juntos, como teremos novamente hoje. E recordar que nós revisitado estes tópicos aqui, entre elas funções e loops, e variáveis ​​e expressões booleanas, e condições. E, na verdade, um pouco mais que nós traduzido do mundo do Scratch para o mundo do C. Mas a construção fundamental blocos, por assim dizer, foram realmente ainda o mesmo na semana passada. Na verdade, nós realmente só tinha um diferente peça do puzzle, se você quiser. Em vez de que o roxo salvar bloco, nós em vez tinha printf, que é esta função em C que permite imprimir algo e formatá-lo na tela. Introduzimos o CS50 Biblioteca, onde você têm agora à sua disposição get_char, e get_int, e get_string, e algumas outras funções como bem, através do qual você pode obter a entrada do próprio teclado do utilizador. E também teve um olhar para as coisas como these- bool, e char, e double, float, int, cadeia long_long. E há ainda outros tipos de dados em C. Em outras palavras, quando você declarar uma variável para armazenar algum valor, ou quando você implementar uma função que retorna algum valor, você pode especificar o que tipo de valor que seja. É uma cadeia, como um sequência de caracteres? É um número, como um número inteiro? É um ponto flutuante valor, ou semelhantes? Assim, em C, ao contrário do risco, nós realmente começou a especificar o tipo de dados estávamos voltando ou usando. Mas, é claro, nós também correu para alguns limites fundamentais da computação. E, em particular, essa linguagem C, recordação que nós demos uma olhada em integer overflow, a realidade que, se você tiver apenas um quantidade finita de memória ou, especificamente, um número finito de bits, você só pode contar tão alto. E assim nós olhamos para este exemplo aqui em que um contador em um avião, na verdade, se correr o tempo suficiente seria transbordar e resultar em um software um erro potencial físico real. Também olhou para flutuante ponto de imprecisão, a realidade que, com apenas um número finito de bits, se é 32 ou 64, você só pode especificar tantos números após um ponto decimal, após o qual você começam a ficar imprecisa. Assim, por exemplo, um terço na mundo aqui, no nosso mundo humano, o que sabemos é apenas um número infinito de 3s após o ponto decimal. Mas um computador não pode necessariamente representam um número infinito de números se você permitir apenas que alguns quantidade finita de informação. Assim, não só nós equipá-lo com maior poder em termos de como você pode expressar-se em um teclado em termos de programação, nós também limita o você pode realmente fazer. E, de fato, os erros e os erros podem surgem a partir desses tipos de problemas. E, de fato, entre os temas hoje vão ser temas como a depuração e, na verdade, olhando por baixo do capuz a forma como as coisas foram introduzidos na semana passada são realmente implementadas de modo que é melhor você compreender tanto as capacidades de e as limitações de uma linguagem como C. E, de fato, vamos descascar as camadas dos mais simples de estrutura de dados, algo chamado um array, que Zero acontece para chamar uma "lista". É um pouco diferente nesse contexto. E então nós também vamos apresentar um dos primeiro dos nossos problemas específicos do domínio em CS50, o mundo da criptografia, a arte de cifragem ou cifrar informações para que você pode enviar mensagens secretas e descodificar mensagens secretas entre duas pessoas, A e B. Portanto, antes de transição, a esse novo mundo, vamos tentar equipá-lo com algum técnicas com as quais você pode eliminar ou reduzir, pelo menos, alguns das frustrações que você provavelmente já encontrou ao longo da última semana sozinho. Na verdade, antes de você são alguns dos such-- seus primeiros problemas em C. E as probabilidades são, se você é como eu, pela primeira vez tenta escrever um programa, mesmo se você pensar logicamente o programa é bastante simples, você pode muito bem bater em uma parede, e o compilador não vai cooperar. Fazer ou Clang não vai para realmente fazer o seu lance. E por que pode ser isso? Bem, vamos dar uma olhada, talvez, um programa simples. Eu estou indo para ir em frente e salvar isto em um arquivo chamado deliberadamente buggy0.c, porque eu sei que a ser falho com antecedência. Mas pode não perceber que, se esta é o primeiro ou segundo ou terceiro programa que eu realmente estou me tornando. Então, eu estou indo para ir em frente e digitar, int main (void). E, em seguida, dentro das minhas chaves, muito familiar ( "Olá, mundo-- barra invertida, n ") - e um ponto e vírgula. Eu salvou o arquivo. Agora eu estou indo para ir para baixo na minha janela de terminal e tipo make buggy0, porque, novamente, o nome do arquivo é hoje buggy0.c. Então eu digito fazer buggy0, Enter. E, oh, Deus, lembro da última vez que nenhuma mensagem de erro é uma coisa boa. Assim, nenhuma saída é uma coisa boa. Mas aqui eu tenho claramente um certo número de erros. Assim, a primeira linha de saída depois de digitar fazer buggy0, recall, é emitido bastante detalhado do Clang. Debaixo do capô, IDE é configurado CS50 para usar um monte de opções com este compilador de modo que você não tem para pensar sobre eles. E isso é tudo que a primeira linha meios que começa com Clang. Mas depois disso, os problemas começar a fazer a sua aparência. Buggy0.c na linha 3, caráter 5, existe um grande erro, vermelho. O que é isso? Implicitamente declarando função de biblioteca printf com o tipo int (const char *, ...) [-Werror]. Quero dizer, muito rapidamente fica muito misterioso. E, certamente, à primeira vista, não queremos espero que você entenda o totalidade da mensagem. E assim uma das lições para hoje vai ser a de tentar perceber padrões, ou coisas semelhantes, a erros que você pode ter encontradas no passado. Então, vamos provocar única apart aquelas palavras que olha familiar. O grande, vermelho de erro é claramente simbólica de que algo está errado. implicitamente declarando biblioteca printf função. Assim, mesmo se eu não entendo muito bem o que declarar implicitamente função de biblioteca meios, o problema certamente refere-se a printf de alguma forma. E a fonte desse problema tem a ver com o declarar. Declarar uma função é mencioná-lo pela primeira vez. E usamos a terminologia na semana passada de declarar um protótipo de função, ou com uma linha na parte superior do seu próprio arquivo ou em um arquivo de cabeçalho chamado. E em que arquivo fez dizemos na semana passada que printf é citar, unquote, declarou? Em qual arquivo é o seu protótipo? Então, se você se lembra, a primeira coisa que eu digitado, quase todos os programas última vez-- e, acidentalmente, um momento atrás começou digitando myself-- foi esta aqui-- hash-- #include