1 00:00:00,000 --> 00:00:00,493 2 00:00:00,493 --> 00:00:09,860 >> [Reproducció de música] 3 00:00:09,860 --> 00:00:13,520 >> ZAMYLA CHAN: Prefereixes rebre $ 10 milions en aquest moment o rebre 4 00:00:13,520 --> 00:00:17,460 centaus tots els dies del mes, quan cada dia subsegüent, rebrà 5 00:00:17,460 --> 00:00:21,280 el doble de la quantitat de monedes que rebut el dia anterior? 6 00:00:21,280 --> 00:00:24,010 En penics, anem a demostrar per què vostè ha 7 00:00:24,010 --> 00:00:27,000 definitivament prendre les centaus. 8 00:00:27,000 --> 00:00:29,130 El seu treball és escriure pennies.c-- 9 00:00:29,130 --> 00:00:33,330 un programa que demana primer l'usuari com Hi ha molts dies al mes i 10 00:00:33,330 --> 00:00:38,780 li pregunta quants centaus a l'usuari rebran el primer dia. 11 00:00:38,780 --> 00:00:41,780 El programa ha de calcular el quantitat que l'usuari haurà 12 00:00:41,780 --> 00:00:46,530 acumulada al final del mes i mostrar-ho. 13 00:00:46,530 --> 00:00:49,670 >> Podem trencar aquest programa fins en un parell de tasques. 14 00:00:49,670 --> 00:00:52,830 Anem a necessitar per sol · licitar múltiples entrades d'usuari - 15 00:00:52,830 --> 00:00:55,510 dies i mesos, i d'un cèntim en el primer dia. 16 00:00:55,510 --> 00:00:59,390 Necessitem fer un seguiment de la quantitat de diners l'usuari té i actualitzar-lo cada 17 00:00:59,390 --> 00:01:03,060 dia, duplicant la quantitat de centaus que reben. 18 00:01:03,060 --> 00:01:06,710 I, finalment, imprimim la seva final total, en dòlars. 19 00:01:06,710 --> 00:01:08,570 >> Anem a la entrada de l'usuari tackle primer. 20 00:01:08,570 --> 00:01:11,560 Vaig a obrir apples.c, programa curt que tracta 21 00:01:11,560 --> 00:01:13,840 amb entrades i sortides. 22 00:01:13,840 --> 00:01:17,310 A la part superior aquí, he inclòs alguns de les biblioteques que necessito - 23 00:01:17,310 --> 00:01:20,450 Biblioteca CS50 i un estàndard I / O biblioteca. 24 00:01:20,450 --> 00:01:24,310 Puc imprimir un missatge mitjançant el funció printf de la 25 00:01:24,310 --> 00:01:25,660 biblioteca d'E / S estàndard. 26 00:01:25,660 --> 00:01:29,740 Però l'impuls real de l'usuari que passa a la següent línia amb aquesta 27 00:01:29,740 --> 00:01:33,650 Funció GetInt a la biblioteca CS50. 28 00:01:33,650 --> 00:01:38,300 >> GetInt obté la entrada de l'usuari i garanteix que l'entrada és un nombre enter. 29 00:01:38,300 --> 00:01:45,160 Així que guardo l'entrada de l'usuari en sencer I, restar 1 a I, i després 30 00:01:45,160 --> 00:01:47,610 imprimir el nou valor si i. 31 00:01:47,610 --> 00:01:53,050 Després de compilar apples.c utilitzant el comanda "make pomes," Tinc una 32 00:01:53,050 --> 00:01:55,770 pomes arxiu executable. 33 00:01:55,770 --> 00:01:58,760 Execució d'això, vaig a l'entrada 1. 34 00:01:58,760 --> 00:02:02,600 El programa em diu que Tinc 0 pomes a l'esquerra. 35 00:02:02,600 --> 00:02:05,480 I això va funcionar com s'esperava. 36 00:02:05,480 --> 00:02:09,740 >> Així que anem a córrer de nou i l'entrada negativa gener. 37 00:02:09,740 --> 00:02:13,950 Ara, amb un import negatiu de les illes no té gaire sentit, però 38 00:02:13,950 --> 00:02:18,370 el programa accepta, perquè la negativa 1, bé, és un nombre enter. 39 00:02:18,370 --> 00:02:22,740 I ara, el programa o el monstre dins del programa menja un negatiu 40 00:02:22,740 --> 00:02:26,250 poma, i ara tinc 2 illes negatius. 41 00:02:26,250 --> 00:02:28,610 Hm, així que això és una lliçó - 42 00:02:28,610 --> 00:02:32,965 tot i que la funció i GetInt funcions relacionades, com GetFlow o 43 00:02:32,965 --> 00:02:38,100 GetString obtenir el tipus de dades correcte, cal assegurar-se que l'entrada fa 44 00:02:38,100 --> 00:02:41,430 sentit per al seu programa. 45 00:02:41,430 --> 00:02:45,500 >> En penics, no va a fer un ràpid un nombre enter, s'haurà de fer 46 00:02:45,500 --> 00:02:49,550 Assegureu-vos que l'usuari introdueix un enter Això té sentit, donat el context. 47 00:02:49,550 --> 00:02:55,690 Mes només pot tenir 28, 29, 30 o 31 dies. 48 00:02:55,690 --> 00:02:59,160 Volem exigir contínuament un enter vàlid. 49 00:02:59,160 --> 00:03:03,240 Si s'introdueix un nombre enter fora de la nostra límits acceptats, anem a incitar 50 00:03:03,240 --> 00:03:07,190 una i altra vegada, fins que donar-nos un nombre enter vàlid. 51 00:03:07,190 --> 00:03:10,070 >> Recordem la "repetició fins que aparegui" bloquejar en el zero? 52 00:03:10,070 --> 00:03:13,070 Vostè pot fer una construcció similar en C usant un bucle "while" 53 00:03:13,070 --> 00:03:14,830 o "do-while" loop. 54 00:03:14,830 --> 00:03:18,280 L'estructura de bucle, mentre que té una condició que s'han de complir per a la 55 00:03:18,280 --> 00:03:20,160 cos del bucle per executar. 56 00:03:20,160 --> 00:03:23,080 >> Això s'hauria de veure una mica similars, perquè la condició és igual que el 57 00:03:23,080 --> 00:03:25,970 Blocs de zero amb els angles i entra en els suports 58 00:03:25,970 --> 00:03:27,950 del bucle "while". 59 00:03:27,950 --> 00:03:30,600 Així que la condició comprovarà si és el nombre enter dins d' 60 00:03:30,600 --> 00:03:32,680 dels límits adequats. 61 00:03:32,680 --> 00:03:36,620 Vostè pot sol · licitar al nombre enter GetInt utilitzant i després executar el seu "temps" 62 00:03:36,620 --> 00:03:41,030 bucle, repetint el missatge i la impressió instruccions, mentre que l'entrada 63 00:03:41,030 --> 00:03:43,470 no és vàlid. 64 00:03:43,470 --> 00:03:47,610 >> Una altra forma d'assegurar la correcta entrada de l'usuari és mitjançant l'ús d'un "do-while" loop, 65 00:03:47,610 --> 00:03:50,400 que és molt similar a un bucle while. 66 00:03:50,400 --> 00:03:54,950 El "do-while" bucle s'executa el codi dins dels cos i després els controls 67 00:03:54,950 --> 00:03:57,150 si la condició es compleix o no. 68 00:03:57,150 --> 00:04:00,590 Això és útil per a l'obtenció de l'entrada de l'usuari, perquè vostè sap que vostè necessita 69 00:04:00,590 --> 00:04:02,980 per sol · licitar almenys una vegada. 70 00:04:02,980 --> 00:04:07,200 Si la condició no es compleix, el programa s'executarà la línia després de 71 00:04:07,200 --> 00:04:08,530 el "do-while" loop. 72 00:04:08,530 --> 00:04:13,230 Si es compleix la condició, però, el bucle es repetirà 73 00:04:13,230 --> 00:04:17,490 >> Un bucle "do-while" per a la validació d'usuari d'entrada es veurà alguna cosa com això. 74 00:04:17,490 --> 00:04:24,530 Declaro una variable n, GetInt i repeteixi fins que n és vàlid. 75 00:04:24,530 --> 00:04:28,040 I aquest procés, li vaig explicar, estava usant el tipus de dades sencers, que 76 00:04:28,040 --> 00:04:29,820 que va a utilitzar per als dies del mes. 77 00:04:29,820 --> 00:04:33,560 Però sabem que el nombre de monedes d'un cèntim s'acumulen ràpidament, pel que amb la finalitat de 78 00:04:33,560 --> 00:04:39,160 emmagatzemar nombres més grans, utilitzeu el tipus de dades LongLong, però recordeu que la mateixa 79 00:04:39,160 --> 00:04:42,590 principi de validació s'aplica. 80 00:04:42,590 --> 00:04:47,070 >> Impressionant, així que una vegada que tenim dos vàlida les aportacions dels usuaris - 81 00:04:47,070 --> 00:04:49,530 dia del mes i les monedes d'un cèntim en el primer dia - 82 00:04:49,530 --> 00:04:52,870 podem passar a la següent part del programa. 83 00:04:52,870 --> 00:04:56,680 El primer dia, l'usuari comença amb però, moltes monedes que especifiquen 84 00:04:56,680 --> 00:05:00,370 i la quantitat de monedes que es rebrà l'endemà es duplica. 85 00:05:00,370 --> 00:05:03,130 Així que té sentit per portar un registre d'aquestes dues quantitats - 86 00:05:03,130 --> 00:05:08,890 la quantitat de diners que l'usuari té i com moltes monedes que seran donats. 87 00:05:08,890 --> 00:05:13,760 >> Ara, fer alguna cosa durant 28 a 31 dies és repetitiu, pel que farem servir un "per" 88 00:05:13,760 --> 00:05:18,220 bucle per iterar sobre els dies de la mes, l'actualització del total i penny 89 00:05:18,220 --> 00:05:21,010 quantitat cada vegada. 90 00:05:21,010 --> 00:05:23,550 "For" sintaxi bucle conté els següents - 91 00:05:23,550 --> 00:05:27,510 01:00 inicialització, una condició, i una actualització. 92 00:05:27,510 --> 00:05:29,590 El bucle "for" s'inicialitzarà una variable, quan es 93 00:05:29,590 --> 00:05:31,380 primer entra en el bucle. 94 00:05:31,380 --> 00:05:34,860 Si es compleix la condició, el cos del bucle s'executarà. 95 00:05:34,860 --> 00:05:36,860 Posteriorment, l'actualització s'executarà. 96 00:05:36,860 --> 00:05:40,900 Si la condició es segueix complint el bucle s'executarà i actualitzar i 97 00:05:40,900 --> 00:05:45,820 repetir, sempre que la seva condició s'avalua en true. 98 00:05:45,820 --> 00:05:51,080 >> Aquí hi ha un bucle "for" que divideix 01:00 nombre enter p per 2 d'un total de 10 vegades. 99 00:05:51,080 --> 00:05:55,380 Tingueu en compte la forma en que vaig declarar l'enter p fora del meu bucle "per a", de manera que el 100 00:05:55,380 --> 00:05:59,850 sencer pot ser accessible fora del bucle "for". 101 00:05:59,850 --> 00:06:03,620 Un cop transcorregut el mes, és hora de per indicar a l'usuari la quantitat de diners 102 00:06:03,620 --> 00:06:04,790 que han aconseguit. 103 00:06:04,790 --> 00:06:08,740 Per les especificacions, cal avisar a l'usuari la quantitat de dòlars, no el nombre de 104 00:06:08,740 --> 00:06:10,780 monedes d'un cèntim, que tenen. 105 00:06:10,780 --> 00:06:14,620 Però fins ara, s'ha mantingut un seguiment de la total i els centaus que utilitzen LongLongs, 106 00:06:14,620 --> 00:06:16,640 que són nombres enters. 107 00:06:16,640 --> 00:06:20,560 >> Hi ha 100 centaus a $ 1, així que a menys el nombre de monedes d'un cèntim és un 108 00:06:20,560 --> 00:06:24,860 múltiple de 100, haurà de representar xifres decimals. 109 00:06:24,860 --> 00:06:28,060 El Autotype duplicat permet que facis això. 110 00:06:28,060 --> 00:06:32,790 Llavors, com ens convertim de representar centaus a dòlars? 111 00:06:32,790 --> 00:06:35,330 >> Anem a fer una ullada pi.c. 112 00:06:35,330 --> 00:06:41,690 Aquest programa té un big_pi LongLong i el divideix per 100 000, i imprimeix 113 00:06:41,690 --> 00:06:44,270 el resultat de cinc xifres decimals. 114 00:06:44,270 --> 00:06:48,560 Si volguéssim ha quatre decimals llocs, llavors només poden substituir aquest 115 00:06:48,560 --> 00:06:49,760 nombre aquí. 116 00:06:49,760 --> 00:06:58,370 Així que anem a guardar, compilar pi, i després veure el resultat, que es 117 00:06:58,370 --> 00:07:02,240 esperi ser 3,1415 - 118 00:07:02,240 --> 00:07:04,540 els cinc primers dígits de pi. 119 00:07:04,540 --> 00:07:06,300 >> No és però. 120 00:07:06,300 --> 00:07:07,390 ¿I per què? 121 00:07:07,390 --> 00:07:11,920 Bé, perquè és un big_pi LongLong, que és un nombre sencer, que no 122 00:07:11,920 --> 00:07:13,740 fer un seguiment dels decimals. 123 00:07:13,740 --> 00:07:16,850 La modificació que necessito fer és en la divisió. 124 00:07:16,850 --> 00:07:23,300 He de fer aquí per un doble abans de dividint, perquè dobles no pot mantenir 125 00:07:23,300 --> 00:07:25,260 seguiment de decimals. 126 00:07:25,260 --> 00:07:28,080 I vaig a afegir una nova línia aquí per un millor format. 127 00:07:28,080 --> 00:07:33,090 128 00:07:33,090 --> 00:07:34,230 >> I aquí el tenim - 129 00:07:34,230 --> 00:07:37,660 3.1416. 130 00:07:37,660 --> 00:07:43,520 Vostè pot notar que s'imprimeixi 3.1416 en lloc de 3,1415 com s'esperava. 131 00:07:43,520 --> 00:07:47,550 Això és perquè rounds durant el procés de divisió, en lloc de només 132 00:07:47,550 --> 00:07:50,490 truncant el valor. 133 00:07:50,490 --> 00:07:53,710 Ara vostè hauria de ser capaç d'imprimir el total definitiu correctament, que acaba 134 00:07:53,710 --> 00:07:54,870 el programa. 135 00:07:54,870 --> 00:07:55,930 >> Enhorabona. 136 00:07:55,930 --> 00:07:57,340 El meu nom és Zamyla. 137 00:07:57,340 --> 00:07:58,720 I això va ser penics. 138 00:07:58,720 --> 00:08:05,589 >> [Reproducció de música]