[Powered by Google Translate] [ROCK] [MÚSICA - "Happy Together" As tartarugas] DAVID MALAN: Hoje, começamos nossa exploração do fundamentos da ciência da computação e nossa introdução, Agora, com a técnica de programação, sendo que é apenas um exemplo. Mas, na mesma linha da resolução de problemas, saiba que Dia CS50 do enigma tradicional é amanhã. Se você ainda não dado RSVP para este evento, você pode ir para cs50.net/rsvp. Você pode trazer equipes de dois, três ou quatro. Você será desafiado com problemas como o que você viu lá em cima no começo. Todos os novos problemas deste ano se você participou no ano passado, e você terá uma chance depois de ganhar alguns prémios fabulosos. Entre eles, um Wii e alguns certificados de presente e como, tudo ao mesmo tempo sair com CS50 alunos e colegas e pizza e Facebook. Então mais sobre isso amanhã, se você gostaria. Este é, então, CS50, para aqueles de vocês se juntarem a nós para o primeira vez. E sabemos que este curso é particularmente determinado a conseguir você através deste curso ao seu fim, em que ponto você vai ter não só uma compreensão destes fundamentos da ciência da computação, mas você vai ter este conjunto de habilidades muito prático, que você pode levar para seu próprio departamento, se é ciências de engenharia, matemática aplicada, as ciências físicas, naturais ciência, ou semelhante. Na verdade, o que é tão emocionante sobre ciência da computação estes dias é que ele é tão aplicável a todos os tipos de campos. E mesmo que hoje, vamos apenas arranhar a superfície de um linguagem de programação muito tradicional conhecida como C, vamos em vez olhar para algo chamado Scratch, algo com que essa história de amor cookie foi implementado por um de seus antecessores nos últimos anos, para contar histórias, para criar jogos, para criar arte interativa, e para realmente começar a envolver nosso mentes em torno de algumas das construções fundamentais que subjacentes a programação, mas em um contexto, como você vai ver, que é muito menos assustador, isso é muito menos misterioso, que você vai ver antes do tempo. E perceber, também, para aqueles de vocês só se juntar a nós esta semestre, as frases em que estamos encerrados palestra de quarta-feira, não é tão importante quando você acabar em relação ao seu colegas nesta classe, mas onde você, até o final do semestre na semana 11, acabam-se mesmo em relação a este mesmo dia. Então, sem mais delongas, este é também de notar que os menos confortáveis, aqueles em algum lugar no meio, são também, pelo projeto do curso, não a qualquer desvantagem vis-à-vis os mais confortáveis que vem a este classe. Como você verá ao longo das semanas que virão, temos diferentes faixas para o fundo volta díspares, seções para aqueles menos confortáveis, mais confortável, aqueles algures no meio. Como você verá neste fim de semana e na próxima semana, duas versões a maioria dos conjuntos de problemas, tanto na edição padrão e hacker assim que todos podem se auto-selecionar o caminho com o qual você são mais confortáveis. Então, hoje, nós mergulhar neste programação linguagem chamada Scratch. É uma linguagem de programação gráfica, e ainda tem o mesmas características de algumas das linguagens de alto nível que vamos explorar mais tarde no semestre, entre elas C e JavaScript e PHP. Mas isso vai nos permitir evitar algumas das distrações no início da sintaxe, coisas como ponto e vírgula, parênteses, e outros detalhes secretos que, à primeira vista, não são apenas em tudo intelectualmente interessante e tendem a entrar em o caminho de uma compreensão fundamental. Em termos de estrutura de suporte de agora à frente, esta realizada ferramenta, CS50 discutir, que será ligada no seu curso site ainda hoje, é o fórum de discussão on-line em que você vai ser capaz de fazer perguntas uns dos outros e pessoal, e é também uma ferramenta, como veremos na próxima semana, que nós vamos usar bastante integratedly em horário de expediente também. Na verdade, o horário de expediente começar na segunda-feira, e, francamente, o primeiro semana do horário de expediente é fundamental bastante baixa. Eu não acho que você vai encontrar tudo o que scratch inacessível. É bastante auto-explicativo, como veremos, e assim o que vamos usá-lo para hoje é de extrair algumas das ideias fundamentais, que, em seguida, persistem durante o resto do semestre. Mas a partir segunda-feira, às 8:00 PM através 23:00 será o horário de expediente em Annenberg mais de pausa cérebro. Seccionamento duas começará esta noite, então em algum momento deste fim de semana, ir para cs50.net/section, e você vai ser feitas uma série de perguntas. Entre eles, como você descreveria o seu nível de conforto a partir de hoje? Não há nenhuma regra dura e rápida como a que está em que balde. É exatamente o tipo de coisa que você provavelmente sabe, se você estão entre aqueles a menos confortáveis ​​ou de outra forma. E agora, orientações. A especificação do conjunto de problemas para esta semana, tanto padrão e edição de hackers iguais, está online no cs50.net partir de agora. E você vai ver que a primeira dessas edições, a edição padrão a cada semana, é acompanhado por algo que chamar um passo a passo de código, uma sessão liderada por um dos companheiros de curso de ensino para orientá-lo, fornecer dicas sobre, e se você por um caminho particular quando se trata para iniciar esses conjuntos de problemas. Assim, com cada um destes conjuntos de problema, se você está sempre querendo para si mesmo, onde eu começo, você começa com estes orientações. E, de fato, permitam-me apresentar Zamyla Chan, este companheiro de anos de ensino que estará conduzindo cada uma dessas orientações. Zamyla? [Aplausos] ZAMYLA CHAN: Ah, oi, todos. Meu nome é Zamyla. Eu sou um júnior de engenharia estudar na Winthrop House. Mas eu tentar encaixar como cursos de informática muitas ciência como eu pode, por isso que eu estou realmente animado para ser líder esta orientações do ano. Passo a passo, para mim, eram uma parte essencial da minha CS50 experiência. Durante o passo a passo, para cada p-set, nós vamos passar por o conjunto de problemas juntos, olhar sobre os problemas, tipo de dividi-los em mordidas gerenciáveis. Eu vou te dar dicas, técnicas, para obter através de e começando. Espero ver todos vocês nas orientações. Se você não pode fazê-lo em pessoa, então por favor, entrar em sintonia online. DAVID MALAN: Excelente. Obrigado, Zamyla. Então percebe que orientações são, de fato, na sexta-feira tarde, mas este é deliberadamente por projeto de modo que mesmo se você prefere não assistir às aulas na sexta-feira tarde, os vídeos serão todos até o mais rapidamente sobre o fim de semana. Assim, perceber que cs50.net serão todos do Zamyla orientações. E que não há data e hora de hoje, 3:00 PM, Harberd Hall, 104. E alguns dos companheiros de ensino também têm preparado algumas observações para você em revelia a dar-lhe um pouco de perspectiva sobre o que sua experiência que entra e saindo do CS50 como era. Então, se pudéssemos diminuir as luzes por apenas um momento, eu dar-lhe alguns dos funcionários do CS50. JACKSON Steinkamp: Eu levei CS50 no ano passado como um calouro na cair, e é absolutamente explodiu minha mente. Eu nunca tinha tomado aulas de programação antes, e nunca entrou com qualquer ciência da computação experiência. E, assim, eu ouvi o zumbido sobre a classe e decidiu levá-la. JULIA MITELMAN: Foi muito divertido, muito envolvente. Eu ainda, até hoje - Eu só vi recentemente eu tenho o disquete que David nos deu em nosso primeiro dia de aula. Eu tinha pendurado na minha parede. Este é, provavelmente, um pouco nerd, mas eu desliguei na minha parede durante a aula como um lembrete de como foi legal. TRAVIS DOWNS: É tão embaraçoso. JACKSON Steinkamp: Ciência da Computação é algo que você deve tentar mesmo se você não for um para as ciências tradicionais. É a sua própria experiência, e CS50 vai se certificar de que você é suportado bem com ela com seu verdadeiro exército de TFS. ALI Nahm: Tomei isso como um calouro, e então eu fiz um monte de novos amigos. Eu também fui apresentado a esta concentração toda e escola inteira de engenharia, e por isso eu recomendo e as boas-vindas à nossa família CS50. Yaniv Yacoby: CS50 apenas ensina a usar ferramentas que são amplamente acessíveis. Você só precisa de um laptop, você precisa de um navegador web, e você Precisamos aprender a escrever algum código, e você pode realmente construir coisas legais. KAREN XIAO: É tão legal ser capaz de fazer algo e as pessoas usá-lo e as pessoas vê-lo, e isso é o que eu realmente adoro. TIM MCLAUGHLIN: - um senso de comunidade, eu acho que, neste naturalmente mais do que qualquer outro curso que fiz até agora. Você não está apenas tomando outro - você não está enchendo outro requisito. Você não está indo só para palestras e indo para a seção. Mas você está fazendo toneladas de coisas que são todos sobre programação e tudo sobre tecnologia, mas não realmente se sente como uma classe maior parte do tempo. DOWNS TRAVIS: E no primeiro dia, eles distribuíram bolo, e I foi imediatamente vendido. JACOB PRITT: doces e pizza grátis. ZAMYLA CHAN: - independentemente de seu nível de interesse, eu acho que que CS50, você vai se divertir, e você vai ser intelectualmente estimulada. MARK GROZEN-SMITH: É sempre uma festa na sala de aula, e é uma festa a cada noite trabalhando em seu p-set. JACKSON Steinkamp: Cada vez que você terminar um conjunto de problemas, você vai se sentir como você terminar um projeto. MELISSA NIU: Foi o primeiro ano, e eu estava feito compras. Eu tinha meus quatro classes pronto, e eu estava em Annenberg. E eu topar com um amigo, e ele diz: ei, eu estou comprando esta classe chamada CS50, e você deve vir comigo. Acabou levando-o a queda, e depois que a classe, eu pensei que talvez eu vou menor no CS. Mas aqui estou eu, três anos depois, ainda estudando computador ciência e realmente fazê-lo como um grande, e eu amei cada momento da mesma. ROB BOWDEN: Eu não tenho idéia. ALI Nahm: Vamos ver. MELISSA NIU: Loucura. COLUNA 1: Eu sinto que eu ficaria muito clichê. Eu tinha acabado de dizer, como, impressionante. Yaniv Yacoby: Acessibilidade. JACOB PRITT: doces e pizza grátis. TRAVIS DOWNS: Não é possível desligar uma classe que distribui bolo. TIM MCLAUGHLIN: Energética. Vipul Shekhawat: Essencial. ROB BOWDEN: Deixe-me pensar em uma resposta. Eu acho que eu tenho algo. Oh, Deus. Sim, meu nome é Rob Bowden, e este é o CS50. [Aplausos] DAVID MALAN: Tudo bem, então vamos começar a pintar um quadro da direção em que podemos ir, e vamos introduzir este conceito aqui conhecido como pseudocódigo. Assim, não é um pseudocódigo programação linguagem em si. Não é nada técnico, por si só, mas é apenas uma espécie de maneira geral de se expressar com bastante precisão, algoritmicamente bastante, bastante processualmente, mas sem ter que se preocupar com o idioma que você está expressando se dentro É algum modelo de Inglês e linguagens de programação com que acontecer de você estar familiar, para que possamos começar escrever este tipo de coisa, como vamos nós. E, de fato, José, eu poderia pedir-lhe em cima do palco para ser escriba aqui? Eu tenho ido à frente aqui com antecedência e esquecido de colocar em algumas meias hoje, e este vai ser entre os nossos mais exemplos ridículos. Agora, eu preciso de você aqui. Eu vou fazer a parte meias. Portanto, temos aqui um bloco de rascunho pouco. Este é literalmente apenas TextEdit em um Mac. Nós não estamos realmente indo para escrever um programa executável, mas nós apenas estamos indo para começar a esboçar baseada em pseudocódigo em alguns dos conselhos que você fornecer para mim aqui. Então, aqui está a minha pilha de meias em casa. Eu não tenho meias quando eu acordar de manhã, e agora preciso escrever um programa, um algoritmo do tipo, com o qual para obter estas meias nos meus pés. E ao longo do caminho, vamos ver se a gente tropeçar, ou encontrar, algumas das idéias que você vai ter que começar a pensando muito mais a sério quando a programação para que seus programas não se comportam bem como pretendido. Então eu sentar aqui. Eu tenho a minha pilha de meias. Qual é a primeira coisa que um ser humano racional faria fazer quando o objetivo é colocar um par de meias? Alguém me dê um passo, e apenas um passo. Sim? AUDIÊNCIA: Dobre para baixo. DAVID MALAN: Dobre para baixo, tudo bem. Passo dois. Passo dois. AUDIÊNCIA: Pegue sua meia. DAVID MALAN: Pegue sua meia. Ok, ambiguidade tão leve aqui, e este é um dos primeiros pedras de tropeço que nós estamos supostos deliberadamente encontrar aqui. É um pouco ambígua, então pegue sua meia. Tudo bem, vou levar um presente, mas um computador, perceber em apenas um pouco, não vai ter esse tipo de instinto humano apenas escolher o mais próximo. Nós vamos ter que começar, em pouco tempo, expressando nos mais precisamente. Tudo bem, então o segundo passo é pegar o seu pé de meia. Vamos levá-lo. Etapa três. Na parte de trás. AUDIÊNCIA: Encontrar um par correspondente. DAVID MALAN: Encontre par. Ok, então isso é bom. Eu tinha que escolher essa meia. Assim, o objetivo é encontrar uma meia correspondência, agora, mas o que que isso significa? Um ser humano razoável estar, bem como na quarta-feira, quando eu só sabia como encontrar Mike Smith, em um livro de telefone, apenas uma espécie de foi com seu instinto. Mas aqui, é, obviamente, esta meia aqui, mas de um computador Não vai ser tão instintivo. Um computador vai ter um conjunto de bits, como nós discutido na quarta-feira, e esses são organizada de alguma forma na memória. Mas o ponto é que um computador tem apenas a capacidade de olhar para as coisas de uma vez, e de fato, mesmo que humanos - ainda que se sente como eu olhei para baixo e uma divisão segundo depois eu sei onde o meia é, meu cérebro e meus olhos presumivelmente fez um rápido roçar desses meias, e depois fechada para o que está em causa. Então, se vamos ser ainda mais deliberada agora como um computador, como faço para encontrar esse par de correspondência? Bem, temos que interagir. Temos que talvez loop sobre essa confusão de meias no piso em que eu digo algo como PARA CADA meia, buscá-lo -se, e se a mesma forma e tamanho como o outro, ENTÃO ponto, ponto, ponto, vamos continuar a história. Assim, para cada meia, assim que eu pegar um presente. Eu verificar isso é igual a este. Não é, por isso eu coloquei de lado lado. Então eu iterar novamente. É este um igual? Não, não é, então eu colocá-lo de lado. É este? Não. Esse? N, e assim por diante. E então, finalmente, espero, vou encontrar esse meia aqui. Então, se é a mesma forma, tamanho, pegue. E agora, qual seria nosso próximo passo aqui? Sim? AUDIÊNCIA: Identificar a direita da esquerda. DAVID MALAN: Ok, identificar direita e esquerda, de modo Felizmente, esse tipo de obras. Um pouco simétrica, ou eu apenas cansados ​​dessa forma. Tudo bem, então eu identifiquei o direito. E agora, antes de prosseguir, deixe-me apontar o que José fazendo aqui como uma espécie de programador versado. Então, novamente, não há uma maneira de fazer isso, mas além de apenas numeração das linhas, Joseph já começou a fazer isso espécie de recuo. Na verdade, esta é uma convenção muito comum na programação, pelo que, quando você faz algo iterativo, looping estilo, como estamos implicando com a frase Inglês "para cada Meia, "a convenção em pseudocódigo e, como veremos, linguagens de programação normal, é apenas travessão. Pressione a barra de espaço, algumas vezes, pressione a tecla Tab ou similar, para que aninhada embaixo "para cada meia" é o pedaço de coisas que você precisa fazer, como resultado desse loop. Então, isso é tudo o que está transmitindo semanticamente. Agora, entretanto, o "Se é a mesma forma e tamanho," o fato de que "Take it" é recuado ainda significa apenas essa é a única coisa que você deve fazer se essa condição, se esse ramo, que bifurcação na estrada, é de fato verdade. Então, agora aqui, estamos em quatro etapas, identificar direita e esquerda. Eu identifiquei direita. Me dê o passo cinco. E, tecnicamente, podemos realmente chamar o para cada coisa - você provavelmente deve numerar todas as linhas se vamos fazer isso. JOSÉ: [inaudível] DAVID MALAN: [inaudível]? Ok, tudo bem, tudo bem, vamos fazer do seu jeito. Tudo bem, então passo cinco, como é que vamos fazer a meia direita? Como devemos proceder seguinte, aqui? Sim? AUDIÊNCIA: Levante a perna direita. DAVID MALAN: Levante a perna direita, tudo bem. Passo seis? Rapidamente. Sim. AUDIÊNCIA: Encontrar uma extremidade aberta do meia. DAVID MALAN: Ok, encontrar a extremidade aberta do meia. Tão bom. Então, aqui, honestamente, um instinto muito comum seria apenas colocar em meia direita, mas que também é bastante ambígua. A menos que o computador ou humano sabe exatamente o que isso significa, não vai ser para executar essa, por isso aqui, eu tenho encontrou a abertura do estoque. Passo sete? AUDIÊNCIA: Toque os dedos dos pés. DAVID MALAN: dedos Touch. Ok, então agora nós vamos - Tudo bem, eu vou tomar algumas liberdades aqui. Obrigado. Passo oito? Coloque meia. Ok, então agora eu, acho que estamos perto o suficiente para classificar de tomar isso em casa. Tudo bem, então este sobe. Eu vou tomar algumas liberdades com o que significa, na verdade. Coloque a meia na. Tudo bem, agora o passo nove? AUDIÊNCIA: Coloque o pé. DAVID MALAN: Obrigado. Passo nove, colocou o pé para baixo, e agora, podemos repetir. Assim, presumivelmente, agora podemos ir para o passo 10 e dizer identificar deixou meia, mas isso é provavelmente já feito. E então, eu posso classificar de repetir estes passos. Mas esse tipo de petição de princípio. Antes, a última vez que queria repetir algo, nós fez isso de forma iterativa, de novo e de novo, um FOR Cada loop por assim dizer. Será que faz sentido usar um circuito para lidar com ambos à esquerda e à meia certo? Porque parece que estas operações são muito idênticas, exceto pelo fato de que um começa aqui e um começa aqui? Nós loop, ou vamos apenas manter as medidas de escrita 10 e 11 e 12? AUDIÊNCIA: Loop. DAVID MALAN: Ok, então loop. Na verdade, eu poderia ter dito apenas continuar. Então, por que é este o caso? Bem, este é realmente o primeiro da nossa não-óbvio decisões de projeto e, de fato, uma das métricas com as quais vamos começar a avaliar, para nós e para você, o qualidade de um programa é o quão bem desenhado que é. Você já fez a quantidade mínima de trabalho necessário para fazer o trabalho o mais rapidamente, quer em termos de o seu tempo ou em termos de tempo de funcionamento do computador? Quantas operações que é preciso para executar? Então, sem dúvida, esta é uma oportunidade para um loop porque assim que eu começar a copiar e colar, como Joseph efetivamente iria começar a fazer em um momento, você está perdendo o seu tipo de tempo, e você está sendo duplamente expressivo. Mas, ao mesmo tempo, trata-se realmente apenas dois especial casos, à esquerda e à direita. E que, antes, eu poderia ter 10 ou 20 ou mais meias em uma pilha, ele definitivamente não faz sentido ter 50 linhas de código dizendo verificar esta meia, então a próxima, então a próxima. Aqui, é um pouco menos óbvio, e gostaria de propor que poderia ir de qualquer maneira. Podíamos ter esse ciclo, embora apenas laços duas vezes, ou podemos simplesmente copiar e colar um pouco aqui, a fim de começar o trabalho feito. Mas este programa é buggy, por assim dizer. Ele pode ter alguns erros, erros, ou casos de canto, de modo a falar, que nós realmente não antecipar. Nada deu errado desta vez, mas o que poderia ter dado errado durante a execução deste programa? AUDIÊNCIA: Você não tem nenhum meias. DAVID MALAN: Então não pode haver meias há qualquer. Então, vamos considerar que caso de canto. Então, se nós poderia rolar para trás até o primeiro passo, então o primeiro passo foi curvar-se, para que o check-out. Passo dois, pegar sua meia, mas em seguida, encontrar meias combinando, identificar direito. Nós meio que fez um monte de hipóteses, e isto é, francamente, porque o programa às vezes falha. Se você, o programador, têm feito certos pressupostos, como certamente não vai ser meias ou, certamente, lá vai para ser deixado em memória do computador, certamente não vai ser espaço livre em disco no disco rígido - Bem, se você fizer essas premissas, e que não é, na verdade, a realidade, quem sabe às vezes o que o computador de vai fazer? E às vezes, quando você começa a bola de praia fiação ou o O Windows congelado ou similar, que é precisamente porque alguns programador não antecipou os casos chamados de canto. O que mais poderia ter dado errado neste programa? Sim? AUDIÊNCIA: Você não tem uma perna direita e um na perna esquerda. DAVID MALAN: Ok, pode não ter tanto perna de um direito e um perna esquerda, e por isso este programa pode não ser universalmente aplicável. Outros? AUDIÊNCIA: Você pode ter pego uma meia órfão. DAVID MALAN: Eu poderia ter pego uma meia órfão, portanto, um de não-casamento meia que só não tem irmãos, porque eu tenho perdeu, está rasgado, é na lavagem ainda, ou algo semelhante. De modo que, também, não tem sido tratada. Sim? AUDIÊNCIA: Você já deve ter meias. DAVID MALAN: Eu já poderia ter meias. Eu realmente não verificar. SE você não tem meias, em seguida, proceder para fazer linha de um e dois. E isso poderia acontecer. Você dorme com as meias e similares, assim que, também, um caso de canto muito razoável. E talvez um outro? AUDIÊNCIA: A meia é de dentro para fora. DAVID MALAN: Então, a meia é de dentro para fora, por isso fizemos nenhum erro verificar, em suma. Nós não verificar se o estado do mundo é como nós esperamos. Nós não verificar se realmente encontramos o que está procurando. E mesmo que esta é uma espécie de exemplo ridículo envolvendo meias, no final do dia, isto é exactamente o tipo de mentalidade que você precisa ter ao escrever programas, mesmo em zero, bem como em C, em JavaScript, em PHP, porque caso contrário, seus programas exibem a equivalente do que bola de praia fiação ou apenas produzir resultados imprecisos. Graças tantos aqui para o nosso escriba de Joseph. [Aplausos] DAVID MALAN: Tudo bem, então o que é, em fato, um programa de computador? Bem, vamos dar uma rápida olhada em uma um representante aqui. Portanto, este é um programa escrito em uma linguagem chamada C. C é bastante antigas esses dias, mas muitas novas linguagens são construídas em cima dela. Na verdade, PHP, uma das linguagens de web-centric vamos usar para final do prazo, ela própria tem o que é chamado de intérprete, um programa que está escrito em C, mas mais sobre isso em muitas semanas a partir de agora. Mas este programa, e isso é o que significa escrever um programa, embora muito simples. Temos alguma sintaxe críptica aqui, mas você pode provavelmente acho que, mesmo se você nunca programou antes, o que este programa faz. Na verdade, eu não sei o que printf é, mas certamente imprimir evoca a idéia de imprimir algo. E então sim, este programa está indo finalmente para imprimir as palavras "Olá, mundo". Agora, se você tem um Mac ou um PC ou um computador com Linux, as probabilidades são, pelo menos, se você baixou algum livremente software disponível, você poderia ter sido escrita de programas em seu próprio computador portátil por um bom tempo agora. No Mac OS, por exemplo, há um programa chamado Terminal que vem com um Mac, que normalmente é a sua Utilitários da pasta, e que, geralmente abre um preto e branca ou uma janela em branco e preto em que você tem um prompt no qual você pode digitar comandos. Portanto, esta é realmente uma reminiscência do que os computadores costumava ser antes gráfica de usuário interfaces, interfaces gráficas, veio junto. Agora, no Windows, você tem um mecanismo semelhante na forma do prompt de comando. Mas o que eu vou fazer aqui é abrir-se, digamos, TextEdit de novo, então o mesmo programa que estava usando para um momento pseudocódigo atrás, e eu estou indo para ir em frente e escrever o meu primeiro programa. Incluir stdio.h, o que isso significa, int main vazio, o que isso significa, e depois no meio aqui, printf ("Olá, mundo".). E então citação perto, fechar parêntese, ponto e vírgula. Agora eu estou indo para ir em frente e bateu Command-S. Vou para ir em frente e salve este como hello.c, para a convenção em no mundo da programação C é o nome do arquivo de ponto c. Vou só colocar no diretório John Harvard Casa, aqui, clique em Salvar, e agora eu estou indo para ir para este janela de terminal, que novamente é o prompt preto e branco onde eu possa executar comandos. Posso executar programas, digitando seu nome, e não por duplo clique ícones no sentido usual. Mas a coisa é sobre o C é que uma língua como o primeiro C vem desta forma, algo chamado código fonte. Algo que parece um pouco como o Inglês, mas é definitivamente menos como o Inglês do que um pseudocódigo José momento atrás. É um pouco mais misteriosa. Parece seguir alguns padrões ou regras. O fato de eu ter chaves, vírgulas, citações, chaves ângulo, se sente como um computador veio com essa tipo de linguagem. Mas se eu for, agora, para esta janela de terminal, que pode executar um de comando que vai converter esse código-fonte é algo chamado de código objeto. Isso vai converter Inglês sintaxe semelhante a zeros e uns, os mesmos tipos de zeros e uns, nós falou sobre quarta-feira. Agora, eu estou indo para executar um comando chamado Clang. Mais sobre isso nas próximas semanas, mas é um programa com que eu posso converter hello.c em um monte de zeros e uns. Agora, eu executar esse comando. Já corri Clang, e então eu disse-se em executar este arquivo chamado hello.c, que eu criei um momento atrás, e nada parece acontecer. Mas, na verdade, se eu coloquei em volta do meu diretório home, gostaria de ver que este programa a.out estupidamente chamado agora existe. Este é apenas o nome padrão para um programa ao escrever em C. Podemos substituir este, eventualmente, mas é o a.out nome do programa que eu apenas convertidos em zeros e uns. E agora que está zeros e uns, meu Mac, neste caso, ou PC com Windows, pode entender os bits, os zeros e uns. E então quando eu aperte Enter, eu vejo "Olá, mundo!" Mas é um pouco buggy. Eu não sabia bem dizer "Olá, mundo: ar: -! Jharvard". O ar é o nome do meu computador. Jharvard é o nome da conta, então o que eu claramente omitir do programa? Algum tipo de quebra de linha. Eu não bati o equivalente a Enter ou o retorno de carro, e isto é, novamente, prova do facto de que computadores pode só fazer o que lhes dizem para fazer. E o fato de eu não dizer ao computador mover o cursor para a próxima linha - bem, isso certamente não vai apenas fazê-lo presunçosamente para mim. Então, se eu voltar para o meu programa, e eu digo \ n - Então, \ n, como veremos em breve, é o caminho da representando coisas estranhas como novos caracteres de linha, coisas que de outra forma seria o resultado da pressionando a tecla Enter. Mas, por enquanto, só sei que bater a tecla Enter se apenas fazer o nosso código parecer estranho, para que o mundo decidiu, você sabe o que, para manter as coisas mais bonitas, para mantê-lo em uma linha, vamos apenas dizer \ n representa uma nova linha. Deixe-me voltar a guardar o meu arquivo, volte para a janela do terminal, e re-correr a.out, Enter. Ainda buggy, mas por quê? AUDIÊNCIA: [inaudível] DAVID MALAN: Sim, por isso eu preciso recompilá-lo. Então, para compilar um programa apenas significa convertê-lo de fonte código para código objeto do código-fonte, para zeros e uns. Agora, o simples facto de eu acertar Economize neste TextEdit não tem tendo sobre os zeros e uns, porque eu preciso primeiro diga Clang hey, eu mudei as linhas de código, o código fonte. Você precisa regenerar a.out. Nada parece ter acontecido, mas, em um computador, na linha de comando, por assim dizer, quando nada acontece, que normalmente significa que está tudo bem. Quando algo acontece, isso significa você estragou tudo, em geral. Então, vamos agora ir para a.out, e de fato agora, eu tenho "Olá, mundo ". E agora, o que acontece com esses zeros e uns? Onde, de fato, são aqueles? Bem, eu não posso realmente só tipo de fuçar muito eficazmente. Deixe-me abrir o Editor de Texto. Aqui está a.out. Deixe-me ir em frente e abrir isto, e este é, aparentemente, o que o meu programa parece. Então, eu abri, não hello.c, mas a.out. Mas este não é realmente o que o meu programa realmente é. Claramente, este é um tipo de caracteres alfabéticos. Eu não vejo nenhum zeros e uns, mas este é porque a.out é um programa. Zeros e uns - mas TextEdit, como o nome sugere, é assim como o bloco de notas do Windows, é apenas um editor de texto, por isso é confundindo todos esses zeros e uns como se fossem, o que? Caracteres ASCII. Então, lembro na quarta-feira, só veio com essa mapeamento arbitrário de números, ou bits, para letras do alfabeto e sinais de pontuação e afins. Então TextEdit, que é um editor de texto é interpretar mal estes padrões de zeros e uns que são supostos ser palavras de impressão, como "Olá mundo,". É exibi-los como ASCII, e é por isso que parece um pouco confuso. Agora, existem algumas dicas de correção aqui. Observe se destacar, há uma pitada de verdade "Olá, mundo ", em algum lugar em que o programa é a frase que escreveu. Mas vamos em frente e ver agora com um programa diferente. Este não é que vamos usar, que muitas vezes, mas ele também vem com um Mac e vai estar dentro do aparelho CS50. Deixe-me ir em frente e abra com um programa chamado XXD. Voltar no dia, a maioria dos programas foram nomeados bastante enigmaticamente, e assim a tendência continua. Mas-b significa cuspir fora este programa como binário. Não executá-lo. Mostrar-me como zeros e uns, e este é o C programa que acabou de escrever. Agora, eu, como um ser humano aqui, eu sinceramente não tenho idéia do que estes vários padrões de zeros e uns representam. Voltar no dia, eu, com meus cartões perfurados ou similares, seria realmente tem que procurar o que estes vários padrões de 01111000, realmente representam. Ou pior, eu teria que fazer a perfuração ou a criação destes padrões de zeros e uns. Mas, por agora, assumir a fé que uma CPU, Intel Inside, assim para falar, dentro de todos os nossos computadores estes dias, sabe como interpretar esses zeros e uns. E alguns zeros e uns significam impressão. Alguns zeros e uns significa reproduzir um som. Alguns zeros e uns significa tomar a entrada do usuário a partir de um teclado. Há todos os tipos de padrões diferentes, mas, felizmente, como seres humanos, em geral, só precisa se preocupar com a programação em este nível bastante elevado. E em outras classes CS você pode mergulhar mais fundo e olhar em coisas como os zeros e uns, ou ainda outras coisas ainda. Então agora vamos converter este. Vamos passar muito rapidamente para longe de C e passar para algo um pouco mais confortável, um pouco mais emocionante, em que podemos voltar nossas animações e sons e afins que claramente ter escapado nós neste Interface bastante primitiva. Portanto, este mesmo programa em C pode ser representada, já neste linguagem de programação chamada scratch como se segue. Isso é o equivalente a este programa Olá mundo escrito em este enigma linguagem de estilo peça chamada Scratch. Então deixe-me ir em frente e abrir este programa muito. É novamente chamado Scratch. Ele está disponível gratuitamente, e esta é a mesma coisa que começou hoje em. Então, isso aqui é zero, e ele está dividido em alguns peças diferentes. Na direita topo, temos a chamada fase, e de fato, que é onde os cookies realizado apenas um pouco atrás. E em que estágio estão as coisas chamadas de sprites, caracteres ou objetos ou entidades. Isso realmente não importa como você pensa deles, mas eles são programáveis, coisas móveis e, neste caso, esta programa que nosso aluno escreveu tem um casal de gingerbread biscoitos, um par de biscoitos circulares, todo um conjunto de corações, um monte de óculos. Devido a isso, ele ou ela é capaz de programar cada um desses caracteres individuais separadamente. Agora, o que isso significa para programar esses personagens? Bem, deixe-me ir em frente e clique em este cookie mão esquerda e vá para a esquerda topo aqui. No canto superior esquerdo da tela do meu agora é o assim chamada área de scripts. Esta é uma espécie de lousa em branco, inicialmente, sobre o qual eu posso arrastar e soltar peças do puzzle que, francamente, fazer exatamente o que eles dizem. No topo desta pilha de peças de quebra-cabeça é a palavra Quando clicado Bandeira Verde, e se você não percebeu antes, do jeito que eu comecei a música clicando cookie foi, literalmente, uma bandeira verde. De modo que parte do enigma no canto superior esquerdo há significa que quando o cliques humanos a bandeira verde, passou a fazer as seguintes coisas. Agora, o que eles biscoito continuar a fazer? Eu realmente não sei como interpretar isso ainda, mas o biscoito aparentemente definir sua ranhura para zero, então ele esperou três segundos, em seguida, mudou o seu grupo a um, então esperou um segundo, em seguida, mudou seu sulco de volta a um. E então, isso realmente parece um pouco de um bug, não deve tem que mudar sua rotina e outra vez a menos que seja sendo alterada em outro lugar, mas esta série de passos é o que está ditando o comportamento desse cookie particular. Então, vamos realmente rolar para trás e não olhar para algo tão complexa ainda. Deixe-me ir em frente e vá em File, New, e ter uma ficha limpa. Então, agora, eu realmente ter uma área de script vazio, um palco vazio, com nosso scratch Sprite padrão, e na parte superior esquerda na minha tela que eu tenho a palete de todos os seus disponíveis peças do puzzle. E não vai passar quase que muitas dessas coisas hoje, porque, mais uma vez, a maioria são auto-explicativo, mas vamos tentar categorizá-los e apontar as semelhanças com estas línguas futuras que vamos mergulhar. E na parte superior esquerda aqui é a primeira Bandeira Verde Quando clicado, então deixem-me arrastar esta aqui, ampliar um pouco. E se eu clicar na bandeira verde, nada realmente acontece porque Eu não ter anexado qualquer lógica, qualquer declaração por assim dizer, a que a bandeira verde, então deixe-me ir até a Categorias mais aqui. Atualmente estou na categoria de controle. Estou em vez de ir para descer para a categoria parece, e há um monte de coisas aqui que dizer Diga, Pense, mudança de cor do traje Switch,. Assim, você pode fazer coisas tolas com trajes e sons e outros semelhantes. Deixe-me ir em frente e dizer Diga, e agora perceber como eu arrastar e soltar esta peça de quebra-cabeça, ele vai querer trancar na forma correspondente. Então, quando eu ir em frente e deixar de ir o meu mouse, eles travam juntos, e agora se eu for até aqui e clique na bandeira verde, o gato, de facto dizer Olá, porque isso é o que está dentro desta caixa branca. Veremos em breve que esta caixa branca é o que é chamado de argumento, ou um parâmetro. É um modo de alterar o comportamento de, neste caso, uma enigma, mas se eu quero dizer exatamente o que eu disse antes, dizer Olá, mundo, agora eu posso voltar aqui, jogue e "Olá, mundo" é o que é dito. Então, nós estamos literalmente a programação agora. Não é tudo o que convincente de um programa, mas pelo menos é um pouco de algo mais convincente do que parece, a À primeira vista, como este. E podemos muito rapidamente obter ainda mais expressiva porque em zero, como em outras línguas, há todo tipos de declarações, não apenas dizer algo ou impressão, mas você pode fazer coisas como esperar, como acabamos de ver com o cookie, um determinado número de segundos. Você pode reproduzir sons no ambiente do Scratch apenas como você pode em um jogo normal de som programa de computador. Você pode verificar o que são chamados de expressões booleanas. Então, agora, vamos começar a acrescentar ao nosso kit de ferramentas alguma terminologia que, na verdade, refere-se ao exemplo que José e eu fiz aqui com as meias. Então declarações são apenas declarações de fatos. Fazer isso. Uma directiva para o sprite, ou eu humano a, para fazer alguma coisa. Uma expressão booleana é algo que tem um valor, uma chamado valor de verdade, que é tanto um zero ou um, falso ou verdadeiro, ou desligar, sim ou não. Isso realmente não importa como você pensa sobre isso, mas é um estado binário. Como Nate discutido em vídeo de quarta-feira, dois coisas diferentes. Assim, em Scratch, expressões booleanas acontecer a olhar como esses objetos azuis aqui, e neste caso, a questão marca implica que você está fazendo uma pergunta. É o gato, ou o sprite, tocando o ponteiro do mouse? Portanto, este é apenas um exemplo de um bloco Scratch que está acontecendo que nos permitam verificar sim ou não, é o mouse tocando o Sprite na tela? E isso pode ser útil se você realmente quer fazer as coisas com o mouse. Além de expressões booleanas, temos coisas como é o mouse para baixo, de modo que você pode detectar que tipo de questionar também. Nós podemos fazer matemática, se você realmente quer, e não há usos realmente mais atraentes para este do que apenas pura aritmética, como vamos ver. Pseudo aleatoriedade e fazer o seu programa parecem pensar ou se comportar de forma diferente com base em alguns valores aparentemente aleatórios, e então temos coisas como expressões booleanas como AND. Então, se você realmente quiser conferir dois valores, veremos em Raspe que podemos realmente testar se este é verdadeiro e isso é verdade. Por exemplo, no caso das meias, que poderia ter a muito final a pergunta se é na meia esquerda e direita soco é sobre, saia. Está tudo feito para o dia, de modo que seria uma oportunidade para isso. Então, vamos em frente e tentar remendar alguns destes juntos e ir para um par de exemplos mais convincente do que este. Então deixe-me ir em frente aqui e abrir alguns dos exemplos que sempre estará no site do curso, bem como, e abrir hello2. Assim, em hello2 aqui, temos um programa que está fazendo alguns as coisas, mas ele não está fazendo isso de forma tão eficaz como poderíamos. Então, aqui diz "Olá, mundo" por um segundo e então espera por um segundo. E depois faz isso de novo, e depois faz isso de novo. Então, se eu clicar na bandeira verde, Scratch diz "Olá, mundo. Olá, mundo. Olá, mundo. "E este é, obviamente, candidato agora para melhoria. Qual é a melhoria marginal, esperançosamente, nós podemos agora fazer scratch se apóia o conceito de? Algum tipo de laço. Algum tipo de repetição, agora, seria bom, então deixe-me realmente tentar isso. Deixe-me realmente ir e passar isso. Então aviso pode separar blocos tão facilmente como você pode adicionar ao anexá-los. Deixe-me ir sob controle, desloque-se aqui, e de fato, há essa peça do puzzle aqui Repeat, e para sempre e Se para sempre. Portanto, há uma série de maneiras de expressar construções de iteração em Scratch. O que eu provavelmente quer aqui não é para sempre, porque eu só quer que isso aconteça três vezes, mas, provavelmente, repetir. Então deixe-me arrastar Repita aqui, arraste e solte-o, e agora, em vez de dizer "olá, mundo" três vezes, deixem-me arrastar esta parte do enigma aqui. E mesmo que não parece se encaixar, o programa é inteligente o suficiente para perceber que vai crescer para preencher, por isso é o formas matéria que, e não o tamanho absoluto. Deixe-me mudar a repetição para três, e agora deixe-me ir frente e arrastar espere um segundo de lá também. Vai tirar em tão bem, e agora eu estou indo para arrastar esses caras por aqui e simplesmente jogá-los fora, porque eu não precisamos mais deles. Deixe-me o zoom e clique na bandeira verde agora, e temos o mesmo programa, mas, como eu previ antes, melhor concebida, pois você pode imaginar o quão ruim este programa seria, certamente, esteticamente, se você tivesse que começar a copiar e colar, copiar e colar, ou arrastando e soltando as mesmas coisas danado novamente e novamente. Agora, simplesmente dizendo coisas na tela, imprimindo no tela, realmente não tudo o que emocionante, então vamos abrir uma variância terceiro aqui. E agora, como você vai ver, isso vai rapidamente tornar-se irritante - [MEOW] DAVID MALAN: - mas é também uma espécie de bonito. [MEOW] DAVID MALAN: Ok, então melhor, e nós certamente pode usar isso mesma transição de chunking isto em um looping estrutura, mas vamos torná-lo mais interessante ainda. Deixe-me ir à frente e abrir uma variação quarto aqui, onde eu levar as coisas um passo adiante. Assim, de acordo com este, bobo que esta é a primeira relance, o que é este programa vai fazer? Vai meow uma vez. Por quê? Bem, se é, tanto quanto eu sei, sempre menos do que dois. Não há noção de aleatoriedade aqui. Tenho literalmente hard-coded um e dois, mas esta é uma exemplo, agora de realmente usar uma expressão booleana. Muito parecido como fez José em seu pseudocódigo, o recuo SE encontrar meias combinando então faça o seguinte, temos aqui uma expressão se um é menor do que dois então - e de fato temos até um pouco de recuo, onde o roxo é ligeiramente recuado para a direita - Então você está indo jogar o miado de som. Agora, no presente caso, que um é sempre menor do que dois, de modo que este é uma espécie de desperdício de uma condição. Mas nós vamos ser capazes, como veremos, para ligar em outras coisas esses espaços reservados, onde um e dois são agora. Então, vamos agora avançar para exemplo cinco destes vários olás e olhar para o que este programa vai fazer. Então, agora, em uma frase Inglês, como isso programa se comportar? AUDIÊNCIA: Meows metade do tempo. DAVID MALAN: metade do Meow do tempo, por isso esta é uma forma de transmitir uma idéia muito simples. Mesmo que aconteça estar usando algumas desigualdades aqui em alguns números, isso é realmente apenas um programática Assim, de forma precisa, de dizer se a moeda der cara, ir frente e miau. Ou, inversamente, se a tirar coroa, não meow. E, neste caso, como é que vamos expressar isso? Vamos escolher um número aleatório de 1 a 10, e se isso número é menor que 6, vá em frente e miau. E como este aqui? Bem, novamente, observar apenas o arrastar e soltar e coisas encaixe. Então, agora vamos ver se esta aleatoriedade funciona. Deixe-me ir em frente e clique na bandeira verde. [MEOW] DAVID MALAN: Okay. [MEOW] DAVID MALAN: Okay. Ok, bom, então temos cabeças, as cabeças, caudas de forma eficaz. Caudas. [MEOW] DAVID MALAN: Heads. [MEOW] DAVID MALAN: Excelente. É sempre difícil quando você começa apenas estatisticamente ruim correr, e é todos os chefes, e o programa realmente não funcionar como seria de esperar. Mas, desta vez, funcionou, e parece que temos, se nós isto, um número infinito de vezes, a probabilidade de 50%. Agora, novamente, não tão interessante, apenas fazendo gatos miau, então vamos ver se não podemos avançar este um pouco mais aqui na versão seis. Então, agora, temos a versão realmente irritante - [Miados a cada poucos segundos] DAVID MALAN: - e isto é o que é conhecido, em geral, como um loop infinito. Laço tão infinita neste caso se sente mal. É definitivamente vai começar a soar ruim, e ainda infinita loops não são sempre ruins. Você pode pensar em contexto de programas de computador onde você realmente quer um loop infinito? Sim? AUDIÊNCIA: Quando você quer verificar uma condição. DAVID MALAN: Ok, quando você quer manter a verificação de uma condição? Como o quê? AUDIÊNCIA: [inaudível] DAVID MALAN: Ok, bom, então se você tinha algum programa, alguns tipo de coisa de automação residencial, onde pretende constantemente monitor é algo que o caso. São as luzes? São as luzes, porque talvez você tem um timer, e você quer que eles para sair, talvez seja necessário fazer alguma coisa novamente e novamente. E, na verdade, falando de temporizadores, qualquer um de vocês que relógios em seu computador ou relógios digitais, que é uma loop infinito. Ele continua a atualizar a hora porque é constantemente verificação e controlo e verificação tem o tempo mudou, e se sim, oh, meu deus. O relógio é finalmente alterada. Ele precisa mostrar que o valor para você. Assim, enquanto a maioria dos laços de tempo infinitos são um erro, ou pelo menos uma decisão de design pobre, às vezes eles fazem têm o seu valor. Bem, vamos avançar ainda mais aqui para hello7. Portanto, agora o programa vai ficar um pouco mais interativo. Deixe-me aproximar aqui, e de novo, isso é o que é bom sobre o Scratch. E nós vamos usá-lo para ser claro, Scratch, apenas hoje e em problema da próxima semana definido. Mas na segunda-feira, nós mergulhar em C. Neste programa aqui, ele faz, para sempre, a seguir. Se tocar o ponteiro do mouse - agora, quem é o contexto aqui? Bem, aviso prévio e que quem está selecionado para baixo aqui no fundo direito é o gato, sprite um, assim que estes scripts, este programa, aplica-se especificamente a ele. Então, se o gato está tocando o ponteiro do mouse, em seguida, ele vai para jogar este e esperar dois segundos, e repita ad nauseum. Então, vamos em frente e bateu jogo. Nada acontece, mas se eu quiser o pet gato agora, eu posso simplesmente. [MEOW] DAVID MALAN: adorável. [MEOW] DAVID MALAN: Ok, menos chata, mas também fica aborrecido, então vamos seguir em frente e ver se não podemos injetar uma lógica pouco mais. Esse foi o exemplo sete. Aqui no exemplo oito, vamos introduzir uma condição ELSE. Assim como um garfo literal na estrada, em que você pode ir para a esquerda ou você pode ir para a direita, uma condição em uma programação linguagem como Scratch, ou, como veremos C, pode permitir que você ir em uma direção ou outra através de um IF ELSE construir. Então, literalmente, se tocar ponteiro do mouse, este vai jogar algum som, senão ele vai jogar este outro meow, som. Agora, se você pode deduzir o nome desses sons, você pode adivinhar o que este programa é destinado a conjurar a idéia de. Este gato é miando feliz. [MEOW] DAVID MALAN: Felizmente, mas não faz muito gosta de ser tocado. [Ruge] DAVID MALAN: Então agora temos um gato que vai gritar com você. Tudo bem, bem, um último exemplo com os gatos aqui, e Vamos versão aberta nove deste aqui. Então, agora, temos o próximo som mais irritante que eu poderia encontrar, por isso temos uma morsa ou um leão-marinho aqui quem vai faça o seguinte. [CASCA SELO] DAVID MALAN: Ok, então isso vai continuar até que você descobrir como este programa funciona. Então, desta vez, este animal tem dois scripts, eo que é interessante aqui é que esses scripts estão indo para executar em paralelo. Então, porque eles começam ambos com uma bandeira verde clicado, é como ir como este, e ambos os programas começam a correr-lo uma vez, mesmo se eles estão looping para sempre. Assim, no roteiro topo, eu tenho um pouco de lógica. Quais recursos que fornecem até lá? [CASCA SELO] AUDIÊNCIA: [inaudível] DAVID MALAN: Se é o que? [CASCA SELO] AUDIÊNCIA: Se mudo para zero, ele vai continuar jogando o soar. [CASCA SELO] DAVID MALAN: Ok, muito bom. Então, se silenciado, o que é isso, essa coisa laranja é zero, ENTÃO reproduzir o som do leão de mar e pensar "Oh, oi, "por dois segundos. Agora, eu não sei o que é silenciado, mas zero evoca a idéia de falso ou desligado. Então, se silenciado é falsa, por isso, se não silenciado, continuar jogando o som. Tudo bem, bem, como é que vamos desativar esta coisa? Bem, vamos olhar para o segundo script lá. O segundo script diz silenciado definir a zero. Observe também é laranja, então o que faz é arranhões cores blocos da mesma cor, se é uma espécie de relacionados logicamente. Assim como a top se silenciado era laranja, então é silenciado aqui mencionado no bloco de laranja. Mas este é um atribuições de variáveis, assim como em álgebra, você tem x e y e z, em programação que você tem variáveis, mas eles são geralmente - Vamos fazer uma pausa por um momento e figura como para parar este latidos. Como posso fazer isso? [CASCA SELO] DAVID MALAN: Okay. Ele parou. Okay. Assim como na álgebra você tem variáveis ​​x, y, e z, mas em programação, tendo variáveis ​​como x, y, e z é geralmente desaprovado porque não está em todos os expressivo. Eles não têm nenhum significado semântico qualquer, por isso a maioria em linguagens de programação, as variáveis ​​podem ter plena nomes verdadeiros ou palavras ou frases, como mudo, para dizer o que eles fazem. Portanto, este segundo script também estava ouvindo sempre, e ele disse se a chave, o Espaço tecla do teclado, é pressionado, ponto de interrogação. Portanto, há uma condição com uma expressão booleana que é vai responder a uma pergunta ou a verdade ou falso, então eu tenho dentro do que se a tecla de espaço é pressionada e Se estiver silenciado é zero, definir silenciado a um, ELSE definir silenciado a zero. Então garfo este outro na estrada, e observe como eu tenho aninhados os dois, se as condições, é uma forma de verificar se o Bar de espaço pressionada porque se assim for, ou eu quero ir para esse ou aquele caminho. E como faço para inverter o valor do mudo? Eu tenho que verificar é zero? Se for assim, torná-lo uma, senão fazê-lo, portanto, zero a alternar seus dois estados. Tudo bem, então temos, então alguns deles fundamentais construtos. Temos expressões booleanas, e perceber, também, estes são nem todos os que não familiares. Na verdade, aqui está uma imagem rápida de Harvard curso CS50 ferramenta de compras, e qualquer site lá fora que tem caixas e queda baixos realmente, todo esse tempo, vindo a utilizar Expressões booleanas. Neste caso aqui, se você clicar na caixa ao lado curso maior ou igual a 4,5, ou mesmo ao lado faculdade, você está especificando uma expressão booleana. Mostre-me cursos para os quais essa expressão é verdadeira. Ou para a direita, não entra em conflito com cursos que eu sou tomar, se estiver marcada, então sim, você quer verificar essa condição, mais você quer ignorar. Expressões tão booleanas são uma espécie de todos os lados, mas quando nós colocá-los em condições, se se as condições, SE Elses, ou podemos até mesmo simular mais profundo níveis, IF ELSE IF ELSE - de modo que é uma espécie de estado ternário. Você pode ir por este caminho ou esta forma ou este caminho. Podemos manter as coisas de nidificação para ir em direções diferentes. Então scratch tem esses laços, como sempre. Ele tem essas características como 10 Repita, alguns número finito de vezes. Nós temos a habilidade agora para definir variáveis, portanto, neste caso Eu já declarou, por exemplo, uma variável chamada meias. Eu inicializado a 0, e isso é ainda outra direção que poderia ter levado até aqui com Joseph, em que talvez eu apenas manter o controle de quantas meias eu tenho em e encerrar o programa quando o valor dessa variável é 2. Isso seria uma outra forma de tipo de generalização que problema e fazer algo de novo e de novo. Bem, vamos em frente e agora introduzir algumas coisas novas. Então, aqueles de vocês com a experiência de programação prévia vontade sei que um monte de línguas têm matrizes ou vetores ou listas, e, de fato, Scratch tem algo como isso, também. Então vamos ver se não podemos levar as coisas para o próximo nível aqui. Se eu tiver a capacidade, agora, com essas peças do puzzle para adicionar algo, como uma palavra ou um número, a uma variável, eu posso começar a acumular coisas. E esta é, na verdade, a propósito bonitas para coisas como jogos, role-playing games onde você é o tipo de caminhada ao redor um mundo de fantasia colecionar coisas, pegar coisas, ganhando pontos, ou similar. Você pode querer manter o controle de algum tipo de inventário, e de fato, isso é o que um dos nossos ex-alunos aqui fez com algo chamado Fruitcraft RPG. Então deixe-me ir em frente e abrir esta coisa aqui, e em Fruitcraft, temos esse mundo em cima. Então deixe-me ir em frente e clique na bandeira verde. Aviso no canto superior esquerdo é uma espécie de inventário. Que é implementado em Scratch como o que nós vamos chamar uma matriz ou uma lista, e agora temos esta pequena animação. Assim como nós começamos mais cedo, com esta história de amor cookie, e, então, avançou para gatos e leões marinhos, agora podemos ter coisas que são ainda mais interativo. E esse carinha azul, eu posso começar a se mover em torno de sua pequena casa aqui. Portanto, parece que ele tem uma saída aqui, então eu estou usando as teclas de setas, para cima, para baixo, da esquerda à direita. E agora eu estou fora, então vamos o que eu tenho aqui. Parece que uma laranja, e de fato, assim que eu toque na laranja, ele fica se estatelou em meu inventário. Se eu passar por aqui para as cerejas, agora eu tenho alguma coisa outra coisa no meu inventário. E isso é tudo bom e bonito, mas pensar em como, agora, este é implementado. Bem, nós temos essa noção de uma lista, e que é, aparentemente, um peça do puzzle que você acabou de dizer o que você quer adicionar a ele, adicione laranja, adicione cerejas. Agora, o que é esse carinha azul fazendo? Bem, ele é um sprite. E, presumivelmente, a laranja e as cerejas - eles mesmos eram sprites separados. E usando condições em expressões booleanas, os estudante foi, provavelmente, capaz de expressar SE cara azul é cerejas tocando em seguida, adicione as cerejas palavra ao seu inventário, e depois também ocultar o sprite cereja. Então, debaixo do capô, há provavelmente ainda é uma cereja Sprite lá. Nós apenas disse que ele se torne efetivamente invisível. Agora, se eu continuar a andar por aqui, também podemos fazer isso coisa proximal, onde eu posso ir e ler a placa. Então, se cara azul tocando sinal, podemos ter este bloco Say assim como o gato nos falou em palavras, Olá, antes, "Got algumas frutas? Traga-o para o lugar de frutas. "Tudo bem, agora, aparentemente, Eu tenho minhas indicações. Eu posso ir até aqui para o lugar de frutas, alinhar-me se com a porta. Agora, eu estou aqui. Eu posso ir até o homem no balcão. Ele detecta que estou perto dele, por isso não tem que ser bastante idêntica tocar, e eu ganhei o jogo. Portanto, temos Fruitcraft RPG. Assim, podemos fazer coisas ainda mais avançados do que isso. Podemos acrescentar sons. Podemos acrescentar aleatoriedade pseudo. Podemos acrescentar complexidade. Deixe-me ir à frente aqui, e ao invés de fazer isso sozinho, deixe-me mostrar-lhe uma das propostas mais sofisticadas temos no ano passado a partir de um certo alguém chamado Blake. Podemos ter um voluntário que é confortável aparecendo em câmera e é para jogar um jogo? Que tal ali? Vamos para cima. Tudo bem, então o jogo que você tem apenas inconscientemente se ofereceu para jogar - [Aplausos] DAVID MALAN: - é algo do passado chamado "Frogger". Qual é o seu nome? RENDA: Renda. DAVID MALAN: Redna? RENDA: É como Brenda com um b. DAVID MALAN: Ok, Renda. David. Prazer em conhecê lo. Então, aqui em "Frogger", e se pudéssemos aumentar o volume apenas um pouco, você é esta pequena rã verde na parte inferior. Você pode usar a esquerda, direita, para cima e para baixo, e seu objetivo é atravessar a rua, cruzar o rio, e tocar as almofadas de lírio na parte superior. Aw. Um mais t - refazer, tudo bem? Vamos parar de sucesso. Ninguém viu isso. [Aplausos] [Aplausos] DAVID MALAN: Yeah. Muito bem feito. Excelente, obrigado. Assim que houve Frogger. Agora que você sabe o que você tem ficou-se em, um voluntário mais para um diferente jogo apresentado por outro aluno. Você quer vir em cima? Qual é o seu nome? RICHARD: Richard. DAVID MALAN: Richard. Tudo bem, Richard, venha. [Aplausos] DAVID MALAN: Você tem algo que vai soar familiarizados em breve, por isso aqui estão as suas instruções. Então, em um momento, algumas peças de quebra-cabeça vai rolar para cima a partir da tela que parecem ou deixou ou direita para cima ou para baixo. Você vai ter que bater as teclas de setas de tal forma que corresponde a essas peças do puzzle se alinhando com os espaços reservados no topo. Então, quando você ver uma seta para a esquerda, e que seja alinhado com a esquerda seta, pressione a seta esquerda. Você pode começar. [MÚSICA - "mais forte" Kayne West] DAVID MALAN: Todos todo, direito de palmas para Richard. [Aplausos] DAVID MALAN: Muito bem feito. Obrigado. [Aplausos] DAVID MALAN: diversão Então e, aparentemente, uma espécie de intimidador como poderia ser a de implementar algo como aparentemente sofisticado como este, percebemos que o aluno não definido e apenas escrever tudo isso de uma só vez. Em vez disso, você pode quebrar um problema aparentemente tão complexo como esta em pedaços muito pequenos, e isso, também, é vai ser um tema. A pior coisa que você pode fazer, por escrito, um programa em mais qualquer linguagem é sentar, ficar muito animado, escrever o maldita coisa toda, e depois só espero que ele funciona pela quando você terminar de escrever. Em vez disso, o processo de programação deve, geralmente, ser muito criterioso, muito interativo, em que você só definir passos muito pequenos para si mesmos, pedaços pequenos quer morder, e para que você tenha estes sanidade cheques, marcos pouco que você pode conhecer. E então você construir em cima das pessoas para criar mais coisas sofisticadas ainda. Assim, por exemplo, como poderíamos ir sobre implementação de um jogo como este? Bem, francamente, eu certamente começar apenas apoiando uma tecla de cada vez. Vamos apenas implementar o suporte para a seta esquerda. Assim, o aluno tinha de alguma forma criar no Photoshop, ou em Coçar-se usando o editor de pouco gráfica, uma chave de seta que se parece com o um na parte superior à esquerda, apenas o espaço reservado cinza. Em seguida, o aluno tinha que descobrir o que x, y coordenar a colocou, onde colocá-lo na janela. 0, 0 está aqui em cima, então você tem que descobrir o número de pixels, ou pontos, para compensar a seta de a parte superior da tela. E então, uma vez que é no lugar, o programa não faz realmente fazer nada ainda, então você precisa então de um sprite segundo, para exemplo, uma seta verde que também é apontar para a esquerda, e você então precisa começar a escrever alguns scripts para isso. E você percebe, talvez, que essas coisas começaram a chegar em velocidades diferentes, e as cores estavam em diferentes locais, e isso é porque o estudante usou um pouco de aleatoriedade pseudo. E por acaso pseudo, eu só quero dizer escolher um número entre alguma coisa e alguma coisa, porque você pode iniciar a coisas do mapa, como se o número é entre um e cinco, bem, vamos fazer a coisa verde. Se é entre 6 e 10, vamos fazer a peça do puzzle vermelho. Enquanto você tem uma maneira de gerar algum tipo de aleatoriedade, então você pode tomar decisões com base em que aleatoriedade. E eu continuo dizendo pseudo aleatório, porque há uma pequeno segredo sujo. Computadores não pode vir até com números aleatórios. Eles só podem fazer o que lhes é dito, porque eles são feitos pelo homem dispositivos. Eles não podem simplesmente acho que um número como nós, seres humanos sinto que nós podemos. Um computador tem que fazer algo matemático para conjurar o ilusão de número matemático, às vezes usando o dia atual de tempo como uma entrada para descobrir o que número de voltar, mas mais sobre isso em outro momento. Por enquanto, só sei que podemos gerar aleatoriedade pseudo. Portanto, uma vez que tenho a capacidade para a seta para a esquerda para começar aparecendo em diferentes momentos e em diferentes velocidades, em seguida, Eu posso voltar e adicionar alguns deles, se as condições. Se este sprite está tocando o outro, ea seta esquerda tecla foi pressionada - assim três condições nesse caso. Eu posso usar isso e bloquear, talvez, nesse caso - Então eu quero ir em frente e incrementar o placar. E no topo, temos uma pontuação, temos Awesome, Cool, Bom, e Boo. Portanto, não há, aparentemente, cinco variáveis ​​que este aluno usado para manter o controle dessas várias métricas. Assim, em breve, o resultado final é incrível. É divertido, é divertido de jogar, é envolvente, mas isso não é onde o aluno começou. Ele ou ela começou em um conjunto menor de etapas. Então, quais são alguns outros blocos de construção que nós podemos tecer a esses programas? Bem, há um outro conceito na maioria das línguas, Raspe entre eles, conhecidos como fios. Assim, um computador não pode realmente muito fazer várias coisas em um tempo, pelo menos, geralmente não. Em vez disso, um computador geralmente tem apenas uma CPU, e ainda Embora os computadores são super rápido e pode, portanto, criar a ilusão de fazer várias coisas ao mesmo tempo - verificar o seu e-mail, recebendo um instante mensagem, a impressão de um documento - realmente, um computador é apenas saltar de impressão para IMing para e-mail, para trás e para trás e para a frente e para trás tão rápido que lentas humanos witted simplesmente não percebem que é realmente execução desses programas um pouco de cada vez. Agora, este um pouco de um branco mentir esses dias, porque, hoje em dia, muitos de nossos computadores são o que são chamados de multi-core, assim você tem uma CPU, mas vários núcleos, que é como ter múltiplos processadores. E assim, por vezes, os computadores podem realmente fazer várias coisas de cada vez, mas, geralmente, no âmbito de um programa, programas contar com essas coisas chamadas threads. Portanto, uma discussão é como uma espécie de programa em miniatura, que pode coexistir com outro programa em miniatura e pode ser executado em paralelo, ou pelo menos pode ser executado sob a ilusão de que eles estão executando simultaneamente. Então arranhões suporta essas coisas chamadas threads. Você pode ter vários scripts de execução de uma vez, assim como nós fez com o leão-marinho, e isso nos permite realmente então tem interações entre esses sprites. Deixe-me ir em frente aqui e puxar para cima, vamos dizer, tópicos, e jogar este como se segue. Temos dois sprites, cada um dos quais veremos tem apenas um roteiro. E você notar que parece haver alguma inteligência no gato em um presente, porque ele está ficando mais perto - [Ruge] DAVID MALAN: - e mais perto do passarinho. Então, como é o funcionamento pássaro? Bem, vamos dar uma olhada no primeiro pássaro. O script pássaro disse quando a bandeira verde é clicado, vá para o x é igual a 115 negativo e y é igual a 150. Então, eu só descobri um local aleatório onde eu queria que o pássaro para começar, e eu só jogou ele lá por padrão. Então, para sempre se não tocar gato, então este é um diferente tipo de construção de loop, mas a idéia mesmo, fazer isso de novo e novamente e novamente. Contanto que você não está tocando o gato, mover três etapas, e se você está na borda do salto,, onde é uma espécie de reflexão no sentido de bilhar. Então é assim que a ave está se movendo em torno de tipo de aparentemente de forma aleatória, mas é só porque está saltando as paredes, neste caso. Agora o gato, por sua vez, é uma espécie de trapaça. O gato, quando a bandeira verde é clicado, sim, começa em algum lugar, um local aleatório - pelo menos em parte, de acordo com a escolha bloco verde aleatório lá - e sempre se tocando o pássaro, reproduzir o som do leão, e, em seguida, parar o script. Então, quando eu disse que terminar, ou sair antes, há um quebra-cabeça peça em Scratch que só vai matar o programa em que ponto, porque é uma espécie de lógica feito. Mas caso contrário, aqui, perceber o que vai acontecer. Ponto para o movimento de aves e um passo. Portanto, este ponto para ave é uma espécie de vantagem o gato tem em que é lucrando com o pássaro em movimento, e podemos agora fazer este programa ainda mais interessante. Em vez de mover um passo de cada vez por ciclo de CPU, por greve toque dos sinos, por assim dizer, deixe-me ir em frente e mover, digamos, cinco degraus de cada vez, como o gato. Clique em Executar, e agora ele realmente encontra-lo rapidamente. Se dobrar este mais de 10 passos, espécie de passa certo para ele. Agora, nós podemos dar o pássaro, talvez, um pouco de vantagem. Vamos para o pássaro e dizer em vez de avançar três passos, vamos passar-lhe 30 passos. Mas ele ainda foi pego no final. Então, aqui, nós temos dois segmentos. É preso em Scratch com dois scripts e dois sprites, mas a idéia em outros idiomas é que você pode escrever, essencialmente, muitos programas como este e ter -los funcionar de verdade, ou imaginariamente, em paralelo. Agora, há também este conceito na programação conhecida como eventos, e isso é algo que não vai ver no C, os língua conhecida como C. Veremos isso em direção ao fim do semestre em programação web, quando introduzimos o JavaScript eo noção de páginas web de construção que são dinâmicos e interagir com os usuários. Portanto, neste caso, temos um exemplo muito simples de dois sprites, menino e menina, cada um dos quais com suas respectivas tópicos, mas de alguma forma esses dois estão inter-comunicação por forma de algo chamado eventos. Então deixe-me ir em frente aqui e zoom e roteiro do menino, que se parece com isso. Quando clicado bandeira verde, para sempre fazer o seguinte. Se o espaço de chave, ou a barra de espaço, é pressionado, dizem Marco por dois segundos, que é puramente estético na tela, um balão de fala pouco, mas depois transmitir. Então transmissão é outra peça Scratch que é representativo de uma classe de funcionalidade de programação que permite que programas diferentes, linhas diferentes, Para comunicar-se entre, de alguma forma, enviar mensagens, um para o outro. Passando um pedaço de papel na sala de aula é uma espécie de baixa tecnologia equivalente. Então transmissão de evento. Eu posso enviar esta mensagem, eo evento palavra é completamente arbitrária. Zero às vezes tem essas queda baixos, então eu só veio com uma palavra aleatória como evento, porque agora, o que o menino faz quando eu pressionar a chave é que ele transmite este evento. E se eu olhar agora no roteiro da menina, seu roteiro é super simples, porque tudo que ela precisa fazer é não agir quando a bandeira verde é clicado. Ela é projetada para a ação quando ela recebe fecha aspas, "Evento", e nesse ponto, ela está ouvindo, portanto, para o evento chamado de novo e de novo. Assim que ela recebe esse evento, ela vai gritar Polo por dois segundos. E assim você pode talvez deduzir exatamente o que o próximo resultado vai ser. Deixe-me clique na bandeira verde. Nada acontece porque eu preciso fazer o que? AUDIÊNCIA: Barra de Espaço. DAVID MALAN: Barra de Espaço. Menino diz Marco, menina diz Polo. Mas isso não é codificado por si só. Isso é inter-comunicação entre os scripts, então agora nós têm a capacidade de fazer programas mais complexos, onde esses dois são de alguma forma inter-comunicação. Assim, em que direção podemos levar isso? Bem, no conjunto de problemas 0, realmente, o objetivo é divirta-se com o Scratch. Para a edição de hacker, você vai se divertir em vez com um mais versão sofisticada do Scratch chamado BYOB, Build Seus próprios blocos, mas a idéia é a mesma. Você vai ser capaz - Sim, isso foi deliberado. Ela veio de Berkeley. BYOB é a versão pirata edição desta, mas ambos demografia, Standard Edition e edição de hacker tanto, o objetivo em mãos para a próxima semana é realmente apenas a mergulhar em profunda, sujar as mãos com a programação, e fazer algo interessante, fazer algo interativo, faça algo artístico, fazer algo divertido para realmente demonstrar, de modo que até o final da semana, você tem um projeto, não só para o seu pset CS50 primeiro, mas você vai ter um pouco algo que você pode mostrar na Annenberg para amigos ou até mesmo a família por meio de upload para o site do MIT. E assim como eu disse na quarta-feira, esperamos que 90% da classe, geralmente, para fazer as edições padrão. Perceba que há também esta saída para aqueles que poderiam encontrar-se um pouco entediado com o básico e realmente quer mergulhar e criar uma visão que você já tem com fundo antes neste mais amigável ambiente. Então deixe-me puxar para cima um outro exemplo que um dos nossos ex- alunos aqui fez e dizer alguma coisa através da música. Que da mesma forma, como este joga, pense sobre como você ir sobre implementação deste programa usando precisamente estes mesmos blocos de construção, um pouco de aleatoriedade, e um pseudo pouco de canção familiar. Se pudéssemos aumentar o volume um pouco? [MÚSICA - "Está chovendo homens" The Weather Girls] DAVID MALAN: Isso é tudo para CS50. Vemos você na segunda-feira. [Aplausos]