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 imos Greedy. 6 00:00:15,080 --> 00:00:18,560 >> Entón o primeiro que temos que facer é pedir ao usuario exactamente como 7 00:00:18,560 --> 00:00:20,500 moita cambio é debido. 8 00:00:20,500 --> 00:00:23,310 Entón, aquí vemos que temos un 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 Que é GetFloat? 11 00:00:27,890 --> 00:00:30,700 É unha das funcións do Biblioteca CS50 que recibe un 12 00:00:30,700 --> 00:00:32,450 flotar, do usuario. 13 00:00:32,450 --> 00:00:35,200 Teña en conta que, a fin de utilizar esta función, necesitamos botar incluír 14 00:00:35,200 --> 00:00:37,790 CS50.h na parte superior. 15 00:00:37,790 --> 00:00:42,310 >> Así, unha vez que temos que o valor da usuario, tamén necesitamos ter seguro de que 16 00:00:42,310 --> 00:00:43,560 é un valor válido. 17 00:00:43,560 --> 00:00:46,050 Non podemos deber cartos negativo. 18 00:00:46,050 --> 00:00:48,460 E así, ese é o propósito deste do / while loop. 19 00:00:48,460 --> 00:00:52,420 Seguimos looping mentres dólares é menor que cero. 20 00:00:52,420 --> 00:00:56,960 E a / while é o correcto facer para escribir aquí, xa que necesitamos pedir ao 21 00:00:56,960 --> 00:01:00,290 usuario polo menos unha vez para saber como canto diñeiro é debido. 22 00:01:00,290 --> 00:01:05,040 >> Así, unha vez que temos ese número de dólares, vemos aquí temos centavos int 23 00:01:05,040 --> 00:01:08,630 é igual a rolda dólares veces CENTS_PER_DOLLAR. 24 00:01:08,630 --> 00:01:10,740 Na parte superior 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ón, o que é esta liña está facendo? 27 00:01:16,270 --> 00:01:21,200 >> Ben, se se lembra, punto flotante valores non son moi precisos. 28 00:01:21,200 --> 00:01:25,470 A diferenza de números enteiros, non podemos representar valores de punto flotante exactamente. 29 00:01:25,470 --> 00:01:28,660 Sempre hai algún tipo de imprecisión. 30 00:01:28,660 --> 00:01:32,840 Por iso, prefiro traballar con só números enteiros todo este problema. 31 00:01:32,840 --> 00:01:42,690 E aquí, se o usuario inseriu $ 3,42, estamos convertendo isto para 342 centavos e 32 00:01:42,690 --> 00:01:45,900 redondeo, só se librar de calquera dos que imprecisión. 33 00:01:45,900 --> 00:01:49,940 >> Así, unha vez que temos o número de centavos en un enteiro, podemos seguir co 34 00:01:49,940 --> 00:01:51,730 resto do programa. 35 00:01:51,730 --> 00:01:55,910 Vemos aquí que estamos declarando enteiro moedas que estamos só a usar 36 00:01:55,910 --> 00:01:59,560 manter o control do total número de moedas. 37 00:01:59,560 --> 00:02:01,590 Aquí, temos o noso primeiro loop while. 38 00:02:01,590 --> 00:02:06,780 >> Vemos mentres centavos é maior ou igual trimestre, o que anteriormente, é de hash 39 00:02:06,780 --> 00:02:14,680 definido como 25, mentres que é certo, temos quere incrementar o noso 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 que esta sintaxe equivale a centavos 42 00:02:22,810 --> 00:02:26,020 coincide céntimos menos trimestre. 43 00:02:26,020 --> 00:02:28,170 Estes son o mesmo. 44 00:02:28,170 --> 00:02:31,850 >> Entón o que é este loop while facendo? 45 00:02:31,850 --> 00:02:39,260 A idea aquí é que, se eu sabe $ 3,42 é debido, podo seguir dando 46 00:02:39,260 --> 00:02:42,670 apousentos ata que eu non podo dar barrios máis. 47 00:02:42,670 --> 00:02:47,720 Eu non podo dar barrios máis, despois de xa ter dado dólares 3,25. 48 00:02:47,720 --> 00:02:53,300 >> Entón, xa que este é o caso, nós imos saír deste loop while. 49 00:02:53,300 --> 00:02:57,650 Cents se ve en 17 centavos. 50 00:02:57,650 --> 00:03:01,910 E nós imos seguir ata a próxima while onde dicimos, mentres centavos 51 00:03:01,910 --> 00:03:04,270 é maior que ou igual a Dime. 52 00:03:04,270 --> 00:03:07,420 >> E agora estamos facendo a mesma exacta que fixemos no caso trimestre, 53 00:03:07,420 --> 00:03:09,010 excepto con moedas de dez centavos. 54 00:03:09,010 --> 00:03:15,050 Entón, co US $ 0,17, nós imos loop ata que pudermos xa non dou un peso, o que é 55 00:03:15,050 --> 00:03:16,680 Roma. 56 00:03:16,680 --> 00:03:20,470 E entón nós imos ir con 7 centavos. 57 00:03:20,470 --> 00:03:24,730 >> Entón imos seguir moedas, que vai repetir ata que non podemos dar 58 00:03:24,730 --> 00:03:29,420 máis ningunha recreo, que será deixar-nos con dous centavos. 59 00:03:29,420 --> 00:03:34,400 E, a continuación, para abaixo, na parte inferior, temos tostões, que fará un loop e ganas 60 00:03:34,400 --> 00:03:37,140 finalmente deixarnos con cero céntimos. 61 00:03:37,140 --> 00:03:41,670 Entón, ao final, só necesitamos imprimir o noso número de moedas. 62 00:03:41,670 --> 00:03:44,980 >> Polo tanto, este programa é perfectamente correcta. 63 00:03:44,980 --> 00:03:47,310 Pero podemos realmente facer un pouco mellor. 64 00:03:47,310 --> 00:03:52,660 Agora, se eu digo que debo a ti US $ 10.000, non precisa ir aquí está un 65 00:03:52,660 --> 00:03:55,310 trimestre, dous cuartos, tres cuartos. 66 00:03:55,310 --> 00:03:59,450 Ten que saber inmediatamente que Débolle 40.000 trimestres. 67 00:03:59,450 --> 00:04:04,070 >> Agora imos ollar para un programa que manipula-lo un pouco mellor. 68 00:04:04,070 --> 00:04:07,190 Nesta versión das cousas, aínda necesitamos pedir ao usuario para a cantidade de 69 00:04:07,190 --> 00:04:10,930 cambiar o que eles queren exactamente do mesmo xeito que facía antes. 70 00:04:10,930 --> 00:04:14,110 Necesitamos redondear exactamente de como fixemos antes. 71 00:04:14,110 --> 00:04:17,910 E aínda temos as nosas moedas enteiro declarou exactamente a mesma de antes. 72 00:04:17,910 --> 00:04:21,399 >> Entón, aquí é onde as cousas estar un pouco diferente. 73 00:04:21,399 --> 00:04:24,640 Estamos facendo as moedas máis iguais céntimos 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 quere dicir, ter como moitos trimestres como podo entrar en centavos e engadir 76 00:04:31,790 --> 00:04:33,030 que para moedas. 77 00:04:33,030 --> 00:04:40,100 >> Entón, se centavos é 142, 142 dividido por 25 dános 5. 78 00:04:40,100 --> 00:04:43,950 Lembre que a división enteira trunca automaticamente. 79 00:04:43,950 --> 00:04:46,870 Entón, nós estamos facendo as moedas máis é igual a 5. 80 00:04:46,870 --> 00:04:51,850 >> Inmediatamente despois iso, estamos dicindo céntimos centavos igual trimestre mod. 81 00:04:51,850 --> 00:04:57,150 Lembre que o operador mod dá nós o resto da división. 82 00:04:57,150 --> 00:05:05,840 Entón 142 trimestre modificación, que dará é 142 menos 125, que é 17. 83 00:05:05,840 --> 00:05:10,470 Iso é o resto tras facendo 142 dividido por 25. 84 00:05:10,470 --> 00:05:13,040 >> Entón agora centavos é igual a 17. 85 00:05:13,040 --> 00:05:16,080 E facemos exactamente o mesmo cousa para moedas. 86 00:05:16,080 --> 00:05:18,620 17 dividido por 10 vai darnos 1. 87 00:05:18,620 --> 00:05:20,150 E engadir que para moedas. 88 00:05:20,150 --> 00:05:25,380 E entón, nós actualizamos céntimos para ser 17 mod 10, que é 7. 89 00:05:25,380 --> 00:05:27,200 >> E, a continuación, o mesmo para recreo. 90 00:05:27,200 --> 00:05:29,180 7 5 divídese por 1. 91 00:05:29,180 --> 00:05:30,880 Engadir que a moedas. 92 00:05:30,880 --> 00:05:34,600 E entón 7 mod 5 é 2. 93 00:05:34,600 --> 00:05:35,910 E iso é nosos centavos. 94 00:05:35,910 --> 00:05:39,065 >> E entón, por tostões, non hai verdadeira punto de división ou modding, xa que, 95 00:05:39,065 --> 00:05:42,170 si temos 0,2 dólar sobrando, podemos basta engadir inmediatamente que a 96 00:05:42,170 --> 00:05:43,590 noso número de moedas. 97 00:05:43,590 --> 00:05:48,210 E, finalmente, necesitamos imprimir noso número de moedas e, opcionalmente, 98 00:05:48,210 --> 00:05:52,100 voltar 0 ao final do noso programa para referirse a todo funcionou. 99 00:05:52,100 --> 00:05:53,120 >> O 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