1 00:00:00,000 --> 00:00:00,493 2 00:00:00,493 --> 00:00:09,860 >> [REPRODUCCIÓN DE MÚSICA] 3 00:00:09,860 --> 00:00:13,520 >> ZAMYLA CHAN: ¿Prefieres recibir $ 10 millones en este momento o recibir 4 00:00:13,520 --> 00:00:17,460 monedas de un centavo cada día del mes, donde cada día subsecuente, recibe 5 00:00:17,460 --> 00:00:21,280 duplicar la cantidad de centavos que recibido el día anterior? 6 00:00:21,280 --> 00:00:24,010 En peniques, vamos a demostrar por qué usted debe 7 00:00:24,010 --> 00:00:27,000 definitivamente tomar las monedas de un centavo. 8 00:00:27,000 --> 00:00:29,130 Su trabajo es escribir pennies.c-- 9 00:00:29,130 --> 00:00:33,330 un programa que primero pide al usuario cómo muchos días hay en el mes y 10 00:00:33,330 --> 00:00:38,780 le pregunta cuántos centavos al usuario recibirán el primer día. 11 00:00:38,780 --> 00:00:41,780 El programa deberá calcular el cantidad que el usuario tendrá 12 00:00:41,780 --> 00:00:46,530 acumulada al final de la mes y mostrarlo. 13 00:00:46,530 --> 00:00:49,670 >> Podemos romper este programa hasta en un par de tareas. 14 00:00:49,670 --> 00:00:52,830 Tendremos que solicite múltiples entradas de usuario - 15 00:00:52,830 --> 00:00:55,510 días y meses, y de un centavo en el primer día. 16 00:00:55,510 --> 00:00:59,390 Necesitamos hacer un seguimiento de la cantidad de dinero el usuario tiene y actualizarla cada 17 00:00:59,390 --> 00:01:03,060 día, duplicando la cantidad de centavos que reciben. 18 00:01:03,060 --> 00:01:06,710 Y, por último, imprimimos su final total, en dólares. 19 00:01:06,710 --> 00:01:08,570 >> Abordemos primero la entrada del usuario. 20 00:01:08,570 --> 00:01:11,560 Voy a abrir apples.c, programa corto que trata 21 00:01:11,560 --> 00:01:13,840 con entradas y salidas. 22 00:01:13,840 --> 00:01:17,310 En la parte superior aquí, he incluido algunos de las bibliotecas que necesito - 23 00:01:17,310 --> 00:01:20,450 La biblioteca del CS50 y un estándar E / S de la biblioteca. 24 00:01:20,450 --> 00:01:24,310 Imprimo un mensaje utilizando el función printf de la 25 00:01:24,310 --> 00:01:25,660 biblioteca de E / S estándar. 26 00:01:25,660 --> 00:01:29,740 Pero la verdadera inspiración del usuario que ocurre en la siguiente línea con esta 27 00:01:29,740 --> 00:01:33,650 Función GetInt en la biblioteca CS50. 28 00:01:33,650 --> 00:01:38,300 >> GetInt obtiene la entrada del usuario y garantiza que la entrada es un número entero. 29 00:01:38,300 --> 00:01:45,160 Así que guardo la entrada del usuario en entero i, restar 1 a i, y luego 30 00:01:45,160 --> 00:01:47,610 imprimir el nuevo valor si i. 31 00:01:47,610 --> 00:01:53,050 Después de compilar apples.c utilizando el comando "hacer las manzanas," Tengo una 32 00:01:53,050 --> 00:01:55,770 manzanas de archivo ejecutable. 33 00:01:55,770 --> 00:01:58,760 Ejecución de eso, voy a la entrada 1. 34 00:01:58,760 --> 00:02:02,600 El programa me dice que Tengo 0 manzanas a la izquierda. 35 00:02:02,600 --> 00:02:05,480 Y así que funcionó como se esperaba. 36 00:02:05,480 --> 00:02:09,740 >> Así que vamos a correr de nuevo y negativo de entrada 1. 37 00:02:09,740 --> 00:02:13,950 Ahora, tener un importe negativo de las manzanas no tiene mucho sentido, pero 38 00:02:13,950 --> 00:02:18,370 el programa acepta, porque la negativa 1, bueno, es un entero. 39 00:02:18,370 --> 00:02:22,740 Y ahora, el programa o el monstruo dentro del programa se come una negativa 40 00:02:22,740 --> 00:02:26,250 manzana, y ahora tengo negativos 2 manzanas. 41 00:02:26,250 --> 00:02:28,610 Hm, así que esa es una lección - 42 00:02:28,610 --> 00:02:32,965 a pesar de que la función GetInt y funciones relacionadas, como GetFlow o 43 00:02:32,965 --> 00:02:38,100 GetString obtener el tipo de datos correcto, tiene que asegurarse de que la entrada hace 44 00:02:38,100 --> 00:02:41,430 sentido para su programa. 45 00:02:41,430 --> 00:02:45,500 >> En peniques, no va a hacer precisamente un símbolo para un entero, que tendrá que hacer 46 00:02:45,500 --> 00:02:49,550 asegurarse de que el usuario introduce un número entero Eso tiene sentido, dado el contexto. 47 00:02:49,550 --> 00:02:55,690 Mes sólo puede tener 28, 29, 30, o 31 días. 48 00:02:55,690 --> 00:02:59,160 Queremos exigir continuamente un entero válido. 49 00:02:59,160 --> 00:03:03,240 Si un número entero de entrada fuera de nuestro límites aceptados, vamos a impulsarlos 50 00:03:03,240 --> 00:03:07,190 una y otra vez, hasta que darnos un número entero válido. 51 00:03:07,190 --> 00:03:10,070 >> Recordemos la "repetición hasta que aparezca" bloquear en cero? 52 00:03:10,070 --> 00:03:13,070 Usted puede hacer una construcción similar en C utilizando un bucle "while" 53 00:03:13,070 --> 00:03:14,830 o bucle "do-while". 54 00:03:14,830 --> 00:03:18,280 La estructura de bucle while tiene una condición que deben cumplirse para que la 55 00:03:18,280 --> 00:03:20,160 cuerpo del bucle para ejecutar. 56 00:03:20,160 --> 00:03:23,080 >> Esto debería verse un poco parecido, porque la condición es igual que el 57 00:03:23,080 --> 00:03:25,970 Bloques de Scratch con los ángulos y entra en los soportes 58 00:03:25,970 --> 00:03:27,950 del bucle "while". 59 00:03:27,950 --> 00:03:30,600 Así que esta condición se comprobará si el número entero está dentro de 60 00:03:30,600 --> 00:03:32,680 de los límites adecuados. 61 00:03:32,680 --> 00:03:36,620 Usted puede pedir al entero utilizando GetInt y luego ejecutar su "tiempo" 62 00:03:36,620 --> 00:03:41,030 bucle, repitiendo el mensaje y la impresión instrucciones, mientras que la entrada 63 00:03:41,030 --> 00:03:43,470 no es válido. 64 00:03:43,470 --> 00:03:47,610 >> Otra manera de asegurar la entrada de usuario correcta es mediante el uso de un bucle "do-while", 65 00:03:47,610 --> 00:03:50,400 que es muy similar a un bucle While. 66 00:03:50,400 --> 00:03:54,950 El bucle "do-while" se ejecuta el código dentro de los cuerpo y luego comprueba 67 00:03:54,950 --> 00:03:57,150 si la condición se cumple o no. 68 00:03:57,150 --> 00:04:00,590 Esto es útil para la obtención de la entrada del usuario, porque usted sabe que usted necesita 69 00:04:00,590 --> 00:04:02,980 para pedir al menos una vez. 70 00:04:02,980 --> 00:04:07,200 Si la condición no se cumple, el programa se ejecutará la línea después de 71 00:04:07,200 --> 00:04:08,530 el bucle "do-while". 72 00:04:08,530 --> 00:04:13,230 Si la condición se cumple, sin embargo, el bucle se repita 73 00:04:13,230 --> 00:04:17,490 >> Un bucle "do-while" para la validación de usuario de entrada se verá algo como esto. 74 00:04:17,490 --> 00:04:24,530 Declaro una variable n, GetInt y a continuación, repita hasta que n es válido. 75 00:04:24,530 --> 00:04:28,040 Y este proceso, le expliqué, estaba usando el tipo de datos entero, que 76 00:04:28,040 --> 00:04:29,820 que va a utilizar para los días del mes. 77 00:04:29,820 --> 00:04:33,560 Pero sabemos que el número de monedas de un centavo se acumulan rápidamente, por lo que con el fin de 78 00:04:33,560 --> 00:04:39,160 almacenar números más grandes, use el tipo de datos LongLong, pero recuerde que la misma 79 00:04:39,160 --> 00:04:42,590 principio de validación se aplica. 80 00:04:42,590 --> 00:04:47,070 >> Impresionante, así que una vez que tenemos dos válida aportaciones del usuario - 81 00:04:47,070 --> 00:04:49,530 días del mes y los centavos en el primer día - 82 00:04:49,530 --> 00:04:52,870 podemos pasar a la siguiente parte del programa. 83 00:04:52,870 --> 00:04:56,680 El primer día, el usuario comienza con sin embargo, muchos peniques que especifican 84 00:04:56,680 --> 00:05:00,370 y la cantidad de monedas que se recibirá al día siguiente se duplica. 85 00:05:00,370 --> 00:05:03,130 Así que tiene sentido para llevar un registro de estas dos cantidades - 86 00:05:03,130 --> 00:05:08,890 la cantidad de dinero que el usuario tiene y cómo muchas monedas que van a ser dados. 87 00:05:08,890 --> 00:05:13,760 >> Ahora, haciendo algo para el 28 a 31 días es repetitivo, por lo que vamos a usar un "para" 88 00:05:13,760 --> 00:05:18,220 bucle para iterar sobre los días en el mes, la actualización del total y penny 89 00:05:18,220 --> 00:05:21,010 cantidad cada vez. 90 00:05:21,010 --> 00:05:23,550 "Para" sintaxis bucle contiene los siguientes - 91 00:05:23,550 --> 00:05:27,510 una inicialización, una condición, y una actualización. 92 00:05:27,510 --> 00:05:29,590 Su bucle "for" se inicializará una variable, cuando se 93 00:05:29,590 --> 00:05:31,380 entra primero el bucle. 94 00:05:31,380 --> 00:05:34,860 Si se cumple la condición, el cuerpo del bucle se ejecutará. 95 00:05:34,860 --> 00:05:36,860 Posteriormente, la actualización se ejecutará. 96 00:05:36,860 --> 00:05:40,900 Si todavía se cumple la condición, la ciclo se ejecutará y actualizará, y 97 00:05:40,900 --> 00:05:45,820 repetir, siempre y cuando su condición evalúa en true. 98 00:05:45,820 --> 00:05:51,080 >> Aquí hay un bucle "for" que divide una entero p 2 por un total de 10 veces. 99 00:05:51,080 --> 00:05:55,380 Tenga en cuenta cómo me declaré el entero p fuera de mi bucle "for", para que el 100 00:05:55,380 --> 00:05:59,850 entero puede ser accesible fuera del bucle "for". 101 00:05:59,850 --> 00:06:03,620 Después de que el mes ha pasado, es hora de para indicar al usuario la cantidad de dinero 102 00:06:03,620 --> 00:06:04,790 que han conseguido. 103 00:06:04,790 --> 00:06:08,740 Por las especificaciones, es necesario decirle al usuario la cantidad de dólares, no cuántos 104 00:06:08,740 --> 00:06:10,780 monedas de un centavo, que tienen. 105 00:06:10,780 --> 00:06:14,620 Pero hasta ahora, usted ha mantenido un seguimiento de la total y los centavos que utilizan LongLongs, 106 00:06:14,620 --> 00:06:16,640 que son números enteros. 107 00:06:16,640 --> 00:06:20,560 >> Hay 100 centavos a $ 1, así que a menos el número de monedas de un centavo es un 108 00:06:20,560 --> 00:06:24,860 múltiplo de 100, usted tendrá que representar decimales. 109 00:06:24,860 --> 00:06:28,060 El autotype duplicado permite que hagas esto. 110 00:06:28,060 --> 00:06:32,790 Entonces, ¿cómo convertimos de representar centavos a dólares? 111 00:06:32,790 --> 00:06:35,330 >> Vamos a echar un vistazo pi.c. 112 00:06:35,330 --> 00:06:41,690 Este programa toma un big_pi LongLong y divide por 100.000, y las impresiones 113 00:06:41,690 --> 00:06:44,270 el resultado a cinco decimales. 114 00:06:44,270 --> 00:06:48,560 Si quisiéramos mostrar cuatro decimales lugares, entonces sólo pueden sustituir este 115 00:06:48,560 --> 00:06:49,760 número aquí. 116 00:06:49,760 --> 00:06:58,370 Así que vamos a guardar, compilar pi, y luego ver el resultado, que nos 117 00:06:58,370 --> 00:07:02,240 espere ser 3,1415 - 118 00:07:02,240 --> 00:07:04,540 los primeros cinco dígitos de pi. 119 00:07:04,540 --> 00:07:06,300 >> No es sin embargo. 120 00:07:06,300 --> 00:07:07,390 ¿Y por qué? 121 00:07:07,390 --> 00:07:11,920 Bueno, porque es un big_pi LongLong, que es un número entero, que no se 122 00:07:11,920 --> 00:07:13,740 realizar un seguimiento de los decimales. 123 00:07:13,740 --> 00:07:16,850 La modificación que necesito hacer es en la división. 124 00:07:16,850 --> 00:07:23,300 Tengo que echar a un doble aquí antes dividiendo, porque dobles no pueden mantener 125 00:07:23,300 --> 00:07:25,260 pista de decimales. 126 00:07:25,260 --> 00:07:28,080 Y voy a añadir una nueva línea aquí para un mejor formato. 127 00:07:28,080 --> 00:07:33,090 128 00:07:33,090 --> 00:07:34,230 >> Y aquí lo tenemos - 129 00:07:34,230 --> 00:07:37,660 3.1416. 130 00:07:37,660 --> 00:07:43,520 Usted puede notar que se imprima 3.1416 en lugar de 3,1415 como se esperaba. 131 00:07:43,520 --> 00:07:47,550 Eso es porque las rondas durante el proceso de división, en lugar de sólo 132 00:07:47,550 --> 00:07:50,490 truncando el valor. 133 00:07:50,490 --> 00:07:53,710 Ahora usted debería ser capaz de imprimir el total definitivo correctamente, que acaba 134 00:07:53,710 --> 00:07:54,870 el programa. 135 00:07:54,870 --> 00:07:55,930 >> Felicitaciones. 136 00:07:55,930 --> 00:07:57,340 Mi nombre es Zamyla. 137 00:07:57,340 --> 00:07:58,720 Y esto fue peniques. 138 00:07:58,720 --> 00:08:05,589 >> [REPRODUCCIÓN DE MÚSICA]