1 00:00:00,000 --> 00:00:02,880 >> [Música tocando] 2 00:00:02,880 --> 00:00:10,580 3 00:00:10,580 --> 00:00:13,500 >> COLUNA 1: Este é CS50 e este é o início da semana dois. 4 00:00:13,500 --> 00:00:18,400 Então, vamos mergulhar direita em algo que é buggy, por assim dizer. 5 00:00:18,400 --> 00:00:24,015 Então, aqui é CS50 IDE e não tenho puxado para cima com antecedência este screen-- maldita 6 00:00:24,015 --> 00:00:25,070 isto. 7 00:00:25,070 --> 00:00:25,760 Alerta de spoiler. 8 00:00:25,760 --> 00:00:26,260 Tudo certo. 9 00:00:26,260 --> 00:00:29,060 Eu puxado até esta tela aqui, que tem um programa muito simples. 10 00:00:29,060 --> 00:00:32,659 Se rolar para baixo, a maioria isso é apenas comenta, 11 00:00:32,659 --> 00:00:36,730 mas aqui em linhas 13 através 17 temos um programa. 12 00:00:36,730 --> 00:00:40,580 >> É sintaticamente válido, o que significa se Eu compilá-lo, ele irá compilar e executar, 13 00:00:40,580 --> 00:00:41,920 mas é buggy. 14 00:00:41,920 --> 00:00:47,330 Este programa afirma nos comentários em cima que deve imprimir 10 estrelas, 15 00:00:47,330 --> 00:00:48,870 mas isso não acontece. 16 00:00:48,870 --> 00:00:53,290 E com base em sua experiência, ou logo para ser experiência com C, 17 00:00:53,290 --> 00:00:56,820 você pode discernir logicamente por que isso é, de fato, com erros? 18 00:00:56,820 --> 00:00:57,804 Sim? 19 00:00:57,804 --> 00:00:59,220 AUDIÊNCIA: Ele vai de zero a 10. 20 00:00:59,220 --> 00:01:01,884 Isso é 11 iterações. 21 00:01:01,884 --> 00:01:02,550 COLUNA 1: Yeah. 22 00:01:02,550 --> 00:01:06,030 Então, ele vai de zero -se através de e igual a 10, 23 00:01:06,030 --> 00:01:08,140 que, naturalmente, é de 11 iterações. 24 00:01:08,140 --> 00:01:10,020 Então, ele vai de impressão, de fato, 11 estrelas. 25 00:01:10,020 --> 00:01:13,040 Assim, a convenção de ciência da computação na maioria das linguagens de programação 26 00:01:13,040 --> 00:01:15,270 é, de fato, apenas para começar a contar em zero, 27 00:01:15,270 --> 00:01:18,800 mas contar até, mas não através do valor que você realmente se preocupam. 28 00:01:18,800 --> 00:01:21,216 >> Agora, isso é uma coisa que Demora um pouco para se acostumar 29 00:01:21,216 --> 00:01:25,350 e até mesmo risco, concebido como é para os não programadores ou não computador 30 00:01:25,350 --> 00:01:28,070 cientistas e para crianças em grande parte, é projectado para ter 31 00:01:28,070 --> 00:01:29,570 você começar a contar geralmente em um. 32 00:01:29,570 --> 00:01:30,277 E isso é bom. 33 00:01:30,277 --> 00:01:33,110 Você pode absolutamente começar a contar em um caso que é mais confortável. 34 00:01:33,110 --> 00:01:37,210 E contar até e através de 10, mas você vai perceber particularmente esta semana 35 00:01:37,210 --> 00:01:39,950 e para além de que só assim muitas coisas na programação 36 00:01:39,950 --> 00:01:42,465 0 supor que é o primeiro dígitos com que você conta, 37 00:01:42,465 --> 00:01:45,590 que você está indo encontrá-lo mais fácil apenas para chegar a este hábito de partida 38 00:01:45,590 --> 00:01:49,490 e contagem de zero até ao valor você se preocupa agora do 39 00:01:49,490 --> 00:01:49,990 vamos embora. 40 00:01:49,990 --> 00:01:50,990 >> Então, isso tem que. 41 00:01:50,990 --> 00:01:53,670 Mudamos o menor ou equivale a pouco menos de. 42 00:01:53,670 --> 00:01:56,050 Vamos dar uma olhada um segundo exemplo aqui. 43 00:01:56,050 --> 00:01:59,585 >> Assim, este programa também afirma na sua comenta-se superior que deve imprimir 44 00:01:59,585 --> 00:02:02,260 dez estrelas, mas isso não acontece. 45 00:02:02,260 --> 00:02:05,540 Qual é o bug aqui? 46 00:02:05,540 --> 00:02:07,930 >> Então, what-- e muito, vamos ser claros. 47 00:02:07,930 --> 00:02:08,610 10 estrelas. 48 00:02:08,610 --> 00:02:11,644 Um por linha, mas isso não acontece. 49 00:02:11,644 --> 00:02:14,810 Então, na verdade, deixe-me ir em frente e compilar um presente, porque é um pouco menos 50 00:02:14,810 --> 00:02:16,900 limpar com base nessa descrição. 51 00:02:16,900 --> 00:02:18,720 Deixe-me ir para o nosso diretório de origem. 52 00:02:18,720 --> 00:02:25,110 Faça buggy de uma barra de ponto, um buggy. 53 00:02:25,110 --> 00:02:28,680 OK, eu vejo 11 estrelas, que ainda é problemático, 54 00:02:28,680 --> 00:02:30,090 mas também tudo está em uma linha. 55 00:02:30,090 --> 00:02:31,500 Qual é o problema aqui? 56 00:02:31,500 --> 00:02:32,339 Sim. 57 00:02:32,339 --> 00:02:33,255 AUDIÊNCIA: [inaudível]. 58 00:02:33,255 --> 00:02:36,194 59 00:02:36,194 --> 00:02:36,860 COLUNA 1: Yeah. 60 00:02:36,860 --> 00:02:40,210 Portanto, esta é uma sutileza que você pode lembro-me fazer uma breve referência. 61 00:02:40,210 --> 00:02:42,793 Mesmo que tudo parece consideravelmente, e é bem recuado, 62 00:02:42,793 --> 00:02:45,850 e que tipo de olhares como Risco- em que a linha 16 e 17 são, 63 00:02:45,850 --> 00:02:47,600 de fato, recuada sob que para loop. 64 00:02:47,600 --> 00:02:48,400 Isso é irrelevante. 65 00:02:48,400 --> 00:02:50,460 O computador não faz conhecer ou ver o espaço em branco. 66 00:02:50,460 --> 00:02:52,910 O espaço em branco é apenas para nós seres humanos, estilisticamente. 67 00:02:52,910 --> 00:02:57,010 O computador não sabe quando você tem chaves, o que seria, na verdade, 68 00:02:57,010 --> 00:02:58,280 corrigir esse problema. 69 00:02:58,280 --> 00:03:02,350 >> Então, se nós realmente fomos em e explicitamente colocar nesses chaves 70 00:03:02,350 --> 00:03:05,220 que iria corrigir esse problema deixando claro para o compilador 71 00:03:05,220 --> 00:03:07,930 que eu realmente deseja executar duas linhas de código novo, 72 00:03:07,930 --> 00:03:09,220 e mais uma vez, e novamente. 73 00:03:09,220 --> 00:03:11,680 Mas qual é a explicação fundamental? 74 00:03:11,680 --> 00:03:12,180 Certo? 75 00:03:12,180 --> 00:03:15,260 Nós não estritamente precisa encaracolado chaves o tempo todo, 76 00:03:15,260 --> 00:03:18,210 mesmo que provavelmente é melhor prática para entrar esse hábito de qualquer maneira 77 00:03:18,210 --> 00:03:20,878 ainda que acrescente dois caracteres em seu código. porque? 78 00:03:20,878 --> 00:03:22,380 >> AUDIÊNCIA: [inaudível]? 79 00:03:22,380 --> 00:03:24,630 COLUNA 1: Sim modo que é outra solução completamente. 80 00:03:24,630 --> 00:03:25,130 Certo? 81 00:03:25,130 --> 00:03:28,250 Especialmente se, à primeira vista você não fizer isso realmente aprecio o que está acontecendo. 82 00:03:28,250 --> 00:03:31,070 Bem, certamente poderíamos apenas fazer duas coisas ao mesmo tempo 83 00:03:31,070 --> 00:03:32,710 e apenas evitar o problema completamente. 84 00:03:32,710 --> 00:03:36,080 E isso é bom, mas agora, para fins de hoje, o que 85 00:03:36,080 --> 00:03:38,200 é a explicação para o erro? 86 00:03:38,200 --> 00:03:39,810 Por que todas essas estrelas em uma linha? 87 00:03:39,810 --> 00:03:40,806 Sim? 88 00:03:40,806 --> 00:03:43,296 >> AUDIÊNCIA: Parece que se você tem uma linha de código, 89 00:03:43,296 --> 00:03:46,649 você pode fazê-lo sem aqueles. 90 00:03:46,649 --> 00:03:47,440 COLUNA 1: Exatamente. 91 00:03:47,440 --> 00:03:48,750 Esta é apenas uma convenção humana. 92 00:03:48,750 --> 00:03:50,750 As pessoas percebem que é um pouco chato ou tedioso 93 00:03:50,750 --> 00:03:53,470 ter de colocar chaves tudo do tempo, se tudo que você quer fazer 94 00:03:53,470 --> 00:03:55,090 é executar uma linha de código. 95 00:03:55,090 --> 00:03:57,660 Assim, decidiu alguns seres humanos tempo que isso é bom. 96 00:03:57,660 --> 00:04:01,180 Se você quiser colocar todo o seu ciclo em apenas que uma linha como esta, 97 00:04:01,180 --> 00:04:04,030 que é muito bem com o single ponto e vírgula no final. 98 00:04:04,030 --> 00:04:07,210 Mas você só pode fazer uma tal linha sem as chaves. 99 00:04:07,210 --> 00:04:09,900 >> Assim, quando guia de estilo CS50 como você irá apontar para, 100 00:04:09,900 --> 00:04:11,980 você verá que geralmente é bom hábito 101 00:04:11,980 --> 00:04:14,920 para chegar a este até que você esteja extraviada bastante confortável 102 00:04:14,920 --> 00:04:17,404 a partir desses tipos de convenções e fazer sua própria coisa. 103 00:04:17,404 --> 00:04:18,820 Enquanto você é auto-consistente. 104 00:04:18,820 --> 00:04:21,540 E vamos falar mais sobre estilo um pouco mais tarde hoje. 105 00:04:21,540 --> 00:04:23,200 >> Então, deixe-me abrir um outro programa. 106 00:04:23,200 --> 00:04:24,930 Claro, devemos 10 consertar isso também. 107 00:04:24,930 --> 00:04:32,470 Deixe-me ir em frente e escrever uma verdadeira programa rápido que eu chamasse, 108 00:04:32,470 --> 00:04:38,140 vamos dizer, laço dot C. Então, laço ponto C. E em malha ponto C eu vou ter, 109 00:04:38,140 --> 00:04:41,970 incluir E / S padrão ponto H int void main. 110 00:04:41,970 --> 00:04:44,020 E agora vamos fazer, de fato, um loop. 111 00:04:44,020 --> 00:04:46,020 Então, 4 int i recebe zero. 112 00:04:46,020 --> 00:04:48,660 I é menor do que, digamos, 50. 113 00:04:48,660 --> 00:04:49,950 I plus, plus. 114 00:04:49,950 --> 00:04:53,350 E então aqui vamos vá em frente e não imprimir F. 115 00:04:53,350 --> 00:04:56,400 E então eu quero imprimir I e uma nova linha, ponto e vírgula. 116 00:04:56,400 --> 00:05:00,015 >> E isso deve imprimir toda a números de zero até 50? 117 00:05:00,015 --> 00:05:02,900 118 00:05:02,900 --> 00:05:03,680 Alguns cabeça acena com a cabeça. 119 00:05:03,680 --> 00:05:04,270 Algumas Nos. 120 00:05:04,270 --> 00:05:05,339 Qual é o erro já? 121 00:05:05,339 --> 00:05:06,630 Qual é o erro fácil que eu fiz? 122 00:05:06,630 --> 00:05:07,170 Sim. 123 00:05:07,170 --> 00:05:08,544 >> AUDIÊNCIA: [inaudível]. 124 00:05:08,544 --> 00:05:09,210 COLUNA 1: Yeah. 125 00:05:09,210 --> 00:05:11,520 Assim, mesmo que parece como este é o que eu pretendo, 126 00:05:11,520 --> 00:05:13,920 Eu lembro que também é apenas um caractere ASCII. 127 00:05:13,920 --> 00:05:14,955 >> Então, se eu disser, print "I." 128 00:05:14,955 --> 00:05:16,670 Ele vai literalmente imprimir I. Então, se eu 129 00:05:16,670 --> 00:05:20,030 quer plug-in um espaço reservado valor eu realmente preciso fazer isso 130 00:05:20,030 --> 00:05:22,630 e, em seguida, o plug-in valor de I dinamicamente. 131 00:05:22,630 --> 00:05:25,200 Caso contrário, eu estou indo só para ganha 50 I está na tela. 132 00:05:25,200 --> 00:05:28,140 >> Então, deixe-me ir em frente e fazer este loop, executá-lo, 133 00:05:28,140 --> 00:05:30,650 e, de fato, temos tudo o caminho até a 49. 134 00:05:30,650 --> 00:05:34,140 E se eu rolar para trás no tempo que eu vejo o número zero no início. 135 00:05:34,140 --> 00:05:36,050 >> Bem, e se eu meio que estragar tudo? 136 00:05:36,050 --> 00:05:37,800 E se eu faço isso? 137 00:05:37,800 --> 00:05:40,120 Só porque eu não estou pensando. 138 00:05:40,120 --> 00:05:40,970 O que é este programa. 139 00:05:40,970 --> 00:05:43,970 Uma vez que está compilado e executado, vai fazer logicamente? 140 00:05:43,970 --> 00:05:44,870 >> AUDIÊNCIA: Nada. 141 00:05:44,870 --> 00:05:45,661 >> COLUNA 1: Nada. 142 00:05:45,661 --> 00:05:47,156 Por que é que? 143 00:05:47,156 --> 00:05:49,124 >> AUDIÊNCIA: Eu é projetado para zero. 144 00:05:49,124 --> 00:05:51,899 Assim, a condição é falsa. 145 00:05:51,899 --> 00:05:52,940 COLUNA 1: Sim, exatamente. 146 00:05:52,940 --> 00:05:55,110 Todo o código está correto, sintaticamente. 147 00:05:55,110 --> 00:05:57,310 Isso vai compilar, este código será executado, mas não é 148 00:05:57,310 --> 00:06:00,110 vai fazer nada de útil porque eu inicializar I a zero. 149 00:06:00,110 --> 00:06:02,240 Em seguida, verificar, é que mais de 50? 150 00:06:02,240 --> 00:06:03,810 Obviamente, não, não é. 151 00:06:03,810 --> 00:06:05,760 Assim, o laço nunca executa em tudo. 152 00:06:05,760 --> 00:06:09,580 >> O que se fizermos algo um pouco mais imprudente? 153 00:06:09,580 --> 00:06:12,890 Então, o que se fizermos como int I recebe zero. 154 00:06:12,890 --> 00:06:15,640 E agora deixe-me usar o tempo loop, que foi outra condição. 155 00:06:15,640 --> 00:06:21,810 E enquanto eu digo, enquanto eu for maior do que ou igual a zero, e, em seguida, aqui I 156 00:06:21,810 --> 00:06:26,070 vá em frente e salvar o arquivo, fazer loop. 157 00:06:26,070 --> 00:06:27,070 E eu estou prestes a executá-lo. 158 00:06:27,070 --> 00:06:30,230 O que é que eu vou ver isso tempo com um loop while? 159 00:06:30,230 --> 00:06:30,852 Sim. 160 00:06:30,852 --> 00:06:32,120 >> AUDIÊNCIA: um loop infinito? 161 00:06:32,120 --> 00:06:35,360 >> COLUNA 1: Um loop infinito? 162 00:06:35,360 --> 00:06:36,662 Sim, e por quê? 163 00:06:36,662 --> 00:06:38,120 AUDIÊNCIA: Porque é sempre zero. 164 00:06:38,120 --> 00:06:38,786 COLUNA 1: Yeah. 165 00:06:38,786 --> 00:06:40,100 Então, eu é inicializado como zero. 166 00:06:40,100 --> 00:06:44,470 Claro que é sempre maior que ou igual a 0, como resultado. 167 00:06:44,470 --> 00:06:46,460 Então, eu estou indo só para ver isso infinitamente. 168 00:06:46,460 --> 00:06:49,850 E agora, este surgiu uma vez ou duas vezes a cabeça do curso. 169 00:06:49,850 --> 00:06:52,417 O que acontece quando você tem um loop infinito? 170 00:06:52,417 --> 00:06:53,314 >> AUDIÊNCIA: Controle C. 171 00:06:53,314 --> 00:06:53,980 COLUNA 1: Yeah. 172 00:06:53,980 --> 00:06:56,250 Assim Controlo C acabará por responder. 173 00:06:56,250 --> 00:06:59,520 Infelizmente, temos impressa milhões e milhões de zeros já 174 00:06:59,520 --> 00:07:01,520 e de modo que o computador tenha meio que tenho à minha frente. 175 00:07:01,520 --> 00:07:03,394 Então, ele vai ignorar me para um pouco. 176 00:07:03,394 --> 00:07:06,560 Mas se você simplesmente pressione Control C alguns vezes em seu teclado Mac ou PC, 177 00:07:06,560 --> 00:07:08,790 eventualmente, ele deve, de fato, terminar. 178 00:07:08,790 --> 00:07:11,770 E se não, vamos mostrar-lhe algumas técnicas antes de tempo onde você 179 00:07:11,770 --> 00:07:14,850 pode realmente à força matar programas, bem como em Windows e Mac OS, 180 00:07:14,850 --> 00:07:15,562 se for necessário. 181 00:07:15,562 --> 00:07:16,770 Mas vamos tentar outra coisa. 182 00:07:16,770 --> 00:07:19,895 Vamos realmente incrementar I. É isso ainda vai ser infinito? 183 00:07:19,895 --> 00:07:22,870 184 00:07:22,870 --> 00:07:25,140 Deixe-me executar este. 185 00:07:25,140 --> 00:07:27,090 E agora você pode tipo de veja o que está acontecendo. 186 00:07:27,090 --> 00:07:30,140 Isto, também, é um loop infinito. 187 00:07:30,140 --> 00:07:33,080 Mas isso é um pouco de uma pergunta capciosa. 188 00:07:33,080 --> 00:07:35,460 Será que isso vai imprimir números de sempre? 189 00:07:35,460 --> 00:07:36,647 >> AUDIÊNCIA: Não. 190 00:07:36,647 --> 00:07:37,230 COLUNA 1: Não. 191 00:07:37,230 --> 00:07:37,620 Por quê? 192 00:07:37,620 --> 00:07:38,820 Eu ouvi algumas nsa aqui. 193 00:07:38,820 --> 00:07:41,859 Someone-- Sim. 194 00:07:41,859 --> 00:07:44,275 AUDIÊNCIA: Você não tem suficiente bits para realmente continuar. 195 00:07:44,275 --> 00:07:44,730 COLUNA 1: Tudo bem. 196 00:07:44,730 --> 00:07:46,000 Então, eu não tenho o suficiente bits para continuar. 197 00:07:46,000 --> 00:07:47,124 Então, o que vai acontecer? 198 00:07:47,124 --> 00:07:49,320 Ele só vai parar? 199 00:07:49,320 --> 00:07:52,542 >> AUDIÊNCIA: Em algum momento ele vai fechar as-- 200 00:07:52,542 --> 00:07:54,500 COLUNA 1: Ele vai fechar o baixo loop, mas por quê? 201 00:07:54,500 --> 00:07:57,950 O que vai acontecer no final de suas fronteiras? 202 00:07:57,950 --> 00:07:58,479 Sim? 203 00:07:58,479 --> 00:08:00,520 AUDIÊNCIA: A Ronda de volta para números negativos. 204 00:08:00,520 --> 00:08:02,900 COLUNA 1: Para números negativos, ou se estivéssemos apenas tratar positivo, 205 00:08:02,900 --> 00:08:03,570 zero, pelo menos. 206 00:08:03,570 --> 00:08:04,550 Então, sim, absolutamente. 207 00:08:04,550 --> 00:08:08,059 Lembre-se que vimos da última vez que se você incrementar seus bocados um muitas vezes, 208 00:08:08,059 --> 00:08:10,225 e você Lá na frente estouro a capacidade de seu int 209 00:08:10,225 --> 00:08:13,058 ou qualquer que seja o tipo de dados é, você é vai envolver em torno de, provavelmente, 210 00:08:13,058 --> 00:08:14,020 dois números negativos. 211 00:08:14,020 --> 00:08:16,644 Ou se você especificar que o seu intervalo só deve ser positivo, 212 00:08:16,644 --> 00:08:18,560 que você pode fazer, mas nós não temos visto isso ainda, 213 00:08:18,560 --> 00:08:21,420 você pode acabar, pelo menos, de volta ao zero. 214 00:08:21,420 --> 00:08:22,410 Embora, na verdade, sim. 215 00:08:22,410 --> 00:08:24,320 Neste caso, negativo números, em cujo caso 216 00:08:24,320 --> 00:08:26,870 o ciclo vai terminar porque não é, de fato, 217 00:08:26,870 --> 00:08:29,220 maior do que ou igual a zero se ele é negativo. 218 00:08:29,220 --> 00:08:31,780 >> Assim, infelizmente, como longo teríamos que esperar? 219 00:08:31,780 --> 00:08:35,490 Agora estamos até o que, 2000000-ish? 220 00:08:35,490 --> 00:08:37,705 Somos como 2 bilhões, nós vamos ter que esperar 221 00:08:37,705 --> 00:08:39,330 até que possamos realmente ver este sintoma. 222 00:08:39,330 --> 00:08:46,200 Mas podemos vê-lo um pouco mais rápido, maybe-- vamos ver se podemos interromper. 223 00:08:46,200 --> 00:08:46,700 Vamos. 224 00:08:46,700 --> 00:08:49,500 225 00:08:49,500 --> 00:08:51,331 Mesmo os menus estão aparecendo lentamente. 226 00:08:51,331 --> 00:08:51,830 Tudo certo. 227 00:08:51,830 --> 00:08:54,270 Então, vamos voltar para que em pouco tempo. 228 00:08:54,270 --> 00:08:56,320 É um bom tempo-- droga, filhotes de cachorro. 229 00:08:56,320 --> 00:08:58,280 >> É um bom momento para alguns anúncios. 230 00:08:58,280 --> 00:09:01,225 Então, se você pode gostar se envolver em YHack, 231 00:09:01,225 --> 00:09:03,600 que é um evento sendo patrocinado por nossos amigos em Yale. 232 00:09:03,600 --> 00:09:05,990 E, de fato, alguns do curso de TFs em Yale estão envolvidos com isso. 233 00:09:05,990 --> 00:09:08,610 YHack é uma organização internacional hack-a-thon hospedado e mantido por 234 00:09:08,610 --> 00:09:12,395 em Yale, que reúne 1.500 como hackers ocupados e criativos todos 235 00:09:12,395 --> 00:09:13,120 pelo mundo. 236 00:09:13,120 --> 00:09:14,610 Se este for de interesse, dê uma olhada aqui. 237 00:09:14,610 --> 00:09:17,401 Se ela é muito brevemente no tela, dê uma olhada nas lâminas de hoje 238 00:09:17,401 --> 00:09:19,622 para o URL para yhack.org. 239 00:09:19,622 --> 00:09:21,080 Assim, também alguns anúncios rápidos. 240 00:09:21,080 --> 00:09:24,410 Então, oficialmente seções vai começar próxima semana aqui e New Haven. 241 00:09:24,410 --> 00:09:27,660 Tenha em mente que você estará recebendo um e-mail mais tarde neste fim de semana mais provável. 242 00:09:27,660 --> 00:09:29,390 É preciso um longo tempo CS50 para a seção, 243 00:09:29,390 --> 00:09:32,080 Dadas todas as pessoas na classe e todos se movimentando. 244 00:09:32,080 --> 00:09:34,871 E todos os Fellows Ensino ' horários também estão solidificando ainda, 245 00:09:34,871 --> 00:09:38,110 mas fique atento para um e-mail e, se necessário ser, você pode voltar a seção de lá depois. 246 00:09:38,110 --> 00:09:39,580 >> Study.cs50.net. 247 00:09:39,580 --> 00:09:43,280 Assim, mesmo se você é um participante constante em seções, perceber que quase todos 248 00:09:43,280 --> 00:09:46,786 dos recursos que usamos em seções estão disponíveis ao público em CS50 249 00:09:46,786 --> 00:09:48,460 Estudar neste URL aqui. 250 00:09:48,460 --> 00:09:51,630 Então, se você jamais gostaria de re avaliação material da seção, ou leia mais à frente, 251 00:09:51,630 --> 00:09:54,170 ou você não pode fazer-lhe algum semana, perceber que os porta-amostras, 252 00:09:54,170 --> 00:09:58,210 e problemas, e definições, e mais estão todos lá também. 253 00:09:58,210 --> 00:10:00,645 >> Horário de atendimento retomar hoje, e amanhã, e quarta-feira, 254 00:10:00,645 --> 00:10:03,020 e quinta-feira verifique o curso de site para o agendamento. 255 00:10:03,020 --> 00:10:05,690 >> E também, lançando agora hoje é CS50 Discutir. 256 00:10:05,690 --> 00:10:09,230 Então, se e quando você tem perguntas para o outro ou para o pessoal do curso, 257 00:10:09,230 --> 00:10:12,099 e estão trabalhando em geral em algum conjunto de problemas, 258 00:10:12,099 --> 00:10:15,015 perceber que você não necessariamente tem que voltar para o ser humano próxima de você. 259 00:10:15,015 --> 00:10:17,810 Se não há ninguém lá, você pode chegar até nós e colegas 260 00:10:17,810 --> 00:10:19,890 Discutir online via CS50. 261 00:10:19,890 --> 00:10:22,600 Assim, esta é uma discussão placa para o curso, 262 00:10:22,600 --> 00:10:24,550 e perceber que esta é talvez o melhor 263 00:10:24,550 --> 00:10:28,480 lugar para começar quando você tem perguntas quando fora do horário de expediente 264 00:10:28,480 --> 00:10:29,470 em particular. 265 00:10:29,470 --> 00:10:31,070 >> Refeições pré-arranca esta semana também. 266 00:10:31,070 --> 00:10:33,170 No Fire and Ice [Inaudível] em New Haven. 267 00:10:33,170 --> 00:10:35,379 Dê uma olhada no campo de site a fim de RSVP. 268 00:10:35,379 --> 00:10:36,753 Primeiro a chegar, primeiro a servir para isso. 269 00:10:36,753 --> 00:10:39,380 Se você não receber nesta semana vamos fazer estes mais toda sexta-feira 270 00:10:39,380 --> 00:10:40,400 durante o período. 271 00:10:40,400 --> 00:10:41,830 >> OK, e agora uma palavra sobre classificação. 272 00:10:41,830 --> 00:10:44,690 Particularmente à medida que entramos problema definir um, que está fora esta semana, 273 00:10:44,690 --> 00:10:46,670 e conjunto de problemas e, posteriormente, de dois. 274 00:10:46,670 --> 00:10:51,680 Como é que vamos avaliar conjuntos P e avaliar a qualidade dos mesmos? 275 00:10:51,680 --> 00:10:55,560 Então, é de quatro eixos que usamos em CS50, e são esses quatro aqui. 276 00:10:55,560 --> 00:10:59,200 >> Scope, que captura em um numérico base apenas quanto do conjunto P 277 00:10:59,200 --> 00:10:59,860 que você enfrentar. 278 00:10:59,860 --> 00:11:02,890 É corresponde aproximadamente com esforço, e é a nossa maneira de capturar 279 00:11:02,890 --> 00:11:05,190 se você tentar metade do P definir, de todo o conjunto P. 280 00:11:05,190 --> 00:11:08,860 Este é um passo fácil de obter perfeito pontuações em se você faz, de fato, 281 00:11:08,860 --> 00:11:11,020 tente todos os aspectos do conjunto P. 282 00:11:11,020 --> 00:11:12,010 Portanto, manter isso em mente. 283 00:11:12,010 --> 00:11:13,420 >> A exatidão é exatamente isso. 284 00:11:13,420 --> 00:11:17,760 Será que o seu trabalho de código como a especificação e como solução de amostra dos funcionários 285 00:11:17,760 --> 00:11:19,730 sugerem que o seu código deve, de fato, trabalhar. 286 00:11:19,730 --> 00:11:23,260 Confira 50, se você ainda não conheceu-lo no entanto, está em P definir uma especificação 287 00:11:23,260 --> 00:11:25,060 e geralmente dar-lhe respostas sim / não 288 00:11:25,060 --> 00:11:26,518 quanto a saber se o seu código está correto. 289 00:11:26,518 --> 00:11:30,680 Pelo menos até agora como nós estamos indo para avaliá-lo com base nos testes 290 00:11:30,680 --> 00:11:32,430 que corremos dentro desse programa. 291 00:11:32,430 --> 00:11:33,850 >> O design é muito mais subjetivo. 292 00:11:33,850 --> 00:11:35,994 Este é o quão bem escrito é o seu código. 293 00:11:35,994 --> 00:11:38,410 E isso é algo que você vai ficar melhor no longo do tempo, 294 00:11:38,410 --> 00:11:41,201 e isso é algo que vamos fornecer feedback mais qualitativa sobre. 295 00:11:41,201 --> 00:11:43,350 E pelo design eu poderia significa antes de tempo você 296 00:11:43,350 --> 00:11:47,650 pode ser tentado em algum P definido para fazer algo loopingly, 297 00:11:47,650 --> 00:11:51,590 mas para ter talvez três, ou quatro, ou cinco voltas dianteiras aninhadas ou enquanto aninhado 298 00:11:51,590 --> 00:11:52,090 laços. 299 00:11:52,090 --> 00:11:54,130 Que, geralmente, deve fazer você começar a encolher 300 00:11:54,130 --> 00:11:56,070 e geralmente seria considerada má concepção. 301 00:11:56,070 --> 00:11:59,490 E você vai começar a ver na classe e fora da classe boas maneiras de fazer as coisas, 302 00:11:59,490 --> 00:12:02,920 más maneiras de fazer as coisas que tudo pode ser correta, mas não 303 00:12:02,920 --> 00:12:04,304 necessariamente bem desenhado. 304 00:12:04,304 --> 00:12:05,220 Como escrever um ensaio. 305 00:12:05,220 --> 00:12:08,100 Você pode ser capaz de colocar palavras em um página que são gramaticalmente correta, 306 00:12:08,100 --> 00:12:10,016 mas o ensaio ou a tese de que eles estão em é apenas 307 00:12:10,016 --> 00:12:11,810 completamente incoerente ou pouco convincente. 308 00:12:11,810 --> 00:12:15,930 E, de modo que pode ser o análogo no mundo escrito do design ruim ou bom. 309 00:12:15,930 --> 00:12:18,490 >> E estilo, também, é bastante subjetiva. 310 00:12:18,490 --> 00:12:20,060 Mas pelo menos nós esperamos consistência. 311 00:12:20,060 --> 00:12:21,480 Este é o quão bonito é o seu código. 312 00:12:21,480 --> 00:12:22,840 As coisas estão bem recuado? 313 00:12:22,840 --> 00:12:26,600 São as variáveis ​​de bem nomeado / São todos de seus parênteses e colchetes 314 00:12:26,600 --> 00:12:27,920 alinhadas como deveriam ser? 315 00:12:27,920 --> 00:12:31,490 Nós temos um guia de estilo como CS50 o conjunto de problema irá apontar no. 316 00:12:31,490 --> 00:12:33,730 Aqueles são mais confortável bem-vindo ao desviar-se de que 317 00:12:33,730 --> 00:12:35,771 desde que você auto-consistente. 318 00:12:35,771 --> 00:12:38,020 E isto, também, é uma lição vamos reforçar na seção. 319 00:12:38,020 --> 00:12:40,990 Então, se tudo isso era um pouco rápido, perceber o conjunto P e seções 320 00:12:40,990 --> 00:12:42,900 vou entrar em mais profundidade antes de tempo. 321 00:12:42,900 --> 00:12:45,490 >> Mas geralmente, temos muito poucos baldes para CS50. 322 00:12:45,490 --> 00:12:48,170 Pontuações são geralmente em uma escala de um a três, ou um a cinco. 323 00:12:48,170 --> 00:12:50,836 Estamos literally-- e eu não posso dizer esta suficiente na primeira semana. 324 00:12:50,836 --> 00:12:51,582 Três é bom. 325 00:12:51,582 --> 00:12:54,290 Assim, mesmo que, sim, três de cinco normalmente, matematicamente, 326 00:12:54,290 --> 00:12:57,240 pode ser um 60 por cento ou menos como um D. 327 00:12:57,240 --> 00:12:58,840 Três é, na verdade, bom. 328 00:12:58,840 --> 00:13:01,050 E, de fato, esperamos a maioria dos alunos da turma 329 00:13:01,050 --> 00:13:04,280 para começar o prazo em torno dois, ou três, e quatro. 330 00:13:04,280 --> 00:13:05,510 Provavelmente não tantos fives. 331 00:13:05,510 --> 00:13:06,661 Não são muitas queridos. 332 00:13:06,661 --> 00:13:08,910 Mas em geral para iniciar em esse ponto doce na curva 333 00:13:08,910 --> 00:13:11,694 de modo que à medida que o tempo avança, há realmente espaço para, 334 00:13:11,694 --> 00:13:13,360 e oportunidades para progressão superior. 335 00:13:13,360 --> 00:13:15,810 Então, por favor não igualam três com 60%. 336 00:13:15,810 --> 00:13:17,410 É muito mais abstrato do que isso. 337 00:13:17,410 --> 00:13:20,160 A fórmula com a qual calculamos graus é a seguinte ponderação. 338 00:13:20,160 --> 00:13:21,610 A exatidão vale mais. 339 00:13:21,610 --> 00:13:23,010 Projeto vale a pena um pouco menos. 340 00:13:23,010 --> 00:13:24,490 Estilo vale um pouco menos. 341 00:13:24,490 --> 00:13:26,950 E esta geralmente capta a quantidade de tempo 342 00:13:26,950 --> 00:13:29,800 que vai ficar em cada desses eixos apenas para a direita. 343 00:13:29,800 --> 00:13:31,810 Estilo é super fácil, deve ser super rápida, 344 00:13:31,810 --> 00:13:33,657 mas é um hábito fácil para ficar com preguiça sobre. 345 00:13:33,657 --> 00:13:35,490 Correção pode demorar -lhe a maior parte do tempo. 346 00:13:35,490 --> 00:13:38,990 Perseguindo algum poder bug tomar essa hora extra ou mais, 347 00:13:38,990 --> 00:13:41,737 e assim, a pontuação em última análise, que capta. 348 00:13:41,737 --> 00:13:43,070 E assim, agora, uma palavra mais grave. 349 00:13:43,070 --> 00:13:45,240 Uma vez que tem o CS50 distinção, para melhor 350 00:13:45,240 --> 00:13:47,440 ou para pior, de ser talvez melhor familiarizado 351 00:13:47,440 --> 00:13:50,065 com as questões de acadêmico honestidade do que a maioria qualquer outro curso. 352 00:13:50,065 --> 00:13:53,720 E, de fato, é do meu conhecimento que nós enviar mais estudantes, infelizmente, 353 00:13:53,720 --> 00:13:56,690 por razões disciplinares a cada ano como resultado. Assim, 354 00:13:56,690 --> 00:13:59,040 no interesse da plena divulgação, vamos falar brevemente 355 00:13:59,040 --> 00:14:02,820 sobre o que se passa na CS50, eo que você pode fazer, eo que você pode estar atentos. 356 00:14:02,820 --> 00:14:05,530 >> Então, aqui desde 2007, quando Eu herdei o curso, 357 00:14:05,530 --> 00:14:07,870 é o número de casos placa do anúncio. 358 00:14:07,870 --> 00:14:10,690 Conselho Ad é disciplinar da Harvard corpo, ou agora a honra Counsel, 359 00:14:10,690 --> 00:14:13,790 à qual os casos são referidos quando alunos fazer alguma coisa que o curso de 360 00:14:13,790 --> 00:14:15,470 syllabus considera razoável. 361 00:14:15,470 --> 00:14:17,220 Não há nenhum padrão real, aqui, eu diria. 362 00:14:17,220 --> 00:14:19,530 Ele flutua ao longo do anos, mas geralmente 363 00:14:19,530 --> 00:14:22,262 este é o número de casos que são referidos. 364 00:14:22,262 --> 00:14:23,970 O número de alunos que estão envolvidos? 365 00:14:23,970 --> 00:14:25,290 É também varia. 366 00:14:25,290 --> 00:14:27,930 Normalmente, último ano para o exemplo, 29 alunos em Harvard 367 00:14:27,930 --> 00:14:29,740 Ad foram Embarcado, por assim dizer. 368 00:14:29,740 --> 00:14:32,670 29 deles estudantes atuais, Dois deles estudantes anteriores, 369 00:14:32,670 --> 00:14:35,610 que estavam colaborando de alguma forma perversa. 370 00:14:35,610 --> 00:14:38,400 E, em seguida, em termos de porcentagem, normalmente é cerca de 3% 371 00:14:38,400 --> 00:14:41,360 da classe que, infelizmente, faz esse tipo de decisão. 372 00:14:41,360 --> 00:14:44,470 >> Então, no ano passado foi de 3,5% do corpo estudantil da CS50 373 00:14:44,470 --> 00:14:46,820 que foi Ad Embarcado, por assim dizer. 374 00:14:46,820 --> 00:14:48,490 >> Então, o que tudo isso significa? 375 00:14:48,490 --> 00:14:49,660 E o que é que vamos realmente fazer? 376 00:14:49,660 --> 00:14:52,930 >> Assim, para a divulgação completa, nós absolutamente, como cientistas da computação, 377 00:14:52,930 --> 00:14:57,620 tem ferramentas de software à nossa disposição e é muito fácil para nós, para ser justo, 378 00:14:57,620 --> 00:15:00,980 que de outros colegas que não são cruzar estas linhas para atravessar comparar 379 00:15:00,980 --> 00:15:04,570 cada apresentação deste ano contra cada apresentação durante os últimos oito anos. 380 00:15:04,570 --> 00:15:05,445 Software faz isso. 381 00:15:05,445 --> 00:15:07,440 E, finalmente, é olhos humanos que decidem 382 00:15:07,440 --> 00:15:11,410 se ou não para se referir alguns importa para posterior adjudicação, 383 00:15:11,410 --> 00:15:12,737 mas o software certamente ajuda. 384 00:15:12,737 --> 00:15:15,820 E isso, francamente, é por isso que eu acho que temos um número tão grande em CS50. 385 00:15:15,820 --> 00:15:18,540 Não é porque CS50 estudantes ou estudantes CS mais 386 00:15:18,540 --> 00:15:20,840 geralmente são menos honestos do que quaisquer outros estudantes, 387 00:15:20,840 --> 00:15:22,340 é só temos a ferramentas e as técnicas 388 00:15:22,340 --> 00:15:24,095 com o qual a tomar esta primeira passagem. 389 00:15:24,095 --> 00:15:25,960 >> Mas nós manter um olho em todas estas coisas 390 00:15:25,960 --> 00:15:30,340 assim, mais uma vez, no interesse da reconhecendo o trabalho que está sendo colocado 391 00:15:30,340 --> 00:15:32,397 na por um super maioria da classe. 392 00:15:32,397 --> 00:15:34,230 E a política do curso na honestidade acadêmica, 393 00:15:34,230 --> 00:15:37,021 mesmo que seja um grupo de parágrafos por muito tempo com um monte de balas 394 00:15:37,021 --> 00:15:40,490 que são esperançosamente bastante legível, ele realmente não se resumem a ser razoável. 395 00:15:40,490 --> 00:15:44,000 E a melhor regra de ouro que oferecemos no âmbito do programa 396 00:15:44,000 --> 00:15:46,020 é isso, a essência de todo o trabalho que você 397 00:15:46,020 --> 00:15:47,850 submeter-se a este curso deve ser o seu próprio. 398 00:15:47,850 --> 00:15:51,510 E, de fato, em quase todos os casos encaminhados para medidas disciplinares 399 00:15:51,510 --> 00:15:55,640 foi por causa de algum aluno uma tarde noite tipicamente virou o seu código 400 00:15:55,640 --> 00:15:58,130 sobre outright para um colega de classe, que, então, adotou- 401 00:15:58,130 --> 00:16:00,840 na sua totalidade ou significativamente dos mesmos. 402 00:16:00,840 --> 00:16:02,680 >> Mas realmente, isso é OK. 403 00:16:02,680 --> 00:16:04,684 E, de fato, no escritório horas, os pedaços de papel 404 00:16:04,684 --> 00:16:07,850 te foi dado se você veio de escritório horas na semana passada incentiva tanto. 405 00:16:07,850 --> 00:16:09,710 Você está absolutamente bem vinda e encorajada 406 00:16:09,710 --> 00:16:12,340 para discutir conjuntos de problemas com os colegas. 407 00:16:12,340 --> 00:16:14,461 Para ajudar uns aos outros quando tropeço. 408 00:16:14,461 --> 00:16:17,710 Mas geralmente a regra de ouro deve ser este ", quando você está pedindo por ajuda, 409 00:16:17,710 --> 00:16:20,412 você pode mostrar o seu código para os outros, mas você não pode ver as deles. " 410 00:16:20,412 --> 00:16:22,620 Então, em outras palavras, se eu sou lutando com algum conjunto P 411 00:16:22,620 --> 00:16:25,290 e eu estou sentado lá no Jantar salão, ou na biblioteca, 412 00:16:25,290 --> 00:16:28,470 ou na sala de aula tentando encontrar alguma falha, 413 00:16:28,470 --> 00:16:30,340 Eu certamente posso mostrar meu código na minha tela 414 00:16:30,340 --> 00:16:32,590 para a pessoa sentada ao lado para mim, certamente a equipe, 415 00:16:32,590 --> 00:16:33,600 mas também um colega de classe. 416 00:16:33,600 --> 00:16:36,580 Mas se a solução que meu colega oferece é, oh, 417 00:16:36,580 --> 00:16:39,200 aqui basta dar uma olhada no que Eu fiz, que cruza a linha. 418 00:16:39,200 --> 00:16:43,120 >> E eu ousaria dizer que é geralmente uma coisa razoável para a maioria das pessoas 419 00:16:43,120 --> 00:16:45,030 de detectar muito facilmente a linha de. 420 00:16:45,030 --> 00:16:47,195 E assim, ver o plano de estudos para mais detalhes. 421 00:16:47,195 --> 00:16:49,070 E agora um dos mais aspectos controversos 422 00:16:49,070 --> 00:16:52,529 CS50 de programa que eu pensei que eu falaria na conclusão aqui 423 00:16:52,529 --> 00:16:53,820 é a chamada cláusula de arrependimento. 424 00:16:53,820 --> 00:16:55,340 Então, aqui está toda a cópia fina. 425 00:16:55,340 --> 00:16:58,090 Mas em geral, temos visto nos últimos mais de 8 anos 426 00:16:58,090 --> 00:17:01,510 que, de facto, quase todas de CS50 casos de desonestidade acadêmica 427 00:17:01,510 --> 00:17:04,390 ter sido o resultado de apenas pobres tornando tarde da noite de decisão. 428 00:17:04,390 --> 00:17:07,144 O resultado do estresse, o resultado de falta de alimentação, falta de sono, 429 00:17:07,144 --> 00:17:09,560 muitas séries P, muitos prazos, muitos compromissos. 430 00:17:09,560 --> 00:17:13,520 Estresse construindo em um 2:00, 03:00 AM, 4:00, com um prazo iminente. 431 00:17:13,520 --> 00:17:17,020 A maioria dos estudantes nestes casos que acaba de fazer más decisões 432 00:17:17,020 --> 00:17:20,619 que poderia muito bem se arrepender do manhã seguinte, se não minutos mais tarde, 433 00:17:20,619 --> 00:17:25,490 mas até o ano passado não houve válvula de liberação que esses alunos poderiam 434 00:17:25,490 --> 00:17:29,140 realmente abrir para realmente resolver o problema de frente, sem medo de ser 435 00:17:29,140 --> 00:17:30,850 iniciado a partir da faculdade completamente. 436 00:17:30,850 --> 00:17:33,260 >> E, de fato, nós introduzimos esta cláusula arrependimento no ano passado, 437 00:17:33,260 --> 00:17:35,970 que diz que, se no prazo 72 horas, três dias, 438 00:17:35,970 --> 00:17:37,970 de atravessar alguma linha prescrito no currículo 439 00:17:37,970 --> 00:17:41,178 você vem para a frente a um do curso de cabeças e nós vamos ter uma conversa sobre isso. 440 00:17:41,178 --> 00:17:43,720 Há ainda haver algum resultado, ao contrário do que é 441 00:17:43,720 --> 00:17:44,990 Foi relatado que o contrário. 442 00:17:44,990 --> 00:17:49,190 Há ainda algum resultado que é acionável pelo curso, 443 00:17:49,190 --> 00:17:51,611 geralmente zerar um conjunto P ou tomar alguma outra ação, 444 00:17:51,611 --> 00:17:53,610 mas vamos, de fato, segurá-lo nós mesmos e não 445 00:17:53,610 --> 00:17:58,460 referem-se que eram mais elevados do resultado pode ser muito mais graves. 446 00:17:58,460 --> 00:18:01,810 E, de fato, para compartilhar o que aconteceu no ano passado, em oito anos, e agora 447 00:18:01,810 --> 00:18:04,950 nove anos, de ensinar este curso e depois de mexer com vários botões, 448 00:18:04,950 --> 00:18:07,866 transformando vários mostradores sobre o passado vários anos sobre a honestidade acadêmica, 449 00:18:07,866 --> 00:18:11,920 e vendo por dados nenhuma aparentes impacto, mesmo de discursos como este, 450 00:18:11,920 --> 00:18:15,490 este foi mãos a melhor coisa nós introduzimos pedagogicamente 451 00:18:15,490 --> 00:18:18,090 em oito anos, juntamente estas linhas em CS50. 452 00:18:18,090 --> 00:18:21,010 >> 19 estudantes vieram para a frente nos termos desta cláusula no ano passado. 453 00:18:21,010 --> 00:18:23,389 Nós não tomou nenhuma ação para sete desses alunos, 454 00:18:23,389 --> 00:18:25,430 a determinação de que eram desnecessariamente preocupado. 455 00:18:25,430 --> 00:18:27,304 Eles não tinham, de fato, atravessada uma linha, mas 456 00:18:27,304 --> 00:18:28,960 foi um bom bate-papo ter, no entanto. 457 00:18:28,960 --> 00:18:31,190 Nós zerado 11 dos escores que foram submetidos. 458 00:18:31,190 --> 00:18:33,840 E em um caso pedimos uma estudante para fazer um conjunto de problemas. 459 00:18:33,840 --> 00:18:36,370 Mas mais convincente, Sinceramente, com essas 19 bate-papos, 460 00:18:36,370 --> 00:18:39,020 que era muito mais do que eu Espera-se que têm, cada um deles 461 00:18:39,020 --> 00:18:41,370 10 minutos para talvez uma hora de duração, também trouxe 462 00:18:41,370 --> 00:18:44,920 à luz uma série de questões sobre questões familiares, questões amigo, 463 00:18:44,920 --> 00:18:46,940 problemas de saúde mental que, em seguida, contratado, 464 00:18:46,940 --> 00:18:50,200 com a bênção, residente do estudante reitor, ou amigos, ou qualquer outro número 465 00:18:50,200 --> 00:18:51,450 de recursos de suporte. 466 00:18:51,450 --> 00:18:54,454 Assim que este foi de longe um dos melhores usos do nosso tempo 467 00:18:54,454 --> 00:18:55,870 e um dos melhores intervenções. 468 00:18:55,870 --> 00:18:58,870 >> Com isso dito, não tinha entrada na taxa de detecção 469 00:18:58,870 --> 00:19:00,909 de desonestidade acadêmica em geral. 470 00:19:00,909 --> 00:19:02,950 E ouso dizer, este subconjunto de estudantes no ano passado 471 00:19:02,950 --> 00:19:06,350 era que um grupo demográfico anteriormente nunca se identificou antes 472 00:19:06,350 --> 00:19:08,140 e nunca tinha ligado antes. 473 00:19:08,140 --> 00:19:10,020 E assim, estes foram maravilhosas histórias de sucesso 474 00:19:10,020 --> 00:19:13,390 mesmo que eles foram trazidos à luz em menos de circunstâncias ideais. 475 00:19:13,390 --> 00:19:15,640 Portanto, manter isso em mente como você faz, talvez, 476 00:19:15,640 --> 00:19:17,390 algum pobre decisão mesmo tarde da noite, 477 00:19:17,390 --> 00:19:20,151 que há tanto tempo recurso como o estudante nessa situação 478 00:19:20,151 --> 00:19:23,400 possui-se e vir para a frente para que possamos ter esse tipo de bate-papo e lidar com ele 479 00:19:23,400 --> 00:19:27,310 de uma maneira que é educacional, e, em seguida podemos colocá-lo atrás de nós no dia seguinte. 480 00:19:27,310 --> 00:19:30,335 >> Assim, sem mais delongas, assumir a borda fora desta conversa, 481 00:19:30,335 --> 00:19:35,080 a razão que os filhotes estão se é apenas para quebrar o gelo por um momento. 482 00:19:35,080 --> 00:19:39,560 E, infelizmente, eles são todos dormiremos, mas o que deveria acontecer aqui 483 00:19:39,560 --> 00:19:41,760 era todo mundo deveria para impressionar e tipo de relaxar 484 00:19:41,760 --> 00:19:43,910 depois dessa conversa muito pesado. 485 00:19:43,910 --> 00:19:46,930 Mas, aparentemente, eu coloquei os filhotes de cachorro para dormir. 486 00:19:46,930 --> 00:19:50,070 Mas se você vai para CS50 de filhotes site Slash, 487 00:19:50,070 --> 00:19:51,610 você pode vê-los durante todo o dia. 488 00:19:51,610 --> 00:19:55,280 Particularmente talvez 2:00, ou 03:00 ou 04:00 à noite 489 00:19:55,280 --> 00:19:57,480 para ver um pouco de alívio do estresse lá. 490 00:19:57,480 --> 00:19:58,805 Assim que é cortar filhotes. 491 00:19:58,805 --> 00:20:01,700 492 00:20:01,700 --> 00:20:02,200 Tudo certo. 493 00:20:02,200 --> 00:20:03,020 Não foi divertido? 494 00:20:03,020 --> 00:20:04,200 ESTÁ BEM. 495 00:20:04,200 --> 00:20:07,140 Então, de volta a algum computador ciência, se eu puder. 496 00:20:07,140 --> 00:20:10,600 >> Então, lembre-se que a última vez que começou olhando não apenas a principal, que 497 00:20:10,600 --> 00:20:13,930 era a função padrão, o quando bandeira verde clicado equivalente, 498 00:20:13,930 --> 00:20:16,999 mas nós também começou brevemente escrevendo algumas de nossas próprias funções. 499 00:20:16,999 --> 00:20:20,040 E até agora, nenhuma destas funções têm sido particularmente grande ou carne. 500 00:20:20,040 --> 00:20:24,570 Você vai entrar aqueles maior funções, provavelmente, definir P 2, P ajuste 3, 501 00:20:24,570 --> 00:20:26,410 definitivamente P ajustou 4 em diante. 502 00:20:26,410 --> 00:20:29,340 Agora a maioria de seus programas, Se nem todos eles, certamente, para P 503 00:20:29,340 --> 00:20:31,550 conjunto 1 pode ser feito inteiramente em principal. 504 00:20:31,550 --> 00:20:33,810 Se o seu programa só é cinco linhas, 10 linhas, 505 00:20:33,810 --> 00:20:37,070 mesmo 20 linhas de comprimento, perfeitamente razoável para escrevê-lo 506 00:20:37,070 --> 00:20:40,930 tudo em principal e não para complicar mais seu código, mas o que estamos fazendo hoje 507 00:20:40,930 --> 00:20:44,360 e daí em diante está tentando também introduzir algumas boas técnicas de design 508 00:20:44,360 --> 00:20:48,660 para que, como seu código fica mais complicada e como os problemas 509 00:20:48,660 --> 00:20:51,690 você quiser resolver fica mais difícil e mais interessante que você tem, mais ou menos, 510 00:20:51,690 --> 00:20:55,850 as ferramentas em sua caixa de ferramentas com as quais para projetar boas soluções para aqueles. 511 00:20:55,850 --> 00:21:01,210 >> Então, vamos dar uma rápida olhada para trás, este programa da minha última semana, o que 512 00:21:01,210 --> 00:21:06,550 foi funções de zero ponto C. E notar que, muito simplesmente, 513 00:21:06,550 --> 00:21:10,310 parece que este com dois funções, principal e nome de impressão. 514 00:21:10,310 --> 00:21:13,160 E o pensamento de volta ou talvez engenharia reversa de hoje, 515 00:21:13,160 --> 00:21:16,880 qual foi a motivação para a introdução de uma função na linha 28 chamados, 516 00:21:16,880 --> 00:21:18,180 nome de impressão? 517 00:21:18,180 --> 00:21:21,745 Ou o que era este um exemplo de em termos de um princípio ou takeaway, 518 00:21:21,745 --> 00:21:22,605 se você o faria. 519 00:21:22,605 --> 00:21:26,560 520 00:21:26,560 --> 00:21:27,300 Alguns murmúrios. 521 00:21:27,300 --> 00:21:28,830 O quê? 522 00:21:28,830 --> 00:21:32,210 >> Sim decomposição de modo funcional é uma espécie de maneira elegante de dizer, 523 00:21:32,210 --> 00:21:34,690 decompor seu programa em suas partes constituintes 524 00:21:34,690 --> 00:21:37,530 e então usar essas peças para montar um todo. 525 00:21:37,530 --> 00:21:39,620 Então, isso também é apenas um tipo de um bocado já, 526 00:21:39,620 --> 00:21:42,050 mas esta é talvez até um melhor exemplo de algo 527 00:21:42,050 --> 00:21:43,081 chamado apenas de abstração. 528 00:21:43,081 --> 00:21:43,580 Certo? 529 00:21:43,580 --> 00:21:46,950 Abstração vai ser um dos temas recorrentes em CS50 530 00:21:46,950 --> 00:21:49,085 e também de ciência da computação mais uma vez que é geralmente 531 00:21:49,085 --> 00:21:53,060 uma técnica com a qual você pode resolver problemas de forma mais eficaz, porque você 532 00:21:53,060 --> 00:21:56,807 pode escrever soluções mais intuitivamente e de uma forma que dimensiona 533 00:21:56,807 --> 00:21:58,390 e é compreensível por outras pessoas. 534 00:21:58,390 --> 00:21:59,860 O que quero dizer com isso? 535 00:21:59,860 --> 00:22:04,340 >> Então, sem dúvida, é muito mais legível a olhar para um programa como este, 536 00:22:04,340 --> 00:22:05,990 Super curta que seja. 537 00:22:05,990 --> 00:22:10,050 Quando você vê na linha 22 que não há uma função chamada, nome de impressão. 538 00:22:10,050 --> 00:22:12,620 Esse nome só diz o que ele faz. 539 00:22:12,620 --> 00:22:15,780 Essa função aparentemente leva de entrada entre os parênteses, 540 00:22:15,780 --> 00:22:18,600 e, aparentemente, faz alguma coisa, presumivelmente imprime o nome. 541 00:22:18,600 --> 00:22:20,880 E assim, embora nós poderia ter absolutamente 542 00:22:20,880 --> 00:22:25,280 feito o que fizemos há uma semana, o que foi apenas tomar esta linha de código real, 543 00:22:25,280 --> 00:22:28,710 livrar-se deste, e obter livrar de tudo isso junto, 544 00:22:28,710 --> 00:22:31,436 que tipo de abstraída a noção de impressão de um nome. 545 00:22:31,436 --> 00:22:33,060 Eu não me importo se você estiver usando print def. 546 00:22:33,060 --> 00:22:35,601 Eu não me importo se você tem um S cento e uma barra invertida N. Estes 547 00:22:35,601 --> 00:22:37,270 são detalhes incrivelmente arcanos. 548 00:22:37,270 --> 00:22:40,090 O que eu me importo com como um programador está a imprimir um nome. 549 00:22:40,090 --> 00:22:43,414 E assim, qual a melhor maneira de fazer isso que por chamar uma função, o nome de impressão? 550 00:22:43,414 --> 00:22:46,330 E assim, essa foi uma das motivações para fazer algo assim. 551 00:22:46,330 --> 00:22:50,370 Tornando o código mais legível, mais reutilizável, e também auto descritiva. 552 00:22:50,370 --> 00:22:52,120 Agora, vamos dar uma olhada em outro exemplo, 553 00:22:52,120 --> 00:22:56,220 que foi uma funções, que tivemos aqui. 554 00:22:56,220 --> 00:23:00,367 >> Então, este é talvez ainda mais atraente porque, neste caso, 555 00:23:00,367 --> 00:23:01,700 Eu não quero começar apenas um int. 556 00:23:01,700 --> 00:23:03,320 Eu quero começar um int positivo. 557 00:23:03,320 --> 00:23:06,470 E verifica-se para obter um positivo int você tem que fazer um monte de trabalho braçal. 558 00:23:06,470 --> 00:23:06,969 Certo? 559 00:23:06,969 --> 00:23:09,600 Não é uma simples linha chamar como nome de impressão foi, 560 00:23:09,600 --> 00:23:11,480 que é reconhecidamente menos convincente. 561 00:23:11,480 --> 00:23:16,000 >> Para obter um int positivo, logically-- deixe-me rolar para trás para baixo para esconder isso. 562 00:23:16,000 --> 00:23:18,887 O que tens de fazer? 563 00:23:18,887 --> 00:23:20,720 Como todas as ferramentas que temos no momento são 564 00:23:20,720 --> 00:23:24,440 coisas como print def da Standard Biblioteca e também da biblioteca CS50 565 00:23:24,440 --> 00:23:26,990 temos Obter Int, e Get Float, Obter Longo Longo, Get String, 566 00:23:26,990 --> 00:23:29,260 mas o único, Germano, agora é Obter Int. 567 00:23:29,260 --> 00:23:32,970 Assim, se a única ferramenta que você tem em sua caixa de ferramentas é Obter Int, 568 00:23:32,970 --> 00:23:35,505 como nós vamos sobre a implementação de -lo para obter int positivo? 569 00:23:35,505 --> 00:23:35,929 >> AUDIÊNCIA: Criar um log e verifique em que a entrada se deram 570 00:23:35,929 --> 00:23:36,762 era positivo ou não. 571 00:23:36,762 --> 00:23:39,390 572 00:23:39,390 --> 00:23:40,640 >> COLUNA 1: Perfect. 573 00:23:40,640 --> 00:23:41,200 Exatamente. 574 00:23:41,200 --> 00:23:43,950 Outra ferramenta que temos em nosso caixa de ferramentas a partir de uma ou duas semanas atrás 575 00:23:43,950 --> 00:23:45,419 é apenas a construção de loop. 576 00:23:45,419 --> 00:23:48,210 E então, sim, se usarmos um tempo loop, ou um loop Do While ou um fore 577 00:23:48,210 --> 00:23:50,850 loop de nós poderia provavelmente começar afastado com qualquer daqueles de alguma forma. 578 00:23:50,850 --> 00:23:55,140 Podemos implementar a noção de get int positivo apenas usando Obter Int, 579 00:23:55,140 --> 00:23:57,830 e depois é só manter chamando- novamente e manter importunando o usuário 580 00:23:57,830 --> 00:24:00,320 até que ele ou ela realmente nos dá o que queremos. 581 00:24:00,320 --> 00:24:03,260 >> E agora, esta abstração do processo 582 00:24:03,260 --> 00:24:05,680 de conseguir um int positivo em uma função chamada 583 00:24:05,680 --> 00:24:08,930 Obter positiva Int é um pouco mais convincente, porque olha para isto. 584 00:24:08,930 --> 00:24:10,990 Estes são como 10 mais linhas de código que 585 00:24:10,990 --> 00:24:15,090 estão envolvidos na obtenção de um int positivo, e eu realmente não me importo como você faz isso. 586 00:24:15,090 --> 00:24:17,850 Tudo que me importa é que você pode fazê-lo, e então eu tenho 587 00:24:17,850 --> 00:24:21,660 escondidas todos estes detalhes por trás de um função chamada Get positiva int que, 588 00:24:21,660 --> 00:24:23,430 de fato, tem esse loop Do While. 589 00:24:23,430 --> 00:24:27,660 >> E ver na semana passada para a sintaxe lá, mas ele apenas declara N, 590 00:24:27,660 --> 00:24:29,800 e ela mostra o instruções para o utilizador. 591 00:24:29,800 --> 00:24:33,330 Ele chama Obter Int e, em seguida, ele verifica essa condição de novo, e de novo, 592 00:24:33,330 --> 00:24:35,230 e de novo até que o usuário coopera. 593 00:24:35,230 --> 00:24:38,000 >> Então, agora, algumas verificações de sanidade. 594 00:24:38,000 --> 00:24:40,370 Para aqueles familiarizados talvez com alguma programação, 595 00:24:40,370 --> 00:24:46,410 por que é N declarou, por que eu crio N fora do loop Do While? 596 00:24:46,410 --> 00:24:50,370 Por que é na linha 29 e não em como 33, por exemplo. 597 00:24:50,370 --> 00:24:53,529 >> AUDIÊNCIA: Porque quando você declará-la fora, tipo 598 00:24:53,529 --> 00:24:56,688 do mais, a maior scope-- 599 00:24:56,688 --> 00:24:58,146 >> COLUNA 1: Boa. 600 00:24:58,146 --> 00:24:59,604 >> AUDIÊNCIA: -e se você declarar -lo dentro do loop, [inaudível] 601 00:24:59,604 --> 00:25:00,979 porque ele não sabe sobre ele. 602 00:25:00,979 --> 00:25:02,819 603 00:25:02,819 --> 00:25:03,610 COLUNA 1: Exatamente. 604 00:25:03,610 --> 00:25:06,330 Se eu puder simplify-- é uma questão de escopo. 605 00:25:06,330 --> 00:25:11,530 Eo alcance refere-se ao contexto em que uma variável existe ou é utilizável. 606 00:25:11,530 --> 00:25:15,050 E a regra agradável de ouro aqui é que geralmente quando você declarar ou criar 607 00:25:15,050 --> 00:25:21,642 uma variável que você só pode usá-lo dentro dos mais próximos abraçando chaves. 608 00:25:21,642 --> 00:25:22,600 Então, o que isso significa? 609 00:25:22,600 --> 00:25:26,551 Se eu, ao contrário, desfazer isso e ir com algo que se sente um pouco mais simples. 610 00:25:26,551 --> 00:25:27,050 Certo? 611 00:25:27,050 --> 00:25:29,360 >> Linha 32 apenas parece mais limpo para mim agora. 612 00:25:29,360 --> 00:25:31,500 Eu estou fazendo as duas coisas ao uma vez e em seguida atribuindo 613 00:25:31,500 --> 00:25:33,070 a mão direita para a mão esquerda. 614 00:25:33,070 --> 00:25:35,180 O problema agora com base em que a definição de escopo 615 00:25:35,180 --> 00:25:41,130 N se que pode ser utilizado em linhas 31 e 32 dentro deste loop, 616 00:25:41,130 --> 00:25:45,100 mas onde por essa definição pode não ser usado? 617 00:25:45,100 --> 00:25:45,660 Em linha quê? 618 00:25:45,660 --> 00:25:46,160 Sim. 619 00:25:46,160 --> 00:25:47,490 >> AUDIÊNCIA: 35. 620 00:25:47,490 --> 00:25:49,180 >> COLUNA 1: 35. 621 00:25:49,180 --> 00:25:50,480 Definitivamente não 35. 622 00:25:50,480 --> 00:25:52,349 E também onde mais? 623 00:25:52,349 --> 00:25:52,890 AUDIÊNCIA: 34. 624 00:25:52,890 --> 00:25:55,040 COLUNA 1: Mesmo 34 é problemático porque é 625 00:25:55,040 --> 00:25:56,450 fora das chaves. 626 00:25:56,450 --> 00:25:58,200 E assim, de fato, vamos ver o que acontece. 627 00:25:58,200 --> 00:25:58,700 Certo? 628 00:25:58,700 --> 00:26:00,722 Isso pode parecer um pouco intuitiva ou talvez não, 629 00:26:00,722 --> 00:26:02,680 mas vamos ver o que o compilador tem a dizer quando 630 00:26:02,680 --> 00:26:04,730 nós entramos em diretório de origem de hoje. 631 00:26:04,730 --> 00:26:08,950 Faça uma função. 632 00:26:08,950 --> 00:26:11,231 Oh meu Deus. 633 00:26:11,231 --> 00:26:12,980 Bem, eu finalmente terminei que, por sinal. 634 00:26:12,980 --> 00:26:14,030 Tudo certo. 635 00:26:14,030 --> 00:26:15,510 E qual é o problema aqui? 636 00:26:15,510 --> 00:26:17,430 Muito arcano para olhar. 637 00:26:17,430 --> 00:26:19,570 Mas aqui está o que eu typed-- fazer a função de um. 638 00:26:19,570 --> 00:26:21,640 Aqui está o que fazer induzido, que é realmente 639 00:26:21,640 --> 00:26:23,705 usando o compilador clang com algumas destas bandeiras 640 00:26:23,705 --> 00:26:25,080 que vamos ver novamente em breve. 641 00:26:25,080 --> 00:26:26,829 E, novamente, sempre olhar no primeiro erro, 642 00:26:26,829 --> 00:26:30,540 porque ele só poderia ter uma cascata efeito sem significado em outras linhas. 643 00:26:30,540 --> 00:26:34,410 >> Então, o que isto significa é que o problema é em função 1.c. 644 00:26:34,410 --> 00:26:36,890 É na linha 32. 645 00:26:36,890 --> 00:26:39,712 E é na coluna, ou caráter, 13. 646 00:26:39,712 --> 00:26:42,670 Então, quando seu editor de texto que pode ajudá-lo a identificar onde o problema está. 647 00:26:42,670 --> 00:26:47,079 Então, se eu vá para cima, o que é linha 32? 648 00:26:47,079 --> 00:26:49,120 Isso é de fato um presente que já está em destaque 649 00:26:49,120 --> 00:26:50,607 n variável direito aqui-- não utilizado. 650 00:26:50,607 --> 00:26:51,440 Mas não é não utilizado. 651 00:26:51,440 --> 00:26:52,320 Eu estou usando-o. 652 00:26:52,320 --> 00:26:56,110 Mas o compilador de confuso, porque ela só existe dentro deste âmbito. 653 00:26:56,110 --> 00:26:57,727 E por isso não posso usá-lo aqui. 654 00:26:57,727 --> 00:26:58,560 Eu não posso usá-lo aqui. 655 00:26:58,560 --> 00:27:01,320 E o compilador, portanto, não se importa que eu estou tentando. 656 00:27:01,320 --> 00:27:03,940 Parece ser não utilizado no seu âmbito actual. 657 00:27:03,940 --> 00:27:08,854 >> Assim, podemos ampliar o escopo fazendo exatamente o que nós começamos com-- int n. 658 00:27:08,854 --> 00:27:11,020 E mesmo que isso não acontece olhar tão elegante, talvez, 659 00:27:11,020 --> 00:27:15,110 e nós estamos tomando uma linha extra aqui, agora é no escopo em todos os lugares. 660 00:27:15,110 --> 00:27:15,970 Então, vamos tentar novamente. 661 00:27:15,970 --> 00:27:19,040 Então, faça uma função. 662 00:27:19,040 --> 00:27:19,610 Agradável. 663 00:27:19,610 --> 00:27:23,370 E agora, se eu se eu executar a função um, vamos dar-lhe negativa de 10, 664 00:27:23,370 --> 00:27:27,170 1 negativo, 0, 1, e de fato funciona. 665 00:27:27,170 --> 00:27:28,610 >> Portanto, não há outra solução aqui. 666 00:27:28,610 --> 00:27:29,280 Você sabe o que? 667 00:27:29,280 --> 00:27:31,230 E se eu realmente estou lutando com isso? 668 00:27:31,230 --> 00:27:33,140 Eu não sei onde o n é suposto ir. 669 00:27:33,140 --> 00:27:33,723 Você sabe o que? 670 00:27:33,723 --> 00:27:39,220 Eu só vou colocar tudo o forma na parte superior do meu arquivo aqui. 671 00:27:39,220 --> 00:27:42,835 O que isso faz, você acha? 672 00:27:42,835 --> 00:27:43,335 Sim? 673 00:27:43,335 --> 00:27:44,251 >> AUDIÊNCIA: [inaudível]. 674 00:27:44,251 --> 00:27:47,964 675 00:27:47,964 --> 00:27:48,630 COLUNA 1: Yeah. 676 00:27:48,630 --> 00:27:50,560 Então eu fiz isso global, por assim dizer. 677 00:27:50,560 --> 00:27:54,430 Se você tem uma variável que está fora todas as suas funções que é permitido, 678 00:27:54,430 --> 00:27:58,780 eo código deve compilar, e n agora vai ser acessível não só em get 679 00:27:58,780 --> 00:28:02,490 int positivo, mas também no que main-- é um pouco preocupante porque não há 680 00:28:02,490 --> 00:28:04,864 já um n no principal, de modo mais em que em apenas um moment-- 681 00:28:04,864 --> 00:28:06,530 mas isso seria considerado um mau desenho. 682 00:28:06,530 --> 00:28:06,910 Tudo certo. 683 00:28:06,910 --> 00:28:08,570 Se você tem que recorrer a algo como, oh, eu vou 684 00:28:08,570 --> 00:28:10,125 apenas coloque-o aqui porque o código parece compilar 685 00:28:10,125 --> 00:28:12,180 geralmente não é a melhor prática. 686 00:28:12,180 --> 00:28:14,590 Em vez disso você quer escolher o mais estreito possível escopo 687 00:28:14,590 --> 00:28:18,720 para suas variáveis, o que significaria indo com nosso projeto inicial, que 688 00:28:18,720 --> 00:28:19,920 está bem aqui. 689 00:28:19,920 --> 00:28:24,400 >> Agora, como um aparte, se você tinha uma forma idêntica-nomeado variável aqui, 690 00:28:24,400 --> 00:28:27,750 o caminho c iria lidar com isto-- embora isso não irá acontecer também often-- 691 00:28:27,750 --> 00:28:30,150 é que este ainda é perfeitamente bem aqui. 692 00:28:30,150 --> 00:28:35,000 Mas esta definição de n na linha de 22 vai apagar a uma global. 693 00:28:35,000 --> 00:28:38,190 Portanto, este será um trabalho dentro principal, e o global 694 00:28:38,190 --> 00:28:41,670 vai realmente se aplicam quando você está em obter int positiva Mas mais sobre isso 695 00:28:41,670 --> 00:28:43,890 outra vez, mas apenas Para os curiosos. 696 00:28:43,890 --> 00:28:45,970 >> Assim, em breve, vamos corrigir isso aqui. 697 00:28:45,970 --> 00:28:49,220 Agora vamos desmembrar duas outras peças antes de olharmos para uma última linha de código 698 00:28:49,220 --> 00:28:50,170 neste programa. 699 00:28:50,170 --> 00:28:52,170 Obter int positivo. 700 00:28:52,170 --> 00:28:54,450 No lado da mão esquerda de sua palavra é a palavra int. 701 00:28:54,450 --> 00:28:56,860 O que significa isso que você acha? 702 00:28:56,860 --> 00:28:58,900 Até agora temos visto principalmente vazio. 703 00:28:58,900 --> 00:28:59,400 Sim? 704 00:28:59,400 --> 00:29:01,810 >> AUDIÊNCIA: É o tipo de variável que você está perguntando sobre. 705 00:29:01,810 --> 00:29:04,550 >> COLUNA 1: Sim, é o tipo de, deixe-me não dizer variável, mas o tipo de valor 706 00:29:04,550 --> 00:29:05,990 que eu estou pedindo para voltar. 707 00:29:05,990 --> 00:29:08,070 E, de fato, isso é intuitivo aqui, eu espero. 708 00:29:08,070 --> 00:29:08,200 Certo? 709 00:29:08,200 --> 00:29:10,250 Se você deseja obter um int positivo, o que é você 710 00:29:10,250 --> 00:29:12,920 quer o function-- como o nosso voluntários da semana passada 711 00:29:12,920 --> 00:29:15,720 para entregar-lhe um pedaço de volta de papel com um int sobre ele? 712 00:29:15,720 --> 00:29:19,190 E assim temos especificado que o chamado tipo de retorno dessa função 713 00:29:19,190 --> 00:29:20,450 é obter int positivo. 714 00:29:20,450 --> 00:29:22,990 Se não quer que ele retornar nada, você diz vazio. 715 00:29:22,990 --> 00:29:25,270 Se você quer que ele retorne uma corda, você diz string. 716 00:29:25,270 --> 00:29:27,310 Se você quer que ele retorne uma bóia, você diz float. 717 00:29:27,310 --> 00:29:30,440 Mas o único que se aplica aqui logicamente, porque eu estou usando get int, 718 00:29:30,440 --> 00:29:34,130 mesmo que eu estou restringindo-a a valores positivos, é retornar um int. 719 00:29:34,130 --> 00:29:38,380 >> Assim, ao contrário, o que significa que há um vazio entre parênteses? 720 00:29:38,380 --> 00:29:40,130 O que fazem os parênteses geralmente definem? 721 00:29:40,130 --> 00:29:40,588 Sim? 722 00:29:40,588 --> 00:29:42,880 >> AUDIÊNCIA: Significa que a função de na verdade não consegui-lo. 723 00:29:42,880 --> 00:29:44,650 >> COLUNA 1: significa que a função de não realmente recebendo o quê? 724 00:29:44,650 --> 00:29:45,430 >> AUDIÊNCIA: Uma entrada. 725 00:29:45,430 --> 00:29:46,763 >> COLUNA 1: Uma entrada, que seja. 726 00:29:46,763 --> 00:29:49,870 Então, de fato, se parêntese aqui você especificar vazio, 727 00:29:49,870 --> 00:29:51,650 isso apenas significa que eu não quero qualquer entrada. 728 00:29:51,650 --> 00:29:53,269 Eu vou lidar com o problema sozinho. 729 00:29:53,269 --> 00:29:55,810 E, de fato, você não tem que obter int dizer nada de positivo. 730 00:29:55,810 --> 00:29:59,630 Você acabou de dizer, obter int positivo, e que função irá sair e fazer a sua coisa. 731 00:29:59,630 --> 00:30:02,970 >> Mas houve um pequeno truque que eu tenho foi jogar aqui esse tempo todo 732 00:30:02,970 --> 00:30:04,970 para garantir que este código compila. 733 00:30:04,970 --> 00:30:09,620 Observe que int-- obter positivo int void-- é na linha 27. 734 00:30:09,620 --> 00:30:14,530 Mas por algum motivo aparentemente estranho é também aqui em cima na linha 16. 735 00:30:14,530 --> 00:30:18,530 E apenas para uma boa medida Vou repetir este por isso é perfeitamente idênticos. 736 00:30:18,530 --> 00:30:21,640 E eu disse protótipo com um pequeno comentário de uma linha. 737 00:30:21,640 --> 00:30:28,850 O que acontece se eu excluir que, E Agora execute novamente fazer a função 1, digite. 738 00:30:28,850 --> 00:30:29,350 Whoops. 739 00:30:29,350 --> 00:30:32,527 740 00:30:32,527 --> 00:30:33,110 Espere um minuto. 741 00:30:33,110 --> 00:30:34,764 Onde está o meu guia? 742 00:30:34,764 --> 00:30:35,263 Huh? 743 00:30:35,263 --> 00:30:37,969 744 00:30:37,969 --> 00:30:39,620 Estar por. 745 00:30:39,620 --> 00:30:41,570 Faça uma função. 746 00:30:41,570 --> 00:30:42,150 Aí vamos nós. 747 00:30:42,150 --> 00:30:42,310 ESTÁ BEM. 748 00:30:42,310 --> 00:30:43,400 Não havia salva-lo corretamente. 749 00:30:43,400 --> 00:30:45,220 Então, eu acho que há um pouco bug aqui onde eu não sou 750 00:30:45,220 --> 00:30:46,636 vendo o nome da guia no momento. 751 00:30:46,636 --> 00:30:47,940 Então, o que está acontecendo aqui? 752 00:30:47,940 --> 00:30:52,210 Declaração implícita de função obter int positivo é inválida no C99. 753 00:30:52,210 --> 00:30:53,940 Então, confundindo novamente. 754 00:30:53,940 --> 00:30:55,200 Então, qual é este indicativo de? 755 00:30:55,200 --> 00:30:57,287 Bem, acontece que C é muito estúpido. 756 00:30:57,287 --> 00:30:59,912 Bem, é a programação linguagem, ou melhor, o compilador é. 757 00:30:59,912 --> 00:31:02,940 Ele só sabe o que você tem ensinou-lo, e isso só é 758 00:31:02,940 --> 00:31:05,640 vai saber algo se você ensinou isso antes. 759 00:31:05,640 --> 00:31:07,960 Em outras palavras, em principal no momento, eu sou 760 00:31:07,960 --> 00:31:10,900 tentando chamar uma função chamado obter int positivo. 761 00:31:10,900 --> 00:31:14,120 Mas o compilador não vai a notar que obter int positivo 762 00:31:14,120 --> 00:31:16,500 existe até a linha 26. 763 00:31:16,500 --> 00:31:21,360 E assim que o compilador faz é apenas erros, logo que ele fica para a linha 17, 764 00:31:21,360 --> 00:31:23,700 dizendo declaração implícita de obter int positivo, o que 765 00:31:23,700 --> 00:31:27,740 é apenas uma maneira elegante de dizer, eu não sei sabe o que é ficar int positivo ainda. 766 00:31:27,740 --> 00:31:31,240 >> Outras linguagens como Java e Python e Ruby pode olhar para frente. 767 00:31:31,240 --> 00:31:32,240 C não. 768 00:31:32,240 --> 00:31:35,110 E assim a nossa forma de corrigir esta é uma de duas maneiras. 769 00:31:35,110 --> 00:31:40,160 Qualquer um dos dois, se o problema é que começa int positivo não tenha sido visto antes, 770 00:31:40,160 --> 00:31:42,150 Bem, deixe-me apenas movê-lo até o topo. 771 00:31:42,150 --> 00:31:43,650 Isso seria corrigir esse problema. 772 00:31:43,650 --> 00:31:46,790 Mas, geralmente, é considerado melhor técnica 773 00:31:46,790 --> 00:31:50,220 para colocar a sua principal função no muito superior, de modo que um ser humano de ler o seu código 774 00:31:50,220 --> 00:31:52,710 sabe o que o programa faz, porque principal não está enterrado tudo 775 00:31:52,710 --> 00:31:53,960 a maneira na parte inferior ou no meio. 776 00:31:53,960 --> 00:31:55,130 É no topo. 777 00:31:55,130 --> 00:31:56,410 De modo que não se sente ideal. 778 00:31:56,410 --> 00:31:58,326 E você pode realmente começar em situações onde 779 00:31:58,326 --> 00:32:00,820 se as chamadas uma função outro, o que chama outro, 780 00:32:00,820 --> 00:32:04,630 você pode entrar em um problema onde não pode ir por cima do outro, de forma lógica. 781 00:32:04,630 --> 00:32:05,920 Não é apenas possível. 782 00:32:05,920 --> 00:32:09,290 >> E assim o caminho para o trabalho de contornar isso é apenas tomar 783 00:32:09,290 --> 00:32:13,200 a assinatura da função, por assim speak-- a primeira linha onde é declared-- 784 00:32:13,200 --> 00:32:16,850 e apenas copiar, colá-lo no topo, mas não com braces-- encaracolado 785 00:32:16,850 --> 00:32:17,980 apenas com um ponto e vírgula. 786 00:32:17,980 --> 00:32:20,840 É como uma pequena dica do que está por vir. 787 00:32:20,840 --> 00:32:26,630 E, de fato, todo este tempo quando nós tenho visto coisas como io.h padrão 788 00:32:26,630 --> 00:32:33,040 e cs50.h, semelhantemente, nos dot h arquivos estão lá outros protótipos. 789 00:32:33,040 --> 00:32:35,250 E vamos ver que em pouco tempo. 790 00:32:35,250 --> 00:32:39,340 >> Assim, em breve, quando você tem um programa em um arquivo com várias funções 791 00:32:39,340 --> 00:32:42,300 além de principal, você quase sempre quer declará-los 792 00:32:42,300 --> 00:32:45,360 apenas por meio do seu primeiro linha, seguido por um ponto e vírgula, 793 00:32:45,360 --> 00:32:48,410 no topo do arquivo. 794 00:32:48,410 --> 00:32:50,460 Isso foi um monte de uma vez. 795 00:32:50,460 --> 00:32:53,130 Alguma pergunta? 796 00:32:53,130 --> 00:32:53,920 Alguma pergunta? 797 00:32:53,920 --> 00:32:54,530 Tudo certo. 798 00:32:54,530 --> 00:32:59,760 >> Então, vamos seguir em frente, em seguida, para algo como tosse. 799 00:32:59,760 --> 00:33:00,260 Oh. 800 00:33:00,260 --> 00:33:00,570 Quão apropriado. 801 00:33:00,570 --> 00:33:01,220 Tudo certo. 802 00:33:01,220 --> 00:33:02,260 Tosse. 803 00:33:02,260 --> 00:33:05,080 Então aqui é um c implementação de um programa 804 00:33:05,080 --> 00:33:07,560 que fizemos no outro dia em Arranhão que muito simplesmente apenas 805 00:33:07,560 --> 00:33:08,691 diz tosse, tosse, tosse. 806 00:33:08,691 --> 00:33:09,190 Tudo certo. 807 00:33:09,190 --> 00:33:11,136 E alguém disse há poucos dias atrás que há 808 00:33:11,136 --> 00:33:12,760 uma maneira de limpar este código já. 809 00:33:12,760 --> 00:33:12,880 Tudo certo? 810 00:33:12,880 --> 00:33:15,440 Assim que você está copiando e colando provavelmente ruim design. 811 00:33:15,440 --> 00:33:18,725 Pelo menos uma vez chegarmos a quatro ou cinco ou 20 tosses, ele se sente mal prática. 812 00:33:18,725 --> 00:33:19,850 Nós apenas manter cópia, colando. 813 00:33:19,850 --> 00:33:22,213 Qual é a solução óbvia a limpeza deste programa acima? 814 00:33:22,213 --> 00:33:23,120 >> AUDIÊNCIA: Laço. 815 00:33:23,120 --> 00:33:23,350 >> COLUNA 1: Yeah. 816 00:33:23,350 --> 00:33:24,070 Portanto, use um loop. 817 00:33:24,070 --> 00:33:27,697 E podemos usar um laço para, um tempo ciclo, qualquer número de abordagens. 818 00:33:27,697 --> 00:33:29,780 E, de fato, é o que o que fazemos na versão um aqui. 819 00:33:29,780 --> 00:33:32,250 Já em vez reescrito na versão de um cough.c 820 00:33:32,250 --> 00:33:35,170 ser apenas tosse no prazo de um ciclo-a. 821 00:33:35,170 --> 00:33:38,240 Tudo bem, mas há uma oportunidade agora de tipo de início 822 00:33:38,240 --> 00:33:41,630 para projetar este um pouco mais como a lição que ensinou um momento atrás, 823 00:33:41,630 --> 00:33:46,190 que é isto-- supor que eu queria para criar uma função chamada tosse, 824 00:33:46,190 --> 00:33:49,730 vamos considerar por um momento o que vai olhar como. 825 00:33:49,730 --> 00:33:51,900 Então, se eu quiser algo a tossir, eu só preciso 826 00:33:51,900 --> 00:33:53,800 usar impressão f dentro da função. 827 00:33:53,800 --> 00:33:55,030 E, de fato eu sou. 828 00:33:55,030 --> 00:33:56,990 E, de fato, tudo isso hora, em qualquer tempo que você está 829 00:33:56,990 --> 00:33:59,000 imprimindo a algo o ecrã, um programador 830 00:33:59,000 --> 00:34:00,610 chamaria isso de um efeito colateral. 831 00:34:00,610 --> 00:34:02,990 Não é entregando-me volta a alguém um valor. 832 00:34:02,990 --> 00:34:06,170 Ele me está tomando alguma ação que pode ser visualmente óbvia. 833 00:34:06,170 --> 00:34:10,672 Mas essa tosse função, ele voltar qualquer coisa com base na sua primeira linha? 834 00:34:10,672 --> 00:34:12,880 Não, porque seu tipo de retorno é nula, o que significa apenas 835 00:34:12,880 --> 00:34:14,250 ele não está me dando nada em troca. 836 00:34:14,250 --> 00:34:16,791 Ele poderia estar fazendo algo visualmente, mas ela não me entregando 837 00:34:16,791 --> 00:34:18,639 cópia de um pedaço de papel como na semana passada. 838 00:34:18,639 --> 00:34:21,310 >> Será que ela precisa de qualquer entrada? 839 00:34:21,310 --> 00:34:21,810 Não. 840 00:34:21,810 --> 00:34:23,134 E por isso é vazio aqui também. 841 00:34:23,134 --> 00:34:25,600 Portanto, esta também é uma espécie de over-engenharia esse problema. 842 00:34:25,600 --> 00:34:26,099 Certo? 843 00:34:26,099 --> 00:34:28,820 Eu fiz o programa mais complexas, mais linhas de código, 844 00:34:28,820 --> 00:34:31,889 Eu não fiz isso qualquer esta mais funcional, mas 845 00:34:31,889 --> 00:34:34,210 seria um trampolim, talvez, para uma mais ampla 846 00:34:34,210 --> 00:34:36,830 contexto com o código de mais complicado. 847 00:34:36,830 --> 00:34:38,150 Mas o que sobre isso? 848 00:34:38,150 --> 00:34:42,050 O que eu done-- apenas olhando para este sem olhar para o comentário 849 00:34:42,050 --> 00:34:46,076 no topo da file-- o que tem Eu fundamentalmente feito aqui com a minha tosse 850 00:34:46,076 --> 00:34:47,409 implementação que é diferente? 851 00:34:47,409 --> 00:34:48,327 Sim, na parte de trás? 852 00:34:48,327 --> 00:34:51,384 >> AUDIÊNCIA: Torná-lo para que você possa têm um caráter desligar. 853 00:34:51,384 --> 00:34:52,050 COLUNA 1: Yeah. 854 00:34:52,050 --> 00:34:53,270 Então, este se sente tipo de Nice. 855 00:34:53,270 --> 00:34:53,389 Certo? 856 00:34:53,389 --> 00:34:56,600 É como a adição de um recurso para o seu ou a sua função de programa, neste caso. 857 00:34:56,600 --> 00:34:57,830 Ainda não retorna nada. 858 00:34:57,830 --> 00:35:00,538 Ele pode ter um efeito colateral visual, porque ele está chamando de impressão f. 859 00:35:00,538 --> 00:35:02,800 Mas agora eu tenho parametrizada a função, a qual 860 00:35:02,800 --> 00:35:06,470 significa que eu tenha especificado tomadas entrada do tipo int e chamá-lo n, 861 00:35:06,470 --> 00:35:08,510 mas eu poderia chamá-lo de qualquer coisa que eu quero. 862 00:35:08,510 --> 00:35:11,550 Na verdade, ele poderia ser apenas vezes para ser ainda mais explícito. 863 00:35:11,550 --> 00:35:13,310 E então eu só poderia mudar isso aqui. 864 00:35:13,310 --> 00:35:16,450 Mas o ponto é que esta é a forma como eu criar uma função que recebe de entrada. 865 00:35:16,450 --> 00:35:19,530 E se você se lembra lançando talvez por meio on-line em um 866 00:35:19,530 --> 00:35:23,000 dos walk-throughs, o quarto e último exemplo tosse, 867 00:35:23,000 --> 00:35:27,150 você vai notar aqui que eu generalizada meu código tipo further-- de abstraída 868 00:35:27,150 --> 00:35:27,690 la ainda mais. 869 00:35:27,690 --> 00:35:31,390 Como tosse e espirro, ambos são sobre como dizer algo ou fazer 870 00:35:31,390 --> 00:35:32,330 algum tipo de som. 871 00:35:32,330 --> 00:35:34,725 Guardar o seria correspondente bloco de rascunho. 872 00:35:34,725 --> 00:35:37,350 E assim que eu fiz nesta versão, que nós podemos apenas olhar para, 873 00:35:37,350 --> 00:35:43,170 é a tosse é apenas como dizer, [COUGH], tosse, e, entretanto, é espirros 874 00:35:43,170 --> 00:35:44,570 como dizer, [Achoo]. 875 00:35:44,570 --> 00:35:46,900 E então eu generalizada a implementação dos 876 00:35:46,900 --> 00:35:48,970 por agora a implementar esta função genérica, 877 00:35:48,970 --> 00:35:51,490 dizer, o que é interessante para fins de hoje 878 00:35:51,490 --> 00:35:54,300 só porque ainda não tem um tipo de retorno. 879 00:35:54,300 --> 00:35:56,398 Mas quantas entradas é que tem? 880 00:35:56,398 --> 00:35:56,981 AUDIÊNCIA: Dois. 881 00:35:56,981 --> 00:35:57,430 COLUNA 1: Two. 882 00:35:57,430 --> 00:35:59,263 E por isso, se você quiser tomar em dois argumentos, 883 00:35:59,263 --> 00:36:00,710 apenas separe-as com uma vírgula. 884 00:36:00,710 --> 00:36:03,110 E se você quiser, em seguida, chamar essa função, 885 00:36:03,110 --> 00:36:05,800 perceber que você só chamar digamos, citações, fecha aspas, 886 00:36:05,800 --> 00:36:09,090 para o primeiro argumento, comum n, para o segundo argumento. 887 00:36:09,090 --> 00:36:12,130 Então, novamente, só temos agora o blocos de construção para que possamos realmente 888 00:36:12,130 --> 00:36:15,686 implementar algumas das nossas próprias funções. 889 00:36:15,686 --> 00:36:16,570 Tudo certo. 890 00:36:16,570 --> 00:36:19,690 Quaisquer perguntas sobre estes? 891 00:36:19,690 --> 00:36:22,400 >> Então agora vamos descascar uma camada em caso afirmativo. 892 00:36:22,400 --> 00:36:24,840 E o objetivo, em última análise, é conjunto de problemas da próxima semana 893 00:36:24,840 --> 00:36:27,710 vai ser em cryptogrophy-- técnica de codificação da informação. 894 00:36:27,710 --> 00:36:30,640 E especificamente, as informações terá que criptografar ou descriptografar 895 00:36:30,640 --> 00:36:31,605 vai ser texto. 896 00:36:31,605 --> 00:36:33,980 E assim por esse tipo de convites a questão hoje, como bem, 897 00:36:33,980 --> 00:36:38,480 o que está acontecendo debaixo do capô com texto ASCII além da semana zero, 898 00:36:38,480 --> 00:36:40,730 E como podemos realmente começar a manipulá-lo? 899 00:36:40,730 --> 00:36:43,070 Então aqui é o nome do Zamyla. 900 00:36:43,070 --> 00:36:47,380 E em texto, que pode ser introduzido em como a função seqüência de get. 901 00:36:47,380 --> 00:36:52,540 E a partir de agora, quando você vê um string como isto-- Z-A-M-Y-L-A-- 902 00:36:52,540 --> 00:36:56,550 começar a pensar nisso como se cada desses personagens está em uma caixa de sua 903 00:36:56,550 --> 00:36:57,050 própria. 904 00:36:57,050 --> 00:36:59,460 E, de fato, em uma semana ou assim é tempo, cada uma destas caixas 905 00:36:59,460 --> 00:37:04,280 vai representar muito especificamente um bloco de memory-- uma mordida de memória. 906 00:37:04,280 --> 00:37:07,050 Assim, cada uma dessas cartas, em última análise, irá representar 8 bits. 907 00:37:07,050 --> 00:37:10,560 E nós vamos realmente ver o que está acontecendo por baixo do capô em meu computador. 908 00:37:10,560 --> 00:37:13,440 >> Mas para não basta só de olhar para Zamyla 909 00:37:13,440 --> 00:37:17,520 através desta lente, em que cada um de essas cartas é em sua própria caixa. 910 00:37:17,520 --> 00:37:22,697 E bem o suficiente em C que pudermos acesso a cada uma destas caixas directamente. 911 00:37:22,697 --> 00:37:25,530 Então, se você deseja obter a primeira letra do seu nome, super fácil no C. 912 00:37:25,530 --> 00:37:28,410 Se você deseja obter a última carta, super fácil, bem 913 00:37:28,410 --> 00:37:30,240 com um novo pedaço de sintaxe. 914 00:37:30,240 --> 00:37:36,250 >> Então, eu estou indo para ir em frente para CS50 IDE e abrir a seqüência de zero ponto C. 915 00:37:36,250 --> 00:37:40,270 E aqui neste exemplo, existem um par de coisas novas acontecendo. 916 00:37:40,270 --> 00:37:44,360 Então, primeiro na linha 19, nós temos visto essa seqüência get antes--. 917 00:37:44,360 --> 00:37:49,840 Então, assim como uma verificação de sanidade rápida, se alguém poderia oferecer-se verbalmente 918 00:37:49,840 --> 00:37:52,662 explicação de um leigo de o que está acontecendo na linha 19. 919 00:37:52,662 --> 00:37:55,370 Como apenas traduzir isso em Inglês que um companheiro de quarto em não CS50 920 00:37:55,370 --> 00:37:56,416 pode entender. 921 00:37:56,416 --> 00:37:56,916 Sim. 922 00:37:56,916 --> 00:37:59,749 >> AUDIÊNCIA: Tenha a entrada do usuário um corda e armazená-lo em uma variável s. 923 00:37:59,749 --> 00:38:01,934 924 00:38:01,934 --> 00:38:02,600 COLUNA 1: Boa. 925 00:38:02,600 --> 00:38:05,579 Ter a entrada do usuário uma string e armazená-lo em uma variável s. 926 00:38:05,579 --> 00:38:06,120 Isso é ótimo. 927 00:38:06,120 --> 00:38:08,090 Assim, no lado direito lado, que chamamos de cadeia get. 928 00:38:08,090 --> 00:38:10,340 Que retorna um valor que não se atribuiu 929 00:38:10,340 --> 00:38:14,230 do lado direito para a esquerda mão- lado em uma variável chamada s que é 930 00:38:14,230 --> 00:38:15,950 projetado para armazenar uma string. 931 00:38:15,950 --> 00:38:16,800 Exatamente. 932 00:38:16,800 --> 00:38:20,000 >> Então, agora a linha de 22, por o comentário na linha 21, 933 00:38:20,000 --> 00:38:22,780 obviamente que imprime cadeia um caractere por linha. 934 00:38:22,780 --> 00:38:23,740 Mas como? 935 00:38:23,740 --> 00:38:27,040 Então, primeiro de tudo, eu inicializar a 0. 936 00:38:27,040 --> 00:38:31,061 E então como é que vamos chegar a o fim do nome de Zamyla? 937 00:38:31,061 --> 00:38:32,810 Bem, no final de O nome de Zamyla, eu poderia 938 00:38:32,810 --> 00:38:38,151 digite manualmente o último caractere o seu nome de algum modo, ou o número do mesmo. 939 00:38:38,151 --> 00:38:38,650 Certo? 940 00:38:38,650 --> 00:38:43,500 Se voltarmos aqui-- Z-A-M-L-- Y-L-A-- para que eu pudesse digitar. 941 00:38:43,500 --> 00:38:47,340 Qual é o índice de A última carta de Zamyla? 942 00:38:47,340 --> 00:38:52,517 Se esta é 0-- falando como um programmer-- 0, 1, 2, 3, 4, 5, 943 00:38:52,517 --> 00:38:56,570 Eu heard-- assim, de fato, a última letra em nome de Zamyla é o sexto, 944 00:38:56,570 --> 00:38:58,890 mas se contarmos a partir de 0, que vai ser o número 5. 945 00:38:58,890 --> 00:39:01,320 Portanto, manter isso em mente aqui. 946 00:39:01,320 --> 00:39:04,929 >> Acontece lá fora é uma função em C chamada strlen, e volta no dia 947 00:39:04,929 --> 00:39:06,720 e até hoje ainda, um monte de programadores 948 00:39:06,720 --> 00:39:09,524 optar por sincronizar nomes para a sua funções que soam como as palavras 949 00:39:09,524 --> 00:39:10,440 eles estão tentando dizer. 950 00:39:10,440 --> 00:39:12,590 Então strlen é comprimento da corda. 951 00:39:12,590 --> 00:39:18,168 E então o que faria comprimento da corda de S voltar quando Zamyla é a entrada? 952 00:39:18,168 --> 00:39:19,569 >> AUDIÊNCIA: Five. 953 00:39:19,569 --> 00:39:22,090 >> COLUNA 1: Z-A-H-Y-G. Six. 954 00:39:22,090 --> 00:39:22,590 Certo? 955 00:39:22,590 --> 00:39:23,940 Qual é o comprimento do nome de Zamyla? 956 00:39:23,940 --> 00:39:24,440 Certo? 957 00:39:24,440 --> 00:39:26,240 E, assim, na realidade, seis letras. 958 00:39:26,240 --> 00:39:26,740 Certo? 959 00:39:26,740 --> 00:39:28,940 E então o que é que isso significa para o nosso loop? 960 00:39:28,940 --> 00:39:32,130 Nós estamos indo para ir de 0 até seis, que 961 00:39:32,130 --> 00:39:33,650 vai nos dar cinco iterações. 962 00:39:33,650 --> 00:39:34,890 O que fazemos em cada iteração? 963 00:39:34,890 --> 00:39:36,870 Bem, por cento C, alguém adivinhou o outro dia, 964 00:39:36,870 --> 00:39:38,710 significa um espaço reservado para o quê? 965 00:39:38,710 --> 00:39:39,335 >> AUDIÊNCIA: Char. 966 00:39:39,335 --> 00:39:40,293 COLUNA 1: Apenas um char. 967 00:39:40,293 --> 00:39:42,877 Assim, um único character-- não vários personagens, como uma string. 968 00:39:42,877 --> 00:39:45,251 E então aqui está a nova linha que temos de imprimir. 969 00:39:45,251 --> 00:39:46,580 E então aqui está a nova sintaxe. 970 00:39:46,580 --> 00:39:51,130 Se você quiser imprimir o i-th caractere na seqüência S, por assim dizer, 971 00:39:51,130 --> 00:39:54,060 você pode simplesmente dizer o nome da cadeia de S, 972 00:39:54,060 --> 00:39:58,230 e, em seguida, abrir colchete, e depois fechou colchete, com um i 973 00:39:58,230 --> 00:39:58,780 o meio. 974 00:39:58,780 --> 00:40:01,430 E é tipo de Nice, em que que tipo de parece um quadrado 975 00:40:01,430 --> 00:40:06,210 assim como as praças em que Zamyla de caracteres existir em que imagem lá. 976 00:40:06,210 --> 00:40:09,970 >> Então, se eu realmente executar este Agora, vamos ver o que acontece. 977 00:40:09,970 --> 00:40:15,190 Faça corda 0 dot barra seqüência 0, e então eu sou 978 00:40:15,190 --> 00:40:16,720 vai digitar o nome de Zamyla. 979 00:40:16,720 --> 00:40:19,428 Não há nenhuma linha, porque eu não fiz utilizar impressão f, mas isso é bom. 980 00:40:19,428 --> 00:40:20,660 Eu só sei o que fazer. 981 00:40:20,660 --> 00:40:23,240 E, de fato, ele imprime O nome de Zamyla, um por linha. 982 00:40:23,240 --> 00:40:25,760 >> Agora vamos ser um pouco imprudente. 983 00:40:25,760 --> 00:40:28,461 Suponha que eu não sabia sobre strlen e eu pensei, 984 00:40:28,461 --> 00:40:31,460 tudo bem, ninguém vai ter um nomear como maior do que 50 caracteres. 985 00:40:31,460 --> 00:40:36,360 Vamos em frente e recompilar este e executá-lo novamente, e em seguida, digite Zamyla 986 00:40:36,360 --> 00:40:37,160 mais uma vez. 987 00:40:37,160 --> 00:40:40,850 Logicamente, o que é a programa vai tentar imprimir? 988 00:40:40,850 --> 00:40:49,545 Z-A-H-Y-L-A, em seguida, como 45 desconhecidos bytes de memória. 989 00:40:49,545 --> 00:40:51,670 E, de fato, vamos voltar a esta idéia de memória. 990 00:40:51,670 --> 00:40:54,180 Mas logicamente, se O nome de Zamyla é este longo, 991 00:40:54,180 --> 00:40:56,450 de acordo com a imagem aqui, o que estamos dizendo 992 00:40:56,450 --> 00:40:59,810 é manter a impressão, continuar a imprimir, mantenha impressão, continuar a imprimir, mantenha a impressão, 993 00:40:59,810 --> 00:41:03,781 todo o caminho para o caráter 50, que quem sabe o que vai acontecer. 994 00:41:03,781 --> 00:41:05,030 Então vamos realmente dar uma olhada. 995 00:41:05,030 --> 00:41:06,720 Vamos digitar Zamyla. 996 00:41:06,720 --> 00:41:07,250 Interessante. 997 00:41:07,250 --> 00:41:08,190 Nós tivemos muita sorte. 998 00:41:08,190 --> 00:41:09,700 Apenas um monte de espaço em branco. 999 00:41:09,700 --> 00:41:09,930 Oh. 1000 00:41:09,930 --> 00:41:11,120 Há um caráter descolados. 1001 00:41:11,120 --> 00:41:14,577 Parece como uma espécie de pergunta estranha marcar lá, mas não é o nome do Zamyla. 1002 00:41:14,577 --> 00:41:15,660 Vamos ficar muito imprudente. 1003 00:41:15,660 --> 00:41:20,000 Como sobre nós imprimir 500 blocos para o desconhecido? 1004 00:41:20,000 --> 00:41:24,380 Vamos em frente e fazer isso bem e, em seguida, re-run. 1005 00:41:24,380 --> 00:41:27,980 E em tela cheia, porque vamos precisamos ver mais espaço. 1006 00:41:27,980 --> 00:41:30,460 Zamyla. 1007 00:41:30,460 --> 00:41:31,830 Teve sorte novamente. 1008 00:41:31,830 --> 00:41:33,070 >> Ousamos obter mais imprudente? 1009 00:41:33,070 --> 00:41:36,070 Vamos mais imprudente. 1010 00:41:36,070 --> 00:41:39,350 50.000 caracteres. 1011 00:41:39,350 --> 00:41:41,390 Este não é o mais certamente uma boa idéia. 1012 00:41:41,390 --> 00:41:41,890 Tudo certo. 1013 00:41:41,890 --> 00:41:42,990 Faça corda 0. 1014 00:41:42,990 --> 00:41:44,720 Esta será a nossa última demonstração. 1015 00:41:44,720 --> 00:41:47,261 Zamyla. 1016 00:41:47,261 --> 00:41:48,632 Ugh. 1017 00:41:48,632 --> 00:41:50,010 Ugh. 1018 00:41:50,010 --> 00:41:50,680 ESTÁ BEM. 1019 00:41:50,680 --> 00:41:54,407 Assim, a minha memória é realmente vazio agora, que na verdade é tipo de conveniente. 1020 00:41:54,407 --> 00:41:55,990 O que eu estou tentando obter a-- tudo bem. 1021 00:41:55,990 --> 00:41:57,614 E agora eu estou indo só para obter imprudente. 1022 00:41:57,614 --> 00:41:58,570 500.000. 1023 00:41:58,570 --> 00:42:03,860 Make-- de tela cheia de deixá-lo. 1024 00:42:03,860 --> 00:42:04,990 Enter. 1025 00:42:04,990 --> 00:42:05,490 Zamyla. 1026 00:42:05,490 --> 00:42:12,050 1027 00:42:12,050 --> 00:42:13,390 Aí vamos nós. 1028 00:42:13,390 --> 00:42:15,610 Eu não tenho nenhuma idéia do que isso é, mas soa ruim. 1029 00:42:15,610 --> 00:42:16,110 Tudo certo. 1030 00:42:16,110 --> 00:42:20,322 E, de fato, em breve, se você está entre os poucos afortunados em horário de expediente 1031 00:42:20,322 --> 00:42:22,780 e no conjunto de problemas um, você pode muito bem encontrar esse. 1032 00:42:22,780 --> 00:42:25,490 Falha de segmentação realmente faz tem um significado bem definido. 1033 00:42:25,490 --> 00:42:28,450 Isso significa algum tipo de erro relativa a um segmento de memória. 1034 00:42:28,450 --> 00:42:30,490 E, em termos leigos, isso significa que nós tocamos 1035 00:42:30,490 --> 00:42:34,780 memory-- usamos RAM no meu computador que eu não deveria ter tido acesso a. 1036 00:42:34,780 --> 00:42:37,050 E é isso que é ao mesmo tempo poderoso e também perigoso 1037 00:42:37,050 --> 00:42:39,910 sobre C é que você realmente têm acesso irrestrito 1038 00:42:39,910 --> 00:42:45,910 para a totalidade da memória do seu programa ou bytes de memória RAM ou, mais especificamente. 1039 00:42:45,910 --> 00:42:49,510 >> Assim, mesmo que o nome de Zamyla é de apenas seis caracteres, 1040 00:42:49,510 --> 00:42:51,450 Eu ainda posso ir a qualquer lugar na memória que eu quero. 1041 00:42:51,450 --> 00:42:53,491 E como um aparte, se você tiver já leu algum artigo 1042 00:42:53,491 --> 00:42:55,610 ao longo dos anos sobre alguns servidor ou algum programa 1043 00:42:55,610 --> 00:42:58,654 ficar rachado ou hackeado que é aproveitado algo 1044 00:42:58,654 --> 00:43:00,820 chamado um estouro de buffer exploit que nós vamos realmente 1045 00:43:00,820 --> 00:43:04,970 falar em poucas semanas, que é geralmente referindo-se a alguma forma enganar 1046 00:43:04,970 --> 00:43:09,090 um computador para ir bem além das fronteiras da memória 1047 00:43:09,090 --> 00:43:11,410 que deve ter, e encontrar algo suculento 1048 00:43:11,410 --> 00:43:13,530 em que um memory-- senha, talvez, uma maneira 1049 00:43:13,530 --> 00:43:16,990 de contornar alguns número de série verificar, ou apenas geralmente capaz 1050 00:43:16,990 --> 00:43:20,360 para enganar o computador está executando código que não foi pretendido. 1051 00:43:20,360 --> 00:43:22,360 Mas vamos voltar a realidade para apenas um momento 1052 00:43:22,360 --> 00:43:24,550 onde este programa foi implementado com strlen, 1053 00:43:24,550 --> 00:43:26,110 e introduzir uma coisa aqui em cima. 1054 00:43:26,110 --> 00:43:30,030 O que há de novo entre estas três linhas principais? 1055 00:43:30,030 --> 00:43:30,910 >> Então cadeia dot h. 1056 00:43:30,910 --> 00:43:35,490 Acontece lá fora é essa biblioteca chamada Cadeia Dot H, ou a Biblioteca String, 1057 00:43:35,490 --> 00:43:38,490 cujo arquivo de cabeçalho, por assim dizer, é string dot h que me dá 1058 00:43:38,490 --> 00:43:40,860 acesso a esta função strlen. 1059 00:43:40,860 --> 00:43:43,841 Se eu omitir que, o compilador é vai gritar comigo de alguma forma. 1060 00:43:43,841 --> 00:43:44,590 Mas você sabe o quê? 1061 00:43:44,590 --> 00:43:46,090 Agora vamos realmente diferenciada. 1062 00:43:46,090 --> 00:43:50,820 Na linha 22, há algo tipo de inefficient-- mal projetado, 1063 00:43:50,820 --> 00:43:53,990 arguably-- sobre esta linha de código. 1064 00:43:53,990 --> 00:43:56,280 Pense de volta a como for-loop são implementadas 1065 00:43:56,280 --> 00:44:00,140 e quais os passos acontecer de novo e e novamente novamente-- a inicialização, 1066 00:44:00,140 --> 00:44:04,110 a condição, de que o código é executada, então o incremento 1067 00:44:04,110 --> 00:44:07,880 ou a alteração, em seguida, a condição, em seguida, o código, em seguida, a alteração, então 1068 00:44:07,880 --> 00:44:11,280 a condição, em seguida, o código, em seguida, a alteração, e assim por diante. 1069 00:44:11,280 --> 00:44:15,320 Então, o que pode ser um pouco preocupante ou mal feito aqui? 1070 00:44:15,320 --> 00:44:16,387 Sim, no azul. 1071 00:44:16,387 --> 00:44:18,220 AUDIÊNCIA: strlen é chamado muitas, muitas vezes. 1072 00:44:18,220 --> 00:44:20,654 1073 00:44:20,654 --> 00:44:21,320 COLUNA 1: Yeah. 1074 00:44:21,320 --> 00:44:23,700 Assim, é chamado strlen muitas vezes, mas o que é 1075 00:44:23,700 --> 00:44:27,113 o comprimento do nome de Zamyla o primeira vez que o loop é executado? 1076 00:44:27,113 --> 00:44:27,860 >> AUDIÊNCIA: Six. 1077 00:44:27,860 --> 00:44:28,110 >> COLUNA 1: Six. 1078 00:44:28,110 --> 00:44:30,976 Bem, qual é o comprimento de seu nome a segunda vez que o código é executado? 1079 00:44:30,976 --> 00:44:31,432 >> AUDIÊNCIA: Six. 1080 00:44:31,432 --> 00:44:31,890 >> COLUNA 1: Tudo bem. 1081 00:44:31,890 --> 00:44:32,720 Ainda é seis. 1082 00:44:32,720 --> 00:44:33,220 Certo? 1083 00:44:33,220 --> 00:44:35,260 O nome de Zarla não tem mudado, mesmo que eu estou procurando 1084 00:44:35,260 --> 00:44:38,240 em apenas parte das letras em seu nome. 1085 00:44:38,240 --> 00:44:41,349 E assim o fato de que eu sou efetivamente fazendo esta pergunta, o que é 1086 00:44:41,349 --> 00:44:44,640 o comprimento de Zamyla, qual é o comprimento de Zamyla, qual é o comprimento de Zamyla, 1087 00:44:44,640 --> 00:44:47,990 seis vezes separadas, ou sete, mesmo, é simplesmente estúpido, 1088 00:44:47,990 --> 00:44:50,390 porque isso é imutável essa resposta. 1089 00:44:50,390 --> 00:44:53,550 E então o que eu poderia realmente fazer é isto-- em seqüência um 1090 00:44:53,550 --> 00:44:55,680 Eu tenho uma versão um pouco melhor aqui. 1091 00:44:55,680 --> 00:45:00,110 Há-- seqüência whoops-- dois que eu tenho uma versão ligeiramente melhor em que 1092 00:45:00,110 --> 00:45:05,010 Eu faço isto-- em vez de apenas i inicializar a 0, também com uma vírgula 1093 00:45:05,010 --> 00:45:07,990 declarar uma segunda variável chamada n-- Eu não tenho que dizer int novamente. 1094 00:45:07,990 --> 00:45:09,220 Eu não deveria, na verdade. 1095 00:45:09,220 --> 00:45:10,380 Mas eu digo n. 1096 00:45:10,380 --> 00:45:13,610 E então eu inicializar a n o strlen de n, de modo que agora 1097 00:45:13,610 --> 00:45:17,110 quantas vezes é que strlen são executados no total? 1098 00:45:17,110 --> 00:45:17,610 Só uma vez. 1099 00:45:17,610 --> 00:45:20,257 E então é isso que queremos dizer anteriormente sobre melhor design. 1100 00:45:20,257 --> 00:45:23,090 Na verdade, uma vez que seu código está correto, indo para trás e pensar através, 1101 00:45:23,090 --> 00:45:26,820 estou usando tão pouco memória ou como alguns segundos 1102 00:45:26,820 --> 00:45:30,409 ou milissegundos de tempo de computador como possível implementar algum problema? 1103 00:45:30,409 --> 00:45:32,200 E eu estou indo para rolar se e apenas mencionar 1104 00:45:32,200 --> 00:45:34,283 que há essa menção de null nesta versão, 1105 00:45:34,283 --> 00:45:36,390 mas vamos voltar a isso em pouco tempo. 1106 00:45:36,390 --> 00:45:41,010 Porque, por enquanto, vamos dar uma olhada para onde isso vai nos levar. 1107 00:45:41,010 --> 00:45:44,110 Então, um, verifica-se que agora que temos a capacidade 1108 00:45:44,110 --> 00:45:46,860 olhar para caracteres individuais, podemos alavancar algo 1109 00:45:46,860 --> 00:45:50,807 a partir da semana 0 que era muito misterioso e tipo de desinteressante no momento. 1110 00:45:50,807 --> 00:45:53,390 Mas agora, e especialmente quando nós chegar à criptografia em uma semana, 1111 00:45:53,390 --> 00:45:54,820 ele vai ser muito poderosa. 1112 00:45:54,820 --> 00:45:57,450 Acontece que com algum ints e carros alegóricos de dados types-- 1113 00:45:57,450 --> 00:46:00,300 e caracteres e strings e outra coisas- alguns deles 1114 00:46:00,300 --> 00:46:02,800 pode ser facilmente convertido para o outro. 1115 00:46:02,800 --> 00:46:05,840 >> Por exemplo, quando nós falamos sobre ASCII algum tempo aqui está ago-- 1116 00:46:05,840 --> 00:46:07,796 a letras maiúsculas A através M, ponto, ponto, 1117 00:46:07,796 --> 00:46:12,530 dot-- dissemos que há um mapeamento entre estas letras e números. 1118 00:46:12,530 --> 00:46:14,970 E, de fato, ele é válido para letras minúsculas assim. 1119 00:46:14,970 --> 00:46:17,470 Minúsculas um é 97, o capital é de 65 um. 1120 00:46:17,470 --> 00:46:20,860 E há um número em ASCII, que é apenas esse mapeamento 1121 00:46:20,860 --> 00:46:23,240 sistema para todas essas outras letras. 1122 00:46:23,240 --> 00:46:25,030 Então, o que isso significa? 1123 00:46:25,030 --> 00:46:28,390 Bem, eu estou indo para ir em frente e aberto se verdadeira rapidamente algo chamado 1124 00:46:28,390 --> 00:46:31,240 ASCII 0, a maioria dos quais é comentários. 1125 00:46:31,240 --> 00:46:33,860 E novamente on-line você pode sempre olhar através dos comentários. 1126 00:46:33,860 --> 00:46:36,180 >> E vejam o que isso vai fazer. 1127 00:46:36,180 --> 00:46:38,410 Então, ele tem uma função principal. 1128 00:46:38,410 --> 00:46:41,490 Eu tenho-codificado os números apenas para agora, porque eu sei o que estou fazendo. 1129 00:46:41,490 --> 00:46:42,950 Eu sei o que eu quero ver aqui. 1130 00:46:42,950 --> 00:46:45,220 E eu tenho inicializado I a 65. 1131 00:46:45,220 --> 00:46:48,490 E eu estou contando-se através de 26 cartas total. 1132 00:46:48,490 --> 00:46:52,990 E o que é que eu vou imprimir uma linha de cada vez 1133 00:46:52,990 --> 00:46:54,930 se você pode interpretar esta linha destacada? 1134 00:46:54,930 --> 00:46:55,970 O que será impresso? 1135 00:46:55,970 --> 00:46:56,797 Sim. 1136 00:46:56,797 --> 00:46:57,264 >> AUDIÊNCIA: Você vai para imprimir a carta que 1137 00:46:57,264 --> 00:46:59,805 corresponde ao mapa da valor letra e valor inteiro? 1138 00:46:59,805 --> 00:47:01,199 1139 00:47:01,199 --> 00:47:01,990 COLUNA 1: Exatamente. 1140 00:47:01,990 --> 00:47:04,740 Vou imprimir a letra correspondente ao valor inteiro, 1141 00:47:04,740 --> 00:47:06,131 e vice-versa, como se segue. 1142 00:47:06,131 --> 00:47:08,880 Bem, este, alguém disse anteriormente, é apenas um espaço reservado para um char. 1143 00:47:08,880 --> 00:47:09,490 Ainda é. 1144 00:47:09,490 --> 00:47:12,280 Isto, é claro, é um marcador de posição para um não int-- uma nova linha. 1145 00:47:12,280 --> 00:47:18,140 E agora observe, meu primeiro valor que Estou ligando para esse espaço reservado 1146 00:47:18,140 --> 00:47:22,320 não é apenas I. estou dizendo, em parênteses, char I, 1147 00:47:22,320 --> 00:47:26,700 que o caractere é parenthetical dizendo o compilador, tratar I 1148 00:47:26,700 --> 00:47:28,490 não como o que é, o que é um número. 1149 00:47:28,490 --> 00:47:30,490 Tratá-lo como um personagem real. 1150 00:47:30,490 --> 00:47:34,490 Considerando que o segundo valor que eu estou conectando em-- I-- deve ser apenas um número. 1151 00:47:34,490 --> 00:47:38,140 >> Então, se eu compilar este program-- por isso este é fazer ASCII 0, 1152 00:47:38,140 --> 00:47:41,720 dot ASCII barra 0-- acabei de receber esta pequena carta acessível que 1153 00:47:41,720 --> 00:47:44,950 mostra-me todo o possível mapeamentos sem ter que pensar que 1154 00:47:44,950 --> 00:47:46,450 ou através de descobrir isso por conta própria. 1155 00:47:46,450 --> 00:47:48,783 E eu também estou imprimindo, observe as letras minúsculas, 1156 00:47:48,783 --> 00:47:51,410 porque algumas linhas depois, eu também imprimir este mapeamento 1157 00:47:51,410 --> 00:47:53,737 bem, que é apenas para dizer que uma vez que você entender 1158 00:47:53,737 --> 00:47:55,570 o que está acontecendo por baixo o capô, você pode 1159 00:47:55,570 --> 00:47:57,111 converter automaticamente e para trás. 1160 00:47:57,111 --> 00:48:00,160 E, de fato, se algum de vocês nunca fez isso na escola primária 1161 00:48:00,160 --> 00:48:03,490 ou ouviu falar de alguém miticamente tomar uma nota 1162 00:48:03,490 --> 00:48:05,620 e passá-la para o seu ou a amiga na sala de aula, 1163 00:48:05,620 --> 00:48:08,300 mas você mexidos o letras de A como B torna-se, 1164 00:48:08,300 --> 00:48:11,240 B e C se torna, ou algo assim mais complicado do que isso, bem, 1165 00:48:11,240 --> 00:48:13,410 como é que você vai fazer sobre implementação que como um miúdo? 1166 00:48:13,410 --> 00:48:16,340 Bem, você só tipo de saber A torna-se B, B torna-se C, 1167 00:48:16,340 --> 00:48:19,700 mas matematicamente, o que foi que o garoto está fazendo? 1168 00:48:19,700 --> 00:48:22,050 O que você estava adicionando a cada letra? 1169 00:48:22,050 --> 00:48:23,340 Efetivamente, 1. 1170 00:48:23,340 --> 00:48:27,740 >> Então, quando você mudar de A para B, que é tipo de como a mudança de 65-66, 1171 00:48:27,740 --> 00:48:29,590 que matematicamente significa apenas adicionar 1. 1172 00:48:29,590 --> 00:48:33,300 E por isso, se você fosse para implementar que pouca técnica fraudulenta 1173 00:48:33,300 --> 00:48:36,380 para seu professor no código, você pode fazer exatamente isso apenas 1174 00:48:36,380 --> 00:48:38,552 por adição de uma única letra juntos. 1175 00:48:38,552 --> 00:48:40,260 Assim, em pouco tempo, estamos vai ver como nós 1176 00:48:40,260 --> 00:48:43,300 pode tirar proveito disso para realmente disputa genuína e desembaralhar 1177 00:48:43,300 --> 00:48:43,991 informações. 1178 00:48:43,991 --> 00:48:47,240 Entretanto, sabemos que nós começamos a introdução de um par de outras bibliotecas 1179 00:48:47,240 --> 00:48:48,990 aqui-- a seqüência de um hoje. 1180 00:48:48,990 --> 00:48:51,180 E um site muito útil esperamos que você vai encontrar 1181 00:48:51,180 --> 00:48:55,010 é chamado reference.cs50.net, que o corpo docente têm juntos, 1182 00:48:55,010 --> 00:48:57,510 de modo que se você quiser olhar para cima trabalhos como strlen, 1183 00:48:57,510 --> 00:48:59,300 você pode começar a digitar o nome da função, 1184 00:48:59,300 --> 00:49:02,890 clique strlen lá, e, em seguida, uma explicação menos confortável 1185 00:49:02,890 --> 00:49:03,700 vai aparecer. 1186 00:49:03,700 --> 00:49:06,880 Ou se você quer que o oficial Explicação baseado em Linux, 1187 00:49:06,880 --> 00:49:08,945 você pode clicar mais confortável no canto superior direito, e 1188 00:49:08,945 --> 00:49:12,070 vai apresentar a mesma informação, mas em termos mais complexos. 1189 00:49:12,070 --> 00:49:15,070 Isso é um recurso útil para realmente saber tudo o que faz. 1190 00:49:15,070 --> 00:49:17,320 >> Da próxima vez que vamos Dê uma olhada Ovomaltine 1191 00:49:17,320 --> 00:49:20,070 e mais, e introduzir- para o mundo da criptografia. 1192 00:49:20,070 --> 00:49:21,930 Antes disso, vamos ver você ainda esta semana. 1193 00:49:21,930 --> 00:49:23,390 E agora, Colton Ogden. 1194 00:49:23,390 --> 00:49:26,730 Te vejo na quarta-feira. 1195 00:49:26,730 --> 00:49:30,216 >> [Música tocando] 1196 00:49:30,216 --> 00:49:33,702 >> [Música tocando] 1197 00:49:33,702 --> 00:49:38,682 1198 00:49:38,682 --> 00:49:42,200 >> COLUNA 1: O que o [BLEEP] está fazendo? 1199 00:49:42,200 --> 00:49:45,720 >> COLUNA 1: Eu estou comendo a minha sobremesa? 1200 00:49:45,720 --> 00:49:47,160 Como você comê-lo? 1201 00:49:47,160 --> 00:49:47,860 Com suas mãos? 1202 00:49:47,860 --> 00:49:54,050 1203 00:49:54,050 --> 00:49:57,940 >> [Música tocando] 1204 00:49:57,940 --> 00:50:03,453