1 00:00:00,000 --> 00:00:00,994 2 00:00:00,994 --> 00:00:11,431 >> [Música tocando] 3 00:00:11,431 --> 00:00:12,500 >> ROB BOWDEN: Oi. 4 00:00:12,500 --> 00:00:13,230 Estou Rob. 5 00:00:13,230 --> 00:00:15,080 E vamos Greedy. 6 00:00:15,080 --> 00:00:18,560 >> Então a primeira coisa que precisamos fazer é pedir ao usuário exatamente como 7 00:00:18,560 --> 00:00:20,500 muita mudança é devido. 8 00:00:20,500 --> 00:00:23,310 Então, aqui, vemos que temos um do / while loop. 9 00:00:23,310 --> 00:00:26,650 E nós estamos definindo dólares igual a GetFloat. 10 00:00:26,650 --> 00:00:27,890 O que é GetFloat? 11 00:00:27,890 --> 00:00:30,700 É uma das funções do Biblioteca CS50 que recebe um 12 00:00:30,700 --> 00:00:32,450 flutuar, do utilizador. 13 00:00:32,450 --> 00:00:35,200 Lembre-se, a fim de usar essa função, precisamos botar incluir 14 00:00:35,200 --> 00:00:37,790 CS50.h no topo. 15 00:00:37,790 --> 00:00:42,310 >> Assim, uma vez que temos que o valor da usuário, também precisamos ter certeza de que 16 00:00:42,310 --> 00:00:43,560 é um valor válido. 17 00:00:43,560 --> 00:00:46,050 Não podemos dever dinheiro negativo. 18 00:00:46,050 --> 00:00:48,460 E assim, esse é o propósito deste do / while loop. 19 00:00:48,460 --> 00:00:52,420 Continuamos looping enquanto dólares é menor do que zero. 20 00:00:52,420 --> 00:00:56,960 E a / while é a coisa certa fazer para usar aqui, uma vez que precisamos de pedir ao 21 00:00:56,960 --> 00:01:00,290 usuário pelo menos uma vez para saber como quanto dinheiro é devido. 22 00:01:00,290 --> 00:01:05,040 >> Assim, uma vez que temos esse número de dólares, vemos aqui temos centavos int 23 00:01:05,040 --> 00:01:08,630 é igual a rodada dólares vezes CENTS_PER_DOLLAR. 24 00:01:08,630 --> 00:01:10,740 No topo, vemos que CENTS_PER_DOLLAR é 25 00:01:10,740 --> 00:01:13,750 sensatamente definida como 100. 26 00:01:13,750 --> 00:01:16,270 Então, o que é esta linha está fazendo? 27 00:01:16,270 --> 00:01:21,200 >> Bem, se você se lembra, ponto flutuante valores não são muito precisos. 28 00:01:21,200 --> 00:01:25,470 Ao contrário de números inteiros, não podemos representar valores de ponto flutuante exatamente. 29 00:01:25,470 --> 00:01:28,660 Há sempre algum tipo de imprecisão. 30 00:01:28,660 --> 00:01:32,840 Por isso, prefiro trabalhar com apenas números inteiros todo este problema. 31 00:01:32,840 --> 00:01:42,690 E aqui, se o usuário digitou $ 3,42, estamos convertendo isso para 342 centavos e 32 00:01:42,690 --> 00:01:45,900 arredondamento, apenas se livrar de qualquer um dos que imprecisão. 33 00:01:45,900 --> 00:01:49,940 >> Assim, uma vez que temos o número de centavos em um inteiro, podemos continuar com o 34 00:01:49,940 --> 00:01:51,730 resto do programa. 35 00:01:51,730 --> 00:01:55,910 Vemos aqui que estamos declarando inteiro moedas que estamos apenas a usar 36 00:01:55,910 --> 00:01:59,560 manter o controle do total número de moedas. 37 00:01:59,560 --> 00:02:01,590 Aqui, nós temos o nosso primeiro loop while. 38 00:02:01,590 --> 00:02:06,780 >> Vemos enquanto centavos é maior ou igual trimestre, o que anteriormente, é de hash 39 00:02:06,780 --> 00:02:14,680 definido como 25, enquanto que é verdade, temos quer incrementar o nosso número de moedas 40 00:02:14,680 --> 00:02:18,350 e decremento centavos por trimestre. 41 00:02:18,350 --> 00:02:22,810 Lembre-se que esta sintaxe é equivalente a centavos 42 00:02:22,810 --> 00:02:26,020 é igual centavos menos trimestre. 43 00:02:26,020 --> 00:02:28,170 Esses são o mesmo. 44 00:02:28,170 --> 00:02:31,850 >> Então o que é este loop while fazendo? 45 00:02:31,850 --> 00:02:39,260 A idéia aqui é que, se eu souber $ 3,42 é devido, eu posso continuar dando 46 00:02:39,260 --> 00:02:42,670 aposentos até que eu não posso dar bairros mais. 47 00:02:42,670 --> 00:02:47,720 Eu não posso dar bairros mais, depois de já ter dado US $ 3,25. 48 00:02:47,720 --> 00:02:53,300 >> Então, uma vez que esse é o caso, nós vamos sair deste loop while. 49 00:02:53,300 --> 00:02:57,650 Cents vai ficar em 17 centavos. 50 00:02:57,650 --> 00:03:01,910 E nós vamos continuar até a próxima while onde dizemos, enquanto centavos 51 00:03:01,910 --> 00:03:04,270 é maior do que ou igual a dime. 52 00:03:04,270 --> 00:03:07,420 >> E agora estamos fazendo a mesma exata coisa que fizemos no caso trimestre, 53 00:03:07,420 --> 00:03:09,010 exceto com moedas de dez centavos. 54 00:03:09,010 --> 00:03:15,050 Então, com US $ 0,17, nós vamos loop até que pudermos já não dou um centavo, o que é 55 00:03:15,050 --> 00:03:16,680 exatamente uma vez. 56 00:03:16,680 --> 00:03:20,470 E então nós vamos ficar com 7 centavos. 57 00:03:20,470 --> 00:03:24,730 >> Então vamos continuar a moedas, que vai repetir até que não podemos dar 58 00:03:24,730 --> 00:03:29,420 mais nenhuma níqueis, que será deixar-nos com dois centavos. 59 00:03:29,420 --> 00:03:34,400 E, em seguida, para baixo, na parte inferior, temos tostões, que fará um loop e vontade 60 00:03:34,400 --> 00:03:37,140 finalmente nos deixar com zero cêntimos. 61 00:03:37,140 --> 00:03:41,670 Então, no final, só precisamos imprimir o nosso número de moedas. 62 00:03:41,670 --> 00:03:44,980 >> Portanto, este programa é perfeitamente correta. 63 00:03:44,980 --> 00:03:47,310 Mas podemos realmente fazer um pouco melhor. 64 00:03:47,310 --> 00:03:52,660 Agora, se eu digo que eu devo a você US $ 10.000, você não precisa ir aqui está um 65 00:03:52,660 --> 00:03:55,310 trimestre, dois quartos, três quartos. 66 00:03:55,310 --> 00:03:59,450 Você deve saber imediatamente que Devo-lhe 40.000 trimestres. 67 00:03:59,450 --> 00:04:04,070 >> Agora vamos olhar para um programa que manipula-lo um pouco melhor. 68 00:04:04,070 --> 00:04:07,190 Nesta versão das coisas, ainda precisamos pedir ao usuário para a quantidade de 69 00:04:07,190 --> 00:04:10,930 mudar o que eles querem exatamente da mesma forma que fazia antes. 70 00:04:10,930 --> 00:04:14,110 Precisamos arredondar exatamente da forma como fizemos antes. 71 00:04:14,110 --> 00:04:17,910 E ainda temos nossas moedas inteiro declarou exatamente a mesma de antes. 72 00:04:17,910 --> 00:04:21,399 >> Então, aqui é onde as coisas ficar um pouco diferente. 73 00:04:21,399 --> 00:04:24,640 Estamos fazendo as moedas mais iguais centavos divididos por trimestre 74 00:04:24,640 --> 00:04:27,140 onde trimestre é 25. 75 00:04:27,140 --> 00:04:31,790 O que isto quer dizer é, ter como muitos trimestres como posso entrar em centavos e adicionar 76 00:04:31,790 --> 00:04:33,030 que para moedas. 77 00:04:33,030 --> 00:04:40,100 >> Então, se centavos é 142, 142 dividido por 25 nos dá 5. 78 00:04:40,100 --> 00:04:43,950 Lembre-se que a divisão inteira trunca automaticamente. 79 00:04:43,950 --> 00:04:46,870 Então, nós estamos fazendo as moedas mais é igual a 5. 80 00:04:46,870 --> 00:04:51,850 >> Imediatamente após isso, nós estamos dizendo centavos centavos igual trimestre mod. 81 00:04:51,850 --> 00:04:57,150 Lembre-se que o operador mod dá nós o resto da divisão. 82 00:04:57,150 --> 00:05:05,840 Então 142 trimestre modificação, que vai dar é 142 menos 125, que é 17. 83 00:05:05,840 --> 00:05:10,470 Isso é o resto depois fazendo 142 dividido por 25. 84 00:05:10,470 --> 00:05:13,040 >> Então agora centavos é igual a 17. 85 00:05:13,040 --> 00:05:16,080 E fazemos exatamente o mesmo coisa para moedas. 86 00:05:16,080 --> 00:05:18,620 17 dividido por 10 vai dar-nos 1. 87 00:05:18,620 --> 00:05:20,150 E acrescentar que para moedas. 88 00:05:20,150 --> 00:05:25,380 E então, nós atualizamos centavos para ser 17 mod 10, que é 7. 89 00:05:25,380 --> 00:05:27,200 >> E, em seguida, o mesmo para níqueis. 90 00:05:27,200 --> 00:05:29,180 7 5 é dividida por 1. 91 00:05:29,180 --> 00:05:30,880 Acrescentar que a moedas. 92 00:05:30,880 --> 00:05:34,600 E então 7 mod 5 é 2. 93 00:05:34,600 --> 00:05:35,910 E isso é nossos centavos. 94 00:05:35,910 --> 00:05:39,065 >> E então, por tostões, não há verdadeira ponto de divisão ou modding, já que, 95 00:05:39,065 --> 00:05:42,170 se temos 0,2 dólar sobrando, podemos basta acrescentar imediatamente que a 96 00:05:42,170 --> 00:05:43,590 nosso número de moedas. 97 00:05:43,590 --> 00:05:48,210 E, finalmente, precisamos de imprimir nosso número de moedas e, opcionalmente, 98 00:05:48,210 --> 00:05:52,100 retornar 0 no final do nosso programa para significar tudo funcionou. 99 00:05:52,100 --> 00:05:53,120 >> Meu nome é Rob. 100 00:05:53,120 --> 00:05:54,020 E esta foi Greedy. 101 00:05:54,020 --> 00:05:57,620 >> [Música tocando] 102 00:05:57,620 --> 00:06:01,515