1 00:00:07,590 --> 00:00:09,920 [Powered by Google Translate] DAVID J. MALAN: Tudo bem, isso é CS50 e este é o 2 00:00:09,920 --> 00:00:15,250 final da semana 1, cartões etc estudo está eo número total de 3 00:00:15,250 --> 00:00:18,640 colegas que você tem para este ano é 745. 4 00:00:18,640 --> 00:00:20,920 E estamos tão entusiasmados em ter tantos de vocês no curso 5 00:00:20,920 --> 00:00:23,680 este semestre, mas mesmo que este curso é tão grande, 6 00:00:23,680 --> 00:00:26,090 perceber que é essas coisas como almoços sexta-feira, como 7 00:00:26,090 --> 00:00:29,020 as horas de expediente, 15 pessoa-seções e assim por diante que 8 00:00:29,020 --> 00:00:30,590 são realmente significava para criar esta mais íntima 9 00:00:30,590 --> 00:00:31,140 ambiente. 10 00:00:31,140 --> 00:00:34,070 Assim, mesmo que podemos nos reunir uma vez ou duas vezes por semana, aqui em 11 00:00:34,070 --> 00:00:36,420 Sanders, sei que muito de sua experiência neste curso 12 00:00:36,420 --> 00:00:39,330 vai ser muito hands-on em ao lado de seus colegas 13 00:00:39,330 --> 00:00:40,730 e do corpo docente. 14 00:00:40,730 --> 00:00:43,960 >> Então, vamos lá, Fall 2012. 15 00:00:43,960 --> 00:00:47,530 Então, lembro que a última vez que terminou com uma nota de 16 00:00:47,530 --> 00:00:50,460 imprecisão, falando sobre a representação de números. 17 00:00:50,460 --> 00:00:52,950 E nós olhamos uma das falhas que aconteceram, no 18 00:00:52,950 --> 00:00:54,920 mundo real, quando se trata de mal-entendido 19 00:00:54,920 --> 00:00:55,890 como os computadores funcionam. 20 00:00:55,890 --> 00:00:58,590 Bem, hoje nós vamos revisitar mais uma daquelas idéias como 21 00:00:58,590 --> 00:01:01,410 bem como continuar a discussão do cliente CS50 22 00:01:01,410 --> 00:01:04,090 e C eo que significa realmente para o programa. 23 00:01:04,090 --> 00:01:06,430 Mas, primeiro, apenas um par de anúncios de redemoinho. 24 00:01:06,430 --> 00:01:08,930 >> Seções começam neste domingo, e na primeira semana é sempre uma 25 00:01:08,930 --> 00:01:11,030 pouco de um início rápido, porque só tenho em 26 00:01:11,030 --> 00:01:12,620 formas sua seção. 27 00:01:12,620 --> 00:01:14,450 Estamos fazendo o mesmo, agora, com os companheiros de ensino, agora 28 00:01:14,450 --> 00:01:16,410 que eles sabem seus horários, por isso estamos visando, por 29 00:01:16,410 --> 00:01:19,380 Sábado de manhã, para acompanhar com você, com sua seção 30 00:01:19,380 --> 00:01:20,760 atribuição e TF. 31 00:01:20,760 --> 00:01:22,770 Perceba que eles vão começar no dia seguinte, domingo 32 00:01:22,770 --> 00:01:24,510 ou segunda-feira ou terça-feira. 33 00:01:24,510 --> 00:01:27,730 E então vamos acomodar as mudanças de seção que possam surgir 34 00:01:27,730 --> 00:01:28,690 nos dias que virão. 35 00:01:28,690 --> 00:01:31,590 As horas de expediente, entretanto, são, mais uma vez, esta noite, 08:00 a 11, em 36 00:01:31,590 --> 00:01:33,740 Annenberg, bem como amanhã à noite. 37 00:01:33,740 --> 00:01:36,150 Mesmo que os conjuntos de problemas são geralmente devido às quintas-feiras 38 00:01:36,150 --> 00:01:39,020 ao meio-dia, percebe que tem até cinco dias de atraso para gastar, 39 00:01:39,020 --> 00:01:42,430 portanto, a disponibilidade de horário de expediente nas quintas-feiras se 40 00:01:42,430 --> 00:01:45,930 lhe dinheiro em um desses dias de atraso e, assim, apresentar 41 00:01:45,930 --> 00:01:47,070 algo na sexta-feira. 42 00:01:47,070 --> 00:01:50,850 Deixe-me sugerir que Scratch é entre o mais divertido, entre os 43 00:01:50,850 --> 00:01:52,390 mais baixas importantes conjuntos de problemas. 44 00:01:52,390 --> 00:01:55,160 E eu gostaria de pendurar os dias de atraso, estrategicamente, apenas 45 00:01:55,160 --> 00:01:57,380 para o final do semestre, quando a vida começa a ficar no caminho 46 00:01:57,380 --> 00:01:59,470 com exames semestrais e outras classes. 47 00:01:59,470 --> 00:02:01,580 Definir um problema, entretanto, seria publicado no seu curso 48 00:02:01,580 --> 00:02:06,080 site nesta sexta-feira, como será a caminhada do curso 49 00:02:06,080 --> 00:02:08,789 através de vídeo, que será filmado em 02:30 na sexta-feira 50 00:02:08,789 --> 00:02:11,890 e, em seguida, publicado online no dia seguinte. 51 00:02:11,890 --> 00:02:13,880 >> Assim, terminou na segunda-feira. 52 00:02:13,880 --> 00:02:15,450 Eu quero - na verdade, uma nota aqui. 53 00:02:15,450 --> 00:02:18,870 Como as classes - porque Sanders não é exatamente emprestam 54 00:02:18,870 --> 00:02:22,220 se a Q & A ocasional e para trás muito bem, estamos 55 00:02:22,220 --> 00:02:24,030 vai tentar algo um pouco este ano novo, em que 56 00:02:24,030 --> 00:02:26,160 se você não está confortável levantar a mão ou você só 57 00:02:26,160 --> 00:02:28,800 prefere não levantar a mão em uma sala como esta, 58 00:02:28,800 --> 00:02:30,710 vamos ter alguns dos companheiros de ensino e CAs 59 00:02:30,710 --> 00:02:33,260 cs50.net/discuss tripulação durante a palestra. 60 00:02:33,260 --> 00:02:35,440 Então se você tem uma pergunta, porque eu estava completamente 61 00:02:35,440 --> 00:02:37,510 claro sobre algo ou você está curioso sobre alguns 62 00:02:37,510 --> 00:02:39,640 tópico, tente postar lá. 63 00:02:39,640 --> 00:02:42,670 Marcá-lo com um rótulo de Palestra, e nós vamos fazer o nosso melhor 64 00:02:42,670 --> 00:02:45,430 hoje e na próxima semana - nós tentar fazer isso - para área de TI 65 00:02:45,430 --> 00:02:47,990 em suporte electrónico, online, ou se ele se sente como deveríamos 66 00:02:47,990 --> 00:02:50,430 realmente enfrentá-lo em massa, um dos companheiros de ensino ou 67 00:02:50,430 --> 00:02:52,080 CAs vai levantar a mão e pedir 68 00:02:52,080 --> 00:02:53,480 anonimamente em seu nome. 69 00:02:53,480 --> 00:02:55,650 Então, vamos tentar dar um presente e ver como isso funciona bem. 70 00:02:55,650 --> 00:02:58,540 Mas, por todos os meios, continuam a levantar as mãos, como você gostaria. 71 00:02:58,540 --> 00:03:11,420 >> Então última vez que revelou que 10% ou um décimo não é, em 72 00:03:11,420 --> 00:03:13,840 fato, 0,1, como você foi ensinado há muitos anos. 73 00:03:13,840 --> 00:03:15,390 É, de facto, um valor como este. 74 00:03:15,390 --> 00:03:16,970 Mas isso não é totalmente verdadeiro, certo? 75 00:03:16,970 --> 00:03:19,585 Só temos esta restrição em computadores em que, se você 76 00:03:19,585 --> 00:03:22,450 apenas têm uma quantidade finita de memória, a RAM, ou mais 77 00:03:22,450 --> 00:03:25,220 especificamente bits, bem, há apenas um número finito 78 00:03:25,220 --> 00:03:26,980 de coisas que você pode representar. 79 00:03:26,980 --> 00:03:29,780 Por exemplo, se temos o número zero, e queremos 80 00:03:29,780 --> 00:03:32,790 representar em binário, usando oito bits, onde um pouco, 81 00:03:32,790 --> 00:03:34,710 novamente, é um zero ou um um, poderíamos 82 00:03:34,710 --> 00:03:39,240 representá-lo como 00000000. 83 00:03:39,240 --> 00:03:41,160 E isso é um pouco desnecessariamente detalhado. 84 00:03:41,160 --> 00:03:43,700 Assim como no sistema decimal, no mundo real, 85 00:03:43,700 --> 00:03:47,040 Geralmente, se você quiser escrever o número 123, que 86 00:03:47,040 --> 00:03:52,240 seres humanos provavelmente não escrevo 00000123 embora, 87 00:03:52,240 --> 00:03:53,940 funcionalmente, que é exatamente o mesmo número. 88 00:03:53,940 --> 00:03:56,580 Nós apenas uma gota zeros à esquerda, por assim dizer. 89 00:03:56,580 --> 00:03:58,270 >> Em binário, podemos fazer o mesmo. 90 00:03:58,270 --> 00:04:01,440 Binário e zero zero, e binário é apenas zero. 91 00:04:01,440 --> 00:04:02,870 Você só precisa de um único bit. 92 00:04:02,870 --> 00:04:05,020 Mas, de novo, a unidade de medida mais comum no mundo 93 00:04:05,020 --> 00:04:07,820 da computação é bytes, oito bits. 94 00:04:07,820 --> 00:04:09,720 Só porque um pouco, bastante inútil. 95 00:04:09,720 --> 00:04:12,020 Oito bits, não muito útil, mas pelo menos é mais 96 00:04:12,020 --> 00:04:14,280 úteis do que uma única unidade de medida. 97 00:04:14,280 --> 00:04:17,100 Assim, com oito bits, vamos normalmente representam binário. 98 00:04:17,100 --> 00:04:20,459 Portanto, temos aqui os números zero, um, dois, e então, como 99 00:04:20,459 --> 00:04:24,200 Nate fez em nosso vídeo última quarta-feira, podemos continuar 100 00:04:24,200 --> 00:04:25,940 contando até sete, oito. 101 00:04:25,940 --> 00:04:27,860 E então, se usamos mais e mais bits, nós 102 00:04:27,860 --> 00:04:29,880 pode contar até o infinito. 103 00:04:29,880 --> 00:04:32,800 Mas se você só tem um número finito destes bits, como é 104 00:04:32,800 --> 00:04:35,030 o caso de qualquer sistema de computador, ou mesmo de mísseis 105 00:04:35,030 --> 00:04:36,670 sistema, bem, na verdade você só tem um 106 00:04:36,670 --> 00:04:37,900 quantidade finita de precisão. 107 00:04:37,900 --> 00:04:41,290 Então se você quer para representar o número como 0,1, bem, o 108 00:04:41,290 --> 00:04:43,410 computador tem que escolher. 109 00:04:43,410 --> 00:04:45,970 E se ele só tem um número finito de números que pode 110 00:04:45,970 --> 00:04:50,490 representar, pode chegar perto de 0,1 por você, mas não pode 111 00:04:50,490 --> 00:04:53,730 necessariamente dar-lhe exatamente o valor que você deseja. 112 00:04:53,730 --> 00:04:55,660 E este é apenas um dos desafios de computadores, 113 00:04:55,660 --> 00:04:57,090 debaixo do capô, felizmente. 114 00:04:57,090 --> 00:04:59,110 >> À medida que avançamos mais no semestre, o nível mais baixo estes 115 00:04:59,110 --> 00:05:02,310 detalhes tornam-se muito menos interessante, mas certamente o 116 00:05:02,310 --> 00:05:05,700 aplicação dessas idéias pode ter um mundo muito real 117 00:05:05,700 --> 00:05:06,760 ramificações. 118 00:05:06,760 --> 00:05:08,190 Um deles é um pouco diversão. 119 00:05:08,190 --> 00:05:12,150 Como muitos de vocês já viram o Office Space incrível filme? 120 00:05:12,150 --> 00:05:13,620 Se você não tem, que é o seu não-oficial 121 00:05:13,620 --> 00:05:14,370 lição de casa para a semana. 122 00:05:14,370 --> 00:05:16,730 Mas em Office Space, os companheiros em que o filme tome 123 00:05:16,730 --> 00:05:19,900 vantagem de exatamente essa idéia, mas eles realmente roubou 124 00:05:19,900 --> 00:05:21,270 de outro filme que você pode ter 125 00:05:21,270 --> 00:05:22,760 visto, até mesmo anos antes. 126 00:05:22,760 --> 00:05:24,920 Então deixe-me dar-lhe alguns segundos de este trailer de 127 00:05:24,920 --> 00:05:27,470 este filme incrível e isso é muito 128 00:05:27,470 --> 00:05:28,340 academicamente relevante. 129 00:05:28,340 --> 00:05:30,310 >> [JOGOS DE FILME] 130 00:05:30,310 --> 00:05:32,240 Na verdade, estou sendo promovido. 131 00:05:32,240 --> 00:05:33,360 Eu posso programar um vírus que vai rasgar que 132 00:05:33,360 --> 00:05:34,460 coloque grande momento. 133 00:05:34,460 --> 00:05:35,770 Bem, como é que funciona? 134 00:05:35,770 --> 00:05:37,836 Toda vez que há uma transação bancária onde o interesse é 135 00:05:37,836 --> 00:05:40,154 computadorizada, existem milhares por dia, o computador acaba 136 00:05:40,154 --> 00:05:41,040 com essas frações de um centavo. 137 00:05:41,040 --> 00:05:43,050 Mas eu não vou fazer nada ilegal. 138 00:05:43,050 --> 00:05:46,730 Ilegal? Samir, este é a América. 139 00:05:46,730 --> 00:05:48,010 Você tem que jurar a Deus. 140 00:05:48,010 --> 00:05:51,870 Se ninguém sabe sobre isso, mas nós, certo? Nenhum membro da família, não 141 00:05:51,870 --> 00:05:52,490 namoradas, ninguém. 142 00:05:52,490 --> 00:05:53,882 [Inaudível]. 143 00:05:53,882 --> 00:05:57,594 Não se preocupe, cara, eu não vou contar pra ninguém quer. 144 00:05:57,594 --> 00:05:59,680 [Filme termina] 145 00:05:59,680 --> 00:06:01,900 >> Tudo bem, então talvez eu encontrei este filme melhor do que a maioria 146 00:06:01,900 --> 00:06:05,530 pessoas aqui, mas em qualquer caso, o vírus que foram 147 00:06:05,530 --> 00:06:06,400 tentando criar - 148 00:06:06,400 --> 00:06:08,410 e no cinema, a qualquer hora que eles chamam algo de um vírus, 149 00:06:08,410 --> 00:06:09,770 geralmente não é realmente um vírus. 150 00:06:09,770 --> 00:06:11,600 É apenas um programa que alguém escreveu para fazer algo. 151 00:06:11,600 --> 00:06:13,800 E, neste caso, os caras estavam tentando escrever um programa 152 00:06:13,800 --> 00:06:16,610 que se aproveitou de sua empresa chamada Innotech de 153 00:06:16,610 --> 00:06:19,740 sistema de computação em que, computadores, também, mesmo quando 154 00:06:19,740 --> 00:06:21,350 trata de dinheiro, pode não necessariamente 155 00:06:21,350 --> 00:06:23,490 representam dinheiro com precisão. 156 00:06:23,490 --> 00:06:27,630 Assim, mesmo que você pode ter $ 0,10 em sua conta bancária, 157 00:06:27,630 --> 00:06:31,060 0,10, bem, o computador pode realmente acho que você tem 158 00:06:31,060 --> 00:06:33,560 este centavos muitos em sua conta bancária. 159 00:06:33,560 --> 00:06:35,750 E então o que esses caras estavam aspirando a fazer - e eles 160 00:06:35,750 --> 00:06:38,240 roubou a idéia, ao que parece de Superman III, onde 161 00:06:38,240 --> 00:06:41,210 Richard Pryor fez a mesma coisa - eles eram essencialmente 162 00:06:41,210 --> 00:06:44,880 escrever programas que aspiram a ocupar toda a fuga 163 00:06:44,880 --> 00:06:46,930 números, todos os pequenos, minúsculos, pequenas frações de 164 00:06:46,930 --> 00:06:50,160 tostões, e siphoning aqueles fora de forma que os seres humanos só 165 00:06:50,160 --> 00:06:52,620 pensamento, oh, é apenas 0,10 dólares lá, mas todos aqueles que 166 00:06:52,620 --> 00:06:54,410 números finais, eventualmente, adicionar-se. 167 00:06:54,410 --> 00:06:57,490 Então, uma idéia maravilhosa e divertida em que saiu pela culatra 168 00:06:57,490 --> 00:06:58,250 filme em particular. 169 00:06:58,250 --> 00:07:01,800 >> Mas no mundo real, também, há muito mais sobre 170 00:07:01,800 --> 00:07:03,190 implicações destes tipos de coisas. 171 00:07:03,190 --> 00:07:05,450 E uma das razões para mergulhar no campo do computador 172 00:07:05,450 --> 00:07:07,620 ciência é, de novo, a sua aplicabilidade não ao 173 00:07:07,620 --> 00:07:09,740 ciências da engenharia sozinho, mas apenas para 174 00:07:09,740 --> 00:07:10,650 outros campos também. 175 00:07:10,650 --> 00:07:14,760 Portanto, este é um olhar menos alegre com o que pode dar errado, mas 176 00:07:14,760 --> 00:07:17,630 também é bastante abertura dos olhos, eu acho que, quando se trata de 177 00:07:17,630 --> 00:07:20,760 entender exatamente como onipresente tecnologias como 178 00:07:20,760 --> 00:07:22,870 computadores e de programação ou nos dias de hoje, 179 00:07:22,870 --> 00:07:23,930 sob a forma de software. 180 00:07:23,930 --> 00:07:26,500 Portanto, este próximo clipe é apenas cerca de seis minutos, continua 181 00:07:26,500 --> 00:07:30,320 onde paramos da última vez, mas nos permite olhar um pouco 182 00:07:30,320 --> 00:07:33,370 mais em profundidade em um tal de estas questões. 183 00:07:33,370 --> 00:07:35,270 Deixe-me ir direto ao ponto em que parou, 184 00:07:35,270 --> 00:07:37,780 que estava bem aqui. 185 00:07:37,780 --> 00:07:41,580 E nós temos a parte dois de dois, por cerca de seis minutos aqui. 186 00:07:41,580 --> 00:07:41,980 >> [MOVIE PLAY] 187 00:07:41,980 --> 00:07:45,430 Atormentado tecnologia de foguetes modernos. 188 00:07:45,430 --> 00:07:49,280 Em 1991, com o início da Guerra do Golfo, o Patriot 189 00:07:49,280 --> 00:07:51,350 míssil experimentou um tipo similar de 190 00:07:51,350 --> 00:07:52,645 problema de conversão de número. 191 00:07:52,645 --> 00:07:57,460 E, como resultado, 20 pessoas, 20 soldados norte-americanos, foram mortos 192 00:07:57,460 --> 00:08:01,130 e cerca de 100 ficaram feridos, quando o Patriot, que deveria 193 00:08:01,130 --> 00:08:03,400 para proteger contra Scuds entrada, 194 00:08:03,400 --> 00:08:06,020 não conseguiu disparar um míssil. 195 00:08:06,020 --> 00:08:09,350 >> Quando o Iraque invadiu o Kuwait e América lançou um deserto 196 00:08:09,350 --> 00:08:13,530 Tempestade no início de 1991, as baterias de mísseis Patriot foram 197 00:08:13,530 --> 00:08:16,970 implantado para proteger a Arábia Saudita e Israel a partir do Iraque 198 00:08:16,970 --> 00:08:19,810 Mísseis Scud ataques. 199 00:08:19,810 --> 00:08:23,740 O Patriot é um EUA de médio alcance do sistema superfície-ar, 200 00:08:23,740 --> 00:08:26,370 fabricado pela empresa Raytheon. 201 00:08:26,370 --> 00:08:30,860 O tamanho do interceptor Patriot em si, é sobre 202 00:08:30,860 --> 00:08:35,650 cerca de 20 metros de comprimento e pesa cerca de 2.000 quilos. 203 00:08:35,650 --> 00:08:38,809 E ele carrega uma ogiva de cerca de - Eu acho que é mais ou menos 204 00:08:38,809 --> 00:08:40,169 150 libras. 205 00:08:40,169 --> 00:08:45,820 E a ogiva em si é um explosivo de alta que tem 206 00:08:45,820 --> 00:08:48,120 fragmentos em torno dele. 207 00:08:48,120 --> 00:08:51,870 A carcaça da ogiva é projetado para agir como chumbo grosso. 208 00:08:51,870 --> 00:08:54,920 Os mísseis são realizadas quatro por recipiente e são 209 00:08:54,920 --> 00:08:57,850 transportado por um semi-reboque. 210 00:08:57,850 --> 00:09:02,940 >> O Patriota sistema anti-míssil remonta pelo menos a 211 00:09:02,940 --> 00:09:05,530 20 anos. 212 00:09:05,530 --> 00:09:09,150 Ele foi originalmente concebido como um míssil de defesa aérea para 213 00:09:09,150 --> 00:09:12,920 derrubar aviões inimigos, na primeira Guerra do Golfo. 214 00:09:12,920 --> 00:09:17,700 Quando a guerra chegou, o Exército queria usá-lo para atirar 215 00:09:17,700 --> 00:09:19,880 Scuds para baixo, e não aviões. 216 00:09:19,880 --> 00:09:24,860 A Força Aérea do Iraque não era tanto de um problema, mas o Exército 217 00:09:24,860 --> 00:09:27,260 estava preocupado com Scuds. 218 00:09:27,260 --> 00:09:30,810 E assim eles tentaram atualizar o Patriot. 219 00:09:30,810 --> 00:09:33,770 Interceptar um míssil inimigo viajando a MACH 5 ia 220 00:09:33,770 --> 00:09:35,790 a ser bastante difícil. 221 00:09:35,790 --> 00:09:39,460 Mas quando o Patriot foi levado em serviço, o Exército 222 00:09:39,460 --> 00:09:43,730 não estava ciente de uma modificação do Iraque, que fez sua 223 00:09:43,730 --> 00:09:46,510 Scuds quase impossível de bater. 224 00:09:46,510 --> 00:09:50,040 >> O que aconteceu é que eram os Scuds 225 00:09:50,040 --> 00:09:51,360 chegando eram instáveis. 226 00:09:51,360 --> 00:09:52,266 Eles estavam balançando. 227 00:09:52,266 --> 00:09:56,300 A razão para isto foi o iraquianos, a fim de obter 600 228 00:09:56,300 --> 00:10:00,650 quilômetros para fora de um míssil faixa de 300 quilômetros, levou 229 00:10:00,650 --> 00:10:02,423 peso fora da ogiva frente e 230 00:10:02,423 --> 00:10:03,990 feita a ogiva isqueiro. 231 00:10:03,990 --> 00:10:08,700 Portanto, agora o Patriot está tentando entrar no Scud, e mais de 232 00:10:08,700 --> 00:10:11,192 o tempo, a esmagadora maioria do tempo, seria 233 00:10:11,192 --> 00:10:13,450 apenas voar pelo Scud. 234 00:10:13,450 --> 00:10:16,300 Uma vez que os operadores do sistema Patriot percebeu o Patriot 235 00:10:16,300 --> 00:10:20,160 errou o alvo, eles detonaram a ogiva Patriota. 236 00:10:20,160 --> 00:10:22,760 Para evitar eventuais sinistros, foi permitido 237 00:10:22,760 --> 00:10:25,100 a cair para o chão. 238 00:10:25,100 --> 00:10:29,400 Isso foi o que a maioria das pessoas viu, como bolas de fogo no céu grandes, 239 00:10:29,400 --> 00:10:34,930 e incompreendido como interceptações de ogivas Scud. 240 00:10:34,930 --> 00:10:37,490 >> Embora, no céu à noite, Patriots parecia ser 241 00:10:37,490 --> 00:10:41,570 Scuds destruído com sucesso, em Dhahran, não poderia haver 242 00:10:41,570 --> 00:10:43,730 erro sobre seu desempenho. 243 00:10:43,730 --> 00:10:46,370 Lá, o sistema Patriot radar perdeu o controle de um 244 00:10:46,370 --> 00:10:50,090 entrada Scud e nunca lançado devido 245 00:10:50,090 --> 00:10:51,340 a uma falha do software. 246 00:10:54,030 --> 00:10:57,050 Foi a israelenses que descobriu que quanto mais tempo 247 00:10:57,050 --> 00:11:02,000 o sistema foi ligado, quanto maior for a diferença de tempo tornou-se, 248 00:11:02,000 --> 00:11:05,530 devido a um relógio incorporado no computador do sistema. 249 00:11:05,530 --> 00:11:09,060 Cerca de duas semanas antes da tragédia em Dhahran, o 250 00:11:09,060 --> 00:11:11,730 Israelenses relataram ao Departamento de Defesa que o 251 00:11:11,730 --> 00:11:13,250 sistema estava perdendo tempo. 252 00:11:13,250 --> 00:11:15,610 Depois de cerca de oito horas de corrida, eles notaram que o 253 00:11:15,610 --> 00:11:18,330 sistema foi se tornando visivelmente menos preciso. 254 00:11:18,330 --> 00:11:20,910 O Departamento de Defesa respondeu dizendo todos 255 00:11:20,910 --> 00:11:23,710 as baterias Patriot não deixar os sistemas 256 00:11:23,710 --> 00:11:25,450 por um tempo longo. 257 00:11:25,450 --> 00:11:28,010 Eles nunca disseram que muito tempo foi - 8 horas, 10 258 00:11:28,010 --> 00:11:29,690 horas, 1.000 horas. 259 00:11:29,690 --> 00:11:31,940 Ninguém sabia. 260 00:11:31,940 --> 00:11:35,020 >> A bateria de mísseis Patriot estacionado no quartel em Dhahran 261 00:11:35,020 --> 00:11:39,030 e o seu relógio interno tinha sido danificado em mais de 100 horas em 262 00:11:39,030 --> 00:11:42,240 na noite de 25 de fevereiro. 263 00:11:42,240 --> 00:11:46,580 É monitorado o tempo com uma precisão de cerca de um décimo de segundo. 264 00:11:46,580 --> 00:11:48,830 Agora, um décimo de segundo é um número interessante porque 265 00:11:48,830 --> 00:11:52,660 ele não pode ser expresso em binário, exactamente, o que significa 266 00:11:52,660 --> 00:11:54,940 ele não pode ser expressa em qualquer exactamente 267 00:11:54,940 --> 00:11:57,330 computador digital moderno. 268 00:11:57,330 --> 00:11:59,130 É difícil de acreditar. 269 00:11:59,130 --> 00:12:01,720 Mas usar isso como um exemplo. 270 00:12:01,720 --> 00:12:04,090 >> Vamos pegar o número um terceiro. 271 00:12:04,090 --> 00:12:07,950 Um terceiro não pode ser expressa em decimal, exactamente. 272 00:12:07,950 --> 00:12:12,710 Um terço é 0,333 acontecendo para o infinito. 273 00:12:12,710 --> 00:12:17,050 Não há nenhuma maneira de fazer isso com absoluta precisão em decimal. 274 00:12:17,050 --> 00:12:19,340 Isso é exatamente o mesmo tipo de problema que aconteceu em 275 00:12:19,340 --> 00:12:20,190 o Patriot. 276 00:12:20,190 --> 00:12:24,680 Quanto mais tempo o sistema funcionou, o pior erro o tempo se tornou. 277 00:12:24,680 --> 00:12:28,640 Depois de 100 horas de operação, o erro em tempo foi apenas 278 00:12:28,640 --> 00:12:29,870 cerca de um terço de um segundo. 279 00:12:29,870 --> 00:12:34,790 Mas em termos de alvo um míssil viajando a Mach 5, 280 00:12:34,790 --> 00:12:39,140 que resultou em um erro de rastreamento de mais de 600 metros. 281 00:12:39,140 --> 00:12:42,510 Seria um erro fatal para os soldados em Dhahran. 282 00:12:42,510 --> 00:12:48,680 >> O que aconteceu é um lançamento de Scud foi detectado pelo alerta precoce 283 00:12:48,680 --> 00:12:52,440 satélites e eles sabiam que o Scud estava chegando em sua 284 00:12:52,440 --> 00:12:53,350 direção geral. 285 00:12:53,350 --> 00:12:55,470 Eles não sabiam de onde vinha. 286 00:12:55,470 --> 00:12:58,210 Era agora até o componente radar do Patriot 287 00:12:58,210 --> 00:13:01,920 sistema, defendendo Dhahran, para localizar e acompanhar o 288 00:13:01,920 --> 00:13:03,700 míssil inimigo de entrada. 289 00:13:03,700 --> 00:13:05,390 O radar foi muito inteligente. 290 00:13:05,390 --> 00:13:07,570 Você realmente controlar a posição do Scud e depois 291 00:13:07,570 --> 00:13:10,340 prever onde ele provavelmente seria a próxima vez que o 292 00:13:10,340 --> 00:13:12,040 radar enviou um pulso para fora. 293 00:13:12,040 --> 00:13:13,730 Que foi chamado de o portão alcance. 294 00:13:13,730 --> 00:13:18,820 Então, uma vez que o Patriot decide passou tempo suficiente para ir 295 00:13:18,820 --> 00:13:22,600 para trás e verificar o próximo local para este detectado 296 00:13:22,600 --> 00:13:24,190 objeto, ele vai voltar. 297 00:13:24,190 --> 00:13:27,940 Então, quando ele voltou para o lugar errado, então não vê 298 00:13:27,940 --> 00:13:31,000 objeto, e decidir que não havia objeto. 299 00:13:31,000 --> 00:13:34,370 Foi uma falsa detecção e cai na pista. 300 00:13:34,370 --> 00:13:37,630 >> O Scud entrada desapareceu da tela do radar. 301 00:13:37,630 --> 00:13:41,300 E, segundos depois, ele bateu no quartel. O Scud 302 00:13:41,300 --> 00:13:44,730 matou 28 e foi o último demitido durante 303 00:13:44,730 --> 00:13:46,450 a primeira Guerra do Golfo. 304 00:13:46,450 --> 00:13:50,570 Tragicamente, o software atualizado chegou em Dhahran 305 00:13:50,570 --> 00:13:52,060 no dia seguinte. 306 00:13:52,060 --> 00:13:56,210 E a falha de software havia sido fixado, fechando um capítulo de 307 00:13:56,210 --> 00:13:58,370 conturbada história do míssil Patriot. 308 00:14:01,790 --> 00:14:04,990 PATRIOT é na verdade um acrônimo para "Tracking Phased Array 309 00:14:04,990 --> 00:14:08,516 Interceptar de Target ". 310 00:14:08,516 --> 00:14:13,390 >> Tudo bem, então um resultado muito mais triste de não muito 311 00:14:13,390 --> 00:14:14,430 compreensão deste mundo. 312 00:14:14,430 --> 00:14:18,180 E o takeaway, realmente, a partir da película é que a solução 313 00:14:18,180 --> 00:14:20,790 lá foi reiniciar o seu sistema de defesa antimísseis 314 00:14:20,790 --> 00:14:21,770 de vez em quando. 315 00:14:21,770 --> 00:14:24,280 E assim, novamente, um dos objectivos deste curso, certamente 316 00:14:24,280 --> 00:14:26,900 em uma escala mais humilde do que estas aplicações, é 317 00:14:26,900 --> 00:14:30,710 olhos de todos realmente aberto para com exatamente como você ir sobre 318 00:14:30,710 --> 00:14:34,380 máquinas de fazer fazer o que você quer fazer e como você ir 319 00:14:34,380 --> 00:14:37,180 sobre fazer isso corretamente, enquanto que ao longo do caminho fazendo isso 320 00:14:37,180 --> 00:14:38,810 assim, de forma elegante, e assim por diante. 321 00:14:38,810 --> 00:14:41,680 E assim, hoje, vamos mergulhar em um pouco mais disso, mas 322 00:14:41,680 --> 00:14:44,210 de modo que nós não vamos muito rápido, principalmente para aqueles menos 323 00:14:44,210 --> 00:14:46,590 confortáveis, mas também para que se possa manter o interesse do 324 00:14:46,590 --> 00:14:49,390 aqueles mais confortável, vamos começar rapidamente com um pouco 325 00:14:49,390 --> 00:14:50,970 de resumo de algumas dessas idéias. 326 00:14:50,970 --> 00:14:53,710 E, novamente, pergunte, tanto em pessoa ou online, se você tiver 327 00:14:53,710 --> 00:14:56,320 perguntas para que possamos manter todos na mesma página. 328 00:14:56,320 --> 00:14:58,820 >> Assim, o aparelho CS50, passo rápido para trás, é 329 00:14:58,820 --> 00:15:02,360 o que, em suas próprias palavras? 330 00:15:02,360 --> 00:15:06,454 Tudo bem se você não tem idéia do que estas palavras podem ser ainda. 331 00:15:06,454 --> 00:15:07,830 [Inaudível] 332 00:15:07,830 --> 00:15:10,950 Ok, então uma interface universal para - 333 00:15:10,950 --> 00:15:11,900 que todos nós podemos compartilhar. 334 00:15:11,900 --> 00:15:12,470 Absolutamente. 335 00:15:12,470 --> 00:15:14,840 Assim, poderíamos, por exemplo, dizer-lhe para ir a algum 336 00:15:14,840 --> 00:15:16,910 site, o download deste software para Mac OS. 337 00:15:16,910 --> 00:15:19,140 Baixe este software para Windows, configurar em 338 00:15:19,140 --> 00:15:20,100 Desta forma, e que. 339 00:15:20,100 --> 00:15:22,370 Mas a realidade é, então, nos deparamos com inúmeros técnico 340 00:15:22,370 --> 00:15:23,200 apoiar questões. 341 00:15:23,200 --> 00:15:26,630 E também nos dias de hoje, muito do que está sendo feito do lado do servidor, 342 00:15:26,630 --> 00:15:28,490 no mundo da computação, especialmente quando se trata de 343 00:15:28,490 --> 00:15:31,460 desenvolvimento web e aplicações web based, é na verdade 344 00:15:31,460 --> 00:15:35,110 muitas vezes feito em computadores Unix ou Linux, ao contrário de 345 00:15:35,110 --> 00:15:36,800 Macs ou PCs com Windows. 346 00:15:36,800 --> 00:15:39,240 >> Assim, entre os prós, então, de usar essa coisa chamada 347 00:15:39,240 --> 00:15:41,500 CS50 Appliance é todos nós vamos ter o mesmo ambiente. 348 00:15:41,500 --> 00:15:43,670 Então, todos estão na mesma página, não importa qual hardware você 349 00:15:43,670 --> 00:15:46,650 chegou ao campus com, mas também vai ser meter em exatamente 350 00:15:46,650 --> 00:15:48,230 o mesmo ambiente que você vai usar para 351 00:15:48,230 --> 00:15:51,080 extremidade semestre, bem como para o desenvolvimento web, bem como no 352 00:15:51,080 --> 00:15:53,580 futuro para aplicações reais do mesmo. 353 00:15:53,580 --> 00:15:56,350 Então, mais concretamente, o aparelho CS50 é uma peça de livre 354 00:15:56,350 --> 00:15:59,400 software que permite que você execute um outro sistema operacional, 355 00:15:59,400 --> 00:16:02,670 Linux, neste caso, no seu próprio computador, de uma janela. 356 00:16:02,670 --> 00:16:04,750 Agora, você não pode apenas baixar o aparelho. 357 00:16:04,750 --> 00:16:08,170 Você precisa de um programa com o qual jogar ou executar o aparelho. 358 00:16:08,170 --> 00:16:11,220 E aquele pedaço de software é geralmente conhecido como um 359 00:16:11,220 --> 00:16:11,520 hypervisor. 360 00:16:11,520 --> 00:16:14,050 Hipervisores vir na forma de produtos como o VMware, 361 00:16:14,050 --> 00:16:15,820 Virtual Box, Parallels. 362 00:16:15,820 --> 00:16:18,390 Todos os tipos de empresas fazem software, livre e 363 00:16:18,390 --> 00:16:19,310 comercial, igualmente. 364 00:16:19,310 --> 00:16:21,480 O que você vai ver no Problema Set 1 são instruções sobre como 365 00:16:21,480 --> 00:16:23,440 obter o software gratuito com o qual a 366 00:16:23,440 --> 00:16:25,000 executar o Appliance CS50. 367 00:16:25,000 --> 00:16:28,060 E uma vez que você faz, você vai ter, em uma janela no seu Mac ou PC, 368 00:16:28,060 --> 00:16:30,710 um ambiente de trabalho que se parece muito como este, onde 369 00:16:30,710 --> 00:16:33,100 ele tem uma coisa-menu Iniciar, como na 370 00:16:33,100 --> 00:16:34,510 canto esquerdo inferior. 371 00:16:34,510 --> 00:16:38,030 Tem uma pasta Home, ou diretório Home, no canto superior esquerdo 372 00:16:38,030 --> 00:16:40,280 ali, uma lata de lixo, e assim por diante. 373 00:16:40,280 --> 00:16:43,450 Então vamos separar os detalhes necessários como vamos nós. 374 00:16:43,450 --> 00:16:46,430 >> Mas agora vamos começar a mergulhar em C. 375 00:16:46,430 --> 00:16:49,200 Então C é a linguagem de programação, semelhantes em espírito à 376 00:16:49,200 --> 00:16:52,390 Zero, mas muito menos gráfica, mas, ironicamente, longe 377 00:16:52,390 --> 00:16:54,730 mais poderosa, uma vez que você começa esclarecido com ele. 378 00:16:54,730 --> 00:16:58,970 Assim, em C, escrevemos programas, escrevendo código fonte, que é 379 00:16:58,970 --> 00:17:01,640 esta sintaxe do Inglês, semelhante às meias 380 00:17:01,640 --> 00:17:05,609 demonstração de que fizemos da última vez que lhe permite 381 00:17:05,609 --> 00:17:07,910 expressar-se com bastante precisão, se 382 00:17:07,910 --> 00:17:09,760 arcanely, para o computador. 383 00:17:09,760 --> 00:17:11,960 >> Então, que tipo de produto de software que você realmente precisa 384 00:17:11,960 --> 00:17:15,520 para escrever programas em uma linguagem como C, com base em nossa 385 00:17:15,520 --> 00:17:17,492 conversa na segunda-feira? 386 00:17:17,492 --> 00:17:19,650 [Inaudível] 387 00:17:19,650 --> 00:17:21,079 OK, você só precisa de um editor de texto. 388 00:17:21,079 --> 00:17:22,890 Você não precisa de nenhum software especial 389 00:17:22,890 --> 00:17:24,460 per se para escrever programas. 390 00:17:24,460 --> 00:17:27,220 Você só precisa de um editor de texto como o Bloco de Notas, no Windows, 391 00:17:27,220 --> 00:17:30,450 TextEdit no Mac, ou algo chamado gedit, no mundo da 392 00:17:30,450 --> 00:17:32,020 Linux, que vamos usar aqui. 393 00:17:32,020 --> 00:17:33,750 E é isso, de escrever os programas. 394 00:17:33,750 --> 00:17:35,480 >> Mas a escrita é apenas metade da equação. 395 00:17:35,480 --> 00:17:36,630 Você precisa então executá-los. 396 00:17:36,630 --> 00:17:38,320 Mas, a fim de executar programas - 397 00:17:38,320 --> 00:17:39,600 você não pode executar código fonte. 398 00:17:39,600 --> 00:17:41,500 Você, em vez de fazer o que a ele primeiro? 399 00:17:41,500 --> 00:17:41,900 Sim. 400 00:17:41,900 --> 00:17:43,200 DAVID J. MALAN: Você precisa 401 00:17:43,200 --> 00:17:44,130 compilá-lo. 402 00:17:44,130 --> 00:17:49,010 E, outra pessoa, a compilação do código-fonte significa - 403 00:17:49,010 --> 00:17:50,260 [Inaudível] 404 00:17:52,300 --> 00:17:52,700 DAVID J. MALAN: Exatamente. 405 00:17:52,700 --> 00:17:54,430 Traduzindo-o para zeros e uns. 406 00:17:54,430 --> 00:17:57,150 Porque todos nós, nestes dias, tem computadores que possuem processadores, 407 00:17:57,150 --> 00:18:00,350 quase todas as quais são feitas por uma companhia chamada Intel, e 408 00:18:00,350 --> 00:18:03,320 Intel Inside, significa que há esta dentro do seu cérebro 409 00:18:03,320 --> 00:18:04,990 computador, conhecido como o CPU. 410 00:18:04,990 --> 00:18:07,570 E uma das coisas que o cérebro faz é, ele sabe 411 00:18:07,570 --> 00:18:10,390 como entender os padrões de zeros e uns. 412 00:18:10,390 --> 00:18:13,240 Ele sabe o padrão de bits representa disso, o que 413 00:18:13,240 --> 00:18:15,500 padrão representa subtrações, o padrão de 414 00:18:15,500 --> 00:18:18,890 bits representam a impressão, e criando um som audível. 415 00:18:18,890 --> 00:18:22,450 >> Assim, em resumo, o processador, juntamente com o sistema operacional, 416 00:18:22,450 --> 00:18:25,230 que é um pedaço de software que roda em cima do CPU, 417 00:18:25,230 --> 00:18:26,050 por assim dizer. 418 00:18:26,050 --> 00:18:29,850 Juntos, esses dois pedaços sabe como executar programas que 419 00:18:29,850 --> 00:18:31,070 nós seres humanos escrever. 420 00:18:31,070 --> 00:18:34,040 >> Então, se eu vou para o Appliance CS50 aqui, eu preciso abrir 421 00:18:34,040 --> 00:18:35,660 um editor de texto e eu posso acessar este 422 00:18:35,660 --> 00:18:36,560 em um par de formas. 423 00:18:36,560 --> 00:18:39,060 I pode ir ao Menu, Programação, 424 00:18:39,060 --> 00:18:40,230 e então eu posso selecionar - 425 00:18:40,230 --> 00:18:40,810 Não, não esse menu. 426 00:18:40,810 --> 00:18:43,860 Eu posso ir para Acessórios / gedit aqui para abrir 427 00:18:43,860 --> 00:18:45,090 meu editor de texto pouco. 428 00:18:45,090 --> 00:18:48,030 Ou, mais simplesmente, que pode clicar neste ícone pouco no fundo 429 00:18:48,030 --> 00:18:48,970 canto esquerdo. 430 00:18:48,970 --> 00:18:50,430 E agora eu tenho esse ambiente aqui. 431 00:18:50,430 --> 00:18:52,590 É muito reminiscente de um editor de texto simples, com apenas 432 00:18:52,590 --> 00:18:53,820 uma ou duas diferenças. 433 00:18:53,820 --> 00:18:56,420 No topo, onde está o cursor piscando agora, este é o lugar onde 434 00:18:56,420 --> 00:18:57,900 Eu posso começar a escrever meu código. 435 00:18:57,900 --> 00:19:00,415 No fundo é essa coisa chamada janela de terminal. 436 00:19:00,415 --> 00:19:03,400 E que tipos de coisas que eu posso fazer neste 437 00:19:03,400 --> 00:19:04,960 o chamado janela de terminal? 438 00:19:04,960 --> 00:19:06,680 [Inaudível] 439 00:19:06,680 --> 00:19:07,890 >> Ok, então eu vou executar comandos. 440 00:19:07,890 --> 00:19:10,300 E alguns dos comandos que decorreu na segunda-feira foram um pouco 441 00:19:10,300 --> 00:19:15,070 enigmáticas no início, mas ls para a lista, cd para o diretório mudança, 442 00:19:15,070 --> 00:19:16,540 rm, para remover. 443 00:19:16,540 --> 00:19:19,680 Então, é uma espécie de caminho-escola velha de navegar no seu 444 00:19:19,680 --> 00:19:22,310 computador, usando apenas o teclado e comandos textuais, 445 00:19:22,310 --> 00:19:24,130 e não, em geral, utilizando um rato. 446 00:19:24,130 --> 00:19:25,960 Mas vamos ver, em pouco tempo, isso realmente nos dá uma 447 00:19:25,960 --> 00:19:28,520 pouco mais de potência e um pouco mais de precisão com a qual 448 00:19:28,520 --> 00:19:29,600 nos expressar. 449 00:19:29,600 --> 00:19:31,330 E então, aqui à esquerda, nós apenas estamos indo para ver, 450 00:19:31,330 --> 00:19:34,360 como iniciar o software de escrita, um pequeno resumo do 451 00:19:34,360 --> 00:19:36,350 programa que temos escrito no canto superior esquerdo. 452 00:19:36,350 --> 00:19:38,360 Mas vamos ver isso de novo antes do tempo. 453 00:19:38,360 --> 00:19:40,050 >> Então, vamos fazer algo bastante simples aqui. 454 00:19:40,050 --> 00:19:43,440 Deixe-me primeiro ir em frente e vá em Arquivo, Salvar, e eu sou apenas 455 00:19:43,440 --> 00:19:45,970 vai clicar em jharvard aqui, mais à esquerda, e 456 00:19:45,970 --> 00:19:48,930 jharvard é, novamente, o nome para a pasta do meu lar, minha 457 00:19:48,930 --> 00:19:52,110 arquivos pessoais, eu, agora sendo John Harvard, como todos vocês 458 00:19:52,110 --> 00:19:54,230 em breve será John Harvard neste ambiente. 459 00:19:54,230 --> 00:19:57,360 Ele tem este diretório Home, Meus Documentos e assim por diante, 460 00:19:57,360 --> 00:19:58,900 que eu quero salvar, agora, este arquivo dentro 461 00:19:58,900 --> 00:20:01,520 Então, eu vou chamá-lo hello.c. Então, eu estou indo para ir 462 00:20:01,520 --> 00:20:05,770 em frente e clique em Salvar e, agora, o que eu tenho aqui é um guia 463 00:20:05,770 --> 00:20:09,440 chamado hello.c, tanto como um outro tipo de editor. 464 00:20:09,440 --> 00:20:11,760 >> Então, agora deixe-me ir em frente e começar a escrever um programa. 465 00:20:11,760 --> 00:20:14,440 int main (void). 466 00:20:14,440 --> 00:20:18,150 E então eu fiz da última vez, printf, para impressão formatado, 467 00:20:18,150 --> 00:20:22,120 ("Olá, mundo!" 468 00:20:22,120 --> 00:20:24,500 );. 469 00:20:24,500 --> 00:20:25,630 Quase completa. 470 00:20:25,630 --> 00:20:27,130 Mas eu estou sentindo falta de um par de detalhes. 471 00:20:27,130 --> 00:20:30,210 O que está faltando a partir deste programa que eu realmente preciso para 472 00:20:30,210 --> 00:20:31,890 que ela realmente compilar? 473 00:20:31,890 --> 00:20:32,130 Sim. 474 00:20:32,130 --> 00:20:33,980 [Inaudível]? 475 00:20:33,980 --> 00:20:35,770 >> DAVID J. MALAN: Sim, então eu preciso incluir o padrão 476 00:20:35,770 --> 00:20:36,700 I / O biblioteca. 477 00:20:36,700 --> 00:20:39,470 Então isso precisa ir acima principal, então eu só vou 478 00:20:39,470 --> 00:20:40,790 fazer algum espaço para ele lá. 479 00:20:40,790 --> 00:20:44,420 E eu vou fazer # include. 480 00:20:44,420 --> 00:20:46,570 E observe os colchetes angulares lá. 481 00:20:46,570 --> 00:20:49,410 E como um aparte, gedit é um usuário pouco amigável, se 482 00:20:49,410 --> 00:20:52,420 às vezes, um pouco confuso, em que ele tenta ajudar a sua 483 00:20:52,420 --> 00:20:54,770 olhos perceber o que se alinha com o que. 484 00:20:54,770 --> 00:20:57,760 Assim, o fato de que meu cursor é bem próximo a este ângulo 485 00:20:57,760 --> 00:21:00,600 suporte, observe como está destacando o ângulo outro 486 00:21:00,600 --> 00:21:01,920 suporte mais um presente. 487 00:21:01,920 --> 00:21:03,770 E isso é só para chamar a minha atenção para o fato de que eu 488 00:21:03,770 --> 00:21:04,460 têm simetria. 489 00:21:04,460 --> 00:21:07,010 E simetria na programação geralmente é uma coisa boa. 490 00:21:07,010 --> 00:21:10,270 Da mesma forma, se eu passar meu cursor para o fim, observe como o 491 00:21:10,270 --> 00:21:13,630 chaves de linha para mostrar que, sim, eu tenho um aberto 492 00:21:13,630 --> 00:21:15,160 e um fechado, por assim dizer. 493 00:21:15,160 --> 00:21:16,640 >> Tudo bem, e eu posso fazer outra coisa. 494 00:21:16,640 --> 00:21:20,090 Não é estritamente necessário, mas uma boa prática, para dizer 495 00:21:20,090 --> 00:21:21,250 retornar 0. 496 00:21:21,250 --> 00:21:24,140 E 0 retorno faz o que para nós aqui? 497 00:21:24,140 --> 00:21:25,584 Ou significa o que? 498 00:21:25,584 --> 00:21:27,480 [Inaudível] 499 00:21:27,480 --> 00:21:28,300 DAVID J. MALAN: Mas nada está errado. 500 00:21:28,300 --> 00:21:30,280 E, francamente, é difícil para muito para dar errado em um 501 00:21:30,280 --> 00:21:31,250 programar esse curto. 502 00:21:31,250 --> 00:21:33,930 Então, eu só estou sendo super explícito que está tudo bem. 503 00:21:33,930 --> 00:21:36,740 Eu, o ser humano, quando eu executar este programa, provavelmente nunca 504 00:21:36,740 --> 00:21:38,150 ver que 0. 505 00:21:38,150 --> 00:21:41,070 Geralmente, esses números que estão sendo retornados de principal 506 00:21:41,070 --> 00:21:43,540 apenas elevar suas cabeças para os seres humanos quando 507 00:21:43,540 --> 00:21:44,360 algo der errado. 508 00:21:44,360 --> 00:21:46,640 E você começa um pouco de pop up de erro de sistema dizendo, um, 509 00:21:46,640 --> 00:21:48,760 dois, três, ou qualquer que seja o número que foi 510 00:21:48,760 --> 00:21:50,100 foi realmente devolvido. 511 00:21:50,100 --> 00:21:52,870 Então, qualquer coisa de errado com isso? 512 00:21:52,870 --> 00:21:55,300 [Inaudível] 513 00:21:55,300 --> 00:21:58,100 >> DAVID J. MALAN: Então este não é tanto um erro funcional 514 00:21:58,100 --> 00:21:59,240 mas uma estética. 515 00:21:59,240 --> 00:22:02,340 Eu provavelmente deveria colocar em um caractere de nova linha lá no 516 00:22:02,340 --> 00:22:05,240 final desta cadeia, para que realmente se mover o cursor para 517 00:22:05,240 --> 00:22:08,340 a próxima linha, eo programa só parece um pouco mais bonito. 518 00:22:08,340 --> 00:22:10,340 >> Então, agora deixe-me ir até a minha janela de terminal 519 00:22:10,340 --> 00:22:11,490 e zoom para trás dentro 520 00:22:11,490 --> 00:22:13,390 E essa coisa aqui, é chamado de linha de comando. 521 00:22:13,390 --> 00:22:16,760 É só me lembrar quem eu sou, jharvard @ aparelho, onde 522 00:22:16,760 --> 00:22:18,850 aparelho é o nome do computador em que estou. 523 00:22:18,850 --> 00:22:22,380 Entre parêntesis está presente til, o símbolo rabisco, que 524 00:22:22,380 --> 00:22:24,160 representa o que? 525 00:22:24,160 --> 00:22:25,590 AUDIÊNCIA: diretório Home. 526 00:22:25,590 --> 00:22:26,350 DAVID J. MALAN: diretório Home. 527 00:22:26,350 --> 00:22:29,350 Então, isso é apenas uma notação abreviada para dizer que estão em 528 00:22:29,350 --> 00:22:32,780 sua pasta pessoal onde todos os seus arquivos vão por padrão. 529 00:22:32,780 --> 00:22:36,080 Então, agora, aqui, eu posso digitar ls para a lista. 530 00:22:36,080 --> 00:22:40,020 E a única coisa que eu vejo aqui no momento é hello.c. 531 00:22:40,020 --> 00:22:41,770 E isso é bom, porque eu escrevi isso. 532 00:22:41,770 --> 00:22:44,380 >> Então deixe-me ir em frente e fizer Olá. 533 00:22:44,380 --> 00:22:46,830 E repare que eu não estou escrevendo fazer hello.c. 534 00:22:46,830 --> 00:22:50,300 Em vez disso, eu só estou escrevendo o nome de base do arquivo, Olá. 535 00:22:50,300 --> 00:22:53,690 E fazer, como vimos na segunda-feira, só vai deduzir que eu quero 536 00:22:53,690 --> 00:22:54,920 o. arquivo c. 537 00:22:54,920 --> 00:22:56,820 Então agora eu digitei fazer Olá. 538 00:22:56,820 --> 00:22:59,280 Agora eu vejo este comando bastante longo e vai continuar 539 00:22:59,280 --> 00:23:00,480 vendo isso de novo e de novo. 540 00:23:00,480 --> 00:23:03,620 Mas, para ser bumbum, claro, a palavra que só apareceu, 541 00:23:03,620 --> 00:23:05,340 que é o compilador real. 542 00:23:05,340 --> 00:23:08,200 Fazer é apenas um utilitário de construção. 543 00:23:08,200 --> 00:23:11,900 É apenas um programa mais amigável que me salva, no 544 00:23:11,900 --> 00:23:15,310 longo prazo, de ter que digitar tedioso longo 545 00:23:15,310 --> 00:23:17,020 comandos como esse. 546 00:23:17,020 --> 00:23:18,950 Então você pode executar Clang manualmente. 547 00:23:18,950 --> 00:23:20,530 Você pode digitar tudo isso manualmente. 548 00:23:20,530 --> 00:23:21,580 Assim fica muito tedioso. 549 00:23:21,580 --> 00:23:24,720 E assim que é apenas um programa que simplifica a nossa vida e 550 00:23:24,720 --> 00:23:27,120 executa comandos mais complexos para nós. 551 00:23:27,120 --> 00:23:29,410 >> Tudo bem, então agora o arquivo que eu deveria ter 552 00:23:29,410 --> 00:23:31,540 no meu diretório atual? 553 00:23:31,540 --> 00:23:36,310 Não apenas hello.c, mas também Olá. 554 00:23:36,310 --> 00:23:39,710 Então, se eu quero correr Olá, lembro que eu digo ponto barra, 555 00:23:39,710 --> 00:23:42,220 onde os meios de ponto ir para a pasta atual, onde quer que 556 00:23:42,220 --> 00:23:46,060 são, em seguida, execute o programa chamado Olá, e de fato, agora, 557 00:23:46,060 --> 00:23:48,080 Tenho Olá mundo. 558 00:23:48,080 --> 00:23:51,640 Tudo bem, todas as perguntas sobre o fluxo de trabalho ou a sintaxe de 559 00:23:51,640 --> 00:23:52,890 o que nós fizemos? 560 00:23:55,380 --> 00:23:57,040 >> Tudo bem, então vamos levar as coisas acima de um entalhe novamente. 561 00:23:57,040 --> 00:24:00,430 Portanto, este foi underwhelming apenas para escrever um programa que só 562 00:24:00,430 --> 00:24:01,790 já diz Olá, mundo. 563 00:24:01,790 --> 00:24:03,920 Então, nós mudamos, na segunda-feira, para dizer, Olá, David. 564 00:24:03,920 --> 00:24:06,560 É um pouco mais pessoal, mas tão difícil codificado como o 565 00:24:06,560 --> 00:24:07,410 primeira versão. 566 00:24:07,410 --> 00:24:08,780 Portanto, não tudo o que convincente. 567 00:24:08,780 --> 00:24:13,120 Mas existe, em C, certamente funções além 568 00:24:13,120 --> 00:24:15,700 impressão, funções que permitem obter entrada do usuário. 569 00:24:15,700 --> 00:24:17,990 E a maneira que fizemos isso, no outro dia, foi o seguinte. 570 00:24:17,990 --> 00:24:21,440 Antes que eu realmente imprimir algo, comecei a 571 00:24:21,440 --> 00:24:22,410 algo do usuário. 572 00:24:22,410 --> 00:24:23,370 Então deixe-me fazer isso de novo. 573 00:24:23,370 --> 00:24:26,580 >> String s, onde s é apenas o nome de um arbitrário, aqui, por uma 574 00:24:26,580 --> 00:24:30,600 cadeia, é igual a GetString. 575 00:24:30,600 --> 00:24:32,070 Então, o que foi GetString? 576 00:24:32,070 --> 00:24:34,630 É, obviamente, recebe uma string, com base em seu nome. 577 00:24:34,630 --> 00:24:37,560 Mas o que é, mais tecnicamente? 578 00:24:37,560 --> 00:24:38,440 É uma função. 579 00:24:38,440 --> 00:24:41,790 Portanto, é uma função que não vem com C per se. 580 00:24:41,790 --> 00:24:43,660 CS50 equipe escreveu isso. 581 00:24:43,660 --> 00:24:46,940 E assim, para usar isso, você não pode simplesmente incluir stdio.h, 582 00:24:46,940 --> 00:24:49,630 Você também precisa incluir o que? 583 00:24:49,630 --> 00:24:50,060 Sim. 584 00:24:50,060 --> 00:24:54,210 Então cs50.h, que é apenas um arquivo que escreveu alguns anos atrás. 585 00:24:54,210 --> 00:24:57,130 Nós instalado no aparelho para você ao lado 586 00:24:57,130 --> 00:24:58,490 todos os arquivos padrão. 587 00:24:58,490 --> 00:25:00,500 E assim, essas primeiras semanas de classe, usaremos 588 00:25:00,500 --> 00:25:02,820 isto só para simplificar o processo de fazer muito básico 589 00:25:02,820 --> 00:25:04,600 coisas como a entrada do usuário recebendo. 590 00:25:04,600 --> 00:25:07,370 Porque, como veremos em algumas semanas, a entrada do usuário entrar em um 591 00:25:07,370 --> 00:25:10,180 linguagem como C é surpreendentemente complexo, 592 00:25:10,180 --> 00:25:14,360 especialmente porque você não sabe com antecedência, geralmente, como 593 00:25:14,360 --> 00:25:17,030 muita coisa que o usuário vai digitar dentro 594 00:25:17,030 --> 00:25:20,340 E quando você não sabe a quantidade de dados que esperar, você não 595 00:25:20,340 --> 00:25:22,380 saber quanto de memória para alocar. 596 00:25:22,380 --> 00:25:25,480 E se você realmente tem um usuário que está tentando contraditório 597 00:25:25,480 --> 00:25:28,180 para invadir o seu sistema, travar o computador, bem, 598 00:25:28,180 --> 00:25:31,600 geralmente o primeiro método de ataque é, assim como eu fiz em 599 00:25:31,600 --> 00:25:34,950 Segunda-feira, digite uma seqüência inteira longa de caracteres aleatórios, 600 00:25:34,950 --> 00:25:37,020 aperte Enter, e ver o que quebra. 601 00:25:37,020 --> 00:25:40,800 Porque geralmente, se uma quebra do programa, que aponta para 602 00:25:40,800 --> 00:25:42,650 uma falha de segurança, potencialmente. 603 00:25:42,650 --> 00:25:45,250 Ele certamente aponta para você, programador, tendo feito uma 604 00:25:45,250 --> 00:25:49,050 erro, mas mais perigoso, você poderia ter feito um 605 00:25:49,050 --> 00:25:52,430 relacionadas à segurança erro, e, geralmente, nós vamos ver que 606 00:25:52,430 --> 00:25:54,840 é assim que as máquinas estão comprometidos para este dia, tanto 607 00:25:54,840 --> 00:25:56,620 no mundo da web e programas no 608 00:25:56,620 --> 00:25:58,070 linha de comando, como este. 609 00:25:58,070 --> 00:25:58,350 >> Tudo bem. 610 00:25:58,350 --> 00:26:00,460 Assim string s é igual GetString. 611 00:26:00,460 --> 00:26:03,380 Então, mais concretamente, agora, o que é que a linha 6 fazer aqui? 612 00:26:03,380 --> 00:26:05,640 Assim, a função do lado direito fica string, 613 00:26:05,640 --> 00:26:06,890 leva quantos argumentos? 614 00:26:09,458 --> 00:26:09,900 Okay. 615 00:26:09,900 --> 00:26:10,400 Então nenhum. 616 00:26:10,400 --> 00:26:11,360 A sanidade pouco verificar. 617 00:26:11,360 --> 00:26:15,380 Um argumento, mais uma vez, é apenas uma entrada a uma função de alterar 618 00:26:15,380 --> 00:26:17,250 seu comportamento padrão de alguma forma. 619 00:26:17,250 --> 00:26:19,540 Mas, neste caso, eu não quero alterar 620 00:26:19,540 --> 00:26:20,650 o comportamento dos GetString. 621 00:26:20,650 --> 00:26:22,430 Eu só queria ter uma seqüência. 622 00:26:22,430 --> 00:26:25,190 Então eu coloquei nada nos parênteses, e então eu coloquei um 623 00:26:25,190 --> 00:26:27,550 vírgula demarking o fim da linha de código. 624 00:26:27,550 --> 00:26:29,840 Agora, o sinal de igual não significa igual, per se. 625 00:26:29,840 --> 00:26:32,690 Isso significa atribuição, o que significa colocar o que fica 626 00:26:32,690 --> 00:26:36,060 emitidas no interior direito de tudo o que é do lado esquerdo. 627 00:26:36,060 --> 00:26:39,400 >> Então, à esquerda, dizemos que temos declarado 628 00:26:39,400 --> 00:26:41,630 string chamada s. 629 00:26:41,630 --> 00:26:44,240 E mais especificamente, temos memória alocada dentro de 630 00:26:44,240 --> 00:26:46,340 que nós vamos colocar os bits que representa uma seqüência de 631 00:26:46,340 --> 00:26:46,850 caracteres. 632 00:26:46,850 --> 00:26:49,400 Mas para hoje, nós alocamos 633 00:26:49,400 --> 00:26:51,450 ou declarada uma string. 634 00:26:51,450 --> 00:26:51,790 Tudo bem. 635 00:26:51,790 --> 00:26:54,760 Então, agora, uma vez que eu fiz isso, eu quero ligar o valor de 636 00:26:54,760 --> 00:26:56,535 s não, o valor de David. 637 00:26:56,535 --> 00:27:00,200 Então, isso é errado por quê? 638 00:27:03,060 --> 00:27:04,870 Então, este é apenas literalmente o s hard-coded. 639 00:27:04,870 --> 00:27:06,870 É para dizer "Olá, s", o que não é o que eu quero. 640 00:27:06,870 --> 00:27:07,790 Então, eu posso fazer isso. 641 00:27:07,790 --> 00:27:10,330 O sinal de porcentagem é um espaço reservado, mas agora eu preciso 642 00:27:10,330 --> 00:27:12,520 passar para imprimir um segundo argumento. 643 00:27:12,520 --> 00:27:15,160 Lembre-se que os argumentos para funções são separadas por 644 00:27:15,160 --> 00:27:20,300 vírgulas, de modo a vírgula que vem aqui eu coloquei após esta é a carta. 645 00:27:20,300 --> 00:27:23,740 E, neste contexto, agora, s é a variável, e printf, 646 00:27:23,740 --> 00:27:25,550 ao receber as duas entradas - 647 00:27:25,550 --> 00:27:29,440 a string na esquerda eo nome variável à direita - 648 00:27:29,440 --> 00:27:32,750 que vai ligar o último para a antiga para nós, e 649 00:27:32,750 --> 00:27:34,600 apenas imprimir uma seqüência de caracteres contendo bonita agradável 650 00:27:34,600 --> 00:27:36,770 o que é que nós digitado dentro 651 00:27:36,770 --> 00:27:37,560 >> Então, vamos tentar isso. 652 00:27:37,560 --> 00:27:38,860 Indo para a frente e zoom out, de volta 653 00:27:38,860 --> 00:27:40,250 a minha janela de terminal. 654 00:27:40,250 --> 00:27:41,840 Aumentar o zoom na parte inferior aqui. 655 00:27:41,840 --> 00:27:44,070 Redigite fazer Olá. 656 00:27:44,070 --> 00:27:45,870 Clang parece ter sido reprise. 657 00:27:45,870 --> 00:27:49,280 Eu estou indo para digitar. / Olá, Enter. 658 00:27:49,280 --> 00:27:52,145 Nada parece estar acontecendo ainda, mas é neste prompt 659 00:27:52,145 --> 00:27:55,700 que eu possa digitar algo como Nate, Enter, e agora temos 660 00:27:55,700 --> 00:27:56,380 Olá, Nate. 661 00:27:56,380 --> 00:27:59,600 E eu posso fazê-lo novamente com Rob, e assim por diante. 662 00:27:59,600 --> 00:28:03,410 Portanto, esperamos que agora este programa está se comportando como eu pretendo. 663 00:28:03,410 --> 00:28:05,720 >> Agora não, todo o usuário que amigável. 664 00:28:05,720 --> 00:28:07,930 Eu não tenho idéia o que está sendo esperado de mim. 665 00:28:07,930 --> 00:28:09,620 Então, nós certamente podemos limpar isso um pouco. 666 00:28:09,620 --> 00:28:13,270 Deixe-me voltar até aqui e, em vez de apenas mergulho e 667 00:28:13,270 --> 00:28:16,480 pedindo ao usuário para uma seqüência, deixe-me dizer explicitamente o 668 00:28:16,480 --> 00:28:17,750 usuário o que eu estou esperando. 669 00:28:17,750 --> 00:28:21,610 Então printf ("Digite uma string:" 670 00:28:21,610 --> 00:28:24,080 ); 671 00:28:24,080 --> 00:28:25,510 Então não variáveis ​​aqui. 672 00:28:25,510 --> 00:28:26,750 Não há sinais de por cento. 673 00:28:26,750 --> 00:28:28,550 Apenas a frase simples Inglês. 674 00:28:28,550 --> 00:28:34,030 Deixa-me ir para o fundo aqui e execute novamente o meu programa. 675 00:28:34,030 --> 00:28:35,380 Mas nada parece ter mudado. 676 00:28:35,380 --> 00:28:37,350 Por quê? 677 00:28:37,350 --> 00:28:38,380 Eu tenho que recompilar. 678 00:28:38,380 --> 00:28:39,570 Assim erro fácil de cometer. 679 00:28:39,570 --> 00:28:41,700 Mas você tem que não só salvar o arquivo, mas 680 00:28:41,700 --> 00:28:43,260 recompilar o programa. 681 00:28:43,260 --> 00:28:46,640 E assim se eu voltar a correr fazer Olá, agora Clang executado. 682 00:28:46,640 --> 00:28:51,800 Agora eu posso executar. / Olá. E agora eu vejo "Digite uma string:". 683 00:28:51,800 --> 00:28:52,050 Okay. 684 00:28:52,050 --> 00:28:53,440 Agora é um pouco mais user-friendly. 685 00:28:53,440 --> 00:28:55,850 Nate, Enter, Olá, Nate. 686 00:28:55,850 --> 00:28:57,310 >> Bem, vamos tentar de novo e começar a pensar 687 00:28:57,310 --> 00:28:58,080 sobre casos de canto. 688 00:28:58,080 --> 00:29:00,520 Assim como em Scratch, você é encorajado ou estão a ser 689 00:29:00,520 --> 00:29:03,180 encorajados na especificação de tipo de pensar sobre o que poderia ir 690 00:29:03,180 --> 00:29:06,610 errado se você não antecipar tudo o que o usuário pode fazer. 691 00:29:06,610 --> 00:29:08,050 Bugs, portanto, poderia ocorrer. 692 00:29:08,050 --> 00:29:09,710 Então, insira uma seqüência - 693 00:29:09,710 --> 00:29:11,130 o que é um caso de canto aqui? 694 00:29:11,130 --> 00:29:13,320 O que é um cenário que eu, o programador, não pode ter 695 00:29:13,320 --> 00:29:16,070 antecipado? 696 00:29:16,070 --> 00:29:17,600 Sim. 697 00:29:17,600 --> 00:29:17,920 Okay. 698 00:29:17,920 --> 00:29:22,060 Então, o que se eu digitar um número como este? 699 00:29:22,060 --> 00:29:22,500 Tudo bem. 700 00:29:22,500 --> 00:29:24,490 Então, ele ainda funciona. 701 00:29:24,490 --> 00:29:25,880 Gramaticalmente não faz sentido. 702 00:29:25,880 --> 00:29:27,180 Mas pelo menos o programa funciona. 703 00:29:27,180 --> 00:29:28,650 >> O que é outro caso esquina? 704 00:29:28,650 --> 00:29:29,610 Algo que eu não esperava. 705 00:29:29,610 --> 00:29:31,590 Sim? 706 00:29:31,590 --> 00:29:31,940 Okay. 707 00:29:31,940 --> 00:29:34,950 Então, nós poderíamos fazer algo como um número muito, muito grande. 708 00:29:34,950 --> 00:29:37,270 Então, vamos fazer isso aqui. 709 00:29:37,270 --> 00:29:40,880 Deixe-me afastar por um segundo, deixe-me destacar. 710 00:29:40,880 --> 00:29:42,250 Não é possível copiar e colar aqui. 711 00:29:42,250 --> 00:29:42,470 Tudo bem. 712 00:29:42,470 --> 00:29:44,440 Então eu não posso copiar e colar nesta janela de terminal, por isso vamos 713 00:29:44,440 --> 00:29:46,950 apenas simulá-lo. 714 00:29:46,950 --> 00:29:51,340 Deixe-me afastar, vai quebrar. 715 00:29:51,340 --> 00:29:52,700 Eu não vou fazer isso por muito tempo, porque não vai 716 00:29:52,700 --> 00:29:54,440 realmente quebrar neste programa. 717 00:29:54,440 --> 00:29:55,260 Mas poderia. 718 00:29:55,260 --> 00:29:55,830 Enter. 719 00:29:55,830 --> 00:29:56,580 Mas isso não aconteceu. 720 00:29:56,580 --> 00:29:57,050 Tudo bem. 721 00:29:57,050 --> 00:29:58,440 Mas é um caso de canto genuíno. 722 00:29:58,440 --> 00:30:01,610 E a única razão que se comportou corretamente, de modo a 723 00:30:01,610 --> 00:30:05,820 falar, é porque a função GetString CS50 é realmente 724 00:30:05,820 --> 00:30:08,040 concebida sob o capô, como veremos em algumas semanas, 725 00:30:08,040 --> 00:30:11,570 para alocar automaticamente RAM mais e mais, mais e mais 726 00:30:11,570 --> 00:30:14,330 de memória do sistema operacional, quando se percebe, wow, 727 00:30:14,330 --> 00:30:16,670 você realmente digitou algo bastante longo. 728 00:30:16,670 --> 00:30:18,500 Agora, isso é um pouco de mentira. 729 00:30:18,500 --> 00:30:22,020 Se realmente parou por um bom tempo e eu digitei 730 00:30:22,020 --> 00:30:24,640 algo como 5 bilhões de caracteres no teclado 731 00:30:24,640 --> 00:30:28,060 aqui, ou realmente bateu copiar e colar um pouco, que muito possivelmente 732 00:30:28,060 --> 00:30:29,730 poderia fazer com que o programa trave. 733 00:30:29,730 --> 00:30:32,130 Apenas um pouco mais difícil de simular que, com uma finita 734 00:30:32,130 --> 00:30:33,740 quantidade de tempo. 735 00:30:33,740 --> 00:30:37,320 >> O que é outra canto caso poderíamos tentar? 736 00:30:37,320 --> 00:30:38,730 Sim? 737 00:30:38,730 --> 00:30:39,020 Sim. 738 00:30:39,020 --> 00:30:40,360 Então, por que não responder a nada? 739 00:30:40,360 --> 00:30:43,130 Então, nós realmente temos que tomar algumas medidas, porque de outra forma 740 00:30:43,130 --> 00:30:45,060 o programa vai sentar lá piscando durante todo o dia. 741 00:30:45,060 --> 00:30:46,860 Mas se eu apenas pressione Enter - 742 00:30:46,860 --> 00:30:48,780 OK, agora, ainda parece errado. 743 00:30:48,780 --> 00:30:51,670 Não falhar, mas talvez haja agora uma oportunidade de 744 00:30:51,670 --> 00:30:54,190 iniciar a implementação de um programa mais rigoroso 745 00:30:54,190 --> 00:30:55,290 que realmente verifica. 746 00:30:55,290 --> 00:30:57,640 E se a cadeia, a sentença, a palavra que eu 747 00:30:57,640 --> 00:31:00,890 digitou tem comprimento 0, bem, talvez eu deveria gritar com o 748 00:31:00,890 --> 00:31:03,770 usuário, ou dizer-lhe para introduzir uma cadeia de novo, de modo que 749 00:31:03,770 --> 00:31:06,560 realmente conseguir o que se parece com um comportamento correto e não 750 00:31:06,560 --> 00:31:08,570 apenas a supervisão completa da minha parte. 751 00:31:08,570 --> 00:31:11,130 >> Pergunta em volta? 752 00:31:11,130 --> 00:31:11,970 Número decimal. 753 00:31:11,970 --> 00:31:13,120 Portanto pode tentar isso também. 754 00:31:13,120 --> 00:31:16,840 1,10000005. 755 00:31:16,840 --> 00:31:19,470 Parece que vai apenas trabalhar realmente bem. 756 00:31:19,470 --> 00:31:21,160 E que, na verdade, é esperado. 757 00:31:21,160 --> 00:31:24,550 Mesmo que pode ter digitado o número lá, ou um 758 00:31:24,550 --> 00:31:28,200 maior número anterior, percebe que quando estamos digitando usuário 759 00:31:28,200 --> 00:31:31,070 de entrada e estamos usando a função GetString, não 760 00:31:31,070 --> 00:31:34,380 importa se o que eu estou escrevendo parece um número. 761 00:31:34,380 --> 00:31:36,720 Lembre-se que de acordo com ASCII, tudo no seu 762 00:31:36,720 --> 00:31:39,920 teclado possui um valor numérico, que pode ser mapeada para uma 763 00:31:39,920 --> 00:31:41,480 personagem, um char. 764 00:31:41,480 --> 00:31:44,490 Portanto, neste caso, mesmo que eu pode digitar um número, o 765 00:31:44,490 --> 00:31:48,190 computador vai pensar nela, por assim dizer, como uma string - 766 00:31:48,190 --> 00:31:49,870 algo que se parece com um número, mas é 767 00:31:49,870 --> 00:31:51,090 na verdade não um número. 768 00:31:51,090 --> 00:31:53,450 Mas isso é realmente um segue perfeito, porque agora podemos 769 00:31:53,450 --> 00:31:55,450 na verdade, a transição para escrever programas que 770 00:31:55,450 --> 00:31:56,730 utilizar outros tipos de dados. 771 00:31:56,730 --> 00:32:01,840 >> Assim, além de usar caracteres, ou melhor, além de utilizar cordas, 772 00:32:01,840 --> 00:32:04,510 perceber que têm outros tipos de dados em C, bem como na 773 00:32:04,510 --> 00:32:05,230 outros idiomas. 774 00:32:05,230 --> 00:32:08,480 Um char, como o nome sugere, é apenas um personagem único. 775 00:32:08,480 --> 00:32:12,150 A flutuação é um valor de ponto flutuante, e isso é apenas uma fantasia 776 00:32:12,150 --> 00:32:14,470 maneira de dizer um número real - algo que tem um decimal 777 00:32:14,470 --> 00:32:17,410 ponto em que com alguns números à esquerda e / ou direita. 778 00:32:17,410 --> 00:32:21,370 Um int é um inteiro, que é apenas um número como 123. 779 00:32:21,370 --> 00:32:24,170 E agora o mais interessante são coisas como casal. 780 00:32:24,170 --> 00:32:28,540 O que dissemos um duplo foi a última vez? 781 00:32:28,540 --> 00:32:30,050 É 64, certo. 782 00:32:30,050 --> 00:32:33,560 Assim, enquanto normalmente um float é de 32-bit - 783 00:32:33,560 --> 00:32:37,340 por isso é tanto tempo na memória, ele usa 32 zeros e uns para 784 00:32:37,340 --> 00:32:40,530 representam valores - um duplo é, literalmente, o dobro, o que 785 00:32:40,530 --> 00:32:43,810 significa que você pode representar números maiores, ou 786 00:32:43,810 --> 00:32:45,810 você pode representar números mais precisos. 787 00:32:45,810 --> 00:32:48,690 Então você pode ter mais números depois do ponto decimal, mas 788 00:32:48,690 --> 00:32:51,520 como o colega disse no vídeo, até mesmo algo simples 789 00:32:51,520 --> 00:32:55,360 conceptualmente como 1/3 não pode ser representado com precisão por um 790 00:32:55,360 --> 00:32:58,330 computador, porque eventualmente você correr para fora de bits, e 791 00:32:58,330 --> 00:33:02,510 portanto, você só pode fazer .33333333 tantas vezes, em 792 00:33:02,510 --> 00:33:05,050 que ponto você só tenho a dizer que estou fora de representação 793 00:33:05,050 --> 00:33:08,120 espaço, eu tenho que chamá-lo apenas de um dia e representá-la 794 00:33:08,120 --> 00:33:10,200 um tanto imprecisa assim. 795 00:33:10,200 --> 00:33:11,110 E um longo tempo - 796 00:33:11,110 --> 00:33:13,880 nome estúpido, mas é porque não há um tipo de dados conhecido como um 797 00:33:13,880 --> 00:33:19,350 longa em C, que coincidentemente é muitas vezes 32 bits, assim como um 798 00:33:19,350 --> 00:33:21,670 int é de 32 bits, mas um longo tempo é 799 00:33:21,670 --> 00:33:23,560 geralmente 64 bits. 800 00:33:23,560 --> 00:33:25,740 Então, isso significa apenas que você pode representar maior 801 00:33:25,740 --> 00:33:26,990 números do que isso. 802 00:33:26,990 --> 00:33:27,410 >> Tudo bem. 803 00:33:27,410 --> 00:33:29,390 Então, se nós realmente queremos começar a representar as coisas, 804 00:33:29,390 --> 00:33:31,030 pode precisar de tipos mais sofisticados e 805 00:33:31,030 --> 00:33:32,340 é por isso que temos string. 806 00:33:32,340 --> 00:33:36,450 Então, na biblioteca CS50, que arquivo chamado cs50.h, temos 807 00:33:36,450 --> 00:33:41,110 realmente declarado um tipo de dados, por assim dizer, chamado string, 808 00:33:41,110 --> 00:33:42,710 mas cadeia não existe realmente. 809 00:33:42,710 --> 00:33:44,780 Isto é, novamente, uma dessas camadas, vamos descascar 810 00:33:44,780 --> 00:33:47,490 de volta em uma semana ou duas e jogá-lo fora, e realmente 811 00:33:47,490 --> 00:33:49,640 olhar debaixo da capa em que uma seqüência realmente é, e 812 00:33:49,640 --> 00:33:50,840 como ele é representado. 813 00:33:50,840 --> 00:33:53,520 Nós também vamos olhar para valores booleanos. 814 00:33:53,520 --> 00:33:56,040 >> Então, o que era um bool no contexto do Scratch? 815 00:33:59,154 --> 00:34:00,300 É verdadeiro ou falso. 816 00:34:00,300 --> 00:34:03,900 Então é só um valor que é verdadeiro ou falso, ligado ou desligado, 1 ou 817 00:34:03,900 --> 00:34:06,140 0, no entanto você quer ver no mundo. 818 00:34:06,140 --> 00:34:09,739 Assim, em C, graças à biblioteca CS50, que por sua vez 819 00:34:09,739 --> 00:34:12,179 inclui outra biblioteca debaixo do capô, temos 820 00:34:12,179 --> 00:34:14,909 acesso a um tipo de dados que é chamado de bool, que será 821 00:34:14,909 --> 00:34:18,730 literalmente nos permitem atribuir os valores verdadeiro ou falso para 822 00:34:18,730 --> 00:34:20,219 coisas em um programa. 823 00:34:20,219 --> 00:34:23,880 >> Então, vamos em frente aqui e escrever um pequeno programa que 824 00:34:23,880 --> 00:34:26,330 faz algo envolvendo números vez. 825 00:34:26,330 --> 00:34:29,840 Então deixe-me voltar para o Appliance CS50, deixe-me ir em frente e 826 00:34:29,840 --> 00:34:32,770 criar um novo arquivo chamado aqui - 827 00:34:32,770 --> 00:34:35,460 vamos apenas dizer algo simples, como math.c. 828 00:34:38,270 --> 00:34:38,710 Tudo bem. 829 00:34:38,710 --> 00:34:41,600 E agora vá até o topo do meu programa, eu sou 830 00:34:41,600 --> 00:34:42,510 vai fazer o de sempre - 831 00:34:42,510 --> 00:34:44,780 # Include, para que eu possa usar 832 00:34:44,780 --> 00:34:46,860 printf, int main (void) - 833 00:34:46,860 --> 00:34:49,270 vamos voltar, finalmente, o que significa int 834 00:34:49,270 --> 00:34:52,389 aqui, o que significa vazio aqui, mas por enquanto, só sei que 835 00:34:52,389 --> 00:34:54,270 você tem que iniciar programas como este. 836 00:34:54,270 --> 00:34:56,280 Agora eu estou indo para ir em frente e dizer algo um pouco 837 00:34:56,280 --> 00:35:02,110 diferente - printf ("Dê-me um número:" 838 00:35:02,110 --> 00:35:03,570 );. 839 00:35:03,570 --> 00:35:09,220 Então eu vou fazer int n = GetInt, porque 840 00:35:09,220 --> 00:35:12,770 Acontece que GetInt é outra função na biblioteca CS50 841 00:35:12,770 --> 00:35:14,060 além GetString. 842 00:35:14,060 --> 00:35:17,340 E agora eu vou fazer algo estúpido, como "graças 843 00:35:17,340 --> 00:35:25,760 para o% d ", por inteiro decimal, e então n vírgula, e 844 00:35:25,760 --> 00:35:26,620 em seguida, retornar 0. 845 00:35:26,620 --> 00:35:28,940 Então, novamente, retornar 0 não tem nada a ver com o número que eu sou 846 00:35:28,940 --> 00:35:30,080 pedindo ao usuário para. 847 00:35:30,080 --> 00:35:33,620 Apenas significa que, no final de tudo, presumivelmente, está bem. 848 00:35:33,620 --> 00:35:36,290 >> Então deixe-me ir até a minha janela de terminal aqui. 849 00:35:36,290 --> 00:35:39,590 Deixe-me fazer escrever matemática, entrar. 850 00:35:39,590 --> 00:35:41,360 E algo está errado. 851 00:35:41,360 --> 00:35:44,620 Fazer matemática não funcionou. 852 00:35:44,620 --> 00:35:46,170 Aqui está a primeira de nossas mensagens de erro. 853 00:35:46,170 --> 00:35:46,570 Por quê? 854 00:35:46,570 --> 00:35:49,720 A enigmática pouco, mas - 855 00:35:49,720 --> 00:35:50,060 Sim. 856 00:35:50,060 --> 00:35:51,240 Então cs50.h. 857 00:35:51,240 --> 00:35:53,900 Então, novamente, especialmente no início, você vai escrever o seu primeiro 858 00:35:53,900 --> 00:35:56,590 programa para pset 1 em seções, em horário de expediente, e 859 00:35:56,590 --> 00:35:59,050 francamente, vai ser esmagadora, por vezes, o que essas coisas 860 00:35:59,050 --> 00:36:00,000 estão realmente dizendo. 861 00:36:00,000 --> 00:36:01,890 Mas você vai perceber muito rapidamente eles começam a cair 862 00:36:01,890 --> 00:36:06,120 em baldes em que este significa que você já parou um 863 00:36:06,120 --> 00:36:08,290 do # inclui, na parte superior do arquivo. 864 00:36:08,290 --> 00:36:10,960 E Clang, compilador, está informando sobre isso 865 00:36:10,960 --> 00:36:14,090 declaração dizendo, em vez fantasiosamente, implícita de 866 00:36:14,090 --> 00:36:15,990 GetInt função é inválido. 867 00:36:15,990 --> 00:36:16,310 >> Tudo bem. 868 00:36:16,310 --> 00:36:17,520 Então, o que isso significa? 869 00:36:17,520 --> 00:36:22,080 Significa apenas que você implicitamente declarado em GetInt 870 00:36:22,080 --> 00:36:24,850 a sensação de que você não explicitamente declarado. 871 00:36:24,850 --> 00:36:27,300 Para declarar explicitamente int, você tem que ensinar 872 00:36:27,300 --> 00:36:28,740 Clang que ele existe. 873 00:36:28,740 --> 00:36:32,020 E a solução muito simples para isso é ensiná-lo por 874 00:36:32,020 --> 00:36:34,780 incluindo este outro arquivo, cs50.h, no 875 00:36:34,780 --> 00:36:35,850 a parte superior do seu arquivo. 876 00:36:35,850 --> 00:36:40,380 Porque, literalmente, o que não é # include diz Clang 877 00:36:40,380 --> 00:36:44,030 muito bonito para ir encontrar o arquivo chamado cs50.h, cópia, 878 00:36:44,030 --> 00:36:48,150 colá-lo automaticamente no topo do meu programa para mim, 879 00:36:48,150 --> 00:36:50,850 e depois converter o código fonte para zeros e uns. 880 00:36:50,850 --> 00:36:52,850 Mas isso, obviamente, muito tedioso se nós, humanos, teve 881 00:36:52,850 --> 00:36:55,370 ir copiando e colando esses arquivos grandes o tempo todo, 882 00:36:55,370 --> 00:36:58,540 assim # include apenas faz tudo isso automaticamente, sem 883 00:36:58,540 --> 00:37:01,550 turvando o meu código com alguém da biblioteca. 884 00:37:01,550 --> 00:37:06,370 E uma biblioteca é apenas outro arquivo que contém funções e 885 00:37:06,370 --> 00:37:08,340 outras coisas que alguém tenha escrito, que nós somos 886 00:37:08,340 --> 00:37:10,270 alavancagem para o nosso próprio bem. 887 00:37:10,270 --> 00:37:10,580 >> Tudo bem. 888 00:37:10,580 --> 00:37:11,200 Vamos tentar de novo. 889 00:37:11,200 --> 00:37:12,250 Fazer matemática. 890 00:37:12,250 --> 00:37:13,120 Enter. 891 00:37:13,120 --> 00:37:13,530 Bom. 892 00:37:13,530 --> 00:37:14,880 Então, que parece ter funcionado. 893 00:37:14,880 --> 00:37:18,330 Então deixe-me correr matemática;. / Matemática. 894 00:37:18,330 --> 00:37:21,100 Digite me dá um número, 123. 895 00:37:21,100 --> 00:37:22,620 Obrigado pela 123. 896 00:37:22,620 --> 00:37:24,490 Agora vamos tentar um outro caso de canto. 897 00:37:24,490 --> 00:37:26,530 Uma cadeia é bastante generoso, porque um 898 00:37:26,530 --> 00:37:27,620 seqüência pode ser qualquer coisa. 899 00:37:27,620 --> 00:37:28,910 Pode olhar como números, parece 900 00:37:28,910 --> 00:37:30,600 caracteres, parecem palavras. 901 00:37:30,600 --> 00:37:31,900 Mas um int é um int. 902 00:37:31,900 --> 00:37:34,370 Então agora eu sou o usuário difícil, e ele está dizendo "Dê-me 903 00:37:34,370 --> 00:37:38,730 um número, "o que se eu tentar fazer algo como 0,1? 904 00:37:38,730 --> 00:37:41,510 Bem, esse é um número, e é consistente com a 905 00:37:41,510 --> 00:37:44,180 gramática que usei aqui, mas debaixo do capô, eu sou de 906 00:37:44,180 --> 00:37:45,610 curso usando o GetInt função. 907 00:37:45,610 --> 00:37:46,610 >> Então vamos ver o que acontece. 908 00:37:46,610 --> 00:37:48,250 Enter, nova tentativa. 909 00:37:48,250 --> 00:37:48,560 Tudo bem. 910 00:37:48,560 --> 00:37:50,570 Deixe-me ser difícil e apenas pressione Enter novamente. 911 00:37:50,570 --> 00:37:51,700 Enter, Enter. 912 00:37:51,700 --> 00:37:53,890 Então agora parece que GetInt é um pouco mais 913 00:37:53,890 --> 00:37:55,240 poderoso do que GetString. 914 00:37:55,240 --> 00:37:58,540 Nós, a equipe, implementado de tal forma que, se nós observamos 915 00:37:58,540 --> 00:38:02,100 você não tem nos dado um int - e um int é um número decimal 916 00:38:02,100 --> 00:38:04,785 zeros contendo, uns, dois, três, quatro, cinco, seis, 917 00:38:04,785 --> 00:38:05,540 setes, oitos, ou noves. 918 00:38:05,540 --> 00:38:06,310 E é isso. 919 00:38:06,310 --> 00:38:08,810 Sem pontos decimais, sem personagens, sem pontuação. 920 00:38:08,810 --> 00:38:10,390 Parece que temos de cooperar. 921 00:38:10,390 --> 00:38:13,680 Então deixe-me tentar quatro, cinco, seis, e que me deixa completamente. 922 00:38:13,680 --> 00:38:16,760 Então, realmente, ser anal aqui, eu provavelmente deveria dizer "Dê-me 923 00:38:16,760 --> 00:38:20,310 um inteiro ", a fim de transmitir ao usuário 924 00:38:20,310 --> 00:38:22,620 exatamente o que eu pretendo. 925 00:38:22,620 --> 00:38:24,090 >> Agora vamos pensar sobre debaixo do capô. 926 00:38:24,090 --> 00:38:27,930 Nós não vamos olhar como cs50.h é implementado hoje, 927 00:38:27,930 --> 00:38:29,080 essa biblioteca. 928 00:38:29,080 --> 00:38:33,600 Mas se ele continua dizendo que repetir, repetir, repetir, que a programação 929 00:38:33,600 --> 00:38:36,970 construir estou presumivelmente usando debaixo do capô para 930 00:38:36,970 --> 00:38:39,000 implementar isso? 931 00:38:39,000 --> 00:38:39,980 Então, só um loop, certo? 932 00:38:39,980 --> 00:38:41,930 Uma das ideias mais simples que vimos em Scratch. 933 00:38:41,930 --> 00:38:45,050 The Forever construir, a repetição construir. 934 00:38:45,050 --> 00:38:47,320 Presumivelmente, neste programa, debaixo do capô, mesmo 935 00:38:47,320 --> 00:38:49,470 que é escrito em C e não do zero, ele está fazendo 936 00:38:49,470 --> 00:38:54,300 algo chamado equivalente a para sempre, se o usuário não tem 937 00:38:54,300 --> 00:38:58,710 digitado em um número inteiro, digamos repetir, repetir, repetir, repetir, de modo 938 00:38:58,710 --> 00:39:01,220 então, finalmente, quando nós começamos um inteiro, então você 939 00:39:01,220 --> 00:39:02,970 romper com esse ciclo. 940 00:39:02,970 --> 00:39:05,610 >> Então, o que outras funções que podemos usar aqui na biblioteca do CS50? 941 00:39:05,610 --> 00:39:07,880 Bem, mais ou as mais óbvias, pelo menos com base na 942 00:39:07,880 --> 00:39:09,570 tipos de dados que agora sabe que existem. 943 00:39:09,570 --> 00:39:12,900 Implementamos GetString, GetInt, mas em todo o 944 00:39:12,900 --> 00:39:15,680 primeiras semanas do termo, você também pode usar e GetFloat 945 00:39:15,680 --> 00:39:18,870 GetDouble GetLongLong e, a fim de obter exactamente o 946 00:39:18,870 --> 00:39:20,030 tipos de dados que você deseja. 947 00:39:20,030 --> 00:39:24,030 Porque o detalhe chave aqui é que ao contrário de algumas línguas, 948 00:39:24,030 --> 00:39:26,630 como Python e Ruby, onde você não tem que necessariamente 949 00:39:26,630 --> 00:39:29,730 declarar o tipo de dados de uma variável - 950 00:39:29,730 --> 00:39:32,390 Você não tem que dizer ao computador qual o tipo de material 951 00:39:32,390 --> 00:39:34,000 você está indo para colocar na variável - 952 00:39:34,000 --> 00:39:36,640 em C, você tem que ser sempre tão precisas. 953 00:39:36,640 --> 00:39:40,060 Então, se você quer uma variável chamada n, um pedaço de armazenamento 954 00:39:40,060 --> 00:39:42,900 que, neste caso, passa a ser de 32 bits, por convenção, é 955 00:39:42,900 --> 00:39:45,660 tem que dizer ao computador que esses bits são 956 00:39:45,660 --> 00:39:47,840 vai armazenar um número - 957 00:39:47,840 --> 00:39:50,630 não um personagem, e não uma string, não um float. 958 00:39:50,630 --> 00:39:52,620 E este aborda a questão que efetivamente 959 00:39:52,620 --> 00:39:53,760 correu para a semana passada. 960 00:39:53,760 --> 00:39:57,050 Se estamos usando zeros e uns números para representar não apenas 961 00:39:57,050 --> 00:40:00,770 Mas, como números e Bs e Cs, como no mundo é uma 962 00:40:00,770 --> 00:40:03,460 computador vai saber que este padrão de bits, na verdade, 963 00:40:03,460 --> 00:40:07,650 representa o número 65, em vez de representar a 964 00:40:07,650 --> 00:40:09,860 letra A, que por coincidência, de acordo com a 965 00:40:09,860 --> 00:40:13,440 ASCII, lembro, era equivalente a 65? 966 00:40:13,440 --> 00:40:16,550 >> Então, esses tipos de dados fornecem o contexto para o computador, de modo 967 00:40:16,550 --> 00:40:18,810 que se sabe se estes bits devem ser interpretados como uma 968 00:40:18,810 --> 00:40:23,660 int ou como uma string. 969 00:40:23,660 --> 00:40:26,500 Qualquer dúvida, então, sobre este assunto? 970 00:40:26,500 --> 00:40:28,149 Sim? 971 00:40:34,780 --> 00:40:35,270 DAVID J. MALAN: Boa pergunta. 972 00:40:35,270 --> 00:40:39,140 Se nós tirarmos stdio.h, vamos salvar o arquivo - 973 00:40:39,140 --> 00:40:44,360 deixe-me ir até a janela de terminal e executar fazer zoom matemática, 974 00:40:44,360 --> 00:40:45,530 e digitar - 975 00:40:45,530 --> 00:40:47,700 agora eu tenho um erro diferente, porque estou implicitamente 976 00:40:47,700 --> 00:40:49,650 declarando o que funcionar agora? 977 00:40:49,650 --> 00:40:50,700 Printf. 978 00:40:50,700 --> 00:40:52,970 Então agora eu criei um novo problema, cuja solução é 979 00:40:52,970 --> 00:40:53,890 essencialmente a mesma. 980 00:40:53,890 --> 00:40:55,365 Eu preciso colocar isso de volta. 981 00:40:55,365 --> 00:40:56,615 AUDIÊNCIA: [inaudível] 982 00:41:03,534 --> 00:41:04,030 DAVID J. MALAN: Ah. 983 00:41:04,030 --> 00:41:04,850 Então, se eu tirar - 984 00:41:04,850 --> 00:41:05,360 Ok, sim. 985 00:41:05,360 --> 00:41:08,960 Então, se eu remover a inclusão do padrão de E / S biblioteca-se 986 00:41:08,960 --> 00:41:12,020 aqui, e então você está dizendo que se me livrar de printf, obter 987 00:41:12,020 --> 00:41:13,450 livrar de printf? 988 00:41:13,450 --> 00:41:13,810 Sim. 989 00:41:13,810 --> 00:41:18,450 Isso deve funcionar, porque eu não estou mais usando qualquer - gritos. 990 00:41:18,450 --> 00:41:20,110 Acabei de mentir? 991 00:41:20,110 --> 00:41:21,650 Ah, ok. 992 00:41:21,650 --> 00:41:25,640 Isso não vai funcionar por causa de um novo erro que acaba de lançar. 993 00:41:25,640 --> 00:41:28,390 E este é um pouco mais auto-explicativo. 994 00:41:28,390 --> 00:41:29,440 >> Qual é o problema? 995 00:41:29,440 --> 00:41:30,680 Não utilizados n variáveis. 996 00:41:30,680 --> 00:41:34,040 Então, esse erro é o resultado de termos configurado o 997 00:41:34,040 --> 00:41:36,640 aparelho a ser particularmente pedante, para realmente gritar 998 00:41:36,640 --> 00:41:39,060 você por cada erro possível, mesmo que seja o tipo de 999 00:41:39,060 --> 00:41:41,950 um erro não-fatal como este - é realmente como um grande 1000 00:41:41,950 --> 00:41:44,820 lidar que eu atribuído um int, colocar um número em que, em seguida, 1001 00:41:44,820 --> 00:41:46,030 apenas fiz nada com ele? 1002 00:41:46,030 --> 00:41:47,020 Assim, funcionalmente, não. 1003 00:41:47,020 --> 00:41:50,410 Isso não vai quebrar o programa. 1004 00:41:50,410 --> 00:41:51,490 É apenas uma espécie de idiota, certo? 1005 00:41:51,490 --> 00:41:54,220 Não há valor a ter pedido para que o número, armazenado 1006 00:41:54,220 --> 00:41:56,370 em uma variável, se você nunca vai fazer nada 1007 00:41:56,370 --> 00:41:58,000 com isso, se imprimi-lo ou salvá-lo. 1008 00:41:58,000 --> 00:42:00,270 Portanto, neste caso, é Clang reconhecendo tanto, e 1009 00:42:00,270 --> 00:42:02,010 ele está dizendo não utilizados n variáveis. 1010 00:42:02,010 --> 00:42:05,380 >> Assim, podemos corrigir isso, se realmente queremos. 1011 00:42:05,380 --> 00:42:07,250 Mas, novamente, isto não é uma boa programação agora. 1012 00:42:07,250 --> 00:42:09,310 Então, eu só poderia fazer isso - 1013 00:42:09,310 --> 00:42:12,060 descer aqui, deixe-me limpar a tela, fazer matemática. 1014 00:42:12,060 --> 00:42:13,090 Que funciona. 1015 00:42:13,090 --> 00:42:18,110 Agora posso correr o meu programa de matemática, tem entrada - 1016 00:42:18,110 --> 00:42:18,700 bem, isso foi ruim. 1017 00:42:18,700 --> 00:42:23,450 Recebe a entrada, e isso é tudo o que faz, neste caso. 1018 00:42:23,450 --> 00:42:25,220 >> Então, na verdade, vamos tentar um outro canto caso que 1019 00:42:25,220 --> 00:42:26,300 não acho de mais cedo. 1020 00:42:26,300 --> 00:42:28,220 Neste caso - aqui, vamos voltar ao que é um 1021 00:42:28,220 --> 00:42:29,500 pouco mais user-friendly. 1022 00:42:29,500 --> 00:42:32,580 Deixe-me voltar aqui e fazer executar a matemática novamente. 1023 00:42:32,580 --> 00:42:34,190 Opa, o que eu fiz de errado? 1024 00:42:34,190 --> 00:42:35,400 Tem que rolar mais para trás. 1025 00:42:35,400 --> 00:42:36,390 Okay. 1026 00:42:36,390 --> 00:42:38,490 Agora estamos de volta ao estado original, onde todos 1027 00:42:38,490 --> 00:42:39,990 é espero que bem. 1028 00:42:39,990 --> 00:42:43,360 E agora, se eu correr matemática, 123 parece funcionar. 1029 00:42:43,360 --> 00:42:46,010 Mas este não é realmente uma prova eficaz, apenas para dizer 1030 00:42:46,010 --> 00:42:47,930 ok, isso funciona. 1031 00:42:47,930 --> 00:42:49,120 789, que funciona. 1032 00:42:49,120 --> 00:42:50,100 Tempo para apresentar. 1033 00:42:50,100 --> 00:42:51,870 Porque há casos de canto outros aqui. 1034 00:42:51,870 --> 00:42:55,040 Uma seqüência realmente não nos dão muito problema, digitando em um 1035 00:42:55,040 --> 00:42:56,510 monte de caracteres. 1036 00:42:56,510 --> 00:42:59,580 Mas e se eu digitar isso? 1037 00:42:59,580 --> 00:43:04,850 Bater o número 1 de um monte, muito por aqui - 1038 00:43:04,850 --> 00:43:06,300 tudo bem, está ficando um pouco chato, então eu vou 1039 00:43:06,300 --> 00:43:10,040 parar por aqui, e eu vou bater Enter. 1040 00:43:10,040 --> 00:43:11,290 >> O que diabos aconteceu? 1041 00:43:14,110 --> 00:43:17,680 Portanto, esta pode, na verdade, ser explicado. 1042 00:43:17,680 --> 00:43:18,920 Então levou-o como binário? 1043 00:43:18,920 --> 00:43:21,130 Um bom pensamento, mas não, não é o fato de que ele tomou 1044 00:43:21,130 --> 00:43:22,815 como binário, porque de fato, que era apenas uma espécie de 1045 00:43:22,815 --> 00:43:23,080 coincidência. 1046 00:43:23,080 --> 00:43:23,930 Podemos fazer isso de novo. 1047 00:43:23,930 --> 00:43:26,530 Portanto, não há 2 no sistema binário, que é 1048 00:43:26,530 --> 00:43:27,420 provavelmente o suficiente de qualquer maneira. 1049 00:43:27,420 --> 00:43:28,780 Enter. 1050 00:43:28,780 --> 00:43:30,140 De modo que não era o problema. 1051 00:43:30,140 --> 00:43:31,390 O que mais? 1052 00:43:34,650 --> 00:43:35,400 Exatamente. 1053 00:43:35,400 --> 00:43:37,830 >> Então, acho que volta para o que um int realmente é. 1054 00:43:37,830 --> 00:43:40,970 É de 32 bits que coletivamente são interpretadas 1055 00:43:40,970 --> 00:43:42,090 como um número. 1056 00:43:42,090 --> 00:43:44,730 Se tiver de 32 bits, o que significa cada um dos bits pode ser 1057 00:43:44,730 --> 00:43:46,690 um 0 ou um 1., 0 ou um 1 1058 00:43:46,690 --> 00:43:49,090 Então, isso significa que há duas possibilidades para este bit, 1059 00:43:49,090 --> 00:43:51,140 duas possibilidades para isso, duas possibilidades para isso 1060 00:43:51,140 --> 00:43:52,570 bit - de modo que é 2 vezes 2 vezes - 1061 00:43:52,570 --> 00:43:55,480 de modo que é 2 à potência de 32 é o número total de 1062 00:43:55,480 --> 00:43:58,960 permutações de zeros e uns, se você tem 32 1063 00:43:58,960 --> 00:44:01,400 espaços reservados, zeros ou uns, na frente de você. 1064 00:44:01,400 --> 00:44:04,250 Então, se eu tenho 2 a 32, matematicamente, que é o que? 1065 00:44:07,080 --> 00:44:07,840 Então é muito. 1066 00:44:07,840 --> 00:44:09,910 É 4 bilhões, mais ou menos. 1067 00:44:09,910 --> 00:44:13,510 E 4 bilhões não parece ser o que foi impresso aqui. 1068 00:44:13,510 --> 00:44:16,290 Na verdade, isso parece mais perto de 2 bilhões. 1069 00:44:16,290 --> 00:44:17,970 Mas isso não é uma coincidência. 1070 00:44:17,970 --> 00:44:21,590 O fato de que o computador tenha interpretado mal o meu número enorme, 1071 00:44:21,590 --> 00:44:24,260 minha sequência enorme de uns e, em seguida, minha seqüência enorme de duplas, 1072 00:44:24,260 --> 00:44:26,880 como cerca de 2 bilhões, é explicada como? 1073 00:44:30,250 --> 00:44:32,180 Há um limite para o int. 1074 00:44:32,180 --> 00:44:34,970 Há um certamente um valor máximo que você pode representar. 1075 00:44:34,970 --> 00:44:36,370 Mas normalmente é 4 bilhões, certo? 1076 00:44:36,370 --> 00:44:39,100 Se 2 ao 32 é de aproximadamente 4 bilhões, que parece 1077 00:44:39,100 --> 00:44:40,350 esse é o maior número. 1078 00:44:42,420 --> 00:44:45,240 Então, não o resto, mas um bom pensamento. 1079 00:44:45,240 --> 00:44:46,340 Números negativos. 1080 00:44:46,340 --> 00:44:49,570 Então se você tem 4000 milhões coisas que se pode 1081 00:44:49,570 --> 00:44:52,970 representar com essas várias permutações de 32 e 0s 1082 00:44:52,970 --> 00:44:55,600 1s, bem, é lógico que nós, humanos, pode querer 1083 00:44:55,600 --> 00:44:57,110 representam não apenas números inteiros positivos 1084 00:44:57,110 --> 00:44:58,240 mas inteiros negativos. 1085 00:44:58,240 --> 00:45:00,410 E, de fato, essa é a suposição de que o C faz. 1086 00:45:00,410 --> 00:45:03,550 Assim, com 32 bits, você pode representar aproximadamente negativa 2 1087 00:45:03,550 --> 00:45:06,630 bilhões de todo o caminho até a positivo 2 bilhões. 1088 00:45:06,630 --> 00:45:08,750 E por isso, neste caso, o que estamos realmente vendo é apenas 1089 00:45:08,750 --> 00:45:13,600 à margem da capacidade do nosso inteiro, e temos, por isso 1090 00:45:13,600 --> 00:45:15,860 para falar, transbordou um inteiro. 1091 00:45:15,860 --> 00:45:19,180 Nós tentamos empinar mais bits nele do que pode realmente se encaixam. 1092 00:45:19,180 --> 00:45:22,960 Assim, o resultado final é que essencialmente tem todos os bits 1. 1093 00:45:22,960 --> 00:45:25,280 Nós capotou todos os nossos bits em, nós tentamos representar 1094 00:45:25,280 --> 00:45:27,630 o maior número possível, mas não é claramente quase 1095 00:45:27,630 --> 00:45:30,960 grande o suficiente para representar as duas coisas que eu tenho apenas digitou dentro 1096 00:45:30,960 --> 00:45:31,730 Sim? 1097 00:45:31,730 --> 00:45:32,980 AUDIÊNCIA: [inaudível] 1098 00:45:37,230 --> 00:45:37,830 >> DAVID J. MALAN: Boa pergunta. 1099 00:45:37,830 --> 00:45:40,080 Por que não podemos simplesmente representar que negativo 1100 00:45:40,080 --> 00:45:41,500 assinar como apenas um personagem? 1101 00:45:41,500 --> 00:45:44,200 Então, nós absolutamente possível, e então poderíamos salvar 1102 00:45:44,200 --> 00:45:45,470 um bit adicional. 1103 00:45:45,470 --> 00:45:49,100 Mas você ainda vai ter que representar esse traço e 1104 00:45:49,100 --> 00:45:50,700 que vai custar-lhe pelo menos alguma coisa, 1105 00:45:50,700 --> 00:45:52,220 presumivelmente um pouco. 1106 00:45:52,220 --> 00:45:55,610 Então, sim, nós poderíamos ter 32 bits usados ​​para o nosso número, mas agora 1107 00:45:55,610 --> 00:45:57,610 precisamos de outro pouco utilizado para o nosso traço 1108 00:45:57,610 --> 00:45:58,810 símbolo, o sinal de menos. 1109 00:45:58,810 --> 00:46:01,470 Portanto, agora temos 33 bits valores, o que nós poderíamos fazer, mas é 1110 00:46:01,470 --> 00:46:02,570 apenas não é o caminho que é feito. 1111 00:46:02,570 --> 00:46:05,140 Fizemos um juízo anos chamada atrás, 32 bits é uma espécie de 1112 00:46:05,140 --> 00:46:06,170 unidade de medida aqui. 1113 00:46:06,170 --> 00:46:08,120 Então, nós estamos indo para usar um desses bits de forma eficaz para 1114 00:46:08,120 --> 00:46:12,950 representam negatividade, e 31 bits para representar o número. 1115 00:46:12,950 --> 00:46:15,550 Outras perguntas? 1116 00:46:15,550 --> 00:46:15,670 Tudo bem. 1117 00:46:15,670 --> 00:46:16,030 Isso é muito. 1118 00:46:16,030 --> 00:46:17,930 Por que não vamos ir em frente e ter a nossa pausa de cinco minutos aqui? 1119 00:46:23,580 --> 00:46:24,270 >> Tudo bem. 1120 00:46:24,270 --> 00:46:31,250 Então, novamente, para não exagerar as aplicações matemáticas 1121 00:46:31,250 --> 00:46:33,840 de programação, vamos arrancar fora este exemplo 1122 00:46:33,840 --> 00:46:36,590 antes de se mudar para outras construções, apenas porque 1123 00:46:36,590 --> 00:46:39,430 irá ilustrar alguns pontos comuns tropeço em alguns dos 1124 00:46:39,430 --> 00:46:41,520 o básico quando se trata de programas de escrita. 1125 00:46:41,520 --> 00:46:44,360 Neste caso, fazendo expressões aritméticas que têm algum 1126 00:46:44,360 --> 00:46:48,010 relevância interessante para a sintaxe. 1127 00:46:48,010 --> 00:46:50,430 >> Portanto, esta é apenas uma fórmula com a qual pode converter 1128 00:46:50,430 --> 00:46:52,690 temperaturas de Fahrenheit para Celsius. 1129 00:46:52,690 --> 00:46:54,600 Se você não lembra, esta é apenas a fórmula. 1130 00:46:54,600 --> 00:46:58,870 Então, se ligue em Fahrenheit valor de 32 graus, o que é 1131 00:46:58,870 --> 00:47:02,850 congelamento, que vai ser de 32 menos 32 é 0, e, na verdade, 1132 00:47:02,850 --> 00:47:05,130 0 em Celsius é também de zero. 1133 00:47:05,130 --> 00:47:08,210 Então sanidade rápido check lá - que é a fórmula familiar. 1134 00:47:08,210 --> 00:47:10,880 Deixe-me ir para o aparelho, porém, e começar 1135 00:47:10,880 --> 00:47:13,920 escrever um programa chamado, como, f2c, "Fahrenheit para 1136 00:47:13,920 --> 00:47:15,920 Celsius ponto c ". 1137 00:47:15,920 --> 00:47:18,930 E no topo aqui, vou começar com # include 1138 00:47:18,930 --> 00:47:22,190 stdio.h, e eu vou fazer int main (void), e 1139 00:47:22,190 --> 00:47:24,680 de novo, vamos voltar no futuro, como o que significa int 1140 00:47:24,680 --> 00:47:26,820 lá e que vazio significa que há. 1141 00:47:26,820 --> 00:47:28,770 E agora deixe-me ir em frente e implementar um programa que 1142 00:47:28,770 --> 00:47:31,170 essencialmente faz esta conversão para nós. 1143 00:47:31,170 --> 00:47:36,830 >> Então printf, vamos dizer, a temperatura em graus Fahrenheit. 1144 00:47:36,830 --> 00:47:40,140 E então deixe-me ir em frente e obter o valor do usuário. 1145 00:47:40,140 --> 00:47:43,120 Que tipo de valor que eu deveria receber do usuário, se eu quiser 1146 00:47:43,120 --> 00:47:45,620 para me dar uma temperatura em graus Fahrenheit? 1147 00:47:45,620 --> 00:47:48,090 Sim? 1148 00:47:48,090 --> 00:47:50,090 O que você propõe? 1149 00:47:50,090 --> 00:47:50,410 Sim. 1150 00:47:50,410 --> 00:47:51,960 Então bóia sente bastante razoável. 1151 00:47:51,960 --> 00:47:53,950 Temos, novamente, apenas algumas opções que 1152 00:47:53,950 --> 00:47:55,310 temos visto até agora. 1153 00:47:55,310 --> 00:48:00,100 Nós temos coisas como char, float, double, int, longo tempo, 1154 00:48:00,100 --> 00:48:01,150 bool string,. 1155 00:48:01,150 --> 00:48:03,510 Então, destes, bóia sente bastante razoável. 1156 00:48:03,510 --> 00:48:06,340 Nós poderíamos usar um direito, duplo, porque, se nós realmente queremos 1157 00:48:06,340 --> 00:48:07,580 representam a temperatura de um ser humano - 1158 00:48:07,580 --> 00:48:10,730 98,60000 - 1159 00:48:10,730 --> 00:48:12,990 poderíamos usar 64 bits para fazer isso, mas parece que 1160 00:48:12,990 --> 00:48:14,200 exagero para a temperatura. 1161 00:48:14,200 --> 00:48:16,380 Então vamos ir com float. 1162 00:48:16,380 --> 00:48:18,100 Agora eu preciso de uma variável. 1163 00:48:18,100 --> 00:48:20,500 Apenas para manter as coisas simples, eu vou chamá-lo de f, mas eu 1164 00:48:20,500 --> 00:48:23,370 poderia apenas como corretamente chamá-lo de temperatura, 1165 00:48:23,370 --> 00:48:24,600 mas ou é bom. 1166 00:48:24,600 --> 00:48:27,610 Então flutuar f = GetFloat. 1167 00:48:27,610 --> 00:48:30,220 Assim que eu agora tenha decidido usar GetFloat, porém, eu 1168 00:48:30,220 --> 00:48:33,340 preciso fazer uma correção. 1169 00:48:33,340 --> 00:48:33,720 Sim. 1170 00:48:33,720 --> 00:48:37,460 Então, precisamos # include , caso contrário, o compilador é 1171 00:48:37,460 --> 00:48:39,000 vai gritar com a gente. 1172 00:48:39,000 --> 00:48:41,720 Agora que eu tenho um carro alegórico, deixe-me ir em frente e fazer o 1173 00:48:41,720 --> 00:48:42,460 de conversão. 1174 00:48:42,460 --> 00:48:44,980 >> Então, primeiro, deixe-me também adquirir o hábito de aqui 1175 00:48:44,980 --> 00:48:46,310 comentando o meu código. 1176 00:48:46,310 --> 00:48:49,820 Então, novamente, um comentário é apenas uma notação para o ser humano que é 1177 00:48:49,820 --> 00:48:52,600 não faz parte do programa em si, mas um, ajuda a 1178 00:48:52,600 --> 00:48:55,010 entender o que você fez na manhã seguinte, ou no próximo 1179 00:48:55,010 --> 00:48:57,570 mês, ele ajuda o seu companheiro de ensino entender o que você fez 1180 00:48:57,570 --> 00:48:59,230 ou o que você pretende fazer, por isso é 1181 00:48:59,230 --> 00:49:00,950 prática geralmente muito boa. 1182 00:49:00,950 --> 00:49:02,940 A cada poucas linhas de código, escreva um comentário a 1183 00:49:02,940 --> 00:49:04,490 você ou seu colega. 1184 00:49:04,490 --> 00:49:08,460 Então, aqui, eu vou dizer: "Pergunte ao usuário para a temperatura." 1185 00:49:08,460 --> 00:49:10,890 Não tem que ser uma frase completa, apenas uma frase curta. 1186 00:49:10,890 --> 00:49:14,270 Mas a idéia por trás comentando em C é que cada um de seus 1187 00:49:14,270 --> 00:49:17,980 comentários devem capacitá-lo - ou, digamos, um TF ou um colega - 1188 00:49:17,980 --> 00:49:21,290 a roçar o seu programa e saber exatamente o que faz, por não 1189 00:49:21,290 --> 00:49:24,650 tanto a leitura do código, mas lendo os comentários, que 1190 00:49:24,650 --> 00:49:26,220 deve ser sucinta e clara. 1191 00:49:26,220 --> 00:49:29,030 Tudo bem, então agora deixe-me ir em frente e dizer: "Converter 1192 00:49:29,030 --> 00:49:32,660 Fahrenheit para Celsius. "Então, eu estou indo para ir em frente e fazer, 1193 00:49:32,660 --> 00:49:34,340 digamos, float c. 1194 00:49:34,340 --> 00:49:36,610 Vamos manter Celsius como um valor de ponto flutuante. 1195 00:49:36,610 --> 00:49:37,630 >> E deixe-me dar uma facada no presente. 1196 00:49:37,630 --> 00:49:40,350 A fórmula é, novamente, aqui em cima. 1197 00:49:40,350 --> 00:49:45,510 Como 5 / F 9 vezes menos 32. 1198 00:49:45,510 --> 00:49:46,360 Então, vamos fazer isso. 1199 00:49:46,360 --> 00:49:50,450 Então, 5 dividido por 9, de menos - 1200 00:49:50,450 --> 00:49:52,330 Opa, eu estraguei tudo já. 1201 00:49:52,330 --> 00:49:53,070 Times. 1202 00:49:53,070 --> 00:49:56,550 Então, 5/9 F menos 32 vezes. 1203 00:49:56,550 --> 00:49:59,650 Então F menos 32, ponto e vírgula. 1204 00:49:59,650 --> 00:50:02,000 E agora, aqui em baixo, eu estou indo para a frente 1205 00:50:02,000 --> 00:50:03,220 e dizer, imprimir resultado. 1206 00:50:03,220 --> 00:50:05,160 E essa parte é fácil. Printf. 1207 00:50:05,160 --> 00:50:07,980 Como eu faço para imprimir esse? 1208 00:50:07,980 --> 00:50:16,890 Bem, eu poderia dizer "Esse número em Celsius é% f \ n", 1209 00:50:16,890 --> 00:50:18,060 apenas para algumas estética. 1210 00:50:18,060 --> 00:50:20,450 E então, qual o valor que eu quero ligar aqui como o printf 1211 00:50:20,450 --> 00:50:21,360 segundo argumento? 1212 00:50:21,360 --> 00:50:21,650 Okay. 1213 00:50:21,650 --> 00:50:22,540 Então, só c. 1214 00:50:22,540 --> 00:50:24,760 Então, vamos começar com isso e depois é só retornar 0. 1215 00:50:24,760 --> 00:50:25,960 Mais uma vez, não tem nada a ver com a matemática. 1216 00:50:25,960 --> 00:50:27,610 Significa apenas que tudo está bem. 1217 00:50:27,610 --> 00:50:31,210 >> Agora, isso é correto, este programa? 1218 00:50:31,210 --> 00:50:31,520 Tudo bem. 1219 00:50:31,520 --> 00:50:33,630 Então eu fiz alguns erros. 1220 00:50:33,630 --> 00:50:35,980 Mesmo se você não tem idéia do que é programação, você pode classificar 1221 00:50:35,980 --> 00:50:37,120 de inferir de volta para a escola primária o que o 1222 00:50:37,120 --> 00:50:38,740 erros aqui poderia ser. 1223 00:50:38,740 --> 00:50:40,050 O que é um dos primeiros? 1224 00:50:40,050 --> 00:50:41,256 AUDIÊNCIA: [inaudível] 1225 00:50:41,256 --> 00:50:41,660 DAVID J. MALAN: Yeah. 1226 00:50:41,660 --> 00:50:42,940 Então, nós estamos faltando parênteses. 1227 00:50:42,940 --> 00:50:45,420 Foi deliberado que eu fiz parênteses na palestra 1228 00:50:45,420 --> 00:50:48,130 deslizar aqui, porque há realmente essa noção de ordem 1229 00:50:48,130 --> 00:50:51,590 de operações, ou precedência, em que determinadas operações - 1230 00:50:51,590 --> 00:50:52,890 multiplicação - 1231 00:50:52,890 --> 00:50:56,000 têm maior ligação, têm maior precedência, do que coisas 1232 00:50:56,000 --> 00:50:58,050 como a adição ou subtração. 1233 00:50:58,050 --> 00:51:00,550 Então, nós temos feito isso por anos só para deixar claro exatamente 1234 00:51:00,550 --> 00:51:02,840 operação matemática que deve ser feito primeiro. 1235 00:51:02,840 --> 00:51:05,010 Então eu provavelmente deveria imitar exatamente isso. 1236 00:51:05,010 --> 00:51:08,990 Caso contrário, o computador é, presumivelmente, vai tentar fazer 1237 00:51:08,990 --> 00:51:13,090 algo como dividir 5 por 9, em seguida, multiplicar F, em seguida, subtrair 1238 00:51:13,090 --> 00:51:14,850 32 da coisa toda. 1239 00:51:14,850 --> 00:51:16,480 O que não é, de fato, o que queremos fazer. 1240 00:51:16,480 --> 00:51:17,340 Então vamos parenthesize. 1241 00:51:17,340 --> 00:51:20,860 Vamos adicionar meus parênteses aqui, parênteses aqui. 1242 00:51:20,860 --> 00:51:22,670 Vamos colocar isso aqui. 1243 00:51:22,670 --> 00:51:25,130 Aqui, eu só notei outro erro que cometi ao longo do caminho. 1244 00:51:25,130 --> 00:51:25,680 Sim? 1245 00:51:25,680 --> 00:51:26,930 AUDIÊNCIA: [inaudível] 1246 00:51:29,632 --> 00:51:30,130 >> DAVID J. MALAN: Ah. 1247 00:51:30,130 --> 00:51:30,470 Bom. 1248 00:51:30,470 --> 00:51:32,400 Então, temos de fato o mesmo número inteiro 1249 00:51:32,400 --> 00:51:34,020 questão da divisão de antes. 1250 00:51:34,020 --> 00:51:35,800 Eu corrigir isso, vamos ver o que o sintoma é. 1251 00:51:35,800 --> 00:51:36,990 Mas nós vamos ter que corrigir um 1252 00:51:36,990 --> 00:51:37,680 outro erro aqui. 1253 00:51:37,680 --> 00:51:38,015 Sim? 1254 00:51:38,015 --> 00:51:39,540 AUDIÊNCIA: [inaudível] 1255 00:51:39,540 --> 00:51:40,070 DAVID J. MALAN: sim. 1256 00:51:40,070 --> 00:51:43,130 Então, erro estúpido que eu fiz, mas incrivelmente importante. 1257 00:51:43,130 --> 00:51:45,870 O computador não vai só fechar os olhos e deixar 1258 00:51:45,870 --> 00:51:48,770 F-me usar capital, quando eu realmente declarado a variável 1259 00:51:48,770 --> 00:51:51,360 como um f minúsculas aqui, na linha 8. 1260 00:51:51,360 --> 00:51:54,470 Então eu preciso corrigir na linha 11 capitalização meu, que um 1261 00:51:54,470 --> 00:51:56,820 pouco, era um F maiúsculo por engano. 1262 00:51:56,820 --> 00:51:57,610 E aqui? 1263 00:51:57,610 --> 00:51:59,980 Caso isto minúsculas também? 1264 00:51:59,980 --> 00:52:02,260 Deveria ser, mas isso é uma coincidência. 1265 00:52:02,260 --> 00:52:05,070 Que f% não tem nada a ver com a variável. 1266 00:52:05,070 --> 00:52:07,980 Então, só para ser super claro aqui, deixe-me ir em frente e 1267 00:52:07,980 --> 00:52:10,710 renomear isso, brevemente, "temperatura". Deixe-me renomear 1268 00:52:10,710 --> 00:52:15,050 esta "temperatura". Deixe-me não mudar o nome deste. 1269 00:52:15,050 --> 00:52:18,180 Porque, novamente, f% globalmente significa, "flutuando valor do ponto." 1270 00:52:18,180 --> 00:52:19,950 Não tem nada a ver com a minha variável. 1271 00:52:19,950 --> 00:52:23,080 Mas "temperatura" em todo o lugar é um pouco prolixo, 1272 00:52:23,080 --> 00:52:25,370 então eu vou voltar para o meu s "f" minúsculo. 1273 00:52:25,370 --> 00:52:27,890 >> Agora, deixe-me ir em frente até a minha janela aqui. 1274 00:52:27,890 --> 00:52:29,190 Faça f2c - 1275 00:52:29,190 --> 00:52:31,200 que foi, mais uma vez, o nome arbitrário I 1276 00:52:31,200 --> 00:52:32,590 deu a este arquivo. 1277 00:52:32,590 --> 00:52:33,690 Parece ter compilado. 1278 00:52:33,690 --> 00:52:35,080 Deixa-me correr f2c. 1279 00:52:35,080 --> 00:52:35,780 Enter. 1280 00:52:35,780 --> 00:52:37,786 Temperatura em Fahrenheit - vamos fazer um caminho fácil. 1281 00:52:37,786 --> 00:52:39,370 32. 1282 00:52:39,370 --> 00:52:40,910 OK, corrigir. 1283 00:52:40,910 --> 00:52:45,910 Mas, se eu faço agora 212 para ebulição - 1284 00:52:45,910 --> 00:52:46,630 maldita. 1285 00:52:46,630 --> 00:52:47,030 Tudo bem. 1286 00:52:47,030 --> 00:52:50,780 Então, claramente não corrigir, se o seu TF tenta 1287 00:52:50,780 --> 00:52:51,800 pelo menos, dois valores. 1288 00:52:51,800 --> 00:52:53,340 Então, qual é o problema aqui? 1289 00:52:53,340 --> 00:52:55,970 Bem, você já colocou o dedo sobre o que é o problema. 1290 00:52:55,970 --> 00:52:57,600 Mas por que é que o caso? 1291 00:52:57,600 --> 00:53:00,630 Até aqui, quando eu estou fazendo a matemática de 5 dividido por 9. 1292 00:53:00,630 --> 00:53:02,190 Assim, conceitualmente, é perfeitamente correto. 1293 00:53:02,190 --> 00:53:03,690 Totalmente consistente com a fórmula. 1294 00:53:03,690 --> 00:53:05,940 Mas os computadores só fazem exatamente o que você 1295 00:53:05,940 --> 00:53:06,760 dizer-lhes o que fazer. 1296 00:53:06,760 --> 00:53:08,940 E o que estamos efetivamente dizendo o computador aqui é 1297 00:53:08,940 --> 00:53:12,320 dividir o inteiro 5 9 pelo número inteiro 1298 00:53:12,320 --> 00:53:13,670 e dar-me o resultado. 1299 00:53:13,670 --> 00:53:16,230 O problema, porém, é quando você faz a divisão usando dados 1300 00:53:16,230 --> 00:53:20,220 tipos, a saída é o mesmo tipo de dados como as entradas. 1301 00:53:20,220 --> 00:53:23,670 E por isso, se as duas entradas são ambos inteiros, a saída é ir 1302 00:53:23,670 --> 00:53:25,110 ser um int. 1303 00:53:25,110 --> 00:53:28,770 E assim 5 dividido por 9 é algo ponto. 1304 00:53:28,770 --> 00:53:32,320 Mas o que é o inteiro mais próximo para apontar alguma coisa? 1305 00:53:32,320 --> 00:53:33,630 Então, é realmente 0. 1306 00:53:33,630 --> 00:53:36,620 Assim como discutimos na segunda-feira tudo, após o decimal 1307 00:53:36,620 --> 00:53:37,940 ponto fica truncado. 1308 00:53:37,940 --> 00:53:39,495 Ele só fica jogado fora. 1309 00:53:39,495 --> 00:53:42,760 Portanto, este é um erro completo, porque eu poderia muito bem apenas 1310 00:53:42,760 --> 00:53:44,700 multiplicar tudo por 0 aqui. 1311 00:53:44,700 --> 00:53:46,550 >> Agora, eu posso consertar isso em um par de formas. 1312 00:53:46,550 --> 00:53:48,080 Eu poderia fazer isso. 1313 00:53:48,080 --> 00:53:50,490 5,0 dividido por 9,0. 1314 00:53:50,490 --> 00:53:52,110 Tecnicamente, não precisa mesmo de fazer isso. 1315 00:53:52,110 --> 00:53:55,780 Ele é suficiente para fazer apenas um dos números de um flutuador - 1316 00:53:55,780 --> 00:53:58,290 ou dupla -, colocando o ponto decimal aqui. 1317 00:53:58,290 --> 00:54:01,740 Porque o que acontece agora é quando você divide um número inteiro por 1318 00:54:01,740 --> 00:54:04,670 um float, ou um casal, o computador vai perceber 1319 00:54:04,670 --> 00:54:06,830 oh, um dos que é mais precisa. 1320 00:54:06,830 --> 00:54:09,420 Deixe-me errar do lado de lhe dar mais precisão do que 1321 00:54:09,420 --> 00:54:10,310 você pretende. 1322 00:54:10,310 --> 00:54:12,700 Então ele vai converter o resultado - 1323 00:54:12,700 --> 00:54:16,240 ele irá retornar o resultado como um valor de ponto flutuante bem. 1324 00:54:16,240 --> 00:54:17,330 Então, que iria trabalhar. 1325 00:54:17,330 --> 00:54:18,060 Isso poderia funcionar. 1326 00:54:18,060 --> 00:54:20,010 E há um outro mecanismo que veremos na 1327 00:54:20,010 --> 00:54:21,390 maior detalhe na próxima semana. 1328 00:54:21,390 --> 00:54:24,690 Você pode, na verdade, como o programador, dizer ao computador 1329 00:54:24,690 --> 00:54:27,930 para tratar efectivamente um tipo de dados como 1330 00:54:27,930 --> 00:54:29,260 se fosse outro. 1331 00:54:29,260 --> 00:54:30,990 >> Então, eu poderia realmente fazer isso. 1332 00:54:30,990 --> 00:54:35,280 Em parênteses, o que posso dizer algo como (float), aberto 1333 00:54:35,280 --> 00:54:36,350 paren, paren perto. 1334 00:54:36,350 --> 00:54:39,050 E isso é o que é chamado de "casting". Mais uma vez, mais 1335 00:54:39,050 --> 00:54:39,940 na próxima semana. 1336 00:54:39,940 --> 00:54:42,280 Mas esta é apenas a maneira programática de dizer 1337 00:54:42,280 --> 00:54:45,910 o computador, eu sei 9 é um inteiro ou um longa. 1338 00:54:45,910 --> 00:54:47,700 Eu sei que não é um valor de ponto flutuante. 1339 00:54:47,700 --> 00:54:49,420 Mas tratá-lo como tal, de qualquer maneira. 1340 00:54:49,420 --> 00:54:52,000 Então, para lançar um tipo de dados significa converter 1341 00:54:52,000 --> 00:54:53,310 de um para o outro. 1342 00:54:53,310 --> 00:54:55,790 Francamente, isso é apenas um pouco feio, por isso gostaria de propor que vamos 1343 00:54:55,790 --> 00:54:58,830 volta para a sugestão original de apenas converter 1344 00:54:58,830 --> 00:55:00,770 essas coisas para valores de ponto flutuante manualmente. 1345 00:55:00,770 --> 00:55:02,890 Porque agora é apenas super claro o que está acontecendo, e 1346 00:55:02,890 --> 00:55:04,280 não é tudo o que distrai. 1347 00:55:04,280 --> 00:55:06,710 >> Então, vamos agora voltar para a minha janela de terminal. 1348 00:55:06,710 --> 00:55:07,990 Faça f2c. 1349 00:55:07,990 --> 00:55:09,430 Deixe-me ir em frente e executar isso. 1350 00:55:09,430 --> 00:55:12,340 E, como um aparte, você se cansar de digitar os comandos 1351 00:55:12,340 --> 00:55:14,910 uma e outra vez, perceber que os computadores, como o Linux aqui, 1352 00:55:14,910 --> 00:55:16,010 tendem a ser muito inteligente. 1353 00:55:16,010 --> 00:55:18,890 E se eu acertar cima, nós podemos ir pela minha história inteira da 1354 00:55:18,890 --> 00:55:20,380 comandos, para cima e para baixo. 1355 00:55:20,380 --> 00:55:23,840 Portanto, neste caso aqui, eu posso simplesmente ir até a correr fazer f2c. 1356 00:55:23,840 --> 00:55:25,830 Estou sendo gritado, porque eu fiz de que um segundo atrás. 1357 00:55:25,830 --> 00:55:27,030 Já é até à data. 1358 00:55:27,030 --> 00:55:30,720 Então agora eu posso correr f2c novamente. 1359 00:55:30,720 --> 00:55:33,260 Vamos tentar 32 Fahrenheit. 1360 00:55:33,260 --> 00:55:36,720 Agora vamos tentar 212 Fahrenheit. 1361 00:55:36,720 --> 00:55:37,250 >> Ufa. 1362 00:55:37,250 --> 00:55:38,250 Parece funcionar. 1363 00:55:38,250 --> 00:55:41,760 Agora, isso é bom, mas ele sente um pouco arbitrária que 1364 00:55:41,760 --> 00:55:44,890 Estou mostrando seis números após os pontos decimais. 1365 00:55:44,890 --> 00:55:45,070 Certo? 1366 00:55:45,070 --> 00:55:47,830 Se você é a pessoa do tempo na TV, você é uma espécie de idiota 1367 00:55:47,830 --> 00:55:49,150 se você estiver lendo a temperatura 1368 00:55:49,150 --> 00:55:50,070 este grau de precisão. 1369 00:55:50,070 --> 00:55:51,270 Então vamos simplificar isso. 1370 00:55:51,270 --> 00:55:53,880 Então, vamos realmente ir até aqui, ao meu printf. 1371 00:55:53,880 --> 00:55:55,490 E sim, eu quero flutuar. 1372 00:55:55,490 --> 00:55:57,570 Mas eu quero agora especificar a precisão. 1373 00:55:57,570 --> 00:55:59,070 E eu vou ser um pouco sucinto. 1374 00:55:59,070 --> 00:56:03,090 Eu vou dizer, dá-me um ponto depois do ponto decimal. 1375 00:56:03,090 --> 00:56:07,590 Então, em vez de dizer f%, eu vou dizer 0,1% f. 1376 00:56:07,590 --> 00:56:09,760 E isto significa apenas dar-me uma posição 1377 00:56:09,760 --> 00:56:11,410 depois do ponto decimal. 1378 00:56:11,410 --> 00:56:11,700 Tudo bem. 1379 00:56:11,700 --> 00:56:12,570 Vamos tentar de novo. 1380 00:56:12,570 --> 00:56:15,590 Deixe-me voltar a executá-lo depois de compilar. 1381 00:56:15,590 --> 00:56:18,160 E agora eu digitar 32, e eu voltar a 1382 00:56:18,160 --> 00:56:19,310 valor mais sucinta. 1383 00:56:19,310 --> 00:56:22,480 E eu posso digitar, agora, 212, e voltar uma forma mais sucinta 1384 00:56:22,480 --> 00:56:23,260 valor também. 1385 00:56:23,260 --> 00:56:25,190 E há outras coisas que você pode fazer com printf. 1386 00:56:25,190 --> 00:56:27,950 Você pode realmente especificar quão grande o número deve ser. 1387 00:56:27,950 --> 00:56:30,900 Se você quiser ter estofo sobre ele, para que você possa alinhar à direita ou 1388 00:56:30,900 --> 00:56:32,360 alinhar à esquerda todos os seus números ou 1389 00:56:32,360 --> 00:56:33,400 tentar coisas center. 1390 00:56:33,400 --> 00:56:35,340 Então percebe que há pequenos truques que você pode fazer lá. 1391 00:56:35,340 --> 00:56:38,420 Mas eles só se resumem a códigos de formato, 1392 00:56:38,420 --> 00:56:39,600 como nós temos lá. 1393 00:56:39,600 --> 00:56:41,090 >> Portanto, em termos de esta questão de precedência. 1394 00:56:41,090 --> 00:56:43,820 Este é um quadro muito chato passar por metodicamente. 1395 00:56:43,820 --> 00:56:46,780 Mas perceber que os autores do C vêm-se com a 1396 00:56:46,780 --> 00:56:50,190 regras que especificam que os operadores têm maior 1397 00:56:50,190 --> 00:56:53,680 precedência, mais poder de ligação, do que outros. 1398 00:56:53,680 --> 00:56:55,890 Assim, enquanto na escola, geralmente sabia que era 1399 00:56:55,890 --> 00:56:58,930 multiplicação e divisão, adição e subtração, em seguida, 1400 00:56:58,930 --> 00:56:59,950 em seguida, algumas outras coisas. 1401 00:56:59,950 --> 00:57:01,720 Em um mundo de programação, há uma muito 1402 00:57:01,720 --> 00:57:03,360 longa lista de coisas. 1403 00:57:03,360 --> 00:57:05,150 E isso não é algo que vale a pena memorizar agora. 1404 00:57:05,150 --> 00:57:07,310 Você vai se acostumar a ele antes do tempo. 1405 00:57:07,310 --> 00:57:10,690 Mas, assim como na escola, geralmente parênteses resolver 1406 00:57:10,690 --> 00:57:12,990 as questões de precedência, por tornar super claro para o 1407 00:57:12,990 --> 00:57:15,620 computador e humanos que se pretende. 1408 00:57:15,620 --> 00:57:17,770 Portanto, considero isso apenas uma folha de fraude pouco ali. 1409 00:57:17,770 --> 00:57:21,690 Mas a maioria desses detalhes que não vai conseguir por algum tempo. 1410 00:57:21,690 --> 00:57:21,900 >> Tudo bem. 1411 00:57:21,900 --> 00:57:24,120 Agora, vamos construir e afastar estes pouco bobo 1412 00:57:24,120 --> 00:57:25,460 exemplos matemáticos. 1413 00:57:25,460 --> 00:57:27,500 Ainda usam os mesmos fundamentos, mas começar 1414 00:57:27,500 --> 00:57:29,960 expressar-nos um pouco mais como Scratch. 1415 00:57:29,960 --> 00:57:31,660 Assim, em Scratch, tivemos estas expressões booleanas. 1416 00:57:31,660 --> 00:57:34,890 E em Inglês, uma expressão booleana é o quê? 1417 00:57:34,890 --> 00:57:35,580 Verdadeiro ou falso. 1418 00:57:35,580 --> 00:57:38,300 É algo que é avaliada como verdadeira ou falsa. 1419 00:57:38,300 --> 00:57:39,060 1 ou 0. 1420 00:57:39,060 --> 00:57:39,870 Ligado ou desligado. 1421 00:57:39,870 --> 00:57:41,000 Tudo o que você quiser chamá-lo. 1422 00:57:41,000 --> 00:57:43,210 Agora em Scratch, as peças do puzzle olhou como este. 1423 00:57:43,210 --> 00:57:45,850 E essa é a combinação, no fundo lá, de três 1424 00:57:45,850 --> 00:57:47,980 peças do puzzle. 1425 00:57:47,980 --> 00:57:48,980 Uma conjunção - 1426 00:57:48,980 --> 00:57:51,710 algo que tem em branco e em branco. 1427 00:57:51,710 --> 00:57:53,970 E então duas expressões booleanas dentro dela. 1428 00:57:53,970 --> 00:57:56,460 Assim, você pode expressões booleanas ninho de obter mais 1429 00:57:56,460 --> 00:57:59,360 complicado expressões booleanas. 1430 00:57:59,360 --> 00:58:03,930 Por exemplo, se for sábado, e é bom 1431 00:58:03,930 --> 00:58:06,180 tempo, em seguida, ir para fora. 1432 00:58:06,180 --> 00:58:07,500 Ou algo arbitrário assim. 1433 00:58:07,500 --> 00:58:10,090 Assim, você pode juntar-se expressões booleanas para chegar a um 1434 00:58:10,090 --> 00:58:12,780 maior valor de verdade, cuja resposta é baseada 1435 00:58:12,780 --> 00:58:13,800 em que os menores. 1436 00:58:13,800 --> 00:58:15,770 >> Agora, em C, felizmente, esse mapeamento é 1437 00:58:15,770 --> 00:58:16,720 realmente muito simples. 1438 00:58:16,720 --> 00:58:18,820 Parênteses ajudar a tornar as coisas claras aqui. 1439 00:58:18,820 --> 00:58:21,700 && É o que significa "e". Então é assim que 1440 00:58:21,700 --> 00:58:24,700 vamos converter esses blocos a partir do zero para C. 1441 00:58:24,700 --> 00:58:27,590 E para as condições que vimos em Scratch, na mão esquerda 1442 00:58:27,590 --> 00:58:31,150 lado lá, pode empilhá-los de forma semelhante em C. Se x é menor 1443 00:58:31,150 --> 00:58:32,970 de y, então fazer isso. 1444 00:58:32,970 --> 00:58:35,100 Else if x é maior que y, então faça isso. 1445 00:58:35,100 --> 00:58:38,030 Else logicamente eles devem ser iguais, por isso digo 1446 00:58:38,030 --> 00:58:39,140 que eles são iguais. 1447 00:58:39,140 --> 00:58:41,210 Assim, podemos agora começar a construir essas coisas. 1448 00:58:41,210 --> 00:58:42,170 >> Então vamos fazer um exemplo. 1449 00:58:42,170 --> 00:58:45,550 Deixe-me abrir um arquivo que está no site do curso que 1450 00:58:45,550 --> 00:58:47,270 Eu escrevi com antecedência. 1451 00:58:47,270 --> 00:58:50,540 Isso é chamado de nonswitch.c. 1452 00:58:50,540 --> 00:58:52,270 E vamos ver por que, em apenas um momento. 1453 00:58:52,270 --> 00:58:54,770 Portanto, neste arquivo - nonswitch.c - 1454 00:58:54,770 --> 00:58:56,830 primeiro perceber que há um monte de 1455 00:58:56,830 --> 00:58:58,460 comentários no topo. 1456 00:58:58,460 --> 00:59:00,110 Isso é apenas explicando o nome do arquivo, o que 1457 00:59:00,110 --> 00:59:01,260 faz, e assim por diante. 1458 00:59:01,260 --> 00:59:04,390 E, aparentemente, demonstra o uso de Boolean E-vel - 1459 00:59:04,390 --> 00:59:06,220 conjunção de duas expressões. 1460 00:59:06,220 --> 00:59:07,670 >> Então vamos ver como esse programa funciona. 1461 00:59:07,670 --> 00:59:10,840 Eu incluir meus dois arquivos, cs50.h e stdio.h. 1462 00:59:10,840 --> 00:59:13,180 Se eu rolar para baixo, agora, com o programa, que é um pouco mais 1463 00:59:13,180 --> 00:59:15,730 do que já escrevi antes, mas muito legível. 1464 00:59:15,730 --> 00:59:18,360 Então eu primeiro imprimir para o usuário, na linha 18, 1465 00:59:18,360 --> 00:59:20,460 "Dê-me um número inteiro entre 1 e 10." Assim 1466 00:59:20,460 --> 00:59:21,530 que está ali. 1467 00:59:21,530 --> 00:59:23,410 Agora eu entendo o inteiro. 1468 00:59:23,410 --> 00:59:25,380 Mas perceba que GetInt - muito simples. 1469 00:59:25,380 --> 00:59:26,510 Ele só vai ter uma int. 1470 00:59:26,510 --> 00:59:28,830 Vai garantir que ele não se um int e não um 1471 00:59:28,830 --> 00:59:30,060 corda ou uma bóia. 1472 00:59:30,060 --> 00:59:32,390 Mas não vai fazer qualquer tipo de verificação de limite. 1473 00:59:32,390 --> 00:59:34,750 Não vai para filtrar os números para ser entre um 1474 00:59:34,750 --> 00:59:35,630 determinado intervalo. 1475 00:59:35,630 --> 00:59:37,730 Portanto, temos de implementar que nós mesmos. 1476 00:59:37,730 --> 00:59:40,680 Assim como em Scratch, onde eu poderia fazer um conjunto de 1477 00:59:40,680 --> 00:59:43,560 duas expressões, eu posso fazer isso em C da seguinte forma. 1478 00:59:43,560 --> 00:59:48,660 Se n for maior do que ou igual a 1, e n é menor do que e 1479 00:59:48,660 --> 00:59:52,220 ou igual a 3, eu estou indo muito decreto que arbitrariamente 1480 00:59:52,220 --> 00:59:53,830 número para ser um número pequeno. 1481 00:59:53,830 --> 00:59:56,730 Só por causa de uma declaração. 1482 00:59:56,730 --> 01:00:00,210 Else if n é entre 4 e 6 de impressão "Você escolheu um meio 1483 01:00:00,210 --> 01:00:03,440 número. "Else se n é entre 7 e 10, print" Você escolheu um 1484 01:00:03,440 --> 01:00:06,390 número grande. "Else imprimir" Você escolhe um número inválido ". 1485 01:00:06,390 --> 01:00:07,900 Porque logicamente, que se segue, temos 1486 01:00:07,900 --> 01:00:09,230 exaustos nossa gama. 1487 01:00:09,230 --> 01:00:12,400 >> Assim que isso não é exatamente como nós escrevemos maior ou 1488 01:00:12,400 --> 01:00:15,000 igual ao de uma aula de matemática. 1489 01:00:15,000 --> 01:00:15,160 Certo? 1490 01:00:15,160 --> 01:00:17,430 Você costuma desenhar-lo assim, com a linha sob ele. 1491 01:00:17,430 --> 01:00:19,250 Mas não há nenhuma chave, no meu teclado. 1492 01:00:19,250 --> 01:00:22,390 Assim, o símbolo em C para a expressão maior ou 1493 01:00:22,390 --> 01:00:25,770 é igual a dois personagens, eo símbolo para menos de 1494 01:00:25,770 --> 01:00:29,100 ou é igual a dois caracteres também. 1495 01:00:29,100 --> 01:00:29,330 Tudo bem. 1496 01:00:29,330 --> 01:00:31,910 Então, se eu executar este programa, você pode imaginar o que é 1497 01:00:31,910 --> 01:00:32,650 vai fazer. 1498 01:00:32,650 --> 01:00:36,180 Se eu ir em frente e fazer nonswitch, Enter. 1499 01:00:36,180 --> 01:00:38,130 E depois executar nonswitch. 1500 01:00:38,130 --> 01:00:39,530 Dê-me um número entre 1 e 10. 1501 01:00:39,530 --> 01:00:40,870 Eu vou dar-lhe 11. 1502 01:00:40,870 --> 01:00:42,280 Eu escolhi um número inválido. 1503 01:00:42,280 --> 01:00:44,090 Deixe-me tentar o número 3. 1504 01:00:44,090 --> 01:00:45,990 Eu escolhi um número pequeno. 1505 01:00:45,990 --> 01:00:48,360 Então há bastante simples. 1506 01:00:48,360 --> 01:00:52,230 >> E se eu quiser mudar o comportamento deste programa e 1507 01:00:52,230 --> 01:00:54,250 fazer algo um pouco diferente, em vez? 1508 01:00:54,250 --> 01:00:57,620 Deixe-me ir em frente e dizer isso. 1509 01:00:57,620 --> 01:00:59,480 Deixe-me livrar de tudo isso. 1510 01:00:59,480 --> 01:01:03,780 E deixe-me dizer se (n == 42). 1511 01:01:03,780 --> 01:01:08,730 E então eu estou indo para ir em frente e dizer print "Você escolheu o 1512 01:01:08,730 --> 01:01:16,340 resposta certa. "Else vamos ir em frente e dizer: 1513 01:01:16,340 --> 01:01:18,460 printf ("Você escolheu o 1514 01:01:18,460 --> 01:01:21,170 resposta errada ");. Okay. 1515 01:01:21,170 --> 01:01:22,040 Só porque. 1516 01:01:22,040 --> 01:01:23,890 >> Agora, alguns pontos que podemos fazer aqui. 1517 01:01:23,890 --> 01:01:26,570 Um, eu não digite o símbolo que você acha que é o 1518 01:01:26,570 --> 01:01:27,390 mais razoável. 1519 01:01:27,390 --> 01:01:30,110 Quando eu quero verificar a igualdade, acaba por não utilizar o 1520 01:01:30,110 --> 01:01:30,910 sinal de igual. 1521 01:01:30,910 --> 01:01:34,000 Você, em vez usar o sinal de igual igual. 1522 01:01:34,000 --> 01:01:36,440 E por que pode ser, apenas de forma intuitiva? 1523 01:01:36,440 --> 01:01:37,030 Sim. 1524 01:01:37,030 --> 01:01:39,330 AUDIÊNCIA: [inaudível] 1525 01:01:39,330 --> 01:01:39,615 DAVID J. MALAN: Correto. 1526 01:01:39,615 --> 01:01:41,630 O sinal de igual já é usado para atribuição. 1527 01:01:41,630 --> 01:01:43,020 Alguém realmente não penso nisso. 1528 01:01:43,020 --> 01:01:45,820 E agora, quando se trata de testes de igualdade, temos que 1529 01:01:45,820 --> 01:01:48,850 ser mais explícito, e dizer iguais iguais. 1530 01:01:48,850 --> 01:01:52,110 Um erro muito comum é fazer isso. 1531 01:01:52,110 --> 01:01:54,800 E, em caso de expediente ou semanas algures próximo ou no 1532 01:01:54,800 --> 01:01:58,340 próximas duas semanas você fazer algo assim e depois 1533 01:01:58,340 --> 01:02:00,920 lutar com ele por 10, 20 minutos tentando descobrir 1534 01:02:00,920 --> 01:02:03,330 o que o bug maldito seja, perceber que você é uma daquelas pessoas 1535 01:02:03,330 --> 01:02:04,470 pessoas que fizeram este erro. 1536 01:02:04,470 --> 01:02:06,030 Então, super fácil de fazer. 1537 01:02:06,030 --> 01:02:08,240 Mas o objetivo agora é evitar este erro. 1538 01:02:08,240 --> 01:02:11,840 Isso pode avaliar, porque o que é isso realmente dizendo? 1539 01:02:11,840 --> 01:02:15,010 Se n recebe 42. 1540 01:02:15,010 --> 01:02:18,250 Então, as pessoas verbo usar, verbalmente, para expressar a 1541 01:02:18,250 --> 01:02:21,800 noção de atribuição é "fica". Então, se n fica 42. 1542 01:02:21,800 --> 01:02:24,060 Então isso significa atribuir 42 a n. 1543 01:02:24,060 --> 01:02:26,250 Agora eu tenho uma expressão booleana entre parênteses, 1544 01:02:26,250 --> 01:02:30,230 dentro desta condição, cujo valor é de 42. 1545 01:02:30,230 --> 01:02:30,390 Certo? 1546 01:02:30,390 --> 01:02:32,690 Porque se você avaliar isso de dentro para fora, o total 1547 01:02:32,690 --> 01:02:34,100 resposta, agora, é de 42. 1548 01:02:34,100 --> 01:02:37,360 >> Então, se eu perguntei-lhe a pergunta, "se (42)," o que é 1549 01:02:37,360 --> 01:02:38,410 que realmente dizendo? 1550 01:02:38,410 --> 01:02:40,990 Bem, expressões booleanas só pode ser verdadeira ou falsa. 1551 01:02:40,990 --> 01:02:42,010 1 ou 0. 1552 01:02:42,010 --> 01:02:43,010 Ligado ou desligado. 1553 01:02:43,010 --> 01:02:45,240 Então, parece que temos um caso de canto aqui, em que todos de uma 1554 01:02:45,240 --> 01:02:50,060 repente, eu estou dizendo que "se (42)". Isso não é um valor booleano. 1555 01:02:50,060 --> 01:02:54,500 Então, o que os computadores fazem, porém, é essencialmente iguala 1556 01:02:54,500 --> 01:02:58,620 qualquer coisa que não é 0 é interpretado para ser verdade. 1557 01:02:58,620 --> 01:02:59,340 1. 1558 01:02:59,340 --> 01:02:59,690 Ligado. 1559 01:02:59,690 --> 01:03:01,510 Eles são todos funcionalmente equivalente. 1560 01:03:01,510 --> 01:03:05,070 Apenas o valor 0, ou a palavra-chave falsa, como veremos 1561 01:03:05,070 --> 01:03:07,860 eventualmente ver, é realmente falso. 1562 01:03:07,860 --> 01:03:15,040 Assim, "se (42)" seria realmente verdadeira, porque é diferente de zero. 1563 01:03:15,040 --> 01:03:18,620 Então, para ser mais preciso aqui, um valor booleano não é realmente tão 1564 01:03:18,620 --> 01:03:20,680 muito verdadeiro ou falso, mas para isso 1565 01:03:20,680 --> 01:03:24,650 dos casos, se for 0 ou não-zero. 1566 01:03:24,650 --> 01:03:26,330 Tão falso ou não falso. 1567 01:03:26,330 --> 01:03:28,640 E que nos permite abranger ainda mais 1568 01:03:28,640 --> 01:03:30,980 possibilidades na expressão entre parênteses. 1569 01:03:30,980 --> 01:03:33,840 Então, precisamos, sempre com muito cuidado, dizer isso - 1570 01:03:33,840 --> 01:03:35,620 if (n == 42). 1571 01:03:35,620 --> 01:03:39,100 Simplesmente porque precisamos especificar um teste de igualdade, 1572 01:03:39,100 --> 01:03:40,930 não uma atribuição de um valor. 1573 01:03:40,930 --> 01:03:42,830 >> O que mais vale a pena notar aqui? 1574 01:03:42,830 --> 01:03:46,030 Estas chaves não são realmente necessárias. 1575 01:03:46,030 --> 01:03:48,650 Venho fazendo-os apenas para ser nit-picky aqui. 1576 01:03:48,650 --> 01:03:51,350 Mas quando você tem uma condição que só tem uma linha de 1577 01:03:51,350 --> 01:03:55,100 código, como uma conveniência, os programadores não precisam usar 1578 01:03:55,100 --> 01:03:56,030 as chaves. 1579 01:03:56,030 --> 01:03:59,370 Basta apenas travessão, por razões estéticas, e 1580 01:03:59,370 --> 01:04:01,050 seguida, escreva a linha de código. 1581 01:04:01,050 --> 01:04:04,160 Somente quando você quiser escrever duas linhas de código - para 1582 01:04:04,160 --> 01:04:08,230 exemplo, else printf ("Adeus!"). Se você quer fazer 1583 01:04:08,230 --> 01:04:09,540 que, esta é quebrada. 1584 01:04:09,540 --> 01:04:11,700 Você pode recuar tudo o que quiser, mas o fato de que você tem 1585 01:04:11,700 --> 01:04:14,600 digitado duas linhas de código sem usar chaves 1586 01:04:14,600 --> 01:04:16,860 significa que este programa não funcionar corretamente ou talvez 1587 01:04:16,860 --> 01:04:18,530 nem mesmo compilar corretamente. 1588 01:04:18,530 --> 01:04:21,040 Então, por agora, para ser honesto, eu acho que o melhor é apenas hábito 1589 01:04:21,040 --> 01:04:24,460 usar as chaves, e você verá que eles fazem 1590 01:04:24,460 --> 01:04:25,750 super claro o que está acontecendo. 1591 01:04:25,750 --> 01:04:29,410 >> Além disso, como um aparte - especialmente se você está entre aqueles que usam 1592 01:04:29,410 --> 01:04:31,700 os livros recomendados ou recursos on-line - 1593 01:04:31,700 --> 01:04:33,480 perceber que há esta noção de estilo em 1594 01:04:33,480 --> 01:04:34,130 programação. 1595 01:04:34,130 --> 01:04:37,280 E algumas pessoas realmente preferem colocar a chaveta 1596 01:04:37,280 --> 01:04:38,720 aqui em uma linha. 1597 01:04:38,720 --> 01:04:41,520 Algumas pessoas preferem fazer coisas ridículas, 1598 01:04:41,520 --> 01:04:43,830 como colocá-los aqui. 1599 01:04:43,830 --> 01:04:45,140 Não há resposta errada quando se trata de 1600 01:04:45,140 --> 01:04:46,710 estilo, mas isso é errado. 1601 01:04:46,710 --> 01:04:47,700 Mas algumas pessoas fazem isso. 1602 01:04:47,700 --> 01:04:49,160 [Risos] 1603 01:04:49,160 --> 01:04:51,760 DAVID J. MALAN: Então eu falar isso agora, simplesmente porque, como 1604 01:04:51,760 --> 01:04:54,400 você ler sobre coisas em livros ou on-line, você está indo para obter 1605 01:04:54,400 --> 01:04:55,990 mensagens diferentes de diferentes professores e 1606 01:04:55,990 --> 01:04:56,730 diferentes autores. 1607 01:04:56,730 --> 01:04:58,640 E só percebe que, funcionalmente, eles são 1608 01:04:58,640 --> 01:05:00,740 geralmente equivalente, mas ser consistente. 1609 01:05:00,740 --> 01:05:02,850 Portanto, neste caso, vamos padronizar o crespo 1610 01:05:02,850 --> 01:05:04,650 chaves alinhando aqui do lado esquerdo. 1611 01:05:04,650 --> 01:05:04,910 >> Tudo bem. 1612 01:05:04,910 --> 01:05:07,040 Então, vamos em frente agora e correr isto, e ver o que acontece 1613 01:05:07,040 --> 01:05:07,780 com este programa. 1614 01:05:07,780 --> 01:05:09,970 Faça nonswitch. 1615 01:05:09,970 --> 01:05:11,040 Em seguida, execute nonswitch. 1616 01:05:11,040 --> 01:05:13,900 Dê-me um número inteiro entre 0 e - de modo que não é relevante 1617 01:05:13,900 --> 01:05:16,480 mais, mas eu só vou dizer arbitrariamente 42. 1618 01:05:16,480 --> 01:05:17,850 E eu escolhi a resposta certa. 1619 01:05:17,850 --> 01:05:20,430 Bem, agora, vamos realmente tomar isso em uma direção diferente. 1620 01:05:20,430 --> 01:05:22,070 Acontece que há alguma outra sintaxe que 1621 01:05:22,070 --> 01:05:23,480 pode utilizar em um programa. 1622 01:05:23,480 --> 01:05:27,310 Aqui está uma nova peça de sintaxe que é funcionalmente o mesmo, 1623 01:05:27,310 --> 01:05:30,680 mas apenas introduz uma outra maneira de nos expressar. 1624 01:05:30,680 --> 01:05:32,830 Então é isso que é chamado de "switch". E um 1625 01:05:32,830 --> 01:05:34,820 switch funciona da seguinte forma. 1626 01:05:34,820 --> 01:05:37,580 É preciso, entre parênteses, um valor que você quer 1627 01:05:37,580 --> 01:05:38,860 "Switch" em. 1628 01:05:38,860 --> 01:05:41,490 Você quer se comportar de forma diferente com base no seu valor. 1629 01:05:41,490 --> 01:05:44,360 Assim, isto significa que ligue o valor de n. 1630 01:05:44,360 --> 01:05:45,480 E o que isso significa? 1631 01:05:45,480 --> 01:05:50,530 Bem, se n é 1 ou 2 ou 3, vá em frente e imprimir "Você 1632 01:05:50,530 --> 01:05:52,680 escolheu um número grande "e, em seguida, quebrar. 1633 01:05:52,680 --> 01:05:55,720 A razão para a quebra é que o caminho é C funciona como 1634 01:05:55,720 --> 01:05:59,790 assim que encontrar um caso que corresponde, que inicia a execução 1635 01:05:59,790 --> 01:06:01,610 todo o código abaixo. 1636 01:06:01,610 --> 01:06:04,580 Então, se eu tenho uma linha de código, como faço aqui na linha 27, ele 1637 01:06:04,580 --> 01:06:05,360 é executado. 1638 01:06:05,360 --> 01:06:07,520 Se eu adicionar uma outra linha aqui, ele é executado. 1639 01:06:07,520 --> 01:06:09,350 Outra linha aqui, ele é executado. 1640 01:06:09,350 --> 01:06:12,460 O único programa pára de executar o que está abaixo da 1641 01:06:12,460 --> 01:06:14,680 declaração caso aplicável quando eu explicitamente 1642 01:06:14,680 --> 01:06:17,210 dizer "quebrar". Tão errado. 1643 01:06:17,210 --> 01:06:19,220 Direita, neste caso, como um resultado. 1644 01:06:19,220 --> 01:06:22,130 4 Processo, 5 ou 6, do mesmo modo, vai 1645 01:06:22,130 --> 01:06:23,160 para imprimir uma mensagem. 1646 01:06:23,160 --> 01:06:24,410 Neste caso, número médio. 1647 01:06:24,410 --> 01:06:25,200 Quebrar. 1648 01:06:25,200 --> 01:06:28,160 Caso 7, 8, 9, 10, que vai imprimir "Você escolheu um grande 1649 01:06:28,160 --> 01:06:28,950 número. "Break. 1650 01:06:28,950 --> 01:06:31,290 E depois há uma palavra-chave literalmente chamado de "default" 1651 01:06:31,290 --> 01:06:34,090 que é efetivamente como o "outro" construir. 1652 01:06:34,090 --> 01:06:36,010 Então nova sintaxe, mas intelectualmente, 1653 01:06:36,010 --> 01:06:37,060 nada aqui de novo. 1654 01:06:37,060 --> 01:06:38,280 É como o Scratch. 1655 01:06:38,280 --> 01:06:41,040 Se, else if, else if, uma espécie de bloco. 1656 01:06:41,040 --> 01:06:44,560 >> Então essa é a versão mudou deste programa. 1657 01:06:44,560 --> 01:06:46,280 Mas note que nós fizemos com os números aqui. 1658 01:06:46,280 --> 01:06:49,040 Deixe-me abrir uma segunda versão, apenas para mostrar 1659 01:06:49,040 --> 01:06:50,670 algo um pouco mais concreto. 1660 01:06:50,670 --> 01:06:52,840 Portanto, temos aqui os graus vez. 1661 01:06:52,840 --> 01:06:55,540 Acontece que você pode usar opções não apenas em números inteiros, mas em 1662 01:06:55,540 --> 01:06:56,340 caracteres. 1663 01:06:56,340 --> 01:06:58,930 Não em todos os tipos de dados, mas, pelo menos, em caracteres. 1664 01:06:58,930 --> 01:07:02,670 Então, aqui, nós poderíamos fazer algo como se o valor de C que 1665 01:07:02,670 --> 01:07:06,230 o usuário digitou, na linha 19, usando a função GetChar 1666 01:07:06,230 --> 01:07:09,410 Um é o capital ou minúsculas um, vamos interpretá-lo como uma grade, 1667 01:07:09,410 --> 01:07:11,340 e dizem que pegou uma nota excelente. 1668 01:07:11,340 --> 01:07:14,690 E para baixo ao longo da instrução switch, temos outro 1669 01:07:14,690 --> 01:07:17,950 casos de "B" s e "C" s, e assim por diante. 1670 01:07:17,950 --> 01:07:19,780 Mas vamos agora completar uma outra coisa. 1671 01:07:19,780 --> 01:07:21,130 E, novamente, espécie de voar através de 1672 01:07:21,130 --> 01:07:22,200 alguns desses exemplos. 1673 01:07:22,200 --> 01:07:26,990 Mas é realmente para que possamos aplicá-los, agora - 1674 01:07:26,990 --> 01:07:28,880 ou realmente, apenas traduzi-los agora - 1675 01:07:28,880 --> 01:07:32,220 para C. 1676 01:07:32,220 --> 01:07:33,310 >> Então deixe-me ir em frente e fazer isso. 1677 01:07:33,310 --> 01:07:34,830 Vou abrir um novo arquivo. 1678 01:07:34,830 --> 01:07:39,430 E eu vou fazer include. 1679 01:07:39,430 --> 01:07:42,770 E então eu vou fazer int main (void). 1680 01:07:42,770 --> 01:07:46,390 Deixe-me salvar esse arquivo como um loop.c. 1681 01:07:46,390 --> 01:07:48,280 Apenas como um exemplo. 1682 01:07:48,280 --> 01:07:49,910 E eu estou indo para ir em frente e fazer o seguinte. 1683 01:07:49,910 --> 01:07:54,180 Eu quero escrever um programa muito tedioso. 1684 01:07:54,180 --> 01:07:56,170 Então, 10. 1685 01:07:56,170 --> 01:07:58,862 Vamos fazer isso. 1686 01:07:58,862 --> 01:07:59,320 9. 1687 01:07:59,320 --> 01:08:00,360 Tudo bem. 1688 01:08:00,360 --> 01:08:02,120 Assim que você começar a fazer isso na programação, você é 1689 01:08:02,120 --> 01:08:03,490 provavelmente fazendo algo errado. 1690 01:08:03,490 --> 01:08:04,950 Mas vamos começar lá de qualquer maneira. 1691 01:08:04,950 --> 01:08:05,430 Oops. 1692 01:08:05,430 --> 01:08:06,950 Isso é realmente errado. 1693 01:08:06,950 --> 01:08:08,230 7. 1694 01:08:08,230 --> 01:08:09,440 6. 1695 01:08:09,440 --> 01:08:10,750 5. 1696 01:08:10,750 --> 01:08:11,200 4. 1697 01:08:11,200 --> 01:08:12,450 Nada vai acontecer quando chegarmos a 0. 1698 01:08:12,450 --> 01:08:13,290 3. 1699 01:08:13,290 --> 01:08:14,590 2. 1700 01:08:14,590 --> 01:08:15,630 1. 1701 01:08:15,630 --> 01:08:16,020 Okay. 1702 01:08:16,020 --> 01:08:17,560 0. 1703 01:08:17,560 --> 01:08:18,689 Excluir. 1704 01:08:18,689 --> 01:08:19,029 >> Tudo bem. 1705 01:08:19,029 --> 01:08:20,029 Então retorne 0. 1706 01:08:20,029 --> 01:08:22,010 Portanto, este programa, obviamente, vai fazer o que muito 1707 01:08:22,010 --> 01:08:23,310 tediosamente diz que vai fazer. 1708 01:08:23,310 --> 01:08:24,060 Vai imprimir todos os 1709 01:08:24,060 --> 01:08:25,290 valores, de cima para baixo. 1710 01:08:25,290 --> 01:08:27,140 Então deixe-me fazem loop. 1711 01:08:27,140 --> 01:08:28,640 E então - gritos. 1712 01:08:28,640 --> 01:08:29,700 Faça loop. 1713 01:08:29,700 --> 01:08:31,479 Eu estava no diretório errado. 1714 01:08:31,479 --> 01:08:33,300 E agora deixe-me correr loop. 1715 01:08:33,300 --> 01:08:34,140 Enter. 1716 01:08:34,140 --> 01:08:34,620 Woohoo. 1717 01:08:34,620 --> 01:08:35,270 Very nice. 1718 01:08:35,270 --> 01:08:36,279 Programa, longa e agradável. 1719 01:08:36,279 --> 01:08:38,109 >> Tudo bem, mas agora vamos fazer isso melhor. 1720 01:08:38,109 --> 01:08:40,810 Assim como no Scratch, quando você começou a usar um looping 1721 01:08:40,810 --> 01:08:43,149 construir, em vez de apenas copiar e colar todo o 1722 01:08:43,149 --> 01:08:45,580 peças do puzzle, deixe-me apresentar essa coisa. 1723 01:08:45,580 --> 01:08:48,609 Assim, em C, existem várias construções de iteração, 1724 01:08:48,609 --> 01:08:50,540 um dos que se parece com isso. 1725 01:08:50,540 --> 01:08:55,069 Um laço "for" tem três coisas, separados por dois pontos e vírgula. 1726 01:08:55,069 --> 01:08:57,770 E, em seguida, no interior do corpo do laço, por assim dizer - a 1727 01:08:57,770 --> 01:08:59,390 coisas dentro das chaves - 1728 01:08:59,390 --> 01:09:01,010 nós podemos fazer algo de novo e de novo. 1729 01:09:01,010 --> 01:09:02,310 Então, o que eu tenho aqui na tela, este é 1730 01:09:02,310 --> 01:09:03,300 literalmente apenas um comentário. 1731 01:09:03,300 --> 01:09:05,380 O / / significa aqui vem um comentário. 1732 01:09:05,380 --> 01:09:06,180 Este não é um código. 1733 01:09:06,180 --> 01:09:08,890 Esta é apenas uma descrição Inglês, para mim, o humano. 1734 01:09:08,890 --> 01:09:11,300 >> Inicializações assim, condições, e atualizações. 1735 01:09:11,300 --> 01:09:12,770 Bem, vamos ver como isso funciona. 1736 01:09:12,770 --> 01:09:15,520 Isto permite-me reescrever este programa como segue. 1737 01:09:15,520 --> 01:09:16,399 Para - 1738 01:09:16,399 --> 01:09:18,029 Então, aqui vem o meu loop - 1739 01:09:18,029 --> 01:09:19,439 int i - 1740 01:09:19,439 --> 01:09:21,330 aqui vem uma variável chamada "i" - 1741 01:09:21,330 --> 01:09:23,140 fica inicializado a 10. 1742 01:09:23,140 --> 01:09:25,260 Portanto, não é a minha inicialização. 1743 01:09:25,260 --> 01:09:29,450 Eu quero fazer esse laço tão longa como "i" é maior ou 1744 01:09:29,450 --> 01:09:30,899 igual a 0. 1745 01:09:30,899 --> 01:09:32,880 E em cada iteração deste laço, eu quero 1746 01:09:32,880 --> 01:09:34,979 fazer i -. 1747 01:09:34,979 --> 01:09:36,310 Então vimos + + na segunda-feira. 1748 01:09:36,310 --> 01:09:37,660 - É o oposto. 1749 01:09:37,660 --> 01:09:39,410 Ele diminui o valor em 1. 1750 01:09:39,410 --> 01:09:43,319 Dentro deste ciclo, que eu quero realmente fazer alguma coisa. 1751 01:09:43,319 --> 01:09:46,390 Então, eu vou dizer algo como printf. 1752 01:09:46,390 --> 01:09:48,939 Eu não quero dizer 10 agora, porque isso obviamente é apenas 1753 01:09:48,939 --> 01:09:50,000 indo para imprimir o mesmo valor. 1754 01:09:50,000 --> 01:09:52,246 O que eu quero para imprimir em vez disso, provavelmente? 1755 01:09:52,246 --> 01:09:52,590 Sim. 1756 01:09:52,590 --> 01:09:55,270 Assim, "i". Então% d, i. 1757 01:09:55,270 --> 01:09:57,340 >> Então eu vou roubar uma daquelas idéias de mais cedo - 1758 01:09:57,340 --> 01:09:59,640 esta substituição de códigos de formato - 1759 01:09:59,640 --> 01:10:01,620 e depois aqui em baixo, no fundo, eu vou retornar 0, apenas 1760 01:10:01,620 --> 01:10:02,710 para uma boa medida. 1761 01:10:02,710 --> 01:10:04,740 Mas agora, eu tenho um programa mais sucinto. 1762 01:10:04,740 --> 01:10:07,490 É apenas poucas linhas, e não cerca de 10 ou 11 linhas. 1763 01:10:07,490 --> 01:10:09,440 Deixe-me ir para a minha rápida aqui. 1764 01:10:09,440 --> 01:10:10,630 Laço remake. 1765 01:10:10,630 --> 01:10:12,140 Execute novamente loop. 1766 01:10:12,140 --> 01:10:13,570 E que parece ser a mesma. 1767 01:10:13,570 --> 01:10:15,550 Agora, o programa não é mais interessante. 1768 01:10:15,550 --> 01:10:17,180 Mas agora eu posso escrever algo como isto. 1769 01:10:17,180 --> 01:10:18,970 Eu posso mudar isso para 100. 1770 01:10:18,970 --> 01:10:21,400 Eu posso então recompilar o meu programa. 1771 01:10:21,400 --> 01:10:23,360 E então eu posso voltar a executar o meu programa. 1772 01:10:23,360 --> 01:10:26,390 E agora ele vai super-rápido em computadores de hoje. 1773 01:10:26,390 --> 01:10:27,820 Mas lá eu tenho - 1774 01:10:27,820 --> 01:10:29,620 e realmente, a minha memória de retrocesso não 1775 01:10:29,620 --> 01:10:30,890 até mesmo ir tão longe. 1776 01:10:30,890 --> 01:10:31,680 Lá vamos nós. 1777 01:10:31,680 --> 01:10:34,090 Portanto, temos todos os 100. 1778 01:10:34,090 --> 01:10:35,880 Mas é fácil cometer erros aqui. 1779 01:10:35,880 --> 01:10:37,920 O que vai ser o comportamento esperado se eu 1780 01:10:37,920 --> 01:10:41,150 acidentalmente fazer isso? 1781 01:10:41,150 --> 01:10:42,550 Então ela se sente como infinito. 1782 01:10:42,550 --> 01:10:44,670 Então, vamos ver se o computador se comporta. 1783 01:10:44,670 --> 01:10:47,020 >> Então deixe-me ir em frente e fazer loop. 1784 01:10:47,020 --> 01:10:48,355 E deixe-me correr loop. 1785 01:10:53,590 --> 01:10:55,210 Então, vamos voltar a isso em apenas um momento. 1786 01:10:55,210 --> 01:10:56,720 Vamos deixar que a execução. 1787 01:10:56,720 --> 01:10:59,520 Porque o que devemos contar até, no mínimo? 1788 01:10:59,520 --> 01:11:02,200 Provavelmente, pelo menos, 2 bilhões, se nós temos que muitos bits, e 1789 01:11:02,200 --> 01:11:03,660 estamos usando valores positivos. 1790 01:11:03,660 --> 01:11:04,890 Então, vamos voltar aqui. 1791 01:11:04,890 --> 01:11:07,810 Além desses tipos de loops, temos o que se chama, enquanto 1792 01:11:07,810 --> 01:11:09,430 Loops. Então, assim como no Scratch, você tinha sempre 1793 01:11:09,430 --> 01:11:11,240 blocos, e você tinha blocos de repetição. 1794 01:11:11,240 --> 01:11:13,270 Da mesma forma, em C, você só tem outras maneiras 1795 01:11:13,270 --> 01:11:14,260 de se expressar. 1796 01:11:14,260 --> 01:11:17,110 Então você tem essa noção de um loop while que lhe permite 1797 01:11:17,110 --> 01:11:18,860 expressar-se um pouco diferente. 1798 01:11:18,860 --> 01:11:21,490 E então você tem algo chamado um loop do-while, 1799 01:11:21,490 --> 01:11:24,200 que opera de forma ligeiramente diferente também. 1800 01:11:24,200 --> 01:11:25,320 E nós vamos provocar estes separados ao longo do tempo. 1801 01:11:25,320 --> 01:11:28,630 >> Mas vamos dar uma olhada neste último aqui. 1802 01:11:28,630 --> 01:11:30,160 Se entrar em - 1803 01:11:30,160 --> 01:11:31,466 ainda em execução. 1804 01:11:31,466 --> 01:11:32,770 É bem infinito. 1805 01:11:32,770 --> 01:11:36,870 Então deixe-me ir para positiva, e mostrar como podemos realmente 1806 01:11:36,870 --> 01:11:39,410 governar a entrada do usuário um pouco mais eficaz. 1807 01:11:39,410 --> 01:11:40,910 É um programa muito curto. 1808 01:11:40,910 --> 01:11:43,730 E aqui temos, em principal, uma declaração int n. 1809 01:11:43,730 --> 01:11:46,570 Então me dê uma variável chamada n. Agora, eu literalmente dizer 1810 01:11:46,570 --> 01:11:48,340 "Fazer". E então eu tenho aberto encaracolado 1811 01:11:48,340 --> 01:11:49,630 cinta, chaveta perto. 1812 01:11:49,630 --> 01:11:52,000 E então perceber, logo depois disso, ele diz que enquanto n 1813 01:11:52,000 --> 01:11:53,790 é menor do que 1. 1814 01:11:53,790 --> 01:11:55,300 Então, observe que estas linhas - 1815 01:11:55,300 --> 01:11:56,740 19-24 - 1816 01:11:56,740 --> 01:11:59,450 compor coletivamente um laço do-while. 1817 01:11:59,450 --> 01:12:01,280 E, novamente, nova sintaxe, não uma idéia nova. 1818 01:12:01,280 --> 01:12:03,740 É apenas outra forma de looping, sintaticamente. 1819 01:12:03,740 --> 01:12:04,890 Então, o que isso faz? 1820 01:12:04,890 --> 01:12:08,000 Faça o seguinte, enquanto n é menor que 1. 1821 01:12:08,000 --> 01:12:09,080 Então, o que eu quero fazer? 1822 01:12:09,080 --> 01:12:11,390 Eu exijo que você me dê um número inteiro positivo. 1823 01:12:11,390 --> 01:12:14,110 Então eu realmente tentar obter um número inteiro do usuário. 1824 01:12:14,110 --> 01:12:16,740 Mas em termos de a ordem das operações aqui, porque a 1825 01:12:16,740 --> 01:12:21,850 enquanto condição for aqui, então eu estou indo para verificar, é n 1826 01:12:21,850 --> 01:12:23,100 menos do que 1? 1827 01:12:23,100 --> 01:12:24,600 Então, suponha que o usuário - 1828 01:12:24,600 --> 01:12:26,450 depois de ser exigido, desta forma - 1829 01:12:26,450 --> 01:12:29,190 tipos no valor 0. 1830 01:12:29,190 --> 01:12:34,510 Essa condição vai ser verdadeiro ou falso? 1831 01:12:34,510 --> 01:12:35,820 Bem, isso realmente vai ser verdade. 1832 01:12:35,820 --> 01:12:38,700 Porque n é 0, e 0 é menor do que 1. 1833 01:12:38,700 --> 01:12:40,140 E o que isso implica? 1834 01:12:40,140 --> 01:12:41,160 Fazê-lo novamente. 1835 01:12:41,160 --> 01:12:41,990 Fazê-lo novamente. 1836 01:12:41,990 --> 01:12:42,640 Fazê-lo novamente. 1837 01:12:42,640 --> 01:12:46,080 Apenas uma vez que a condição é avaliada como false. 1838 01:12:46,080 --> 01:12:47,510 Se eu digitar 42. 1839 01:12:47,510 --> 01:12:49,690 Bem não, 42 não é inferior a 1. 1840 01:12:49,690 --> 01:12:52,320 Por conseguinte, este laço é feito de execução. 1841 01:12:52,320 --> 01:12:54,650 E então, nesse ponto, o programa vai dizer, obrigado por 1842 01:12:54,650 --> 01:12:57,530 a 42, no presente caso. 1843 01:12:57,530 --> 01:13:00,320 Agora que você tem esse jeito de se expressar - 1844 01:13:00,320 --> 01:13:02,360 Não devemos esperar para que isso termine. 1845 01:13:02,360 --> 01:13:03,620 Vai levar algum tempo. 1846 01:13:03,620 --> 01:13:04,990 Para ser continuado na próxima vez, talvez. 1847 01:13:04,990 --> 01:13:08,050 >> Mas agora, você tem a capacidade de espera para entender um 1848 01:13:08,050 --> 01:13:09,060 pouco de humor geek. 1849 01:13:09,060 --> 01:13:11,560 Desculpas. 1850 01:13:11,560 --> 01:13:13,620 Este não é representativo de humor na ciência da computação 1851 01:13:13,620 --> 01:13:14,870 mundo, mas que é bonito. 1852 01:13:21,020 --> 01:13:23,890 Final [Risos] Vamos com essa nota. 1853 01:13:23,890 --> 01:13:25,750 E nós vamos vê-lo na segunda-feira. 1854 01:13:25,750 --> 01:13:31,629 [Aplausos]