1 00:00:00,000 --> 00:00:10,940 2 00:00:10,940 --> 00:00:13,060 >> DAVID MALAN J: Todos direita, de modo que este é CS50. 3 00:00:13,060 --> 00:00:15,040 E esta é claramente uma sexta-feira. 4 00:00:15,040 --> 00:00:16,850 E este é o fim de uma semana. 5 00:00:16,850 --> 00:00:21,020 Então você pode recordar que paramos, última vez, com um cliffhanger das sortes. 6 00:00:21,020 --> 00:00:25,020 Em que expomos essa mentira, que não importa o que você foi ensinado crescente 7 00:00:25,020 --> 00:00:31,610 up, 1 dividido por 10 não é, em fato, 0,1 ou 0,100 ou 0,10 mil. 8 00:00:31,610 --> 00:00:35,270 Na verdade, se nós compilamos esta programa, como fizemos ontem, com, 9 00:00:35,270 --> 00:00:39,770 fazer imprecisão, e, em seguida, fazer dot, slash, imprecisão, 10 00:00:39,770 --> 00:00:43,600 nós aprendemos que isso é o que é 1 dividido por 10 é realmente. 11 00:00:43,600 --> 00:00:46,140 Então isso não é realmente bem o caso. 12 00:00:46,140 --> 00:00:49,014 Mas isso não faz alusão a alguns limitação fundamental de computadores. 13 00:00:49,014 --> 00:00:50,930 E, de fato, entre os coisas que nós vamos fazer 14 00:00:50,930 --> 00:00:55,130 hoje é dar uma olhada porque este tem aconteceu, o que implicações isso tem, 15 00:00:55,130 --> 00:00:58,430 como a humanidade falhou de compreender isso em alguns muito 16 00:00:58,430 --> 00:01:00,410 situations-- sério o resultado de que o 17 00:01:00,410 --> 00:01:03,141 tem sido bastante trágico e e também expensive-- 18 00:01:03,141 --> 00:01:04,849 Dê uma olhada em como nós pode realmente defender 19 00:01:04,849 --> 00:01:06,530 contra esses tipos de limitações. 20 00:01:06,530 --> 00:01:10,940 Então intuitivamente, talvez, por isso que é dividido por 1 10, 21 00:01:10,940 --> 00:01:15,480 de acordo com o meu computador aqui, não apenas 1/10, 0,10? 22 00:01:15,480 --> 00:01:15,980 Sim. 23 00:01:15,980 --> 00:01:16,530 O que você acha? 24 00:01:16,530 --> 00:01:17,860 >> PARTICIPANTE: A raiz é diferente? 25 00:01:17,860 --> 00:01:18,550 >> DAVID MALAN J: O que é? 26 00:01:18,550 --> 00:01:19,730 Oh, a raiz é diferente? 27 00:01:19,730 --> 00:01:20,720 Portanto, não é bem assim. 28 00:01:20,720 --> 00:01:23,200 É realmente mais fundamental para o hardware. 29 00:01:23,200 --> 00:01:23,980 Outros pensamentos? 30 00:01:23,980 --> 00:01:24,584 Sim. 31 00:01:24,584 --> 00:01:26,750 PARTICIPANTE: Eles representar números de forma diferente? 32 00:01:26,750 --> 00:01:27,880 DAVID MALAN J: Então they-- direito. 33 00:01:27,880 --> 00:01:29,338 Eles representam números de forma diferente. 34 00:01:29,338 --> 00:01:30,700 Inaccurately, aparentemente. 35 00:01:30,700 --> 00:01:33,190 Assim que é-- Bem, diferentemente do que? 36 00:01:33,190 --> 00:01:34,490 Ou de quem? 37 00:01:34,490 --> 00:01:35,050 De nós? 38 00:01:35,050 --> 00:01:35,966 PARTICIPANTE: Sim. 39 00:01:35,966 --> 00:01:38,930 Eles não usam o decimal sistema para [inaudível]. 40 00:01:38,930 --> 00:01:39,680 DAVID MALAN J: OK. 41 00:01:39,680 --> 00:01:41,560 Assim, em certo sentido, eles não usar o sistema decimal. 42 00:01:41,560 --> 00:01:43,720 Debaixo do capô, tudo é, de fato, binário, 43 00:01:43,720 --> 00:01:45,510 e isso é relacionado, na verdade. 44 00:01:45,510 --> 00:01:48,135 Mas é ainda mais simples explicação do que isso. 45 00:01:48,135 --> 00:01:48,635 Sim. 46 00:01:48,635 --> 00:01:49,970 >> PARTICIPANTE: Eles só tem tantas pedaços. 47 00:01:49,970 --> 00:01:52,370 Eles só podem armazenar até um certo extensão, como com os decimais. 48 00:01:52,370 --> 00:01:52,780 >> DAVID MALAN J: Sim. 49 00:01:52,780 --> 00:01:54,420 Isto é o que está realmente ficando para ele. 50 00:01:54,420 --> 00:01:57,180 Acontece que os computadores normalmente, será sempre única 51 00:01:57,180 --> 00:01:59,690 utilizar uma quantidade finita de informações para representar algo. 52 00:01:59,690 --> 00:01:59,870 Certo? 53 00:01:59,870 --> 00:02:02,110 Afinal de contas, nós só temos um fixo quantidade de espaço no disco rígido. 54 00:02:02,110 --> 00:02:04,210 Nós só temos uma quantidade fixa de RAM, ou memória de computador. 55 00:02:04,210 --> 00:02:06,251 E se você só tem um montante fixo de alguma coisa, 56 00:02:06,251 --> 00:02:09,611 certamente você não pode realmente contar-se para o infinito ou qualquer número que você quiser. 57 00:02:09,611 --> 00:02:11,610 Você, tipo, tem que escolher o intervalo 58 00:02:11,610 --> 00:02:13,220 de valores que você vai apoiar. 59 00:02:13,220 --> 00:02:18,100 >> E assim, por exemplo, uma semana ou dois atrás, quando nós falamos sobre ASCII, 60 00:02:18,100 --> 00:02:21,610 e nós conversamos sobre 8 bits, ou um byte, por assim dizer, 61 00:02:21,610 --> 00:02:26,360 o maior número pudéssemos representar com 8 bits foi o quê? 62 00:02:26,360 --> 00:02:28,350 255. 63 00:02:28,350 --> 00:02:31,850 E nós podemos representar 256 valores totais mas não se passarmos um deles 64 00:02:31,850 --> 00:02:34,190 em 0-- Bem, mas se nós passar um deles em 0, 65 00:02:34,190 --> 00:02:36,830 em seguida, o maior número é, é claro, 255. 66 00:02:36,830 --> 00:02:39,410 >> Assim, verifica-se, que este é o caso também, neste contexto. 67 00:02:39,410 --> 00:02:42,350 Começamos a conversar, a última vez, sobre números de ponto flutuante, que 68 00:02:42,350 --> 00:02:44,640 são diferentes dos números inteiros, em que eles têm um ponto decimal 69 00:02:44,640 --> 00:02:47,056 e, esperamos, alguns números Depois disso, mas são demasiado. 70 00:02:47,056 --> 00:02:51,730 Um computador só vai tipicamente usar 32 bits, 64 bits talvez 71 00:02:51,730 --> 00:02:53,497 para representar um valor de ponto flutuante. 72 00:02:53,497 --> 00:02:56,080 Assim, mesmo que nós crescemos aprendizagem da matemática e saber 73 00:02:56,080 --> 00:02:58,750 que você pode absolutamente ter um número infinito de números 74 00:02:58,750 --> 00:03:01,650 depois do ponto decimal, não se você tem memória finita. 75 00:03:01,650 --> 00:03:03,930 Você, tipo, tem que arredondar, ou escolher quais 76 00:03:03,930 --> 00:03:05,346 números que você vai representar. 77 00:03:05,346 --> 00:03:08,710 E assim que você pode pensar, em certo sentido, sendo este o mais próximo do computador 78 00:03:08,710 --> 00:03:14,050 aproximação para o valor que 1/10 ele pode obter, com apenas 32 ou mais pedaços. 79 00:03:14,050 --> 00:03:15,300 E não é apenas 1/10. 80 00:03:15,300 --> 00:03:19,820 >> Por exemplo, se eu mudar isso para 1/3, o que nós pensamos que é ainda mais simples. 81 00:03:19,820 --> 00:03:21,300 Então 1 dividido por três. 82 00:03:21,300 --> 00:03:22,355 Deixe-me salvar o arquivo. 83 00:03:22,355 --> 00:03:24,680 Deixe-me ir em frente e recompilar-lo. 84 00:03:24,680 --> 00:03:25,820 E deixe-me re-executar-lo. 85 00:03:25,820 --> 00:03:30,000 Aqui também, aparentemente, 1/3 não é 0,3 e, em seguida, um número infinito de 3'S 86 00:03:30,000 --> 00:03:30,770 depois disso. 87 00:03:30,770 --> 00:03:32,540 Você tem essa imprecisão no final. 88 00:03:32,540 --> 00:03:35,544 Então, nós, seres humanos estão corretos e que você aprendeu é, de fato, correto, 89 00:03:35,544 --> 00:03:37,460 mas estamos esbarrando contra algumas limitações. 90 00:03:37,460 --> 00:03:39,420 >> E o que eu pensava faríamos hoje, é começar 91 00:03:39,420 --> 00:03:42,190 olhando, francamente, o trágicas consequências desta 92 00:03:42,190 --> 00:03:45,490 às vezes, quando a humanidade não chega a implementar 93 00:03:45,490 --> 00:03:48,460 para esta realidade e estas limitações. 94 00:03:48,460 --> 00:03:52,360 E nós vamos ver uma série de vinhetas do History Channel que leva 95 00:03:52,360 --> 00:03:53,950 Um olhar sobre como as coisas deram errado. 96 00:03:53,950 --> 00:03:56,340 É cerca de 8 minutos de duração, e vamos voltar depois de este 97 00:03:56,340 --> 00:03:59,439 e dar uma olhada em exatamente o que mais pode dar errado. 98 00:03:59,439 --> 00:04:00,605 Se pudéssemos diminuir a intensidade da lights-- 99 00:04:00,605 --> 00:04:02,350 >> [REPRODUÇÃO DE VÍDEO] 100 00:04:02,350 --> 00:04:06,310 >> -Computadores, Todos nós temos vindo a aceitar os problemas que muitas vezes frustrante 101 00:04:06,310 --> 00:04:07,750 ir com eles. 102 00:04:07,750 --> 00:04:11,370 Erros, vírus e software glitches são pequenos os preços 103 00:04:11,370 --> 00:04:13,230 a pagar para a conveniência. 104 00:04:13,230 --> 00:04:17,519 Mas, na alta tecnologia e de alta velocidade aplicações militares do programa espacial e, 105 00:04:17,519 --> 00:04:22,130 o menor problema pode ser ampliada em desastre. 106 00:04:22,130 --> 00:04:27,750 Em 04 de junho de 1996, os cientistas preparado para lançar um foguete não tripulado Ariane 5. 107 00:04:27,750 --> 00:04:29,890 Ele estava carregando científica satélites projetados 108 00:04:29,890 --> 00:04:33,030 para estabelecer com precisão a forma como o Interage campo magnético da Terra 109 00:04:33,030 --> 00:04:35,600 com ventos solares. 110 00:04:35,600 --> 00:04:37,930 O foguete foi construído para a Agência Espacial Europeia 111 00:04:37,930 --> 00:04:41,620 e decolou da sua instalação na costa da Guiana Francesa. 112 00:04:41,620 --> 00:04:44,924 >> -e Cerca de 30 segundos em o vôo, eles primeiro 113 00:04:44,924 --> 00:04:46,340 notado que algo estava acontecendo de errado. 114 00:04:46,340 --> 00:04:49,280 Que os bocais foram giratório de uma forma que realmente não deveria. 115 00:04:49,280 --> 00:04:53,042 Cerca de 40 segundos de vôo, claramente o veículo estava em apuros, 116 00:04:53,042 --> 00:04:55,250 e é aí que eles fizeram a decisão de destruí-lo. 117 00:04:55,250 --> 00:04:58,970 A Safety Officer Faixa com coragem tremendas apertou o botão, 118 00:04:58,970 --> 00:05:03,940 explodiu o foguete antes que ele pudesse tornar-se um perigo para a segurança pública. 119 00:05:03,940 --> 00:05:06,600 >> -Esta Foi a donzela viagem do Ariane 5, 120 00:05:06,600 --> 00:05:09,270 e sua destruição levou colocar devido a uma falha 121 00:05:09,270 --> 00:05:10,992 incorporado em software do foguete. 122 00:05:10,992 --> 00:05:12,700 -O Problema na Ariane era que há 123 00:05:12,700 --> 00:05:15,370 foi um número que necessário 64 bits para expressar, 124 00:05:15,370 --> 00:05:18,150 e ele queria converter para um número de 16 bits. 125 00:05:18,150 --> 00:05:21,160 Eles assumiram que o número nunca ia ser muito grande, 126 00:05:21,160 --> 00:05:25,020 que a maioria desses algarismos em o número de 64 bits eram de 0. 127 00:05:25,020 --> 00:05:26,310 Eles estavam errados. 128 00:05:26,310 --> 00:05:28,680 >> -O Incapacidade de um programa de software para aceitar 129 00:05:28,680 --> 00:05:32,820 o tipo de número gerado pela outra estava na origem da falha. 130 00:05:32,820 --> 00:05:37,190 Desenvolvimento de software tornou-se um parte muito cara de nova tecnologia. 131 00:05:37,190 --> 00:05:40,760 O Ariane 4 foguete tinha sido muito bem sucedido, tanto do software 132 00:05:40,760 --> 00:05:43,990 criado por isso também foi usado no Ariane 5. 133 00:05:43,990 --> 00:05:49,750 >> -O Problema básico era que o Ariane 5 foi mais rápido, mais rapidamente acelerada. 134 00:05:49,750 --> 00:05:53,000 E o software não tinha que representaram. 135 00:05:53,000 --> 00:05:56,330 >> -A Destruição do foguete foi um enorme desastre financeiro, 136 00:05:56,330 --> 00:05:59,670 tudo devido a um erro de software minuto. 137 00:05:59,670 --> 00:06:01,990 Mas este não foi o primeiro problemas de conversão de dados de tempos 138 00:06:01,990 --> 00:06:05,310 havia atormentado a tecnologia de foguetes moderna. 139 00:06:05,310 --> 00:06:08,300 >> -Em 1991, com o início da Primeira Guerra do Golfo, 140 00:06:08,300 --> 00:06:10,650 o míssil Patriot experimentaram um tipo semelhante 141 00:06:10,650 --> 00:06:12,650 do problema de conversão de número. 142 00:06:12,650 --> 00:06:15,620 Como resultado, 28 pessoas, 28 soldados norte-americanos 143 00:06:15,620 --> 00:06:18,440 foram mortas e cerca de 100 outras ficaram feridas, 144 00:06:18,440 --> 00:06:21,900 quando o Patriot, que deveria para proteger contra scuds recebidas, 145 00:06:21,900 --> 00:06:24,630 não conseguiu disparar um míssil. 146 00:06:24,630 --> 00:06:29,440 >> -Quando Iraque invadiu o Kuwait e América Desert Storm lançado no início de 1991, 147 00:06:29,440 --> 00:06:33,800 Baterias de mísseis Patriot foram implantados para proteger a Arábia Saudita e Israel 148 00:06:33,800 --> 00:06:37,000 de ataques de mísseis Scud iraquianos. 149 00:06:37,000 --> 00:06:40,610 O Patriot é um norte-americano, de médio alcance superfície-ar do sistema 150 00:06:40,610 --> 00:06:43,010 fabricado pela empresa Raytheon. 151 00:06:43,010 --> 00:06:49,080 >> -O Tamanho do interceptor Patriot, em si, é aproximadamente, cerca de 20 pés de comprimento. 152 00:06:49,080 --> 00:06:51,250 E pesa cerca de 2000 libras. 153 00:06:51,250 --> 00:06:55,195 E ele carrega uma ogiva de about-- Eu acho que é mais ou menos 150 libras. 154 00:06:55,195 --> 00:06:59,500 E a ogiva, em si, é um explosivo, 155 00:06:59,500 --> 00:07:02,570 que tem fragmentos em torno dele. 156 00:07:02,570 --> 00:07:06,890 O invólucro da ogiva é projetado para agir como chumbo grosso. 157 00:07:06,890 --> 00:07:09,130 >> -Os Mísseis são realizado, 4 por contêiner, 158 00:07:09,130 --> 00:07:12,080 e são transportados por um semi-reboque. 159 00:07:12,080 --> 00:07:19,100 >> -O Sistema de mísseis anti Patriot remonta pelo menos 20 anos. 160 00:07:19,100 --> 00:07:22,320 Ele foi originalmente projetado como um míssil de defesa aérea 161 00:07:22,320 --> 00:07:24,180 para abater aviões inimigos. 162 00:07:24,180 --> 00:07:27,860 Na Primeira Guerra do Golfo, quando essa guerra veio junto, 163 00:07:27,860 --> 00:07:32,745 o Exército queria usá-lo para abater scuds, não aviões. 164 00:07:32,745 --> 00:07:36,150 A Força iraquiano não foi tanto de um problema, 165 00:07:36,150 --> 00:07:39,110 mas o Exército estava preocupado sobre scuds. 166 00:07:39,110 --> 00:07:42,340 E assim eles tentaram atualizar o Patriot. 167 00:07:42,340 --> 00:07:44,760 >> -Intercepting Um inimigo míssil viajando a mach cinco 168 00:07:44,760 --> 00:07:47,250 ia ser bastante difícil. 169 00:07:47,250 --> 00:07:50,000 Mas quando o Patriot foi levado às pressas em serviço, 170 00:07:50,000 --> 00:07:54,030 o Exército não tinha conhecimento de um Modificação iraquiana que fez 171 00:07:54,030 --> 00:07:56,840 scuds seus quase impossível de bater. 172 00:07:56,840 --> 00:08:01,020 >> -O Que aconteceu, é que os scuds foram chegando, eram instáveis, 173 00:08:01,020 --> 00:08:02,310 eles estavam balançando. 174 00:08:02,310 --> 00:08:05,140 A razão para isto, era os iraquianos, a fim 175 00:08:05,140 --> 00:08:09,450 para obter 600 quilômetros fora da um míssil gama 300 quilômetros, 176 00:08:09,450 --> 00:08:12,930 levou para fora peso da ogiva frente e fez a ogiva mais leve. 177 00:08:12,930 --> 00:08:17,710 Então, agora, o Patriot está tentando vir no scud, e na maioria das vezes, 178 00:08:17,710 --> 00:08:21,700 a esmagadora maioria da tempo, seria apenas voar pelo scud. 179 00:08:21,700 --> 00:08:25,700 >> -Uma Vez os operadores do sistema Patriot percebeu que o Patriot errou seu alvo, 180 00:08:25,700 --> 00:08:29,790 que detonada ogiva do Patriot, para evitar possíveis acidentes se ele 181 00:08:29,790 --> 00:08:32,380 Deixou-se cair ao chão. 182 00:08:32,380 --> 00:08:36,340 >> -Isso Era o que a maioria das pessoas viu, aqueles grandes bolas de fogo no céu, 183 00:08:36,340 --> 00:08:41,289 e mal interpretado como intercepta de ogivas Scud. 184 00:08:41,289 --> 00:08:43,590 Embora durante a noite céus, Patriots apareceu 185 00:08:43,590 --> 00:08:47,020 para ser com sucesso destruindo scuds, em Dhahran, 186 00:08:47,020 --> 00:08:49,730 não poderia haver engano sobre o seu desempenho. 187 00:08:49,730 --> 00:08:53,990 Lá, sistema de radar do Patriot perdeu o controle de um Scud de entrada, 188 00:08:53,990 --> 00:08:56,650 e nunca lançado, devido a uma falha do software. 189 00:08:56,650 --> 00:08:59,650 190 00:08:59,650 --> 00:09:04,100 Foram os israelenses que descoberto pela primeira vez que quanto mais tempo o sistema foi ligado, 191 00:09:04,100 --> 00:09:07,510 quanto maior for o tempo de discrepância tornou-se, devido a um relógio incorporado 192 00:09:07,510 --> 00:09:09,490 no computador do sistema. 193 00:09:09,490 --> 00:09:12,670 >> -Cerca De duas semanas antes a tragédia em Dhahran, 194 00:09:12,670 --> 00:09:15,010 os israelenses relatado para o Departamento de Defesa, 195 00:09:15,010 --> 00:09:17,940 que o sistema estava perdendo tempo, que após cerca de 8 horas de funcionamento, 196 00:09:17,940 --> 00:09:21,410 eles notaram que o sistema foi tornando-se visivelmente menos precisas. 197 00:09:21,410 --> 00:09:25,290 O Departamento de Defesa respondeu contando todas as baterias Patriot 198 00:09:25,290 --> 00:09:28,070 para não deixar os sistemas por um longo período de tempo. 199 00:09:28,070 --> 00:09:29,960 Eles nunca disseram que há muito tempo era. 200 00:09:29,960 --> 00:09:30,460 8 horas? 201 00:09:30,460 --> 00:09:30,960 10 horas? 202 00:09:30,960 --> 00:09:31,870 1000 horas? 203 00:09:31,870 --> 00:09:33,734 Ninguém sabia. 204 00:09:33,734 --> 00:09:35,650 -A Bateria Patriot estacionados no quartel 205 00:09:35,650 --> 00:09:40,410 em Dhahran, e sua falha interna relógio, tinha sido em mais de 100 horas 206 00:09:40,410 --> 00:09:43,041 na noite de 25 de fevereiro. 207 00:09:43,041 --> 00:09:47,416 >> -É Rastreados tempo com uma precisão de cerca de 1/10 de um segundo. 208 00:09:47,416 --> 00:09:49,290 Agora 1/10 de um segundo é um número interessante 209 00:09:49,290 --> 00:09:52,700 porque não pode ser expresso em binário, exatamente. 210 00:09:52,700 --> 00:09:54,820 O que significa, não pode ser expresso, exatamente, 211 00:09:54,820 --> 00:09:57,420 em qualquer computador digital moderno. 212 00:09:57,420 --> 00:10:01,460 É difícil de acreditar, mas usar isso como um exemplo. 213 00:10:01,460 --> 00:10:03,520 Vamos dar o número, 1/3. 214 00:10:03,520 --> 00:10:07,110 1/3 não pode ser expressa em decimal, exatamente. 215 00:10:07,110 --> 00:10:11,490 1/3 é 0,333 acontecendo para o infinito. 216 00:10:11,490 --> 00:10:15,486 Não há nenhuma maneira de fazer isso, com precisão absoluta, em decimal. 217 00:10:15,486 --> 00:10:18,360 Isso é exatamente o mesmo tipo de problema que aconteceu no Patriot. 218 00:10:18,360 --> 00:10:22,510 Quanto mais tempo o sistema funcionou, o tornou-se pior o erro de tempo. 219 00:10:22,510 --> 00:10:28,420 >> -Depois De 100 horas de funcionamento, o erro no tempo foi apenas cerca de 1/3 de segundo. 220 00:10:28,420 --> 00:10:31,830 Mas em termos de segmentação um míssil viajando a Mach 5, 221 00:10:31,830 --> 00:10:35,890 isto resultou numa rastreamento erro de mais de 600 metros. 222 00:10:35,890 --> 00:10:38,970 Seria um erro fatal para os soldados em Dhahran. 223 00:10:38,970 --> 00:10:45,035 >> -O Que aconteceu, é um lançamento de Scud foi detectados por satélites de alerta precoce, 224 00:10:45,035 --> 00:10:48,930 e eles novo que o Scud foi vindo em sua direção geral. 225 00:10:48,930 --> 00:10:51,170 Eles não sabiam de onde vinha. 226 00:10:51,170 --> 00:10:53,990 >> -Foi Agora ao radar componente do sistema Patriot, 227 00:10:53,990 --> 00:10:58,520 defender Dhahran, para localizar e manter o controle do míssil inimigo de entrada. 228 00:10:58,520 --> 00:10:59,690 >> -O Radar era muito inteligente. 229 00:10:59,690 --> 00:11:01,710 Seria, na verdade, rastrear a posição do Scud 230 00:11:01,710 --> 00:11:04,040 e, em seguida, prever onde provavelmente seria, 231 00:11:04,040 --> 00:11:06,140 da próxima vez, o radar enviou um pulso para fora. 232 00:11:06,140 --> 00:11:07,660 Que foi chamado ao portão intervalo. 233 00:11:07,660 --> 00:11:11,870 >> -Então, Uma vez que o Patriot decide tem tempo suficiente 234 00:11:11,870 --> 00:11:16,280 passado para voltar e verificar o próximo localização para este objeto detectado, 235 00:11:16,280 --> 00:11:17,280 ele vai voltar. 236 00:11:17,280 --> 00:11:21,690 Assim, quando se voltou para o errado lugar, em seguida, vê nenhum objeto 237 00:11:21,690 --> 00:11:25,230 e decide que não houve objeto, que era uma falsa detecção, 238 00:11:25,230 --> 00:11:26,650 e deixa a pista. 239 00:11:26,650 --> 00:11:29,690 A entrada Scud desapareceu da tela do radar, 240 00:11:29,690 --> 00:11:32,670 e segundos depois, se chocou contra o quartel. 241 00:11:32,670 --> 00:11:38,100 O Scud matou 28 e foi a última uma demitido durante a Primeira Guerra do Golfo. 242 00:11:38,100 --> 00:11:43,460 Tragicamente, o software atualizado Dhahran chegou no dia seguinte. 243 00:11:43,460 --> 00:11:46,150 A falha de software teve sido fixado, de fechamento 244 00:11:46,150 --> 00:11:48,940 um capítulo na conturbada história do míssil Patriot. 245 00:11:48,940 --> 00:11:50,220 >> [FIM DE REPRODUÇÃO] 246 00:11:50,220 --> 00:11:54,340 >> DAVID MALAN J: Então vamos dar uma olhada algumas limitações semelhantes em apenas um pouco. 247 00:11:54,340 --> 00:11:58,470 Mas primeiro, vamos transição para alguns FYI é. 248 00:11:58,470 --> 00:12:01,575 Então um-- neste fim de semana, há será seções de super, 249 00:12:01,575 --> 00:12:04,200 que são destinadas a suplantar seções regulares, que 250 00:12:04,200 --> 00:12:05,460 será iniciado uma semana, portanto. 251 00:12:05,460 --> 00:12:08,204 Dê uma olhada no site do CS50 para mais informações sobre aqueles. 252 00:12:08,204 --> 00:12:11,120 Eles também será filmado e transmitido viver para aqueles que não puderem comparecer. 253 00:12:11,120 --> 00:12:12,980 Conjunto de problemas 1 é no o site do curso já, 254 00:12:12,980 --> 00:12:15,105 e vamos dar uma olhada que, em apenas um pouco. 255 00:12:15,105 --> 00:12:18,350 E o horário de expediente também, terá coloque esta segunda-feira a quinta-feira. 256 00:12:18,350 --> 00:12:20,960 >> Portanto, este foi o mais canônico programa nós olhamos última vez. 257 00:12:20,960 --> 00:12:23,590 É como o mais simples programa você pode escrever em C, 258 00:12:23,590 --> 00:12:25,250 e até mesmo que é um pouco de uma afirmação ousada. 259 00:12:25,250 --> 00:12:25,750 Certo? 260 00:12:25,750 --> 00:12:28,070 Porque há um monte de aparente complexidade para esta. 261 00:12:28,070 --> 00:12:30,445 Então, vamos dar uma olhada rápida no o que alguns destes elementos 262 00:12:30,445 --> 00:12:33,080 eram e, em seguida, tentar fornecer um modelo mental de como 263 00:12:33,080 --> 00:12:35,710 estes mais simples de programas trabalhar, e então nós vamos começar 264 00:12:35,710 --> 00:12:38,050 olhar para as coisas cada vez mais complexo. 265 00:12:38,050 --> 00:12:41,280 Então esta linha aqui, destaque agora, em amarelo, o que podemos dizer, da última vez, 266 00:12:41,280 --> 00:12:43,200 que este faz para nós? 267 00:12:43,200 --> 00:12:45,220 Qual é a finalidade a que serve? 268 00:12:45,220 --> 00:12:46,984 Qualquer pessoa de mais para trás? 269 00:12:46,984 --> 00:12:47,483 Sim. 270 00:12:47,483 --> 00:12:48,649 >> PARTICIPANTE: [inaudível] 271 00:12:48,649 --> 00:12:50,871 272 00:12:50,871 --> 00:12:51,704 DAVID MALAN J: Bom. 273 00:12:51,704 --> 00:12:53,537 Por isso, dá-lhe acesso a comandos, ou vamos 274 00:12:53,537 --> 00:12:56,750 chamá-los de funções, que alguém pessoa escreveu, que são declaradas, 275 00:12:56,750 --> 00:12:58,350 por assim dizer, em algum outro arquivo. 276 00:12:58,350 --> 00:13:02,370 Então, vamos ver exatamente o que um arquivo .h é contra um arquivo .c, eventualmente. 277 00:13:02,370 --> 00:13:04,710 Mas, por enquanto, só sei printf que, por exemplo, 278 00:13:04,710 --> 00:13:08,370 está entre as funções que foram declarada em algum outro arquivo, em algum lugar 279 00:13:08,370 --> 00:13:12,930 outra coisa no disco rígido da nuvem que nos permite acessar printf e usá-lo 280 00:13:12,930 --> 00:13:15,240 sem ter que reinventar que nós mesmos roda. 281 00:13:15,240 --> 00:13:16,930 Enquanto isso, a principal. 282 00:13:16,930 --> 00:13:19,690 Qual foi o análogo do principal, na semana passada? 283 00:13:19,690 --> 00:13:20,190 Sim. 284 00:13:20,190 --> 00:13:21,460 >> PARTICIPANTE: Bandeira verde é clicado. 285 00:13:21,460 --> 00:13:21,740 >> DAVID MALAN J: Sim. 286 00:13:21,740 --> 00:13:23,490 Scratch, quando bandeira verde clicado. 287 00:13:23,490 --> 00:13:25,560 É como a peça do puzzle que chuta as coisas fora. 288 00:13:25,560 --> 00:13:28,306 E assim, de forma semelhante, fez o mundo decidiu há alguns anos que em C, 289 00:13:28,306 --> 00:13:30,930 e um monte de outras línguas, se você quiser escrever um programa, 290 00:13:30,930 --> 00:13:33,410 sua primeira função tem de ser chamado, principal. 291 00:13:33,410 --> 00:13:34,641 E tem que olhar como este. 292 00:13:34,641 --> 00:13:36,640 Mas vamos voltar, outra vez, para o que, int, 293 00:13:36,640 --> 00:13:38,690 e, vazio, significa neste contexto. 294 00:13:38,690 --> 00:13:42,860 Por enquanto, as chaves são tipo de como a forma da parte do enigma do zero 295 00:13:42,860 --> 00:13:45,080 que encapsula um determinado número de linhas. 296 00:13:45,080 --> 00:13:47,070 E entre as linhas aqui, é este aqui. 297 00:13:47,070 --> 00:13:51,610 printf é uma função cujo propósito na a vida é para imprimir uma seqüência de caracteres formatada. 298 00:13:51,610 --> 00:13:55,010 E por formatada, quero dizer que você pode ligar o espaço reservado valores, 299 00:13:55,010 --> 00:13:58,360 e você pode especificar quantos decimal pontos, quantos números para imprimir 300 00:13:58,360 --> 00:14:00,040 depois de um ponto decimal e similares. 301 00:14:00,040 --> 00:14:05,040 E printf, é claro, uma toma ou mais argumentos ou parâmetros, 302 00:14:05,040 --> 00:14:06,770 de outro modo conhecido, mais simplesmente, como entradas. 303 00:14:06,770 --> 00:14:09,230 >> Então printf, como um monte de funções, leva entradas. 304 00:14:09,230 --> 00:14:12,730 E essas entradas são abraçados por os dois parêntesis aqui. 305 00:14:12,730 --> 00:14:15,180 E dentro dessas é uma entrada. 306 00:14:15,180 --> 00:14:18,600 É uma cadeia, como já o chamou, que é apenas uma seqüência de caracteres, 307 00:14:18,600 --> 00:14:22,310 como uma palavra ou uma frase, ou um todo ensaio mesmo, entre aspas duplas. 308 00:14:22,310 --> 00:14:25,712 E isso é o que vai influenciar o comportamento de printf porque, obviamente, 309 00:14:25,712 --> 00:14:27,170 é apenas uma função de impressão genérico. 310 00:14:27,170 --> 00:14:29,600 Ele não vai saber o que para imprimir, a menos que você diga a ele. 311 00:14:29,600 --> 00:14:31,000 E, em seguida, algumas minúcias. 312 00:14:31,000 --> 00:14:34,056 O que nós dizemos isto estranho seqüência de símbolos é? 313 00:14:34,056 --> 00:14:34,556 Sim. 314 00:14:34,556 --> 00:14:35,410 >> PARTICIPANTE: Nova linha. 315 00:14:35,410 --> 00:14:35,990 >> DAVID MALAN J: Nova linha. 316 00:14:35,990 --> 00:14:39,340 Assim, verifica-se, você não pode simplesmente bater, entrar, quando você está escrevendo o programa. 317 00:14:39,340 --> 00:14:42,590 Geralmente, o compilador vai ficar um pouco confuso quanto ao que você quer dizer. 318 00:14:42,590 --> 00:14:45,340 Em vez disso, você tem que, literalmente, dizer, dá-me uma nova linha aqui. 319 00:14:45,340 --> 00:14:49,506 E assim / n é o que geralmente chamar um caractere de escape. 320 00:14:49,506 --> 00:14:50,870 Então n, para a nova linha. 321 00:14:50,870 --> 00:14:53,810 E o compilador sabe que, quando se vê / n, 322 00:14:53,810 --> 00:14:57,420 deve, na verdade, induzir o computador, em última análise, ou printf, neste caso, 323 00:14:57,420 --> 00:15:00,260 para imprimir um novo real linha, como bater a, entrar, 324 00:15:00,260 --> 00:15:01,480 tecla no teclado. 325 00:15:01,480 --> 00:15:05,620 E, por último, o que fez dizemos este pedaço de sintaxe é para? 326 00:15:05,620 --> 00:15:06,591 O que isso representa? 327 00:15:06,591 --> 00:15:07,090 Sim. 328 00:15:07,090 --> 00:15:07,490 >> PARTICIPANTE: [inaudível] 329 00:15:07,490 --> 00:15:08,660 >> DAVID MALAN J: É apenas o fim da linha. 330 00:15:08,660 --> 00:15:09,909 É o fim da instrução. 331 00:15:09,909 --> 00:15:11,890 E perceber que nós não colocá-los em todos os lugares. 332 00:15:11,890 --> 00:15:13,900 Nós certamente não colocá-los com os lados de cada linha. 333 00:15:13,900 --> 00:15:16,680 Por exemplo, não há nenhum na primeira linha, não há nada na linha 334 00:15:16,680 --> 00:15:18,680 com, principal, não há nenhum após as chaves, 335 00:15:18,680 --> 00:15:21,740 mas você vai começar a ver e obter familiarizado com o local onde ele é chamado para. 336 00:15:21,740 --> 00:15:26,014 E é quase sempre depois de uma função ligue ou uma declaração, alguma ação 337 00:15:26,014 --> 00:15:27,180 que você realmente está tomando. 338 00:15:27,180 --> 00:15:29,520 >> E sei agora, especialmente se entre aqueles menos confortável, 339 00:15:29,520 --> 00:15:32,540 estes são os tipos de coisas estúpidas que você vai acabar batendo acidentalmente 340 00:15:32,540 --> 00:15:33,873 sua cabeça contra a parede mais. 341 00:15:33,873 --> 00:15:36,107 Porque você vai ser logicamente confiante em algum problema 342 00:15:36,107 --> 00:15:38,440 você resolveu para um problema set, ea maldita coisa apenas 343 00:15:38,440 --> 00:15:40,187 não irá compilar ou até mesmo executar. 344 00:15:40,187 --> 00:15:43,270 E assim, muitas vezes, no início, ele vai ser porque você perdeu um parêntese, 345 00:15:43,270 --> 00:15:44,455 ou você perdeu um ponto e vírgula. 346 00:15:44,455 --> 00:15:46,547 E então apenas estar atento desses tipos de coisas, 347 00:15:46,547 --> 00:15:49,380 e tente não ficar frustrado por eles, porque muito rapidamente faz isso 348 00:15:49,380 --> 00:15:50,640 tornar-se velho chapéu. 349 00:15:50,640 --> 00:15:53,910 Mas é muito fácil chegar frustrado no início, como resultado. 350 00:15:53,910 --> 00:15:57,020 >> Então, agora, vamos dar uma olhada em como esta linha está realmente trabalhando 351 00:15:57,020 --> 00:15:59,170 e depois olhar para um pouco uma mais complicada. 352 00:15:59,170 --> 00:16:02,017 Portanto, temos aqui, o habilidade para desenhar na tela. 353 00:16:02,017 --> 00:16:04,100 E vamos supor que esta é minha tela de computador, 354 00:16:04,100 --> 00:16:08,589 mas eu estou escrevendo o programa Olá,, e eu não ter implementado, printf. 355 00:16:08,589 --> 00:16:10,130 Alguém mais tem implementado, printf. 356 00:16:10,130 --> 00:16:12,420 Quem gostaria de reivindicar Implementamos, printf? 357 00:16:12,420 --> 00:16:12,920 Se nós podemos? 358 00:16:12,920 --> 00:16:13,830 Tudo bem, qual é o seu nome? 359 00:16:13,830 --> 00:16:14,155 >> ESTUDANTE 1: [? Copal. ?] 360 00:16:14,155 --> 00:16:15,529 >> DAVID MALAN J: Copal, vamos lá para cima. 361 00:16:15,529 --> 00:16:16,430 Vamos lá para cima. 362 00:16:16,430 --> 00:16:17,070 Tudo certo. 363 00:16:17,070 --> 00:16:22,260 Portanto, temos, aqui, algumas etiquetas de nome, uma vez que nós vamos fazer um pequeno jogo deste. 364 00:16:22,260 --> 00:16:26,270 E vamos chamá-lo, printf. 365 00:16:26,270 --> 00:16:30,170 E se você quiser vir aqui, o que eu acabei desenhado na tela, 366 00:16:30,170 --> 00:16:32,340 é pura e simplesmente, não sou eu, isso. 367 00:16:32,340 --> 00:16:35,550 >> Tudo bem, então, Olá meu nome é, printf, se você gostaria de colocar isso diante. 368 00:16:35,550 --> 00:16:35,740 Tudo certo. 369 00:16:35,740 --> 00:16:37,360 E se você pode ir estande pela tela do computador 370 00:16:37,360 --> 00:16:39,730 como se você é a função que veio com este sistema de computador. 371 00:16:39,730 --> 00:16:42,063 E o seu propósito na vida é para realmente imprimir algo. 372 00:16:42,063 --> 00:16:44,560 Mas muito parecido com o programa, só tinha na tela, aqui, 373 00:16:44,560 --> 00:16:47,060 nós vamos ter que realmente dar-lhe alguma entrada. 374 00:16:47,060 --> 00:16:51,810 >> E assim, se a minha entrada, aqui, é Aparentemente, o que é passado para printf, 375 00:16:51,810 --> 00:16:53,730 vamos tipo de zombar-lo como este. 376 00:16:53,730 --> 00:16:58,720 Eu vou escrever literalmente em um pedaço de papel, "Olá, mundo" 377 00:16:58,720 --> 00:17:03,020 barra invertida N. E para ficar claro, o que Acabei desenhada sobre este pedaço de papel, 378 00:17:03,020 --> 00:17:04,020 se parece com isso. 379 00:17:04,020 --> 00:17:08,730 Então, quando eu executar este programa, e este linha amarela do código é executado, 380 00:17:08,730 --> 00:17:12,970 é como se eu, o programa Olá, estou entregando alguma entrada fora para uma função 381 00:17:12,970 --> 00:17:13,970 que outra pessoa escreveu. 382 00:17:13,970 --> 00:17:16,595 >> E se você, com o dedo, poderia, na verdade, com o dedo, 383 00:17:16,595 --> 00:17:21,520 desenhar na tela o que quer é você ter sido entregue, 384 00:17:21,520 --> 00:17:27,465 o efeito, em última análise, é a ver exatamente o que, na tela. 385 00:17:27,465 --> 00:17:29,140 E um caso de canto pequeno aqui. 386 00:17:29,140 --> 00:17:31,540 E bom, não devemos ver o, nova linha, neste ponto. 387 00:17:31,540 --> 00:17:33,900 Seria incorreto para você desenhar explicitamente a nova linha. 388 00:17:33,900 --> 00:17:36,810 Mas, se continuasse a escrever palavras na tela, eles acabam abaixo disso. 389 00:17:36,810 --> 00:17:39,560 >> Então, muito obrigado, mas vara por aqui por apenas um momento. 390 00:17:39,560 --> 00:17:42,860 Precisamos agora de um outro voluntário, se pudéssemos, 391 00:17:42,860 --> 00:17:46,830 que vai precisar para desempenhar o papel de-- É só as pessoas na orquestra 392 00:17:46,830 --> 00:17:47,355 agora. 393 00:17:47,355 --> 00:17:47,980 Como about-- OK. 394 00:17:47,980 --> 00:17:48,480 Aqui mesmo. 395 00:17:48,480 --> 00:17:49,180 Vamos lá para cima. 396 00:17:49,180 --> 00:17:49,955 Qual o seu nome? 397 00:17:49,955 --> 00:17:50,922 >> ESTUDANTE 2: [? Ivay. ?] 398 00:17:50,922 --> 00:17:51,796 DAVID MALAN J: Desculpe? 399 00:17:51,796 --> 00:17:52,990 ESTUDANTE 2: [? Ivay. ?] 400 00:17:52,990 --> 00:17:55,320 DAVID MALAN J: Ethan, vamos lá para cima. 401 00:17:55,320 --> 00:17:55,820 Não? 402 00:17:55,820 --> 00:17:58,390 Eu obtive essa errado, mesmo depois que você disse isso duas vezes? 403 00:17:58,390 --> 00:17:58,890 Vamos lá para cima. 404 00:17:58,890 --> 00:18:00,030 É difícil ouvir-se aqui. 405 00:18:00,030 --> 00:18:05,240 406 00:18:05,240 --> 00:18:05,740 ESTÁ BEM. 407 00:18:05,740 --> 00:18:07,190 E eu sinto muito, qual é o seu nome? 408 00:18:07,190 --> 00:18:07,680 >> ESTUDANTE 2: [? Ivay. ?] 409 00:18:07,680 --> 00:18:08,790 >> [? DAVID MALAN J: Ivay. ?] ESTÁ BEM. 410 00:18:08,790 --> 00:18:10,430 Por agora, se você não mente, você está GetString. 411 00:18:10,430 --> 00:18:11,013 >> ESTUDANTE 2: OK. 412 00:18:11,013 --> 00:18:11,797 Legal. 413 00:18:11,797 --> 00:18:14,630 DAVID MALAN J: Então, se você gostaria ficar aqui por apenas um momento, 414 00:18:14,630 --> 00:18:17,100 vamos dar uma olhada em um pouco programa mais complexo, que 415 00:18:17,100 --> 00:18:18,670 agora tem três linhas de código. 416 00:18:18,670 --> 00:18:24,080 Portanto, temos, um, indicar o seu nome usando printf; duas, uma chamada para GetString, 417 00:18:24,080 --> 00:18:28,060 seguido por uma atribuição a uma variável chamada, corda s, ou chamado s; 418 00:18:28,060 --> 00:18:31,260 e, em seguida, outra chamada para, printf, mas desta vez com duas entradas. 419 00:18:31,260 --> 00:18:33,646 >> Então, estado que já fizemos seu nome, ou melhor, nós temos 420 00:18:33,646 --> 00:18:34,770 já feito uma chamada printf. 421 00:18:34,770 --> 00:18:38,960 Então eu vou escrever, Diga seu nome. 422 00:18:38,960 --> 00:18:42,089 E assim, o que eu vou passar, printf, em apenas um momento, 423 00:18:42,089 --> 00:18:43,005 é pura e simplesmente, este. 424 00:18:43,005 --> 00:18:47,760 Então, se você quiser ir em frente e desenhar esse na tela, essa é a sua entrada agora. 425 00:18:47,760 --> 00:18:48,260 Tudo certo. 426 00:18:48,260 --> 00:18:51,160 E esquecer seqüência, temos agora nossa própria linha de código aqui. 427 00:18:51,160 --> 00:18:54,470 Assim, em, GetString, precisamos para realmente chamar, GetString. 428 00:18:54,470 --> 00:18:57,920 Portanto, o seu propósito na vida é apenas andar fora na orquestra, se pudesse, 429 00:18:57,920 --> 00:18:58,980 e obter o nome de alguém. 430 00:18:58,980 --> 00:19:00,860 Mas vamos dar-lhe alguma coisa para colocá-lo. 431 00:19:00,860 --> 00:19:02,908 Se você quiser, vá em frente e obter uma string, 432 00:19:02,908 --> 00:19:05,241 obter o nome de alguém em que pedaço de papel, se pudesse. 433 00:19:05,241 --> 00:19:12,940 434 00:19:12,940 --> 00:19:13,530 >> Tudo certo. 435 00:19:13,530 --> 00:19:15,250 E vamos ver, em apenas um momento, cujo nome estamos recebendo. 436 00:19:15,250 --> 00:19:17,630 Enquanto isso, o que eu vou ter pronto, é uma peça em branco 437 00:19:17,630 --> 00:19:21,340 de papel, no qual, eu vou para armazenar o valor que ele 438 00:19:21,340 --> 00:19:25,752 é que GetString está voltando para mim, Eu, sendo uma variável de cadeia chamado, s. 439 00:19:25,752 --> 00:19:26,252 Tudo certo. 440 00:19:26,252 --> 00:19:27,293 Então o que você tem aqui? 441 00:19:27,293 --> 00:19:27,950 Nik. 442 00:19:27,950 --> 00:19:28,450 Tudo certo. 443 00:19:28,450 --> 00:19:30,910 Então nós temos o nome de Nik aqui. 444 00:19:30,910 --> 00:19:33,750 Então é isso que literalmente foi devolvido 445 00:19:33,750 --> 00:19:35,810 para mim, por assim dizer, por GetString. 446 00:19:35,810 --> 00:19:38,720 >> Eu, agora, vou executar o lado esquerdo 447 00:19:38,720 --> 00:19:43,440 de que a expressão, onde simplesmente copiar para baixo, para fins de hoje, Nik. 448 00:19:43,440 --> 00:19:46,470 Então, agora, eu tenho uma variável chamado, s, armazenando o nome de Nik. 449 00:19:46,470 --> 00:19:49,520 Eu já entregue a printf, um argumento anterior. 450 00:19:49,520 --> 00:19:52,800 Mas em nossa terceira e última linha de código, eu realmente tenho que printf mão 451 00:19:52,800 --> 00:19:58,500 algo um pouco diferente-- "Olá,% s," barra invertida n. 452 00:19:58,500 --> 00:20:01,510 >> E assim a última linha eu vou para send-- a última coisa que eu sou 453 00:20:01,510 --> 00:20:03,060 vai escrever para baixo agora, é esta. 454 00:20:03,060 --> 00:20:06,310 Assim, as duas linhas de código, ou em vez da última linha de código, 455 00:20:06,310 --> 00:20:10,690 chamadas para dois Insumos um, este, e dois, presente. 456 00:20:10,690 --> 00:20:13,330 Então, se a nossa função printf agora pode tomá-los como entrada, 457 00:20:13,330 --> 00:20:16,000 deixe-me limpar a tela para você. 458 00:20:16,000 --> 00:20:17,250 Na verdade não, você pode ir em frente. 459 00:20:17,250 --> 00:20:19,333 Vamos deixá-lo, uma vez que é no mesmo programa. 460 00:20:19,333 --> 00:20:21,760 461 00:20:21,760 --> 00:20:27,380 Devemos ver, Olá, Nik. 462 00:20:27,380 --> 00:20:27,880 Tudo certo. 463 00:20:27,880 --> 00:20:29,670 Portanto, este foi muito poucos aros para saltar através, apenas 464 00:20:29,670 --> 00:20:31,620 para escrever, indicar o seu nome, e, Olá, Nik. 465 00:20:31,620 --> 00:20:37,210 Mas esta simples ideia de passagem de mensagens, da passagem de entrada e saída de recepção, 466 00:20:37,210 --> 00:20:40,430 é exatamente o modelo que nós vamos ter até mesmo para as funções mais complexas. 467 00:20:40,430 --> 00:20:41,804 Então, muito obrigado a vocês dois. 468 00:20:41,804 --> 00:20:43,730 Temos um lindo estresse bola aqui para você. 469 00:20:43,730 --> 00:20:48,890 E obrigado ao nosso GetString e voluntários printf igualmente. 470 00:20:48,890 --> 00:20:49,551 Obrigado. 471 00:20:49,551 --> 00:20:50,050 Tudo certo. 472 00:20:50,050 --> 00:20:50,966 Obrigado a vocês dois. 473 00:20:50,966 --> 00:20:56,640 474 00:20:56,640 --> 00:21:00,430 >> Então, nós temos falado sobre até agora, principalmente sobre strings. 475 00:21:00,430 --> 00:21:06,550 E verifica-se que C pode realmente entender alguns tipos de dados diferentes. 476 00:21:06,550 --> 00:21:08,860 Na verdade, vamos dar um olhar para estes aqui. 477 00:21:08,860 --> 00:21:12,490 Então C, e um monte de línguas, entender as coisas chamados caracteres. 478 00:21:12,490 --> 00:21:16,852 Um char é geralmente um byte único, ou oito bits. 479 00:21:16,852 --> 00:21:19,810 E representa um único caractere, como a letra A, ou a capital 480 00:21:19,810 --> 00:21:21,990 letra A, ou a letra minúscula A, ou um ponto de exclamação, 481 00:21:21,990 --> 00:21:25,440 ou qualquer caractere que você pode digitar em seu teclado, e às vezes até mais. 482 00:21:25,440 --> 00:21:26,795 Nós também acontecerá a ver carros alegóricos. 483 00:21:26,795 --> 00:21:31,160 Um flutuador é, geralmente, uma 32-bit valor, ou quatro bytes 484 00:21:31,160 --> 00:21:33,660 porque mais uma vez, um byte tem oito bits. 485 00:21:33,660 --> 00:21:36,675 >> Assim, um flutuador é um valor de ponto flutuante, algo com um ponto decimal. 486 00:21:36,675 --> 00:21:38,550 E, de fato, é o que o filme estava falando 487 00:21:38,550 --> 00:21:42,240 sobre quando eles falaram sobre flutuante valores de ponto, um número fixo de bits 488 00:21:42,240 --> 00:21:43,940 sendo utilizada para representar um número real. 489 00:21:43,940 --> 00:21:45,740 Mas há também coisas chamadas duplos. 490 00:21:45,740 --> 00:21:47,860 Estes existem em Java, se você tomou APCS, 491 00:21:47,860 --> 00:21:51,540 e um duplo, como o nome felizmente sugere, é duas vezes tão grande como um float. 492 00:21:51,540 --> 00:21:54,540 Ainda é um número real, ele só tem mais bits 493 00:21:54,540 --> 00:21:58,390 com o qual a ser cada vez mais precisa, ou para armazenar um número ainda maior. 494 00:21:58,390 --> 00:21:58,890 int é fácil. 495 00:21:58,890 --> 00:22:00,181 Nós conversamos sobre isso da última vez. 496 00:22:00,181 --> 00:22:01,160 É apenas um número inteiro. 497 00:22:01,160 --> 00:22:03,980 E é geralmente 32 de bits, ou quatro bytes. 498 00:22:03,980 --> 00:22:07,850 >> E assim, se você tem, vamos ver agora, 32 bits-- e fizemos isso na semana 0, 499 00:22:07,850 --> 00:22:10,820 sempre tão briefly-- se você tiver 32 bits, o que é o maior 500 00:22:10,820 --> 00:22:13,580 número pode representar como um número inteiro? 501 00:22:13,580 --> 00:22:16,080 Dar ou pegar? 502 00:22:16,080 --> 00:22:18,380 É como 4 bilhões, e isso é só se estivermos 503 00:22:18,380 --> 00:22:20,690 representando apenas números positivos. 504 00:22:20,690 --> 00:22:23,930 Se você tem 32 bits, e você quer representar números negativos, bem como, 505 00:22:23,930 --> 00:22:27,100 seu alcance é, essencialmente, negativo 2 bilhões para positivo 2 bilhões. 506 00:22:27,100 --> 00:22:29,250 Mas, geralmente, vamos começar a 0 ir até 4 bilhões. 507 00:22:29,250 --> 00:22:32,400 >> Você não tem que saber com precisão, mas podemos ver isso, na verdade, se eu apenas 508 00:22:32,400 --> 00:22:36,400 abrir um pouco calculadora, aqui. 509 00:22:36,400 --> 00:22:41,070 Eu posso fazer 2 a 32, e isso é exatamente o quão grande, 510 00:22:41,070 --> 00:22:43,190 quantos valores você pode representar, com 32 bits. 511 00:22:43,190 --> 00:22:44,442 E é mais ou menos 4 bilhões. 512 00:22:44,442 --> 00:22:46,900 Então, vamos continuar vendo esse número em alguns lugares diferentes. 513 00:22:46,900 --> 00:22:48,890 Mas se você precisar de mais tempo números do que isso, 514 00:22:48,890 --> 00:22:51,670 Acontece que há de algo chamado um longo tempo. 515 00:22:51,670 --> 00:22:54,005 E um longo tempo é geralmente 64 bits, os quais 516 00:22:54,005 --> 00:22:56,380 significa que é uma ordem de magnitude ainda maior do que um int. 517 00:22:56,380 --> 00:22:59,510 >> Então, eu não posso nem pronunciar o maior número que pode representar, 518 00:22:59,510 --> 00:23:01,340 mas é marcadamente maior. 519 00:23:01,340 --> 00:23:05,190 Agora, como um aparte, historicamente, se um int é de 32 bits, 520 00:23:05,190 --> 00:23:12,780 e um longo, longo é de 64 bits, como grande é um longo, não um longo, longo? 521 00:23:12,780 --> 00:23:16,500 522 00:23:16,500 --> 00:23:20,330 Você pensaria que ele é mais do que um int mas talvez menos longo do que um longo, longo, 523 00:23:20,330 --> 00:23:21,400 mas, na verdade, depende. 524 00:23:21,400 --> 00:23:23,400 >> E assim acontece que um das frustrações também, 525 00:23:23,400 --> 00:23:26,830 com a escrita de código em determinados sistemas, é que nem todos estes tipos de dados 526 00:23:26,830 --> 00:23:28,440 têm valores pré-determinados. 527 00:23:28,440 --> 00:23:29,771 Às vezes é isso muitos pedaços. 528 00:23:29,771 --> 00:23:31,020 Às vezes, é que muitos bits. 529 00:23:31,020 --> 00:23:32,750 Então, você realmente tem que saber, às vezes, o hardware 530 00:23:32,750 --> 00:23:34,083 você está executando o seu software on. 531 00:23:34,083 --> 00:23:36,960 Felizmente, outras línguas e outros tipos de dados que já existem, 532 00:23:36,960 --> 00:23:38,400 permitem que você seja mais preciso. 533 00:23:38,400 --> 00:23:41,220 Bem, nós vimos corda, e vimos bool, também, 534 00:23:41,220 --> 00:23:43,960 mas acontece que aqueles vir apenas com a biblioteca de CS50. 535 00:23:43,960 --> 00:23:46,240 Portanto, aqueles não são construídas C. Aqueles em vez disso, 536 00:23:46,240 --> 00:23:49,340 vêm em que arquivo chamado CS50.h, que vamos finalmente 537 00:23:49,340 --> 00:23:51,831 descascar as camadas de. 538 00:23:51,831 --> 00:23:53,830 Mas, por enquanto, são apenas tipos de dados adicionais. 539 00:23:53,830 --> 00:23:57,060 Um bool é um verdadeiro ou falso, e uma string é uma sequência de caracteres, 540 00:23:57,060 --> 00:23:57,970 como uma palavra. 541 00:23:57,970 --> 00:24:01,690 Agora printf, que já vimos, tem espaços reservados,% s é um deles. 542 00:24:01,690 --> 00:24:05,430 E você pode ser capaz, agora, inferir a partir destes exemplos, como outros 543 00:24:05,430 --> 00:24:07,720 você poderia ter um espaço reservado para diferentes tipos de dados. 544 00:24:07,720 --> 00:24:11,150 Por exemplo, dar um palpite, se você queria imprimir um único caractere usando 545 00:24:11,150 --> 00:24:15,270 printf, o espaço reservado é provavelmente% c. 546 00:24:15,270 --> 00:24:19,650 E se você quiser imprimir um integer com o espaço reservado,% i. 547 00:24:19,650 --> 00:24:25,150 % lld é um valor decimal longo, longo, mas long long, de modo que mapeia para isso. 548 00:24:25,150 --> 00:24:28,640 E, em seguida,% f para flutuante valor de ponto ou para um casal, 549 00:24:28,640 --> 00:24:31,270 por isso às vezes eles são reutilizados em diferentes contextos. 550 00:24:31,270 --> 00:24:33,350 Então, vamos ver e usar alguns dos que ao longo do tempo. 551 00:24:33,350 --> 00:24:36,420 E printf e outras funções também seqüências de escape de apoio dos outros, 552 00:24:36,420 --> 00:24:38,080 e, por vezes, estes são necessários. 553 00:24:38,080 --> 00:24:39,770 Assim barra invertida n é uma nova linha. 554 00:24:39,770 --> 00:24:42,886 Barra invertida t, qualquer um quer tomar uma facada? 555 00:24:42,886 --> 00:24:43,760 PARTICIPANTE: Tab. 556 00:24:43,760 --> 00:24:44,551 DAVID MALAN J: Tab. 557 00:24:44,551 --> 00:24:46,810 Então, se você realmente quer para imprimir um guia, não 558 00:24:46,810 --> 00:24:49,940 um número fixo de espaços, mas um real caractere de tabulação, você não acertar o seu, 559 00:24:49,940 --> 00:24:53,490 guia, tecla no teclado, geralmente, você realmente faz barra invertida t. 560 00:24:53,490 --> 00:24:57,750 Citação dupla barra invertida, Por que eu iria querer isso? 561 00:24:57,750 --> 00:24:58,250 Certo? 562 00:24:58,250 --> 00:25:00,417 Por que não posso eu apenas digite um aspas duplas no meu teclado? 563 00:25:00,417 --> 00:25:02,124 PARTICIPANTE: Porque, caso contrário, é 564 00:25:02,124 --> 00:25:04,830 vai pensar que é o fim do gosto de sua impressão [? texto. ?] 565 00:25:04,830 --> 00:25:05,420 >> DAVID MALAN J: Exatamente. 566 00:25:05,420 --> 00:25:07,211 Lembre-se, com a nossa exemplos printf, quando 567 00:25:07,211 --> 00:25:10,075 estavam passando para printf na entrada, no lado esquerdo da cadeia de entrada que 568 00:25:10,075 --> 00:25:12,950 e sobre o direito de que a entrada mola, é claro, foi uma citação de casal. 569 00:25:12,950 --> 00:25:16,270 Se a sua própria entrada tem um duplo Citação no meio do que, 570 00:25:16,270 --> 00:25:18,920 o computador pode potencialmente se confundem, como a, 571 00:25:18,920 --> 00:25:20,760 faz isso aspas duplas pertence no meio? 572 00:25:20,760 --> 00:25:22,150 Pertence com o esquerdo? 573 00:25:22,150 --> 00:25:23,566 Pertence com o caminho certo? 574 00:25:23,566 --> 00:25:26,780 E assim, se você quiser torná-lo super claro, você faz barra invertida aspas duplas, 575 00:25:26,780 --> 00:25:30,480 de modo que ele escapou, por assim dizer, e não é confundida por algo mais. 576 00:25:30,480 --> 00:25:34,400 E há alguns outros aqui, r barra invertida, aspas simples, 0, 577 00:25:34,400 --> 00:25:36,510 para que possamos ver ao longo do tempo, também. 578 00:25:36,510 --> 00:25:37,760 E agora, o que acontece com funções? 579 00:25:37,760 --> 00:25:41,630 >> Assim, as ações que podemos tomar, até agora, nesta língua, C, bem, nós vimos, 580 00:25:41,630 --> 00:25:44,320 printf, é claro, e todos dos outros na tela, 581 00:25:44,320 --> 00:25:47,140 aqui, que vamos usar para o do curso primeiras semanas apenas, 582 00:25:47,140 --> 00:25:48,485 vir quando a biblioteca CS50. 583 00:25:48,485 --> 00:25:51,850 E eles fazem isso muito mais fácil, em C, para realmente obter a entrada do usuário. 584 00:25:51,850 --> 00:25:54,200 Acontece que em C, e francamente em algumas línguas, 585 00:25:54,200 --> 00:25:57,450 é uma dor real no pescoço para fazer algo simples, como alerta o usuário 586 00:25:57,450 --> 00:26:01,310 para o teclado, para a sua entrada. 587 00:26:01,310 --> 00:26:03,240 E assim essas funções torná-lo mais fácil. 588 00:26:03,240 --> 00:26:05,472 >> E também tem erro verificando todo, 589 00:26:05,472 --> 00:26:07,180 de modo que, quando recordar na quarta-feira, nós 590 00:26:07,180 --> 00:26:09,740 viu a, tente novamente, aviso, quando eu não cooperar, 591 00:26:09,740 --> 00:26:11,700 e eu digitei a palavra, em vez de um número? 592 00:26:11,700 --> 00:26:15,402 Nós fizemos o trabalho pesado início para certificar-se de que o usuário coopera. 593 00:26:15,402 --> 00:26:17,860 Mas estes são apenas treinamento rodas que vamos eventualmente, 594 00:26:17,860 --> 00:26:19,640 e rapidamente, decolar. 595 00:26:19,640 --> 00:26:22,630 >> Então, para recapitular, então, vamos dar uma olhada rápida, 596 00:26:22,630 --> 00:26:26,620 muito como fizemos com o Scratch, em algumas construções canônicas em C. 597 00:26:26,620 --> 00:26:28,580 Este destina-se a, tipo de, ser um rápido tour, 598 00:26:28,580 --> 00:26:30,990 apenas para que você tenha uma referência e que você já viu as coisas em primeiro lugar. 599 00:26:30,990 --> 00:26:34,100 Mas, em seguida, vamos olhar para codificação real usar alguns destes blocos de construção. 600 00:26:34,100 --> 00:26:36,710 Tanto como no Scratch, quando tínhamos declarações gosta, 601 00:26:36,710 --> 00:26:41,570 dizer ou, espera, em C, nós temos funções, bem, como printf. 602 00:26:41,570 --> 00:26:45,350 >> Se queremos expressar uma condição em C, é semelhante, em espírito, 603 00:26:45,350 --> 00:26:47,840 para que parte do enigma que olhou como este no Scratch. 604 00:26:47,840 --> 00:26:49,850 Mas em vez disso, literalmente apenas escrever, se. 605 00:26:49,850 --> 00:26:51,830 E, em seguida, entre parênteses, nós colocamos uma condição, 606 00:26:51,830 --> 00:26:54,807 quando essa condição é o que nós vamos chamar, mais uma vez, uma expressão booleana. 607 00:26:54,807 --> 00:26:56,390 E mais uma vez, esta é uma espécie de pseudo-código. 608 00:26:56,390 --> 00:26:58,830 E, na verdade, o // é um comentário. 609 00:26:58,830 --> 00:27:00,550 É apenas palavras em Inglês para mim mesmo. 610 00:27:00,550 --> 00:27:03,000 Mas esta é a geral estrutura de um, se, condição. 611 00:27:03,000 --> 00:27:05,220 Mas vamos ver concreto exemplos em apenas um momento. 612 00:27:05,220 --> 00:27:07,960 >> Se você quiser ter um garfo de duas vias na estrada, 613 00:27:07,960 --> 00:27:11,740 muito como fizemos com o nosso voluntário em Quarta-feira, você pode ter um, else if. 614 00:27:11,740 --> 00:27:16,020 E se você quiser ter uma terceira e condição final, ou situação de incumprimento, 615 00:27:16,020 --> 00:27:19,006 você pode ter apenas um bloco de mais, há. 616 00:27:19,006 --> 00:27:21,880 E da mesma forma, com expressões booleanas, você pode, e,-los juntos. 617 00:27:21,880 --> 00:27:24,296 E vimos na quarta-feira, que não é um único e comercial, 618 00:27:24,296 --> 00:27:28,220 é dois, por razões de nível inferior que vamos finalmente ver e jogar. 619 00:27:28,220 --> 00:27:30,410 Ou-ing coisas juntos é de 2 barras verticais. 620 00:27:30,410 --> 00:27:32,240 Em um teclado dos EUA, esta é geralmente uma tecla 621 00:27:32,240 --> 00:27:35,730 com a tecla Shift acima sua chave tecla Enter ou Return. 622 00:27:35,730 --> 00:27:38,620 >> Depois, há estas coisas que vamos usar talvez uma ou duas vezes. 623 00:27:38,620 --> 00:27:42,570 Eles são funcionalmente equivalentes aos o que você pode fazer com um, if, else se, 624 00:27:42,570 --> 00:27:44,950 else if outra coisa, construir, mas eles são chamados de um interruptor. 625 00:27:44,950 --> 00:27:48,020 Eles parecem muito diferentes, mas vamos ver em alguns dos nosso código de distribuição, 626 00:27:48,020 --> 00:27:51,890 para um conjunto de problemas futuros, provavelmente, que às vezes é apenas uma mais bonita 627 00:27:51,890 --> 00:27:54,060 modo de expressar um inteiro bando de condições, 628 00:27:54,060 --> 00:27:57,590 sem ter um monte de chaves e um lote de parênteses e recuo. 629 00:27:57,590 --> 00:28:01,910 Mas eles não nos dão mais poder do que já temos. 630 00:28:01,910 --> 00:28:02,550 E agora laços. 631 00:28:02,550 --> 00:28:05,020 E este, vamos dar uma olhada em um pouco mais lentamente. 632 00:28:05,020 --> 00:28:08,470 Mas então, nós vamos começar a usá-los, especialmente para quem já está familiarizado. 633 00:28:08,470 --> 00:28:13,830 Esta é a forma canônica, se incrivelmente maneira misteriosa, para escrever um loop em C. 634 00:28:13,830 --> 00:28:15,896 >> Agora um laço no Scratch foi bastante simples. 635 00:28:15,896 --> 00:28:17,020 Você tem um, para sempre, bloco. 636 00:28:17,020 --> 00:28:19,760 Você tem um, repetir, com bloco apenas um número que você tem que digitar. 637 00:28:19,760 --> 00:28:22,220 E com o, por loop, você pode implementar essas duas idéias, 638 00:28:22,220 --> 00:28:23,595 mas é um pouco mais técnico. 639 00:28:23,595 --> 00:28:25,994 Mas, francamente, é também relativamente simples. 640 00:28:25,994 --> 00:28:28,160 Depois de saber a ordem de operações, você literalmente 641 00:28:28,160 --> 00:28:30,910 está indo só para ligar valores e dizer ao computador o que fazer. 642 00:28:30,910 --> 00:28:32,800 Então, aqui está um exemplo. 643 00:28:32,800 --> 00:28:38,040 Este é um circuito que, bastante simplesmente, conta-se a partir de um número 644 00:28:38,040 --> 00:28:40,187 através de um outro. 645 00:28:40,187 --> 00:28:42,020 E apenas pelos olhos para ele, mesmo se você tiver 646 00:28:42,020 --> 00:28:44,660 nenhuma experiência prévia com esta linguagem, que número 647 00:28:44,660 --> 00:28:46,920 ele provavelmente começar a contar a? 648 00:28:46,920 --> 00:28:47,730 OK, 0. 649 00:28:47,730 --> 00:28:50,240 E eu estou supondo que é porque você ver que há um int e um i, 650 00:28:50,240 --> 00:28:51,073 que é uma variável. 651 00:28:51,073 --> 00:28:52,390 É inicializado a 0. 652 00:28:52,390 --> 00:28:55,670 >> E, em seguida, mais tarde, parece que estamos passando printf, um valor. 653 00:28:55,670 --> 00:28:58,000 E, na verdade, eu fiz um pequeno erro de digitação aqui. 654 00:28:58,000 --> 00:28:59,850 Mas isso é facilmente corrigido. 655 00:28:59,850 --> 00:29:02,390 Deixe-me acrescentar, eu aqui. 656 00:29:02,390 --> 00:29:06,150 Temos, agora, ser printf passado esse valor de espaço reservado. 657 00:29:06,150 --> 00:29:08,299 E o que vai contar-se através? 658 00:29:08,299 --> 00:29:08,840 AUDIÊNCIA: 50. 659 00:29:08,840 --> 00:29:09,340 50. 660 00:29:09,340 --> 00:29:10,160 49. 661 00:29:10,160 --> 00:29:10,910 DAVID MALAN J: 49. 662 00:29:10,910 --> 00:29:13,340 Então, 50, à primeira vista, parece certo. 663 00:29:13,340 --> 00:29:16,990 Mas que, ao que parece, vai ser nossa condição que manter a verificação. 664 00:29:16,990 --> 00:29:21,740 E vamos parar uma vez Já não é inferior a 50. 665 00:29:21,740 --> 00:29:24,920 Portanto, este loop, por outro lado, deveria executar, desde que i é inferior a 50. 666 00:29:24,920 --> 00:29:28,891 Mas assim que ele se torna 50, ou 51, ou pior, ele deve parar automaticamente. 667 00:29:28,891 --> 00:29:29,390 Tudo certo. 668 00:29:29,390 --> 00:29:31,200 >> Então, o que realmente acontece aqui? 669 00:29:31,200 --> 00:29:33,160 Então este é o fim de operações para um loop. 670 00:29:33,160 --> 00:29:35,440 Um, você tem a assim-chamada inicialização. 671 00:29:35,440 --> 00:29:38,264 Este pedaço destaque amarelo de código é executado em primeiro lugar, 672 00:29:38,264 --> 00:29:40,930 e tem o efeito de que, por Quarta-feira, você provavelmente imaginar. 673 00:29:40,930 --> 00:29:45,500 Ele cria uma variável denominada i e lojas em que o valor variável 0. 674 00:29:45,500 --> 00:29:47,560 Então i é 0, neste ponto da história. 675 00:29:47,560 --> 00:29:49,680 >> A próxima coisa que acontece nesta construção, 676 00:29:49,680 --> 00:29:51,540 é que a condição checado. 677 00:29:51,540 --> 00:29:54,325 Então eu verificar imediatamente, i é menos de 50? 678 00:29:54,325 --> 00:29:57,700 E, claro, a resposta por enquanto é, com certeza, sim. 679 00:29:57,700 --> 00:30:00,710 Sim, porque i é 0, e isso é certamente inferior a 50. 680 00:30:00,710 --> 00:30:03,866 Então o que acontece, é que este linha de código é executado. 681 00:30:03,866 --> 00:30:06,740 E, de fato, se há múltiplo linhas de código nessas chaves, 682 00:30:06,740 --> 00:30:09,020 todos eles são executados um após o outro. 683 00:30:09,020 --> 00:30:11,450 >> E no efeito aqui, é aparentemente, para imprimir 684 00:30:11,450 --> 00:30:15,365 o número de i, o que vai ser 0, e, em seguida, 1, 2 e, em seguida. 685 00:30:15,365 --> 00:30:15,865 Mas por que? 686 00:30:15,865 --> 00:30:17,410 Por que ele se incrementado? 687 00:30:17,410 --> 00:30:20,680 Bem, a quarta coisa que acontece é que esta sintaxe 688 00:30:20,680 --> 00:30:22,610 é executado, depois do ponto e vírgula. 689 00:30:22,610 --> 00:30:27,506 i ++ é uma forma abreviada de dizer; tomar o valor de i, e adicionar 1 a ela; 690 00:30:27,506 --> 00:30:30,380 e, em seguida, da próxima vez, adicione 1 a ela; e da próxima vez, 691 00:30:30,380 --> 00:30:31,330 adicionar 1 a ela. 692 00:30:31,330 --> 00:30:33,640 >> Então, se esperamos que continue, o que vai acontecer 693 00:30:33,640 --> 00:30:35,890 ao lado é que eu não vou inicializar eu nunca mais. 694 00:30:35,890 --> 00:30:38,290 Se eu continuasse a inicialização I a 0, este exemplo 695 00:30:38,290 --> 00:30:41,110 que nunca iria acabar, porque Gostaria de ser preso a 0. 696 00:30:41,110 --> 00:30:43,870 Mas o que vai acontecer é que a condição será verificada, 697 00:30:43,870 --> 00:30:54,280 a linha de código serão executados, o i será incrementado, 698 00:30:54,280 --> 00:30:56,970 condição será verificada, código serão executados. 699 00:30:56,970 --> 00:30:59,790 E manteve-se andar de bicicleta novamente, e mais uma vez, e novamente, 700 00:30:59,790 --> 00:31:03,340 até i ++ induz a um valor de 50. 701 00:31:03,340 --> 00:31:05,870 >> A condição, em seguida, diz, 50 é inferior a 50? 702 00:31:05,870 --> 00:31:09,360 A resposta, claro, é não, e de modo que o código inteiro pára a execução. 703 00:31:09,360 --> 00:31:13,020 E se você tiver mais código na tela abaixo, isso é o que acontece em seguida. 704 00:31:13,020 --> 00:31:17,530 Ele salta para fora destas chaves e continua a imprimir mais do que depois. 705 00:31:17,530 --> 00:31:20,470 >> Então uma piada agora, a partir de foxtrot, que você talvez agora entender. 706 00:31:20,470 --> 00:31:30,810 707 00:31:30,810 --> 00:31:31,560 É sempre engraçado. 708 00:31:31,560 --> 00:31:34,110 É como as risadas tipo de coar, 709 00:31:34,110 --> 00:31:38,370 e então você percebe que você não deve estar rindo de humor como este. 710 00:31:38,370 --> 00:31:41,160 Mas há alguns takeaway aqui, pedagogicamente, também. 711 00:31:41,160 --> 00:31:43,577 Assim, verifica-se que eu sou faltando um pedaço de sintaxe, 712 00:31:43,577 --> 00:31:45,410 ou FoxTrot de perder uma pedaço de sintaxe aqui. 713 00:31:45,410 --> 00:31:48,076 O que falta, que nós tivemos em todos os outros exemplo, até agora? 714 00:31:48,076 --> 00:31:51,599 715 00:31:51,599 --> 00:31:53,390 Retorno, está lá, então isso é outra coisa, 716 00:31:53,390 --> 00:31:54,440 que vamos voltar a antes do tempo. 717 00:31:54,440 --> 00:31:55,398 O que está faltando, no entanto? 718 00:31:55,398 --> 00:31:55,908 Sim. 719 00:31:55,908 --> 00:31:58,150 >> PARTICIPANTE: O inicialização do [inaudível]. 720 00:31:58,150 --> 00:31:58,470 >> DAVID MALAN J: OK. 721 00:31:58,470 --> 00:31:58,980 Então sim. 722 00:31:58,980 --> 00:32:03,210 Então, na verdade, isso é-- Bem, e contagem é inicializado 723 00:32:03,210 --> 00:32:05,470 acima, ou melhor, declarou-se acima. 724 00:32:05,470 --> 00:32:06,960 Portanto, esta é uma outra maneira de fazê-lo. 725 00:32:06,960 --> 00:32:08,685 Mas não em linha recta é válida embora. 726 00:32:08,685 --> 00:32:09,310 E aqui? 727 00:32:09,310 --> 00:32:10,196 >> PARTICIPANTE: É as chaves? 728 00:32:10,196 --> 00:32:10,640 >> DAVID MALAN J: Sim. 729 00:32:10,640 --> 00:32:12,080 Assim, as chaves estão em falta. 730 00:32:12,080 --> 00:32:15,495 Mas este código, eu quero dizer, para seu crédito, é, na verdade, sintaticamente válido. 731 00:32:15,495 --> 00:32:17,610 Acontece, você não precisa das chaves 732 00:32:17,610 --> 00:32:21,691 se você tiver apenas uma linha de código que você quer executar dentro do loop. 733 00:32:21,691 --> 00:32:24,190 Agora, sempre, em classe e na todo o nosso código de distribuição, 734 00:32:24,190 --> 00:32:26,730 incluem as chaves de qualquer maneira, só por uma questão de clareza. 735 00:32:26,730 --> 00:32:29,010 Mas percebo que em livros didáticos e exemplos em linha, 736 00:32:29,010 --> 00:32:31,300 você pode muito bem ver encaracolado cintas faltando algum dia. 737 00:32:31,300 --> 00:32:34,850 E isso é OK, se o que você ter recuado e destinados 738 00:32:34,850 --> 00:32:38,650 é apenas uma única linha de código, e não várias linhas de código, potencialmente. 739 00:32:38,650 --> 00:32:39,150 Tudo certo. 740 00:32:39,150 --> 00:32:44,500 Então, relacionada à questão da imprecisão, é um problema de estouro, 741 00:32:44,500 --> 00:32:48,560 no sentido de que, de forma semelhante, inteiros não têm limites para eles 742 00:32:48,560 --> 00:32:49,970 assim como valores de ponto flutuante? 743 00:32:49,970 --> 00:32:53,120 No mundo de um ponto flutuante valores, só podemos ser tão preciso, 744 00:32:53,120 --> 00:32:55,710 após o que, por vezes, coisas ruins podem acontecer, 745 00:32:55,710 --> 00:32:57,760 e os nossos programas podem ser buggy e erro. 746 00:32:57,760 --> 00:33:00,050 Agora, mesmo com números inteiros, você pode executar em problemas. 747 00:33:00,050 --> 00:33:03,820 Agora um número inteiro não tem um ponto decimal ou números após ele. 748 00:33:03,820 --> 00:33:07,130 É apenas um número natural, normalmente. 749 00:33:07,130 --> 00:33:09,430 Então, o que poderia dar errado com um int? 750 00:33:09,430 --> 00:33:12,210 Se eu estou usando um int para contar, o que poderia dar errado? 751 00:33:12,210 --> 00:33:13,230 Parece muito mais simples. 752 00:33:13,230 --> 00:33:13,873 Sim. 753 00:33:13,873 --> 00:33:16,240 >> PARTICIPANTE: Se o número fica [inaudível] 754 00:33:16,240 --> 00:33:17,073 >> DAVID MALAN J: Sim. 755 00:33:17,073 --> 00:33:20,820 E se você contar tão alto, que você Não posso expressar que realmente grande número. 756 00:33:20,820 --> 00:33:21,320 Certo? 757 00:33:21,320 --> 00:33:23,910 Em algum momento, você vai a exceder os limites 758 00:33:23,910 --> 00:33:27,077 de um valor de 32 bits ou um valor de 64 bits. 759 00:33:27,077 --> 00:33:29,410 Agora, novamente, eu não sei como pronunciar um valor de 64 bits, 760 00:33:29,410 --> 00:33:32,230 mas eu sei que com um inteiro de 32 bits, o maior valor que pode ser, 761 00:33:32,230 --> 00:33:35,490 se é somente positivo valores, é de aproximadamente 4 bilhões. 762 00:33:35,490 --> 00:33:39,000 Então, se eu tentar contar até 5 bilhões, algo que vai acontecer. 763 00:33:39,000 --> 00:33:41,050 Mas vamos ver o que, de fato, pode acontecer. 764 00:33:41,050 --> 00:33:44,570 No mundo de inteiro estouro, onde, em certo sentido, 765 00:33:44,570 --> 00:33:48,270 transbordar a capacidade de um inteiro, o que poderia acontecer? 766 00:33:48,270 --> 00:33:51,190 >> Então aqui está um número binário, é um retrocesso para 0. 767 00:33:51,190 --> 00:33:54,630 É todos os 1 do e os espaços reservados lá, são potências de 2, 768 00:33:54,630 --> 00:33:55,980 por isso este é binário. 769 00:33:55,980 --> 00:33:59,416 Então, essas são 8, os bits 1 na tela. 770 00:33:59,416 --> 00:34:01,290 E se você se lembra ou você rapidamente fazer a matemática, 771 00:34:01,290 --> 00:34:06,074 o valor que está sendo representado aqui com estes oito bits de 1? 772 00:34:06,074 --> 00:34:06,950 255. 773 00:34:06,950 --> 00:34:09,260 E mesmo se você não bem a certeza da matemática, você poderia fazê-lo para fora. 774 00:34:09,260 --> 00:34:10,550 Ou você poderia apenas espécie da razão através dele, 775 00:34:10,550 --> 00:34:12,633 espere um minuto, se eu sou representando um valor de 8 bits, 776 00:34:12,633 --> 00:34:17,750 e eu tenho 256 valores possíveis, mas o primeiro dos quais é 0, 777 00:34:17,750 --> 00:34:19,909 Eu só sei que o maior vai ser 255, 778 00:34:19,909 --> 00:34:21,510 e é isso que este poderia ser. 779 00:34:21,510 --> 00:34:26,060 >> Então suponho que eu tente adicionar 1 a este valor. 780 00:34:26,060 --> 00:34:28,750 O que você faria no grau escola quando adicionar a 1, e 781 00:34:28,750 --> 00:34:31,139 não se encaixa porque você tem que levar o 1? 782 00:34:31,139 --> 00:34:34,380 O que é este número vai para tornar-se quando você adicionar um? 783 00:34:34,380 --> 00:34:37,030 Vai tornar-se 0. 784 00:34:37,030 --> 00:34:37,530 Certo? 785 00:34:37,530 --> 00:34:41,139 Porque se você tivesse mais bits-- e eu vou tentar, tipo de, digite-o para fora aqui-- 786 00:34:41,139 --> 00:34:44,710 se tivéssemos mais bits, o que poderia fazer aqui é adicionar a 1, 787 00:34:44,710 --> 00:34:47,370 e então teríamos isso. 788 00:34:47,370 --> 00:34:48,739 Whoops. 789 00:34:48,739 --> 00:34:52,250 Teríamos um 1 bit por todo o caminho até aqui. 790 00:34:52,250 --> 00:34:55,530 >> Mas se este é um finito valor, é apenas 8 bits, 791 00:34:55,530 --> 00:34:57,480 e isso é pré-determinada pelo computador, 792 00:34:57,480 --> 00:34:59,370 1 que é eficaz não existe. 793 00:34:59,370 --> 00:35:00,980 É apenas uma espécie de cai de um penhasco. 794 00:35:00,980 --> 00:35:05,480 E por isso, se você adicionar 1 a 255, o que valor que você aparentemente chegar? 795 00:35:05,480 --> 00:35:06,180 0. 796 00:35:06,180 --> 00:35:09,700 E assim os números acidentalmente, e, talvez, sem querer, 797 00:35:09,700 --> 00:35:12,040 acabar envolvendo em torno de como este. 798 00:35:12,040 --> 00:35:14,079 Então, o que pode ser a implicação disso? 799 00:35:14,079 --> 00:35:15,620 Bem, há algumas coisas diferentes. 800 00:35:15,620 --> 00:35:18,751 Então, um, ele não acabam procurando como 0, sem querer, 801 00:35:18,751 --> 00:35:20,750 mas você pode tipo de ver, mesmo no mundo real, 802 00:35:20,750 --> 00:35:23,416 por bem ou por mal, manifestações dessa idéia de um limite. 803 00:35:23,416 --> 00:35:26,630 Por exemplo, qualquer um de vocês que já jogou Lego Star Wars, 804 00:35:26,630 --> 00:35:28,880 Alguém por acaso sabe o número máximo de moedas 805 00:35:28,880 --> 00:35:32,032 você pode coletar em Lego Star Wars? 806 00:35:32,032 --> 00:35:35,640 Tome um palpite baseado em questões principais de hoje. 807 00:35:35,640 --> 00:35:39,140 É maior do que 256 ou 255. 808 00:35:39,140 --> 00:35:40,330 É 4 bilhões. 809 00:35:40,330 --> 00:35:42,080 Assim, ao que parece, e há algumas pessoas-- 810 00:35:42,080 --> 00:35:46,080 alguns googling confirmou última noite-- ter começado 4 bilhões de moedas de ouro, 811 00:35:46,080 --> 00:35:47,730 ou outros enfeites, em Lego Star Wars. 812 00:35:47,730 --> 00:35:49,860 Embora, aparentemente, não há uma maneira de enganar o jogo, 813 00:35:49,860 --> 00:35:53,222 há um bug ou recurso, que permite a você apenas acumular lotes e lotes de pontos. 814 00:35:53,222 --> 00:35:54,930 Mas a maior possível valor, de acordo 815 00:35:54,930 --> 00:35:58,360 a esta captura de tela de alguém que eu encontrados on-line, é de fato, 4 bilhões. 816 00:35:58,360 --> 00:35:59,240 >> Agora, por que é isso? 817 00:35:59,240 --> 00:36:03,040 É precisamente 4 bilhões, provavelmente porque alguém decidiu, 818 00:36:03,040 --> 00:36:05,500 que estava escrevendo este jogo, que eles poderiam fazer 4 bilhões, 819 00:36:05,500 --> 00:36:07,340 alguma coisa, alguma coisa, alguma coisa, como o valor eu coloquei 820 00:36:07,340 --> 00:36:10,256 com o calculador anterior, mas é apenas um pouco mais limpo para os seres humanos 821 00:36:10,256 --> 00:36:12,610 para dizer o número máximo de coins-- ou pregos, 822 00:36:12,610 --> 00:36:14,860 como eles chamam eles-- que você pode coletar é 4 bilhões. 823 00:36:14,860 --> 00:36:16,290 E assim, por que é isso? 824 00:36:16,290 --> 00:36:20,310 Como é o jogo LEGO o contador de execução 825 00:36:20,310 --> 00:36:23,420 que está mantendo o controle da número de moedas que você tem? 826 00:36:23,420 --> 00:36:24,266 Eles estão usando o quê? 827 00:36:24,266 --> 00:36:26,390 PARTICIPANTE: Ele pára contando após 4 bilhões. 828 00:36:26,390 --> 00:36:27,720 DAVID MALAN J: Ele pára contando após 4 bilhões, 829 00:36:27,720 --> 00:36:29,525 que significa que você pode inferir, como um programador, 830 00:36:29,525 --> 00:36:31,960 que eles são, provavelmente, usando um número inteiro de 32 bits. 831 00:36:31,960 --> 00:36:35,380 Como o programador literalmente apenas digitado, int, em seu código, 832 00:36:35,380 --> 00:36:39,620 e esse é o tipo de variável que eles estão usando para armazenar o código de alguém. 833 00:36:39,620 --> 00:36:42,230 Portanto, há outras manifestações desses tipos de limites. 834 00:36:42,230 --> 00:36:45,063 >> Então eu não ter jogado este game-- e eu estava lendo sobre a história 835 00:36:45,063 --> 00:36:48,470 para confirmar como much-- mas no versão original da Civilização, onde 836 00:36:48,470 --> 00:36:53,240 você aparentemente interagem uns com os outros e podem fazer a guerra ou a paz, 837 00:36:53,240 --> 00:36:56,590 Gandhi era suposto ser um dos os personagens mais pacíficos, como eu 838 00:36:56,590 --> 00:36:59,280 compreendê-lo, em primeiro versão de Civilization. 839 00:36:59,280 --> 00:37:03,250 E, de facto, numa escala de 1 a 10, sua agressividade era apenas um 1. 840 00:37:03,250 --> 00:37:05,620 Então, sempre tão levemente agressivo, aparentemente. 841 00:37:05,620 --> 00:37:11,590 >> Mas em algum ponto, você pode, aparentemente, instalar a democracia em sua geografia. 842 00:37:11,590 --> 00:37:14,900 E se você instalar a democracia em sua versão do jogo, 843 00:37:14,900 --> 00:37:17,320 em seguida, o seu nível de agressão vai para baixo. 844 00:37:17,320 --> 00:37:18,460 É uma coisa boa. 845 00:37:18,460 --> 00:37:20,890 As pessoas estão mais tranquilo aparentemente, nessa situação. 846 00:37:20,890 --> 00:37:23,190 Mas, aparentemente, alguém fez não tem uma, se, condição 847 00:37:23,190 --> 00:37:24,780 na versão original do código. 848 00:37:24,780 --> 00:37:30,650 >> Então nível agressão de Gandhi passou de positiva 1, menos 2, para um negativo, 849 00:37:30,650 --> 00:37:33,840 mas o jogo não faz entender os números negativos. 850 00:37:33,840 --> 00:37:38,680 Então, o que aconteceu foi a agressão de Gandhi nível passou de 1 para 0, a 1 negativo, 851 00:37:38,680 --> 00:37:40,900 que teve o efeito de envolvendo em torno de ser 852 00:37:40,900 --> 00:37:44,690 o personagem mais agressivo no jogo, a um valor de 255, 853 00:37:44,690 --> 00:37:46,630 numa escala de 1 a 10. 854 00:37:46,630 --> 00:37:49,887 E, desde então, tem havido mais encarnações deste jogo, 855 00:37:49,887 --> 00:37:51,720 e eles mantiveram-lo como uma espécie de ovo de Páscoa, 856 00:37:51,720 --> 00:37:53,870 Gandhi que é aparentemente tão terrivelmente agressiva. 857 00:37:53,870 --> 00:37:56,740 Mas foi o resultado de um erro de programação muito simples 858 00:37:56,740 --> 00:37:58,630 nessa versão muito inicial do jogo. 859 00:37:58,630 --> 00:38:02,860 >> Agora, mais perturbador, mais recentemente, o Boeing 787 860 00:38:02,860 --> 00:38:05,720 foi documentada como tendo uma bug, não o tipo de dispositivo 861 00:38:05,720 --> 00:38:07,340 você particularmente quero ter um bug. 862 00:38:07,340 --> 00:38:10,130 E os sintomas, que eu vou ler aqui, a partir de um artigo on-line, 863 00:38:10,130 --> 00:38:13,840 Foi este, um modelo 787 aviões que tem sido continuamente alimentado 864 00:38:13,840 --> 00:38:18,030 para 248 dias pode perder tudo corrente alternada, AC, 865 00:38:18,030 --> 00:38:20,850 energia eléctrica, devido as unidades de controle do gerador, 866 00:38:20,850 --> 00:38:23,330 GCUs, simultaneamente entrar em modo de falhas. 867 00:38:23,330 --> 00:38:26,790 Portanto, este foi um aviso emitido quando este problema foi detectado. 868 00:38:26,790 --> 00:38:28,750 Esta condição é causada por um contador de software, 869 00:38:28,750 --> 00:38:32,230 interno para o GCUs, assim um número inteiro ou uma variável, 870 00:38:32,230 --> 00:38:36,850 que transbordam vontade após 248 dias de potência contínua. 871 00:38:36,850 --> 00:38:40,350 Boeing é no processo de desenvolvimento de uma atualização de software que GCU 872 00:38:40,350 --> 00:38:42,350 vai resolver a condição insegura. 873 00:38:42,350 --> 00:38:44,226 >> Tão parecido com o míssil cenário, em que 874 00:38:44,226 --> 00:38:46,850 eles tinham algum tipo de variável que contava, e contando, 875 00:38:46,850 --> 00:38:50,720 e contar, mas transbordando gradualmente os limites da sua capacidade, 876 00:38:50,720 --> 00:38:54,890 fez da mesma forma que o avião de maldição ter um estouro de variável 877 00:38:54,890 --> 00:38:56,410 depois de bastante tempo de execução. 878 00:38:56,410 --> 00:38:59,240 E assim o caminho tongue-in-cheek de trabalhar em torno desta questão 879 00:38:59,240 --> 00:39:04,400 é, na verdade, reiniciar, o avião toda 247 dias, para que a memória é eliminada 880 00:39:04,400 --> 00:39:06,100 ea variável vai para trás a 0. 881 00:39:06,100 --> 00:39:09,410 Mas perceber, este é um muito grande encarnação de software, 882 00:39:09,410 --> 00:39:14,070 mas especialmente porque ouvimos falar sobre a Apple sistemas operacionais de entrar em carros, 883 00:39:14,070 --> 00:39:18,030 e carros de auto-condução do Google, e qualquer número de encarnações de software 884 00:39:18,030 --> 00:39:21,000 Em nossas vidas diárias, TVs e relógios, e muito mais, 885 00:39:21,000 --> 00:39:24,950 perceber foram cercados por software, tudo o que é escrito por nós seres humanos. 886 00:39:24,950 --> 00:39:28,150 >> E, como todos nós vamos descobrir em breve, é muito fácil e muito típico 887 00:39:28,150 --> 00:39:30,250 a cometer erros ao escrever software. 888 00:39:30,250 --> 00:39:32,745 E se você não pegá-los, algumas coisas ruins podem acontecer. 889 00:39:32,745 --> 00:39:35,400 Agora, às vezes, alguns coisas engraçadas podem acontecer, 890 00:39:35,400 --> 00:39:38,280 ou, pelo menos, às vezes nós saber para esperar alguma maldade. 891 00:39:38,280 --> 00:39:41,550 Assim 0 dividido por 0, a partir do grau escola, geralmente é uma coisa ruim. 892 00:39:41,550 --> 00:39:43,050 É indefinida. 893 00:39:43,050 --> 00:39:46,440 E acontece out-- e vamos ver se meu microfone pode escolher este up-- que a Apple 894 00:39:46,440 --> 00:39:47,790 teve algum divertimento com este recentemente. 895 00:39:47,790 --> 00:39:48,850 Então, eu tenho um iPhone aqui. 896 00:39:48,850 --> 00:39:54,160 Eu vou falar com Siri e pedir-lhe para me dar a resposta a 0 dividido por 0. 897 00:39:54,160 --> 00:39:55,850 O que é dividido por 0 0? 898 00:39:55,850 --> 00:39:59,350 899 00:39:59,350 --> 00:40:02,230 >> SIRI: Imagine que você tem 0 cookies, e você dividi-las uniformemente 900 00:40:02,230 --> 00:40:03,540 entre 0 amigos. 901 00:40:03,540 --> 00:40:05,810 Quantos os cookies que cada pessoa recebe? 902 00:40:05,810 --> 00:40:06,350 Vejo? 903 00:40:06,350 --> 00:40:07,660 Não faz sentido. 904 00:40:07,660 --> 00:40:10,540 E Cookie Monster é triste que não existem biscoitos. 905 00:40:10,540 --> 00:40:13,987 E você está triste que você não tem amigos. 906 00:40:13,987 --> 00:40:15,570 DAVID MALAN J: É uma espécie de desagradável. 907 00:40:15,570 --> 00:40:17,550 Portanto, este é apenas o que foi dito lá. 908 00:40:17,550 --> 00:40:21,380 É indeterminado, não é definida, E de fato, muitas linguagens de programação 909 00:40:21,380 --> 00:40:24,950 ou, realmente, compiladores detectar quando, num programa, 910 00:40:24,950 --> 00:40:27,050 tentar dividir 0 por 0. 911 00:40:27,050 --> 00:40:29,830 Mais divertido do que isso, porém, é que, aparentemente, Cookie Monster 912 00:40:29,830 --> 00:40:31,270 está no Twitter estes dias. 913 00:40:31,270 --> 00:40:37,610 E ele respondeu a esta, com isso, que é absolutamente adorável. 914 00:40:37,610 --> 00:40:40,110 Mas vamos dar uma rápida olhada em um par de outras construções, 915 00:40:40,110 --> 00:40:43,459 e em seguida, colocar algumas dessas código de usar, em boas maneiras. 916 00:40:43,459 --> 00:40:45,250 Então não é que, além de loops, há 917 00:40:45,250 --> 00:40:49,174 algo chamado um loop while, que parece diferente e é implementado 918 00:40:49,174 --> 00:40:51,590 um pouco e differently-- vamos finalmente ver examples-- 919 00:40:51,590 --> 00:40:53,500 mas, em certo sentido, é mais simples porque 920 00:40:53,500 --> 00:40:56,670 não permite que você para inicializar e actualizar dentro do limite do circuito. 921 00:40:56,670 --> 00:40:57,794 Você ainda pode implementá-lo. 922 00:40:57,794 --> 00:41:01,219 Assim você pode fazer exatamente as mesmas coisas com um loop while, como com um loop for, 923 00:41:01,219 --> 00:41:03,260 mas sua sintaxe, ultimately-- como vamos finalmente 924 00:41:03,260 --> 00:41:04,551 see-- vai ser diferente. 925 00:41:04,551 --> 00:41:07,450 Há até mesmo um loop Do While, que é realmente um pouco diferente, 926 00:41:07,450 --> 00:41:09,640 em que, enquanto um loop e um loop while sempre 927 00:41:09,640 --> 00:41:13,005 verificar a sua condição de primeira, se você ler essa coisa de cima para baixo, 928 00:41:13,005 --> 00:41:16,440 que tipo de parece que vai verificá-lo da condição do último porque é 929 00:41:16,440 --> 00:41:17,910 verdadeiramente a última linha de código. 930 00:41:17,910 --> 00:41:20,580 E, de fato, isso vai ser útil em determinados programas que escrevemos, 931 00:41:20,580 --> 00:41:23,746 se você quiser apenas fazer algo cegamente e, eventualmente, verificar a condição. 932 00:41:23,746 --> 00:41:25,205 Isso não é necessariamente uma coisa ruim. 933 00:41:25,205 --> 00:41:27,912 Se quisermos variáveis, podemos fazer -lo em um par de maneiras diferentes. 934 00:41:27,912 --> 00:41:30,290 E vimos no FoxTrot desenhos animados, uma maneira de fazê-lo, 935 00:41:30,290 --> 00:41:33,400 onde você declarar a variável, como int contador de ponto e vírgula, 936 00:41:33,400 --> 00:41:36,570 e, em seguida, later-- talvez o próximo linha, talvez 10 linhas later-- 937 00:41:36,570 --> 00:41:37,800 você realmente inicializar-lo. 938 00:41:37,800 --> 00:41:42,230 Assim estas 2 linhas de código declarar uma variável do tipo int 939 00:41:42,230 --> 00:41:44,930 e chamá-lo de balcão, por isso dá- mim o suficiente bits para realizar um int. 940 00:41:44,930 --> 00:41:48,230 E, em seguida, eventualmente, ele coloca o valor 0 para essa variável. 941 00:41:48,230 --> 00:41:51,250 Ela organiza os 0 e 1 em um de padrão, que sabemos que desde a semana passada, 942 00:41:51,250 --> 00:41:53,260 representa o número que conhecemos como 0. 943 00:41:53,260 --> 00:41:56,920 Ou, francamente, você pode fazer isso muito de forma mais sucinta, como esta. 944 00:41:56,920 --> 00:41:59,390 >> Agora temos também a capacidade de chamar funções. 945 00:41:59,390 --> 00:42:03,070 E, de fato, aqui está uma linha 2 programa, ou um excerto da mesma, 946 00:42:03,070 --> 00:42:06,157 que nos permite, na verdade, escrever algum código que 947 00:42:06,157 --> 00:42:08,990 recebe uma string do user-- muito como o nosso voluntário um momento ago-- 948 00:42:08,990 --> 00:42:11,320 armazenando o resultado uma variável chamada nome, 949 00:42:11,320 --> 00:42:15,470 e entăo-- muito parecido com o nosso voluntário com estampas printf-- fora esses valores 950 00:42:15,470 --> 00:42:19,180 passando em dois argumentos, o cadeia, seguida da variável 951 00:42:19,180 --> 00:42:20,781 chamado, nome, em si. 952 00:42:20,781 --> 00:42:23,155 Então, vamos dar uma olhada, antes de queremos voltar a Mario lá, 953 00:42:23,155 --> 00:42:26,010 em um par de agora, exemplos disso. 954 00:42:26,010 --> 00:42:30,537 >> Eu estou indo para ir em frente e aberto até, vamos dizer, a função-0.c. 955 00:42:30,537 --> 00:42:33,120 E como sempre, este código é disponível no site do curso, 956 00:42:33,120 --> 00:42:35,660 para que você possa tocar junto no casa e olhar para ele mais tarde. 957 00:42:35,660 --> 00:42:40,400 Mas aqui está o programa em que é Essencialmente, a partir da linha 17 a 22. 958 00:42:40,400 --> 00:42:43,270 O programa principal é onde o programa é sempre vai começar. 959 00:42:43,270 --> 00:42:46,980 Este programa, aparentemente, vai para imprimir o seu nome, cólon. 960 00:42:46,980 --> 00:42:50,320 É, em seguida, vai chamar GetString, tal como fizemos com nossos voluntários. 961 00:42:50,320 --> 00:42:53,365 E então, isso é interessante, ele vai chamar PrintName. 962 00:42:53,365 --> 00:42:56,490 Acontece que, durante todo esse tempo, não parece ser uma função chamada PrintName. 963 00:42:56,490 --> 00:42:57,614 Que imprime o nome de alguém. 964 00:42:57,614 --> 00:43:01,210 Nós não precisa usar printf de passado, há PrintName. 965 00:43:01,210 --> 00:43:03,500 >> Mas isso é enganoso porque não faz PrintName 966 00:43:03,500 --> 00:43:06,760 vêm com C. As pessoas não inventá-lo cerca de 40 ou 50 anos atrás, 967 00:43:06,760 --> 00:43:07,990 Eu fiz, em vez disso. 968 00:43:07,990 --> 00:43:10,330 E, de fato, se eu rolar ainda mais para baixo, aviso 969 00:43:10,330 --> 00:43:14,200 como eu posso escrever o meu próprio funções em C. vamos finalmente 970 00:43:14,200 --> 00:43:16,319 explicar por que razão continuamos dizendo: vazio, em alguns lugares, 971 00:43:16,319 --> 00:43:18,110 mas para hoje, vamos basta olhar para o nome. 972 00:43:18,110 --> 00:43:20,905 >> Na linha 24, se você quiser criar sua própria função, 973 00:43:20,905 --> 00:43:22,780 você literalmente escrever o nome da função. 974 00:43:22,780 --> 00:43:24,340 Eu escolhi PrintName. 975 00:43:24,340 --> 00:43:26,159 Em parênteses, você em seguida, especificar que tipos 976 00:43:26,159 --> 00:43:28,450 de insumos, e quantos você quer esta função para tirar. 977 00:43:28,450 --> 00:43:31,906 Neste caso, eu quero levá 1 variável chamada, nome, 978 00:43:31,906 --> 00:43:34,030 e que vai ser de Tipo, corda, por isso vai 979 00:43:34,030 --> 00:43:35,780 para ser uma sequência de caracteres. 980 00:43:35,780 --> 00:43:39,170 E então, este program-- bem como no Scratch, 981 00:43:39,170 --> 00:43:42,590 você pode ter quebra-cabeça personalizado pieces-- vai ter esse comportamento personalizado. 982 00:43:42,590 --> 00:43:46,760 Vai chamar printf passando, Olá, espaço reservado, 983 00:43:46,760 --> 00:43:49,110 e, em seguida, ele vai ligá em tudo o que o usuário chamado. 984 00:43:49,110 --> 00:43:51,450 >> Portanto, este é um exemplo do que um cientista da computação seria 985 00:43:51,450 --> 00:43:55,090 abstração chamada ou funcional decomposição, que são apenas 986 00:43:55,090 --> 00:43:58,110 formas extravagantes de dizendo-- é se você gosta dessa idéia de alto nível, 987 00:43:58,110 --> 00:44:01,569 como eu quero funcionalidade que imprime o nome de alguém, absolutamente você 988 00:44:01,569 --> 00:44:04,360 pode literalmente escrever printf e depois passar os argumentos que você quer, 989 00:44:04,360 --> 00:44:07,340 eo programa irá funcionar, como tem sido desde quarta-feira. 990 00:44:07,340 --> 00:44:10,510 Mas você pode começar a abstrair a noção de impressão de um nome. 991 00:44:10,510 --> 00:44:13,270 Você pode dar-lhe um nome, como PrintName, e este 992 00:44:13,270 --> 00:44:15,280 é essa idéia de camadas de semana 0. 993 00:44:15,280 --> 00:44:19,910 >> De agora em diante, eu e você não tem que saber ou se importa como PrintName é implementado. 994 00:44:19,910 --> 00:44:22,470 Sim ele usa printf, talvez seja não, quem sabe o que usa? 995 00:44:22,470 --> 00:44:23,410 Quem se importa? 996 00:44:23,410 --> 00:44:26,034 Agora eu estou falando aqui, em vez de descer aqui. 997 00:44:26,034 --> 00:44:28,700 E, de fato, como nossos programas de obter mais avançada e sofisticada, 998 00:44:28,700 --> 00:44:32,550 vamos continuar a tomar para concedido que existem mais baixas peças do puzzle nível. 999 00:44:32,550 --> 00:44:34,780 Porque nós escrevemos-los ou alguém fez, então 1000 00:44:34,780 --> 00:44:36,910 que podemos, então, construir em cima deles. 1001 00:44:36,910 --> 00:44:39,430 Vamos dar uma olhada neste variante, funcionar um. 1002 00:44:39,430 --> 00:44:41,780 >> Então, este é um pouco mais avançado, mas verifica-se 1003 00:44:41,780 --> 00:44:44,570 que na biblioteca de CS50, há apenas uma função GetInt. 1004 00:44:44,570 --> 00:44:47,720 Nós não pensamos que, anos atrás, para implementar uma função GetPositiveInt. 1005 00:44:47,720 --> 00:44:50,970 E isso é um pouco chato, porque se vocês estão escrevendo um programa em que 1006 00:44:50,970 --> 00:44:53,325 Você quer ter um positivo número inteiro de o utilizador, 1007 00:44:53,325 --> 00:44:55,010 você pode perfeitamente usar GetInt. 1008 00:44:55,010 --> 00:44:57,840 E você pode absolutamente verificar com a condição e talvez um loop 1009 00:44:57,840 --> 00:45:00,320 Se é maior que int que 0 e gritar com o usuário 1010 00:45:00,320 --> 00:45:02,699 se ele ou ela não dá você um número positivo. 1011 00:45:02,699 --> 00:45:04,740 Mas vamos construir este edifício bloquear a nós mesmos, um, 1012 00:45:04,740 --> 00:45:06,555 peça Raspadinha costume, se você quiser. 1013 00:45:06,555 --> 00:45:08,680 Eu vou ter um programa aqui que, em última análise, Eu 1014 00:45:08,680 --> 00:45:11,780 quero ser capaz de chamá- GetPositiveInt, e eu quero ser 1015 00:45:11,780 --> 00:45:14,200 capaz de imprimir o que quer que é int. 1016 00:45:14,200 --> 00:45:16,240 Mas isso é abstraída agora. 1017 00:45:16,240 --> 00:45:19,050 Ele acaba de ser dado um nível elevado nome que diz que ele faz, 1018 00:45:19,050 --> 00:45:21,780 que é maravilhoso porque é muito intuitivo agora de ler. 1019 00:45:21,780 --> 00:45:24,710 E se eu me importo o que está por baixo o capô, deixe-me rolar para baixo. 1020 00:45:24,710 --> 00:45:27,140 E é um pouco intimidante em primeiro lugar, especialmente 1021 00:45:27,140 --> 00:45:29,470 se este é o seu primeiro programa, mas vamos dar uma olhada. 1022 00:45:29,470 --> 00:45:32,860 >> Eu não estou dizendo, vazio, pois verifica-se funções, 1023 00:45:32,860 --> 00:45:34,777 muito parecido com GetString, pode retornar um valor para mim. 1024 00:45:34,777 --> 00:45:36,610 Eles não apenas têm para imprimir na tela, 1025 00:45:36,610 --> 00:45:38,410 eles realmente podem entregar me algo de volta. 1026 00:45:38,410 --> 00:45:41,535 E que antes PrintName, Eu não preciso de nada de volta. 1027 00:45:41,535 --> 00:45:44,160 Eu precisava do efeito colateral de algo aparecendo na tela, 1028 00:45:44,160 --> 00:45:46,570 mas eu não preciso de um homem me dar algo de volta. 1029 00:45:46,570 --> 00:45:48,840 Aqui, com GetPositiveInt, como com GetInt, 1030 00:45:48,840 --> 00:45:50,640 Eu quero ser entregue algo de volta. 1031 00:45:50,640 --> 00:45:53,220 Então, eu estou dizendo não, vazio, na linha 23, mas int, 1032 00:45:53,220 --> 00:45:55,570 que diz, esta função que estou escrevendo, 1033 00:45:55,570 --> 00:45:58,860 chamado GetPositiveInt vai entregar-me de volta um inteiro, não nada, 1034 00:45:58,860 --> 00:45:59,890 não vazio. 1035 00:45:59,890 --> 00:46:03,280 >> Enquanto isso, ele vai tomar nenhuma entradas, então eu, tipo, inverteu-lo. 1036 00:46:03,280 --> 00:46:08,280 Eu não estou dando qualquer GetPositiveInt entrada, eu quero que ele me dê a sua saída. 1037 00:46:08,280 --> 00:46:09,800 E então o que acontece agora? 1038 00:46:09,800 --> 00:46:11,640 Então aqui está como eu pode declarar uma variável. 1039 00:46:11,640 --> 00:46:15,090 Já fiz isso fora do loop, por razões vamos finalmente ver, 1040 00:46:15,090 --> 00:46:17,700 mas isso só dá me 32 bits chamado, N, 1041 00:46:17,700 --> 00:46:20,952 e eu tenho pré-determinação los para armazenar inteiro. 1042 00:46:20,952 --> 00:46:23,660 E aqui é que, fazer enquanto construção, e é por isso que ele é útil. 1043 00:46:23,660 --> 00:46:26,700 Literalmente fazer isso, enquanto N é inferior a 1. 1044 00:46:26,700 --> 00:46:28,030 Então vamos ver o que acontece. 1045 00:46:28,030 --> 00:46:30,760 Eu imprimir, por favor dê-me um int positivo. 1046 00:46:30,760 --> 00:46:34,300 Eu, então, obter um int, usando de CS50 funcionar e armazenado em N. 1047 00:46:34,300 --> 00:46:38,990 >> E então, o que linha de código, provavelmente, é executado próximo, logicamente? 1048 00:46:38,990 --> 00:46:41,890 Qual o número da linha? 1049 00:46:41,890 --> 00:46:42,571 Sim, então 31. 1050 00:46:42,571 --> 00:46:45,320 Você não saberia disso até que você tenha foi dito ou tipo de inferir que, 1051 00:46:45,320 --> 00:46:45,986 mas isso é verdade. 1052 00:46:45,986 --> 00:46:48,280 Ele vai de cima para baixo e, em seguida, continua a repetir. 1053 00:46:48,280 --> 00:46:55,840 Então, se eu ter digitado por exemplo, o número 1 negativo, é n menos de 1 negativo? 1054 00:46:55,840 --> 00:46:56,340 Sim. 1055 00:46:56,340 --> 00:46:58,470 Porque negativa 1 é inferior a 1. 1056 00:46:58,470 --> 00:46:59,510 Então, o que deve acontecer? 1057 00:46:59,510 --> 00:47:03,260 Eu vou fazer isso enquanto N é inferior a 1, 1058 00:47:03,260 --> 00:47:05,760 então eu vou voltar para a linha 28. 1059 00:47:05,760 --> 00:47:09,530 >> E cada um tempo-- e vamos correr isto-- fazer a função de 1 a compilá-lo, 1060 00:47:09,530 --> 00:47:11,340 e agora dot cortar função 1. 1061 00:47:11,340 --> 00:47:14,280 Se eu digitar um negativo, é vai continuar gritando comigo 1062 00:47:14,280 --> 00:47:17,530 até que eu cooperar porque cada das minhas entradas é inferior a 1 1063 00:47:17,530 --> 00:47:20,070 e se for inferior a 1, enquanto, Eu vou continuar fazendo isso. 1064 00:47:20,070 --> 00:47:24,240 Se eu finalmente dar-lhe um número como 50, felizmente, ele diz que, graças ao 50. 1065 00:47:24,240 --> 00:47:24,970 Por quê? 1066 00:47:24,970 --> 00:47:30,640 Porque assim que n não seja inferior a 1, eu paro de ficar preso neste loop, 1067 00:47:30,640 --> 00:47:33,840 e esta nova palavra-chave hoje, retorno, literalmente faz isso. 1068 00:47:33,840 --> 00:47:36,800 Então eu acabei implementado, em uma sentido, o equivalente a GetString, 1069 00:47:36,800 --> 00:47:40,590 onde estou devolvendo a quem está me usando, algum valor. 1070 00:47:40,590 --> 00:47:42,820 Ele não tem de ser uma corda, é um int. 1071 00:47:42,820 --> 00:47:44,990 Assim, um simples, rápido exemplo, mas nós vamos em breve 1072 00:47:44,990 --> 00:47:47,930 ver um pouco mais sofisticado versões ainda. 1073 00:47:47,930 --> 00:47:53,882 Na verdade, vamos dar uma olhada em um um numérico, que é chamado return.c. 1074 00:47:53,882 --> 00:47:55,590 E este é, na verdade, um pouco mais simples. 1075 00:47:55,590 --> 00:47:59,010 Assim, o propósito deste programa em vida-- vamos compilar e executá-lo, 1076 00:47:59,010 --> 00:48:03,090 por isso certifique-retorno, dot barra, aviso return-- 1077 00:48:03,090 --> 00:48:05,530 o programa simplesmente cubos o valor 2. 1078 00:48:05,530 --> 00:48:08,410 É muito estúpido, é difícil código, não é preciso nenhum entradas, 1079 00:48:08,410 --> 00:48:12,220 mas isso demonstra outro função que eu me escrito. 1080 00:48:12,220 --> 00:48:15,760 Então aqui, eu tenho declarado variável, chamado x, do tipo int, 1081 00:48:15,760 --> 00:48:17,840 igual ao número 2, completamente arbitrária. 1082 00:48:17,840 --> 00:48:19,530 Este é apenas alguma impressão fofo. 1083 00:48:19,530 --> 00:48:23,070 Diz x é agora, e tal tal, cubing dot dot dot. 1084 00:48:23,070 --> 00:48:26,390 E a magia está aparentemente em linha 21. 1085 00:48:26,390 --> 00:48:30,120 Eu estou chamando uma função chamada, cubo, Estou entregando-lhe uma folha de papel 1086 00:48:30,120 --> 00:48:32,890 com o número 2 escrito nele, e qual o valor que, matematicamente, 1087 00:48:32,890 --> 00:48:34,860 eu quero sair dela? 1088 00:48:34,860 --> 00:48:36,570 Assim como uma verificação de sanidade? 1089 00:48:36,570 --> 00:48:37,070 8. 1090 00:48:37,070 --> 00:48:37,570 Certo? 1091 00:48:37,570 --> 00:48:40,160 Eu quero dois cubos de volta, 2 a a potência de 3, de modo 8 de volta. 1092 00:48:40,160 --> 00:48:42,570 >> Então, onde está cubo implementado? 1093 00:48:42,570 --> 00:48:44,349 Bem, a notificação é implementado aqui embaixo. 1094 00:48:44,349 --> 00:48:47,140 E, assim como antes, logicamente, embora a sintaxe é provavelmente 1095 00:48:47,140 --> 00:48:49,320 muito novo para muitos de vocês, Eu quero essa função 1096 00:48:49,320 --> 00:48:51,780 para me devolver uma folha de papel com um int nele. 1097 00:48:51,780 --> 00:48:53,990 Então, eu tenho um int, o nome é arbitrariamente, 1098 00:48:53,990 --> 00:48:55,530 mas convenientemente denominado cubo. 1099 00:48:55,530 --> 00:48:58,430 A entrada para ele, n é de tipo inteiro, o que é 1100 00:48:58,430 --> 00:49:00,800 Como eu passar no número 2 numa folha de papel. 1101 00:49:00,800 --> 00:49:03,910 E, em seguida, verifica-se suportes C matemática, então você não tem de x para os tempos, 1102 00:49:03,910 --> 00:49:06,680 você só usar o asterisco para a multiplicação. 1103 00:49:06,680 --> 00:49:11,070 E isso retorna n vezes n vezes n, o qual é simplesmente um valor ao cubo. 1104 00:49:11,070 --> 00:49:12,840 >> Então, para onde estamos indo com tudo isso? 1105 00:49:12,840 --> 00:49:14,570 Este é definitivamente um tour relâmpago, a certeza, 1106 00:49:14,570 --> 00:49:16,410 que as secções de super em e no conjunto de problemas 1, 1107 00:49:16,410 --> 00:49:18,368 você vai ser orientado pelo tudo isso ainda mais. 1108 00:49:18,368 --> 00:49:22,490 E em um conjunto de problemas, vamos transição do mundo gráfica do Scratch 1109 00:49:22,490 --> 00:49:25,640 para algo mais linha de comando em C. Mas vamos inspirar- 1110 00:49:25,640 --> 00:49:27,680 a partir deste jogo aqui de outros tempos, em que 1111 00:49:27,680 --> 00:49:31,591 usando C e a edição padrão do p set você implementará pirâmide de Mario. 1112 00:49:31,591 --> 00:49:34,340 E na edição de hackers do p set, se assim o desejarem eleger, 1113 00:49:34,340 --> 00:49:38,280 você implementará um pouco mais desafiando pirâmide com dois picos. 1114 00:49:38,280 --> 00:49:41,239 Você também vai implementar um algoritmo, um algoritmo guloso. 1115 00:49:41,239 --> 00:49:43,030 Acontece que há alguma lógica interessante 1116 00:49:43,030 --> 00:49:45,640 por trás do processo de executando uma estação de cashier 1117 00:49:45,640 --> 00:49:47,410 e, na verdade, entregando- alguém mudança de volta. 1118 00:49:47,410 --> 00:49:50,410 Existe um algoritmo que é bastante simples, que você pode até 1119 00:49:50,410 --> 00:49:53,576 compreender intuitivamente quando li pela primeira vez ele-- percebendo que é o que eu sempre 1120 00:49:53,576 --> 00:49:57,110 feito a qualquer momento eu tenho dado a alguém algum traseira-- dinheiro que lhe permite sempre 1121 00:49:57,110 --> 00:50:00,679 minimizar o número de notas de papel ou moedas metálicas 1122 00:50:00,679 --> 00:50:02,220 que você está entregando de volta para o usuário. 1123 00:50:02,220 --> 00:50:04,610 E isso, é claro, é convincente porque se você vai a CVS ou outros enfeites, 1124 00:50:04,610 --> 00:50:06,430 você não quer ser handed um monte de os 1125 00:50:06,430 --> 00:50:07,596 ou um monte de moedas de um centavo. 1126 00:50:07,596 --> 00:50:10,120 Você quer que o menor moedas, provavelmente, possível. 1127 00:50:10,120 --> 00:50:13,070 >> Finalmente, você também vai ser desafiados a se envolver no mundo da água 1128 00:50:13,070 --> 00:50:17,220 e realmente obter uma valorização para um mapeamento entre as taxas de fluxo, 1129 00:50:17,220 --> 00:50:19,890 de gosto, de água em um chuveiro, quanta água é usada. 1130 00:50:19,890 --> 00:50:22,640 E a alusão nele, será este clipe aqui, 1131 00:50:22,640 --> 00:50:24,840 que vamos acabar por apenas 60 segundos, que 1132 00:50:24,840 --> 00:50:29,070 pinta um quadro de cabeças de chuveiro de baixo fluxo. 1133 00:50:29,070 --> 00:50:30,886 >> [REPRODUÇÃO DE VÍDEO] 1134 00:50:30,886 --> 00:50:31,385 -Tudo certo. 1135 00:50:31,385 --> 00:50:32,774 Eu tenho tudo aqui. 1136 00:50:32,774 --> 00:50:35,800 Eu tenho o Cyclone F Series, Hydra, Jetflow, Estocolmo 1137 00:50:35,800 --> 00:50:37,660 Supersteam, o nome dele. 1138 00:50:37,660 --> 00:50:39,265 >> -E O que você recomendaria? 1139 00:50:39,265 --> 00:50:40,460 >> -O que você esta procurando? 1140 00:50:40,460 --> 00:50:41,300 >> -Power Homem. 1141 00:50:41,300 --> 00:50:42,285 Potência. 1142 00:50:42,285 --> 00:50:42,910 -Como Silkwood. 1143 00:50:42,910 --> 00:50:44,520 -Isso É para a radiação. 1144 00:50:44,520 --> 00:50:46,335 -Está certo. 1145 00:50:46,335 --> 00:50:48,275 -Agora O que é isso? 1146 00:50:48,275 --> 00:50:49,704 -Isso É o Commando 450. 1147 00:50:49,704 --> 00:50:50,620 Eu não vendo aquele. 1148 00:50:50,620 --> 00:50:51,700 >> -Mas Isso é o que nós queremos. 1149 00:50:51,700 --> 00:50:52,680 É um commando 450. 1150 00:50:52,680 --> 00:50:53,882 >> -Não Acredite em mim. 1151 00:50:53,882 --> 00:50:55,090 Ele só é usado no circo. 1152 00:50:55,090 --> 00:50:56,512 É para elefantes. 1153 00:50:56,512 --> 00:50:59,356 >> -Vou Pagar nada. 1154 00:50:59,356 --> 00:51:01,252 >> -E Jerry? 1155 00:51:01,252 --> 00:51:02,760 >> -Ele Não podia lidar com isso. 1156 00:51:02,760 --> 00:51:04,910 Ele é delicado. 1157 00:51:04,910 --> 00:51:05,750 Oh sim. 1158 00:51:05,750 --> 00:51:36,737 1159 00:51:36,737 --> 00:51:37,320 [FIM DE REPRODUÇÃO] 1160 00:51:37,320 --> 00:51:37,700 DAVID MALAN J: Tudo bem. 1161 00:51:37,700 --> 00:51:38,820 Isto é, se para CS50. 1162 00:51:38,820 --> 00:51:40,050 Vamos vê-lo na próxima semana. 1163 00:51:40,050 --> 00:51:45,910 1164 00:51:45,910 --> 00:51:49,029 >> COLUNA 1: [? Scully?], [? Ian,?] na medida em que este projecto Outro, 1165 00:51:49,029 --> 00:51:50,362 o que vocês chegar a? 1166 00:51:50,362 --> 00:51:51,990 >> COLUNA 2: Bem, nós demos uma variedade de pensamento, 1167 00:51:51,990 --> 00:51:53,250 e nós pensamos que a melhor maneira a-- 1168 00:51:53,250 --> 00:51:53,660 >> COLUNA 3: Posso? 1169 00:51:53,660 --> 00:51:54,326 >> COLUNA 2: Sim. 1170 00:51:54,326 --> 00:51:56,360 Por todos os meios, na verdade. 1171 00:51:56,360 --> 00:51:59,425 >> COLUNA 3: Então eu acho que podemos resumir a nossa idéia 1172 00:51:59,425 --> 00:52:05,450 para os Outros, com uma nada word--. 1173 00:52:05,450 --> 00:52:08,950 1174 00:52:08,950 --> 00:52:10,409 >> DAVID MALAN J: Nada? 1175 00:52:10,409 --> 00:52:11,200 COLUNA 3: Nada. 1176 00:52:11,200 --> 00:52:12,990 DAVID MALAN J: O que significa isso? 1177 00:52:12,990 --> 00:52:16,260 COLUNA 3: Os Outros são sobre nada. 1178 00:52:16,260 --> 00:52:21,720 COLUNA 2: Bem, quero dizer, em filosofia, Quero dizer, nada é sempre algo. 1179 00:52:21,720 --> 00:52:24,200 COLUNA 1: Então what's-- o que é a premissa? 1180 00:52:24,200 --> 00:52:25,720 COLUNA 3: Então é como a vida. 1181 00:52:25,720 --> 00:52:26,680 ESTÁ BEM. 1182 00:52:26,680 --> 00:52:28,294 O que você fez hoje? 1183 00:52:28,294 --> 00:52:31,811 >> DAVID MALAN J: Eu me levantei, tive café da manhã, e veio para trabalhar. 1184 00:52:31,811 --> 00:52:34,056 >> COLUNA 3: Isso é uma chamada outro. 1185 00:52:34,056 --> 00:52:36,806 COLUNA 2: Mas, quero dizer, não deveria algo acontecer com ele em as-- 1186 00:52:36,806 --> 00:52:37,889 COLUNA 3: Não, não, não, não. 1187 00:52:37,889 --> 00:52:40,220 Nada acontece. 1188 00:52:40,220 --> 00:52:42,910 >> COLUNA 1: Então por que estamos assistindo? 1189 00:52:42,910 --> 00:52:46,956 >> COLUNA 3: Porque é um Outro para CS50. 1190 00:52:46,956 --> 00:52:48,652 >> DAVID MALAN J: Ainda não. 1191 00:52:48,652 --> 00:52:49,151