Exames Pre Operatorios Quais Sao

Sage College of Albany - DAVID MALAN: Este é CS50, introdução da Universidade de Harvard às empresas intelectuais da ciência da computação e a arte da programação. Meu nome é David Malan, e se você está entre aqueles na sala que estão pensando, por que eu estou em uma classe de ciência da computação, percebo que eu também senti exatamente da mesma maneira. Na verdade, meu primeiro ano, eu não levantar a coragem de tomar esta classe ou ciência da computação mais geralmente, e foi em grande parte porque me senti intimidado por isso. Eu estava um pouco nervoso. Me senti bem fora da minha zona de conforto. E eu realmente não sabia no final do dia o que realmente era. Mas perceba se você também está se sentindo um pouco disso, ou mesmo se você está entre os mais confortáveis que se interessaram por ciência da computação ou programação, perceber que há tantos espaços em branco que podemos preencher ao longo do caminho de modo que, finalmente, no final do semestre, todos vão se sentir na mesma página. E até lá, tenha certeza de que 68% das pessoas sentadas à sua esquerda e à sua direita e atrás e na frente nunca fiz um curso de CS antes, o que pode muito bem ser o demográfico em que você se encaixa. Mas perceba, também, que com um apoio tão incrível estrutura com tantas horas de trabalho e seções e materiais e além, perceber que o que é importante, em última análise, neste curso não é tanto onde você acaba em relação aos seus colegas na semana 10, a nossa última semana, mas onde você acaba em relação a si mesmo na semana zero. E, de fato, é onde estamos agora. E, como se vê, os cientistas da computação começam a contar a zero. E assim, nas próximas 11 semanas, vamos levá-lo de estar entre os menos confortáveis ou talvez em algum lugar entre menos confortável e mais a sentir-se muito mais confortável e confiante e capaz do que isso. Mas, para chegar lá, precisamos entender o que a ciência da computação realmente é. E isso foi algo que eu não entendi até que pisei em um quarto como isso. E ouso dizer que podemos destilar a ciência da computação apenas nesta foto. A informática é sobre resolução de problemas. E eu sei que os cursos do ensino médio normalmente pintam uma imagem enganosa que é apenas sobre e é inteiramente sobre programação e pessoas com suas cabeças no laboratório de informática trabalhando de forma bastante anti-social no código, mas a realidade é que tudo se resume a resolver problemas e, muitas vezes, resolver problemas de forma colaborativa, pessoalmente ou utilizando o código, programas que outros escreveram no passado. E o que significa resolver um problema? Bem, você precisa de entradas. Então, há um problema que você está tentando resolver. Essa é a entrada. E você quer saída. Você quer a solução para esse problema. E o tipo de molho secreto da ciência da computação vai ser tudo nesta caixa preta proverbial no meio nas próximas semanas, onde você começa a entender exatamente o que você pode fazer com isso. Mas para começar a resolver problemas, nós apenas precisa decidir como um grupo como vamos representar esses problemas e o que poderia ser um problema. Bem, nesta sala, há um monte de gente. Se quiséssemos atender ou contar o número de pessoas nesta sala, Talvez precise começar a acompanhar quantas pessoas eu vejo. Mas como eu represento o número de pessoas que vejo? Bem, eu posso fazer isso da velha escola e posso tirar um pedaço de giz ou o que quer que seja e diga, tudo bem. Eu vejo 1, 2, 3, 4, 5. Eu posso fazer pequenas convenções estilísticas como essa para economizar espaço e me lembrar. 6, 7, 8, 9, 10 e assim por diante. Ou posso, claro, apenas fazer isso por minha própria conta. Então 1, 2, 3, 4, 5 e assim por diante. Mas, obviamente, até que ponto posso contar apenas com uma mão? Então, 5 você pensaria, mas isso é só porque nós não temos realmente pensou bastante sobre este problema. Acontece que com apenas estes cinco dedos, muito menos estes cinco mais, Eu posso realmente contar um pouco mais alto porque afinal de contas, o sistema Estou usando hashmarks no quadro ou apenas agora com meus dedos é apenas manter meus dedos para baixo e colocando eles representam os realmente. Mas e se eu realmente levasse em conta a ordem dos meus dedos e meio que os permutou, por assim dizer, de modo que são realmente padrões de dedos que representam o número de pessoas na sala, e não apenas a mera presença de um dedo subindo ou descendo. Em outras palavras, isso pode permanecer zero. Isso ainda pode ser um. Mas e se dois não é apenas isso, o óbvio? Mas e se for apenas isso? Então levantando apenas um, meu segundo dedo. E se, então, três é isso? Então nós temos 0, 1, 2, 3. Isso vai nos levar a quatro de forma ofensiva. Mas se começarmos a pular para cinco, eu posso agora permute este dedo e este dedo para cima. E se eu quiser agora representar seis, eu poderia fazer isso. E agora sete. Em outras palavras, já expressei tantos outros padrões na minha mão e se continuarmos fazendo isso, acho que posso realmente representam dolorosamente talvez como 32 padrões diferentes e, portanto, 32 pessoas diferentes, sozinhas. Ou 31 pessoas, se eu começar a contar no zero. Então, o que é isso? Qual é o relacionamento e como chegamos até aqui? Bem, acontece que os computadores são simplistas, muito parecido com as nossas mãos aqui. No final do dia, seu computador está conectado à parede ou tem uma bateria, então ela tem ou não tem eletricidade. No final do dia, esse é o recurso físico que impulsiona essas coisas e nossos telefones e toda a tecnologia hoje. Então, se há eletricidade ou não, esse tipo de mapa é bom sem dedo ou sim dedo. E, de fato, computadores, como você provavelmente sabe, só falam qual língua? Que alfabeto, por assim dizer? Sim. Binário. Bi significa dois. E, de fato, isso se refere ao fato de que em binário em computadores, você só tem dois dígitos zero e um. Nós humanos, é claro, temos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, e então podemos combiná-los para contar ainda mais. Mas os computadores só têm 0, 1 e então é isso. Porque no final do dia, há realmente um mapeamento direto entre a energia sendo desligada e sendo zero ou a energia estando ligada e sendo um, ou alguns elétrons ou o que flui da sua bateria ou da parede. Então é por isso que os computadores tendem a falar apenas binário, porque no final do dia, apenas mapeia de forma realmente limpa para o que é que está alimentando-os em primeiro lugar. Mas como isso é realmente útil? Se os computadores só tiverem zeros e uns, como poderão fazer alguma coisa útil? Bem, pense em nosso mundo humano, onde você pode ter esse padrão de símbolos. Isso é decimal, dec significa 10 porque você tem de 0 a 9. E isso é, claro, 123. Mas por que? Se você não pensou sobre isso em algum tempo, este é realmente apenas um padrão de três símbolos, um e dois e três formas, ou glifos, na tela. Mas nós, humanos, desde a escola primária, começamos a atribuir significado para cada um desses números, certo? Se você pensa de volta, esta é a coluna de uns, esta é a coluna de dezenas, essa é a coluna das centenas, e assim por diante, e poderíamos continuar. E então por que esse padrão-- um, dois, três-- significa 123? Bem, é porque todos nós somos intuitivamente hoje em dia são apenas rapidamente na nossa cabeça fazendo 100 vezes 1 mais 10 vezes 2 mais 1 vezes 3, o que naturalmente nos dá 100 mais 20 mais três, e depois o número que conhecemos matematicamente como 123. Mas todos nós estamos fazendo isso tão rapidamente, você realmente não pensa mais nisso. Bem, os computadores funcionam basicamente da mesma maneira. Eles não têm tantos dígitos ... 0 a 9 - como fazemos. Eles só têm zeros e uns. E assim, se eles fossem armazenar valores, você só vai ver zeros e uns na tela, mas esses zeros e uns só significam coisas diferentes. Em vez de ter um lugar, dezenas, centenas, eles vão ter um lugar, um lugar para dois, um quatros lugar, e depois oitos e 16 e além. Agora por que? Bem, um e 10 e 100, esses são poderes de 10. 10 para o 0 é tecnicamente 1. 10 para o 1 é apenas 10. 10 para o 2 é 100. E é por isso que você tem dezenas, centenas, milhares e assim por diante. Computadores aparentemente estão usando poderes de 2. Não é surpreendente. Binário - dois. Então, se você tiver apenas dois, dois e quatro como marcadores, se um computador estivesse armazenando esses dígitos 0, 0, 0-- esse computador está presumivelmente armazenando o número até onde nós os humanos entendem isso? Bem, é assim que um computador armazenaria zero. Se um computador estiver armazenando literalmente 0, 0, 0, apenas como no nosso mundo humano, isso também é 0, mas isso é tecnicamente porque é 4 vezes 0 mais 2 vezes 0 mais 1 vezes zero, o que é obviamente zero. Enquanto isso, se um computador está realmente armazenando não apenas, digamos, 0, 0, 0, mas em vez disso está armazenando esse valor em binário, o que isso mapeia em decimal? Então essa é uma. E agora, por que, se mudarmos este 0 e 1 para este valor aqui, isso é dois? Bem, matematicamente, pelos mesmos motivos. E mais cedo, eu tinha cinco dedos, mas se você considerar apenas meus três primeiros, quando eu fiz isso segurando um dedo, eu estava representando dois. E se eu quiser representar três, lembre-se de que coloquei o segundo dedo. E então a razão que poderia representar bem três é porque tudo o que eu estava fazendo com a minha mão humana contava em binário. E eu poderia continuar contando mais e mais e mais. E se eu tiver cinco dedos ou cinco bits, bit significa dígitos binários, Eu poderia contar, se fizermos as contas, tão alto quanto 31, começando a zero. Vai ser difícil fisicamente fazer isso, mas nós poderíamos. Então, por que isso é útil? No final do dia, um computador, portanto, pode representar qualquer número de valores de 0 a 1 a 2 a 3 para um grande número, muito, muito maior que isso. Tudo o que precisa é de bits suficientes, zeros e uns suficientes. Bem, quais são esses bits? Bem, todos nós temos esses dias em nossos telefones fontes de luz, por exemplo. Então, eu poderia dizer que esse dispositivo físico agora-- pode ser um pouco difícil de dizer tem uma lanterna e está tecnicamente desligada no momento. Mas se eu ligar esta lanterna, usando um pouco da eletricidade, agora, eu estou armazenando um. E então o telefone está ligado. Agora está desligado. Agora está ligado. E se eu ver posso pedir emprestado o telefone de alguém rapidinho? Posso? ESTÁ BEM. E lanterna. Como faço para ligar a lanterna? Oh. Agite. Isso está ok. ESTÁ BEM. Obrigado. Oh. Obrigado. ESTÁ BEM. Então isso é ótimo. Agora eu posso contar mais alto. Agora, isso representa o número e se eu tiver duas lâmpadas ou dois interruptores no momento? Sim. Três. Porque eu tenho um, eu tenho um, e eu tem dois, o que, claro, vai acabar sendo igual a três. E se eu pegar um terceiro telefone de alguma forma, eu poderia contar ainda mais. Tecnicamente, se eu tivesse três lâmpadas em ... um, um, um-- qual seria esse valor? Sete. Porque é um quatro mais dois mais um, e assim por diante. Muito obrigado pela espontaneidade. Então, por que isso não nos leva a limitações? Eu posso contar em decimal o mais alto que eu quero. Agora posso contar em binário o quanto quiser, desde que tenha bits suficientes. Mas como eu realmente represento outras informações? Bem, se eu quiser representar algo como uma carta, como chego lá? Se os computadores só tiverem eletricidade e usarem binário para contar, e de alguma forma eles são muito mais úteis do que apenas fazer matemática eles podem ter mensagens de texto e e-mails e sites e vídeos e muito mais como vamos de zeros e uns para letras? Bem, nós ... sim. Desculpa. Um pouco mais alto. Sim. Nós só precisamos relacionar os números com letras. Em outras palavras, todas as pessoas nesta sala só precisam decidir em algum momento isso, sabe de uma coisa? Se queremos representar algo como a letra maiúscula A, nós só precisamos decidir sobre um padrão de bits, um padrão de dedos, isso representará A. E acontece que humanos anos atrás apenas unilateralmente decidido 65 é o número decimal que representa a letra maiúscula A. E você pode imaginar que o capital B é representado por qual número decimal? 66 E então C é 67 e assim por diante. E há um mapeamento de 128 ou até 256 valores possíveis para todas as teclas que você pode ver em um teclado típico a fim de representar letras. Agora, como um computador distingue, no entanto, números de letras? Bem, só depende do contexto. Se você estiver usando um programa de calculadora no seu Mac ou PC ou iPhone ou Android, bem, o computador, o dispositivo, é só saber contextualmente, deixe-me interpretar esse padrão de zeros e uns como números reais para fazer matemática. Mas se você estiver usando o aplicativo de SMS ou o aplicativo de mensagens em seu telefone, você vai realmente estar no contexto do texto, e assim o seu telefone vai interpretar esse mesmo padrão de zeros e uns, ou lâmpadas sendo desligado, ou, no final do dia, transistores, minúsculos pedaços de hardware e computadores que estão ligados ou desligados - vai interpretar esses padrões como apenas representando uma letra. Se você estiver no contexto de um aplicativo de mensagens de texto ou do Microsoft Word ou o Google Docs ou algo parecido, depende completamente do contexto. O sistema que nós humanos criamos chamado ASCII, American Standard Code para intercâmbio de informações. O nome não é interessante, mas o fato de que todos concordamos anos atrás 65 é A e assim por diante é o que é importante. E assim, por exemplo, se olharmos para este mapeamento aqui apenas as primeiras letras, o que isso significa? Se eu fosse agora receber uma mensagem de texto e eu tivesse a capacidade de alguma forma olhar por baixo do capô, por assim dizer, no padrão de zeros e uns que alguém acabou de me mandar uma mensagem e esse padrão, se eu convertê-lo em decimal, tecnicamente disse, vamos dizer, 72 e 73-- então eu recebo um monte de zeros e uns. Eu faço algumas contas e percebo, ok, acabei de receber 72 e 73, mas isso é mensagens de texto, e não são apenas números que meu amigo está me enviando. É uma mensagem. Que mensagem meu amigo provavelmente me enviou se ele ou ela enviou 72 e depois 73? Sim. Oi. OI. Porque se você der um passo à frente à direita, que por acaso está em ASCII o mapeamento entre 72 e 73, H e I. Se tecnicamente, a mensagem tiver um terceiro byte, se você quiser. Um byte, se você já se perguntou, é apenas oito bits. É conveniente falar não em termos de bits únicos, onde você não pode contar muito alto, mas com um byte ou oito bits, você pode contar mais alto. E assim acontece se eu recebi um terceiro byte, outra seqüência de oito zeros e uns juntos-- 33 Como saberíamos o que esta mensagem é agora? Sim. Então acontece que você não conheceria esse outro do que adivinhando ou pesquisando ou apenas entrando com esse conhecimento. Isso é agora "OI!" com um ponto de exclamação, porque 33 só acontece, se você olhar para cima, para mapear para um ponto de exclamação também. Agora, se realmente olharmos para o binário disso, você realmente veria esse padrão de zeros e uns. É assim que você representa 72 em binário. Isto é você representa 73. E é assim que você representa 33. E note que eu usei apenas um, dois, três, quatro, cinco, seis bits, mesmo que eu tecnicamente tendesse a receber coisas em unidades de 8, unidades de bytes. Mas por que eu não me incomodei em escrever outro 00 aqui e outro 0 aqui? Importa quando você escreve essas coisas? Não. Na verdade não. Como em inglês, em nosso mundo humano, se você fosse escrever um, dois, três, isso é 123. Se você escrever 0, 1, 2, 3, ainda é 123. Então, mesmo que tendamos a obtê-los em grupos de 8, nós não precisamos necessariamente escrever aqueles quando estamos falando sobre eles. Então, o que fizemos? Bem, deixe-me apresentar uma palavra mais chique agora conhecida como abstração. Abstração é apenas um termo geralmente usado em ciência da computação e em breve ver na programação para tomar algum nível baixo-- como literalmente baixo nível-- detalhes de implementação, como minúcias até, e entendê-los em algum momento, mas depois decidir que este não é um nível útil conceitualmente pensar em problemas. Eu realmente não quero resolver problemas neste mundo de pensamento em 0 e 1. Eu prefiro pensar minimamente em decimal, ou melhor ainda, no contexto de letras, se eu estou realmente recebendo texto, ou mesmo alguma outra representação. Então, abstração é obter detalhes de baixo nível e apenas simplificá-los para que possamos ter uma conversa mais útil e nunca mais se preocupar com a origem da eletricidade. Podemos apenas estipular que meu computador pode representar zeros e uns. Portanto, pode representar números. Portanto, também pode representar ASCII ou letras. E podemos seguir em frente e começar a resolver problemas mais interessantes. Mas parece que não podemos resolver todos os problemas porque no meu teclado aqui, esse teclado americano aqui, tem um monte de símbolos, como um 100 ou 200 talvez no total, se nós realmente bater turno e opção e todos por essa. Mas o que você não vê são alguns personagens bem comuns. Especialmente em um público muito internacional, o que eu aparentemente não consigo digitar nesse teclado? Que tipos de símbolos? Sim. Qualquer coisa com um sotaque. Se você tiver sotaques sobre vogais ou outras letras. O quê mais? Eu sinto Muito. Umlauts ou outros personagens acima das letras. Sim. Como o símbolo da libra? Oh. Como o símbolo da libra do Reino Unido. Certo. E outros países também. Qualquer número de idiomas asiáticos. Há tantos símbolos que não são descritos neste teclado, e ainda assim, de alguma forma, todos nós com teclados ou telefones internacionais pode certamente se expressar. Mas isso é porque os telefones e computadores atualmente não usam apenas o ASCII. ASCII literalmente usou apenas oito bits no total. Tecnicamente sete, mas, em última análise, realmente oito. E com oito bits, se você realmente fizer as contas ... se você tem oito bits ou oito dedos, você só pode permutá-los em 256 maneiras possíveis, o que é dizer que você só pode representar 256 caracteres usando ASCII com números debaixo do capô, e isso não é suficiente para representar tantos símbolos diferentes como os enumerados aqui. Você não pode representar nenhum dos acentos que você pode, no entanto digite em seus Macs e PCs e você certamente não pode digitar essas coisas, que estão muito em voga. Que apesar de serem imagens, são na verdade apenas personagens. Porque acontece há alguns anos, o mundo decidiu que oito bits não são suficientes. Vamos começar a usar algo chamado Unicode, onde você realmente usa um ou dois ou três ou até quatro bytes. Então oito bits ou 16 bits, 24 bits ou até 32 bits para representar caracteres. E agora, temos a capacidade de representar milhares ou até mesmo milhões de caracteres. E francamente, ousadia, o resultado dessa enorme quantidade de disponibilidade é em parte porque há tantas dessas coisas nos dias de hoje. E eles continuam fazendo mais porque há tantos números diferentes disponível para nós. Então, Unicode é frequentemente uma versão específica chamada UTF-8, que veremos em breve. Mas deixe-me fazer esta pergunta aqui. Este é um rosto chorando de alegria, acho que isso é chamado. Então, acontece que, de acordo com a Apple ou o iOS, este é o emoji mais popular que pelo menos as pessoas do iPhone estão enviando um para o outro. Então, quando você está recebendo isso, se pudermos realmente tirar a diversão disso, que padrão de bits você está realmente recebendo do seu amigo? Ele ou ela está claramente tentando expressar alguma emoção, mas realmente, o que seu amigo está lhe enviando - o número decimal 128,514. Ou realmente, se você olhou para os zeros e os próximos para você através da internet ou ondas de rádio, você está recebendo este padrão de zeros e uns, que dificilmente é alegre ou dificilmente descritivo, mas todo o seu telefone ou computador estão fazendo é ver esse padrão de bits, olhando como se fosse uma pequena folha de fraude, e dizendo, oh. Sempre que vejo esse padrão de bits no contexto do texto, como mensagens de texto, Eu deveria realmente mostrar isso como aquela foto. Agora, essa foto tem muito amarelo e outras cores nela, mas como chegamos lá? Bem, acontece que esse mesmo padrão de números 72, 73, 33 - o que, apenas para ter certeza, um momento atrás, significava o que? Oi. No contexto de um programa textual como o Microsoft Word, Google Docs, mensagens de texto, isso significa oi. Mas e se você visse esse mesmo padrão de bytes? e novamente, nós poderíamos desenhar os zeros e uns, mas não é mais interessante, então vamos para abstrair no nível decimal. Se você tem esse mesmo padrão de zeros e uns ou números no contexto de como o Photoshop ou um navegador ou algum tipo de programa de fotos, bem, pode fazer mais sentido interpretá-lo não como texto, mas como imagens, algum tipo de cores. Bem, acontece que existe esse outro sistema no mundo. você pode ter visto este acrônimo antes-- chamado RGB-- vermelho, verde, azul. E isso é apenas uma maneira de os humanos terem anos padronizados atrás que você sabe o que? Se quisermos representar um ponto na tela de alguém, caso contrário conhecido como um pixel um pequeno quadrado na tela do seu telefone, seu laptop ou até mesmo da TV hoje em dia, vamos usar três bytes um byte para especificar quanto deve ser o vermelho nesse pixel específico, mais um byte para especificar quanto verde deve ser combinado com vermelho para formar esse pixel e, em seguida, mais um byte, um terceiro para representar quanto azul para combinar com essas outras duas cores para fazer uma nova cor todos juntos. Então é como combinar tintas, exceto neste caso, É mais realmente ondas de luz, a fim de obter uma cor específica usando apenas vermelho, verde e azul como sua paleta. E assim, se fôssemos ver esse padrão vermelho, verde e azul e disséssemos: Você sabe o que? Dê-me 72 vermelho, 73 de verde e 33 de azul. Se o intervalo total possível ao qual eu aludi anteriormente é de 0 a 256, ou tecnicamente 0 a 255, se você começar a contar em ciência da computação a partir de zero, isto é como uma quantidade média de vermelho, quantidade média de verde, e apenas um pouco de azul, se o intervalo for de 0 a 255. Então, se você combinar essas três coisas juntas e você quer saber de que cor você sim. Então é meio amarelo claro que se parece com isso. Então, se um computador está armazenando um único ponto na tela que acontece de estar em amarelo, o que o computador realmente está armazenando não é este ponto fisicamente, mas um padrão de três bytes-- quanto vermelho, quanto verde, quanto azul deve o computador exibir neste ponto específico. Então, se olharmos para essa cara chorosa de alegria e melhorarmos ou ampliarmos sobre isso aqui, você pode realmente vê-lo começar a pixelizar, por assim dizer, onde você começa a ver os pontos. Se eu socar um pouco mais, agora você pode realmente comece a ver os pontos na tela. E se eu for ainda mais longe, você pode realmente veja os minúsculos quadrados que compõem esta imagem, a maioria dos quais no nível de zoom são amarelos, mas muitos são pretos, um grupo dos quais é preto claro ou amarelo escuro. E é isso que compõe essa imagem no final das contas. Então, isso é para dizer se você contar todos os pixels na tela e depois multiplicá-lo por um, dois, três bytes, isso é quantos bytes ou kilobytes ou megabytes, se você já ouviu esses termos, serão armazenados no seu computador apenas para representar uma imagem. Então passamos da eletricidade para cá, por assim dizer, para zeros e uns, para decimal, agora para cores. Bem, com cores, você pode obter imagens. O que vem depois das imagens? Bem, todos nós assistimos vídeos ou filmes com certeza digitalmente nos dias de hoje. Bem, o que é um filme ou um arquivo de vídeo? Como isso pode ser implementado? Diga um pouco mais alto. Sim. É uma coleção de imagens. Se você já ouviu falar de frames por segundo como filmes tendem a ser de 24 quadros por segundo ou 30 quadros por segundo isso significa apenas que um filme típico, a cada segundo está mostrando 24 ou 30 imagens por segundo e eles estão voando tão rápido que você realmente não perceba que você está apenas assistindo a uma sequência de imagens estáticas. É como uma criança, se você já teve um daqueles livros de papel flip onde há toneladas de desenhos neles, e quando você folhear as páginas, você vê as coisas se movendo, mas isso é só porque seus olhos são apenas vendo pequenos instantâneos tão rapidamente de algo se movendo no papel. Isso é tudo o que um arquivo de vídeo realmente é. Então, se você tem um iPhone e já jogou com esses animojis, por assim dizer, bem, todos esses são pequenos arquivos de vídeo composto de lotes e lotes e muitas imagens que você salvou no seu telefone ou mandou uma mensagem para outra pessoa. E se pensarmos agora, estamos no ponto de vídeo, mas tudo bem. Vídeos são apenas cachos de imagens. Imagens são apenas cachos de cores. Cores são apenas padrões de bits. E pedaços, no final do dia, são apenas o resultado da eletricidade que entra em minha máquina ou transistores ligar e desligar os interruptores. Como se tivéssemos de repente para segurar essa história toda, mas nenhum de nós sempre vai precisar realmente pensar sobre binário no contexto de vídeos porque um vídeo é apenas uma abstração no topo de um monte de imagens, e as imagens são apenas uma abstração nos grupos superiores de pixels e assim por diante. Então podemos continuar pintando essa hierarquia que apenas nos permite falar sobre as coisas em um nível mais útil, e a razão pela qual tivemos essa conversa é só porque precisávamos de uma maneira de representar entradas e saídas para problemas. Deixe-me fazer uma pausa por apenas um segundo para ver se há alguma dúvida. Nada mesmo? Não? Tudo certo. Então, o que tem dentro dessa caixa preta? Bem, acontece que este é o lugar onde o trabalho realmente interessante começa acontecer e o pensamento começa a entrar. Este é o algoritmo proverbial, instruções passo a passo para resolver algum problema. E alguns de vocês podem ter resolvido esse problema antes, seja digital ou textualmente, mas é claro, se você tem contatos em seu telefone nos dias de hoje e você tem muitos amigos e familiares As probabilidades são de que estejam em ordem alfabética pelo nome ou sobrenome. E você tem auto completar estes dias, mas é realmente apenas uma longa lista de nomes e números. Isso não é tão diferente da implementação do passado do mesmo problema, que foi este dispositivo aqui, uma agenda. Agora, esta agenda pode ter um amigo nosso, diz Mike Smith, cujo sobrenome começa com S. E eu poderia, claro, se tentar encontrar Mike Smith, comece procurando na primeira página, a segunda página, a terceira página, a quarta página, e, eventualmente, esperamos encontrar Mike Smith. De fato, é este algoritmo, este processo passo a passo, correto para encontrar alguém como Mike Smith? Sim. Está certo. É estúpido e lento, talvez porque é vai levar uma eternidade em uma lista telefônica desse tamanho, mas está correto porque se Mike estiver aqui, eu o encontrarei. Mas eu poderia fazer isso melhor. Eu poderia fazer isso de dois em dois. Então dois, quatro, seis, oito, 10-- ou imperfeitamente-- 10, 12, 14. Isso é mais rápido? Obviamente, está indo duas vezes mais rápido. Está correto? Não. Por que isso não está correto? Sim. Eu posso sentir falta dele, certo? Mike apenas acidentalmente pode ficar imprensado entre duas páginas e eu tenho a infeliz experiência de sentir falta dele. Agora, é solucionável? Sim. Eu posso provavelmente, uma vez que eu bati como SN ou a seção T, por exemplo - Eu posso apenas dizer, obviamente, que eu fui longe demais para o Mike. Deixe-me dobrar uma ou algumas páginas. Então é consertável. E enquanto eu tiver economizado tempo voando com isso duas vezes mais rápido, posso pelo menos dar ao luxo de gastar mais alguns passos no final apenas encontrar Mike Smith? Mas nenhum de nós vai fazer isso. E nossos dispositivos da Apple e dispositivos Android certamente não faça isso por eficiência hoje. As probabilidades são a maioria de nós vai fazer o que encontrar alguém em qualquer livro como este? Sim. Aberto para mais ou menos o meio ou talvez nos incline para o final porque S está depois do meio. Mas você sabe, eu estou no meio da agenda aqui. E agora, se eu sei que o Mike está no S e, portanto, aqui onde eu sei que ele não é? Ele não está no começo e eu posso literalmente rasgar um problema como este ao meio, jogue figurativamente e literalmente metade do problema, e ficar com o mesmo problema, mas é metade do tamanho. Eu fui de ... qualquer coisa 1.000 páginas para 500 páginas e agora posso repetir este algoritmo. Eu olho para baixo. Eu estou longe demais. Eu estou na seção T agora. ESTÁ BEM. Eu posso novamente rasgar o problema ao meio, jogar fora esse meio, pegando um byte de 500 páginas, um byte de 250 páginas, agora me deixando com apenas 250 páginas a mais. E observe a rapidez com que cheguei aqui. Os dois primeiros algoritmos me levaram de 1.000 a 999 a 998, ou de 1.000 a 998 para 996. Mas aqui eu fui de 1.000 para 500 para 250. Parece que estamos fazendo tempo aqui. E, de fato, se eu continuar repetindo esse processo, espero que eu fique com apenas uma página do livro Mike está ligado ou não, e eu vou ligar para ele. E então esse é um algoritmo que honestamente alavanca provavelmente toda a intuição que nós tem e muito do que programação vai ser, está pensando em um problema como este, descobrir como dividir e conquistar e, em seguida, expressando-se de uma maneira que o computador pode resolver esse problema para você. E só para pintar uma imagem de quanto melhor este algoritmo é, bem, se este é apenas um gráfico muito abstrato, onde temos na vertical, ou eixo y, quanto tempo demora para resolver um problema, e no eixo horizontal quão grande é o problema então quanto mais longe você for desse jeito, mais páginas no problema, mais páginas na lista telefônica. E quanto mais alto você subir aqui, mais segundos ou página vira, vai demorar. Esse primeiro algoritmo é como um declive linear, por assim dizer, porque para cada página adicional no livro, isso pode me levar mais um segundo. Certo. É apenas um para um relacionamento com páginas. O segundo algoritmo, se eu traçar, onde Estou voando duas vezes mais rápido, o que é essa linha vai parecer em vez disso? Sim. Vai parecer mais baixo que este. Ainda vai ser uma linha reta porque agora, há dois para um relacionamento, mas se você tem uma lista telefônica que tem muitas páginas, e no primeiro algoritmo, demorou tanto, aqui bem, no segundo algoritmo, vai demorar metade dos passos, mais ou menos ou dois, se você precisa realmente voltar um pouco. Mas esse terceiro algoritmo é o que vamos chamar de logarítmico. Se n for o número de páginas na lista telefônica, o primeiro algoritmo, no pior dos casos, pode levar todas as n páginas para encontrar Mike Smith. O segundo algoritmo vai demorar metade dos passos porque eu sou voando através dele dois de cada vez. Mas o terceiro algoritmo vai parecer e se sentir assim. Vai ser curvado e sempre tão lentamente subindo e subindo e subindo, a implicação disso é se a Verizon ou a empresa de telefonia duplica o número de páginas na agenda no próximo ano, porque Cambridge e Somerville se uniram no telefone livro e agora temos 2.000 páginas. Quantos passos mais meu terceiro algoritmo toma? Apenas um. Porque eu posso dar uma mordida de 1.000 páginas fora do problema com esse algoritmo inteligente, enquanto meus dois primeiros algoritmos iriam levá-lo uma ou apenas duas páginas de cada vez. Então, isso quer dizer que temos que aumentar enormemente o tamanho desse problema apenas pelo número de segundos ou páginas que se transformam em realmente aumentar. E assim, quando começamos a aprender sobre programação, será, novamente, alavancar essa intuição para para realmente resolver problemas e codificar de forma mais eficaz do que nós pode sem essa intuição sozinho. Então vamos formalizar isso agora. Então isso foi uma maneira muito intuitiva de dividir e conquistar um problema. Apenas meio que fazia sentido ir no meio, rasgue-o, então vá para a outra metade ou a outra metade e rasgá-lo novamente e assim por diante. Mas um computador, tão legal quanto o Alexa e o Google Home e tudo isso, você não pode simplesmente falar com eles como outro ser humano e mandar executá-las corretamente. Eu luto apenas para fazer a Siri definir um temporizador no meu celular. Então ainda não chegamos lá, então ainda estamos na idade onde temos que ser sempre tão precisos com computadores, voz ativada ou não, e assim entrar no pseudocódigo por enquanto. O pseudocódigo não possui uma definição formal. Esta é apenas uma maneira de dizer usar Inglês como sintaxe ou qualquer idioma falado e apenas se expressar de maneira sucinta e correta de modo que um computador ou um robô ou até mesmo outra pessoa pode entender o que você está tentando dizer. Então, aqui, proponho, é um algoritmo escrito em pseudocódigo, inglês como sintaxe, que apenas mostra meu ponto de vista. E eu poderia escrever isso de várias maneiras. Eu montei os passos de zero para cima, apenas por uma questão de discussão, mas isso parece capturar o que eu fiz lá. Pegue a lista telefônica. Abra para o meio do telefone. Olhe os nomes. Se Smith estiver entre os nomes, ligue para Mike. Senão, se Mike Smith estiver no começo do livro, vá para a esquerda, especificamente no meio da metade esquerda do livro, e depois volte ao passo dois. Porque, de fato, eu estava fazendo a mesma coisa de novo e de novo, e a razão pela qual eu não estava fazendo isso para sempre era porque toda vez que eu repeti-me abrindo e rasgando, eu estava encolhendo o problema. E eu só posso diminuir um problema de algum tamanho finito fixo tantas vezes até eu ter apenas uma página, e assim se eu continuar essa lógica olhando para a direita ou para a esquerda ou apenas desistindo, se eu não encontrar Mike na última página, Isso parece capturar mais precisamente esse código. Bem, vamos realmente extrair disso agora alguns conceitos e, em seguida, comece a aplicá-las ao código real. Destacado em amarelo aqui, eu ouso dizer, são todos os verbos ou ações. Estas são as funções, como vamos começar a chamá-las neste algoritmo. Uma função é apenas uma etapa específica, uma ação específica você toma para fazer alguma coisa. E assim, em amarelo aqui - pegue, abra, olhe, chame, abra, saia são todas as ações ou verbos. De agora em diante, vamos chamá-los de funções. Enquanto isso, destaque em amarelo aqui-- if, else if, else if, else. Estes estão começando a fazer perguntas. O que isso pode ser chamado se você tem alguma familiaridade? Sim. Acontece muitas linguagens de programação, se você já viu algum antes, chamaria essas condições. Eles são ramos ou garfos proverbiais na estrada. Se isso for verdade, siga este caminho. Talvez, vá por outro caminho, ou talvez uma terceira ou quarta direção completamente. Enquanto isso, se realmente olharmos para essas frases destacadas ... se Smith está entre os nomes ou se Smith é anterior em livro ou Smith está mais tarde em book-- Estas são as perguntas específicas que estamos fazendo para tomar essa decisão. Estes são conhecidos como expressões booleanas, em homenagem a um cavalheiro pelo sobrenome de Boole alguns anos atrás. E assim uma expressão booleana é apenas uma questão que tem uma resposta sim ou não, uma verdadeira resposta falsa, um zero responda, se você quiser. E isso é um bom mapeamento para o que os computadores são realmente bons. Então, dentro das condições, você tem expressões booleanas para decidir qual bifurcação na estrada você quer descer. E finalmente, destacado em amarelo aqui é voltar ao passo 2 em alguns lugares. Isso está induzindo algum tipo de ciclo ou loop isso é dizer ao computador para fazer algo de novo e de novo e de novo. Então, em suma, temos esses blocos de construção já conceitualmente. E acontece que agora podemos começar a traduzir esses para uma linguagem de programação real. A primeira das línguas que vamos introduzir no CS50 é algo chamado Scratch. Acontece que esta não é uma linguagem baseada em texto, como no meu pseudocódigo inglês, mas é gráfico e as coisas parecem peças de quebra-cabeça que você pode arrastar e soltar e eles se interconectam se faz sentido lógico fazê-lo. E, na verdade, alguns de vocês podem ter jogado isso de volta no dia em que as crianças ou ainda mais recentemente, porque na verdade é direcionado normalmente em estudantes em como depois de programas escolares que só quer aprender mais pensamento metódico, mais algorítmico ou computacional. E vamos usá-lo para explorar não só esses edifícios blocos, mas alguns outros também. Acontece nas outras línguas que vamos explorar no CS50 e além, são linguagens como o C que nós vamos fazer a transição para a próxima semana, para então traduzir o que fazemos esta semana em Scratch para a próxima semana em C. E em linguagens como Python e JavaScript e SQL, que também vamos explorar, temos outras capacidades ... a capacidade de armazenar dados em variáveis, por assim dizer, para usar threads, o que significa fazer com que o computador faça várias coisas ao mesmo tempo, eventos, significa ouvir as coisas acontecendo, como um clique na página ou uma digitação humana ou mesmo dizendo alguma coisa. Nós poderemos fazer todas as coisas que você toma para concedido em seus próprios telefones. E faremos isso primeiro por meio desse cara. Então esse é o Scratch, o gato padrão que vem com essa programação linguagem do laboratório de mídia do MIT. E via Scratch podemos começar a programá-lo para subir, para baixo, esquerda, direita, diga alguma coisa, pronuncie algo e outros comandos todos juntos. Na verdade, deixe-me ir em frente e mudar contextos aqui para mostrar a primeira coisa que escrevi no Scratch. Foi no dia em que eu estava na pós-graduação e o Scratch acabara de ser inventado pelo MIT. Deixe-me ir em frente e abrir isso. E eu chamei de Oscar Time. E se pudéssemos, talvez, ter um voluntário por apenas um momento. Você tem que estar confortável em estar no palco e na internet. Que tal aqui na camisa branca? Eu vi sua mão primeiro. Venha para baixo. Então este é o Oscar Time. É implementado em uma linguagem chamada Scratch. E no final do dia, tudo o que está por baixo do capô deste programa é funções e loops e condições e alguns outros desses conceitos. Oi. Qual o seu nome? AVIVA: Aviva. DAVID MALAN: Aviva. David. Prazer em conhecê-lo. Venha aqui. E daqui a pouco, vou em frente e clique a bandeira verde no canto superior esquerdo, que vai jogar este jogo. E vamos ver na tela as instruções. OSCAR: (cantando) Ah, eu amo lixo. Qualquer coisa suja ou suja ou empoeirada. Qualquer coisa esfarrapada ou podre ou enferrujada. Sim, eu amo lixo. Se você realmente quer ver algo sem valor, olhe para isto. Eu tenho aqui um tênis que está esfarrapado e gasto. Está tudo cheio de buracos e os laços estão rasgados. Um presente da minha mãe no dia em que nasci. Eu amo isso porque é lixo. Eu amo lixo. Qualquer coisa suja ou suja ou empoeirada. Qualquer coisa esfarrapada ou podre ou enferrujada. Sim, eu amo lixo. Aqui está mais algumas coisas podres. Eu tenho aqui um jornal de 13 meses. DAVID MALAN: Tudo bem. Todos, aplaudam a Aviva por subir. Obrigado. Aqui. Aviva Uma pequena bola de stress CS50. Então basta dizer, se você está cansado dessa música, considere o quão cansado eu estava oito horas depois, enquanto depuração e construção este programa. Mas considere o que acabamos de ver. É este jogo interativo e o material é animado e a música está tocando. Mas se você se concentrar em decompor, por assim dizer, este programa em apenas blocos de construção básicos, isso é apenas uma espécie de grande abstração sobre alguns menor partes de nível de funcionalidade. Como este lixo pode aqui. No momento, é apenas uma foto e, de vez em quando, assim que Aviva jogou algo no lixo, a tampa apareceu e Oscar saiu, ele disse alguma coisa e depois voltou para baixo. Mas essa animação é super simplista. Foi apenas uma sequência de 1, 2, 3 ou mais imagens sendo exibidas e, em seguida, voltando para baixo para criar a ilusão de animação. Enquanto isso, toda vez que Oscar dizia alguma coisa, que estava acompanhando sua pontuação no que é chamado de variável. Na álgebra, você tem x e yez, mas na programação você tem a mesma ideia, mas geralmente é mais útil chamá-las de maneira mais descritiva, como sua pontuação. E então provavelmente há uma variável neste jogo chamado pontuação que foi apenas manter o controle de quantas vezes Aviva havia jogado algo no lixo. Enquanto isso, o lixo em si e o sapato e o jornal - e ainda mais as coisas acontecem eventualmente - estavam caindo do céu em uma espécie de locais aleatórios, e isso é porque eu programei o jogo meio que começar o lixo aqui ou aqui, só para torná-lo um pouco mais desafiador como o jogo pegou. E, de fato, as coisas começam a cair mais e mais rápido ao longo do tempo, como um jogo típico, ficando cada vez mais difícil. Então, como chegamos a algo assim? Bem, deixe-me ir em frente e abrir o próprio Scratch e introduzir o ambiente. Então, no Scratch, você tem basicamente três áreas gerais. E é baseado na web, e assim você pode fazer isso em qualquer computador. E no lado esquerdo aqui, você tem as peças do quebra-cabeça a que me referi anteriormente. Essas peças do quebra-cabeça são todas mapeadas para funções ou loops ou condições ou variáveis, coisas que vimos antes, e eu sou indo para poder arrastar e soltá-los no meio em ordem interconectá-los e escrever meu programa, o que faremos daqui a pouco. Enquanto isso, o Scratch vive nesta fase, neste mundo, onde ele pode subir, para baixo, esquerda, direita. Você pode mudar a aparência do Scratch. Você pode adicionar outros caracteres, também conhecidos como sprites, para ter várias coisas acontecendo ao mesmo tempo. E, claro, você pode tela cheia. E assim, o jogo do Oscar Time, há pouco tempo, era na verdade um monte de sprites. A lata de lixo de Oscar era uma delas. Cada pedaço de lixo era outro sprite. O jornal era um duende e assim por diante. Então cada um deles era um programa separado rodando em paralelo ao mesmo tempo. Então, vamos fazer ele fazer alguma coisa. Acontece que se eu pular para, digamos, eventos, Eu vou ver um dos blocos mais poderosos desde o início, que é quando a bandeira verde é clicada. Isso é realmente como eu comecei o jogo com Aviva, clicando logo acima do mundo do Scratch esta bandeira verde. E se eu quisesse parar, como eu fiz, você pode clicar no sinal vermelho para dizer "pare". Enquanto isso, a bandeira verde, eu posso constantemente escute arrastando e soltando esta peça do quebra-cabeça. Quando a bandeira verde é clicada, o que eu quero fazer? Bem, deixe-me subir a aparência. E estas são apenas categorias diferentes. E podemos percorrer todos os diferentes blocos coloridos, mas eles praticamente fazem o que dizem. Eu vou ficar sob olhares, onde eu sei que existe um bloco que é chamado digamos, e eu vou em frente e digitar a ciência da computação mais canônica coisa-- olá mundo-- nesta caixa. Então observe que as próprias funções podem realmente tomar entradas e a entrada para esta função, digamos, vai ser oi mundo. Se eu passar agora para a bandeira verde e clicar Olá Mundo. Tudo certo. Então não é tão difícil. Não é tão interessante assim. Mas, na verdade, o trabalho foi feito e, assim, meu programa é de fato apenas isso. Bem, como eu poderia tornar isso um pouco mais interessante? Apenas dizendo, olá mundo o tempo todo não é tão atraente. Bem, sabe de uma coisa? Deixe-me pensar. Deixe-me desfazer isso. Deixe-me rolar para baixo para sentir. E observe isso. As funções também podem receber informações de um humano e funções podem retornar um valor, o chamado valor de retorno. Então esse bloco aqui, pergunte algo - por padrão, diz, qual seu nome e peso? é outra função embutida no Scratch que me permite fazer isso. Então eu vou seguir em frente e arrastar isso aqui e eu vou deixar dizer, qual é o seu nome? Observe agora que abaixo deste bloco é um bloco especial, seja qual for o retorno do bloco. Então, a resposta é o que o humano vai digitar. E se eu quiser agora dizer o que o ser humano digitou, deixe-me ir novamente para a aparência. Vá dizer. E observe que esses blocos são magnéticos. Eles querem se juntar. Então eu vou em frente e vou lá. E se eu voltar a sentir e pegar resposta, observe que mesmo que não seja do mesmo tamanho, vai crescer para encher, e agora eu posso tenho o meu programa perguntar ao usuário qual é o nome dele e, em seguida, diga o que quer que seja essa resposta. Então deixe-me ir em frente e pare e clique em jogar novamente. Note que está me pedindo meu nome, então deixe-me ir em frente e digitar David. Entrar. ESTÁ BEM. É um jeito meio estranho de cumprimentar alguém. David. Então seria bom limpar isso um pouco. Então você sabe o que? Eu sei disso apenas por ter cutucado antes. Nem tudo isso é óbvio à primeira vista. Mas acontece que sob operadores, a categoria, Tem essa coisa aqui - junte maçã e banana. Quais são apenas valores padrão. Você pode mudá-los. Porque o que eu quero fazer? Eu quero dizer olá, David, ou quem quer que seja, então eu meio que quero dizer olá, vírgula, e então, David - seja o que for que o humano digitou. E é isso que o join permite que você faça. Permite juntar ou concatenar duas frases que são de alguma forma fornecido por você ou pelo usuário. Então deixe-me tirar isso, a resposta. Deixe-me ir em frente e pegue o bloco de junção. Observe que também vai crescer para encher. Deixe-me ir em frente e dizer olá, vírgula, espaço e agora, arraste a resposta para lá. E observe esse aninhamento. Assim como na matemática. Este aninhamento de funções. Eu posso primeiro juntar-me ao olá e responder pegando essas duas coisas como entrada e depois passá-los para dizer como outra entrada porque essas coisas são colocadas no topo. E agora, se eu parar com isso e tocar de novo e dizer, David ... Olá, David. Agora, temos as características de um programa interativo mais interessante isso não é apenas codificado. Claro, não é tão audível quanto algo como o Oscar Time há pouco. Então deixe-me ir em frente e fazer isso. Deixe-me começar de novo e tratar o Scratch como o gato que ele é e apenas inicie o som chamado miau. Então acontece que há uma categoria de blocos chamada som, e dentro do som, há alguns sons padrão. Então comece a soar miau. E agora, as coisas vão ficar um pouco mais fofas. Aw. E agora, novamente. E eu posso simular um gato por aqui por um tempo e continuar clicando nesse botão. Mas você sabe o que? Deixe-me fazê-lo miau algumas vezes porque isso é mais realista. Então deixe-me pegar um segundo e um terceiro. E você pode obter esse suprimento infinito de blocos. Deixe-me apertar o play. Parece um bug. Vamos tentar de novo. Toque. Este é o meu primeiro erro ou erro. Isso parece correto. Diz que quando a bandeira verde clicou, começou o som miau, começou o som miau, comece som miau. Por que só estou ouvindo um miado? Sim. Eles são meio que ao mesmo tempo ou tão perto do mesmo tempo que os sons estão meio que tropeçando uns nos outros e se sobrepondo, certo? O bloco literalmente diz, comece a soar miau. Mas os computadores são muito rápidos. Se você já ouviu falar da expressão gigahertz, isso é uma unidade de medida. E se o seu computador tiver uma CPU de um gigahertz, unidade de processamento central ou cérebro, isso significa que pode literalmente fazer um bilhão de coisas por segundo. Pode certamente começar três sons super rápidos. E se todos estão efetivamente acontecendo um após o outro antes que o som termine, você está apenas ouvindo um efeito líquido. Então, como podemos consertar isso? Bem, eu posso realmente consertar isso com este bloco aqui tocar som miau até terminar. Tocar som meow até terminar. E agora. ESTÁ BEM. É um pouco infeliz, esse gato em particular, mas pelo menos agora está mais correto. E, como se vê, se eu for controlar ... Você sabe o que? Há este bloco aqui - espere alguns segundos. Eu posso ir em frente e inserir isso aqui. Deixe-me fazer outro aqui. E agora, aperte play. Você sabe, não é ruim. Agora soa um pouco mais realista. Mas honestamente, se eu continuar fazendo isso - ou você sabe o que? Você pode clicar com o botão direito ou controlar clique em blocos, duplique-os e copie e cole ainda mais, se desejar. Então, se eu fosse fazer isso agora, seria apenas seis vezes. E então eu poderia copiá-lo novamente e ir 12 vezes. Mas tem que haver um jeito melhor, certo? Isso agora é uma programação ruim. Isso é um projeto ruim. Porque eu estou literalmente copiando e colando, embora, graficamente. Mas nós já vimos um bloco de construção com o qual podemos projetar melhor este programa. Está correto, mas não está bem projetado. Qual seria o bloco de construção que eu preciso para tornar isso um pouco mais limpo? ESTÁ BEM. Um loop de quatro. Não existe no Scratch. Mas um loop fundamentalmente faz algo ciclicamente. E, de fato, se eu for sob controle e começar a cutucar você notará que há alguns blocos que podem ser aplicados aqui. Há o bloco de repetição um certo número de vezes ou o bloco para sempre, ambos soam como loops ou ciclos. Então, com certeza, deixe-me ir em frente aqui e eu posso jogar fora blocos apenas arrastando-os para a esquerda. Deixe-me puxar isso por um segundo. E então apenas diga para sempre tocar esse som, e então espere um segundo. Então agora, meu programa se parece com isso. Você sabe, nunca saberemos se é tecnicamente correto, porque é apenas indo para a frente, pensamos, para sempre, mas parece que isso está correto. E foi muito menos código e é muito mais fácil para manter, porque se eu quero que ele fique com sono, Eu posso então dizer dois segundos em vez disso. Você sabe, e nós podemos ajustar isso imediatamente enquanto vamos. Mas vamos começar a combinar algumas dessas ideias agora e mudar o que é o efeito final é. Deixe-me ir em frente e abrir um exemplo que fiz antes. Este é chamado de Count Zero. E vamos colocar isso no site mais tarde, para que você possa brincar se quiser. E isso é o oposto de contar carneiros. Em vez de eu ou a pessoa dormindo contando ovelhas, esta ovelha contará a si mesma. Então deixe-me ir em frente e apenas jogar. E adoravelmente, ele parece estar contando 1, 2, 3. Mas por que isso? Ele só vai contar para sempre. Mas vamos olhar para os blocos com os quais ele está contando para sempre. Quando a bandeira verde clicou, ajuste o contador. Acontece que essa caixa laranja é o que chamamos de variável. Então, na álgebra, seria como x ou y ou z. Aqueles não são descritivos. Eu chamei este contador em vez disso, mas eu poderia ter chamado x ou y ou z. E então eu sempre digo o contador por um segundo, então espere um segundo, e depois mudar o contador por um, que tecnicamente significa apenas incrementá-lo. Adicione 1 a ele. E as ovelhas vão, portanto, contar para cima e para cima. Agora, isso é um pouco entediante, mas isso é tipo de ponto de contar ovelhas, claro, para adormecer. Mas e se as ovelhas realmente gostassem de contar um pouco mais rápido? Bem, deixe-me passar por operadores aqui. A multiplicação parece que poderia nos colocar em lugares mais rápidos. E deixe-me ir em frente e ir para as variáveis. E em vez de trocar o contador por um, deixe-me ir em frente e apenas continuar configurando para outra coisa. Então deixe-me arrastar e soltar isso. Defina o contador igual a algo vezes algo, especificamente o contador cronometra dois, duplicando, dobrando, dobrando, dobrando. Isso parece crescer, por assim dizer, muito mais rápido. Vamos ver. 1, 2, 4. Então ele está contando mais rápido, mas ainda é um pouco tedioso. E se nós fizermos isso? Vamos parar de esperar e vamos em frente e, com a aparência, Não diga contador por um segundo, mas vamos dizer rapidamente contador. Então eu vou dizer o contador. Ops Eu vou dizer o contador e depois vou configurá-lo para si mesmo 2 vezes. Então aqui é onde estamos. Inicialize, ou defina o contador para 1 inicialmente, diga, depois duplique, então duplique, depois duplique, dizendo ao longo do caminho. Aqui vamos nos. Isso é impressionante. Então agora as ovelhas contaram até 10 a 60 até agora. 10 a 100. ESTÁ BEM. Agora, nem cabe na bolha do discurso, mas ele ainda está indo. Quão alto ele pode ir? Qual é o maior número que você pode contar em um computador? Alguém quer adivinhar? Pode estar aqui por um tempo. 10 para o 270 agora. Quão alto você pode contar, ou melhor-- ESTÁ BEM. Então desistimos e acabamos de chamar de infinito. Então acontece que o infinito tem um valor preciso 10 a 250 ou mais. Mas o que acontece aqui? Bem, porque computadores, no final do dia, estão apenas armazenando informações digitalmente - mas essa informação digitalmente para ser fisicamente armazenado usando eletricidade, usando este nível inferior interruptores chamados transistores. No final do dia, meu celular, meu laptop, qualquer dispositivo em questão só tem uma quantidade finita dessas coisas. Eu só tenho um número finito de dedos. Usando unário, minha antiga abordagem hashmark da escola, Eu posso contar até cinco nessa mão. Usando binário, eu reivindiquei contar até 31 nessa mão. Mas ainda é finito. Eu não posso contar até o infinito nessa mão porque eu só tenho cinco dedos. Da mesma forma, um computador tem apenas tantos transistores muitos bytes ou bits de memória e, em algum momento, o programador tem que pensar sobre o que ele é ou ela vai fazer quando o usuário quer contar tão alto que você não pode mais se encaixar fisicamente. Você tem que desistir assim e dizer algo semi com precisão ou você tem que lidar com esse problema de alguma outra forma. E vamos ver quando chegarmos a C que como você lida com esse problema não é necessariamente direto, e de fato muito software lá fora não lida com esse problema. E as chances são, todos nós temos programas que se você digite palavras grandes o suficiente ou números grandes o suficiente nelas, eles podem muito bem quebrar ou travar ou congelar porque os humanos, ao contrário do MIT, não previram que isso poderia realmente acontecer e lidar com isso. Bem, deixe-me ir em frente e fazer isso. Deixe-me abrir este programa e ver se não podemos ler o código agora. Isso é chamado de Pet Zero e este é um programa que simula petting. Então, se eu clicar em jogar e não tocar no teclado, nada parece estar acontecendo, mas se eu agora mover meu cursor para o gato - Aw. É meio fofo. Agora, é mais só miando quando você acaricia o gato. Por quê? Bem, observe que adicionei alguns outros blocos de construção. Nós não usamos este antes, mas intuitivamente provavelmente faz um sentido bem claro. Quando a bandeira verde for clicada, faça sempre o seguinte. Se o gato está tocando o ponteiro do mouse - essa coisa em azul é o que chamamos anteriormente de uma expressão booleana. Tem um sim / não, um verdadeiro / falso, uma resposta de um / zero. E tocar o ponteiro do mouse é uma das opções na pequena queda aqui embaixo, se você mexer com isso. Então, se o gato está tocando o ponteiro do mouse, então e só então, tocar som miau até terminar. Então, nós combinamos agora funções com loops com uma condição. Mas por que o loop? O gato só mia uma vez quando eu acaricio ele. Por que estou fazendo algo para sempre aqui? Alguém ... sim. Sim. Eu poderia querer acariciá-lo novamente, então eu quero que o programa preveja isso. E honestamente, se eu omiti este bloco para sempre e meu programa Em vez disso, parecia exatamente assim: então deixe-me me livrar disso e disso-- e então eu cliquei em play, e agora, eu pairo sobre ele, Por que não está funcionando nem uma vez? Diga isso de novo. Sim. Então, eu quero dizer, neste ponto, se eu puder resumir, o computador é tão rápido que isso já aconteceu no momento em que mudei meu cursor para o gato, e no momento Eu cliquei em play, eu não estava tocando o gato. Esses blocos executados, por assim dizer, de cima para baixo. É isso para o programa. Então, no momento em que eu movo o cursor para o gato, o programa acabou. Não está escutando. E assim para sempre, desta forma eu posso realmente ouvir em perpetuidade por algo para realmente acontecer. E se eu quiser fazer algo não apenas se algo for verdade? mas lidar com dois casos? Se ou então Bem, deixe-me ir em frente e abra o Pet One. E este é outro exemplo. E alguém poderia descrever, depois de ler este código, o que este programa vai fazer em vez disso? Sim. Exatamente. E deixe-me resumir mais verbalmente. Então, se desta vez você tocar o gato, ele vai rugir. Mais, vai miar docemente. Então, desta vez, é meowing perpetuamente uma vez a cada segundo, mas se você tocar nesse gato em particular, ele não gosta disso. Então jogue. Miau. Miau. E agora. Não toque no gato. Então, agora, podemos interagir de duas maneiras diferentes por ter duas estradas diferentes que você pode descer. Bem, vamos realmente fazer algo um pouco mais interativo. Deixe-me ir em frente e abrir outro exemplo. Este é chamado Bounce Zero porque agora, nós pode começar a ver alguns elementos de design do que era o Oscar Time. Assim agora está ficando um pouco interessante. O que está realmente acontecendo aqui? Então deixe-me ampliar os blocos aqui. Este bloco está apenas dizendo para sempre mover 10 passos, o que é outro bloco que não vimos. Mas 10 passos é como 10 pixels. Então, mova 10 pixels na tela. Mas se você está tocando a borda, gire em torno de 180 graus. E você pode ver exatamente isso acontecendo. O risco está girando em torno de 180 graus e esse estilo de rotação apenas significa o dobro de volta. Não goste de girar em torno de 180 graus. Então isso é legal. Mas não é assim que humanos ou gatos andam. Como o que é obviamente antinatural sobre isso? Sim. Quer dizer, eu nem consigo simular, certo? Como seus pés estão em posição estática, ainda deslizando para frente e para trás na tela. E, no entanto, não é isso que é andar. Como andar presumivelmente tem algum tipo de movimento e o quê? Bem, poderíamos simular como ... OK, eu poderia simplesmente andar andando e você pode imaginar tirando fotos realmente rápidas das minhas pernas ou a perna do gato em movimento e, em seguida, apenas decidindo esta foto será representativo de um passo. Esta foto será outra representativa. E você sabe, com apenas dois desses passos, Eu apostaria que poderíamos fazer um bom trabalho simulando o que andar parece. Na verdade, se eu voltar para onde começamos, essa foto do Scratch, E se eu apenas mover suas pernas um pouco e depois voltar, então vá em frente? E mesmo no meu PDF, posso simular animações clicando em seta, seta para baixo, seta para cima, seta para baixo porque meio que parece que ele está andando agora, quando na verdade, seus olhos humanos estão apenas vendo duas fotos diferentes de novo e de novo. Então, como posso fazer isso? Bem, se eu voltar ao Scratch, ele ainda está andando. Deixe-me ir em frente e abrir o Bounce One, a segunda versão disso, e agora, faça isso. ESTÁ BEM. Então, como eu adicionei isso? Há um pequeno bloco roxo que ainda não vimos mas se você pesquisar as categorias, você veja outros blocos como este próximo traje que apenas mantém mudando o traje que ele está vestindo. Acontece que Scratch existe como uma imagem e sua imagem padrão ele não está se movendo, mas se eu subir aqui para o canto superior esquerdo e clicar em figurinos, você pode realmente ver que aqui está sua única fantasia. Aqui está sua segunda fantasia. E então aquele bloco roxo que diz o próximo traje, porque é no loop da eternidade, ele apenas continua fazendo next, next, next, next, next, mostrando uma fantasia ou outra. Eles estão claramente imitando a caminhada. Agora, isso não é muito antinatural. Por que não atrasaremos ele, digamos, cinco passos de cada vez e o faremos de novo? Agora, isso ainda está indo bem rápido. Deixe-me ir em frente e dizer ... nós poderíamos ter controle. Poderíamos esperar que ele esperasse um segundo depois de se mover de forma muito dramática. Nós provavelmente poderíamos acelerar isso. Então vamos esperar 1/10 de um segundo, 0.1. Ou talvez vamos fazer 0.01, 1/100 de segundo. Agora, está ficando um pouco mais realista. Mas isso é o que é animação. Se você já viu um desenho animado ou um filme baseado em fotos como essa, você está apenas mexendo com alguns desses parâmetros, essas entradas, a fim de produzir este resultado, entendendo qual é a representação fundamental dessas coisas, que neste caso são apenas imagens, de novo e de novo e de novo em ordem para criar essa animação. Mas e a interatividade? Deixe-me fazer isso sozinho. Deixe-me ir em frente e se livrar disso, voltar para os eventos e dizer: quando a bandeira verde clicou. Então, deixe-me ir em frente e pegue um bloco para sempre de modo que isso continue indo de novo e de novo. E então, deixe-me ir em frente para ir ao movimento. Acontece que, sob o movimento, há esse bloco que não vimos apontam para o ponteiro do mouse. E deixe-me ir em frente e puxar isso aqui. E então, deixe-me fazer com que ele se mova como um passo de cada vez, em vez de 10. O que isso vai fazer? O que esse programa faz? Sim. Diga isso de novo. Siga o mouse. Sim. Isto é como uma forma de levar o seu gato para passear. Talvez não seja exatamente o animal que pretendíamos, mas ele seguirá o cursor. E eu realmente posso acelerar isso um pouco. Então, vamos fazer ele passar 10 passos. ESTÁ BEM. Agora vamos lá. Então, agora ele está subindo e descendo, e agora é interativo. Então você pode se lembrar que quando estávamos jogando Oscar mais cedo e escolhendo acima-- ESTÁ BEM. Não faça isso. Veja, isso é um bug. Ele está apenas confuso. Ele está constantemente se movendo em direção a ele, mas você já está-- ESTÁ BEM. Então vamos parar. ESTÁ BEM. Então, agora, ele está seguindo, mas é assim que podemos criar agora por exemplo, a capacidade de mover esses pedaços de lixo em torno e tê-los seguir o cursor do mouse. Se você pensa no Oscar Time, toda vez que você pega um pedaço de lixo, ele seguiria o cursor porque havia um loop para sempre e um bloco como este apontando para o ponteiro do mouse. Bem, agora vamos integrar várias ideias e realmente tem vários scripts. Eu propus anteriormente que os programas podem ter vários threads. Um tópico é apenas uma maneira sofisticada de dizer, em nosso contexto, vários scripts. Vários scripts em um programa que estão acontecendo essencialmente em paralelo. Um computador pode efetivamente fazer várias coisas de cada vez graças ao encadeamento, e mais sobre isso no caminho. Então, esses são mais envolvidos, mas vamos ver se pudermos-- vamos entender primeiro o que este programa faz. Deixe-me ir em frente e apertar o play. E este tende a ser um pouco alto. Então o leão-marinho está latindo sem parar, irritantemente. Então, lendo o código, como posso pará-lo de latir? Bata a barra de espaço. Tudo certo. Então aperte a barra de espaço. ESTÁ BEM. Eu poderia simplesmente parar o programa, obviamente, mas este programa ainda está funcionando, tecnicamente. Mas por que isso funcionou? Bem, observe isso no lado esquerdo é o primeiro script. Quando a bandeira verde for clicada, defina essa variável que chamei de mudo para falso. Poderia ter chamado x ou y ou z ou contador, mas nenhum desses realmente faz sentido, então eu chamei isso de mudo. E eu configuro igual a false, que é, novamente, um valor booleano. Verdadeiro ou falso significa apenas sim ou não. Para sempre, se o espaço de teclas for pressionado, faça isso. Se mudo é atualmente falso, mude mudo para verdadeiro. Senão, mude mudo para falso. Então, se mudo é falso, mude para verdadeiro. Se mudo for verdadeiro, mude para falso. Sempre que o humano acertar a barra de espaço, atualize essa variável. Agora, se olharmos para o outro roteiro, que também está dirigindo o leão-marinho, o que ele está fazendo? Para sempre, se mudo é falso. Então, se ele não estiver mudo. Se mudo é falso significa não silenciado. Comece o som do leão marinho e depois pense oi, oi, oi por dois segundos, e então espere por mais um segundo. E então apenas repita, repita, repita. Mas se eu mudar com a barra de espaços mudo para true, ele vai dizer se mudo é igual a falso, não é assim. Eu não vou tocar um som dessa vez. E agora, temos a capacidade de integrar vários scripts juntos a fim de alcançar um resultado mais interativo. E isso? Voltar quando eu era criança, pode ter jogado nos verões Marco Polo. Jogo super simples. Nós jogamos na piscina, por algum motivo, onde uma pessoa na piscina com muita segurança está vendada, e então ele ou ela grita Marco. E então, todos ao seu redor devem gritar polo. E então, a pessoa que está vendada é deveria perseguir as outras crianças na piscina e marcá-las, e então eles se tornam isso. Mas em outras palavras, é como um mecanismo de sinalização. Alguém grita, Marco e todo mundo responde a essa transmissão da palavra Marco. Bem, acontece que podemos simular isso com esses dois fantoches. Esse cara aqui - note que eu destaquei o fantoche laranja porque há um segundo boneco azul lá. Sprites separados. E estas são apenas fotografias que enviamos para o jogo. Para sempre, se o espaço da tecla for pressionado, se a barra de espaço for pressionada, diga Marco por dois segundos e depois transmita um evento. Enquanto isso, o boneco azul aqui tem um bloco super simples, mas é fundamentalmente diferente das que vimos. Ele não está começando quando a bandeira verde é clicada. Ele está começando apenas quando ele recebe um evento. Então acontece que sprites e Scratch não podem ouvir ou ver o que o outro está dizendo nessas bolhas de fala. Você tem que usar uma técnica mais chique, que é o bloco especial chamado broadcast, que é como passar uma nota digitalmente de um sprite para outro que o outro possa ler ou receber, por assim dizer. Então, somente quando ele recebe este evento, por assim dizer, ele diz polo por dois segundos. E mais uma vez, o boneco de laranja envia essa mensagem secreta apenas usando essa outra peça do quebra-cabeça. Transmita um evento, como passar uma nota que o humano realmente não vê. Então, se eu acertar a bandeira verde e acertar a barra de espaço, a laranja grita Marco. O cara azul grita polo em resposta. Mas aqueles não são cronometrados juntos. Em vez disso, o cara azul está ouvindo com o laranja disse, permitindo assim que vários sprites intercomuniquem de fato. Então, como nós chegamos aqui? Bem, lembre-se de que tínhamos todos esses blocos de construção um momento atrás. Primeiro, começamos com apenas funções e condições e expressões e loops booleanos. Agora adicionamos a isso a capacidade de armazenar informações em variáveis e threads para fazer várias coisas ao mesmo tempo, e então, se você fizer tem várias coisas acontecendo, eventos, onde eles podem entrar em comunicação de alguma forma. Ainda outro bloco de construção. Então, se agora dermos um passo atrás e considerarmos como podemos fazer nossas próprias funções, temos a peça final do quebra-cabeça, por assim dizer. Deixe-me ir em frente e fazer isso. Deixe-me ir em frente e criar um programa simples com, quando a bandeira verde cortada, que simplesmente simula a tosse de um gato. Então esse gato vai dizer não alô, mas tosse por um segundo. E então ele vai em frente e espera por um segundo. E então eu vou em frente e copio colar, como eu fiz antes - este é um dos que faço como eu digo, não como eu faço para implementar este programa aqui, onde ele tosse três vezes. Nós já sabemos, no entanto, que este não é um bom design. Por quê? Você está se repetindo. Não se repita. DRY é um acrônimo, na verdade. Não se repita porque você está fazendo três vezes mais vezes algo que você só precisa fazer uma vez. A solução antes, claro, era apenas usar um loop de algum tipo. Então deixe-me tirar isso. Deixe-me usar um bloco de repetição, mudar de 10 para três, e depois é só usar dois desses blocos. E observe já, o programa é muito mais compacto. E agora, se eu quiser mudar os três para um 30 ou para um 10 ou qualquer número, Eu apenas mudoi um valor simples. Eu não tenho que reescrever ou copiar colar ou excluir coisas. Eu posso atualizar o programa muito mais facilmente, e agora, a mesma coisa vai acontecer com apenas tosse, tosse, tosse. Mas acontece que seria bom, daqui em diante, abstrair isso, certo? Eu só quero que qualquer programa que eu escreva saiba como tossir. E tossir é só dizer alguma coisa, talvez algum número de vezes. Mas acontece que podemos abstrair isso em código. Deixe-me descer aos meus blocos aqui e isso permite eu clique neste botão - faça um bloco. Isso me permite fazer minha própria função. Eu recebo esta janela de diálogo aqui. E eu só vou chamar esse bloco de tosse. Eu vou em frente e clico em OK. E agora, eu tenho esse novo bloco rosa que pode ter blocos embaixo dele. E você sabe o que eu vou fazer? Eu vou seguir em frente e fazer isso. Eu vou em frente e digo tosse lá embaixo. E agora, observe à esquerda, agora tenho acesso a essa nova peça rosa. Agora posso colocar isso aqui. Então, agora, note que, sim, é assim que a tosse é implementada no lado esquerdo aqui, na próxima vez, quando eu escrever um programa, Eu só quero chamar tosse. E eu não me importo com esses detalhes de implementação de nível mais baixo. Eu não me importo com a festa ou nada disso. Eu só quero que isso seja uma abstração. Mas eu poderia fazer melhor do que isso, não seria ser legal se ao invés de apenas repetir a tosse três vezes, E se eu fizesse isso uma característica da tosse? Então deixe-me fazer isso. Eu posso ir em frente e clicar com o botão direito nessa peça rosa e posso editá-la. Isso traz a mesma janela de antes. E observe isso. Adicione uma entrada. Então, quando eu faço um bloco personalizado, eu posso realmente fazer blocos muito bonitos assim como os que o MIT nos dá com o software, e agora eu posso digitar algo como n. E se eu adicionar um rótulo apenas para torná-lo mais descritivo, posso apenas dizer os horários. Então agora eu fiz um quebra-cabeça personalizado peça que diz tossir algumas vezes, onde n para número é apenas a variável que os programadores tendem a usar. Então, agora, eu posso realmente mover esse bloco de repetição para tossir, mas em vez de código rígido 3, observe isso. Eu posso roubar essa variável e agora dizer tossir isso muitas vezes repetindo dizendo isso de novo e de novo e de novo. E agora, quando eu tento no meu programa atual, eu apenas digito três aqui. Então eu tenho essa linda abstração agora, por assim dizer. Tossir isso muitas vezes e eu e mais ninguém no mundo nunca mais precisa se preocupar com o que significa tossir porque já implementado isso antes. E assim como o MIT nos deu tanta funcionalidade que nós mesmos não temos que pensar, então podemos Eu agora faço funcionalidades que não tenho que pensar. E à medida que avançamos para linguagens de nível superior, como C e JavaScript e Python, vamos continuar esse processo, às vezes resolvendo problemas nós mesmos fazendo nossas próprias peças de quebra-cabeça mas muitas vezes usando coisas chamadas bibliotecas, código que outros humanos escreveram antes de nós, é apenas útil para fazer o trabalho, assim como o Scratch fez aqui em parte para nós. Deixe-me ir em frente, então, e trazer tudo isso juntos abrindo este outro exemplo aqui. Deixe-me ir em frente e abrir este, que não é algo que vimos, mas é um tipo de jogo interativo como esse feito por um ex-aluno. Devemos ter uma maçã? Sim. Um pouco de animação. ESTÁ BEM. Isso não terminou bem. Vamos tentar de novo. Jogar de novo. E observe o que está acontecendo. Há algum tipo de bloco de pergunta. O estudante estava checando se o ser humano digitava sim ou não. Vamos digitar não desta vez. Nenhuma maçã Ooh Bolinho. ESTÁ BEM. Sim. Entrar. ESTÁ BEM. Não faça isso. Mais uma vida. Aqui vamos nós. ESTÁ BEM. Nenhuma maçã Sem bolinho. Pequena variável. ESTÁ BEM. Então eu ganhei o jogo. Nos nossos momentos finais aqui, deixe-me ir em frente e abrir um último exemplo. Como você sabe, o CS50 é oferecido não só em Harvard, mas também em Yale, então parece apropriado talvez terminar em uma nota que coloca um campus talvez contra o outro por meio de outro jogo que um ex-aluno escreveu, chamado The Hardest Game de Ivy. Mas, para isso, acho que precisamos de um voluntário final que esteja chegando. ESTÁ BEM. Primeira mão. Ali. Venha para baixo. Então, no jogo mais difícil de Ivy, é um jogo jogado com o teclado. E mesmo que pareça um pouco avassalador à primeira vista, assim como o Oscar Time fez e como a animação do bolo de gengibre pode, perceber que, se você decompõe-lo em apenas a mente de pensar sobre o que aqueles blocos de construção individuais são, você pode provavelmente adivinhe quais são as peças do quebra-cabeça. Oi. Qual o seu nome? ANDREA: Olá. Eu sou Andrea. DAVID MALAN: Andrea. David. Prazer em conhecê-lo. Aqui é o jogo mais difícil de Ivy. Põe você contra todos os Ivies aqui. E logo depois disso, vamos adiar cupcakes no transepto. Pronto? MC HAMMER: (cantando) Você não pode tocar isso. Você não pode tocar isso. DAVID MALAN: Legal. MC HAMMER: (cantando) Você não pode tocar isso. Meu, meu, meu, meu. A música te atinge com tanta força. Me faz dizer, oh meu senhor. Obrigado por me abençoar com uma mente para rimar e dois pés hype. É bom quando você sabe que está triste. Um super doy homeboy do Oaktown. E sou conhecido como tal. E esta é a batida que você não pode tocar. Eu te disse, mano, você não pode tocar isso. Sim. É assim que estamos vivendo e você sabe que não pode tocar isso. Olhe em meus olhos. Cara, você não pode tocar isso. (SINGING) Chutes e calças novos e frescos. Você entendeu assim e agora você sabe que quer dançar. Então saia do seu lugar e pegue uma garota voadora e pegue essa batida enquanto está rolando. Aguente. Bombar um pouco e deixe-me saber que está acontecendo assim. Curtiu isso. Frio em uma missão, então puxe para trás. Deixe-os saber que você é demais e esta é a batida que você não pode tocar. Yo, eu te disse, você não pode tocar isso. Por que você está aí, cara? Você não pode tocar isso. Soa os sinos. A escola é uma otária. Você não pode tocar isso. Me dê uma música ou ritmo. Fazendo-os suar. Isso é o que eu estou dando a eles. Agora eles sabem quando você fala sobre o martelo, você está falando de um show que é sensacionalista e apertado. Cantores estão suando, então passe-lhes um lenço ou uma fita para saber o que vai acontecer nos anos 90 para queimar os gráficos. DAVID MALAN: do segundo ao último nível. MC HAMMER: (cantando) Ou trabalhe duro ou você pode muito bem desistir. Isso é palavra porque você sabe que não pode tocar isso. Você não pode tocar isso. Quebre isso. Pare. Hora do martelo. Vá com o fluxo, diz-se. Se você não pode groove para isso, então você provavelmente está morto. Então acene suas mãos no ar. Bust alguns movimentos. Passe os dedos pelos cabelos. Isto é para um vencedor. Dance com isso e você vai ficar mais magro. Mover. Deslize seu traseiro. Só por um minuto, vamos todos fazer a colisão, bater, bater. Sim. Você não pode tocar isso. Olha cara. Você não pode tocar isso. É melhor você ficar excitado, garoto, porque você sabe (SINGING) Quebre isso. DAVID MALAN: ANDREA: DAVID MALAN: Não. Está certo. Mais uma vida. MC HAMMER: (cantando) Pare. Hora do martelo. DAVID MALAN: Tudo bem. Uma salva de palmas para Andrea, se pudéssemos. ESTÁ BEM. É isso para o CS50. Veja o site para detalhes. Nós vamos ver você para o bolo no transepto. Bem vindo a bordo..

Exames pre operatorios quais sao cursos de hotelaria a distancia Cambé exame ppd teste de mantoux. Marília art 333 i cpc doutrina Trabalhos Matemáticos, curso de espanhol rapido online Discurso/Apresentação, exame t4 livre como interpretar Apresentação de Power Point, como publicar um artigo de fisioterapia ABNT. Exame admissional franco da rocha x factor usa panda exames pre operatorios quais sao Santos curso auxiliar de enfermagem senac sp. Loja de artigos para karate Redação Marituba cia certification uk, direito processual civil conceito.

Caraguatatuba:

Savannah Sanford, Orleans: Clarkson University. Anápolis: Queens College, City University of New York; 2018.

Doris Pollard, Schoharie. Paulista: Hudson Valley Community College; 2016.

Andy English, Elizabeth Street zip 10012. Birigui: Globalization and International Affairs Program; 2012.

inserted by FC2 system