1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:01,960 COLUNA 1: Vamos falar sobre a água. 3 00:00:01,960 --> 00:00:07,280 Neste problema, pedimos ao usuário informar -nos quanto tempo em minutos o seu chuveiro era 4 00:00:07,280 --> 00:00:11,040 e então nós o cálculo do equivalente número de garrafas de água 5 00:00:11,040 --> 00:00:12,970 que seu chuveiro usado. 6 00:00:12,970 --> 00:00:16,379 >> Então, quais são nossos afazeres para este problema? 7 00:00:16,379 --> 00:00:20,050 Primeiro, vamos querer para solicitar e, em seguida, validar 8 00:00:20,050 --> 00:00:22,100 a entrada que o usuário nos dá. 9 00:00:22,100 --> 00:00:24,790 Uma vez que temos o cuidado de ter a entrada de usuário válido, 10 00:00:24,790 --> 00:00:28,230 vamos calcular o número equivalente de garrafas de água 11 00:00:28,230 --> 00:00:30,770 que o usuário teve durante seu chuveiro, e então nós estamos 12 00:00:30,770 --> 00:00:33,720 vai dizer a eles por imprimindo a esse número. 13 00:00:33,720 --> 00:00:37,230 >> Então, vamos enfrentar o nosso primeiro tarefa, o que levou e validando 14 00:00:37,230 --> 00:00:38,550 a entrada do usuário. 15 00:00:38,550 --> 00:00:40,910 Para isso, você escreveu um função para você chamado 16 00:00:40,910 --> 00:00:43,950 get_int localizado na Biblioteca CS50. 17 00:00:43,950 --> 00:00:48,710 get_int garante que as entradas de usuários um inteiro, então todos os números positivos, 18 00:00:48,710 --> 00:00:51,700 números negativos, ou zero são todos aceitos. 19 00:00:51,700 --> 00:00:55,900 Mas se o usuário insere qualquer outra coisa, portanto, qualquer combinação de letras ou números 20 00:00:55,900 --> 00:00:59,710 ou números decimais, em seguida, o usuário será solicitado para repetir 21 00:00:59,710 --> 00:01:04,319 ea função não irá aceitar qualquer coisa até que o usuário dá-lhes um número inteiro. 22 00:01:04,319 --> 00:01:06,410 >> Então, como vamos usar get_int? 23 00:01:06,410 --> 00:01:10,830 Se você abrir o seu espaço de trabalho e criar um arquivo chamado integer.c vamos 24 00:01:10,830 --> 00:01:12,110 digite o seguinte. 25 00:01:12,110 --> 00:01:14,760 Hashtag incluem cs50.h. 26 00:01:14,760 --> 00:01:18,480 Isto é necessário porque get_int é uma função de biblioteca CS50, 27 00:01:18,480 --> 00:01:21,890 por isso devemos hashtag incluem sua declaração, a fim 28 00:01:21,890 --> 00:01:23,370 utilizar a função. 29 00:01:23,370 --> 00:01:26,570 E então, em minha principal funcionar Eu só vou 30 00:01:26,570 --> 00:01:29,560 simplesmente chamar a função get_int. 31 00:01:29,560 --> 00:01:31,750 >> Então, vamos rodar e ver como ele funciona. 32 00:01:31,750 --> 00:01:35,092 Eu já compilado-lo, então vamos vá em frente e executar este programa, 33 00:01:35,092 --> 00:01:36,480 ./integer. 34 00:01:36,480 --> 00:01:39,880 Aqui eu tenho um prompt e aqui é onde eu inserir o valor. 35 00:01:39,880 --> 00:01:44,880 Digamos que eu coloquei em apenas algum inteiro, 50, a excepts programa e sai 36 00:01:44,880 --> 00:01:45,960 e que é isso. 37 00:01:45,960 --> 00:01:49,350 >> Mas digamos que eu executá-lo novamente e I entrada de outra coisa. 38 00:01:49,350 --> 00:01:51,350 Talvez, Olá mundo. 39 00:01:51,350 --> 00:01:55,660 Isso não é um número inteiro de modo que o programa irá pedir-me para tentar novamente. 40 00:01:55,660 --> 00:01:59,160 Vamos tentar de novo com talvez um decimal este tempo. 41 00:01:59,160 --> 00:02:03,450 0,5, de novo, um número inteiro não tão o programa não irá aceitá-la 42 00:02:03,450 --> 00:02:05,290 e ele vai dizer-me para tentar novamente. 43 00:02:05,290 --> 00:02:07,070 Então, vamos dar-lhe outro número. 44 00:02:07,070 --> 00:02:09,830 O programa aceita, sai, e estamos a fazer. 45 00:02:09,830 --> 00:02:13,520 >> Portanto, agora temos uma função que nos permite e garante 46 00:02:13,520 --> 00:02:16,790 que o usuário insere um inteiro, mas como podemos 47 00:02:16,790 --> 00:02:20,330 realmente manter o controle do integer introduzidos pelo utilizador? 48 00:02:20,330 --> 00:02:25,260 Bem, todos nós vamos fazer é loja este valor em uma variável, digamos, n. 49 00:02:25,260 --> 00:02:30,580 Então, se eu declarar um inteiro n, e eu definir esse valor para get_int, 50 00:02:30,580 --> 00:02:34,700 então n, então, armazenar qualquer valor que o usuário inserido. 51 00:02:34,700 --> 00:02:38,620 >> Tudo bem, então agora temos assegurado que o usuário vai nos dar um número inteiro 52 00:02:38,620 --> 00:02:42,550 e nós sabemos como manter o controle do inteiro, mas lembre-se, 53 00:02:42,550 --> 00:02:45,610 inteiros são tanto positivas como negativas. 54 00:02:45,610 --> 00:02:49,110 Portanto, não faz muito sentido no contexto deste problema 55 00:02:49,110 --> 00:02:53,570 que o usuário toma um banho de dizer negativo de 12 minutos. 56 00:02:53,570 --> 00:02:59,310 Por isso, precisamos ter certeza de que o usuário realmente nos dá um número inteiro positivo. 57 00:02:59,310 --> 00:03:02,130 Agora não temos apenas um função única para isso, 58 00:03:02,130 --> 00:03:04,620 por isso vamos ter para criar esse nós mesmos. 59 00:03:04,620 --> 00:03:07,190 >> Por isso, queremos continuamente solicitar ao usuário 60 00:03:07,190 --> 00:03:09,730 até que eles nos dão um inteiro positivo. 61 00:03:09,730 --> 00:03:14,300 Se eu estou fazendo algo de forma contínua, em seguida, que é semelhante a um loop, uma repetição. 62 00:03:14,300 --> 00:03:19,130 Portanto, uma das construções que usamos no c para implementar repetição e voltas 63 00:03:19,130 --> 00:03:20,410 é um loop while. 64 00:03:20,410 --> 00:03:23,020 Assim, um loop while, como mostrado aqui, executará 65 00:03:23,020 --> 00:03:27,030 o que está no corpo do laço como desde que os dados avalia a condição 66 00:03:27,030 --> 00:03:27,900 para true. 67 00:03:27,900 --> 00:03:30,640 Assim que essa condição avalia a falsa, então 68 00:03:30,640 --> 00:03:34,830 o programa irá prosseguir para o que quer que vem depois do corpo do ciclo. 69 00:03:34,830 --> 00:03:39,400 >> Assim, enquanto laços vão ser realmente útil em CS50. 70 00:03:39,400 --> 00:03:42,590 Mas, neste particular, caso, sabemos que estamos 71 00:03:42,590 --> 00:03:48,140 indo para solicitar ao usuário, pelo menos, uma vez e só então circuito, se necessário. 72 00:03:48,140 --> 00:03:51,080 Então, aqui chegamos a um construção especial e isso é 73 00:03:51,080 --> 00:03:55,020 muito semelhante ao enquanto circuito chamado um loop do-while. 74 00:03:55,020 --> 00:03:58,840 >> Então um loop do-while executa o corpo do laço, pelo menos, uma vez 75 00:03:58,840 --> 00:04:01,750 e, em seguida, ele verifica para ver se ele deve executar, 76 00:04:01,750 --> 00:04:05,310 em oposição a uma ansa de tempo, que irá verificar a condição 77 00:04:05,310 --> 00:04:07,200 e, em seguida, executar o corpo. 78 00:04:07,200 --> 00:04:11,880 Assim, em um loop do-while que poderíamos fazer é pedir ao utilizador para um número inteiro, 79 00:04:11,880 --> 00:04:14,450 e depois verificar se é válido ou não. 80 00:04:14,450 --> 00:04:18,130 Se for inválido, então nós vamos repita o processo pedindo ao usuário 81 00:04:18,130 --> 00:04:22,290 para nos dar outro inteiro, e em seguida somente quando esse inteiro é válido, 82 00:04:22,290 --> 00:04:25,060 vamos continuar a o que vem depois. 83 00:04:25,060 --> 00:04:28,030 >> Agora você notará que a declaração do inteiro n 84 00:04:28,030 --> 00:04:31,670 é ligeiramente diferente do que fez antes no exemplo anterior 85 00:04:31,670 --> 00:04:33,640 e isso é por causa do escopo. 86 00:04:33,640 --> 00:04:37,920 Se tivéssemos declarado o inteiro n dentro do corpo do laço do-tempo, 87 00:04:37,920 --> 00:04:42,640 então não seria capaz de acessar que o valor de n do lado de fora dos encaracolado 88 00:04:42,640 --> 00:04:45,050 cintas que indica o corpo do laço. 89 00:04:45,050 --> 00:04:51,080 Mas nós de fato quiser acessar o valor de n, mais tarde, no nosso programa. 90 00:04:51,080 --> 00:04:55,730 >> OK, então agora vamos falar sobre o que esta condição deve ser. 91 00:04:55,730 --> 00:05:00,400 Queremos Reprompt apenas o utilizador, desde que n é inválido. 92 00:05:00,400 --> 00:05:04,640 Então, pensar a si mesmo que um inválido valor inteiro seria semelhante 93 00:05:04,640 --> 00:05:08,060 e depois criar um booleano expressão para expressar isso. 94 00:05:08,060 --> 00:05:13,070 >> Estamos quase a acabar com a nossa subtask de solicitar e validar a entrada do usuário. 95 00:05:13,070 --> 00:05:16,010 Então, vamos fazer isso um pouco pouco mais amigável 96 00:05:16,010 --> 00:05:18,390 e dar ao usuário um pouco pouco mais de informações 97 00:05:18,390 --> 00:05:20,510 do que estamos levando-os para. 98 00:05:20,510 --> 00:05:24,500 Portanto, vamos pedir ao utilizador, por o spec, com os minutos de cordas. 99 00:05:24,500 --> 00:05:28,935 Então, usando suas declarações printf, fazer Certifique-se de que você combinar isso exatamente. 100 00:05:28,935 --> 00:05:30,230 >> Tudo certo. 101 00:05:30,230 --> 00:05:33,840 Portanto, agora temos um usuário válido de entrada, um número inteiro positivo 102 00:05:33,840 --> 00:05:37,400 valor para quantos minutos eles passaram no chuveiro. 103 00:05:37,400 --> 00:05:41,300 Então, o que vem a seguir é calcular o número equivalente de garrafas. 104 00:05:41,300 --> 00:05:45,250 O que vamos fazer aqui pode ser muito óbvio para você em primeiro lugar, 105 00:05:45,250 --> 00:05:46,640 e isso é OK. 106 00:05:46,640 --> 00:05:49,320 O que queremos fazer é que quer começar a praticar 107 00:05:49,320 --> 00:05:53,810 a ideia de detecção de padrões e desenvolvimento de fórmulas para o problema. 108 00:05:53,810 --> 00:05:57,200 >> Então, nós estamos disse por a especificação que um minuto no banho 109 00:05:57,200 --> 00:05:59,960 é equivalente a cerca de 12 garrafas de água. 110 00:05:59,960 --> 00:06:03,020 Então, em seguida, dois minutos faria ser equivalente a 24, 111 00:06:03,020 --> 00:06:05,850 e cinco minutos seria ser equivalente a 60. 112 00:06:05,850 --> 00:06:08,390 Portanto, agora se você pensa você tem isso, então vamos 113 00:06:08,390 --> 00:06:10,390 veja se você pode vir para cima com um padrão ou fórmula 114 00:06:10,390 --> 00:06:14,990 para expressar se tivermos dizer, n minutos, quantas garrafas de água 115 00:06:14,990 --> 00:06:17,930 teria que ser expressa em termos de n? 116 00:06:17,930 --> 00:06:20,680 >> Mais uma vez, embora esta pode ser simples na primeira, 117 00:06:20,680 --> 00:06:23,240 mais tarde, quando nós começamos a problemas mais complicados 118 00:06:23,240 --> 00:06:26,360 vamos querer entrar em a prática de identificar 119 00:06:26,360 --> 00:06:30,120 padrões e fórmulas desenvolvimento para descobrir isso. 120 00:06:30,120 --> 00:06:33,450 >> Em c você tem acesso a operações aritméticas padrão, 121 00:06:33,450 --> 00:06:36,520 adição, subtração, multiplicação e divisão. 122 00:06:36,520 --> 00:06:38,420 Então eu vou deixar para agora você descobrir 123 00:06:38,420 --> 00:06:41,300 como expressar o número equivalente de garrafas 124 00:06:41,300 --> 00:06:43,990 que o utilizador consumiu durante o seu chuveiro. 125 00:06:43,990 --> 00:06:45,700 >> Tudo bem, estamos quase terminando. 126 00:06:45,700 --> 00:06:50,650 Temos solicitado ao utilizador para a sua entrada, temos assegurado que é uma entrada válida, 127 00:06:50,650 --> 00:06:53,330 e, depois, descobri como para calcular o equivalente 128 00:06:53,330 --> 00:06:55,480 número de garrafas que consumidos. 129 00:06:55,480 --> 00:06:59,430 Assim, a última coisa a fazer é para a saída o número equivalente de garrafas 130 00:06:59,430 --> 00:07:02,410 e esperamos encorajar -los para conservar um pouco de água. 131 00:07:02,410 --> 00:07:06,270 >> Produzir o valor será ser uma instrução printf. 132 00:07:06,270 --> 00:07:09,720 Se eu queria te dizer que eu ter três animais de estimação, por exemplo, 133 00:07:09,720 --> 00:07:13,090 Eu poderia usar uma instrução printf que é algo como isto. 134 00:07:13,090 --> 00:07:15,880 Eu tenho três animais de estimação, e uma nova linha para formatação agradável. 135 00:07:15,880 --> 00:07:17,880 >> Agora nós não queremos simplesmente coisas de código rígido. 136 00:07:17,880 --> 00:07:20,740 Dizem que o número do meu animais de estimação muda ao longo do tempo. 137 00:07:20,740 --> 00:07:25,080 Então eu vou fazer uso de espaços reservados em minha declaração printf. 138 00:07:25,080 --> 00:07:27,350 Então aqui o meu número é um inteiro. 139 00:07:27,350 --> 00:07:31,480 Então, eu vou fazer um espaço reservado para um inteiro usando% i. 140 00:07:31,480 --> 00:07:33,930 Eu estou indo para escrever a seqüência, e, em seguida, após a string 141 00:07:33,930 --> 00:07:38,000 Eu escrevo uma vírgula e, em seguida, o variável que deseja imprimir. 142 00:07:38,000 --> 00:07:42,730 Assim que o valor será impresso em vez desse espaço reservado,% i. 143 00:07:42,730 --> 00:07:47,630 >> Você pode usar espaços reservados, como Bem, para flutuadores com um% f. 144 00:07:47,630 --> 00:07:50,420 Você também pode ter múltiplos espaços reservados em uma string. 145 00:07:50,420 --> 00:07:53,950 Por exemplo, se eu tiver algum número de cães e um certo número de gatos, 146 00:07:53,950 --> 00:07:59,210 Coloquei dois espaços reservados aqui e, em seguida, minhas duas variáveis ​​na respectiva ordem. 147 00:07:59,210 --> 00:08:03,130 >> Portanto, agora que sabemos como imprimir os valores armazenados em variáveis, 148 00:08:03,130 --> 00:08:06,030 a última coisa a fazer é garantir que 149 00:08:06,030 --> 00:08:10,920 imprimir o valor no formato exato indicado na especificação. 150 00:08:10,920 --> 00:08:14,990 Com isso, temos levou o usuário e validada a sua entrada. 151 00:08:14,990 --> 00:08:17,920 Temos então calculado o equivalente número de garrafas de água 152 00:08:17,920 --> 00:08:22,100 que eles consomem durante o seu chuveiro, e temos emitido esse valor para eles. 153 00:08:22,100 --> 00:08:24,440 E assim, nós completamos água. 154 00:08:24,440 --> 00:08:28,730 >> Meu nome é [? Zamila,?] e este é o CS50. 155 00:08:28,730 --> 00:08:29,909