1 00:00:00,000 --> 00:00:03,353 >> [Música tocando] 2 00:00:03,353 --> 00:00:04,842 3 00:00:04,842 --> 00:00:06,050 DAVID MALAN: Olá, todos. 4 00:00:06,050 --> 00:00:07,777 Este é supersection de CS50. 5 00:00:07,777 --> 00:00:09,860 Seções atribuídas não vai começar por mais uma semana. 6 00:00:09,860 --> 00:00:11,580 E assim, hoje, estou aqui com-- 7 00:00:11,580 --> 00:00:12,122 >> MARIA: Maria. 8 00:00:12,122 --> 00:00:14,163 DAVID MALAN: --to realmente Dê uma olhada problema 9 00:00:14,163 --> 00:00:16,110 definir um, o curso de primeiras semanas de material, 10 00:00:16,110 --> 00:00:19,780 se você orientado com CS50 IDE, um pouco do Linux, o sistema operacional que é 11 00:00:19,780 --> 00:00:22,290 rodando em IDE, bem como olhar para alguns da transição 12 00:00:22,290 --> 00:00:25,730 a partir do zero para C liderança até um conjunto de problemas. 13 00:00:25,730 --> 00:00:28,340 >> Assim, sem mais delongas, em um conjunto de problemas, 14 00:00:28,340 --> 00:00:30,520 você vai ser CS50 apresentou a IDE, que 15 00:00:30,520 --> 00:00:33,230 é esta programação baseada em web ambiente que nós usamos em ordem 16 00:00:33,230 --> 00:00:34,280 para escrever programas. 17 00:00:34,280 --> 00:00:37,280 Ele foi projetado para olhar muito reminiscente de um computador típico 18 00:00:37,280 --> 00:00:39,430 sistema executando uma operação sistema chamado Linux. 19 00:00:39,430 --> 00:00:42,440 Mas é na chamada nuvem, o que significa que todos na classe 20 00:00:42,440 --> 00:00:45,100 pode realmente ter o seu própria conta e usá-lo, também. 21 00:00:45,100 --> 00:00:48,950 >> Assim, a maioria de vocês provavelmente nunca usou um ambiente Linux antes ou talvez 22 00:00:48,950 --> 00:00:50,447 até mesmo um ambiente de linha de comando. 23 00:00:50,447 --> 00:00:52,280 E uma linha de comando ambiente é diferente. 24 00:00:52,280 --> 00:00:53,200 É tudo textual. 25 00:00:53,200 --> 00:00:54,730 É todos os comandos do teclado. 26 00:00:54,730 --> 00:00:59,480 E não é mousing, há ícones, sem janelas de diálogo, não há menus. 27 00:00:59,480 --> 00:01:00,212 É puramente texto. 28 00:01:00,212 --> 00:01:01,920 Assim, num primeiro momento, que tipo de se sente como um passo 29 00:01:01,920 --> 00:01:04,434 para trás em termos de sofisticação. 30 00:01:04,434 --> 00:01:06,600 Mas ele acaba sendo muito mais poderoso, certamente, 31 00:01:06,600 --> 00:01:08,510 para um cientista da computação, em última instância. 32 00:01:08,510 --> 00:01:09,540 >> Então, vamos dar uma olhada. 33 00:01:09,540 --> 00:01:13,850 Aqui estou a CS50.io, através do qual você pode entrar em CS50 IDE. 34 00:01:13,850 --> 00:01:17,414 E bem como no Scratch, há três áreas principais para essa tela. 35 00:01:17,414 --> 00:01:20,080 Assim, no lado esquerdo, temos o que vai ser o navegador de arquivos. 36 00:01:20,080 --> 00:01:22,413 E há essa pasta no top, que é agora vazia 37 00:01:22,413 --> 00:01:24,690 desde que eu me livrei de toda a minha arquivos antes supersection. 38 00:01:24,690 --> 00:01:27,599 E é aí que nós vamos salvar arquivos C que escrevemos. 39 00:01:27,599 --> 00:01:30,890 No canto superior direito, temos um lugar onde todo o nosso código vai ficar escrito. 40 00:01:30,890 --> 00:01:34,610 E, de fato, se eu clicar este plus, esta vai permitir que eu escolha Novo arquivo. 41 00:01:34,610 --> 00:01:38,310 E aqui eu posso começar a escrever código C ou, realmente, qualquer número de outras línguas. 42 00:01:38,310 --> 00:01:42,670 >> E, em seguida, na parte inferior, onde ela diz jharvard @ ide50-- e vocês vão 43 00:01:42,670 --> 00:01:45,080 dizer algo um pouco diferente-- o que foi este chamado? 44 00:01:45,080 --> 00:01:48,644 45 00:01:48,644 --> 00:01:49,310 Janela de terminal. 46 00:01:49,310 --> 00:01:49,570 Sim. 47 00:01:49,570 --> 00:01:51,810 Assim, a janela de terminal é a linha de comando chamada 48 00:01:51,810 --> 00:01:55,540 interface através da qual você pode interagir com o sistema operacional subjacente. 49 00:01:55,540 --> 00:01:58,220 E, por agora, vamos fazem muito pouco uso de isto-- 50 00:01:58,220 --> 00:02:01,170 apenas para compilar, para olhar mensagens de erro que vemos, 51 00:02:01,170 --> 00:02:02,347 e para executar os nossos programas. 52 00:02:02,347 --> 00:02:04,680 Mas, afinal, vamos a fazê-lo muito mais, também. 53 00:02:04,680 --> 00:02:07,490 E você ainda pode instalar o software e administrar seu espaço de trabalho 54 00:02:07,490 --> 00:02:09,066 dentro CS50 IDE, bem. 55 00:02:09,066 --> 00:02:10,440 Mas mais sobre isso em outro momento. 56 00:02:10,440 --> 00:02:12,689 >> Então, vamos em frente e escrever um programa muito simples apenas 57 00:02:12,689 --> 00:02:15,064 que passar por um warm-up de ola.c, que é talvez 58 00:02:15,064 --> 00:02:16,480 o programa mais simples que podemos escrever. 59 00:02:16,480 --> 00:02:18,330 Eu já abriu uma nova guia. 60 00:02:18,330 --> 00:02:24,310 Eu estou indo para ir em frente e dizem incluem io.h. padrão 61 00:02:24,310 --> 00:02:25,325 Em seguida, int main (void). 62 00:02:25,325 --> 00:02:28,930 63 00:02:28,930 --> 00:02:35,200 E então printf ("Olá, mundo" barra invertida n, citações perto, 64 00:02:35,200 --> 00:02:39,480 fechar parênteses, e-vírgula. 65 00:02:39,480 --> 00:02:39,990 >> Tudo certo. 66 00:02:39,990 --> 00:02:41,700 Então agora perceber minha janela é sem título. 67 00:02:41,700 --> 00:02:44,840 Então, eu estou indo muito rapidamente para ir até Arquivo, Salvar. 68 00:02:44,840 --> 00:02:46,910 E é importante que Eu chamo isso não "Olá". 69 00:02:46,910 --> 00:02:49,243 Assim, um erro muito comum, especialmente em um conjunto de problemas, 70 00:02:49,243 --> 00:02:52,530 é acidentalmente basta ligar para o seu programa "água" ou "ganancioso" ou "Mario" 71 00:02:52,530 --> 00:02:53,890 ou "crédito" ou semelhante. 72 00:02:53,890 --> 00:02:55,970 Mas você realmente quer fazer se você tem a extensão de arquivo 73 00:02:55,970 --> 00:02:58,928 porque esta é a única maneira que o compilador e também o editor de código 74 00:02:58,928 --> 00:03:00,710 sabe que você é realmente escrevendo código C. 75 00:03:00,710 --> 00:03:02,280 Então deixe-me ir em frente e clique em Salvar. 76 00:03:02,280 --> 00:03:05,710 >> E agora, também, o que CS50 IDE tem feito por nós é também é 77 00:03:05,710 --> 00:03:07,120 sintaxe destaque tudo. 78 00:03:07,120 --> 00:03:08,822 Então, ele é feito tudo muito colorido. 79 00:03:08,822 --> 00:03:10,780 E todo o propósito de que não é funcional. 80 00:03:10,780 --> 00:03:14,290 É só para desenhar os olhos para o conceitualmente diferentes peças 81 00:03:14,290 --> 00:03:15,310 deste programa. 82 00:03:15,310 --> 00:03:17,570 Então, vamos em frente e compilar isso. 83 00:03:17,570 --> 00:03:19,490 E eu posso compilar este em um par de formas. 84 00:03:19,490 --> 00:03:22,010 E em uma semana, o maneira old-school que fizemos 85 00:03:22,010 --> 00:03:26,250 era literalmente no comando linha-- "hello.c clang". 86 00:03:26,250 --> 00:03:27,596 E então eu pressione Enter. 87 00:03:27,596 --> 00:03:29,720 E nada parece acontecer na janela do terminal. 88 00:03:29,720 --> 00:03:32,654 Mas o que fez a mudança no IDE? 89 00:03:32,654 --> 00:03:35,320 Onde, novamente, apenas significa IDE Ambiente de desenvolvimento integrado. 90 00:03:35,320 --> 00:03:38,360 É uma maneira elegante de dizer este desenvolvimento integrado 91 00:03:38,360 --> 00:03:40,620 ambiente para o desenvolvimento de software. 92 00:03:40,620 --> 00:03:42,477 Então, o que mudou na interface do usuário? 93 00:03:42,477 --> 00:03:44,310 O que você notou que é diferente, Maria? 94 00:03:44,310 --> 00:03:47,100 >> MARIA: Eu notei algo sob a IDE50 pasta aqui. 95 00:03:47,100 --> 00:03:47,850 >> DAVID MALAN: Yeah. 96 00:03:47,850 --> 00:03:50,230 Então, aqui em cima, não só nós temos "hello.c". 97 00:03:50,230 --> 00:03:53,120 Nós também temos "a.out", que é tipo de nome mudo para um programa. 98 00:03:53,120 --> 00:03:56,430 Mas, na verdade, é o nome padrão para um programa quando você acabou de compilar o código 99 00:03:56,430 --> 00:03:59,110 e não dizer o compilador o arquivo de saída. 100 00:03:59,110 --> 00:04:01,790 Então, se eu quiser executar isso, eu precisa dizer ao compiler-- 101 00:04:01,790 --> 00:04:05,340 ou melhor, eu preciso dizer o espaço de trabalho que eu 102 00:04:05,340 --> 00:04:09,780 deseja executar o programa chamado "a.out". 103 00:04:09,780 --> 00:04:10,550 Enter. 104 00:04:10,550 --> 00:04:12,474 E não há "Olá, mundo ". Agora, o" ./ ". 105 00:04:12,474 --> 00:04:13,390 é realmente importante. 106 00:04:13,390 --> 00:04:16,050 Embora normalmente temos apenas escrever os nomes dos comandos, 107 00:04:16,050 --> 00:04:19,060 quando é um programa que você escrito, você quer dizer "./" 108 00:04:19,060 --> 00:04:22,460 porque que diz explicitamente Linux que você deseja executar um programa chamado 109 00:04:22,460 --> 00:04:26,930 "a.out" que está neste, onde dot significa que este directório que eu estou atualmente 110 00:04:26,930 --> 00:04:31,600 in, que passa a ser chamado de espaço de trabalho, "a.out. 111 00:04:31,600 --> 00:04:35,410 Porque se eu apenas disse: "a.out", Enter, Eu estou indo para obter "a.out comando não 112 00:04:35,410 --> 00:04:38,035 encontrado "porque o Computador-- porque eu inventei "a.out"; 113 00:04:38,035 --> 00:04:40,910 ele não veio com o Computador-- não sabe para onde olhar para ele, 114 00:04:40,910 --> 00:04:43,590 mesmo que seja à direita debaixo do meu nariz, por assim dizer. 115 00:04:43,590 --> 00:04:44,090 ESTÁ BEM. 116 00:04:44,090 --> 00:04:49,910 Assim nós poderíamos mudar isso para ser "clang -o Olá hello.c". 117 00:04:49,910 --> 00:04:53,030 E se eu pressione Enter, o programa é que isto vai saída para mim? 118 00:04:53,030 --> 00:04:55,710 Qual é o nome do arquivo? 119 00:04:55,710 --> 00:04:57,500 Sim, na parte de trás. 120 00:04:57,500 --> 00:04:58,479 Está certo. "Olá." 121 00:04:58,479 --> 00:05:00,520 Assim, "Olá" vai ser o nome do programa 122 00:05:00,520 --> 00:05:04,610 porque nós usamos um chamado argumento de linha de comando, que é apenas 123 00:05:04,610 --> 00:05:08,120 um modo de alterar o comportamento de o compilador para realmente saída 124 00:05:08,120 --> 00:05:09,450 um nome de arquivo específico. 125 00:05:09,450 --> 00:05:12,400 E, de fato, se eu aumentar para fora e olhar para cima aqui, 126 00:05:12,400 --> 00:05:17,430 agora eu tenho não só "a.out" e "hello.c", mas também "Olá", como bem. 127 00:05:17,430 --> 00:05:22,410 Então agora eu posso fazer "./hello," Enter. 128 00:05:22,410 --> 00:05:23,640 E não há "Olá, mundo". 129 00:05:23,640 --> 00:05:25,640 Mas lastly-- e esta agora será a convenção 130 00:05:25,640 --> 00:05:27,590 usamos todo o semestre, typically-- 131 00:05:27,590 --> 00:05:30,070 é você também pode simplesmente dizer "fazer Olá". 132 00:05:30,070 --> 00:05:33,370 E, de fato, ele está dizendo que é para cima a data porque ele já existe. 133 00:05:33,370 --> 00:05:37,860 Deixe-me ir em frente e remover, com o comando rm, tanto "a.out" - 134 00:05:37,860 --> 00:05:39,644 e dizer "remover a.out arquivo regular?" 135 00:05:39,644 --> 00:05:41,810 Isso significa apenas que, é você certeza de que deseja apagá-lo? 136 00:05:41,810 --> 00:05:42,880 Eu vou dizer que sim. 137 00:05:42,880 --> 00:05:46,690 E então eu estou indo para remover "Olá", mas não "hello.c". 138 00:05:46,690 --> 00:05:49,920 Eu estou indo para dizer "sim" explicitamente, mas de "y" é suficiente, como bem. 139 00:05:49,920 --> 00:05:52,140 >> E agora perceber se eu escreva ls-- que, recall, 140 00:05:52,140 --> 00:05:55,540 significa lista-- ele lista todos dos arquivos na minha pasta. 141 00:05:55,540 --> 00:05:57,850 E, de fato, se eu aumentar para fora e olhe no canto superior esquerdo, 142 00:05:57,850 --> 00:05:59,730 confirma que o que é nesta pasta, mesmo 143 00:05:59,730 --> 00:06:04,990 embora seja rotulado como IDE50-se aqui e não espaço de trabalho, é apenas "hello.c". 144 00:06:04,990 --> 00:06:09,152 Então agora aqui em baixo, se eu que "fazer Olá," Enter, 145 00:06:09,152 --> 00:06:12,360 agora eu vejo um comando muito mais tempo, mas um comando mais sofisticado que está acontecendo 146 00:06:12,360 --> 00:06:13,940 para ser útil nas semanas que virão. 147 00:06:13,940 --> 00:06:16,720 E agora eu posso dizer "./hello." 148 00:06:16,720 --> 00:06:19,257 >> Então, vamos dar um rápido passeio Comandos de algum outro Linux. 149 00:06:19,257 --> 00:06:21,840 Então por que não damos um passo para trás e realmente olhar para C mais 150 00:06:21,840 --> 00:06:25,020 geralmente, a transição a partir do zero a C, e, em seguida, concluir com um olhar 151 00:06:25,020 --> 00:06:27,305 no primeiro problema definido em C. Tudo bem. 152 00:06:27,305 --> 00:06:30,430 Então, eu estou indo para ir em frente e apenas limpa o meu espaço de trabalho com Control-L apenas 153 00:06:30,430 --> 00:06:31,429 para manter a tela limpa. 154 00:06:31,429 --> 00:06:33,520 Mas isso não tem funcional impacto de outra forma. 155 00:06:33,520 --> 00:06:35,820 >> Lembre-se que temos visto alguns comandos agora. 156 00:06:35,820 --> 00:06:39,900 Então nós vimos clang, que geralmente você não terá que executar manualmente mais. 157 00:06:39,900 --> 00:06:41,650 Nós em vez vou usar make. 158 00:06:41,650 --> 00:06:45,290 Mas vimos também ls, que mostra uma Lista dos arquivos no meu diretório. 159 00:06:45,290 --> 00:06:48,750 E agora porque é que existem duas há-- arquivos agora, "Olá" e "hello.c". 160 00:06:48,750 --> 00:06:52,240 Por que há uma estrela ou um asterisco após "Olá"? 161 00:06:52,240 --> 00:06:54,900 O que isso significa, com base no que vimos em uma semana? 162 00:06:54,900 --> 00:06:58,852 163 00:06:58,852 --> 00:07:00,400 O que você acha? 164 00:07:00,400 --> 00:07:02,742 O que a estrela significa? 165 00:07:02,742 --> 00:07:04,614 >> MARIA: For-- o programa "Olá"? 166 00:07:04,614 --> 00:07:05,530 DAVID MALAN: "Olá *". 167 00:07:05,530 --> 00:07:06,330 Sim. 168 00:07:06,330 --> 00:07:07,760 Oh sim? 169 00:07:07,760 --> 00:07:08,639 Oh, executável. 170 00:07:08,639 --> 00:07:09,180 Está certo. 171 00:07:09,180 --> 00:07:10,890 Então isso significa que "Olá" é executável. 172 00:07:10,890 --> 00:07:13,430 Então, na verdade, é por isso Eu posso fazer "./hello." 173 00:07:13,430 --> 00:07:13,930 Tudo certo. 174 00:07:13,930 --> 00:07:15,179 Então, o que mais eu posso fazer aqui? 175 00:07:15,179 --> 00:07:17,290 Bem, acontece que eu puder também criar diretórios. 176 00:07:17,290 --> 00:07:20,924 Então deixe-me ir em frente e criar, por exemplo, um diretório "pset1". 177 00:07:20,924 --> 00:07:23,590 E o problema especificação definida terá que fazer exatamente isso, 178 00:07:23,590 --> 00:07:25,260 assim você não tem que se lembrar hoje. 179 00:07:25,260 --> 00:07:27,340 Mas "pset1 mkdir" parece não ter nenhum impacto. 180 00:07:27,340 --> 00:07:30,540 Mas, novamente, nenhuma mensagem de erro geralmente é uma coisa boa. 181 00:07:30,540 --> 00:07:34,060 Então, se eu digitar "ls" agora-- ah, agora Eu tenho um arquivo executável chamado 182 00:07:34,060 --> 00:07:36,570 "Olá", um arquivo C chamado "hello.c". 183 00:07:36,570 --> 00:07:40,860 E, em seguida, a barra final, por assim falar, significa que este é um diretório. 184 00:07:40,860 --> 00:07:42,510 >> Então, na verdade, agora eu quero abri-lo. 185 00:07:42,510 --> 00:07:45,730 E eu não clicar duas vezes sobre ele como em uma GUI, um ambiente gráfico. 186 00:07:45,730 --> 00:07:48,550 I em vez dizer "cd pset1." 187 00:07:48,550 --> 00:07:49,640 Enter. 188 00:07:49,640 --> 00:07:53,100 Nada de interessante parece ter aconteceu, exceto meu pequeno alerta 189 00:07:53,100 --> 00:07:57,300 aqui-- esta é a maneira de Linux de lembrar me onde estou, então o que pasta é aberta. 190 00:07:57,300 --> 00:08:00,080 É só me dizer explicitamente em oposição a graficamente. 191 00:08:00,080 --> 00:08:05,100 E se eu digitar "ls", por que vejo outro solicitar imediatamente, você acha que, 192 00:08:05,100 --> 00:08:07,269 quando eu listar o conteúdo de pset1? 193 00:08:07,269 --> 00:08:09,310 MARIA: Você provavelmente não fazer tem alguma coisa lá dentro. 194 00:08:09,310 --> 00:08:09,630 DAVID MALAN: Yeah. 195 00:08:09,630 --> 00:08:11,510 Então nós não temos, obviamente, criado alguma coisa lá dentro 196 00:08:11,510 --> 00:08:13,150 porque eu só criou o diretório. 197 00:08:13,150 --> 00:08:17,690 Agora, se eu queria criar um file-- para exemplo, eu poderia criar um novo arquivo. 198 00:08:17,690 --> 00:08:20,190 E então eu poderia ir para Salvar e salve-o como, 199 00:08:20,190 --> 00:08:23,090 como, "mario.c" se você está fazendo a edição padrão do pset um. 200 00:08:23,090 --> 00:08:27,610 E então, como qualquer Mac ou PC, apenas escolher o "pset1 pasta, Salvar. 201 00:08:27,610 --> 00:08:28,740 E agora o arquivo está vazio. 202 00:08:28,740 --> 00:08:31,160 Mas vamos fazer zoom novamente para um segundo. 203 00:08:31,160 --> 00:08:32,470 Vamos fazer ls aqui. 204 00:08:32,470 --> 00:08:34,470 Agora vemos "mario.c". 205 00:08:34,470 --> 00:08:37,850 >> Portanto, há alguns outros comandos que vale a pena manter em mente ao longo do tempo-- 206 00:08:37,850 --> 00:08:41,200 claro, ou Control-L é o que eu tenho foi bater; mkdir temos visto; 207 00:08:41,200 --> 00:08:45,240 rm vimos, também, o que é para remover ou apagar um arquivo. 208 00:08:45,240 --> 00:08:49,310 Cuidado você pode Também-- e se você olhar em tutoriais on-line, você vai rm-rf 209 00:08:49,310 --> 00:08:52,630 é uma forma muito comum de dizer excluir uma pasta que tem coisas nele. 210 00:08:52,630 --> 00:08:54,280 Basta ser super, super cuidadosa. 211 00:08:54,280 --> 00:08:58,780 rf significa de forma recursiva eliminar tudo o que é 212 00:08:58,780 --> 00:09:01,150 você está tentando excluir e forçosamente excluí-lo. 213 00:09:01,150 --> 00:09:04,630 Então recursiva meios se é uma pasta com uma pasta com uma pasta com uma pasta, 214 00:09:04,630 --> 00:09:05,690 eliminar todos eles. 215 00:09:05,690 --> 00:09:08,680 E forçosamente significa nem sequer me perguntar sim ou não, estou certo? 216 00:09:08,680 --> 00:09:11,960 Portanto, é uma maneira super perigosa de apagar um monte de coisas rapidamente. 217 00:09:11,960 --> 00:09:17,210 Mas beware-- demasiado frequentemente faz um intrépido estudante apagar acidentalmente, digamos, pset 218 00:09:17,210 --> 00:09:18,000 um, por exemplo. 219 00:09:18,000 --> 00:09:19,833 >> MARIA: E se eles apenas fazer -r, eles vão 220 00:09:19,833 --> 00:09:21,870 para perguntar-lhes sobre cada arquivo único. 221 00:09:21,870 --> 00:09:22,790 >> DAVID MALAN: Qual é moderadamente irritante. 222 00:09:22,790 --> 00:09:23,480 >> MARIA: Sim. 223 00:09:23,480 --> 00:09:25,813 >> DAVID MALAN: Então é por isso muitos de nós, a auto incluído, 224 00:09:25,813 --> 00:09:27,070 tenho o hábito de usar o -rf. 225 00:09:27,070 --> 00:09:27,861 Mas é perigoso. 226 00:09:27,861 --> 00:09:29,010 Assim, o comprador tem cuidado. 227 00:09:29,010 --> 00:09:31,050 E então mv é uma espécie de curiosamente chamado. 228 00:09:31,050 --> 00:09:33,600 Então este é o comando de movimento, que se sente um pouco estranho 229 00:09:33,600 --> 00:09:37,260 porque você pode realmente usá-lo para mover arquivos de um lugar para outro. 230 00:09:37,260 --> 00:09:39,970 Por exemplo, suponha que eu errei. 231 00:09:39,970 --> 00:09:43,660 Suponha que eu criei um novo arquivo para o pset. 232 00:09:43,660 --> 00:09:46,320 E eu salva-lo como "greedy.c." 233 00:09:46,320 --> 00:09:49,970 Mas suponha que eu acidentalmente salve- em IDE50-- assim no meu próprio espaço de trabalho 234 00:09:49,970 --> 00:09:51,580 e não em pset1. 235 00:09:51,580 --> 00:09:53,960 >> Você pode ver tanto no canto superior esquerdo. 236 00:09:53,960 --> 00:09:55,284 Há "greedy.c." 237 00:09:55,284 --> 00:09:56,450 E há algumas soluções. 238 00:09:56,450 --> 00:09:58,324 Então, um, eu posso usar o forma amigável super- 239 00:09:58,324 --> 00:09:59,740 de apenas arrastando e soltando-o. 240 00:09:59,740 --> 00:10:01,910 E isso, na verdade, corrigir esse problema. 241 00:10:01,910 --> 00:10:04,967 Mas hoje, estamos tentando olhar para as formas mais misteriosas, mas poderosas 242 00:10:04,967 --> 00:10:05,550 de fazer isso. 243 00:10:05,550 --> 00:10:07,880 Então deixe-me tomar "ls" no pset1. 244 00:10:07,880 --> 00:10:09,690 E eu só vejo "mario.c." 245 00:10:09,690 --> 00:10:13,450 Deixe-me ir em frente e fazer "cd ..". 246 00:10:13,450 --> 00:10:15,320 Então CD novo é alterar diretório. 247 00:10:15,320 --> 00:10:18,130 ".." Significa que, embora? 248 00:10:18,130 --> 00:10:21,100 Da última vez eu disse "cd pset1 "para entrar em pset1. 249 00:10:21,100 --> 00:10:24,360 Portanto, quando digo "cd ..", o que estou fazendo? 250 00:10:24,360 --> 00:10:24,910 Para trás. 251 00:10:24,910 --> 00:10:25,150 Sim. 252 00:10:25,150 --> 00:10:26,750 >> Então ele vai para o pai chamada. 253 00:10:26,750 --> 00:10:29,730 Ir um nível acima, como sair de uma pasta. 254 00:10:29,730 --> 00:10:30,500 Então Enter. 255 00:10:30,500 --> 00:10:31,900 E, de fato, olhe o que ele fez. 256 00:10:31,900 --> 00:10:37,070 Ele me mudou apenas no espaço de trabalho, em vez de em pset1, que é em espaço de trabalho. 257 00:10:37,070 --> 00:10:39,710 E agora, se eu digitar "ls", há um monte de coisas. 258 00:10:39,710 --> 00:10:41,650 No existe "greedy.c". 259 00:10:41,650 --> 00:10:48,720 Então, agora deixe-me usar mv para, literalmente, mover "greedy.c" em pset1. 260 00:10:48,720 --> 00:10:51,120 E então um monte de comandos Linux funcionam exatamente como este. 261 00:10:51,120 --> 00:10:54,470 Eles não têm argumentos ou eles tomam uma argumento ou eles tomam dois linha de comando 262 00:10:54,470 --> 00:10:55,449 argumentos e assim por diante. 263 00:10:55,449 --> 00:10:57,240 E, neste caso, é literalmente fazendo o que 264 00:10:57,240 --> 00:11:01,670 ele diz que, embora succinctly-- mover greedy.c em pset1. 265 00:11:01,670 --> 00:11:02,310 Enter. 266 00:11:02,310 --> 00:11:03,310 Nada parece acontecer. 267 00:11:03,310 --> 00:11:06,180 Mas se eu fizer um ls novamente, ganancioso está desaparecido. 268 00:11:06,180 --> 00:11:12,437 E se eu fizer "cd pset1", Enter e, em seguida, ls novamente, agora é no lugar certo. 269 00:11:12,437 --> 00:11:14,270 Como um aparte, para se alguma razăo especial 270 00:11:14,270 --> 00:11:16,194 se você tiver intermitente conectividade de rede 271 00:11:16,194 --> 00:11:18,360 ou você está andando por aí campus com a sua tampa do laptop 272 00:11:18,360 --> 00:11:20,180 fechada e, em seguida, abri-lo de novo e de seu espaço de trabalho 273 00:11:20,180 --> 00:11:21,730 parece um pouco fora de sincronia, não é grande coisa. 274 00:11:21,730 --> 00:11:23,646 Apenas recarregar seu navegador janela, e que deveria 275 00:11:23,646 --> 00:11:26,339 resync de modo que o lado esquerdo navegador de arquivos parece exatamente 276 00:11:26,339 --> 00:11:27,380 como a janela do terminal. 277 00:11:27,380 --> 00:11:27,921 Não se preocupe. 278 00:11:27,921 --> 00:11:31,460 Em caso de dúvida, recarregar a página, assim desde que você salvou os arquivos já. 279 00:11:31,460 --> 00:11:31,960 ESTÁ BEM. 280 00:11:31,960 --> 00:11:34,710 Então mv também pode ser usado para renomear arquivos. 281 00:11:34,710 --> 00:11:36,760 E vamos dar uma olhada este comando final aqui. 282 00:11:36,760 --> 00:11:39,950 Assim suppose-- e esta é Super comum, também, desde o início. 283 00:11:39,950 --> 00:11:46,400 Alguns estudantes, ocasionalmente, criar um arquivo chamado, vamos dizer-- o que é mais uma? 284 00:11:46,400 --> 00:11:47,730 Como "WATER.C." 285 00:11:47,730 --> 00:11:51,080 Então eu vou gritar, para nenhuma razão, em todos os tampões. 286 00:11:51,080 --> 00:11:53,190 Mas isto não é o nome correto para o arquivo 287 00:11:53,190 --> 00:11:56,660 se somente porque nosso conjunto de problemas especificação não lhe disse 288 00:11:56,660 --> 00:11:59,430 para salvar o arquivo como todas as tampas "WATER.C." 289 00:11:59,430 --> 00:12:01,320 Em vez disso, esperamos "water.c" em letras minúsculas. 290 00:12:01,320 --> 00:12:03,140 E, de fato, este é problemático porque check50, 291 00:12:03,140 --> 00:12:04,370 um programa que você está indo reunir-se em problema 292 00:12:04,370 --> 00:12:07,350 definir um que testa automaticamente a correção do seu código 293 00:12:07,350 --> 00:12:11,615 vai gritar com você se não puder encontrar "water.c" em todas as minúsculas. 294 00:12:11,615 --> 00:12:12,712 >> Então, eu preciso consertar isso. 295 00:12:12,712 --> 00:12:14,920 Tantos caminhos diferentes para fazer isso, a primeira das quais 296 00:12:14,920 --> 00:12:18,330 seria a de Controle clique com o botão direito do mouse ou o nome do arquivo e apenas mudar Renomear. 297 00:12:18,330 --> 00:12:19,740 Totalmente bem para fazer isso. 298 00:12:19,740 --> 00:12:21,820 Mas, novamente, hoje, vamos fazê-lo um pouco mais extravagante. 299 00:12:21,820 --> 00:12:26,680 Vamos usar mv para mudar "WATER.C" a "water.c." 300 00:12:26,680 --> 00:12:30,690 Então, você também pode usar o primeiro argumento renomeá-lo para o segundo argumento 301 00:12:30,690 --> 00:12:34,455 se o segundo argumento não, está em verdade, uma pasta ou um nome de diretório. 302 00:12:34,455 --> 00:12:35,120 >> Tudo certo. 303 00:12:35,120 --> 00:12:39,560 E, por último, um pouco trick-- por isso estou em meu diretório do espaço de trabalho no momento. 304 00:12:39,560 --> 00:12:43,660 Se eu quiser entrar em um pset, Eu certamente posso digitar "cd pset1." 305 00:12:43,660 --> 00:12:47,260 Mas é tão tedioso para digitar "pset1" ou mais nomes de arquivos ou nomes de diretório 306 00:12:47,260 --> 00:12:47,980 ainda. 307 00:12:47,980 --> 00:12:51,960 Então, muitas vezes em Linux, o que você pode fazer é começar a digitar "PSE" 308 00:12:51,960 --> 00:12:56,100 e apenas se cansar, Tab bater, e deixá- a figura de computador para fora para você. 309 00:12:56,100 --> 00:12:58,190 Super útil para entrar na esse hábito. 310 00:12:58,190 --> 00:13:01,079 O único problema é se você tiver vários arquivos ou pastas a partir 311 00:13:01,079 --> 00:13:02,870 com a letra "P" ou "ps", você pode ter 312 00:13:02,870 --> 00:13:05,525 para digitar um pouco mais antes do computador sabe o que fazer. 313 00:13:05,525 --> 00:13:06,820 >> MARIA: Nós gostamos de atalhos. 314 00:13:06,820 --> 00:13:08,695 >> DAVID MALAN: Esta vontade poupar muito tempo. 315 00:13:08,695 --> 00:13:11,930 E também, como dissemos na aula, você pode rolar para cima na história, para cima e para baixo, 316 00:13:11,930 --> 00:13:15,461 para encontrar recentemente executada comandos, como bem. 317 00:13:15,461 --> 00:13:15,960 Tudo certo. 318 00:13:15,960 --> 00:13:20,904 Então, agora, vamos voltar nossa atenção de volta para um programa simples, Olá mundo. 319 00:13:20,904 --> 00:13:22,195 Então, nós compilamos esta exatamente. 320 00:13:22,195 --> 00:13:24,050 E agora, por que não tomamos um olhar para os tipos de dados 321 00:13:24,050 --> 00:13:26,776 e, em seguida, a transição de alguma correspondente blocos zero para C. 322 00:13:26,776 --> 00:13:27,400 MARIA: Awesome. 323 00:13:27,400 --> 00:13:30,031 Portanto, agora que você começou escrever programas em C, 324 00:13:30,031 --> 00:13:32,530 vamos começar a falar sobre tipos de dados e variáveis. 325 00:13:32,530 --> 00:13:37,570 Assim, alguns tipos de dados que você gostaria de saber a partir de agora 326 00:13:37,570 --> 00:13:39,400 são aqueles que são destacada em azul. 327 00:13:39,400 --> 00:13:42,420 Portanto, temos int em primeiro lugar, que significa inteiro. 328 00:13:42,420 --> 00:13:46,075 E que mantém inteiros, como você pode ter guessed-- de modo 1, 2, 3, 329 00:13:46,075 --> 00:13:47,950 e quaisquer outros inteiros que você pode pensar. 330 00:13:47,950 --> 00:13:48,730 >> DAVID MALAN: E também negativo. 331 00:13:48,730 --> 00:13:50,220 >> MARIA: E também os negativos, sim. 332 00:13:50,220 --> 00:13:51,450 E 0. 333 00:13:51,450 --> 00:13:54,250 Então nós temos carros alegóricos, que são números de ponto flutuante. 334 00:13:54,250 --> 00:13:58,360 Então, isso é todos os números reais que têm pontos decimais. 335 00:13:58,360 --> 00:14:03,960 Então, 5.0, 5.2, e ainda mais dígitos depois do ponto decimal, 336 00:14:03,960 --> 00:14:05,620 bem, e também os negativos. 337 00:14:05,620 --> 00:14:07,530 Então nós temos de char que é um personagem. 338 00:14:07,530 --> 00:14:10,240 Então eu acho que nós falamos sobre isso em palestra hoje. 339 00:14:10,240 --> 00:14:15,682 Mas nós temos cartas, para example-- A, B, C-- que pode ser armazenado como um char. 340 00:14:15,682 --> 00:14:18,390 Mas, então, nós temos muito mais símbolos que pode ser armazenado como um char. 341 00:14:18,390 --> 00:14:22,380 E aqueles são armazenados como ASCII. 342 00:14:22,380 --> 00:14:25,280 >> E então nós temos bool, que são Booleans. 343 00:14:25,280 --> 00:14:29,067 E aqueles avaliar como True ou Falso ou 1 e 0, respectivamente. 344 00:14:29,067 --> 00:14:31,650 DAVID MALAN: E lembre-se que boleano vem a partir da biblioteca CS50. 345 00:14:31,650 --> 00:14:33,300 Portanto, não é construído em C, mas é super útil 346 00:14:33,300 --> 00:14:34,850 para ter a noção de verdadeiro e falso. 347 00:14:34,850 --> 00:14:36,990 E mesmo que você pode penso-- fato divertido. 348 00:14:36,990 --> 00:14:43,700 Um bool tecnicamente precisa de quantos bits, verdadeiramente, para representar verdadeiro contra Falso? 349 00:14:43,700 --> 00:14:47,910 Quantos bits você acha você precisaria de, no máximo? 350 00:14:47,910 --> 00:14:48,790 Sim, apenas um. 351 00:14:48,790 --> 00:14:52,077 Assim, verifica-se que C não pode dar-lhe apenas um pouco. 352 00:14:52,077 --> 00:14:54,160 A menor unidade de medida você pode obter é oito. 353 00:14:54,160 --> 00:14:57,090 Então é um pouco um desperdício que você é utilizando um byte de toda, ou oito bits, 354 00:14:57,090 --> 00:14:58,340 para representar Verdadeiro ou Falso. 355 00:14:58,340 --> 00:15:01,807 Mas isso é apenas a maneira que é implementado em C na biblioteca de CS50. 356 00:15:01,807 --> 00:15:04,890 MARIA: E então os que estamos não vai falar sobre como extensivamente 357 00:15:04,890 --> 00:15:08,060 agora-- direito duplo, isso é para carros alegóricos maiores. 358 00:15:08,060 --> 00:15:09,811 Longo longo e curto são também para números inteiros. 359 00:15:09,811 --> 00:15:10,643 DAVID MALAN: De fato. 360 00:15:10,643 --> 00:15:13,190 Na edição de hackers de pset um, nós realmente usar longo, longo. 361 00:15:13,190 --> 00:15:15,801 Mas para a edição padrão, que não devem ser necessárias. 362 00:15:15,801 --> 00:15:16,300 MARIA: Cool. 363 00:15:16,300 --> 00:15:17,361 ESTÁ BEM. 364 00:15:17,361 --> 00:15:20,110 Então você deve ser operators-- provavelmente está familiarizado com a maioria destes. 365 00:15:20,110 --> 00:15:22,620 Adicionalmente, +; subtração, -. 366 00:15:22,620 --> 00:15:24,070 Para a multiplicação, temos a *. 367 00:15:24,070 --> 00:15:25,900 Portanto, não o X que costumamos usar. 368 00:15:25,900 --> 00:15:27,840 Divisão, temos a barra invertida. 369 00:15:27,840 --> 00:15:31,380 E módulo é o nosso último operador que vamos falar sobre agora. 370 00:15:31,380 --> 00:15:35,610 É um operador que nos permite levar o resto de uma divisão. 371 00:15:35,610 --> 00:15:40,630 Então, se temos 4% 2, 4 dividido por 2 é 2 com um resto de 0. 372 00:15:40,630 --> 00:15:41,740 Assim 4% 2? 0. 373 00:15:41,740 --> 00:15:42,950 4% 3 é 1. 374 00:15:42,950 --> 00:15:44,870 4% 5 é de 4, como você poderia ter imaginado. 375 00:15:44,870 --> 00:15:48,860 E lembre-se quando se utiliza todos estes os operadores a utilizarem as regras PEMDAS. 376 00:15:48,860 --> 00:15:54,060 >> DAVID MALAN: Então, para ser claro, se você fazer 2 a 4%, por que é que 0, exatamente? 377 00:15:54,060 --> 00:15:57,480 >> MARIA: Porque 4 dividido por 2 é 2 com um resto de 0. 378 00:15:57,480 --> 00:16:00,752 Então modulo nos dá essa restante como oposição ao resultado da divisão. 379 00:16:00,752 --> 00:16:02,960 DAVID MALAN: E, de fato, o que vamos encontrar este útil 380 00:16:02,960 --> 00:16:05,640 para é que em alguns problemas isso não é necessariamente um, 381 00:16:05,640 --> 00:16:08,040 se você quiser ter o efeito restringir-se 382 00:16:08,040 --> 00:16:10,720 para uma gama de números como 0 a alguma coisa, 383 00:16:10,720 --> 00:16:13,904 você pode usar o módulo para embrulhar ao redor mais cedo do que como a 2 mil milhões 384 00:16:13,904 --> 00:16:16,320 ou o valor de 4 bilhões que nós falamos sobre a palestra. 385 00:16:16,320 --> 00:16:16,870 >> MARIA: Sim. 386 00:16:16,870 --> 00:16:19,429 E mesmo em "gananciosos", poderíamos. 387 00:16:19,429 --> 00:16:21,345 DAVID MALAN: Sim, em um conjunto de problemas, também. 388 00:16:21,345 --> 00:16:22,520 MARIA: Sim, bom. 389 00:16:22,520 --> 00:16:24,340 DAVID MALAN: Boa dica. 390 00:16:24,340 --> 00:16:25,750 MARIA: Desculpe. 391 00:16:25,750 --> 00:16:28,590 Boolean expressions-- assim para os operadores booleanos, 392 00:16:28,590 --> 00:16:31,770 vamos falar sobre tudo desses que você vê aqui. 393 00:16:31,770 --> 00:16:35,310 Então, agora, temos dois sinais de igual coletados para iguais. 394 00:16:35,310 --> 00:16:38,650 Portanto, estas são para comparação. 395 00:16:38,650 --> 00:16:40,830 Até agora, nós só vi um sinal de igual. 396 00:16:40,830 --> 00:16:44,870 Isso é quando nós atribuímos um valor a uma variável. 397 00:16:44,870 --> 00:16:50,160 Então, se nós vimos int n = 5, em seguida, temos atribuído 5 para a variável n. 398 00:16:50,160 --> 00:16:55,600 Mas, se nós queremos usar == para comparação, podemos verificar se n == 5. 399 00:16:55,600 --> 00:16:58,310 E se n == 5, em seguida, isso é verdade. 400 00:16:58,310 --> 00:17:01,950 >> Assim, os operadores booleanos permitem-nos, basicamente, 401 00:17:01,950 --> 00:17:04,670 para avaliar booleano expressões como True ou False. 402 00:17:04,670 --> 00:17:07,819 Portanto, não temos a equals-- ponto de exclamação e iguais. 403 00:17:07,819 --> 00:17:14,240 Então, nós também poderia verificar se n não é igual a 5-- assim n! = 5. 404 00:17:14,240 --> 00:17:17,640 Menos do que, a menos que ou igual a, maior que, maior do que ou igual a, 405 00:17:17,640 --> 00:17:20,720 e, em seguida, temos a lógica AND e OR lógico. 406 00:17:20,720 --> 00:17:24,060 E aqueles nos permitem avaliar múltiplas expressões booleanas juntos 407 00:17:24,060 --> 00:17:27,930 para vir junto como basicamente Toda uma expressão booleana. 408 00:17:27,930 --> 00:17:34,970 Portanto, se queremos encontrar um número, digamos, que é maior do que 5 mas menor do que 15 409 00:17:34,970 --> 00:17:39,810 ao mesmo tempo, gostaríamos de usar o E lógico operador para ver se n é 410 00:17:39,810 --> 00:17:42,937 maior do que 5 && n inferior a 15. 411 00:17:42,937 --> 00:17:44,770 DAVID MALAN: E aqui, também, é realmente fácil 412 00:17:44,770 --> 00:17:47,290 no início para acidentalmente usar apenas um único e comercial 413 00:17:47,290 --> 00:17:48,572 ou uma única barra vertical. 414 00:17:48,572 --> 00:17:51,280 E espero que o compilador gritar com você, porque eles realmente 415 00:17:51,280 --> 00:17:52,530 tem um significado muito diferente. 416 00:17:52,530 --> 00:17:55,660 Para os curiosos, eles são usado para operações bit a bit, 417 00:17:55,660 --> 00:17:57,197 operando em pedaços individuais. 418 00:17:57,197 --> 00:17:58,780 Mas você quer que o par deles aqui. 419 00:17:58,780 --> 00:18:01,560 E super importante é que primeiro, o sinal de igual, 420 00:18:01,560 --> 00:18:05,270 que é o operador de igualdade como oposição ao operador de atribuição. 421 00:18:05,270 --> 00:18:08,552 >> MARIA: E a barra vertical é localizado entre o Apagar e Retorno. 422 00:18:08,552 --> 00:18:09,260 DAVID MALAN: Sim. 423 00:18:09,260 --> 00:18:11,420 Em um teclado típico dos EUA. 424 00:18:11,420 --> 00:18:13,190 >> MARIA: Sim. 425 00:18:13,190 --> 00:18:15,890 Então, vamos pular direto para instruções condicionais. 426 00:18:15,890 --> 00:18:18,300 Em risco, você tem já visto, provavelmente, 427 00:18:18,300 --> 00:18:22,730 se as declarações que lhe permitem verificar se algo é verdadeiro, então 428 00:18:22,730 --> 00:18:23,660 fazer outra coisa. 429 00:18:23,660 --> 00:18:28,410 Então você pode ter querido para verificar se seu sprite é 430 00:18:28,410 --> 00:18:31,410 tocar alguma outra entidade gráfica ou a borda da tela. 431 00:18:31,410 --> 00:18:35,520 E então você poderia querer terminar o jogo ou fazer outra coisa. 432 00:18:35,520 --> 00:18:40,000 Assim, para que a sintaxe é "if (condição)." 433 00:18:40,000 --> 00:18:46,820 Portanto, se seu sprite está tocando algo, então não é dentro das chaves. 434 00:18:46,820 --> 00:18:48,980 >> Então nós temos declarações if-else. 435 00:18:48,980 --> 00:18:54,080 Else nos permite fazer algo Se a condição de que 436 00:18:54,080 --> 00:18:55,870 verificar se há no início não é verdade. 437 00:18:55,870 --> 00:19:01,530 Portanto, se o sprite está tocando o border fazer isso, senão fazer outra coisa. 438 00:19:01,530 --> 00:19:04,030 Assim, caso contrário, fazer outra coisa. 439 00:19:04,030 --> 00:19:07,530 Então, temos um pequeno exemplo para isto. 440 00:19:07,530 --> 00:19:11,551 Assim, se (military_time <12), nós quer printf "Bom dia!" 441 00:19:11,551 --> 00:19:13,300 Else vamos printf "Boa noite!" 442 00:19:13,300 --> 00:19:14,860 Exemplo básico. 443 00:19:14,860 --> 00:19:15,680 >> DAVID MALAN: Good. 444 00:19:15,680 --> 00:19:16,760 >> MARIA: Cool. 445 00:19:16,760 --> 00:19:18,560 Portanto, agora temos instruções switch. 446 00:19:18,560 --> 00:19:21,960 Alterne declarações em lata geral permitem-nos fazer um monte de a mesma coisa 447 00:19:21,960 --> 00:19:25,070 que acabamos de falar sobre com se declarações. 448 00:19:25,070 --> 00:19:29,440 Por exemplo, agora temos a forma geral da instrução switch 449 00:19:29,440 --> 00:19:33,870 que nos permite tomar uma variável chamada n 450 00:19:33,870 --> 00:19:37,670 e compará-lo com um monte de valores diferentes, que aqui nós 451 00:19:37,670 --> 00:19:40,010 ter chamado CONSTANT1, constant2. 452 00:19:40,010 --> 00:19:41,150 Podemos ter muito mais. 453 00:19:41,150 --> 00:19:42,930 E aqueles são chamados casos. 454 00:19:42,930 --> 00:19:46,280 >> Então, se temos um interruptor statement-- e isso funciona 455 00:19:46,280 --> 00:19:50,580 apenas para integers-- temos um variável, neste caso, que é n. 456 00:19:50,580 --> 00:19:53,840 Se a variável n é igual a CONSTANT1, nós 457 00:19:53,840 --> 00:19:59,720 executará algum trecho de código ou algo que nós queremos fazer. 458 00:19:59,720 --> 00:20:01,280 E então nós iria quebrar. 459 00:20:01,280 --> 00:20:04,820 Portanto, a pausa significa que a instrução switch 460 00:20:04,820 --> 00:20:08,120 irá parar a execução se n é igual a CONSTANT1, 461 00:20:08,120 --> 00:20:09,752 e, em seguida, o programa irá continuar. 462 00:20:09,752 --> 00:20:11,835 Ele irá sair para fora da alternar declaração e vai 463 00:20:11,835 --> 00:20:13,520 continuar a fazer outra coisa. 464 00:20:13,520 --> 00:20:17,204 >> Se, no entanto, n não é igual CONSTANT1, então caso para constant2 465 00:20:17,204 --> 00:20:17,870 será verificada. 466 00:20:17,870 --> 00:20:21,750 Assim, se n é igual a constant2, que outra trecho de código será executado. 467 00:20:21,750 --> 00:20:23,850 E então ele vai quebrar se que é igual a ele. 468 00:20:23,850 --> 00:20:27,580 E então nós podemos ter Também-- não necessariamente, embora-- um caso padrão, 469 00:20:27,580 --> 00:20:32,290 que vai acontecer se n não é igual a qualquer um dos casos que você listou. 470 00:20:32,290 --> 00:20:35,400 E, no caso padrão, nós também não necessariamente precisa de uma pausa 471 00:20:35,400 --> 00:20:39,271 porque a instrução switch vai saber que ele precisa para terminar após o default 472 00:20:39,271 --> 00:20:40,270 caso se esse for o caso. 473 00:20:40,270 --> 00:20:42,140 >> DAVID MALAN: Mas estilisticamente, nós sempre colocá-lo lá. 474 00:20:42,140 --> 00:20:42,540 >> MARIA: Sim. 475 00:20:42,540 --> 00:20:42,710 >> DAVID MALAN: Yeah. 476 00:20:42,710 --> 00:20:44,750 Então, especialmente quando se inicia, especialmente se nos menores 477 00:20:44,750 --> 00:20:47,458 confortável, eu pessoalmente apenas recomendo ficar com o ifs 478 00:20:47,458 --> 00:20:51,564 ifs e elses e-if-else-if-elses e assim por diante que apenas 479 00:20:51,564 --> 00:20:53,480 porque eles são um pouco mais simples. 480 00:20:53,480 --> 00:20:56,142 Este é um bom optimization, ou às vezes até mesmo esteticamente 481 00:20:56,142 --> 00:20:57,350 torna o código mais legível. 482 00:20:57,350 --> 00:20:59,599 E, de facto, provavelmente meio do semestre nós vamos ver um problema 483 00:20:59,599 --> 00:21:02,504 definir onde ele só fica melhor e mais fácil de ler para os humanos 484 00:21:02,504 --> 00:21:03,670 usando uma instrução switch. 485 00:21:03,670 --> 00:21:05,460 Mas não se preocupe agarrando-se a esta muito cedo. 486 00:21:05,460 --> 00:21:05,680 >> MARIA: Sim. 487 00:21:05,680 --> 00:21:08,840 Se você tem um monte de if, não pode ser apenas muito legível. 488 00:21:08,840 --> 00:21:10,965 Pode não ser muito rápido para que você possa passar por isso. 489 00:21:10,965 --> 00:21:13,230 Assim, as declarações podem mudar ser muito útil, bem. 490 00:21:13,230 --> 00:21:17,900 E também, não recorde-- não fazer se esqueça de colocar as quebras de lá. 491 00:21:17,900 --> 00:21:20,330 >> DAVID MALAN: Não lembrar disso. 492 00:21:20,330 --> 00:21:24,890 >> MARIA: Porque então você pode cair através de um caso para outro. 493 00:21:24,890 --> 00:21:27,930 Então, vamos dizer que caso CONSTANT1 não tem uma instrução break nele. 494 00:21:27,930 --> 00:21:31,920 Então nós podemos cair caso constant2 dentro. 495 00:21:31,920 --> 00:21:35,070 E nós não queremos fazer isso se que já chegou a caso CONSTANT1 496 00:21:35,070 --> 00:21:37,830 e é igual a n. 497 00:21:37,830 --> 00:21:45,100 >> Assim, por exemplo, se temos uma variável n que contém um número de classe, 498 00:21:45,100 --> 00:21:48,990 e queremos ver o que que classe é-- Se n é igual a 50, 499 00:21:48,990 --> 00:21:51,957 nós estamos indo para imprimir "é CS50 Introdução à Ciência da Computação I. " 500 00:21:51,957 --> 00:21:53,040 Então vamos quebrar. 501 00:21:53,040 --> 00:21:53,920 E é isso. 502 00:21:53,920 --> 00:21:55,950 Se, no entanto, n é igual para 51, nós vamos 503 00:21:55,950 --> 00:21:58,494 imprimir "CS51 é Introdução a Ciência da Computação II. " 504 00:21:58,494 --> 00:21:59,910 Então, novamente, nós vamos quebrar. 505 00:21:59,910 --> 00:22:05,080 No entanto, se, em seguida, nós colocamos 124, 61, qualquer outro número que você pode pensar, 506 00:22:05,080 --> 00:22:06,890 ou programa não vai de reconhecer que. 507 00:22:06,890 --> 00:22:09,010 Então, ele vai dizer: "Desculpe, eu sou não familiarizados com essa classe. " 508 00:22:09,010 --> 00:22:10,009 E ele vai quebrar. 509 00:22:10,009 --> 00:22:12,847 DAVID MALAN: Então você pode realmente ver o if, else if, else idéia aqui. 510 00:22:12,847 --> 00:22:15,430 É apenas sintaxe diferente para expressando a mesma idéia exata. 511 00:22:15,430 --> 00:22:17,690 >> MARIA: Exatamente. 512 00:22:17,690 --> 00:22:19,480 Agora temos os nossos operadores ternários. 513 00:22:19,480 --> 00:22:24,900 Assim, os operadores têm ternários três parts-- uma condição, 514 00:22:24,900 --> 00:22:27,220 algo para fazer se essa condição for verdadeira, 515 00:22:27,220 --> 00:22:29,730 e, em seguida, algo a ver se essa condição for falsa. 516 00:22:29,730 --> 00:22:33,400 Então você vê, basicamente, a sintaxe do que aqui. 517 00:22:33,400 --> 00:22:37,792 Nós temos o ponto de interrogação, e as-- então o que nós chamamos isso? 518 00:22:37,792 --> 00:22:38,750 DAVID MALAN: O cólon. 519 00:22:38,750 --> 00:22:39,100 MARIA: Colon. 520 00:22:39,100 --> 00:22:39,599 Obrigado. 521 00:22:39,599 --> 00:22:41,880 Desculpa. 522 00:22:41,880 --> 00:22:45,800 Então, vamos olhar para o nosso exemplo para ver se podemos dar sentido a isto-- 523 00:22:45,800 --> 00:22:47,840 class_num == 50. 524 00:22:47,840 --> 00:22:52,580 Então, aqui vemos o nosso operador booleano == que compara a class_num variável 525 00:22:52,580 --> 00:22:53,100 a 50. 526 00:22:53,100 --> 00:22:55,150 Lojas Então class_num um inteiro. 527 00:22:55,150 --> 00:22:58,180 E se esse inteiro é igual a 50, então nós estamos 528 00:22:58,180 --> 00:23:02,810 indo para armazenar "David Malan" no interior do professor de string. 529 00:23:02,810 --> 00:23:05,912 Se o número de classe não faz igual a 50, "não David Malan" 530 00:23:05,912 --> 00:23:07,120 vai ser o professor. 531 00:23:07,120 --> 00:23:08,630 >> DAVID MALAN: Obrigado. 532 00:23:08,630 --> 00:23:12,110 E assim, este parece equivalente a o que, você diria que, à primeira vista? 533 00:23:12,110 --> 00:23:17,930 534 00:23:17,930 --> 00:23:19,960 >> MARIA: Para mim parece como if-else declarações. 535 00:23:19,960 --> 00:23:20,709 >> DAVID MALAN: Yeah. 536 00:23:20,709 --> 00:23:24,020 E, de fato, este é o tipo de uma linda um forro, 537 00:23:24,020 --> 00:23:27,520 por assim dizer, para a implementação de exatamente a lógica de if-else 538 00:23:27,520 --> 00:23:29,010 mas fazendo tudo em uma única etapa. 539 00:23:29,010 --> 00:23:29,860 >> MARIA: Exatamente. 540 00:23:29,860 --> 00:23:30,360 Sim. 541 00:23:30,360 --> 00:23:33,520 Portanto, se as declarações mais pode- pegar um monte de espaço. 542 00:23:33,520 --> 00:23:36,283 Eles podem ser muito longo para algo tão simples como isso. 543 00:23:36,283 --> 00:23:38,350 Então, isso pode ser muito sucinta e muito agradável. 544 00:23:38,350 --> 00:23:40,880 545 00:23:40,880 --> 00:23:46,820 Então, agora nós estamos indo em olhar execução de algo novo e de novo, 546 00:23:46,820 --> 00:23:50,060 portanto, a verificação por um condicionar várias vezes 547 00:23:50,060 --> 00:23:53,510 e, em seguida, continuar a fazer algo enquanto que a condição é verdadeira. 548 00:23:53,510 --> 00:23:56,740 Então, isso nos traz muito bem em loops de tempo. 549 00:23:56,740 --> 00:23:59,270 >> À esquerda, temos nosso primeiro loop while. 550 00:23:59,270 --> 00:24:03,840 Assim, enquanto algo é verdadeiro, fazer algo de novo e de novo. 551 00:24:03,840 --> 00:24:08,850 Então certifique-se notar que a nossa condição aqui é validado no topo. 552 00:24:08,850 --> 00:24:14,150 Considerando que, com a nossa segunda loop-- chamamos que um do-while loop-- fazemos algo, 553 00:24:14,150 --> 00:24:15,890 então nós verificar se há uma condição. 554 00:24:15,890 --> 00:24:17,980 E se essa condição continua a ser verdade, 555 00:24:17,980 --> 00:24:20,150 Vamos voltar e fazer a coisa novamente. 556 00:24:20,150 --> 00:24:23,360 Assim, a principal diferença é o lugar onde a condição é verificada para. 557 00:24:23,360 --> 00:24:29,260 E o código não pode ser executado se a condição não é 558 00:24:29,260 --> 00:24:30,430 verdadeiro com o loop while. 559 00:24:30,430 --> 00:24:33,050 Considerando que, com o do-while loop, temos o código 560 00:24:33,050 --> 00:24:35,380 que é sempre executado pelo menos uma vez. 561 00:24:35,380 --> 00:24:37,470 E, em seguida, enquanto a condição continua a ser verdade, 562 00:24:37,470 --> 00:24:39,960 podemos voltar e fazer uma iteração novamente dentro. 563 00:24:39,960 --> 00:24:43,625 Então, por que você acha que nós usaríamos um do-while loop sobre um loop while? 564 00:24:43,625 --> 00:24:48,221 565 00:24:48,221 --> 00:24:48,720 Certo. 566 00:24:48,720 --> 00:24:52,600 Portanto, se queremos para solicitar ao usuário para algum tipo de entrada, 567 00:24:52,600 --> 00:24:55,400 se queremos pedir-lhes para inserir seu nome, 568 00:24:55,400 --> 00:24:57,342 queremos pedir-lhes, pelo menos, uma vez. 569 00:24:57,342 --> 00:24:59,050 E se eles entrar esse nome, nós não somos 570 00:24:59,050 --> 00:25:00,740 vamos pedir-los novamente porque nós já conhecemos. 571 00:25:00,740 --> 00:25:02,656 Mas se eles não entrarem seu nome, ou se eles 572 00:25:02,656 --> 00:25:05,787 digite algo que é obviamente, não um nome, 573 00:25:05,787 --> 00:25:08,120 nós ainda queremos continuar pedindo-lhes para em seu nome. 574 00:25:08,120 --> 00:25:10,710 >> DAVID MALAN: E em palestra tivemos um assim com a obter int positivo 575 00:25:10,710 --> 00:25:13,550 exemplo, onde não há nada para verificar no início, porque você não tem mesmo 576 00:25:13,550 --> 00:25:14,190 obtido um int. 577 00:25:14,190 --> 00:25:16,680 Por isso, queremos fazer isto-- obter um int do user-- 578 00:25:16,680 --> 00:25:18,860 em seguida, verificar que, talvez, de novo e de novo e de novo. 579 00:25:18,860 --> 00:25:21,030 >> MARIA: Exatamente. 580 00:25:21,030 --> 00:25:22,060 Para loops-- OK. 581 00:25:22,060 --> 00:25:25,842 Para loops podem nos permitem fazer quase exatamente a mesma coisa, também. 582 00:25:25,842 --> 00:25:27,300 Na verdade, é exatamente a mesma coisa. 583 00:25:27,300 --> 00:25:30,190 Então não há nada que você pode fazer com loops 584 00:25:30,190 --> 00:25:32,840 que você não seria capaz a ver com loops de tempo. 585 00:25:32,840 --> 00:25:36,900 Mas para loops pode parecer um pouco pouco mais complicado sintaticamente 586 00:25:36,900 --> 00:25:39,730 porque eles têm três partes dentro do que 587 00:25:39,730 --> 00:25:42,990 era antes apenas o condição com loops de tempo. 588 00:25:42,990 --> 00:25:48,260 Assim, a primeira parte que você mar, o mais à esquerda, temos "int anões = 0." 589 00:25:48,260 --> 00:25:51,490 Portanto, este é o lugar onde nós inicializar nossa variável. 590 00:25:51,490 --> 00:25:55,210 >> Então nós temos um ponto e vírgula e "anões <7." 591 00:25:55,210 --> 00:25:57,100 Portanto, este é o lugar onde fora condição realmente é. 592 00:25:57,100 --> 00:26:00,170 Então é isso que teríamos colocar apenas no enquanto loop-- 593 00:26:00,170 --> 00:26:01,880 "enquanto anões <7." 594 00:26:01,880 --> 00:26:05,380 Aqui, que vai no meio do nosso loop for. 595 00:26:05,380 --> 00:26:07,190 Assim, "dwaves <7." 596 00:26:07,190 --> 00:26:11,350 E então nossa última parte é "anões ++" que é onde nós atualizamos nossa variável. 597 00:26:11,350 --> 00:26:15,470 Então, o importante para perceber é que esta 598 00:26:15,470 --> 00:26:22,010 vai passar por este loop for sete vezes e executar sete vezes. 599 00:26:22,010 --> 00:26:24,020 Portanto, temos sete anões, e eles estão todos 600 00:26:24,020 --> 00:26:26,020 vai dizer: "Eu estou aqui para ajudá-lo, Branca de Neve " 601 00:26:26,020 --> 00:26:28,860 porque eles estão prontos para ajudar a Branca de Neve. 602 00:26:28,860 --> 00:26:33,600 >> Com enquanto loops, teríamos feito a inicialização ea atualização 603 00:26:33,600 --> 00:26:37,490 não dentro da condição, uma vez mais, mas antes ou dentro do loop while 604 00:26:37,490 --> 00:26:40,210 para se certificar de que nós-- porque precisamos sempre essas peças. 605 00:26:40,210 --> 00:26:42,835 Então, para se certificar de que nós temos eles, teria ainda adicionou-los 606 00:26:42,835 --> 00:26:44,580 em, não apenas dentro dos parênteses. 607 00:26:44,580 --> 00:26:47,288 >> DAVID MALAN: E assim parece como-- na palestra, por exemplo, 608 00:26:47,288 --> 00:26:50,250 Eu quase sempre uso, como, eu e n variáveis ​​e muito chato. 609 00:26:50,250 --> 00:26:53,050 Parece que você pode usar mais inteligentemente chamado variáveis, também. 610 00:26:53,050 --> 00:26:56,300 >> MARIA: Sim, é realmente muito bom usar variáveis ​​um pouco mais descritivos 611 00:26:56,300 --> 00:26:59,400 porque especialmente se alguém está ler o seu code-- talvez você esteja motoniveladora 612 00:26:59,400 --> 00:27:00,940 ou se você estiver colaborando com somebody-- 613 00:27:00,940 --> 00:27:03,481 você quer ter certeza de que eles entender o que você está fazendo. 614 00:27:03,481 --> 00:27:05,750 615 00:27:05,750 --> 00:27:06,400 >> ESTÁ BEM. 616 00:27:06,400 --> 00:27:11,435 Então, isso é algo muito funky-- loop dentro de um loop for. 617 00:27:11,435 --> 00:27:13,060 Eu não sei se já vi isso antes. 618 00:27:13,060 --> 00:27:13,830 Provavelmente não. 619 00:27:13,830 --> 00:27:17,750 Mas nós podemos realmente ter isto-- assim ciclos em vez de laços. 620 00:27:17,750 --> 00:27:25,130 Então, alguém quer andar talvez me com o que está acontecendo aqui? 621 00:27:25,130 --> 00:27:28,240 622 00:27:28,240 --> 00:27:29,490 DAVID MALAN: Eu vou tomar uma facada. 623 00:27:29,490 --> 00:27:29,970 MARIA: Cool. 624 00:27:29,970 --> 00:27:30,636 DAVID MALAN: OK. 625 00:27:30,636 --> 00:27:34,690 Então, spoiler-- queremos imprimir o material que está no canto inferior direito 626 00:27:34,690 --> 00:27:35,190 há. 627 00:27:35,190 --> 00:27:35,450 >> MARIA: Certo. 628 00:27:35,450 --> 00:27:35,710 Sim sim. 629 00:27:35,710 --> 00:27:38,043 >> DAVID MALAN: Então nós temos apenas colocar esse exemplo de saída lá. 630 00:27:38,043 --> 00:27:42,590 Então eu posso inferir a partir da superior loop que você é 631 00:27:42,590 --> 00:27:45,680 iteração sobre as linhas laço mais externo, por assim dizer. 632 00:27:45,680 --> 00:27:48,107 E você está interagindo sobre colunas com o laço mais interno. 633 00:27:48,107 --> 00:27:50,190 E intuitiva, este deve esperançosamente faz sentido 634 00:27:50,190 --> 00:27:52,070 porque, por natureza de cada programa que temos visto 635 00:27:52,070 --> 00:27:55,570 antes, printf, que é a função que estamos usando, em última análise, 636 00:27:55,570 --> 00:27:58,190 tem a capacidade de imprimir material out essencialmente linha por linha. 637 00:27:58,190 --> 00:27:59,960 Como, uma vez que você emitido uma nova linha, há 638 00:27:59,960 --> 00:28:02,876 não dobrando para trás e imprimir algo superior no ecrã, pelo menos 639 00:28:02,876 --> 00:28:04,530 não usar printf como este. 640 00:28:04,530 --> 00:28:07,750 >> E assim, a este respeito, faz sentido em que o circuito externo 641 00:28:07,750 --> 00:28:10,930 deve estar se referindo às linhas porque para cada dada linha, 642 00:28:10,930 --> 00:28:13,650 você vai querer imprimir XXXXX, e, em seguida, 643 00:28:13,650 --> 00:28:15,520 passar para a próxima linha, XXXXX. 644 00:28:15,520 --> 00:28:17,317 Assim, as linhas vêm em primeiro lugar. 645 00:28:17,317 --> 00:28:19,150 E, em seguida, dentro de cada fileira, você imprime colunas. 646 00:28:19,150 --> 00:28:21,160 Se você tentou fazê-lo da oposto, ele provavelmente não faria 647 00:28:21,160 --> 00:28:21,690 sair como você pretende. 648 00:28:21,690 --> 00:28:22,190 >> MARIA: Sim. 649 00:28:22,190 --> 00:28:24,950 Nós apenas não poderia voltar para a linha anterior com printf. 650 00:28:24,950 --> 00:28:27,658 >> DAVID MALAN: E o que é interessante por bate-papo de hoje sobre o escopo, 651 00:28:27,658 --> 00:28:31,600 na verdade, é que linha é um int que está declarado no circuito de nível superior. 652 00:28:31,600 --> 00:28:34,030 Mas note que ainda é dentro de, por assim dizer, 653 00:28:34,030 --> 00:28:35,982 as chaves que siga imediatamente, 654 00:28:35,982 --> 00:28:38,440 mesmo que ele não é tecnicamente dentro dessas chaves. 655 00:28:38,440 --> 00:28:41,750 Então linha está no escopo para o totalidade do trecho de código, 656 00:28:41,750 --> 00:28:44,690 tanto dentro do exterior para o laço e no interior do interior para loop. 657 00:28:44,690 --> 00:28:48,050 Mas por outro lado, onde é a coluna no escopo? 658 00:28:48,050 --> 00:28:49,810 A coluna variável? 659 00:28:49,810 --> 00:28:51,310 É, apenas no loop interno. 660 00:28:51,310 --> 00:28:54,280 E isso é OK porque nós não acessar fora de suas chaves. 661 00:28:54,280 --> 00:28:57,280 Tudo o que fazemos é imprimir um novo linha no final lá. 662 00:28:57,280 --> 00:28:58,670 De modo que, de fato, é OK. 663 00:28:58,670 --> 00:29:03,740 >> Então, isso tem o efeito, parece que, de fazer três linhas e quatro colunas. 664 00:29:03,740 --> 00:29:04,370 >> MARIA: Certo. 665 00:29:04,370 --> 00:29:06,270 Então, primeiro vamos nós através de nossa primeira linha. 666 00:29:06,270 --> 00:29:10,520 E apenas em nossa primeira linha, nós fazemos o quatro colunas dentro a primeira linha. 667 00:29:10,520 --> 00:29:11,980 Então, nós imprimir quatro Xs. 668 00:29:11,980 --> 00:29:15,800 E então nós podemos sair do loop, uma vez que nós já impressos quatro Xs. 669 00:29:15,800 --> 00:29:17,100 E nós imprimir uma nova linha. 670 00:29:17,100 --> 00:29:19,920 E então passamos a mesmo processo por mais duas linhas 671 00:29:19,920 --> 00:29:21,170 para perfazer um total de três. 672 00:29:21,170 --> 00:29:23,530 >> DAVID MALAN: E é interessante notar que é apenas um artefato do tipo de letra, o fato 673 00:29:23,530 --> 00:29:25,680 que a saída de exemplo parece muito mais alto, 674 00:29:25,680 --> 00:29:27,520 como se houvesse mais linhas do que colunas. 675 00:29:27,520 --> 00:29:29,824 Mas é só porque o X é mais alto do que largo. 676 00:29:29,824 --> 00:29:32,740 Isso é tudo o que está acontecendo lá, mais o espaço em branco entre as linhas. 677 00:29:32,740 --> 00:29:33,281 >> MARIA: Certo. 678 00:29:33,281 --> 00:29:34,792 Frio. 679 00:29:34,792 --> 00:29:35,750 DAVID MALAN: Tudo bem. 680 00:29:35,750 --> 00:29:39,830 Assim, uma rápida olhada em um conjunto de problemas, tirar alguma dúvida, e depois adiar? 681 00:29:39,830 --> 00:29:40,330 Tudo certo. 682 00:29:40,330 --> 00:29:43,164 Assim, em um conjunto de problemas, há três desafios principais, em última análise. 683 00:29:43,164 --> 00:29:44,955 Mas, primeiro, você vai encontrar que o conjunto de problemas 684 00:29:44,955 --> 00:29:47,900 especificação, como acontece com muitos o Série de Exercícios esta queda, vai orientá-lo 685 00:29:47,900 --> 00:29:50,691 através de alguns exercícios de aquecimento, apontá-lo para fora alguns recursos 686 00:29:50,691 --> 00:29:52,440 que você pode ou não vimos já. 687 00:29:52,440 --> 00:29:54,440 Por exemplo, CS50 tem um conjunto de shorts, 688 00:29:54,440 --> 00:29:56,481 que são pequenos vídeos, Não ao contrário deste, mas que 689 00:29:56,481 --> 00:29:58,460 são muito specific-- tópico talvez cinco minutos, 690 00:29:58,460 --> 00:30:02,360 10 minutos de duração em laços ou ou em condições em algoritmos 691 00:30:02,360 --> 00:30:04,125 ou posterior no mais tópicos avançados, bem. 692 00:30:04,125 --> 00:30:06,000 E nós geralmente incorporar aqueles em o problema 693 00:30:06,000 --> 00:30:07,950 conjuntos para que os alunos tem um recurso com os quais 694 00:30:07,950 --> 00:30:10,840 a avaliar material que pode ter já chegar na palestra ou seção. 695 00:30:10,840 --> 00:30:13,220 Mas desta forma é mais focado e mais na ponta dos dedos. 696 00:30:13,220 --> 00:30:15,928 >> Nós também tendem a incorporar no problema define coisas chamadas orientações. 697 00:30:15,928 --> 00:30:20,790 Assim, quase todos os exemplos que eu faço em palestra, no palco aqui, nós também 698 00:30:20,790 --> 00:30:24,565 ter atirado na câmera em avançar um mais lento, 699 00:30:24,565 --> 00:30:28,760 um passo a passo mais íntimo por mim em meu laptop do mesmo código, linha por linha 700 00:30:28,760 --> 00:30:31,427 de modo que em sala de aula, vamos muitas vezes folhear algo ou alguém 701 00:30:31,427 --> 00:30:33,260 vai interpor com um responder a uma pergunta. 702 00:30:33,260 --> 00:30:35,820 Mas isso não significa necessariamente afundar por todos na platéia. 703 00:30:35,820 --> 00:30:38,230 Então você vai encontrar o código orientações para a maioria dos exemplos 704 00:30:38,230 --> 00:30:40,950 o que fazemos aqui em palestra para que você pode atravessá-la no seu próprio ritmo 705 00:30:40,950 --> 00:30:43,580 e retroceder ou avançar rapidamente ou ignore por completo, se você gostaria. 706 00:30:43,580 --> 00:30:45,356 >> Há muitas vezes um pouco perguntas warm-up que 707 00:30:45,356 --> 00:30:47,105 pedir-lhe que tipo de reforçar este material 708 00:30:47,105 --> 00:30:50,250 e certifique-se que você é confortável antes de prosseguir com o resto do pset. 709 00:30:50,250 --> 00:30:51,700 E então, é claro, há o próprio pset. 710 00:30:51,700 --> 00:30:53,450 E uma das coisas nós deliberadamente 711 00:30:53,450 --> 00:30:57,202 fazer em CS50 é quase todo desinteressante ou intelectualmente desinteressante 712 00:30:57,202 --> 00:30:58,910 passo que mecânica você pode ter que fazer 713 00:30:58,910 --> 00:31:00,519 é quase sempre muito bem documentada. 714 00:31:00,519 --> 00:31:03,560 Ao longo do termo, nós vamos começar a fazer perguntas mais retóricas 715 00:31:03,560 --> 00:31:06,187 como se lembrar de como fazer isto ou aquilo? 716 00:31:06,187 --> 00:31:08,520 Mas, geralmente, você encontrará que os conjuntos de problemas que você obtenha 717 00:31:08,520 --> 00:31:10,269 através da mecânica de algo para que 718 00:31:10,269 --> 00:31:14,160 os desafios intelectuais interessantes, são em última análise, cabe a você o aluno. 719 00:31:14,160 --> 00:31:17,390 >> Com isso dito, Zamyla, a quem nós mantidos referindo hoje em palestra, 720 00:31:17,390 --> 00:31:20,190 é um de nossos funcionários de longa data membro que também detém orientações 721 00:31:20,190 --> 00:31:24,520 sobre os problemas específicos como PSet mario e gananciosos, embora não regar este ano. 722 00:31:24,520 --> 00:31:26,540 E é naqueles orientações que muitas vezes ela 723 00:31:26,540 --> 00:31:29,450 oferece algumas dicas e truques para como proceder, nunca te dizendo 724 00:31:29,450 --> 00:31:31,810 exatamente o que fazer, mas rather-- como uma condição, 725 00:31:31,810 --> 00:31:35,200 se você will-- dando-lhe, pelo menos, um par de ideias para que cabe a você, 726 00:31:35,200 --> 00:31:37,830 em última análise, para decidir como abordá-los. 727 00:31:37,830 --> 00:31:41,200 >> MARIA: como uma espécie de alto nível compreensão da lógica do que 728 00:31:41,200 --> 00:31:42,220 estamos lhe pedindo para fazer. 729 00:31:42,220 --> 00:31:42,485 >> DAVID MALAN: Exatamente. 730 00:31:42,485 --> 00:31:44,190 E, de fato, de Zamyla orientações são destinadas 731 00:31:44,190 --> 00:31:46,190 para responder à freqüência pergunta de onde 732 00:31:46,190 --> 00:31:48,610 Comecei a fazer, especialmente quando estas especificações são longos 733 00:31:48,610 --> 00:31:51,960 um pouco assustador dado todo o texto e as imagens que eles têm em si. 734 00:31:51,960 --> 00:31:54,890 >> Então water.c, você encontrará depois de ter concluído que, 735 00:31:54,890 --> 00:31:56,920 é, na verdade relativamente simples. 736 00:31:56,920 --> 00:31:58,882 Absolutamente são um bando de que você vai bater 737 00:31:58,882 --> 00:32:01,840 suas cabeças contra a parede tentando para descobrir por que ele não está compilando 738 00:32:01,840 --> 00:32:03,450 ou por que ele não está funcionando corretamente. 739 00:32:03,450 --> 00:32:05,040 Mas uma vez que você está feito com ele e uma vez que você 740 00:32:05,040 --> 00:32:07,620 passou algum tempo lutando com qualquer dos erros que você possa ter, 741 00:32:07,620 --> 00:32:09,490 você vai descobrir que ele é um programa muito curto. 742 00:32:09,490 --> 00:32:11,770 Ele pode ser feito em apenas alguns linhas de código, a maioria dos quais 743 00:32:11,770 --> 00:32:15,030 temos visto aqui em palestra já, se você monta os blocos de construção certas. 744 00:32:15,030 --> 00:32:16,810 >> E, como sugerimos aqui, ele vai pedir 745 00:32:16,810 --> 00:32:22,250 que você especifique quantos minutos alguém está tomando banho no campus. 746 00:32:22,250 --> 00:32:24,779 Nós especificar no problema definir a taxa de fluxo de água 747 00:32:24,779 --> 00:32:27,320 em, tipo, um chuveiro de baixo fluxo cabeça, muito parecido com o clipe de Seinfeld 748 00:32:27,320 --> 00:32:29,180 vimos ontem ou o oposto do mesmo. 749 00:32:29,180 --> 00:32:30,971 E então você apenas tem para fazer um pouco de matemática, 750 00:32:30,971 --> 00:32:34,710 realmente-- aritmética usando C para contar nos como muitos, grosso modo, garrafas de água 751 00:32:34,710 --> 00:32:37,720 é equivalente a que se nós somos tomar um duche n minutos. 752 00:32:37,720 --> 00:32:41,389 >> Agora, em mario.c, isso vai um programa para ser ligeiramente mais longo. 753 00:32:41,389 --> 00:32:42,930 Ele ainda não vai ser tanto tempo. 754 00:32:42,930 --> 00:32:45,130 Apenas algumas linhas mais longas do que water.c. 755 00:32:45,130 --> 00:32:48,230 Mas vai ser oportunidade para recriar a velha escola Mario 756 00:32:48,230 --> 00:32:50,670 pirâmide de Super Mario Irmãos ou algum follow-on. 757 00:32:50,670 --> 00:32:53,510 Não vai parecer tão mais bonita ou tão coloridas como aquele lá. 758 00:32:53,510 --> 00:32:56,468 Nós apenas estamos indo para usar pequenos hashtags como nós temos aqui na tela 759 00:32:56,468 --> 00:32:58,120 usando texto ASCII. 760 00:32:58,120 --> 00:33:00,362 Mas vai aproximar a mesma idéia. 761 00:33:00,362 --> 00:33:02,570 E vai ser um exercer que à primeira vista 762 00:33:02,570 --> 00:33:04,720 parece bastante simple-- apenas imprimir uma pirâmide simples. 763 00:33:04,720 --> 00:33:07,345 Mas há algumas características aqui que são interessantes. 764 00:33:07,345 --> 00:33:12,400 Note-se que a aresta mais à direita de pirâmide, na verdade, tem dois largura. 765 00:33:12,400 --> 00:33:14,570 Portanto, não há dois iguais colunas de altura, os quais 766 00:33:14,570 --> 00:33:16,804 torna-lo exigir um pouco pouco de pensamento para fazer 767 00:33:16,804 --> 00:33:19,720 certeza de obter exatamente o que a direita, como oposição a apenas um perfeitamente angulado 768 00:33:19,720 --> 00:33:20,220 linha. 769 00:33:20,220 --> 00:33:23,340 Então, isso é um pouco de um caso de canto mas coincide com o jogo real. 770 00:33:23,340 --> 00:33:27,610 >> E também é não-óbvio à primeira vista vista como imprimir o espaço em branco. 771 00:33:27,610 --> 00:33:29,430 Então, quando eu olhar para o amostra aqui-- saída 772 00:33:29,430 --> 00:33:32,440 e é também no spec---lo tipo dos olhares como um retângulo, 773 00:33:32,440 --> 00:33:35,120 mas uma diagonal do retângulo foi cortada, 774 00:33:35,120 --> 00:33:37,320 e é apenas espaços em branco, por assim dizer. 775 00:33:37,320 --> 00:33:40,100 E assim um pediu freqüentemente questão aqui é sempre, bem, 776 00:33:40,100 --> 00:33:43,302 como faço para mover as hashtags para a direita? 777 00:33:43,302 --> 00:33:44,760 Ou como posso imprimir os espaços em branco? 778 00:33:44,760 --> 00:33:46,860 E é realmente mais fácil que a maioria dos estudantes pensam. 779 00:33:46,860 --> 00:33:47,360 Certo? 780 00:33:47,360 --> 00:33:51,620 Você pode aproximar-lo visualmente por apenas bater a barra de espaço uma ou duas vezes 781 00:33:51,620 --> 00:33:52,700 ou três vezes. 782 00:33:52,700 --> 00:33:56,260 >> E por isso mesmo que nós quase com printf sempre imprimir uma string ou um int 783 00:33:56,260 --> 00:33:59,950 ou uma palavra como "Olá, mundo "ou série de palavras, 784 00:33:59,950 --> 00:34:03,560 você também pode imprimir apenas Citação, espaço, fecha aspas. 785 00:34:03,560 --> 00:34:06,320 E isso vai realmente dar- lhe um espaço em branco lá. 786 00:34:06,320 --> 00:34:08,330 Portanto, manter isso em mente e não overthink este. 787 00:34:08,330 --> 00:34:10,570 Você realmente tem que decidir linha por linha por linha, 788 00:34:10,570 --> 00:34:14,280 não ao contrário de seu exemplo, um há pouco, quantos desses 789 00:34:14,280 --> 00:34:18,420 colunas devem ser espaços em branco e quantos deles devem ser hashtags. 790 00:34:18,420 --> 00:34:21,560 Vai levar um pouco de tempo, mas é em última análise, um quebra-cabeça lógica das sortes. 791 00:34:21,560 --> 00:34:22,060 >> MARIA: Sim. 792 00:34:22,060 --> 00:34:25,060 Mas a lógica de ir linha por linha vai ser muito útil aqui. 793 00:34:25,060 --> 00:34:25,810 DAVID MALAN: Yeah. 794 00:34:25,810 --> 00:34:28,976 Eu acho que o código de exemplo que você mesmo gave-- embora não fosse um programa completo. 795 00:34:28,976 --> 00:34:34,247 Você ainda precisa int e principal e stdio.h vazio e #include, 796 00:34:34,247 --> 00:34:35,580 um monte de coisas a partir de palestra. 797 00:34:35,580 --> 00:34:37,629 Mas os blocos de construção parecem estar lá. 798 00:34:37,629 --> 00:34:39,920 E então, finalmente é algo um pouco mais algorítmica. 799 00:34:39,920 --> 00:34:43,210 Assim, verifica-se que a qualquer momento você entrar em CVS ou qualquer loja de conveniência 800 00:34:43,210 --> 00:34:47,810 e alguém lhe entrega no contas de caixa ou moedas como mudança, 801 00:34:47,810 --> 00:34:50,620 verifica-se que eles, os seres humanos, ou não sabe ou não, 802 00:34:50,620 --> 00:34:53,300 são, provavelmente, usando o que é chamado um algoritmo guloso, 803 00:34:53,300 --> 00:34:58,170 pelo que se você estiver em dívida, dizem, $ 21 em mudança, porque, por algum motivo 804 00:34:58,170 --> 00:35:01,580 você comprou algo muito barato com um grande projeto de lei no CVS, 805 00:35:01,580 --> 00:35:05,910 que seria muito chato se o cashier deu-lhe 21 quartos individuais ou, pior 806 00:35:05,910 --> 00:35:07,629 ainda assim, um monte de moedas. 807 00:35:07,629 --> 00:35:10,670 Em vez disso, o que uma pessoa razoável é provavelmente vai fazer é que eles vão 808 00:35:10,670 --> 00:35:14,224 para pegar um US $ 20 e, em seguida, um projeto de lei de US $ 1, e entregar-lhe apenas duas contas nesse caso. 809 00:35:14,224 --> 00:35:17,390 MARIA: Então eles estão procurando minimizar a mudança que eles dão de volta para você. 810 00:35:17,390 --> 00:35:17,850 DAVID MALAN: Exatamente. 811 00:35:17,850 --> 00:35:19,540 E mesmo negócio com moedas, também. 812 00:35:19,540 --> 00:35:23,040 Se você estiver em dívida, digamos, US $ 0,50, espero que você não quer 50 moedas de um centavo. 813 00:35:23,040 --> 00:35:25,500 Você não quer dois trimestres, por exemplo. 814 00:35:25,500 --> 00:35:27,540 Agora, isso faz supor que o caixa tem 815 00:35:27,540 --> 00:35:29,940 suficiente de todas as denominações que ele ou ela pode querer dar-lhe. 816 00:35:29,940 --> 00:35:32,148 Mas nós lhe permitem assumir tanto no problema. 817 00:35:32,148 --> 00:35:35,590 E o objetivo, em última análise, é a implementar em código C um algoritmo guloso. 818 00:35:35,590 --> 00:35:37,344 Assim, o usuário tem permissão para digitar o quanto 819 00:35:37,344 --> 00:35:40,510 mudar ele ou ela está em dívida com dólares e centavos, uma espécie de ponto flutuante 820 00:35:40,510 --> 00:35:41,590 valor provavelmente. 821 00:35:41,590 --> 00:35:45,530 E então você tem que fazer as contas e descobrir através de algoritmos, bem, 822 00:35:45,530 --> 00:35:49,020 quantas moedas eu posso dar você minimamente para lhe dar 823 00:35:49,020 --> 00:35:50,270 exatamente essa quantidade de mudança. 824 00:35:50,270 --> 00:35:53,470 Mas não vai ser um algumas partes difíceis aqui, certo? 825 00:35:53,470 --> 00:35:56,236 Como há a todo questão imprecisão. 826 00:35:56,236 --> 00:35:56,860 MARIA: Exatamente. 827 00:35:56,860 --> 00:35:59,114 Assim ponto flutuante valores têm imprecisão. 828 00:35:59,114 --> 00:36:00,780 Será que vamos conversar sobre isso na aula hoje? 829 00:36:00,780 --> 00:36:02,340 >> DAVID MALAN: Nós fizemos a última vez em palestra. 830 00:36:02,340 --> 00:36:03,506 Nós conversamos sobre imprecisão. 831 00:36:03,506 --> 00:36:08,840 E você não quer enganar o usuário de quanta mudança que ele ou ela é devido. 832 00:36:08,840 --> 00:36:11,290 E assim o passo a passo, em a especificação conjunto de problemas, 833 00:36:11,290 --> 00:36:15,990 dar algum pensamento, em última análise, como a como você pode atenuar os imprecisão 834 00:36:15,990 --> 00:36:17,280 erros, potencialmente. 835 00:36:17,280 --> 00:36:21,050 É evitável, certamente, para as entradas que estamos falando. 836 00:36:21,050 --> 00:36:23,590 E, de fato, pennies-- talvez nós vamos adiar para Zamyla, 837 00:36:23,590 --> 00:36:25,136 Eu acho que, para os truques lá. 838 00:36:25,136 --> 00:36:27,760 Então, finalmente, você vai encontrar um progressão de problemas esta semana, 839 00:36:27,760 --> 00:36:30,700 o primeiro dos quais é muito pequena, em seguida, médio, em seguida, um pouco maior. 840 00:36:30,700 --> 00:36:33,200 Mas todos eles utilizam o edifício quarteirões na semana passada, 841 00:36:33,200 --> 00:36:35,280 a partir deste supersection, conjunto de problemas especificação 842 00:36:35,280 --> 00:36:36,710 coloca em inúmeros recursos. 843 00:36:36,710 --> 00:36:41,000 Mas, ainda assim, se em todos lutando, especialmente entre aqueles menos confortável 844 00:36:41,000 --> 00:36:42,917 sem fundo anterior, vir para o horário de expediente 845 00:36:42,917 --> 00:36:44,958 na segunda-feira e terça-feira e Quarta-feira e quinta-feira. 846 00:36:44,958 --> 00:36:46,950 Ir para CS50 via Discutir o site do curso, 847 00:36:46,950 --> 00:36:49,080 através do qual você pode conversar com funcionários e colegas. 848 00:36:49,080 --> 00:36:51,670 >> Mas, afinal, eu acho que o melhor conselho é simplesmente começar cedo. 849 00:36:51,670 --> 00:36:54,711 Não é o tipo de classe que você Série de Exercícios deve estar começando na quarta-feira 850 00:36:54,711 --> 00:36:56,640 noite, ou pior noite quinta-feira. 851 00:36:56,640 --> 00:36:59,067 >> MARIA: Meu melhor conselho é ter começado na segunda-feira. 852 00:36:59,067 --> 00:36:59,900 DAVID MALAN: segunda-feira. 853 00:36:59,900 --> 00:37:02,490 Então, se você ainda não começou já-- não. 854 00:37:02,490 --> 00:37:04,732 Mas mesmo que não segunda-feira, em seguida, terça-feira. 855 00:37:04,732 --> 00:37:05,690 Quanto mais cedo, melhor. 856 00:37:05,690 --> 00:37:08,605 E essa é a razão pela qual o curso tem tantos dias de atraso é 857 00:37:08,605 --> 00:37:10,535 para dar-lhe um pouco de pressão psicológica 858 00:37:10,535 --> 00:37:13,684 começar mais cedo, mas ainda deixá coisas escorregar quando as coisas demoram mais 859 00:37:13,684 --> 00:37:14,350 do que você espera. 860 00:37:14,350 --> 00:37:17,950 >> MARIA: E você quiser fazer uso de o horário de expediente, tanto quanto você pode, também. 861 00:37:17,950 --> 00:37:20,291 >> DAVID MALAN: Alguma pergunta? 862 00:37:20,291 --> 00:37:20,790 Tudo certo. 863 00:37:20,790 --> 00:37:22,930 Bem, por que não podemos adiar aqui? 864 00:37:22,930 --> 00:37:23,487