1 00:00:00,000 --> 00:00:12,510 2 00:00:12,510 --> 00:00:13,870 >> ROB: Tudo bem. 3 00:00:13,870 --> 00:00:16,770 Bem-vindo à primeira seção. 4 00:00:16,770 --> 00:00:17,480 Estou Rob. 5 00:00:17,480 --> 00:00:18,806 >> JOSÉ: Eu sou Joseph. 6 00:00:18,806 --> 00:00:21,540 >> ROB: Então, vamos mergulhar para a direita dentro 7 00:00:21,540 --> 00:00:23,420 A primeira coisa a falar sobre é o Appliance. 8 00:00:23,420 --> 00:00:27,150 Portanto, esperamos que a maioria de vocês tem baixado já. 9 00:00:27,150 --> 00:00:37,180 Mas você pode ver as instruções em cs50.net/appliance. 10 00:00:37,180 --> 00:00:38,430 Oh Deus, agora eu sou auto-consciente. 11 00:00:38,430 --> 00:00:44,590 12 00:00:44,590 --> 00:00:45,430 Eu ainda ouvi-lo. 13 00:00:45,430 --> 00:00:47,232 >> JOSÉ: Wow, parece que é desorientado. 14 00:00:47,232 --> 00:00:52,460 >> ROB: Então, algumas pessoas têm tido problemas com ele, então não espere até 15 00:00:52,460 --> 00:00:54,940 o último minuto do problema definido para tentar resolver o aparelho e 16 00:00:54,940 --> 00:00:56,320 descobrir que ele não está funcionando. 17 00:00:56,320 --> 00:00:59,010 >> JOSÉ: E se algo não está funcionando e você precisar de ajuda, você pode ir para 18 00:00:59,010 --> 00:01:03,390 cs50.net/discussion onde nós tem um fórum onde você 19 00:01:03,390 --> 00:01:04,110 pode postar suas perguntas. 20 00:01:04,110 --> 00:01:06,655 E nós vamos chegar a eles eventualmente. 21 00:01:06,655 --> 00:01:07,490 >> ROB: Tudo bem. 22 00:01:07,490 --> 00:01:12,180 Então, isso é o que o Appliance parece. 23 00:01:12,180 --> 00:01:15,480 Mais uma vez, é apenas uma completamente separada sistema operacional rodando dentro 24 00:01:15,480 --> 00:01:19,440 qualquer sistema operativo que estão funcionando em seu laptop. 25 00:01:19,440 --> 00:01:24,450 E as principais coisas que você estar usando são gedit. 26 00:01:24,450 --> 00:01:28,050 Portanto, esperamos que este já tem tornar-se um local conhecido. 27 00:01:28,050 --> 00:01:29,470 O terminal. 28 00:01:29,470 --> 00:01:31,890 >> E você também pode executar o Chrome dentro do aparelho. 29 00:01:31,890 --> 00:01:33,860 Houve um par de pessoas que relataram internet 30 00:01:33,860 --> 00:01:35,390 não funciona no aparelho. 31 00:01:35,390 --> 00:01:38,090 E alguns deles têm apenas assumi que não é suposto ser 32 00:01:38,090 --> 00:01:39,190 internet no aparelho. 33 00:01:39,190 --> 00:01:40,750 Mas sim, lá é suposto para ser segura. 34 00:01:40,750 --> 00:01:44,000 35 00:01:44,000 --> 00:01:46,410 >> Eu vou dizer isso agora, mas isso não acontece realmente quer dizer nada. 36 00:01:46,410 --> 00:01:50,680 Se a internet não está funcionando, isto é o que você tende a precisar 37 00:01:50,680 --> 00:01:52,180 correr para corrigi-lo. 38 00:01:52,180 --> 00:01:55,602 Se você está tendo problemas de internet, não lembre-se que, apenas publicá-la em 39 00:01:55,602 --> 00:01:57,560 Discutir, e vamos dizer, executar isso. 40 00:01:57,560 --> 00:02:00,420 Mas a internet deve estar funcionando. 41 00:02:00,420 --> 00:02:06,650 >> Assim, a única outra coisa - sim, nada o resto é realmente relevante. 42 00:02:06,650 --> 00:02:08,979 Mas eu só queria salientar que - 43 00:02:08,979 --> 00:02:13,290 ver neste canto inferior direito. 44 00:02:13,290 --> 00:02:16,530 Assim, cada um de seus aparelhos deve tem um endereço de IP. 45 00:02:16,530 --> 00:02:22,350 E no final do semestre, este IP endereço se tornará mais relevante quando 46 00:02:22,350 --> 00:02:27,230 você está trabalhando na web p-set, porque você será capaz de acessar o 47 00:02:27,230 --> 00:02:32,310 site que você está trabalhando a partir de sua Chrome local usando esse endereço IP. 48 00:02:32,310 --> 00:02:35,400 >> Mas o que eu gosto de usar o endereço IP for - e você não tem que fazer isso, eu 49 00:02:35,400 --> 00:02:37,460 só quero indicá-lo - 50 00:02:37,460 --> 00:02:39,540 está aqui. 51 00:02:39,540 --> 00:02:42,910 Portanto, esta é uma janela de terminal em meu Mac, isso não é no 52 00:02:42,910 --> 00:02:44,580 Appliance de todo. 53 00:02:44,580 --> 00:02:47,190 E você pode procurar o que este comando faz. 54 00:02:47,190 --> 00:02:51,855 Mas eu estou indo diretamente para SSH ao meu Appliance. 55 00:02:51,855 --> 00:02:53,410 Eu não sei o que o IP é. 56 00:02:53,410 --> 00:02:54,300 >> JOSÉ: 168 - 57 00:02:54,300 --> 00:02:56,080 >> 168.224.1.0. 58 00:02:56,080 --> 00:02:59,950 >> ROB: Então uma vez que eu sou feito com isso, fazer logon dentro 59 00:02:59,950 --> 00:03:05,450 Agora, basicamente, este é idêntico ao de um janela de terminal dentro do meu Appliance. 60 00:03:05,450 --> 00:03:10,280 Então, eu praticamente nunca realmente funcionou de dentro do próprio aparelho. 61 00:03:10,280 --> 00:03:12,550 Eu sempre tenho que correr no fundo minimizado 62 00:03:12,550 --> 00:03:15,890 e SSHed nele. 63 00:03:15,890 --> 00:03:24,270 >> O problema com isso é que você não vai para ser capaz de utilizar facilmente gedit 64 00:03:24,270 --> 00:03:25,600 directamente a partir deste. 65 00:03:25,600 --> 00:03:31,500 Mas se você quiser ser um verdadeiro legal hackers, então você deve se acostumar a um 66 00:03:31,500 --> 00:03:34,220 linha de comando editor de texto de qualquer maneira. 67 00:03:34,220 --> 00:03:39,620 Então Vim e Emacs e Nano, todos estes diferentes alternativas. 68 00:03:39,620 --> 00:03:41,560 Nano tende a ser o mais fácil. 69 00:03:41,560 --> 00:03:45,006 E eu acho que não tem destaque de sintaxe. 70 00:03:45,006 --> 00:03:47,620 Oh, não, é totalmente faz. 71 00:03:47,620 --> 00:03:49,870 Então você pode usar Nano, porque que um é muito fácil. 72 00:03:49,870 --> 00:03:52,000 >> Você vê todos estes comandos na parte inferior. 73 00:03:52,000 --> 00:03:54,750 Este símbolo pouco de cenoura. 74 00:03:54,750 --> 00:03:57,620 Se você ainda não viu isso antes, você vai provavelmente vê-lo muito agora. 75 00:03:57,620 --> 00:04:02,350 De modo geral, significa a cenoura controle, como o inferior esquerdo do teclado 76 00:04:02,350 --> 00:04:04,130 caractere de controle. 77 00:04:04,130 --> 00:04:07,260 Então, aqui ele está me dizendo aqui - 78 00:04:07,260 --> 00:04:08,710 oh, não é cortado se eu zoom in 79 00:04:08,710 --> 00:04:11,040 Então, de controle, X é como Eu vou sair. 80 00:04:11,040 --> 00:04:14,710 E ele diz que eu posso bater Y para Sim, para a poupança, N para Não. 81 00:04:14,710 --> 00:04:17,190 Então, isso é Nano. 82 00:04:17,190 --> 00:04:22,860 >> Vim e Emacs tendem a ser ligeiramente mais complicado e desgastante. 83 00:04:22,860 --> 00:04:28,840 Mas você pode se acostumar com isso, e então você vai adorar. 84 00:04:28,840 --> 00:04:30,590 Então é isso. 85 00:04:30,590 --> 00:04:31,720 >> JOSÉ: Não há necessidade de fazer isso. 86 00:04:31,720 --> 00:04:31,840 >> ROB: Yeah. 87 00:04:31,840 --> 00:04:37,510 Você é livre para usar para o gedit restante do semestre. 88 00:04:37,510 --> 00:04:40,630 Assim, todas as perguntas relacionadas com o aparelho? 89 00:04:40,630 --> 00:04:42,820 Ou você tem alguma opinião sobre o que mais precisa ser falado sobre 90 00:04:42,820 --> 00:04:43,610 o aparelho? 91 00:04:43,610 --> 00:04:43,996 Sim. 92 00:04:43,996 --> 00:04:47,720 >> COLUNA 1: Quando você SSHed em sua coisa, foi o carmesim senha? 93 00:04:47,720 --> 00:04:48,390 >> ROB: Yeah. 94 00:04:48,390 --> 00:04:50,170 A senha para praticamente tudo no Appliance vai 95 00:04:50,170 --> 00:04:52,473 ser carmesim. 96 00:04:52,473 --> 00:04:56,517 >> COLUNA 2: Instalar como um verdadeiro IDE no aparelho, ele vai trabalhar? 97 00:04:56,517 --> 00:04:59,200 98 00:04:59,200 --> 00:05:07,290 >> ROB: Eu imagino Eclipse tem um Versão Fedora, caso em que, sim, 99 00:05:07,290 --> 00:05:08,420 você pode fazer isso. 100 00:05:08,420 --> 00:05:10,875 Provavelmente não é realmente vale a pena. 101 00:05:10,875 --> 00:05:11,742 >> COLUNA 2: OK. 102 00:05:11,742 --> 00:05:15,924 Por isso, é provavelmente mais fácil se eu queria usar o Eclipse, é só usar o nativo e 103 00:05:15,924 --> 00:05:17,646 em seguida, fazer o upload para - 104 00:05:17,646 --> 00:05:21,090 >> ROB: Oh, que também é provavelmente mais fácil. 105 00:05:21,090 --> 00:05:24,046 Mas você pode fazê-lo funcionar dentro do aparelho. 106 00:05:24,046 --> 00:05:27,740 >> JOSÉ: E para a câmera, a questão foi, você pode instalar outro 107 00:05:27,740 --> 00:05:29,490 IDE dentro do aparelho? 108 00:05:29,490 --> 00:05:31,520 >> ROB: Eclipse sendo um exemplo de uma IDE. 109 00:05:31,520 --> 00:05:34,800 110 00:05:34,800 --> 00:05:36,050 Qualquer outra dúvida aparelho? 111 00:05:36,050 --> 00:05:38,250 112 00:05:38,250 --> 00:05:38,680 Tudo bem. 113 00:05:38,680 --> 00:05:44,920 >> Então, vamos agora avançar para a linha de comando coisas relacionadas com a interface, de modo CLI. 114 00:05:44,920 --> 00:05:47,990 E mais uma vez, eu só estou indo para o trabalho em aqui, porque este é idêntico ao 115 00:05:47,990 --> 00:05:52,780 trabalhando dentro de uma janela de terminal dentro do aparelho. 116 00:05:52,780 --> 00:05:54,160 Como está essa fonte procurando? 117 00:05:54,160 --> 00:05:55,970 É grande o suficiente? 118 00:05:55,970 --> 00:05:57,000 Tudo bem. 119 00:05:57,000 --> 00:06:02,480 >> Então, há uma série de comandos que você deve ficar muito utilizado para 120 00:06:02,480 --> 00:06:04,490 ao longo do semestre. 121 00:06:04,490 --> 00:06:09,480 A grande dois para navegar são ls, lista os arquivos nesse diretório, e 122 00:06:09,480 --> 00:06:11,380 cd, assim que mude de diretório. 123 00:06:11,380 --> 00:06:18,390 Então, eu posso mudar a área de trabalho e, em seguida, um padrão muito comum é a de um cd 124 00:06:18,390 --> 00:06:22,550 diretório e imediatamente ls o que está no diretório. 125 00:06:22,550 --> 00:06:25,540 >> As pessoas também, por vezes, não percebem que Tab conclusão é uma coisa. 126 00:06:25,540 --> 00:06:28,370 Assim como cd, vh, e então eu bati Tab. 127 00:06:28,370 --> 00:06:30,790 Eu quase nunca digitar a coisa toda. 128 00:06:30,790 --> 00:06:32,920 E então se eu continuar batendo Tab novamente, ele vai automaticamente 129 00:06:32,920 --> 00:06:33,670 começar a lista para mim. 130 00:06:33,670 --> 00:06:37,000 Então eu posso cd vhosts, host local. 131 00:06:37,000 --> 00:06:39,880 E isso só vai - 132 00:06:39,880 --> 00:06:43,380 no caso de você não ter ouvido o termo antes, o diretório é apenas outra palavra 133 00:06:43,380 --> 00:06:45,170 para pasta. 134 00:06:45,170 --> 00:06:49,930 Portanto, agora se você vê - 135 00:06:49,930 --> 00:06:51,810 vamos trazer isso para o topo. 136 00:06:51,810 --> 00:06:55,380 >> Portanto, agora se você vê entre parênteses, você ver o pequeno til, barra, vhost, 137 00:06:55,380 --> 00:06:56,810 slash, host local. 138 00:06:56,810 --> 00:07:00,040 Assim, o til, que se refere para o meu diretório home. 139 00:07:00,040 --> 00:07:03,090 É um diretório que você está quando você SSH dentro 140 00:07:03,090 --> 00:07:05,660 É o diretório que você está em quando você abrir um terminal. 141 00:07:05,660 --> 00:07:08,650 É onde você começa. 142 00:07:08,650 --> 00:07:13,110 E assim eu estou dentro do meu diretório home, e eu estou dentro do vhost 143 00:07:13,110 --> 00:07:14,475 diretório dentro do meu diretório home. 144 00:07:14,475 --> 00:07:19,670 E então eu estou dentro do local, diretório hospedar dentro disso. 145 00:07:19,670 --> 00:07:23,740 >> Por isso, algumas outras coisas úteis com cd - 146 00:07:23,740 --> 00:07:29,220 ou bem, em geral, de modo dot sempre refere-se ao diretório atual. 147 00:07:29,220 --> 00:07:31,130 Cd, dot é um comando bastante inútil. 148 00:07:31,130 --> 00:07:35,150 Mas isso está mudando para o diretório atual. 149 00:07:35,150 --> 00:07:38,230 A mais útil em termos de cd é ponto, ponto, que é 150 00:07:38,230 --> 00:07:40,220 basta ir até um diretório. 151 00:07:40,220 --> 00:07:43,360 >> E note que estes - 152 00:07:43,360 --> 00:07:48,610 Eu quero dizer aliases, mas estes símbolos, ponto e ponto, ponto, os trabalhos 153 00:07:48,610 --> 00:07:51,740 para praticamente qualquer comando que você está vai estar pensando em correr. 154 00:07:51,740 --> 00:07:55,370 Assim como cd é provavelmente o lugar onde você vai ser utilizando a maior parte, mas estes não são 155 00:07:55,370 --> 00:07:56,780 coisas que só cd compreende. 156 00:07:56,780 --> 00:07:59,980 É praticamente algo que o seu todo linha de comando compreende. 157 00:07:59,980 --> 00:08:01,932 Um monte de programas entender ponto e ponto, ponto. 158 00:08:01,932 --> 00:08:04,830 159 00:08:04,830 --> 00:08:09,090 >> Assim, os outros úteis - cd, Dash. 160 00:08:09,090 --> 00:08:13,460 Então isso vai me trazer para a último diretório que eu estava dentro 161 00:08:13,460 --> 00:08:15,980 Então, às vezes eu vou fazer algo como: oh, eu estou trabalhando aqui. 162 00:08:15,980 --> 00:08:21,110 E eu vejo algum erro com alguma coisa, e Eu vou investigá-lo, indo para 163 00:08:21,110 --> 00:08:24,020 algum diretório aleatório em algum lugar. 164 00:08:24,020 --> 00:08:25,260 E eu não sei se ele vai deixe-me lá dentro. 165 00:08:25,260 --> 00:08:25,720 Ele o fará. 166 00:08:25,720 --> 00:08:27,615 Então eu faço o que eu quiser neste diretório. 167 00:08:27,615 --> 00:08:28,950 Blá, blá, blá, blá, blá. 168 00:08:28,950 --> 00:08:31,770 E eu estava tipo, tudo bem, eu quero voltar para onde eu estava. 169 00:08:31,770 --> 00:08:34,490 cd, traço, e isso me traz de volta. 170 00:08:34,490 --> 00:08:39,970 >> Então, eu vou jogar um monte destes em você hoje. 171 00:08:39,970 --> 00:08:43,730 Eu não espero que você memorize todos eles. 172 00:08:43,730 --> 00:08:46,170 É uma espécie de apenas saber que eles existem. 173 00:08:46,170 --> 00:08:48,690 E mais tarde, quando você está como, hmm, eu quero voltar para o 174 00:08:48,690 --> 00:08:51,870 diretório que eu estava em, oh, espere, algo parecido com o que existe. 175 00:08:51,870 --> 00:08:53,980 Você não tem que basta digitar em todo o diretório novamente. 176 00:08:53,980 --> 00:08:56,090 >> JOSÉ: E, eventualmente, você será apenas usá-los uma e outra vez, e 177 00:08:56,090 --> 00:08:57,830 ele vai se tornar a memória muscular. 178 00:08:57,830 --> 00:09:00,090 >> ROB: Yeah. 179 00:09:00,090 --> 00:09:02,930 Então, como eu disse antes, que til é o seu diretório home. 180 00:09:02,930 --> 00:09:04,820 Então eu posso cd, til. 181 00:09:04,820 --> 00:09:07,280 Mas não tem sequer a fazer isso se eu - 182 00:09:07,280 --> 00:09:09,760 Eu vou voltar para o diretório assim não é um exemplo inútil. 183 00:09:09,760 --> 00:09:14,560 Mas se eu apenas fazer cd, que também é o mesmo que, ir para o meu diretório home. 184 00:09:14,560 --> 00:09:18,380 185 00:09:18,380 --> 00:09:19,880 Eu faço Comando, K. 186 00:09:19,880 --> 00:09:24,015 >> JOSÉ: Você também pode digitar clara, a palavra, e ele deve limpá-la. 187 00:09:24,015 --> 00:09:28,650 >> ROB: E eu acho que também de controle, L também o faz. 188 00:09:28,650 --> 00:09:29,690 Então muitas maneiras diferentes. 189 00:09:29,690 --> 00:09:34,070 Eu acho que há algumas diferenças onde clara e Controle, L será apenas 190 00:09:34,070 --> 00:09:37,280 realmente empurrá-lo para a parte superior e Eu ainda pode rolar para trás. 191 00:09:37,280 --> 00:09:40,580 Command, K literalmente destrói tudo, e você 192 00:09:40,580 --> 00:09:42,960 não pode rolar de volta. 193 00:09:42,960 --> 00:09:45,530 No mínimo, isso é como ele funciona em iTerm2. 194 00:09:45,530 --> 00:09:48,690 Eu não sei como as outras coisas - 195 00:09:48,690 --> 00:09:49,360 oh. 196 00:09:49,360 --> 00:09:55,450 >> Com sshing, por isso, se você estiver no Windows, você vai ter que baixar PuTTY 197 00:09:55,450 --> 00:10:02,360 a fim de SSH desde o Windows não faz tem como uma ferramenta interna SSH. 198 00:10:02,360 --> 00:10:06,150 De Macs, você pode apenas SSH diretamente a partir de uma janela de terminal. 199 00:10:06,150 --> 00:10:08,755 200 00:10:08,755 --> 00:10:09,690 OK. 201 00:10:09,690 --> 00:10:11,840 Dúvidas? 202 00:10:11,840 --> 00:10:19,260 >> Com ls, assim que algo que se acostumar com com a maioria desses comandos é - 203 00:10:19,260 --> 00:10:20,060 bem, eu vou fazer um. 204 00:10:20,060 --> 00:10:21,310 Ls, traço, l. 205 00:10:21,310 --> 00:10:26,330 Então, traço, l é o que vamos para chamar um sinalizador para ls. 206 00:10:26,330 --> 00:10:30,770 E muitos desses comandos têm bandeiras que você pode passar para eles. 207 00:10:30,770 --> 00:10:35,020 Portanto, neste caso, traço, l é uma bandeira que diz-lhe para me dar um completo 208 00:10:35,020 --> 00:10:37,850 listagem de toda a informação desses arquivos. 209 00:10:37,850 --> 00:10:44,790 >> Assim, vemos aqui que o desktop foi modificado em 30 de julho às 12:54. 210 00:10:44,790 --> 00:10:47,160 De downloads foi modificado em 6 de setembro. 211 00:10:47,160 --> 00:10:52,350 Estes são o tamanho actual e bytes desses diretórios. 212 00:10:52,350 --> 00:10:54,412 Você não tem que entender tudo isto. 213 00:10:54,412 --> 00:11:00,380 >> Este material à esquerda, estas drwx de, que se tornará muito mais relevante 214 00:11:00,380 --> 00:11:02,290 mais tarde, quando você tem que lidar com - 215 00:11:02,290 --> 00:11:05,900 que tem a ver com o que tem permissões olhar para esses arquivos. 216 00:11:05,900 --> 00:11:09,880 E por isso, se você não foi o único usuário em este computador, você seria capaz de 217 00:11:09,880 --> 00:11:13,345 digamos, OK, eu deveria ser o único permissão para olhar para este arquivo ou eu sou 218 00:11:13,345 --> 00:11:14,870 vai permitir que todos de olhar para este arquivo. 219 00:11:14,870 --> 00:11:17,710 Então, alguém no meu computador pode olhar para esse arquivo. 220 00:11:17,710 --> 00:11:22,190 221 00:11:22,190 --> 00:11:25,600 Eu nem sei o que isso - o que isso faz? 222 00:11:25,600 --> 00:11:26,840 >> JOSÉ: Eu não tenho certeza, na verdade. 223 00:11:26,840 --> 00:11:27,705 >> ROB: Não faço ideia. 224 00:11:27,705 --> 00:11:30,530 >> JOSÉ: Mas se você não sabe, não existe um comando útil que você pode usar 225 00:11:30,530 --> 00:11:31,680 para dizer o que significa a saída. 226 00:11:31,680 --> 00:11:33,780 E se você digitar no homem antes do comando - 227 00:11:33,780 --> 00:11:35,000 assim M-A-N. ROB: Homem. 228 00:11:35,000 --> 00:11:37,690 Assim, o homem é mais um que é muito útil. 229 00:11:37,690 --> 00:11:39,540 E o homem, ls. 230 00:11:39,540 --> 00:11:47,320 Assim, as páginas do manual, eles têm tanto comandos que você vai estar usando 231 00:11:47,320 --> 00:11:50,330 na linha de comando, e eles também têm funções que serão relevantes 232 00:11:50,330 --> 00:11:52,530 com C. Assim, pode o homem - 233 00:11:52,530 --> 00:11:53,720 e eu ignorei 3. 234 00:11:53,720 --> 00:11:57,410 Mas man 3 printf vai trazer a versão C do printf. 235 00:11:57,410 --> 00:12:01,030 Mas se eu só faço o homem printf, este é vai abrir o comando printf 236 00:12:01,030 --> 00:12:03,540 que acontece na linha de comando. 237 00:12:03,540 --> 00:12:05,730 >> Assim, o homem, sl. 238 00:12:05,730 --> 00:12:09,030 As páginas de manual pode ser muito avassaladora. 239 00:12:09,030 --> 00:12:12,770 Aqui, porém, você vai ver este anúncio de todas estas bandeiras que ls 240 00:12:12,770 --> 00:12:14,300 entende. 241 00:12:14,300 --> 00:12:17,876 Então, se formos a correr, l, e - 242 00:12:17,876 --> 00:12:19,300 Eu só vou jogar isso em você. 243 00:12:19,300 --> 00:12:23,050 Mas, a fim de pesquisar, você quer ao primeiro hit a questão 244 00:12:23,050 --> 00:12:24,780 botão barra marca ou. 245 00:12:24,780 --> 00:12:26,040 Então Slash. 246 00:12:26,040 --> 00:12:29,000 >> E então eu posso pesquisar para o que eu quero. 247 00:12:29,000 --> 00:12:33,780 Então eu vou cortar para traço, l. 248 00:12:33,780 --> 00:12:35,110 E lá estava ele. 249 00:12:35,110 --> 00:12:37,450 Portanto, use um formato de listagem longa. 250 00:12:37,450 --> 00:12:40,060 Isso não me ajudar a descobrir o que que determinada coluna quis dizer, mas eu 251 00:12:40,060 --> 00:12:44,480 assumir em algum lugar aqui isso explicaria isso. 252 00:12:44,480 --> 00:12:48,740 Portanto, use as páginas man para qualquer comando que você não entende de imediato. 253 00:12:48,740 --> 00:12:51,080 >> Tenho certeza que você pode até mesmo homem, o homem. 254 00:12:51,080 --> 00:12:53,070 Uma interface para o on-line manuais de referência. 255 00:12:53,070 --> 00:12:57,700 256 00:12:57,700 --> 00:13:03,570 Ah, um último um que é talvez um pouco ls relevante é, traço, um. 257 00:13:03,570 --> 00:13:08,490 Então, observe se eu apenas fazer ls, Recebo estes cinco arquivos. 258 00:13:08,490 --> 00:13:11,480 Se eu fizer ls, traço, um, eu obter um lote mais arquivos. 259 00:13:11,480 --> 00:13:15,350 Assim, a coisa em comum entre todos estes novos arquivos é o ponto de antemão. 260 00:13:15,350 --> 00:13:21,220 >> Assim, a convenção é que um arquivo que começa com um ponto está escondido. 261 00:13:21,220 --> 00:13:25,300 Então você não quer ver esse arquivo, você não quero ter que mexer com 262 00:13:25,300 --> 00:13:26,750 sua listagem do diretório. 263 00:13:26,750 --> 00:13:30,020 É só quando você explicitamente perguntar, tudo bem, ls, traço, um, me mostrar. 264 00:13:30,020 --> 00:13:32,830 O um significa todos os arquivos, incluindo as ocultas. 265 00:13:32,830 --> 00:13:37,260 266 00:13:37,260 --> 00:13:39,270 Assim, alguns outros comandos. 267 00:13:39,270 --> 00:13:41,323 Oh, questões em que ponto? 268 00:13:41,323 --> 00:13:41,746 Sim. 269 00:13:41,746 --> 00:13:45,914 >> COLUNA 3: Quando você faz ls, um, qual é o ponto, ponto? 270 00:13:45,914 --> 00:13:46,870 >> ROB: Ah. 271 00:13:46,870 --> 00:13:48,780 Então é isso que eu estava falando. 272 00:13:48,780 --> 00:13:50,890 É a mesma coisa que Eu posso gostar de cd, ponto, ponto. 273 00:13:50,890 --> 00:13:56,790 Então, tecnicamente, ponto e ponto, ponto são arquivos que existem em cada 274 00:13:56,790 --> 00:14:03,620 diretório onde o arquivo ponto refere-se para o diretório atual. 275 00:14:03,620 --> 00:14:06,930 Então, se eu cd, ponto, eu só vou para ficar no diretório. 276 00:14:06,930 --> 00:14:10,870 E ponto, ponto sempre se refere ao anterior diretório um nível acima. 277 00:14:10,870 --> 00:14:18,200 Então, se eu entrar em toras e ls, traço, al, Vou ver ponto, ponto. cd a ponto, ponto 278 00:14:18,200 --> 00:14:20,390 me leva para o diretório anterior. 279 00:14:20,390 --> 00:14:24,530 280 00:14:24,530 --> 00:14:25,780 É. 281 00:14:25,780 --> 00:14:27,160 282 00:14:27,160 --> 00:14:28,110 OK. 283 00:14:28,110 --> 00:14:33,070 >> Assim, uma outra muito importante comando é rm. 284 00:14:33,070 --> 00:14:35,650 Então é isso que nós vamos usar para remover. 285 00:14:35,650 --> 00:14:38,100 E deixe-me realmente fazer outra primeiro comando. 286 00:14:38,100 --> 00:14:39,610 Então mkdir. 287 00:14:39,610 --> 00:14:42,770 Mkdir é como você pode criar diretórios. 288 00:14:42,770 --> 00:14:47,530 E eu vou criar um diretório temporário e ir para o diretório temporário. 289 00:14:47,530 --> 00:14:49,590 E, como esperado, é vazio. 290 00:14:49,590 --> 00:14:53,680 Mas se ls I, traço, um, eu ainda tenho dot e ponto, ponto, porque se refere a ponto 291 00:14:53,680 --> 00:14:54,480 o diretório atual. 292 00:14:54,480 --> 00:14:56,170 E ponto, refere-se ao ponto diretório anterior. 293 00:14:56,170 --> 00:14:58,700 E aqueles sempre vai existir, não importa o diretório que você está dentro 294 00:14:58,700 --> 00:15:01,910 295 00:15:01,910 --> 00:15:09,010 >> E este é um completamente desnecessário comando, mas toque. 296 00:15:09,010 --> 00:15:11,880 Estou apenas usando-o, porque é uma maneira fácil de criar arquivos. 297 00:15:11,880 --> 00:15:16,180 Então tocar um, toque em b, toque em c é apenas vai criar três arquivos chamados um, 298 00:15:16,180 --> 00:15:17,845 b e c que estão completamente vazias. 299 00:15:17,845 --> 00:15:20,450 300 00:15:20,450 --> 00:15:24,980 Assim, o ponto de me criar os do primeiro lugar é apenas para que rm é 301 00:15:24,980 --> 00:15:26,250 como podemos removê-los. 302 00:15:26,250 --> 00:15:27,850 Então, rm, a. 303 00:15:27,850 --> 00:15:30,960 Vai me perguntar, remova regular de um arquivo vazio? 304 00:15:30,960 --> 00:15:33,170 E então eu vou dizer que sim. 305 00:15:33,170 --> 00:15:39,090 >> Então, se eu tenho certeza que eu quero apagar esse arquivo sem ter que ser 306 00:15:39,090 --> 00:15:44,500 solicitado, remova arquivo vazio regular?, em seguida, rm, traço, f vai ser o 307 00:15:44,500 --> 00:15:48,230 bandeira que diz, sem forçar a remoção até me alertando, oh, é você 308 00:15:48,230 --> 00:15:49,710 certeza que deseja excluir o arquivo? 309 00:15:49,710 --> 00:15:50,810 Sim, eu tenho certeza. 310 00:15:50,810 --> 00:15:56,050 Então, rm, traço, fb será apenas fazê-lo sem pedir. 311 00:15:56,050 --> 00:15:57,950 >> Então, vamos fazer mais alguns diretórios. 312 00:15:57,950 --> 00:16:03,670 mkdir, tmp2, cd, tmp2, tocar um, toque em b. 313 00:16:03,670 --> 00:16:04,300 OK. 314 00:16:04,300 --> 00:16:08,180 Então agora eu quero remover tmp2 como um diretório. 315 00:16:08,180 --> 00:16:10,316 Tmp2 Então rm. 316 00:16:10,316 --> 00:16:12,920 Você não pode remover tmp2, é um diretório. 317 00:16:12,920 --> 00:16:21,370 Portanto, a questão aqui é que rm não trabalhar imediatamente em diretórios. 318 00:16:21,370 --> 00:16:26,530 É só significou para arquivos como arquivos não-diretório. 319 00:16:26,530 --> 00:16:30,800 >> E assim, o que podemos fazer aqui é rm, traço, r. 320 00:16:30,800 --> 00:16:35,160 Isso significa de forma recursiva, o que pode não significa nada para você ainda. 321 00:16:35,160 --> 00:16:38,280 Mas quando você começa a recursão, isso vai significar mais. 322 00:16:38,280 --> 00:16:43,540 Então, rm, traço, r, tmp2 vai recursivamente ir para o diretório. 323 00:16:43,540 --> 00:16:45,540 Então descer diretório tmp2? 324 00:16:45,540 --> 00:16:47,330 Sim, vamos a isso. 325 00:16:47,330 --> 00:16:49,360 Queremos remover tmp2 / a? 326 00:16:49,360 --> 00:16:49,745 Sim. 327 00:16:49,745 --> 00:16:51,830 Queremos remover tmp2 / b? 328 00:16:51,830 --> 00:16:52,840 Sim. 329 00:16:52,840 --> 00:16:55,170 Agora queremos remover o tmp2 diretório? 330 00:16:55,170 --> 00:16:56,040 Sim. 331 00:16:56,040 --> 00:16:58,410 E agora o diretório e tudo dentro 332 00:16:58,410 --> 00:16:59,660 de que tenha sido removida. 333 00:16:59,660 --> 00:17:02,850 334 00:17:02,850 --> 00:17:07,250 >> Não é tecnicamente um comando rmdir que você pode usar para remover 335 00:17:07,250 --> 00:17:11,670 diretórios, mas ele só funciona em diretórios vazios de qualquer maneira. 336 00:17:11,670 --> 00:17:14,109 E ver que, vamos apenas fazer mkdir, tmp2 novamente. 337 00:17:14,109 --> 00:17:15,940 Tmp2, toque a. 338 00:17:15,940 --> 00:17:16,800 OK. 339 00:17:16,800 --> 00:17:22,770 Então, se eu tentar remover dirtmp2, vai dizer, o diretório não vazio. 340 00:17:22,770 --> 00:17:29,540 Então, eu praticamente nunca usar o remove comando dir qualquer maneira, porque rm, traço, 341 00:17:29,540 --> 00:17:35,140 r funcionará em diretórios vazios e diretórios não vazios. 342 00:17:35,140 --> 00:17:37,760 >> E também, se eu não quero ter que passar por todo esse processo de 343 00:17:37,760 --> 00:17:40,720 descendo para o diretório e remoção de cada arquivo individual, rm, 344 00:17:40,720 --> 00:17:44,190 traço, rf, tmp2. 345 00:17:44,190 --> 00:17:45,670 E agora ele se foi. 346 00:17:45,670 --> 00:17:51,220 >> Algo que ter cuidado é sobre rm, traço, rf. 347 00:17:51,220 --> 00:17:53,660 E isso me assusta até mesmo escrevê-lo, porque se eu acidentalmente 348 00:17:53,660 --> 00:17:55,090 pressione Enter ou algo assim. 349 00:17:55,090 --> 00:18:02,735 Então, rm, traço, rf, til seria, sem me avisar, o f não solicita 350 00:18:02,735 --> 00:18:05,670 mim, ele irá remover automaticamente meu diretório home inteira e 351 00:18:05,670 --> 00:18:06,780 tudo na mesma. 352 00:18:06,780 --> 00:18:11,460 Assim, você pode pensar que é uma coisa estúpida de se fazer. 353 00:18:11,460 --> 00:18:12,830 E bem, é. 354 00:18:12,830 --> 00:18:18,600 >> Mas isso pode acontecer muito facilmente por acidente se, por exemplo, eu queria remover 355 00:18:18,600 --> 00:18:21,640 minha barra, diretório vhost. 356 00:18:21,640 --> 00:18:26,610 E só na digitação rápida, Eu acidentalmente fazer isso. 357 00:18:26,610 --> 00:18:31,880 Isso irá remover de forma recursiva tanto a minha diretório eo diretório vhost 358 00:18:31,880 --> 00:18:35,450 neste diretório específico que apenas passa a não existir agora. 359 00:18:35,450 --> 00:18:39,520 Mas isso ainda seria remover meu diretório home inteira. 360 00:18:39,520 --> 00:18:43,090 Pelo menos por não ter uma f, ele iria me pedir em primeiro lugar. 361 00:18:43,090 --> 00:18:45,670 E eu seria como, oh, não, eu Não quero fazer isso. 362 00:18:45,670 --> 00:18:50,570 Mas as pessoas, slash, incluindo me tendem a entrar no 363 00:18:50,570 --> 00:18:53,090 hábito de sempre rf-ing. 364 00:18:53,090 --> 00:18:58,713 Mesmo os arquivos regulares que eu posso apenas rm, c, que tendem a apenas rm, traço, rf, c. 365 00:18:58,713 --> 00:19:01,330 Só tome cuidado quando você está rf-ing. 366 00:19:01,330 --> 00:19:03,160 >> COLUNA 4: O que fazer C? 367 00:19:03,160 --> 00:19:11,570 >> ROB: C é que eu estou falando sobre esse arquivo C neste diretório, que rm, c. 368 00:19:11,570 --> 00:19:15,730 >> JOSÉ: E mais perigosamente, se você usar uma estrela, refere-se a tudo em 369 00:19:15,730 --> 00:19:16,450 o diretório. 370 00:19:16,450 --> 00:19:20,040 Então o que eu geralmente tendem a fazer é que eu vou entrar em um diretório e eu quero 371 00:19:20,040 --> 00:19:21,510 remover todos os arquivos lá dentro. 372 00:19:21,510 --> 00:19:23,640 Então, rm, traço, rf, estrela. 373 00:19:23,640 --> 00:19:25,700 >> ROB: Yeah. 374 00:19:25,700 --> 00:19:26,780 Rm, traço, rf, estrela. 375 00:19:26,780 --> 00:19:29,530 >> JOSÉ: E se você não tiver cuidado o que você está no diretório - 376 00:19:29,530 --> 00:19:33,340 Eu não estava em temp, mas eu estava acidentalmente no meu diretório home, 377 00:19:33,340 --> 00:19:35,450 então eu vou remover tudo no meu diretório home. 378 00:19:35,450 --> 00:19:39,095 E eu realmente fiz isso antes, e Eu acho que você já fez isso antes ou 379 00:19:39,095 --> 00:19:40,640 Jay fez isso antes. 380 00:19:40,640 --> 00:19:42,480 >> ROB: Eu removi acidentalmente - 381 00:19:42,480 --> 00:19:44,480 assim ignorar esse comando um pouco. 382 00:19:44,480 --> 00:19:45,800 >> JOSÉ: Não é divertido. 383 00:19:45,800 --> 00:19:52,650 >> ROB: Então, no diretório bin barra é um monte de arquivos binários onde vai 384 00:19:52,650 --> 00:19:54,840 ser os familiares como bumbum. 385 00:19:54,840 --> 00:20:00,740 Bem, bumbum e, basicamente, todos estes as coisas que eu estou rodando ao comando 386 00:20:00,740 --> 00:20:02,060 linha estão neste diretório bin barra. 387 00:20:02,060 --> 00:20:03,090 >> JOSÉ: Como ls está aqui. 388 00:20:03,090 --> 00:20:06,285 >> ROB: Então dot, slash, ls seria listar neste diretório. 389 00:20:06,285 --> 00:20:08,120 >> JOSÉ: Rm também neste diretório. 390 00:20:08,120 --> 00:20:12,770 >> ROB: Eu acidentalmente rm, rf-ed bin, que removeu qualquer comando que pude 391 00:20:12,770 --> 00:20:14,380 possivelmente querer. 392 00:20:14,380 --> 00:20:18,085 Que, em seguida, eu só reinstalar um novo Appliance naquele ponto. 393 00:20:18,085 --> 00:20:20,170 >> JOSÉ: Então, muito cuidado quando você usar este comando. 394 00:20:20,170 --> 00:20:21,120 >> AUDIÊNCIA: [inaudível]? 395 00:20:21,120 --> 00:20:22,640 >> ROB: sim. 396 00:20:22,640 --> 00:20:24,135 Isso também é um mau hábito de entrar. 397 00:20:24,135 --> 00:20:27,920 398 00:20:27,920 --> 00:20:30,170 Se você notar, eu sou agora - 399 00:20:30,170 --> 00:20:33,580 bem, você não pode notar, mas minha zoom-in talvez possa. 400 00:20:33,580 --> 00:20:35,360 Então, eu estou agora root @ aparelho. 401 00:20:35,360 --> 00:20:39,790 Então jharvard é o usuário que queremos você sempre estar usando. 402 00:20:39,790 --> 00:20:43,820 Root é o usuário que tem permissão para não fazer absolutamente nada. 403 00:20:43,820 --> 00:20:50,260 >> Então, observe quando estou jharvard, se eu tentar cd - 404 00:20:50,260 --> 00:20:52,461 o que é um diretório que? 405 00:20:52,461 --> 00:20:53,980 Oh, a raiz é um bom exemplo. 406 00:20:53,980 --> 00:20:54,950 Então cd, raiz. 407 00:20:54,950 --> 00:20:56,030 Permissão negada. 408 00:20:56,030 --> 00:21:00,060 Porque se olharmos para este anúncio - 409 00:21:00,060 --> 00:21:02,410 e, novamente, você não tem que inteiramente entender isso. 410 00:21:02,410 --> 00:21:09,210 Mas esses três traços estão dizendo que não deixe qualquer outro 411 00:21:09,210 --> 00:21:11,120 usuário para este diretório. 412 00:21:11,120 --> 00:21:14,540 E o diretório acontece a ser de propriedade do usuário root. 413 00:21:14,540 --> 00:21:20,310 >> Assim, o fato de que eu sou e não jharvard aquele que não é raiz é permitido em 414 00:21:20,310 --> 00:21:23,490 Neste diretório, isso significa que eu sou vai ficar permissão negada quando eu 415 00:21:23,490 --> 00:21:25,160 tentar cd nele. 416 00:21:25,160 --> 00:21:31,370 Então, quando eu sou raiz, eu tenho permissão para fazer absolutamente qualquer coisa, inclusive 417 00:21:31,370 --> 00:21:34,660 apagar arquivos essenciais para o aparelho e 418 00:21:34,660 --> 00:21:36,640 destruir a coisa toda. 419 00:21:36,640 --> 00:21:41,240 >> Portanto, é um mau hábito de entrar apenas vagando ao redor de sua 420 00:21:41,240 --> 00:21:43,650 sistema operacional como root. 421 00:21:43,650 --> 00:21:46,520 Eu faço isso de qualquer maneira. 422 00:21:46,520 --> 00:21:48,710 Dúvidas? 423 00:21:48,710 --> 00:21:52,230 E eu vou sair da raiz, ficar como jharvard. 424 00:21:52,230 --> 00:21:54,510 OK. 425 00:21:54,510 --> 00:21:55,820 >> Comandos mais relevantes. 426 00:21:55,820 --> 00:22:03,975 Então, voltando ao nosso temp, o mv comando significa movimento. 427 00:22:03,975 --> 00:22:05,450 Você pode mover a. 428 00:22:05,450 --> 00:22:07,610 Agora queremos chamá-lo b, então agora ele é chamado b. 429 00:22:07,610 --> 00:22:10,650 Ou talvez nós deseja mover b-se um diretório. 430 00:22:10,650 --> 00:22:12,730 Então, agora vazio deste diretório. 431 00:22:12,730 --> 00:22:15,410 Eu vou voltar para o meu diretório home, e vemos que b está aqui, porque o 432 00:22:15,410 --> 00:22:19,230 diretório home foi um diretório a partir o diretório que b estava dentro 433 00:22:19,230 --> 00:22:24,710 434 00:22:24,710 --> 00:22:26,580 >> Há também cp. 435 00:22:26,580 --> 00:22:33,210 Então cp é copiar seção super, ponto, o texto. 436 00:22:33,210 --> 00:22:35,750 Posso chamá-lo é, ponto, texto. 437 00:22:35,750 --> 00:22:39,780 Agora temos dois super-seção, ponto, texto, e s, de ponto, o texto. 438 00:22:39,780 --> 00:22:41,340 Isso também funciona em diretórios. 439 00:22:41,340 --> 00:22:44,040 440 00:22:44,040 --> 00:22:46,560 Eu RF-ed um único arquivo. 441 00:22:46,560 --> 00:22:48,200 Assim cp - 442 00:22:48,200 --> 00:22:51,710 bem, primeiro vamos tentar cp, tmp, tmp2. 443 00:22:51,710 --> 00:22:53,220 Assim, omitindo diretório tmp. 444 00:22:53,220 --> 00:22:57,440 Assim, semelhante ao rm, o comportamento padrão é não trabalhar em diretórios. 445 00:22:57,440 --> 00:23:01,570 >> E, novamente, semelhante ao rm, o padrão comportamento - bem, fazê-la funcionar 446 00:23:01,570 --> 00:23:04,230 com diretórios é um, traço-r de distância. 447 00:23:04,230 --> 00:23:09,240 Então copiar recursivamente a temperatura diretório no tmp2. 448 00:23:09,240 --> 00:23:13,700 E agora temos tanto tmp e tmp2, e que não é tão útil desde tmp 449 00:23:13,700 --> 00:23:16,814 estava vazio, em primeiro lugar. 450 00:23:16,814 --> 00:23:18,660 Tmp2. 451 00:23:18,660 --> 00:23:22,680 >> Agora vamos copiar tmp em tmp2. 452 00:23:22,680 --> 00:23:27,900 E vemos que tmp2 também tem o arquivo um, porque o diretório e 453 00:23:27,900 --> 00:23:32,220 tudo dentro do que diretório foi copiado. 454 00:23:32,220 --> 00:23:36,000 E isso pode ser um pouco útil se, digamos que você está trabalhando 455 00:23:36,000 --> 00:23:38,860 em um conjunto de problemas - 456 00:23:38,860 --> 00:23:41,320 ou na verdade, conjuntos de problemas posteriores são ainda mais importante, porque não há 457 00:23:41,320 --> 00:23:43,660 Será um grupo inteiro de arquivos e coisas. 458 00:23:43,660 --> 00:23:47,010 >> Mas você só quer, por uma fração de segundo, você fica tipo, tudo bem, eu sou 459 00:23:47,010 --> 00:23:50,210 vamos tentar algo diferente. 460 00:23:50,210 --> 00:23:57,860 Deixe-me apenas copiar toda a minha pset1 diretório de backup em pset1 de modo que se 461 00:23:57,860 --> 00:24:01,490 Eu acabo estragar as coisas, eu posso voltar para o meu diretório de backup. 462 00:24:01,490 --> 00:24:07,340 Existem maneiras mais adequadas de versionamento fazer backup de seu código, mas 463 00:24:07,340 --> 00:24:10,610 esta é sempre uma maneira rápida de fazer apenas se você tem uma cópia de algo 464 00:24:10,610 --> 00:24:11,860 que você está prestes a modificar. 465 00:24:11,860 --> 00:24:16,974 466 00:24:16,974 --> 00:24:27,090 >> Então eco também é um comando único que tipo de sillily só vai imprimir na 467 00:24:27,090 --> 00:24:31,540 linha de comando exatamente o que você queria fazer eco. 468 00:24:31,540 --> 00:24:32,680 Assim ecoam oi. 469 00:24:32,680 --> 00:24:35,420 Nós vamos apenas imprimir oi. 470 00:24:35,420 --> 00:24:38,030 Eco Olá mundo. 471 00:24:38,030 --> 00:24:39,800 Vamos imprimir Olá mundo. 472 00:24:39,800 --> 00:24:44,350 Isso vem em uso quando você começar a combinar comandos. 473 00:24:44,350 --> 00:24:48,300 >> E mais uma vez, não esperam que você inteiramente entender isso ainda, mas é 474 00:24:48,300 --> 00:24:49,910 algo a ver. 475 00:24:49,910 --> 00:24:52,470 E então, se você está pesquisando para exemplos ou você percebe que você quer fazer 476 00:24:52,470 --> 00:24:55,030 algo, ele pode ser útil. 477 00:24:55,030 --> 00:24:59,020 Então, vamos, como exemplo, ls assim, traço, l. 478 00:24:59,020 --> 00:25:01,160 Então, aqui eu vejo a saída de ls, traço, l. 479 00:25:01,160 --> 00:25:06,560 E eu digo: OK, eu quero armazenar isso em um arquivo. 480 00:25:06,560 --> 00:25:11,620 Tudo isso de saída aqui, eu quero para colocar em um arquivo separado. 481 00:25:11,620 --> 00:25:16,080 >> Então este pequeno símbolo maior que é o que vamos chamar. 482 00:25:16,080 --> 00:25:18,570 Estamos redirecionando o saída para um arquivo. 483 00:25:18,570 --> 00:25:21,680 Vamos chamar o arquivo blá, porque isso é o que eu tendem a chamá-lo sempre. 484 00:25:21,680 --> 00:25:26,430 Então, agora, vemos que temos um arquivar blá aqui. 485 00:25:26,430 --> 00:25:30,270 E se eu abri-lo, eu vou vê-lo é exactamente o resultado do comando 486 00:25:30,270 --> 00:25:31,990 que eu só corri. 487 00:25:31,990 --> 00:25:36,020 E da mesma forma, você pode - 488 00:25:36,020 --> 00:25:41,260 se isso era a saída para um arquivo, este é obter a entrada de um arquivo. 489 00:25:41,260 --> 00:25:45,790 490 00:25:45,790 --> 00:25:47,050 O que é um comando que eu - 491 00:25:47,050 --> 00:25:49,620 >> JOSÉ: Eu acho que você pode usar menos ou mais, provavelmente. 492 00:25:49,620 --> 00:25:53,031 >> ROB: Mas como sobre apenas menos blá? 493 00:25:53,031 --> 00:25:53,930 Eu não sei. 494 00:25:53,930 --> 00:25:57,870 Se você entrar neste cenário, como Série de Exercícios há que ele é útil para. 495 00:25:57,870 --> 00:25:59,950 >> JOSÉ: Você pode canalizar-lo em eco. 496 00:25:59,950 --> 00:26:02,920 Canalize o arquivo em eco para vê-lo. 497 00:26:02,920 --> 00:26:04,060 >> ROB: É pipe. 498 00:26:04,060 --> 00:26:04,860 >> JOSÉ: Desculpe. 499 00:26:04,860 --> 00:26:06,190 >> ROB: Tudo bem. 500 00:26:06,190 --> 00:26:12,720 Portanto, esta é a saída para um arquivo. 501 00:26:12,720 --> 00:26:18,700 Este é obter o texto a partir do arquivo e entregá-lo para o programa. 502 00:26:18,700 --> 00:26:20,560 E você também vai ver esse cara. 503 00:26:20,560 --> 00:26:24,410 Portanto, esta é uma espécie de fazer os dois ao mesmo tempo. 504 00:26:24,410 --> 00:26:28,310 E na verdade, eu vou apresentar dois novos comandos apenas para fazer uso dele. 505 00:26:28,310 --> 00:26:33,060 >> A história é um comando útil que é apenas vai imprimir uma listagem de 506 00:26:33,060 --> 00:26:34,940 qualquer coisa que eu já executar uma linha de comando. 507 00:26:34,940 --> 00:26:38,290 Assim, vemos aqui tudo o que eu tenho corrido esse tempo todo. 508 00:26:38,290 --> 00:26:39,540 Muita ls do. 509 00:26:39,540 --> 00:26:41,570 510 00:26:41,570 --> 00:26:48,470 >> E outro comando útil é grep que o seu objectivo é a pesquisa sobre 511 00:26:48,470 --> 00:26:52,060 texto à procura de padrões, bem, olhando para o que você 512 00:26:52,060 --> 00:26:53,310 quer que ele procurar. 513 00:26:53,310 --> 00:26:59,770 E assim, um uso prático aqui é, digamos queremos agarrar a história. 514 00:26:59,770 --> 00:27:03,860 E eu quero olhar para os comandos onde eu - o que é um 515 00:27:03,860 --> 00:27:05,000 um útil para procurar? 516 00:27:05,000 --> 00:27:06,898 >> JOSÉ: [inaudível]? 517 00:27:06,898 --> 00:27:09,710 >> ROB: Ou vamos apenas olhar para todos toca, por qualquer motivo. 518 00:27:09,710 --> 00:27:13,850 Então é isso que ele vai ficar. 519 00:27:13,850 --> 00:27:15,560 E você não tem que completamente entender isso. 520 00:27:15,560 --> 00:27:20,570 Mas a idéia é aqui, a história está a dar o mesmo resultado que fez aqui 521 00:27:20,570 --> 00:27:25,030 onde está imprimindo a todo história de tudo que eu já executado. 522 00:27:25,030 --> 00:27:27,030 Estamos, então, de passagem, que - 523 00:27:27,030 --> 00:27:30,230 assim, em vez de imprimi-lo para a tela, queremos passar isso para o 524 00:27:30,230 --> 00:27:34,640 comando grep que está procurando todas as ocorrências da palavra toque. 525 00:27:34,640 --> 00:27:40,280 >> E assim, usando essa combinação de ferramentas de história e grep, eu posso ver, OK, 526 00:27:40,280 --> 00:27:44,820 aqui está todos os comandos que eu já correr, e aqui está um pouco comum. 527 00:27:44,820 --> 00:27:45,510 Estamos na parte inferior. 528 00:27:45,510 --> 00:27:47,930 E isso também me dar o comando Eu corri que tinha o 529 00:27:47,930 --> 00:27:51,240 toque palavra nele. 530 00:27:51,240 --> 00:27:58,500 Mas o tubo é uma coisa muito útil para a combinação de vários programas. 531 00:27:58,500 --> 00:28:04,670 E, na verdade, é um atalho para deixar me história saída para o arquivo blá, e 532 00:28:04,670 --> 00:28:10,190 deixe-me usar o grep blá arquivo como o que eu quero olhar. 533 00:28:10,190 --> 00:28:13,460 Assim, o tubo é apenas um atalho para esses dois comandos. 534 00:28:13,460 --> 00:28:13,950 Sim. 535 00:28:13,950 --> 00:28:15,306 >> COLUNA 4: [inaudível]? 536 00:28:15,306 --> 00:28:16,556 >> ROB: sim. 537 00:28:16,556 --> 00:28:20,142 538 00:28:20,142 --> 00:28:21,110 O que é - 539 00:28:21,110 --> 00:28:21,858 Oh. 540 00:28:21,858 --> 00:28:24,820 Vamos testar. 541 00:28:24,820 --> 00:28:29,170 Então, gato, cachorro, peixe. 542 00:28:29,170 --> 00:28:33,770 Então, eu quero grep. 543 00:28:33,770 --> 00:28:37,680 Dash, R, mais uma vez, vai ser recursiva, então eu quero descer para baixo 544 00:28:37,680 --> 00:28:38,870 todos os diretórios. 545 00:28:38,870 --> 00:28:43,210 Quero grep recursivamente para todos - e me deixe temporariamente 546 00:28:43,210 --> 00:28:44,460 esta fora do caminho. 547 00:28:44,460 --> 00:28:48,650 548 00:28:48,650 --> 00:28:50,740 Ignore-me. 549 00:28:50,740 --> 00:28:51,360 OK. 550 00:28:51,360 --> 00:28:56,740 >> Então, eu quero grep temporariamente para todas as ocorrências da palavra peixe. 551 00:28:56,740 --> 00:29:00,510 E aqui o que eu estou fazendo é grepping recursivamente para a palavra peixe. 552 00:29:00,510 --> 00:29:05,410 E estrela significa mais de todos estes arquivos nesse diretório. 553 00:29:05,410 --> 00:29:08,930 E por isso me deu uma permissão negada, porque não está autorizado a ler que 554 00:29:08,930 --> 00:29:10,060 arquivo específico. 555 00:29:10,060 --> 00:29:14,040 Mas ele encontrou peixes no arquivo, teste. 556 00:29:14,040 --> 00:29:18,450 >> Eu também poderia dizer, especificamente, eu só quero olhar no blá arquivo, em 557 00:29:18,450 --> 00:29:19,580 caso em que ele não vai encontrar nada. 558 00:29:19,580 --> 00:29:20,990 Eu só quero olhar no arquivo, teste. 559 00:29:20,990 --> 00:29:22,240 Ele vai encontrar peixes. 560 00:29:22,240 --> 00:29:25,980 561 00:29:25,980 --> 00:29:29,260 Isso é um comando muito útil a saber em geral. 562 00:29:29,260 --> 00:29:31,640 Existem algumas alternativas para grep que é suposto ser mais 563 00:29:31,640 --> 00:29:36,780 programador amigável, mas tendem para ainda voltar a cair grep. 564 00:29:36,780 --> 00:29:38,030 Dúvidas? 565 00:29:38,030 --> 00:29:39,965 566 00:29:39,965 --> 00:29:40,919 OK. 567 00:29:40,919 --> 00:29:42,520 >> Existem outros comandos? 568 00:29:42,520 --> 00:29:45,270 Oh. 569 00:29:45,270 --> 00:29:48,370 Apenas um one-off que eu sempre encontrar para ser divertido é CAL. 570 00:29:48,370 --> 00:29:55,610 Então, observe quando estou nesta linda modo de tela cheia, não tenho como top 571 00:29:55,610 --> 00:29:56,720 barra de ferramentas ou qualquer coisa. 572 00:29:56,720 --> 00:29:59,530 Então cal só me dá um pouco de bom calendário que é certo 573 00:29:59,530 --> 00:30:02,380 agora cortar, eu assumo. 574 00:30:02,380 --> 00:30:04,770 Mas pouco agradável de comando. 575 00:30:04,770 --> 00:30:06,540 >> JOSÉ: É [inaudível]. 576 00:30:06,540 --> 00:30:09,170 Outros comandos que você pode ter visto incluem bumbum e fazer. 577 00:30:09,170 --> 00:30:11,180 Nós vamos passar por cima deles em mais detalhes posteriormente. 578 00:30:11,180 --> 00:30:13,400 Mas se você está trabalhando em o PSET, você deve estar 579 00:30:13,400 --> 00:30:15,160 familiarizado com aqueles. 580 00:30:15,160 --> 00:30:16,640 >> ROB: Tudo bem. 581 00:30:16,640 --> 00:30:18,520 Perguntas sobre comando de linha de coisas? 582 00:30:18,520 --> 00:30:22,450 583 00:30:22,450 --> 00:30:23,260 Tudo bem. 584 00:30:23,260 --> 00:30:27,416 Então, vamos passar para alguns Coisas relacionadas-C. 585 00:30:27,416 --> 00:30:28,666 Variáveis ​​de matemática. 586 00:30:28,666 --> 00:30:39,078 587 00:30:39,078 --> 00:30:40,060 OK. 588 00:30:40,060 --> 00:30:45,230 Assim como tivemos matemática em Scratch, você também pode usar a matemática em C. 589 00:30:45,230 --> 00:30:49,270 >> Antes de chegarmos a isso completamente, assim variáveis. 590 00:30:49,270 --> 00:30:53,920 Lembre-se que sempre que você declarar um variável como int x ou y bóia, você 591 00:30:53,920 --> 00:30:56,710 tem que dar antes de digitar o nome da variável. 592 00:30:56,710 --> 00:31:03,020 Assim, os tipos que vimos até agora são int, float, double, long long, que eu 593 00:31:03,020 --> 00:31:06,150 na verdade, não sei se temos visto que, até agora. 594 00:31:06,150 --> 00:31:07,700 >> Existem alguns outros. 595 00:31:07,700 --> 00:31:09,990 Nós ver Char. 596 00:31:09,990 --> 00:31:13,920 Há curto, que é como se fosse o oposto do longa, longa, onde é 597 00:31:13,920 --> 00:31:16,650 menor do que um número inteiro. 598 00:31:16,650 --> 00:31:18,580 Vimos também string. 599 00:31:18,580 --> 00:31:23,070 Então, o que é especial sobre corda? 600 00:31:23,070 --> 00:31:25,350 Por que eu digo que é não é bem como int? 601 00:31:25,350 --> 00:31:27,030 >> COLUNA 4: Realmente não existe. 602 00:31:27,030 --> 00:31:27,990 >> ROB: Yeah. 603 00:31:27,990 --> 00:31:31,820 Assim, a única razão pela qual temos corda é porque quando você faz 604 00:31:31,820 --> 00:31:33,215 hash incluem cs50.h. 605 00:31:33,215 --> 00:31:36,530 606 00:31:36,530 --> 00:31:42,670 E vamos ver exemplos desta tarde - oh, isso não lidar com isso bem - 607 00:31:42,670 --> 00:31:46,160 onde cs50.h está fazendo algo ao longo das linhas de Tipo 608 00:31:46,160 --> 00:31:49,230 def, char estrela, corda. 609 00:31:49,230 --> 00:31:53,280 >> E o que é dizer que nós não sabemos ainda sabe o que uma estrela char é ainda. 610 00:31:53,280 --> 00:31:56,770 Mas isso está dizendo que nós queremos string. 611 00:31:56,770 --> 00:32:00,250 Qualquer lugar que você está usando corda, você poderia ter usado o caractere estrela, 612 00:32:00,250 --> 00:32:04,670 que realmente é um tipo que existe na linguagem C. 613 00:32:04,670 --> 00:32:06,680 Mas nós vamos chegar a isso. 614 00:32:06,680 --> 00:32:07,860 Ah, e ele vai para a direita de volta. 615 00:32:07,860 --> 00:32:10,170 Neat. 616 00:32:10,170 --> 00:32:15,370 >> Assim, mesmo com bool onde o verdadeiro eo falso. 617 00:32:15,370 --> 00:32:22,510 Isso não é realmente um tipo de embutido em C. Em vez disso, é apenas, que isso tem 618 00:32:22,510 --> 00:32:23,740 o valor zero? 619 00:32:23,740 --> 00:32:26,200 Então vamos considerar apenas que ela é falsa. 620 00:32:26,200 --> 00:32:27,350 Isso tem o valor - 621 00:32:27,350 --> 00:32:30,530 bem, isso tem qualquer valor que não é zero? 622 00:32:30,530 --> 00:32:32,200 Então vamos considerar que ela é verdadeira. 623 00:32:32,200 --> 00:32:35,940 Então, é verdade, dois é verdadeiro, qualquer coisa diferente de zero é verdadeiro. 624 00:32:35,940 --> 00:32:38,710 625 00:32:38,710 --> 00:32:42,790 Portanto, estas são esses. 626 00:32:42,790 --> 00:32:47,624 Dúvidas sobre declaração de variáveis ​​e tipos de variáveis ​​e tudo isso? 627 00:32:47,624 --> 00:32:48,100 É. 628 00:32:48,100 --> 00:32:52,384 >> COLUNA 4: Por muito tempo longo, no livro, ele disse que tinha que ser long long int. 629 00:32:52,384 --> 00:32:54,288 Mas vai funcionar muito longo tempo? 630 00:32:54,288 --> 00:32:58,210 631 00:32:58,210 --> 00:33:01,470 >> ROB: Então esses modificadores de tipo. 632 00:33:01,470 --> 00:33:04,170 Assim, int x. 633 00:33:04,170 --> 00:33:07,710 Assim, podemos também dizer unsigned int x. 634 00:33:07,710 --> 00:33:09,640 Podemos dizer short int x. 635 00:33:09,640 --> 00:33:12,570 Podemos dizer long long int x. 636 00:33:12,570 --> 00:33:17,250 Mas praticamente qualquer daquelas coisas que eu apenas disse, int sem sinal, short int, 637 00:33:17,250 --> 00:33:21,480 long long int, você pode se livrar de int e ele vai assumir 638 00:33:21,480 --> 00:33:22,510 que você quis dizer int. 639 00:33:22,510 --> 00:33:26,045 X Então não assinados, que apenas significa - 640 00:33:26,045 --> 00:33:29,400 você sabe como normalmente com um int, você pode dizer que x é igual a 3 negativo? 641 00:33:29,400 --> 00:33:31,636 Com um int sem sinal, você não pode. 642 00:33:31,636 --> 00:33:34,480 >> JOSÉ: E mais uma vez, para a câmara, o pergunta era: qual é a diferença 643 00:33:34,480 --> 00:33:37,796 entre long long int e apenas o tempo? 644 00:33:37,796 --> 00:33:38,410 >> ROB: Yeah. 645 00:33:38,410 --> 00:33:42,850 Então, eu quase nunca escrever long long int. 646 00:33:42,850 --> 00:33:44,100 Vou escrever long long. 647 00:33:44,100 --> 00:33:47,770 648 00:33:47,770 --> 00:33:50,636 >> JOSÉ: Alguma pergunta? 649 00:33:50,636 --> 00:33:51,886 >> ROB: OK. 650 00:33:51,886 --> 00:33:56,180 651 00:33:56,180 --> 00:34:02,390 Pequeno lembrete tão bobo de que é como declaramos uma variável e inicializar 652 00:34:02,390 --> 00:34:04,450 a variável e declarar outra variável e inicializar 653 00:34:04,450 --> 00:34:05,870 tudo isso em uma única etapa. 654 00:34:05,870 --> 00:34:09,370 Assim, a declaração da variável e a variável de inicialização não tem 655 00:34:09,370 --> 00:34:11,120 a, mas pode ser na mesma linha. 656 00:34:11,120 --> 00:34:15,409 657 00:34:15,409 --> 00:34:20,060 >> Portanto, temos os operadores matemáticos padrão que você está acostumado - 658 00:34:20,060 --> 00:34:22,199 mais, menos, dividir os momentos. 659 00:34:22,199 --> 00:34:24,389 Há também modulo, o que vamos ver. 660 00:34:24,389 --> 00:34:29,060 Não existe, pelo menos em C, um built-in potência 661 00:34:29,060 --> 00:34:31,765 operador circunflexo exponenciação. 662 00:34:31,765 --> 00:34:33,770 Bem, há um operador acento circunflexo, mas não é poder. 663 00:34:33,770 --> 00:34:34,239 >> JOSÉ: Mas não é exponenciação, Sim. 664 00:34:34,239 --> 00:34:36,210 >> ROB: Não use o acento circunflexo supor que isso significa 665 00:34:36,210 --> 00:34:39,980 como quadrado ou qualquer outra coisa. 666 00:34:39,980 --> 00:34:42,289 Por isso, algumas coisas para manter em mente sobre divisão. 667 00:34:42,289 --> 00:34:46,282 668 00:34:46,282 --> 00:34:48,880 Eu estarei. 669 00:34:48,880 --> 00:34:51,315 Assim declarou resposta initialize. 670 00:34:51,315 --> 00:34:54,670 Então, nós estamos dizendo resposta flutuador é igual a 1 dividido por 10. 671 00:34:54,670 --> 00:34:57,500 Imprimir resposta para duas casas decimais. 672 00:34:57,500 --> 00:35:02,180 >> E este é o tipo de coisa que eu seria o homem printf para descobrir que 673 00:35:02,180 --> 00:35:05,110 o que diabos%, ponto, 2f significa? 674 00:35:05,110 --> 00:35:07,930 E isso apenas significa que, bem, ignorando a 0,2. 675 00:35:07,930 --> 00:35:10,420 E%, f é o que usamos para imprimir a flutuar. 676 00:35:10,420 --> 00:35:15,370 O 0.2 está dizendo, a impressão que flutuar até duas casas decimais. 677 00:35:15,370 --> 00:35:19,600 Portanto, este programa tem um bug, e você pode já vi isso antes em algum 678 00:35:19,600 --> 00:35:20,870 Naturalmente CS antes. 679 00:35:20,870 --> 00:35:22,170 Mas o que é esse bug? 680 00:35:22,170 --> 00:35:23,050 >> COLUNA 5: Zero. 681 00:35:23,050 --> 00:35:24,130 >> ROB: Yeah. 682 00:35:24,130 --> 00:35:29,630 Assim, quando dizemos, a resposta é igual a 1 dividido por 10, queremos que o 683 00:35:29,630 --> 00:35:31,610 responder a ser 0,1. 684 00:35:31,610 --> 00:35:37,450 Mas 1 dividido por 10, 1 é um número inteiro, 10 é um número inteiro. 685 00:35:37,450 --> 00:35:41,060 E assim, quando fazemos um inteiro dividido por um inteiro, vamos voltar 686 00:35:41,060 --> 00:35:42,190 um inteiro. 687 00:35:42,190 --> 00:35:43,660 Então 1 dividido por 10 é de 0,1. 688 00:35:43,660 --> 00:35:46,760 >> Desde que ele precisa nos dar um inteiro, ele só vai jogar fora que 689 00:35:46,760 --> 00:35:49,410 casa decimal e dizer que a resposta é 0. 690 00:35:49,410 --> 00:35:55,314 E assim, quando nós imprimimos responder aqui, ele vai imprimir 0,00. 691 00:35:55,314 --> 00:35:58,430 >> JOSÉ: E assim como uma nota, ele realmente joga fora o que há depois da 692 00:35:58,430 --> 00:35:59,390 ponto decimal. 693 00:35:59,390 --> 00:36:03,180 Então, se você, em vez tinha 6 dividido por 10, você pode pensar que ele iria dar-lhe 694 00:36:03,180 --> 00:36:05,200 0,6 e então você arredondar para 1. 695 00:36:05,200 --> 00:36:10,520 Mas, na verdade, o que acontece quando se digita tarefas é que ele deixa cair o que é 696 00:36:10,520 --> 00:36:11,470 depois do ponto decimal. 697 00:36:11,470 --> 00:36:13,020 Assim, se torne 0,6 0. 698 00:36:13,020 --> 00:36:13,370 >> ROB: Yeah. 699 00:36:13,370 --> 00:36:15,160 E nós vamos dizer truncada por isso. 700 00:36:15,160 --> 00:36:21,760 Assim, sempre que você converter para um int, o decimal é truncado. 701 00:36:21,760 --> 00:36:23,980 Assim, a correção para que - não há na verdade, dois. 702 00:36:23,980 --> 00:36:27,890 E eu vou fazer isso, segundo, porque esta é uma solução muito mais fácil. 703 00:36:27,890 --> 00:36:32,670 >> Então, uma correção é usar flutuadores na divisão. 704 00:36:32,670 --> 00:36:34,720 E realmente, você só tem que fazer um deles um carro alegórico. 705 00:36:34,720 --> 00:36:37,400 Mas é apenas um pouco mais clara para fazer os dois flutuadores. 706 00:36:37,400 --> 00:36:41,170 Então, 1,0 dividido por 10,0 é divisão de dois carros alegóricos. 707 00:36:41,170 --> 00:36:43,970 Portanto, a resposta vai acabar sendo um float, e assim você vai 708 00:36:43,970 --> 00:36:48,050 corretamente imprimir 0,10 aqui. 709 00:36:48,050 --> 00:36:52,220 >> Algo que não funciona tão bem sobre o que é, bem, com certeza, era fácil 710 00:36:52,220 --> 00:36:56,240 suficiente para converter um a um flutuar, tornando-a 1.0. 711 00:36:56,240 --> 00:37:02,180 Mas e se em vez tivemos dois inteiros como int x é igual a 1 e int y 712 00:37:02,180 --> 00:37:05,660 é igual a 10, e, em seguida, queríamos para que x dividido por y? 713 00:37:05,660 --> 00:37:10,420 Assim, não é fácil de apenas fazer x.0 ou algo assim. 714 00:37:10,420 --> 00:37:12,790 >> Assim, a correção para que está lançando. 715 00:37:12,790 --> 00:37:19,780 Então, lançando é uma maneira em C para converter a partir de um tipo de variável para outro. 716 00:37:19,780 --> 00:37:22,320 Então, aqui, 1 é um inteiro. 717 00:37:22,320 --> 00:37:27,050 E, colocando esta bóia em frente isso, estamos lançando um a um float. 718 00:37:27,050 --> 00:37:30,350 E para que isso irá converter a 1 a 1,0 um. 719 00:37:30,350 --> 00:37:33,380 E isto converterá a 10 para uma média de 10,0. 720 00:37:33,380 --> 00:37:36,790 >> E então as coisas se comportam de forma semelhante ao versão anterior, apenas mostrou 721 00:37:36,790 --> 00:37:42,190 em que, conforme o esperado, obtemos 0,10 e ele vai imprimir isso. 722 00:37:42,190 --> 00:37:44,120 E nós podemos fazer isso com variáveis, também. 723 00:37:44,120 --> 00:37:47,376 Assim, podemos dizer, float x dividido pelo flutuador y. 724 00:37:47,376 --> 00:37:48,626 >> JOSÉ: Alguma pergunta? 725 00:37:48,626 --> 00:37:54,182 726 00:37:54,182 --> 00:38:00,090 >> ROB: Então, assim como na matemática regular, temos precedência do operador. 727 00:38:00,090 --> 00:38:06,960 Então, na aula de matemática, você é mais provável chamá-lo de ordem das operações. 728 00:38:06,960 --> 00:38:09,890 Aqui, o termo oficial é precedência do operador. 729 00:38:09,890 --> 00:38:15,230 Mas a precedência do operador, ou mais operadores, é como seria de esperar. 730 00:38:15,230 --> 00:38:22,660 >> Assim como em matemática, 2 vezes 10 é vai ser agrupados mais perto do que 731 00:38:22,660 --> 00:38:25,410 10 esta dividida por dois e, em seguida, 2. 732 00:38:25,410 --> 00:38:29,745 A ordem das operações, que vai fazer 2 10 vezes, 10 dividido por dois, e depois 733 00:38:29,745 --> 00:38:32,720 ele vai fazer 20 mais 5 mais 2. 734 00:38:32,720 --> 00:38:37,020 Então, é como se esperava, e você pode usar parênteses para agrupar expressões. 735 00:38:37,020 --> 00:38:41,063 Você não pode usar colchetes para agrupar expressões. 736 00:38:41,063 --> 00:38:41,544 Sim? 737 00:38:41,544 --> 00:38:43,468 >> COLUNA 5: Você poderia realmente só voltar um segundo? 738 00:38:43,468 --> 00:38:47,316 Você pode lançar um int em uma string? 739 00:38:47,316 --> 00:38:53,330 >> ROB: Então, em C, você pode lançar qualquer coisa Você quer o que quiser. 740 00:38:53,330 --> 00:38:55,600 Isso não significa que ele é uma boa coisa a fazer. 741 00:38:55,600 --> 00:38:59,760 Então, quando você lançar um int para uma corda, o que significa - 742 00:38:59,760 --> 00:39:03,240 e nós vamos entrar neste muito mais profundamente - 743 00:39:03,240 --> 00:39:03,720 >> JOSÉ: Muito mais tarde. 744 00:39:03,720 --> 00:39:06,840 >> ROB: Eu não quero dizer muito mais tarde, então eu tentei mudar a minha frase. 745 00:39:06,840 --> 00:39:13,370 Nós vamos entrar muito mais minuciosamente mais tarde, onde realmente quando você tem um 746 00:39:13,370 --> 00:39:14,810 variável string - 747 00:39:14,810 --> 00:39:17,160 assim que uma corda pode ser arbitrariamente muito tempo, certo? 748 00:39:17,160 --> 00:39:21,850 E nós temos vindo a dizer que é um int quatro bytes e longo tempo é de oito 749 00:39:21,850 --> 00:39:23,620 bytes e um float é de quatro bytes. 750 00:39:23,620 --> 00:39:29,520 Assim, uma corda, como um int, só tem um certo número de bytes à mesma. 751 00:39:29,520 --> 00:39:31,800 E isso vai ser de quatro bytes. 752 00:39:31,800 --> 00:39:34,750 >> Mas uma série pode ser bastante arbitrariamente longo, certo? 753 00:39:34,750 --> 00:39:40,190 Então Olá mundo já, se é 10 caracteres ou qualquer outra coisa, que já está 754 00:39:40,190 --> 00:39:42,670 vai ser ao longo dos 4 bytes I podem se encaixar em uma string. 755 00:39:42,670 --> 00:39:51,140 E assim como cordas realmente funciona é que eles são, onde na memória essa seqüência 756 00:39:51,140 --> 00:39:52,380 está sendo mantido. 757 00:39:52,380 --> 00:39:57,290 >> E assim por aqui, quando digo corda x Olá mundo é igual, dentro de x é 758 00:39:57,290 --> 00:40:01,840 apenas dizendo, oh, Olá mundo é armazenado neste lugar especial na memória. 759 00:40:01,840 --> 00:40:07,060 Então, se nós tentamos lançar um inteiro para um string, então estamos tentando interpretar 760 00:40:07,060 --> 00:40:10,500 alguma parte aleatória de memória como uma string. 761 00:40:10,500 --> 00:40:14,465 E isso quase sempre quebra as coisas. 762 00:40:14,465 --> 00:40:17,040 >> JOSÉ: Mas se isso confunde você, nós estaremos cobrindo-o 763 00:40:17,040 --> 00:40:17,550 mais em profundidade mais tarde. 764 00:40:17,550 --> 00:40:17,850 >> ROB: Yeah. 765 00:40:17,850 --> 00:40:20,540 Este é o lugar onde você está indo para entrar em ponteiros. 766 00:40:20,540 --> 00:40:25,485 E essa é uma parte significativa de duas semanas de curso. 767 00:40:25,485 --> 00:40:28,275 >> COLUNA 6: Funciona como objetos em outras línguas ou não verdade? 768 00:40:28,275 --> 00:40:34,050 >> ROB: Então, em outras línguas, objetos seria representado usando ponteiros. 769 00:40:34,050 --> 00:40:37,070 770 00:40:37,070 --> 00:40:38,793 Não é a mesma coisa, no entanto. 771 00:40:38,793 --> 00:40:42,110 772 00:40:42,110 --> 00:40:42,910 Quaisquer pensamentos? 773 00:40:42,910 --> 00:40:43,760 >> JOSÉ: Não. 774 00:40:43,760 --> 00:40:44,185 Sem pensamentos. 775 00:40:44,185 --> 00:40:44,980 >> ROB: OK. 776 00:40:44,980 --> 00:40:46,994 >> JOSÉ: Next. 777 00:40:46,994 --> 00:40:48,255 >> ROB: Basta ir com isso. 778 00:40:48,255 --> 00:40:48,670 Tudo bem. 779 00:40:48,670 --> 00:40:51,120 Assim módulo. 780 00:40:51,120 --> 00:40:53,900 Assim como nós temos mais, menos, dividir e multiplicar. 781 00:40:53,900 --> 00:40:56,720 Então modulo é aquele que você pode não tenha visto antes. 782 00:40:56,720 --> 00:40:59,540 E ele apenas diz, dar me o restante. 783 00:40:59,540 --> 00:41:02,850 Assim, 55% 10. 784 00:41:02,850 --> 00:41:06,840 O restante de fazer 55 dividido por 10 seria 5. 785 00:41:06,840 --> 00:41:09,630 Assim, 55% de 10 é 5. 786 00:41:09,630 --> 00:41:12,260 E 3% 5 será de 3. 787 00:41:12,260 --> 00:41:14,180 8% 8 será 0. 788 00:41:14,180 --> 00:41:15,903 16% 15 será 1. 789 00:41:15,903 --> 00:41:20,670 >> JOSÉ: Uma coisa a notar, com isso, também, é que pode não funcionar como esperado 790 00:41:20,670 --> 00:41:22,700 se você usar um número negativo. 791 00:41:22,700 --> 00:41:26,215 Então negativo de 5% 4, algumas pessoas pode pensar que é - 792 00:41:26,215 --> 00:41:28,890 793 00:41:28,890 --> 00:41:33,808 o que você acha negativo 5% 4 seria? 794 00:41:33,808 --> 00:41:34,792 >> COLUNA 5: Uma. 795 00:41:34,792 --> 00:41:37,920 >> JOSÉ: Então, algumas pessoas dizem que um, algumas pessoas dizem que uma negativa. 796 00:41:37,920 --> 00:41:38,450 Mas o que - 797 00:41:38,450 --> 00:41:40,820 >> ROB: Eu não teria sequer , disse um deles. 798 00:41:40,820 --> 00:41:42,370 >> JOSÉ: Dois, desculpe. 799 00:41:42,370 --> 00:41:43,240 Algumas pessoas dizem - 800 00:41:43,240 --> 00:41:43,450 >> ROB: Três. 801 00:41:43,450 --> 00:41:43,800 >> JOSÉ: Três? 802 00:41:43,800 --> 00:41:44,890 >> ROB: Negativo - 803 00:41:44,890 --> 00:41:45,950 qual era o - negativo de cinco - 804 00:41:45,950 --> 00:41:47,100 >> JOSÉ: Três, três, três. 805 00:41:47,100 --> 00:41:48,450 Desculpe. 806 00:41:48,450 --> 00:41:51,910 Porque modulo, em geral, quando você tem vi isso em outro lugar, isso normalmente significa 807 00:41:51,910 --> 00:41:54,000 retornar um número positivo, certo? 808 00:41:54,000 --> 00:42:01,160 >> ROB: Então, quando dizemos em matemática, 10% do, eles tendem a querer dar-lhe - 809 00:42:01,160 --> 00:42:05,980 se mod por 10, então nós esperamos obter um número entre 0 e 9. 810 00:42:05,980 --> 00:42:09,860 Em aqui, que não é o caso que você vai ter números negativos retornado. 811 00:42:09,860 --> 00:42:15,898 >> JOSÉ: Então negativo de 5% 4 seria negativo 1. 812 00:42:15,898 --> 00:42:19,325 >> ROB: Mas é raro que você é mod-ing números negativos, para começar. 813 00:42:19,325 --> 00:42:25,490 814 00:42:25,490 --> 00:42:25,970 Ir isso. 815 00:42:25,970 --> 00:42:27,314 >> JOSÉ: É. 816 00:42:27,314 --> 00:42:29,420 >> ROB: Meh. 817 00:42:29,420 --> 00:42:29,990 OK. 818 00:42:29,990 --> 00:42:36,400 Assim, uma última coisa a salientar sobre flutuadores é que é um comportamento perigoso, 819 00:42:36,400 --> 00:42:39,850 mas carros alegóricos não são uma exata representação. 820 00:42:39,850 --> 00:42:46,190 Então, voltando para bytes de novo, lembre-se que um int é sempre quatro bytes e um 821 00:42:46,190 --> 00:42:47,830 flutuador é sempre quatro bytes. 822 00:42:47,830 --> 00:42:51,340 Assim, o exemplo de Lucas é muito bom. 823 00:42:51,340 --> 00:42:55,730 >> Então, acho que de 1 dividido por 3. 824 00:42:55,730 --> 00:42:57,800 Então 0,3333333. 825 00:42:57,800 --> 00:43:03,540 Se eu só tenho 32 bits, como pode Eu armazenar 0,33333 exatamente? 826 00:43:03,540 --> 00:43:07,250 E talvez, por alguma razão, você diz: tudo bem, bem, vamos apenas dizer que 827 00:43:07,250 --> 00:43:13,210 que este particular 1011001, vamos apenas dizer que deve ser 0.333333. 828 00:43:13,210 --> 00:43:16,960 Bem, você só tem um número finito de esses bits, por isso é impossível 829 00:43:16,960 --> 00:43:22,550 representar cada ponto flutuante valor dado apenas 32 bits. 830 00:43:22,550 --> 00:43:25,580 >> Bem, é impossível representar qualquer valor de ponto flutuante dado infinito - 831 00:43:25,580 --> 00:43:28,480 bem, dado qualquer número finito de bits. 832 00:43:28,480 --> 00:43:38,265 Portanto, a questão aqui é, bem, quando usamos para imprimir em duas casas decimais, 833 00:43:38,265 --> 00:43:42,000 que fizemos corretamente obter a resposta 0,10. 834 00:43:42,000 --> 00:43:47,510 Mas debaixo do capô, é realmente sendo armazenadas tão próximo quanto possível 835 00:43:47,510 --> 00:43:51,790 0,10 como esses bits pode representar. 836 00:43:51,790 --> 00:43:53,200 É este no próximo slide? 837 00:43:53,200 --> 00:43:53,830 Ou não é? 838 00:43:53,830 --> 00:43:54,660 >> JOSÉ: Sim, é isso. 839 00:43:54,660 --> 00:43:55,750 >> ROB: Blegh, blegh. 840 00:43:55,750 --> 00:43:57,760 >> JOSÉ: Sim, você pode apenas puxar as notas para cima um pouco. 841 00:43:57,760 --> 00:43:59,700 >> ROB: Eu só vou para aumentar em no último nisso. 842 00:43:59,700 --> 00:44:00,950 Oh meu Deus, isso é [inaudível]. 843 00:44:00,950 --> 00:44:06,089 844 00:44:06,089 --> 00:44:08,300 Assim que o número. 845 00:44:08,300 --> 00:44:12,300 Isso é o que será impresso se executar o programa. 846 00:44:12,300 --> 00:44:20,340 E note que não é realmente um grande negócio se estamos apenas se preocupar como 847 00:44:20,340 --> 00:44:21,920 2-3 casas decimais. 848 00:44:21,920 --> 00:44:26,700 Como nós só originalmente impresso 0,10, e é por isso que não viu nada de errado. 849 00:44:26,700 --> 00:44:31,380 Mas uma vez que começamos a entrar no exato, número exato de que é 850 00:44:31,380 --> 00:44:35,660 representando, vemos que ele não pode exatamente representar 0,1. 851 00:44:35,660 --> 00:44:40,900 >> E parte do problema aqui é como, Tudo bem, tudo bem, mas, bem, 852 00:44:40,900 --> 00:44:46,120 primeiro, o que se tentou fazer, resposta é igual a igual a 0,1? 853 00:44:46,120 --> 00:44:49,200 É isso que vai retornar verdadeiro ou falso? 854 00:44:49,200 --> 00:44:51,850 E por isso é difícil de dizer. 855 00:44:51,850 --> 00:44:53,330 Eu acho que ele realmente pode retornar verdadeiro. 856 00:44:53,330 --> 00:44:55,265 Será que vai em primeiro lugar - 857 00:44:55,265 --> 00:44:56,180 Eu não sei. 858 00:44:56,180 --> 00:45:00,090 A resposta é uma vez que você começar a lidar com valores de ponto flutuante, você muito 859 00:45:00,090 --> 00:45:05,150 muito não deve estar usando a igualdade devido a esta imprecisão. 860 00:45:05,150 --> 00:45:09,470 >> E para tudo o que você sabe, é o centésimo casa decimal que o 861 00:45:09,470 --> 00:45:13,670 ponto flutuante não era capaz para lidar corretamente. 862 00:45:13,670 --> 00:45:18,180 E assim, a igualdade só vai falhar mesmo embora o número - se você tivesse sido 863 00:45:18,180 --> 00:45:24,450 usando números exatos, os números devem ter sido exatamente o mesmo. 864 00:45:24,450 --> 00:45:27,790 É ao longo de uns 50 Cálculos usando estes flutuante 865 00:45:27,790 --> 00:45:30,270 valores de ponto, o erro pode construir cima e para cima e para cima, e 866 00:45:30,270 --> 00:45:31,125 as coisas só ficam mal. 867 00:45:31,125 --> 00:45:33,870 >> JOSÉ: E houve realmente exemplos famosos de isso acontecer. 868 00:45:33,870 --> 00:45:37,190 Como os engenheiros da NASA ter começado esta erradas, causando foguetes para explodir em 869 00:45:37,190 --> 00:45:38,665 o ar depois de terem sido lançados. 870 00:45:38,665 --> 00:45:41,490 E muitas questões como essa. 871 00:45:41,490 --> 00:45:41,956 Então, sim. 872 00:45:41,956 --> 00:45:45,218 >> COLUNA 6: Quando você diz que 0,3 f, ele truncar o resto? 873 00:45:45,218 --> 00:45:46,468 Ou será que arredondar para cima ou para baixo? 874 00:45:46,468 --> 00:45:48,800 875 00:45:48,800 --> 00:45:50,200 >> ROB: Será printf em volta dele? 876 00:45:50,200 --> 00:45:52,180 >> JOSÉ: Eu acho que trunca printf. 877 00:45:52,180 --> 00:45:52,640 >> ROB: OK. 878 00:45:52,640 --> 00:45:59,890 Assim, podemos ir da mesma forma no oposto direcção deste, onde, neste caso, 879 00:45:59,890 --> 00:46:03,320 o mais próximo que poderia representar 0,1 Foi com esse número. 880 00:46:03,320 --> 00:46:06,820 O mais próximo que pode ser capaz de representam 0,2 é o oposto 881 00:46:06,820 --> 00:46:11,420 direção, 0,199999996356 ou algo assim. 882 00:46:11,420 --> 00:46:17,480 Então, se nós fomos nessa direção de coisas, então printf 0,3 f retornaria 883 00:46:17,480 --> 00:46:20,866 1,99 em vez de 2,00. 884 00:46:20,866 --> 00:46:22,960 >> JOSÉ: E eu não estou totalmente certeza sobre isso. 885 00:46:22,960 --> 00:46:25,430 Você pode querer escrever um pequeno, pouco programa para verificar isso. 886 00:46:25,430 --> 00:46:29,370 >> ROB: No entanto, o que temos certeza é de que se você tentou lançar isso para um 887 00:46:29,370 --> 00:46:33,660 int, e lançando para um int vai causar-lhe a truncar o decimal, se 888 00:46:33,660 --> 00:46:38,140 você tentar converter 1.9999999 para um int, você vai ter um. 889 00:46:38,140 --> 00:46:41,440 E assim, você deve geralmente usar o função round na biblioteca matemática. 890 00:46:41,440 --> 00:46:44,190 891 00:46:44,190 --> 00:46:45,440 Dúvidas? 892 00:46:45,440 --> 00:46:47,660 893 00:46:47,660 --> 00:46:48,982 OK. 894 00:46:48,982 --> 00:46:54,000 >> JOSÉ: movendo Assim, para condições e expressões booleanas. 895 00:46:54,000 --> 00:46:58,120 Então, você já viu isso antes. 896 00:46:58,120 --> 00:47:07,420 E, na verdade, deixe-me ter certeza que meu computador está no formato certo aqui. 897 00:47:07,420 --> 00:47:08,670 Espaço. 898 00:47:08,670 --> 00:47:10,630 899 00:47:10,630 --> 00:47:13,870 Desculpe, nós vamos ter que lidar um pouco com corte nas bordas. 900 00:47:13,870 --> 00:47:15,830 >> Mas sim, vocês têm visto isso antes em Scratch. 901 00:47:15,830 --> 00:47:19,930 Então, isso aqui é uma expressão o qual é utilizado em 902 00:47:19,930 --> 00:47:21,250 uma instrução condicional. 903 00:47:21,250 --> 00:47:23,930 Então responda maior que zero vontade dizer verdadeiro ou falso. 904 00:47:23,930 --> 00:47:26,530 E estas são realmente importante, porque eles nos permitem introduzir 905 00:47:26,530 --> 00:47:28,670 lógica em nosso código. 906 00:47:28,670 --> 00:47:32,820 >> Assim, por exemplo, este é um programa escrito em Scratch que pede ao usuário 907 00:47:32,820 --> 00:47:36,980 para um inteiro e diz a eles se o inteiro que eles lhe deram foi uma 908 00:47:36,980 --> 00:47:38,690 número positivo ou negativo. 909 00:47:38,690 --> 00:47:42,980 E a conversão por aqui para ver se imprimir pela primeira vez a declaração, 910 00:47:42,980 --> 00:47:43,870 dê-me um inteiro. 911 00:47:43,870 --> 00:47:45,980 E então você pedir-lhes para um inteiro. 912 00:47:45,980 --> 00:47:49,870 >> E então você usa a lógica condicional sobre aqui para verificar se esse número 913 00:47:49,870 --> 00:47:52,030 foi realmente maior do que zero ou não. 914 00:47:52,030 --> 00:47:58,960 Portanto, temos aqui uma expressão booleana dentro de uma condicional Se comunicado. 915 00:47:58,960 --> 00:48:00,660 Existe alguma dúvida? 916 00:48:00,660 --> 00:48:03,030 Há alguma dúvida sobre isso? 917 00:48:03,030 --> 00:48:03,950 OK. 918 00:48:03,950 --> 00:48:06,140 >> Portanto, não há mais do que apenas maior do que, é claro. 919 00:48:06,140 --> 00:48:10,385 Você pode construir expressões booleanas usando a maioria dos tipos de coisas que você 920 00:48:10,385 --> 00:48:11,150 pensaria em matemática. 921 00:48:11,150 --> 00:48:12,370 Assim superior. 922 00:48:12,370 --> 00:48:13,740 Isso deve ser um menor que. 923 00:48:13,740 --> 00:48:14,990 Desculpe. 924 00:48:14,990 --> 00:48:18,520 925 00:48:18,520 --> 00:48:19,760 E o espaçamento. 926 00:48:19,760 --> 00:48:22,971 >> ROB: Deus não permita que você deixá-lo. 927 00:48:22,971 --> 00:48:23,620 >> JOSÉ: Tudo bem. 928 00:48:23,620 --> 00:48:25,950 Assim, maior que, menor que, maior do que, ou igual a, menos 929 00:48:25,950 --> 00:48:27,070 do que, ou igual a. 930 00:48:27,070 --> 00:48:31,980 Usamos dois iguais para verificar se há igualdade, porque só é igual a meio 931 00:48:31,980 --> 00:48:32,810 atribuição, certo? 932 00:48:32,810 --> 00:48:33,140 Sim. 933 00:48:33,140 --> 00:48:37,130 E então nós podemos também não é igual por usando ponto de exclamação, é igual. 934 00:48:37,130 --> 00:48:41,530 >> E este símbolo ponto de exclamação pode também ser estendido, de modo que, se você quiser 935 00:48:41,530 --> 00:48:44,050 para inverter qualquer tipo de Boolean expressão, você pode fazer isso. 936 00:48:44,050 --> 00:48:48,530 Então, isso vai avaliar a verdade só se a resposta for menos 937 00:48:48,530 --> 00:48:51,240 que ou igual a zero. 938 00:48:51,240 --> 00:48:53,950 Qualquer dúvida sobre isso? 939 00:48:53,950 --> 00:48:55,180 OK. 940 00:48:55,180 --> 00:48:58,840 >> Então, você também pode combiná-las expressões usando lógica E e 941 00:48:58,840 --> 00:48:59,790 Ou lógico. 942 00:48:59,790 --> 00:49:03,530 Portanto, este é apenas o símbolo E, que deve ser Shift 7. 943 00:49:03,530 --> 00:49:07,720 E este é o símbolo pipe, que é não um caso menor L. É a única 944 00:49:07,720 --> 00:49:09,440 isso mesmo acima de sua tecla Enter. 945 00:49:09,440 --> 00:49:12,870 Então você usa dois destes para simbolizar lógico ea lógica Ou. 946 00:49:12,870 --> 00:49:18,180 >> Então, isso só vai retornar true se a resposta é um, dois, três, ou quatro. 947 00:49:18,180 --> 00:49:23,030 E isso só vai retornar true se a resposta está além de que em ambos os lados. 948 00:49:23,030 --> 00:49:26,190 Portanto, não é um, dois, três, ou quatro. 949 00:49:26,190 --> 00:49:28,385 E a maneira que você usaria que em uma expressão - 950 00:49:28,385 --> 00:49:29,990 >> ROB: Ou um zero ou um cinco. 951 00:49:29,990 --> 00:49:32,200 >> JOSÉ: Zero ou um cinco. 952 00:49:32,200 --> 00:49:32,380 Desculpe. 953 00:49:32,380 --> 00:49:33,320 Sim, sim, sim. 954 00:49:33,320 --> 00:49:34,180 OK. 955 00:49:34,180 --> 00:49:38,980 E aqui, agora, da mesma forma que usaria essa expressão, um menor 956 00:49:38,980 --> 00:49:42,000 lado de uma Se condicional expressão declaração, você também usaria o 957 00:49:42,000 --> 00:49:47,800 mesma forma, apenas colocá-lo dentro de dos parênteses da instrução If. 958 00:49:47,800 --> 00:49:54,020 Portanto, este printf só será acionado se a resposta é um, dois, três, ou quatro. 959 00:49:54,020 --> 00:49:56,002 Qualquer dúvida sobre a combinação expressões? 960 00:49:56,002 --> 00:50:00,450 961 00:50:00,450 --> 00:50:04,240 >> Portanto, não há outra condicional construto que chamamos de If / Else. 962 00:50:04,240 --> 00:50:08,120 Então, basicamente, isso significa que agora, ok, se algo que eu queria ver não era 963 00:50:08,120 --> 00:50:11,600 verdade, então vá para o Else e realizar essa outra ação. 964 00:50:11,600 --> 00:50:15,570 Portanto, neste caso particular, eu perguntei o usuário para um número inteiro. 965 00:50:15,570 --> 00:50:17,790 É o número inteiro maior do que zero? 966 00:50:17,790 --> 00:50:18,310 Sim? 967 00:50:18,310 --> 00:50:20,100 Bem, então eles escolheram um número positivo. 968 00:50:20,100 --> 00:50:22,320 Se não, então ele deve ter sido negativo ou zero. 969 00:50:22,320 --> 00:50:27,530 Então você escolheu um número negativo ou um zero neste caso. 970 00:50:27,530 --> 00:50:29,235 Sim. 971 00:50:29,235 --> 00:50:30,485 Ou um zero. 972 00:50:30,485 --> 00:50:36,320 973 00:50:36,320 --> 00:50:39,300 >> E depois também temos If / Else, Se e Else. 974 00:50:39,300 --> 00:50:45,640 Então, isso nos permite executar uma seqüência de coisas só se os primeiros falharem. 975 00:50:45,640 --> 00:50:49,540 Portanto, neste caso, agora nós estamos fazendo o último que você pegar zero. 976 00:50:49,540 --> 00:50:53,080 Então, se eles não escolheram um positivo nem um número negativo, então eles devem 977 00:50:53,080 --> 00:50:53,640 ter escolhido zero. 978 00:50:53,640 --> 00:50:56,720 Então, ele só vai para baixo da cadeia como esta. 979 00:50:56,720 --> 00:50:59,960 >> Assim, um exemplo de como um Se é diferente de - 980 00:50:59,960 --> 00:51:02,590 um If / Else é diferente de apenas uma seqüência de Ifs. 981 00:51:02,590 --> 00:51:07,680 E esta é uma pergunta comum que as pessoas perguntam é, bem, se você começa como um 982 00:51:07,680 --> 00:51:11,265 95 em CS50, o que será este programa de te dizer? 983 00:51:11,265 --> 00:51:12,600 >> COLUNA 5: Você tem um A. 984 00:51:12,600 --> 00:51:13,490 >> JOSÉ: Sim. 985 00:51:13,490 --> 00:51:14,960 Você tem todos os um daqueles direita. 986 00:51:14,960 --> 00:51:17,130 Você tem um A, você tem um B, você tenho um C e um D, certo? 987 00:51:17,130 --> 00:51:19,770 Então, tudo isso se avaliou em ordem. 988 00:51:19,770 --> 00:51:23,570 Assim, enquanto uma 95 é maior do que 90, é também maior do que 80, é também 989 00:51:23,570 --> 00:51:25,790 maior do que 70, e é também maior do que 60. 990 00:51:25,790 --> 00:51:27,620 Então você tem todas essas qualidades. 991 00:51:27,620 --> 00:51:31,630 E eu suponho que você faria só quero o A. 992 00:51:31,630 --> 00:51:34,060 >> A maneira de corrigir isso é substituir aqueles com Else / Se 's. 993 00:51:34,060 --> 00:51:37,540 Portanto, neste cenário, ele vê que 95 é superior a 90, e, em seguida, faz 994 00:51:37,540 --> 00:51:38,885 não avalia o resto das declarações. 995 00:51:38,885 --> 00:51:41,900 996 00:51:41,900 --> 00:51:43,150 Qualquer dúvida sobre isso? 997 00:51:43,150 --> 00:51:48,580 998 00:51:48,580 --> 00:51:52,470 >> Portanto, há um outro tipo de condicional estrutura que nós temos aqui, que nós 999 00:51:52,470 --> 00:51:53,390 chamar uma instrução switch. 1000 00:51:53,390 --> 00:51:57,390 Então, isso permite que você verifique basicamente qual é o valor de um número que você colocar 1001 00:51:57,390 --> 00:51:59,000 para a instrução switch é. 1002 00:51:59,000 --> 00:52:03,200 Portanto, neste cenário, estamos alternando em n, e nós estamos dizendo, oh, se n é 1003 00:52:03,200 --> 00:52:04,710 um, em seguida, imprimir essa afirmação. 1004 00:52:04,710 --> 00:52:07,910 E, em seguida, romper, o que significa que a saída fora da instrução switch. 1005 00:52:07,910 --> 00:52:12,670 >> Se não fosse um, então, bem, apenas eventualmente verificar todos esses casos. 1006 00:52:12,670 --> 00:52:16,280 E assim, ele verifica se é um ou dois ou três, e ela imprime em conformidade. 1007 00:52:16,280 --> 00:52:19,780 E o que esta palavra-chave default aqui meios é se não entrar em qualquer 1008 00:52:19,780 --> 00:52:21,690 desses, em seguida, dizer inválido. 1009 00:52:21,690 --> 00:52:25,910 Então, digamos que eu peço e n o usuário dá-me quatro. 1010 00:52:25,910 --> 00:52:29,470 Bem, ele corresponde a nenhum desses casos, por isso vai imprimir o que está no 1011 00:52:29,470 --> 00:52:30,540 seção padrão. 1012 00:52:30,540 --> 00:52:31,180 Sim, questionar? 1013 00:52:31,180 --> 00:52:32,614 >> COLUNA 5: Pode-se usar Boolean em vez das expressões 1014 00:52:32,614 --> 00:52:33,570 um, dois, ou três? 1015 00:52:33,570 --> 00:52:36,940 >> JOSÉ: Então a questão é você pode usar Expressões booleanas em vez de um, 1016 00:52:36,940 --> 00:52:37,940 dois e três? 1017 00:52:37,940 --> 00:52:40,520 E em C, eu acredito em você Não posso fazer isso. 1018 00:52:40,520 --> 00:52:44,320 Mas, em outras línguas, o que você pode encontrar no fim do 1019 00:52:44,320 --> 00:52:46,460 semestre como JavaScript, você pode. 1020 00:52:46,460 --> 00:52:50,050 Bem, você teria que calcular primeiro esse valor e, em seguida, usá-lo no 1021 00:52:50,050 --> 00:52:50,650 instrução switch. 1022 00:52:50,650 --> 00:52:50,930 Sim? 1023 00:52:50,930 --> 00:52:54,760 >> ROB: Então uma parte do benefício do interruptor declarações é pensar se você fez isso 1024 00:52:54,760 --> 00:52:58,680 como If / Else, assim como se n é igual a é igual a um, ou o que seja. 1025 00:52:58,680 --> 00:53:00,300 Else / Se n é igual é igual a dois, que seja. 1026 00:53:00,300 --> 00:53:01,960 Else / Se n é igual é igual a três. 1027 00:53:01,960 --> 00:53:05,930 Assim, a forma como o programa seria executado é se sequencialmente descer essa lista 1028 00:53:05,930 --> 00:53:07,500 e verificar, é n um? 1029 00:53:07,500 --> 00:53:08,040 Não.. 1030 00:53:08,040 --> 00:53:09,070 N é dois? 1031 00:53:09,070 --> 00:53:09,490 Não.. 1032 00:53:09,490 --> 00:53:10,940 É n três? 1033 00:53:10,940 --> 00:53:11,710 É. 1034 00:53:11,710 --> 00:53:12,610 Faça isso. 1035 00:53:12,610 --> 00:53:15,270 >> Considerando que, com instruções switch, é realmente capaz de compilá-lo para ser 1036 00:53:15,270 --> 00:53:16,360 muito rápido. 1037 00:53:16,360 --> 00:53:19,550 E assim que ele diz switch, ele diz, tudo bem, n é dois, eu sou 1038 00:53:19,550 --> 00:53:23,060 imediatamente vai pular para onde É que eu vou começar a executar. 1039 00:53:23,060 --> 00:53:26,080 Eu não estou indo para a primeira verificação, n é um, é n dois? 1040 00:53:26,080 --> 00:53:28,860 Pode começar imediatamente a fazer o que é suposto fazer. 1041 00:53:28,860 --> 00:53:33,830 >> E por causa disso, não pode ter condições de booleanos. 1042 00:53:33,830 --> 00:53:36,480 Ou então ele teria que fazer o seqüencial, como, tudo bem, é n 1043 00:53:36,480 --> 00:53:37,820 maior do que zero? 1044 00:53:37,820 --> 00:53:41,140 Else é n superior a 10 ou o que quer. 1045 00:53:41,140 --> 00:53:44,780 >> JOSÉ: Neste caso, se você usou If / Else, de Se, em seguida, a chave seria 1046 00:53:44,780 --> 00:53:47,792 executar cerca de três vezes mais rápido do que o If / Else, Se. 1047 00:53:47,792 --> 00:53:53,060 1048 00:53:53,060 --> 00:53:56,040 Podemos organizar o interruptor de tal uma maneira que nós não quebrar 1049 00:53:56,040 --> 00:53:57,520 após cada um dos casos. 1050 00:53:57,520 --> 00:54:00,960 Portanto, neste caso, eu estou dividindo o números que escolhemos em um e 1051 00:54:00,960 --> 00:54:04,250 dois que não números elevados e sendo três um número elevado. 1052 00:54:04,250 --> 00:54:08,290 >> Portanto, neste caso, se n é um ou dois, vai bater o caso e, em seguida, ele vai 1053 00:54:08,290 --> 00:54:10,640 cair, porque não há ruptura. 1054 00:54:10,640 --> 00:54:11,610 E isso vai acabar aqui. 1055 00:54:11,610 --> 00:54:15,360 Então, se nós escolher um, ele vai fazer o printf e, em seguida, quebrar, de modo que nenhum dos 1056 00:54:15,360 --> 00:54:17,610 este é executado. 1057 00:54:17,610 --> 00:54:21,870 E, claro, se eles entram em três ou qualquer outra coisa, então ele vai pular 1058 00:54:21,870 --> 00:54:25,320 aqueles e não ir para lá, e executará em vez do 1059 00:54:25,320 --> 00:54:27,490 linha correspondente. 1060 00:54:27,490 --> 00:54:29,390 Há alguma dúvida sobre isso? 1061 00:54:29,390 --> 00:54:29,780 Sim? 1062 00:54:29,780 --> 00:54:32,642 >> COLUNA 4: Você obterá um erro se você teve uma pausa depois de um caso, mas 1063 00:54:32,642 --> 00:54:34,550 não tinha algo para ele fazer? 1064 00:54:34,550 --> 00:54:37,820 >> JOSÉ: Então a questão é que você começa um erro se você tem uma pausa depois 1065 00:54:37,820 --> 00:54:39,730 maiúsculas de um, mas não há nada para fazer? 1066 00:54:39,730 --> 00:54:41,520 E a resposta é não. 1067 00:54:41,520 --> 00:54:43,172 Você não vai realmente obter um erro. 1068 00:54:43,172 --> 00:54:44,590 Sim, hmm mm. 1069 00:54:44,590 --> 00:54:54,540 >> Então, como uma espécie de uma pequena mudança aqui, Eu vou colocar um printf aqui. 1070 00:54:54,540 --> 00:54:55,790 Gritos. 1071 00:54:55,790 --> 00:55:00,994 1072 00:55:00,994 --> 00:55:04,880 Então, o que este impresso se Eu coloquei um em como entrada? 1073 00:55:04,880 --> 00:55:07,530 1074 00:55:07,530 --> 00:55:07,770 É. 1075 00:55:07,770 --> 00:55:10,360 Ele iria dizer-lhe não demorou um elevado número duas vezes, certo? 1076 00:55:10,360 --> 00:55:13,500 Porque ele iria bater aquele primeiro caso, não iria quebrar, e cairia 1077 00:55:13,500 --> 00:55:15,730 até o segundo caso. 1078 00:55:15,730 --> 00:55:16,950 Qualquer dúvida sobre isso? 1079 00:55:16,950 --> 00:55:18,280 >> ROB: Você tem outra pergunta? 1080 00:55:18,280 --> 00:55:20,840 >> JOSÉ: OK, esfriar. 1081 00:55:20,840 --> 00:55:22,400 Tudo bem. 1082 00:55:22,400 --> 00:55:25,780 Portanto, não há outra coisa que chamamos de operador ternário que é basicamente um 1083 00:55:25,780 --> 00:55:29,010 sintaxe alternativa para fazer Se e, em seguida, Else. 1084 00:55:29,010 --> 00:55:30,470 E isso permite que você faça tudo em uma linha. 1085 00:55:30,470 --> 00:55:34,110 Portanto, neste programa especial, Estou pedindo ao usuário para o n. 1086 00:55:34,110 --> 00:55:37,190 E se n for maior que 100, eu digo eles escolheram um número alto. 1087 00:55:37,190 --> 00:55:39,560 Else Eu digo a eles que eles escolheu um número baixo. 1088 00:55:39,560 --> 00:55:43,030 >> Assim, podemos usar este tempo muito longo de sintaxe, corda, S, e em seguida, verificar se n é 1089 00:55:43,030 --> 00:55:45,260 maior do que 100 e atribuir lo em conformidade. 1090 00:55:45,260 --> 00:55:49,450 Mas podemos fazer isso muito mais concisa usando esta sintaxe operador ternário 1091 00:55:49,450 --> 00:55:52,090 que envolve uma questão marca e um cólon. 1092 00:55:52,090 --> 00:55:55,070 Assim, o ponto de interrogação é essencialmente fazer uma pergunta, certo? 1093 00:55:55,070 --> 00:55:56,625 >> ROB: Talvez ampliar isso. 1094 00:55:56,625 --> 00:55:57,372 >> JOSÉ: Sim. 1095 00:55:57,372 --> 00:56:00,210 Bom ponto. 1096 00:56:00,210 --> 00:56:02,550 Então este é o operador ternário. 1097 00:56:02,550 --> 00:56:06,100 A primeira vez que fazer a pergunta, n é maior do que 100? 1098 00:56:06,100 --> 00:56:09,770 Se for, então executar o primeiro parte antes dos dois pontos. 1099 00:56:09,770 --> 00:56:13,360 Se não for, então eu executar o segunda parte depois dos dois pontos. 1100 00:56:13,360 --> 00:56:16,640 Assim, se n for maior do que 100, em seguida, ele pega alta e puts 1101 00:56:16,640 --> 00:56:18,360 que em cadeia s. 1102 00:56:18,360 --> 00:56:22,170 Se n for menor do que 100, que escolhe baixa e, em seguida, coloca isso em cadeia s. 1103 00:56:22,170 --> 00:56:30,186 Assim que condensa este grande pedaço para baixo em apenas que uma linha. 1104 00:56:30,186 --> 00:56:32,010 >> COLUNA 5: Isso é popular? 1105 00:56:32,010 --> 00:56:36,070 >> JOSÉ: Sim, é bastante popular para coisas onde essencialmente você deseja 1106 00:56:36,070 --> 00:56:38,700 não uma atribuição com base em algum tipo de condição. 1107 00:56:38,700 --> 00:56:43,110 E, neste caso, nós estávamos tentando para atribuir um valor a cadeia s. 1108 00:56:43,110 --> 00:56:44,840 Não é assim - 1109 00:56:44,840 --> 00:56:47,670 Eu acho que eu realmente não preferem nos outros casos. 1110 00:56:47,670 --> 00:56:49,390 Mas é especialmente útil para esta tarefa. 1111 00:56:49,390 --> 00:56:54,490 >> ROB: Isso é um padrão muito comum onde você tem alguma variável que 1112 00:56:54,490 --> 00:56:58,200 você vai dizer, se algo, ajuste esta variável para um valor, senão, definir 1113 00:56:58,200 --> 00:56:59,810 esta variável para outro valor. 1114 00:56:59,810 --> 00:57:03,360 E esse é o cenário onde usar um ternário. 1115 00:57:03,360 --> 00:57:05,220 >> JOSÉ: E você está economizando lotes de linhas, certo? 1116 00:57:05,220 --> 00:57:08,090 E ele só faz o seu código indiscutivelmente um pouco mais legível. 1117 00:57:08,090 --> 00:57:08,635 Sim, questionar? 1118 00:57:08,635 --> 00:57:12,384 >> COLUNA 6: Para um ternário, você poderia ir, string s iguais s, ponto de interrogação? 1119 00:57:12,384 --> 00:57:15,280 E então você pode ter, por exemplo, cinco opções diferentes. 1120 00:57:15,280 --> 00:57:18,310 E, dependendo do que o número de n foi, você deve escolher um desses? 1121 00:57:18,310 --> 00:57:22,210 >> JOSÉ: Então a pergunta é, existe um tipo de sintaxe onde você pode fazer corda 1122 00:57:22,210 --> 00:57:25,910 s é igual a n, e, em seguida, ter mais do que dois opções depois que ponto de interrogação? 1123 00:57:25,910 --> 00:57:29,740 E a resposta simples é não, não há realmente uma boa maneira de fazer isso, a menos 1124 00:57:29,740 --> 00:57:33,850 você quer ninho ternário múltipla operadores dentro do outro. 1125 00:57:33,850 --> 00:57:38,050 >> Você poderia fazer como n maior que 100, ponto de interrogação, e depois outro 1126 00:57:38,050 --> 00:57:41,850 operador ternário, n superior a 50, ponto de interrogação, e aninhar-lo dessa forma. 1127 00:57:41,850 --> 00:57:45,240 Mas, nesse cenário, o código é ficando meio ilegível e confuso, 1128 00:57:45,240 --> 00:57:47,920 e talvez seja melhor ir apenas para uma instrução If / Else naquele ponto. 1129 00:57:47,920 --> 00:57:54,530 >> ROB: E também, como uma nota lateral, PHP incorretamente implementa o ternário 1130 00:57:54,530 --> 00:57:58,053 operador tal que ternários aninhadas nem sequer funcionam como deveriam. 1131 00:57:58,053 --> 00:57:58,840 >> JOSÉ: É. 1132 00:57:58,840 --> 00:58:01,170 Então, ele fica um pouco confuso, especialmente quando você vai 1133 00:58:01,170 --> 00:58:02,145 para diferentes idiomas. 1134 00:58:02,145 --> 00:58:04,810 >> ROB: É confuso o suficiente para que línguas estão errados sobre isso. 1135 00:58:04,810 --> 00:58:08,030 1136 00:58:08,030 --> 00:58:11,510 >> JOSÉ: Então, na verdade, só para esclarecer, que todo mundo sabe o que isso 1137 00:58:11,510 --> 00:58:13,900 % S faz aqui? 1138 00:58:13,900 --> 00:58:15,650 Qualquer dúvida sobre isso? 1139 00:58:15,650 --> 00:58:19,760 Eu acho que só para a câmara, o% s basicamente nos permite colocar um espaço reservado 1140 00:58:19,760 --> 00:58:20,790 para uma string. 1141 00:58:20,790 --> 00:58:23,920 E depois, no final, que especifica que o variável queremos colocar nessa 1142 00:58:23,920 --> 00:58:25,500 titular lugar é s. 1143 00:58:25,500 --> 00:58:27,730 Assim que, basicamente, tem s e coloca-lo aqui. 1144 00:58:27,730 --> 00:58:32,130 E então ele vai imprimir, você escolheu um alto ou você escolheu um número baixo. 1145 00:58:32,130 --> 00:58:33,770 OK. 1146 00:58:33,770 --> 00:58:36,970 >> Então laços permitem que você execute as coisas em movimentos circulares, certo? 1147 00:58:36,970 --> 00:58:40,300 Você pode ter encontrado isso em Raspadinha na forma de laços para sempre 1148 00:58:40,300 --> 00:58:45,650 ou repetir até ou Repetir uma especial número de vezes. 1149 00:58:45,650 --> 00:58:47,540 Então, por que isso é bom para nós? 1150 00:58:47,540 --> 00:58:51,500 Bem, em C, vamos dizer que temos esta canção implementado em Scratch que 1151 00:58:51,500 --> 00:58:53,450 canta, esta é a canção que nunca termina. 1152 00:58:53,450 --> 00:58:55,710 Ele só vai sobre e sobre e para sempre e para sempre. 1153 00:58:55,710 --> 00:58:59,395 Bem, você não pode realmente fazer um programa que tem um número infinito de printf 1154 00:58:59,395 --> 00:59:00,850 declarações, certo? 1155 00:59:00,850 --> 00:59:04,900 >> Portanto, neste cenário em particular, de uma forma que você poderia fazer este trabalho e 1156 00:59:04,900 --> 00:59:09,330 para torná-lo imprimir sempre é em vez usar um loop While. 1157 00:59:09,330 --> 00:59:13,640 Assim, um loop While irá executar o que é no corpo das duas cintas que 1158 00:59:13,640 --> 00:59:17,250 pertence a ela com base no que é a condição. 1159 00:59:17,250 --> 00:59:21,170 Portanto, neste exemplo particular, antes, se queremos imprimir isso para sempre, o que 1160 00:59:21,170 --> 00:59:23,590 que podemos fazer? 1161 00:59:23,590 --> 00:59:25,190 Bem, com certeza, não é? 1162 00:59:25,190 --> 00:59:32,290 >> Portanto, este tipo de combina a idéia de alguma expressão booleana 1163 00:59:32,290 --> 00:59:33,610 juntamente com um laço. 1164 00:59:33,610 --> 00:59:35,780 E nós aprendemos sobre booleano expressões anteriores. 1165 00:59:35,780 --> 00:59:39,650 Assim, sempre que a condição dentro de Enquanto isso continua a ser verdade, este laço 1166 00:59:39,650 --> 00:59:41,480 executará sobre e sobre e sobre. 1167 00:59:41,480 --> 00:59:44,640 E, neste caso, se nós apenas fornecê-lo com verdade, isso faz com que um infinito 1168 00:59:44,640 --> 00:59:49,310 laço que imprime a canção sobre e sobre e sobre como nós desejado antes sem 1169 00:59:49,310 --> 00:59:52,410 ter um programa que tem um infinito número de instruções printf, que é 1170 00:59:52,410 --> 00:59:55,220 não é possível. 1171 00:59:55,220 --> 00:59:57,810 >> Então, mais convincente, porém, você pode usar isso com um 1172 00:59:57,810 --> 00:59:59,710 variável e uma condição. 1173 00:59:59,710 --> 01:00:04,420 Então, vamos dizer que queremos repetir o frase, totalmente maluco, 10 vezes. 1174 01:00:04,420 --> 01:00:08,380 Então o que você pode fazer com um loop While é primeiro você pode inicializar um contador 1175 01:00:08,380 --> 01:00:10,860 variável fora do While a 10. 1176 01:00:10,860 --> 01:00:14,360 E então, basicamente, cada vez que você vai através do loop While, você imprime 1177 01:00:14,360 --> 01:00:19,090 a declaração e, em seguida, você diminui a contador variável até ao final, 1178 01:00:19,090 --> 01:00:23,020 em algum momento, uma vez que eu subtrair o suficiente vezes, 1 da I bastante vezes - 1179 01:00:23,020 --> 01:00:27,290 e só para esclarecer, eu minus minus Significa que é igual a que eu menos 1. 1180 01:00:27,290 --> 01:00:31,280 >> Isso vai trazer basicamente I até o ponto em que uma vez que eu chegar a zero, este 1181 01:00:31,280 --> 01:00:35,260 condição não é verdadeira e por isso sai fora do circuito. 1182 01:00:35,260 --> 01:00:37,045 Então, totalmente maluco só imprime 10 vezes. 1183 01:00:37,045 --> 01:00:39,550 1184 01:00:39,550 --> 01:00:41,080 Qualquer dúvida sobre um loop While? 1185 01:00:41,080 --> 01:00:44,580 1186 01:00:44,580 --> 01:00:46,790 OK. 1187 01:00:46,790 --> 01:00:50,550 >> Portanto, há uma maneira de fazer o que acabamos de fez de uma forma mais concisa com 1188 01:00:50,550 --> 01:00:51,715 o que chamamos de um loop For. 1189 01:00:51,715 --> 01:00:55,750 Então, um circuito para consiste numa inicialização, um estado, e um 1190 01:00:55,750 --> 01:00:58,950 atualização, assim como tínhamos antes neste loop While. 1191 01:00:58,950 --> 01:00:59,890 Então, vamos dar uma olhada. 1192 01:00:59,890 --> 01:01:02,900 Neste loop While, tivemos um inicialização, então nós tivemos um 1193 01:01:02,900 --> 01:01:04,260 condição de que fizemos o check. 1194 01:01:04,260 --> 01:01:06,450 E então nós tivemos uma atualização pisar no topo. 1195 01:01:06,450 --> 01:01:10,060 >> Com um loop For, isso leva basicamente essas três coisas e condensa-lo 1196 01:01:10,060 --> 01:01:11,370 para baixo em uma linha. 1197 01:01:11,370 --> 01:01:15,130 Então a primeira coisa que ele faz no Para loop é a inicialização. 1198 01:01:15,130 --> 01:01:19,090 E então você faz um ponto e vírgula, e, em seguida, você faz a condição, o que é que eu 1199 01:01:19,090 --> 01:01:22,200 maior que zero vai para lá, e, em seguida, a etapa de atualização. 1200 01:01:22,200 --> 01:01:26,470 Portanto, este fica realizada no final do corpo do laço. 1201 01:01:26,470 --> 01:01:28,790 Então, esses dois programas são essencialmente equivalente. 1202 01:01:28,790 --> 01:01:31,960 1203 01:01:31,960 --> 01:01:33,870 >> Alguma pergunta? 1204 01:01:33,870 --> 01:01:37,000 Então, o que é uma diferença entre esses dois? 1205 01:01:37,000 --> 01:01:38,000 Alguém pode indicá-lo? 1206 01:01:38,000 --> 01:01:40,480 Ele pode ser um pouco sutil. 1207 01:01:40,480 --> 01:01:41,930 É apenas uma diferença muito pequena. 1208 01:01:41,930 --> 01:01:42,330 Sim? 1209 01:01:42,330 --> 01:01:49,008 >> COLUNA 5: Você não seria capaz de usar a variável I, fora do loop For 1210 01:01:49,008 --> 01:01:49,962 [Inaudível]? 1211 01:01:49,962 --> 01:01:50,900 >> JOSÉ: Exatamente. 1212 01:01:50,900 --> 01:01:53,550 Então, isso é algo que nós vamos chegar a mais tarde chamado de escopo de variáveis. 1213 01:01:53,550 --> 01:01:56,610 Mas, essencialmente, este int vida I fora desse loop While. 1214 01:01:56,610 --> 01:01:59,800 Então, uma vez que este loop While é feito execução, eu vou ser capaz de usar, mais tarde, 1215 01:01:59,800 --> 01:02:00,880 em no programa. 1216 01:02:00,880 --> 01:02:05,430 >> Considerando que, com este loop, este int I tem como escopo dentro deste loop. 1217 01:02:05,430 --> 01:02:10,240 E porque é dentro desta parcela do circuito para, que inicia 1218 01:02:10,240 --> 01:02:13,200 nos parênteses e termina com a chaveta lá. 1219 01:02:13,200 --> 01:02:16,120 Qualquer coisa que é declarada dentro de aqui não pode ser utilizado no exterior. 1220 01:02:16,120 --> 01:02:20,420 Então, se eu tentar usar eu fora, ele vai diga-me, símbolo não declarado. 1221 01:02:20,420 --> 01:02:22,420 E, essencialmente, eu não faria ser capaz de usá-lo. 1222 01:02:22,420 --> 01:02:28,460 >> ROB: E bem, há 10 anos, em literalmente todos os casos, as chaves são 1223 01:02:28,460 --> 01:02:31,140 o que você usou para determinar o escopo de uma variável. 1224 01:02:31,140 --> 01:02:37,240 Então, lá dentro, int I é igual a 10 é declarada dentro deste 1225 01:02:37,240 --> 01:02:38,520 conjunto de chaves. 1226 01:02:38,520 --> 01:02:42,530 E então, enquanto você tentar usar I antes deste chaveta, tudo bem. 1227 01:02:42,530 --> 01:02:47,090 1228 01:02:47,090 --> 01:02:51,460 Você pode ver quando você digita make, você ver traço, traço, std, iguais, c99. 1229 01:02:51,460 --> 01:02:57,100 >> Então, essa é uma versão posterior do C que GCC implementou que também dá 1230 01:02:57,100 --> 01:02:58,740 este atalho. 1231 01:02:58,740 --> 01:03:03,505 Portanto, este utilizado para não ser permitido em C. E você pode ver por que, porque este int 1232 01:03:03,505 --> 01:03:07,600 I está fora deste chaveta mas ainda é considerado no 1233 01:03:07,600 --> 01:03:09,750 alcance dessas chaves. 1234 01:03:09,750 --> 01:03:14,120 Mas isso é uma coisa muito conveniente, e por isso é uma boa extensão. 1235 01:03:14,120 --> 01:03:15,370 >> JOSÉ: Alguma pergunta? 1236 01:03:15,370 --> 01:03:17,550 1237 01:03:17,550 --> 01:03:19,260 OK. 1238 01:03:19,260 --> 01:03:22,820 Então, o que é mais útil é que, por vezes, você quer tipo de dinamismo 1239 01:03:22,820 --> 01:03:23,410 seu ciclo, certo? 1240 01:03:23,410 --> 01:03:26,350 Você não quer apenas necessariamente imprimir totalmente maluco o tempo todo, você 1241 01:03:26,350 --> 01:03:28,650 quero contar para baixo de 10 ou algo assim. 1242 01:03:28,650 --> 01:03:32,010 E assim você pode usar a variável do contador dentro desse ciclo também. 1243 01:03:32,010 --> 01:03:35,530 E, neste caso, este programa apenas contagem regressiva de 10 todo o caminho. 1244 01:03:35,530 --> 01:03:39,260 E o que não imprime? 1245 01:03:39,260 --> 01:03:42,790 Não imprimir zero, direito, porque quando - 1246 01:03:42,790 --> 01:03:45,460 Sim, ele também não imprime 11. 1247 01:03:45,460 --> 01:03:49,200 >> Por isso, não imprimir zero, porque quando Eu é zero, lembre-se, ele avalia 1248 01:03:49,200 --> 01:03:52,170 a condição antes de entrar em para executar o corpo do loop. 1249 01:03:52,170 --> 01:03:56,820 E quando eu for zero, isso é falso, assim não imprimir em contagem regressiva 1250 01:03:56,820 --> 01:04:00,200 zero, ele só imprime contagem queda de 10 todo o caminho até a 1. 1251 01:04:00,200 --> 01:04:03,420 Se nós realmente queria para imprimir zero, então poderíamos colocar um sinal de igual 1252 01:04:03,420 --> 01:04:04,750 após este sinal de maior que. 1253 01:04:04,750 --> 01:04:09,400 1254 01:04:09,400 --> 01:04:10,130 OK. 1255 01:04:10,130 --> 01:04:16,410 >> Assim, uma maneira de fazer a validação de entrada, que é quando você pede que o usuário faça 1256 01:04:16,410 --> 01:04:18,620 alguma coisa, você quer ter certeza de que eles seguir suas instruções, é usar 1257 01:04:18,620 --> 01:04:19,400 o loop While, certo? 1258 01:04:19,400 --> 01:04:22,990 Portanto, neste caso particular, eu estou perguntando para um número positivo e, em seguida, eu sou 1259 01:04:22,990 --> 01:04:23,810 aguardando entrada. 1260 01:04:23,810 --> 01:04:28,210 >> E então eu chequei Enquanto a entrada é menor que zero, continuo a perguntar-lhes. 1261 01:04:28,210 --> 01:04:32,100 Então, enquanto eles me dão um número que não é positivo, continuo a perguntar, 1262 01:04:32,100 --> 01:04:33,600 continuo a perguntar, continuo a perguntar. 1263 01:04:33,600 --> 01:04:35,860 Mas o que é uma espécie de estranho sobre isso? 1264 01:04:35,860 --> 01:04:38,570 Ou o que não parece ideal sobre esta estrutura aqui? 1265 01:04:38,570 --> 01:04:44,282 1266 01:04:44,282 --> 01:04:44,758 Qualquer um? 1267 01:04:44,758 --> 01:04:45,234 Sim? 1268 01:04:45,234 --> 01:04:47,614 >> COLUNA 6: Você está repetindo a instrução de duas vezes. 1269 01:04:47,614 --> 01:04:48,100 >> JOSÉ: Certo. 1270 01:04:48,100 --> 01:04:50,090 Portanto, temos duas declarações printf aqui, certo? 1271 01:04:50,090 --> 01:04:53,440 Portanto, há uma maneira que nós poderíamos conseguir isso apenas até um que faria o nosso 1272 01:04:53,440 --> 01:04:57,170 código mais fácil de ler e um pouco mais limpo. 1273 01:04:57,170 --> 01:05:00,180 E, então, não teria que Entre em ter duas vezes também. 1274 01:05:00,180 --> 01:05:03,740 E uma forma de fazer isso é usando um loop do-while. 1275 01:05:03,740 --> 01:05:07,670 >> E um laço do-while é basicamente um forma diferente de um loop While onde 1276 01:05:07,670 --> 01:05:11,460 tudo o que está dentro de chaves é executado pelo menos uma vez. 1277 01:05:11,460 --> 01:05:14,840 Então, aqui, eu declaro, int de entrada, do lado de fora pela primeira vez. 1278 01:05:14,840 --> 01:05:18,100 E então eu acabei de dizer, fazer isso instrução enquanto a entrada 1279 01:05:18,100 --> 01:05:19,140 é menor do que zero. 1280 01:05:19,140 --> 01:05:20,530 Assim que atinge a fazer primeiro. 1281 01:05:20,530 --> 01:05:24,190 Ele sempre irá executar isso pelo menos uma vez, por isso sempre vai pedir o usuário 1282 01:05:24,190 --> 01:05:25,960 para a entrada de, pelo menos, uma vez. 1283 01:05:25,960 --> 01:05:29,390 E, em seguida, ele avalia que a entrada, e se passa em um círculo. 1284 01:05:29,390 --> 01:05:30,135 Sim, questionar? 1285 01:05:30,135 --> 01:05:32,602 >> COLUNA 6: Existe uma maneira de fazê-lo [Inaudível] tipos, como se diz, 1286 01:05:32,602 --> 01:05:34,268 GetString, e alguém [inaudível] 1287 01:05:34,268 --> 01:05:35,220 existe uma maneira de [inaudível] 1288 01:05:35,220 --> 01:05:40,060 >> JOSÉ: Então a pergunta é, existe um maneira de fazer a validação de entrada se o usuário 1289 01:05:40,060 --> 01:05:41,850 não colocar na direita tipo de variável? 1290 01:05:41,850 --> 01:05:44,460 Então, se nós pedimos para um int e eles dá-nos uma corda em seu lugar. 1291 01:05:44,460 --> 01:05:49,110 E nas funções que implementam para você, GetInt, GetString em todos 1292 01:05:49,110 --> 01:05:52,680 essas funções, eles realmente já fazer esse tipo de entrada de tipo básico 1293 01:05:52,680 --> 01:05:54,120 validação sob o capô. 1294 01:05:54,120 --> 01:05:57,390 Então, se você estiver usando as funções que lhe deu, você realmente não precisa. 1295 01:05:57,390 --> 01:06:01,380 >> Mas se você quiser olhar mais para como você pode realmente fazer isso, você pode olhar 1296 01:06:01,380 --> 01:06:03,360 sob o capô o arquivo I/O-- 1297 01:06:03,360 --> 01:06:07,990 não apresentar, as funções de E / S padrão como uma leitura da entrada padrão e 1298 01:06:07,990 --> 01:06:08,580 saída padrão. 1299 01:06:08,580 --> 01:06:10,630 E você pode ter uma noção melhor de como você pode fazer isso. 1300 01:06:10,630 --> 01:06:13,670 >> ROB: Uma questão, porém, é especificamente com o exemplo que você 1301 01:06:13,670 --> 01:06:17,070 disse, você espera uma string e eu entrar em um int. 1302 01:06:17,070 --> 01:06:20,110 Como você dizer a diferença entre intencionalmente querendo o 1303 01:06:20,110 --> 01:06:23,130 corda 123 contra querendo int 123? 1304 01:06:23,130 --> 01:06:29,230 Então corda, é praticamente não há nenhuma validação, é só o que eles 1305 01:06:29,230 --> 01:06:31,600 entrou você vai interpretar como uma string. 1306 01:06:31,600 --> 01:06:35,790 >> Int é mais fácil, porque não importa o entrada que você tomar a partir do usuário, você é 1307 01:06:35,790 --> 01:06:37,470 sempre levando uma corda. 1308 01:06:37,470 --> 01:06:40,650 E assim que a seqüência que você pode, então, verificar, são todos estes 1309 01:06:40,650 --> 01:06:44,218 dígitos numéricos, na verdade? 1310 01:06:44,218 --> 01:06:45,170 >> JOSÉ: OK. 1311 01:06:45,170 --> 01:06:46,420 Qualquer dúvida sobre um loop do-while? 1312 01:06:46,420 --> 01:06:49,170 >> ROB: Ah, e este é também - 1313 01:06:49,170 --> 01:06:55,130 voltando ao escopo, um tanto comum erro está tentando usar alguns locais 1314 01:06:55,130 --> 01:06:59,540 variável a partir desta do-while loop dentro desta condição. 1315 01:06:59,540 --> 01:07:02,850 E na verdade, se nós apenas se livrou de isso e disse, a entrada é igual a int 1316 01:07:02,850 --> 01:07:06,990 GetInt, em seguida, o compilador vai gritar com nos, porque a entrada não existe 1317 01:07:06,990 --> 01:07:08,900 fora do âmbito da estas chaves. 1318 01:07:08,900 --> 01:07:10,792 >> JOSÉ: E é por isso que preciso essa formação aqui. 1319 01:07:10,792 --> 01:07:13,620 1320 01:07:13,620 --> 01:07:14,630 OK. 1321 01:07:14,630 --> 01:07:17,530 Então, você também pode sair de um malha mais cedo se você quiser. 1322 01:07:17,530 --> 01:07:21,240 Portanto, esta é uma forma diferente de implementar o que acabamos implementado. 1323 01:07:21,240 --> 01:07:24,340 E em vez de usar a condição dentro dos parênteses, estamos usando um 1324 01:07:24,340 --> 01:07:26,920 Se declaração dentro do corpo do loop do-while. 1325 01:07:26,920 --> 01:07:30,000 >> E, basicamente, quando a entrada é finalmente maior do que zero, iremos 1326 01:07:30,000 --> 01:07:31,000 sair do loop. 1327 01:07:31,000 --> 01:07:33,420 E assim vamos todos o caminho até aqui. 1328 01:07:33,420 --> 01:07:37,920 E você pode ver que esta seria provavelmente ser preferível neste 1329 01:07:37,920 --> 01:07:39,870 cenário, porque é um pouco pouco mais limpo e um pouco 1330 01:07:39,870 --> 01:07:41,380 pouco mais fácil de ler. 1331 01:07:41,380 --> 01:07:45,210 Considerando isso, você espécie de ter linhas extra na mesma. 1332 01:07:45,210 --> 01:07:47,890 É apenas um pouco mais feio, Eu acho que, de certa forma. 1333 01:07:47,890 --> 01:07:48,530 Sim, questionar? 1334 01:07:48,530 --> 01:07:52,178 >> COLUNA 4: Será que quebrar só começar lo fora de um conjunto de chaves? 1335 01:07:52,178 --> 01:07:53,080 >> JOSÉ: Certo. 1336 01:07:53,080 --> 01:07:58,100 Então a questão é só quebrar tirá-lo de um loop? 1337 01:07:58,100 --> 01:07:59,280 E a resposta é sim. 1338 01:07:59,280 --> 01:08:04,290 Então, se você tiver aninhado For loops, para exemplo, se eu tenho para int I é igual a 0 1339 01:08:04,290 --> 01:08:09,040 até o dia 10 e, em seguida, para int J é igual a 0 até o dia 10, se eu sair do interior 1340 01:08:09,040 --> 01:08:12,310 loop, eu ainda irei para o circuito externo. 1341 01:08:12,310 --> 01:08:15,760 Por isso, vou continuar realizando o operações do lado de fora. 1342 01:08:15,760 --> 01:08:17,640 Qualquer dúvida sobre isso? 1343 01:08:17,640 --> 01:08:18,000 Sim? 1344 01:08:18,000 --> 01:08:21,760 >> COLUNA 5: Mas quebrar apenas as funções para chaves, não para o outro 1345 01:08:21,760 --> 01:08:22,230 declarações? 1346 01:08:22,230 --> 01:08:22,700 [Inaudível] 1347 01:08:22,700 --> 01:08:27,620 >> JOSÉ: Então a questão é vai quebrar única função para loops em oposição a 1348 01:08:27,620 --> 01:08:29,014 outras declarações, como se? 1349 01:08:29,014 --> 01:08:32,950 E sim, esse é o caso, porque você está quebrando fora de um loop, direito, 1350 01:08:32,950 --> 01:08:33,630 em um sentido. 1351 01:08:33,630 --> 01:08:37,215 >> ROB: Na grande maioria dos casos, é este é o tipo de Se algo, 1352 01:08:37,215 --> 01:08:37,660 em seguida, quebrar. 1353 01:08:37,660 --> 01:08:41,580 Então você não tem que quebrar a aplicar-se Se o que está envolvendo em torno dele. 1354 01:08:41,580 --> 01:08:45,250 E também, isso não é muito de um loop, mas lembre-se de que os interruptores são também 1355 01:08:45,250 --> 01:08:46,340 quebrado de por pausas. 1356 01:08:46,340 --> 01:08:48,390 Vimos breaks sendo usado com interruptores antes. 1357 01:08:48,390 --> 01:08:52,189 >> JOSÉ: E você também pode usá-los em loops while e for loops. 1358 01:08:52,189 --> 01:08:54,560 Alguma pergunta? 1359 01:08:54,560 --> 01:08:55,830 OK. 1360 01:08:55,830 --> 01:08:57,779 Assim, no próximo up é funções. 1361 01:08:57,779 --> 01:09:01,500 Assim, você pode ter usado um destes BYOB blocos em seu projeto do zero. 1362 01:09:01,500 --> 01:09:04,569 E isto permite basicamente definir um conjunto de 1363 01:09:04,569 --> 01:09:05,680 instruções a serem seguidas. 1364 01:09:05,680 --> 01:09:09,569 >> E o que quero dizer com isto é, vamos pensar de volta à matemática, à direita, álgebra. 1365 01:09:09,569 --> 01:09:13,370 Você tem o que chamamos de uma função de x, alguma variável, e vamos dizer isso 1366 01:09:13,370 --> 01:09:16,080 função é f de x é igual a x + 5. 1367 01:09:16,080 --> 01:09:20,410 Então você pode pensar f de x como este preto caixa que leva 15 e, em seguida, 1368 01:09:20,410 --> 01:09:22,590 produz 20. 1369 01:09:22,590 --> 01:09:26,630 >> Assim, mais geralmente, é uma função algo que leva alguns insumos e 1370 01:09:26,630 --> 01:09:27,880 em seguida, produz algumas saídas. 1371 01:09:27,880 --> 01:09:31,920 1372 01:09:31,920 --> 01:09:32,960 E por que são funções bem? 1373 01:09:32,960 --> 01:09:35,189 Eles são bons para uma série de razões. 1374 01:09:35,189 --> 01:09:40,470 Assim é que alguém quer tomar uma facada o que significa organização? 1375 01:09:40,470 --> 01:09:42,630 Em termos da razão pela qual as funções são úteis? 1376 01:09:42,630 --> 01:09:43,090 Sim? 1377 01:09:43,090 --> 01:09:44,735 >> COLUNA 4: Faz o seu código mais legível. 1378 01:09:44,735 --> 01:09:45,399 >> JOSÉ: Certo. 1379 01:09:45,399 --> 01:09:47,670 Então, uma das coisas é que faz seu código mais legível, certo? 1380 01:09:47,670 --> 01:09:53,710 Em vez de ter como int x é igual a x vezes x vezes x, eu posso ter cubo de x, 1381 01:09:53,710 --> 01:09:57,190 que é mais legível e mais compreensível para um leitor. 1382 01:09:57,190 --> 01:10:01,150 >> Organização também é em termos de dividindo-se o seu código em gerenciável 1383 01:10:01,150 --> 01:10:05,610 porções, de modo que, em vez de tentar implementar isso tudo em uma longa seção 1384 01:10:05,610 --> 01:10:09,070 na principal, você pode classificar de dividi-la em como, OK, vamos escrever uma função 1385 01:10:09,070 --> 01:10:11,910 ao cubo alguma coisa, vamos escrever um funcionar a quadratura algo. 1386 01:10:11,910 --> 01:10:15,950 Dessa forma, você pode dividi-la em minúsculo, pequenas partes que você pode enfrentar 1387 01:10:15,950 --> 01:10:18,944 ao contrário de tentar resolver um grande problema de uma só vez. 1388 01:10:18,944 --> 01:10:21,806 >> ROB: Ou até mesmo pequenas, pequenas peças que você e um parceiro pode enfrentar. 1389 01:10:21,806 --> 01:10:22,283 >> JOSÉ: É. 1390 01:10:22,283 --> 01:10:23,855 >> ROB: Então, em vez de ambos Você está tentando implantar um 1391 01:10:23,855 --> 01:10:27,170 funcionar ao mesmo tempo. 1392 01:10:27,170 --> 01:10:28,800 >> JOSÉ: Simplificação. 1393 01:10:28,800 --> 01:10:30,050 Alguém quer dar um palpite? 1394 01:10:30,050 --> 01:10:33,080 1395 01:10:33,080 --> 01:10:33,410 Sim? 1396 01:10:33,410 --> 01:10:34,675 >> COLUNA 5: Mais repetição. 1397 01:10:34,675 --> 01:10:35,260 >> JOSÉ: Certo. 1398 01:10:35,260 --> 01:10:39,210 Então, uma coisa que você pode fazer com simplificação é que ele é uma espécie de em 1399 01:10:39,210 --> 01:10:42,520 no mesmo sentido como reutilização é que uma vez que eu escrever uma função cubo, eu posso 1400 01:10:42,520 --> 01:10:45,410 é só usar que mais e mais e mais novamente no meu programa em vez de digitar 1401 01:10:45,410 --> 01:10:49,610 x vezes x vezes x mais e uma e outra vez. 1402 01:10:49,610 --> 01:10:52,980 E simplificação aqui também só significa que ele faz seu tipo de código 1403 01:10:52,980 --> 01:10:55,900 mais fácil de depurar uma vez que você dividir este se em funções. 1404 01:10:55,900 --> 01:10:58,250 Porque então você pode localizar onde seus problemas espécie de são. 1405 01:10:58,250 --> 01:11:00,910 1406 01:11:00,910 --> 01:11:02,160 Alguma pergunta? 1407 01:11:02,160 --> 01:11:04,200 1408 01:11:04,200 --> 01:11:06,540 >> Assim, uma outra idéia é abstração, certo? 1409 01:11:06,540 --> 01:11:07,390 Esta caixa preta. 1410 01:11:07,390 --> 01:11:11,360 Como você sabe o que faz GetInt para receber a entrada do usuário? 1411 01:11:11,360 --> 01:11:12,510 Nós realmente não disse a você, certo? 1412 01:11:12,510 --> 01:11:15,670 Tudo o que disse é GetInt faz exatamente o que diz que faz. 1413 01:11:15,670 --> 01:11:18,440 Assim, mesmo que não lhe dizem como ele funciona, você ainda sabe. 1414 01:11:18,440 --> 01:11:21,670 >> Portanto, neste caso particular, este é uma função quádruplo que faz 1415 01:11:21,670 --> 01:11:24,520 coisas diferentes para uma entrada para produzir uma saída. 1416 01:11:24,520 --> 01:11:28,050 E você pode quadruplicar um número pela multiplicação por quatro. 1417 01:11:28,050 --> 01:11:30,790 Ou você pode o que nós chamamos bit transferi-lo por dois. 1418 01:11:30,790 --> 01:11:32,960 E nós vamos cobrir este um pouco mais tarde. 1419 01:11:32,960 --> 01:11:36,570 E não há necessidade de saber como esta função realmente funciona, desde que 1420 01:11:36,570 --> 01:11:37,640 funciona como indicado. 1421 01:11:37,640 --> 01:11:40,740 >> Assim, sob o capô, que eu poderia ser como, o retorno vezes entrada 1422 01:11:40,740 --> 01:11:41,690 oito dividido por dois. 1423 01:11:41,690 --> 01:11:42,510 E você não sabe, né? 1424 01:11:42,510 --> 01:11:44,970 Tudo o que você precisa saber é ele faz o que diz. 1425 01:11:44,970 --> 01:11:48,070 Então essa é a coisa útil cerca de abstração. 1426 01:11:48,070 --> 01:11:52,910 >> E outra coisa é uma espécie de esta idéia de localizar o código para um 1427 01:11:52,910 --> 01:11:54,280 especial seção. 1428 01:11:54,280 --> 01:11:57,450 Então, se você tem um problema, você não tem que ir todo o seu código tentando 1429 01:11:57,450 --> 01:11:58,730 para corrigir onde era o problema. 1430 01:11:58,730 --> 01:12:00,990 Portanto, neste caso, eu implementei cubo errado. 1431 01:12:00,990 --> 01:12:02,820 Pensei cubo foi multiplicando por três. 1432 01:12:02,820 --> 01:12:05,760 >> Portanto, neste caso, este é um programa que acaba de multiplicar por três 1433 01:12:05,760 --> 01:12:06,750 em todos os lugares. 1434 01:12:06,750 --> 01:12:10,910 E há outro programa que tem cubo fatorados em uma função. 1435 01:12:10,910 --> 01:12:14,040 E agora, se eu quiser corrigir o meu erro aqui, eu tenho que corrigir cada linha 1436 01:12:14,040 --> 01:12:15,620 de código neste programa. 1437 01:12:15,620 --> 01:12:19,190 Considerando, por outro lado, se eu usar o função, eu só preciso de mudar 1438 01:12:19,190 --> 01:12:20,650 o que estava errado em um só lugar. 1439 01:12:20,650 --> 01:12:25,330 1440 01:12:25,330 --> 01:12:28,730 >> Assim, em ciência da computação, que chamar entradas e saídas. 1441 01:12:28,730 --> 01:12:31,640 As entradas são chamados de parâmetros ou argumentos, e as saídas são chamados 1442 01:12:31,640 --> 01:12:32,950 valores de retorno. 1443 01:12:32,950 --> 01:12:39,000 E vamos ver como isso nos ajuda a resolver de definir uma função em um segundo. 1444 01:12:39,000 --> 01:12:41,430 Portanto, esta é uma definição de função para cubagem. 1445 01:12:41,430 --> 01:12:45,110 Por isso, leva uma entrada, e, em seguida, ele retorna esse número vezes 1446 01:12:45,110 --> 01:12:47,020 si três vezes. 1447 01:12:47,020 --> 01:12:48,020 Então, vamos decompô-lo. 1448 01:12:48,020 --> 01:12:53,090 >> Portanto, temos um cabeçalho de função, que consiste basicamente de três coisas. 1449 01:12:53,090 --> 01:12:56,050 Portanto, temos os parâmetros, que são, como eu disse antes, o 1450 01:12:56,050 --> 01:12:57,680 contributos para esta função. 1451 01:12:57,680 --> 01:12:59,300 E então damos a função de um nome. 1452 01:12:59,300 --> 01:13:00,740 Neste caso, ele é chamado de cubo. 1453 01:13:00,740 --> 01:13:03,860 E, então, especificar qual o tipo de do valor de retorno é. 1454 01:13:03,860 --> 01:13:06,760 >> Portanto, neste caso, a minha função cubo toma em um número inteiro e é também 1455 01:13:06,760 --> 01:13:07,890 retorna um inteiro. 1456 01:13:07,890 --> 01:13:11,510 Então, se eu passar em dois, dois é um número inteiro, ele retorna oito para mim, o que 1457 01:13:11,510 --> 01:13:13,250 é um número inteiro. 1458 01:13:13,250 --> 01:13:15,420 Então retornar parâmetros nome do tipo. 1459 01:13:15,420 --> 01:13:16,670 Perguntas sobre isso? 1460 01:13:16,670 --> 01:13:19,440 1461 01:13:19,440 --> 01:13:24,230 >> E, em seguida, o valor de retorno é realmente especificado no final dizendo retorno 1462 01:13:24,230 --> 01:13:27,540 e, em seguida, retornar o que quer contém o valor de retorno. 1463 01:13:27,540 --> 01:13:30,940 Portanto, neste caso, se colocarmos tudo em conjunto, uma função leva em 1464 01:13:30,940 --> 01:13:35,100 parâmetros, é chamado de alguma coisa, e ele retorna algo que é do tipo 1465 01:13:35,100 --> 01:13:36,350 que dizer que ia ser. 1466 01:13:36,350 --> 01:13:39,830 1467 01:13:39,830 --> 01:13:41,080 Alguma pergunta? 1468 01:13:41,080 --> 01:13:43,710 1469 01:13:43,710 --> 01:13:45,080 >> Então, como vamos usar uma função? 1470 01:13:45,080 --> 01:13:49,230 Bem, nós escrevemos uma função e, em seguida, podemos usá-lo em nosso programa, certo? 1471 01:13:49,230 --> 01:13:51,565 Então eu liguei para ele cubo, e então eu posso usar cubo. 1472 01:13:51,565 --> 01:13:54,200 >> Mas o que é importante notar é que as questões de ordem. 1473 01:13:54,200 --> 01:13:58,100 Se eu tiver cubo abaixo principal, é indo funcionar em cubo. 1474 01:13:58,100 --> 01:14:00,360 E, neste ponto, não há nada chamado cubo no programa, e é 1475 01:14:00,360 --> 01:14:02,550 só vai ser assim, eu tenho idéia do que é cubo. 1476 01:14:02,550 --> 01:14:05,060 >> Então, ele vai dizer, implícita declaração de função. 1477 01:14:05,060 --> 01:14:06,690 Esse é o erro que aparece. 1478 01:14:06,690 --> 01:14:10,230 E assim, neste caso, o cubo está abaixo principal, por isso não está acontecendo 1479 01:14:10,230 --> 01:14:12,006 para saber sobre ele. 1480 01:14:12,006 --> 01:14:14,724 >> COLUNA 5: Assim principal é normalmente a última função definida? 1481 01:14:14,724 --> 01:14:17,290 >> JOSÉ: Então a questão é, é o principal geralmente a última 1482 01:14:17,290 --> 01:14:18,170 coisa que você definir? 1483 01:14:18,170 --> 01:14:19,730 E não. 1484 01:14:19,730 --> 01:14:22,280 É porque normalmente temos como principal para estar no topo, certo? 1485 01:14:22,280 --> 01:14:24,640 Porque essa é a primeira coisa que você quer abrir o programador a 1486 01:14:24,640 --> 01:14:25,640 programa para ver. 1487 01:14:25,640 --> 01:14:29,950 E assim, como é que vamos resolver esta questão de nós quer principal para estar no topo, mas o 1488 01:14:29,950 --> 01:14:33,750 funções que queremos, queremos que eles ser inferior a principal ainda ser capaz de usar 1489 01:14:33,750 --> 01:14:34,930 los dentro de principal? 1490 01:14:34,930 --> 01:14:36,870 >> Bem, nós usamos o que chamamos um protótipo de função. 1491 01:14:36,870 --> 01:14:40,830 Então, o que um protótipo de função essencialmente se é que primeiro tem que 1492 01:14:40,830 --> 01:14:45,060 a assinatura ou a função header do que queremos implementar para baixo 1493 01:14:45,060 --> 01:14:47,420 aqui, e vamos colocá-la em o início de um programa. 1494 01:14:47,420 --> 01:14:51,400 >> Portanto, neste caso, dizemos que, bem, mais tarde, no nosso programa, nós vamos 1495 01:14:51,400 --> 01:14:55,010 fazer uma promessa para implementar esta função chamada int cubo, o que leva 1496 01:14:55,010 --> 01:14:56,260 uma entrada inteira. 1497 01:14:56,260 --> 01:15:00,870 Então, agora, porque isso está acima de principal, principal, ele vai dizer, oh, bem, 1498 01:15:00,870 --> 01:15:03,910 mais tarde no programa, que vai ser lá para que eu possa consultá-la, então eu vou 1499 01:15:03,910 --> 01:15:05,230 apenas deixá-lo passar por agora. 1500 01:15:05,230 --> 01:15:07,660 >> E, em seguida, na parte inferior, implementamos cubo. 1501 01:15:07,660 --> 01:15:11,180 E então principal será apenas dizer, bem, ele irá classificar de ligação 1502 01:15:11,180 --> 01:15:12,250 estes dois símbolos em conjunto. 1503 01:15:12,250 --> 01:15:14,320 E nós vamos cobrir o que isso significa mais tarde. 1504 01:15:14,320 --> 01:15:17,090 E assim vai saber que este é o função cubo que ele deve usar. 1505 01:15:17,090 --> 01:15:19,630 1506 01:15:19,630 --> 01:15:23,383 >> ROB: O [inaudível] sobre querer principal na parte inferior ou 1507 01:15:23,383 --> 01:15:24,880 top, eu vi os dois. 1508 01:15:24,880 --> 01:15:28,630 Há coisas que simplesmente gostam colocar principal na parte inferior. 1509 01:15:28,630 --> 01:15:32,520 Mas uma vez que um projeto fica particularmente grande, geralmente principal está em um 1510 01:15:32,520 --> 01:15:34,290 arquivo próprio. 1511 01:15:34,290 --> 01:15:38,170 E nesse ponto, como o linha cubo int seria - 1512 01:15:38,170 --> 01:15:42,460 dentro de stdio.h são um bando de linhas apenas como aquele int 1513 01:15:42,460 --> 01:15:44,010 linha de entrada cubo int. 1514 01:15:44,010 --> 01:15:50,170 >> E para que esses protótipos são coisas que você tendem a colocar em arquivos de cabeçalho, em 1515 01:15:50,170 --> 01:15:52,140 Nesse ponto, não importa. 1516 01:15:52,140 --> 01:15:54,700 Bem, não importa. 1517 01:15:54,700 --> 01:15:56,070 Aqueles sempre ir no topo. 1518 01:15:56,070 --> 01:15:59,490 E se principal não é um arquivo próprio, você não precisa se preocupar em colocar 1519 01:15:59,490 --> 01:16:02,360 protótipos de funções individuais no arquivo. 1520 01:16:02,360 --> 01:16:05,370 >> JOSÉ: E nós vamos chegar a isso um pouco pouco mais tarde, quando Rob começa a falar 1521 01:16:05,370 --> 01:16:06,380 sobre a compilação. 1522 01:16:06,380 --> 01:16:09,480 E assim também há uma diferença entre parâmetro e argumento. 1523 01:16:09,480 --> 01:16:12,500 E parâmetro é apenas o que nós chamamos esses insumos quando 1524 01:16:12,500 --> 01:16:13,820 definimos a função. 1525 01:16:13,820 --> 01:16:16,950 E chamamos isso de um argumento quando realmente passá-lo para a função. 1526 01:16:16,950 --> 01:16:19,600 >> Portanto, neste caso, este é um parâmetro, como dissemos antes. 1527 01:16:19,600 --> 01:16:24,130 E quando nós realmente usá-lo de lá, cubo de x, então X em si é 1528 01:16:24,130 --> 01:16:25,910 o que chamamos de um argumento ao cubo função. 1529 01:16:25,910 --> 01:16:28,150 >> ROB: Então os argumentos de parâmetros são - 1530 01:16:28,150 --> 01:16:33,270 há esta distinção, muito confundida alternadamente. 1531 01:16:33,270 --> 01:16:37,090 Neste momento, para mim, é como um dos aquelas palavras que, quando eu vê-lo em 1532 01:16:37,090 --> 01:16:41,190 o selvagem, eu não posso ajudar, mas imediatamente questão de saber se eles estão usando-o em 1533 01:16:41,190 --> 01:16:44,120 no contexto correcto, porque o diferença é sutil o suficiente para que apenas 1534 01:16:44,120 --> 01:16:45,500 todos tendem - 1535 01:16:45,500 --> 01:16:48,530 Eu quase sempre digo argumento independentemente do que quero dizer. 1536 01:16:48,530 --> 01:16:51,230 1537 01:16:51,230 --> 01:16:54,630 >> José; e funções também são úteis para o que chamamos de efeitos colaterais. 1538 01:16:54,630 --> 01:16:59,230 Assim, uma função pode tomar nenhuma entrada, e ele também pode produzir nenhuma saída. 1539 01:16:59,230 --> 01:17:03,280 Portanto, neste caso particular, eu sou definição de uma sub-rotina que não tem nenhuma 1540 01:17:03,280 --> 01:17:03,970 valor de retorno. 1541 01:17:03,970 --> 01:17:07,730 E, a fim de especificar que, utilizamos o que chamamos de um vazio aqui. 1542 01:17:07,730 --> 01:17:10,890 E assim, o efeito colateral dessa função é que ele só imprime o material 1543 01:17:10,890 --> 01:17:11,920 para a página. 1544 01:17:11,920 --> 01:17:13,840 Na verdade, não tomar qualquer insumos, e isso não acontece 1545 01:17:13,840 --> 01:17:15,360 realmente produzir quaisquer saídas. 1546 01:17:15,360 --> 01:17:18,230 >> Mas isso pode ser útil no sentido se você quiser, por exemplo, debug 1547 01:17:18,230 --> 01:17:21,530 algo em seu programa, se você quiser para escrever um pouco sub-rotina que 1548 01:17:21,530 --> 01:17:25,160 imprime, vamos dizer, o conteúdo de memória ou algo assim. 1549 01:17:25,160 --> 01:17:29,800 E assim, estes efeitos secundários são, por vezes, útil, fora do contexto 1550 01:17:29,800 --> 01:17:33,010 só gostaria de entradas e saídas. 1551 01:17:33,010 --> 01:17:34,260 Alguma pergunta? 1552 01:17:34,260 --> 01:17:37,270 1553 01:17:37,270 --> 01:17:44,240 >> E para terminar este segmento particular, o que este programa faz? 1554 01:17:44,240 --> 01:17:47,420 Eu vou dar a vocês um par de segundos para lê-lo. 1555 01:17:47,420 --> 01:17:52,720 1556 01:17:52,720 --> 01:17:56,880 Em um nível muito básico, o que queremos dizer é que ele troca x e y, certo? 1557 01:17:56,880 --> 01:18:00,090 >> Então, como muitos de vocês realmente pensam isso vai trocar x e y? 1558 01:18:00,090 --> 01:18:02,160 Levante sua mão. 1559 01:18:02,160 --> 01:18:02,760 Ninguém. 1560 01:18:02,760 --> 01:18:03,070 OK. 1561 01:18:03,070 --> 01:18:06,720 Quem pensa que ele vai não trocar x e y? 1562 01:18:06,720 --> 01:18:09,120 E a soma de que era não o quarto inteiro. 1563 01:18:09,120 --> 01:18:10,440 Por isso, algumas pessoas não tem certeza. 1564 01:18:10,440 --> 01:18:10,920 OK. 1565 01:18:10,920 --> 01:18:11,630 Isso é razoável. 1566 01:18:11,630 --> 01:18:16,450 >> Então, vamos passar pelo que acontece quando você realmente chamar funções pela primeira vez em 1567 01:18:16,450 --> 01:18:18,320 Para responder a esta pergunta. 1568 01:18:18,320 --> 01:18:21,430 Então, isso é o que a memória tipo de parece. 1569 01:18:21,430 --> 01:18:23,860 Este é mais ou menos como um modelo simplificado memória do que parece quando 1570 01:18:23,860 --> 01:18:24,800 você executar um programa. 1571 01:18:24,800 --> 01:18:27,270 Portanto, há algo chamado a pilha para baixo aqui e 1572 01:18:27,270 --> 01:18:28,330 algo chamado de heap. 1573 01:18:28,330 --> 01:18:30,950 E estes crescem em direção o meio de memória. 1574 01:18:30,950 --> 01:18:33,860 >> Portanto, neste caso particular, quando você chamar uma função, ele 1575 01:18:33,860 --> 01:18:35,680 é colocado na pilha. 1576 01:18:35,680 --> 01:18:38,900 E então o que está contido no que função permanece no que chamamos de que 1577 01:18:38,900 --> 01:18:40,550 stack frame da função. 1578 01:18:40,550 --> 01:18:44,500 E assim, para obter um bom visualização de isso, vamos - por exemplo, tivemos a 1579 01:18:44,500 --> 01:18:45,960 programa principal antes. 1580 01:18:45,960 --> 01:18:47,820 E dentro do principal, que chamamos de cubo. 1581 01:18:47,820 --> 01:18:50,650 Assim principal seria primeiro vão para a pilha enquadrar, porque é a primeira função 1582 01:18:50,650 --> 01:18:51,640 que é chamado. 1583 01:18:51,640 --> 01:18:55,740 >> E então, quando cubo é chamado dentro de principal, que é colocado no topo da principal 1584 01:18:55,740 --> 01:18:57,790 dentro da memória. 1585 01:18:57,790 --> 01:19:02,090 Então, o que você vai notar é que cubo tem os seus próprios parâmetros e sua 1586 01:19:02,090 --> 01:19:02,950 próprios moradores. 1587 01:19:02,950 --> 01:19:06,720 Então, quando você realmente passar alguma coisa para uma função, os parâmetros que ela 1588 01:19:06,720 --> 01:19:09,910 se são cópias do que foi passado do principal. 1589 01:19:09,910 --> 01:19:14,140 >> E a sorte de explicar isso, vamos caminhar por um programa. 1590 01:19:14,140 --> 01:19:16,960 Portanto, temos a pilha, o que é apenas a parte da pilha. 1591 01:19:16,960 --> 01:19:21,240 E o que nós fazemos é primeiro inicializar x e y de um e dois. 1592 01:19:21,240 --> 01:19:22,400 Portanto, temos essas pequenas caixas. 1593 01:19:22,400 --> 01:19:25,310 Eles estão sentados na pilha do principal enquadrar na pilha. 1594 01:19:25,310 --> 01:19:26,580 Eles contêm um e dois. 1595 01:19:26,580 --> 01:19:28,820 >> Agora chamamos swap. 1596 01:19:28,820 --> 01:19:33,940 O que acontece é que passamos x e y em swap, e swap cria suas próprias cópias 1597 01:19:33,940 --> 01:19:36,520 dessas variáveis ​​para usar dentro de seu quadro de pilha. 1598 01:19:36,520 --> 01:19:39,920 Então agora lá, temos, um que contém o valor que tinha x e b, 1599 01:19:39,920 --> 01:19:41,620 que contém o valor que tinha y. 1600 01:19:41,620 --> 01:19:42,670 Então, um, dois. 1601 01:19:42,670 --> 01:19:47,130 >> E você vai perceber que este é separado de x e y dentro do principal. 1602 01:19:47,130 --> 01:19:51,390 Assim, temos agora criar um temporário variável contenha um. 1603 01:19:51,390 --> 01:19:56,100 Nós definimos um igual a b, por isso mudanças de um para dois. 1604 01:19:56,100 --> 01:19:59,340 E, então, definir b igual a temperatura, o que é um. 1605 01:19:59,340 --> 01:20:01,640 >> E então agora vamos sair desta função. 1606 01:20:01,640 --> 01:20:04,310 1607 01:20:04,310 --> 01:20:07,410 Quando você sair da função, o quadro de pilha fica retirado da pilha. 1608 01:20:07,410 --> 01:20:08,270 Chamamos-lhe empurrar. 1609 01:20:08,270 --> 01:20:12,750 Você aperta um quadro de pilha para a pilha e você pop se fora da pilha. 1610 01:20:12,750 --> 01:20:16,080 E então o que acontece é que tudo o que Foi nesse quadro de pilha tipo de apenas 1611 01:20:16,080 --> 01:20:17,280 sobe em chamas. 1612 01:20:17,280 --> 01:20:19,180 E para que não mais existe. 1613 01:20:19,180 --> 01:20:20,470 >> Mas o que percebemos? 1614 01:20:20,470 --> 01:20:23,690 Nós nunca realmente mudou o valores de x e y, certo? 1615 01:20:23,690 --> 01:20:26,530 Portanto, aqueles permaneceu local para principal. 1616 01:20:26,530 --> 01:20:29,900 E, passando as coisas em troca, nós na verdade nunca mudou esses valores. 1617 01:20:29,900 --> 01:20:31,260 E o que nós chamamos isso? 1618 01:20:31,260 --> 01:20:33,040 Chamamos isso de passagem por valor. 1619 01:20:33,040 --> 01:20:36,860 >> Assim, no C, quando você passa as coisas em funções, passa-los por valor e 1620 01:20:36,860 --> 01:20:40,160 faz uma cópia deles para a função de usar. 1621 01:20:40,160 --> 01:20:43,980 E nós vamos aprender sobre algo chamado passagem por referência mais tarde, mas isso é 1622 01:20:43,980 --> 01:20:45,390 uma maneira que você pode resolver este problema. 1623 01:20:45,390 --> 01:20:47,080 Mas não vai se preocupar com que até mais tarde. 1624 01:20:47,080 --> 01:20:52,200 >> ROB: E na verdade, esse termo, que passa por referência, então C não tem sequer 1625 01:20:52,200 --> 01:20:54,270 passando pela referência. 1626 01:20:54,270 --> 01:20:56,760 C exclusivamente tem passagem por valor. 1627 01:20:56,760 --> 01:20:59,630 Não importa o que você faz, você está sempre passando uma cópia de algo. 1628 01:20:59,630 --> 01:21:03,395 É que, como eu meio que mencionei que antes com ponteiros 1629 01:21:03,395 --> 01:21:07,690 e que uma string é realmente apenas quatro bytes apontando para um lugar na memória. 1630 01:21:07,690 --> 01:21:11,890 >> Bem, se eu tiver essa string e é me dizendo que é onde a string - 1631 01:21:11,890 --> 01:21:15,470 bem, se eu tiver esse ponteiro para este colocar na memória, então eu posso passar um 1632 01:21:15,470 --> 01:21:19,160 cópia do ponteiro para uma função e que a função ainda sabe onde em 1633 01:21:19,160 --> 01:21:19,780 memória que é. 1634 01:21:19,780 --> 01:21:22,950 Então, esses dois ponteiros estão apontando para o mesmo lugar na memória, e 1635 01:21:22,950 --> 01:21:26,460 é assim que nós vamos ser capazes para modificar as coisas para além da 1636 01:21:26,460 --> 01:21:29,852 quadro de pilha atual. 1637 01:21:29,852 --> 01:21:31,040 >> JOSÉ: Você quer fazer a compilação? 1638 01:21:31,040 --> 01:21:31,820 >> ROB: Não, é 5:30. 1639 01:21:31,820 --> 01:21:32,910 >> JOSÉ: OK. 1640 01:21:32,910 --> 01:21:35,040 É 5:30. 1641 01:21:35,040 --> 01:21:35,360 OK. 1642 01:21:35,360 --> 01:21:39,280 Então, vamos cobrir a compilação eu acho que em a próxima seção, ou a sua seção 1643 01:21:39,280 --> 01:21:42,795 líder vontade naquele ponto. 1644 01:21:42,795 --> 01:21:43,272 E - 1645 01:21:43,272 --> 01:21:44,630 >> ROB: Alguma pergunta? 1646 01:21:44,630 --> 01:21:46,760 >> JOSÉ: Alguma pergunta? 1647 01:21:46,760 --> 01:21:47,150 Sim? 1648 01:21:47,150 --> 01:21:52,469 >> COLUNA 5: Usando cordas de CS50, qualquer funções que deseja usar para 1649 01:21:52,469 --> 01:21:53,880 aqueles, que vai ser como funções C. 1650 01:21:53,880 --> 01:21:59,050 CS50 não passou e fez qualquer adicional. 1651 01:21:59,050 --> 01:22:01,850 >> ROB: Correto. 1652 01:22:01,850 --> 01:22:08,155 Qualquer um dos C como [inaudível], você usaria aqueles em nossas cadeias. 1653 01:22:08,155 --> 01:22:12,400 >> JOSÉ: E uma última coisa que eu quero menção é que nós temos um guia de estilo 1654 01:22:12,400 --> 01:22:13,130 para esta classe. 1655 01:22:13,130 --> 01:22:13,360 >> ROB: Ah, sim. 1656 01:22:13,360 --> 01:22:15,270 >> JOSÉ: Então, se você veio de um programação fundo antes, você 1657 01:22:15,270 --> 01:22:17,750 pode ter certas convenções quando você está escrevendo código como colocar 1658 01:22:17,750 --> 01:22:20,950 chaves na mesma linha ou especial formas de recuar 1659 01:22:20,950 --> 01:22:22,240 ou nomear suas variáveis. 1660 01:22:22,240 --> 01:22:26,870 Nesta classe, queremos seguir um guia de estilo específico, apenas porque, 1661 01:22:26,870 --> 01:22:31,100 Bem, se você sair e trabalhar em indústria, você vai ser esperado 1662 01:22:31,100 --> 01:22:34,780 a seguir o guia de estilo da empresa em que você vai. 1663 01:22:34,780 --> 01:22:38,040 >> Como por exemplo, o Facebook eu acho tem um tipo particular de nomear 1664 01:22:38,040 --> 01:22:38,760 convenção. 1665 01:22:38,760 --> 01:22:42,570 E há diferenças entre camelo variáveis ​​da carcaça e, assim como 1666 01:22:42,570 --> 01:22:44,610 separando-os com sublinhados. 1667 01:22:44,610 --> 01:22:52,170 E também, eu acho que o mais importante, como por exemplo, o recuo, certo? 1668 01:22:52,170 --> 01:22:56,440 >> Nós chaves começar onde a condição, e eles 1669 01:22:56,440 --> 01:22:57,730 estão na linha seguinte. 1670 01:22:57,730 --> 01:23:01,230 E nós também colocar chaves em mesmo que seja apenas uma linha. 1671 01:23:01,230 --> 01:23:06,100 E um monte de vezes, existem maneiras de fazer lo onde você pode deixar essas chaves 1672 01:23:06,100 --> 01:23:08,380 fora se é apenas uma linha sob a instrução If. 1673 01:23:08,380 --> 01:23:12,070 Mas nesta classe, queremos seguir um guia de estilo específico apenas para que você obtenha 1674 01:23:12,070 --> 01:23:13,550 usado para esse tipo de coisa. 1675 01:23:13,550 --> 01:23:16,410 >> ROB: Sim, e estilo dos anos 50 vai fazer cumprir este guia de estilo, e estamos 1676 01:23:16,410 --> 01:23:18,080 vai usar estilo dos anos 50 para grau de seu código. 1677 01:23:18,080 --> 01:23:25,150 Por isso, faz as coisas mais fáceis para nós e esperemos que não deve fazer coisas que 1678 01:23:25,150 --> 01:23:30,120 muito pior para você, dada a estilo padronizado não deve ser tão 1679 01:23:30,120 --> 01:23:31,460 irrealista. 1680 01:23:31,460 --> 01:23:36,000 >> JOSÉ: E, finalmente, para encontrar o estilo guia, vá para manual.cs50.net/style. 1681 01:23:36,000 --> 01:23:37,725 E sim. 1682 01:23:37,725 --> 01:23:40,575 >> COLUNA 4: Você vai fazer valer quaisquer caracteres por linha? 1683 01:23:40,575 --> 01:23:42,480 >> ROB: sim. 1684 01:23:42,480 --> 01:23:45,405 >> JOSÉ: Desculpe, pessoal. 1685 01:23:45,405 --> 01:23:47,680 >> ROB: Isso é como um dos únicos. 1686 01:23:47,680 --> 01:23:50,420 Neste ponto, estou OK com 120. 1687 01:23:50,420 --> 01:23:52,460 Eu estou bem com a dizer 120 caracteres por linha. 1688 01:23:52,460 --> 01:23:53,830 Eu entendo que haja algum limite. 1689 01:23:53,830 --> 01:23:57,130 Eu acho que 80 é tão pequeno, mas estamos aplicá-la. 1690 01:23:57,130 --> 01:24:00,260 >> JOSÉ: Pessoalmente, eu acho que com C, 80 caracteres é mais OK. 1691 01:24:00,260 --> 01:24:04,160 Uma vez que você começa a ficar para outro linguagens como JavaScript e PHP, e não 1692 01:24:04,160 --> 01:24:08,860 de modo razoável apenas limitar -a 80 caracteres. 1693 01:24:08,860 --> 01:24:09,260 OK. 1694 01:24:09,260 --> 01:24:12,780 Bem, essa foi a seção de super. 1695 01:24:12,780 --> 01:24:14,750 Alguém quer doce? 1696 01:24:14,750 --> 01:24:16,000 >> COLUNA 4: Sim. 1697 01:24:16,000 --> 01:24:18,667