1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:01,960 ALTAVOZ 1: Vamos a hablar de agua. 3 00:00:01,960 --> 00:00:07,280 En este problema, se pedirá al usuario que diga Nos cuánto tiempo en minutos la ducha era 4 00:00:07,280 --> 00:00:11,040 y luego se calcula el equivalente número de botellas de agua 5 00:00:11,040 --> 00:00:12,970 que su ducha utiliza. 6 00:00:12,970 --> 00:00:16,379 >> ¿Cuáles son nuestras cosas por hacer para este problema? 7 00:00:16,379 --> 00:00:20,050 En primer lugar, vamos a querer para pedir y luego validar 8 00:00:20,050 --> 00:00:22,100 la entrada que el usuario nos da. 9 00:00:22,100 --> 00:00:24,790 Una vez que nos aseguramos de que nos tiene entrada de usuario válido, 10 00:00:24,790 --> 00:00:28,230 vamos a calcular el número equivalente de botellas de agua 11 00:00:28,230 --> 00:00:30,770 que el usuario tuvo durante su ducha, y entonces estamos 12 00:00:30,770 --> 00:00:33,720 va a decir por imprimir ese número. 13 00:00:33,720 --> 00:00:37,230 >> Así que vamos a abordar nuestro primer tarea, lo que provocó y validar 14 00:00:37,230 --> 00:00:38,550 la entrada del usuario. 15 00:00:38,550 --> 00:00:40,910 Para ello hemos escrito una función para la que llamó 16 00:00:40,910 --> 00:00:43,950 get_int situado en la Biblioteca CS50. 17 00:00:43,950 --> 00:00:48,710 get_int asegura que las entradas del usuario un entero, por lo que los números positivos, 18 00:00:48,710 --> 00:00:51,700 los números negativos, o Se aceptan cero. 19 00:00:51,700 --> 00:00:55,900 Sin embargo, si el usuario introduce cualquier otra cosa, por lo que cualquier combinación de letras o números 20 00:00:55,900 --> 00:00:59,710 o números decimales, entonces el usuario se le pedirá que vuelva a intentar 21 00:00:59,710 --> 00:01:04,319 y la función no aceptará nada hasta que el usuario les da un número entero. 22 00:01:04,319 --> 00:01:06,410 >> Entonces, ¿cómo usamos get_int? 23 00:01:06,410 --> 00:01:10,830 Si abre su espacio de trabajo y crear un archivo llamado integer.c vamos 24 00:01:10,830 --> 00:01:12,110 escriba lo siguiente. 25 00:01:12,110 --> 00:01:14,760 Hashtag incluye cs50.h. 26 00:01:14,760 --> 00:01:18,480 Esto es necesario porque get_int es una función de biblioteca CS50, 27 00:01:18,480 --> 00:01:21,890 por lo que debemos incluir hashtag su declaración con el fin 28 00:01:21,890 --> 00:01:23,370 para utilizar la función. 29 00:01:23,370 --> 00:01:26,570 Y luego, en mi principal funciono solo voy 30 00:01:26,570 --> 00:01:29,560 simplemente llamar a la función get_int. 31 00:01:29,560 --> 00:01:31,750 >> Así que vamos a ejecutar esto y ver cómo funciona. 32 00:01:31,750 --> 00:01:35,092 Ya he compilado, así que vamos a sólo seguir adelante y ejecutar este programa, 33 00:01:35,092 --> 00:01:36,480 ./entero. 34 00:01:36,480 --> 00:01:39,880 Aquí tengo una pronta y aquí es donde la entrada I el valor. 35 00:01:39,880 --> 00:01:44,880 Digamos que pongo en tan sólo algún entero, 50, los exceptúa del programa y se cierra 36 00:01:44,880 --> 00:01:45,960 y eso es eso. 37 00:01:45,960 --> 00:01:49,350 >> Pero digo lo funciono de nuevo y Yo de entrada algo más. 38 00:01:49,350 --> 00:01:51,350 Tal vez, hola mundo. 39 00:01:51,350 --> 00:01:55,660 Eso no es un número entero por lo que la programa me vuelva a intentarse. 40 00:01:55,660 --> 00:01:59,160 Vamos a intentarlo de nuevo con tal vez un decimal este momento. 41 00:01:59,160 --> 00:02:03,450 0,5, de nuevo, no un número entero por lo el programa no lo aceptará 42 00:02:03,450 --> 00:02:05,290 y me dice que vuelva a intentar. 43 00:02:05,290 --> 00:02:07,070 Así que vamos a darle otro número. 44 00:02:07,070 --> 00:02:09,830 El programa acepta, se cierra y ya hemos terminado. 45 00:02:09,830 --> 00:02:13,520 >> Así que ahora tenemos una función que nos permite y garantiza 46 00:02:13,520 --> 00:02:16,790 que el usuario introduce una entero, pero ¿cómo podemos 47 00:02:16,790 --> 00:02:20,330 de hecho un seguimiento de la número entero introducida por el usuario? 48 00:02:20,330 --> 00:02:25,260 Bueno, todo lo que vamos a hacer es tienda este valor en una variable, digamos n. 49 00:02:25,260 --> 00:02:30,580 Así que si me declaro un entero n, y me puse ese valor a get_int, 50 00:02:30,580 --> 00:02:34,700 entonces n luego almacenar lo valorar el usuario introducido. 51 00:02:34,700 --> 00:02:38,620 >> Muy bien, así que ahora nos hemos asegurado de que el usuario nos dará un número entero 52 00:02:38,620 --> 00:02:42,550 y sabemos cómo hacer un seguimiento del número entero, pero recuerda, 53 00:02:42,550 --> 00:02:45,610 son números enteros positivos y negativos. 54 00:02:45,610 --> 00:02:49,110 Por lo que no tiene mucho sentido en el contexto de este problema 55 00:02:49,110 --> 00:02:53,570 que el usuario toma una ducha de, digamos, 12 minutos negativas. 56 00:02:53,570 --> 00:02:59,310 Por lo que necesitamos para asegurarse de que el usuario en realidad nos da un número entero positivo. 57 00:02:59,310 --> 00:03:02,130 Ahora no tenemos sólo una función única para que, 58 00:03:02,130 --> 00:03:04,620 así que vamos a tener para crear ese nosotros mismos. 59 00:03:04,620 --> 00:03:07,190 >> Por lo que queremos continuamente pedir al usuario 60 00:03:07,190 --> 00:03:09,730 hasta que nos den un número entero positivo. 61 00:03:09,730 --> 00:03:14,300 Si estoy haciendo algo continuamente a continuación, que es similar a un bucle, una repetición. 62 00:03:14,300 --> 00:03:19,130 Así que una de las construcciones que utilizamos en c para poner en práctica la repetición y bucles 63 00:03:19,130 --> 00:03:20,410 es un bucle while. 64 00:03:20,410 --> 00:03:23,020 Por lo que un bucle while, como se muestra aquí, se ejecutará 65 00:03:23,020 --> 00:03:27,030 lo que está en el cuerpo del bucle como siempre y cuando la condición se evalúa dados 66 00:03:27,030 --> 00:03:27,900 true. 67 00:03:27,900 --> 00:03:30,640 Tan pronto como esa condición evalúa como false, 68 00:03:30,640 --> 00:03:34,830 el programa procederá a lo viene después de que el cuerpo del bucle. 69 00:03:34,830 --> 00:03:39,400 >> Así, mientras que los bucles se van a ser realmente útil en CS50. 70 00:03:39,400 --> 00:03:42,590 Pero en este particular, caso, sabemos que estamos 71 00:03:42,590 --> 00:03:48,140 va a pedir al usuario al menos una vez y sólo bucle si es necesario. 72 00:03:48,140 --> 00:03:51,080 Así que aquí llegamos a una construcción especial y eso es 73 00:03:51,080 --> 00:03:55,020 muy similar al mientras lazo llama un bucle do-while. 74 00:03:55,020 --> 00:03:58,840 >> Por lo tanto un bucle do-while ejecuta la cuerpo del bucle al menos una vez 75 00:03:58,840 --> 00:04:01,750 y luego se comprueba si se debe ejecutar, 76 00:04:01,750 --> 00:04:05,310 a diferencia de un bucle while, que comprobará la condición 77 00:04:05,310 --> 00:04:07,200 y luego ejecutar el cuerpo. 78 00:04:07,200 --> 00:04:11,880 Así que en un bucle do-while lo que podríamos hacer es pedir al usuario un número entero, 79 00:04:11,880 --> 00:04:14,450 a continuación, comprobar si es válido o no. 80 00:04:14,450 --> 00:04:18,130 Si es válido, entonces vamos a repetir el proceso preguntando al usuario 81 00:04:18,130 --> 00:04:22,290 para darnos otro entero, y luego sólo cuando ese entero es válida, 82 00:04:22,290 --> 00:04:25,060 vamos a seguir lo que viene después. 83 00:04:25,060 --> 00:04:28,030 >> Ahora se dará cuenta de que la declaración del número entero n 84 00:04:28,030 --> 00:04:31,670 es ligeramente diferente a lo que lo hizo antes en el ejemplo anterior 85 00:04:31,670 --> 00:04:33,640 y esto es porque de alcance. 86 00:04:33,640 --> 00:04:37,920 Si hubiéramos declarado el entero n en el interior del cuerpo del bucle do-while, 87 00:04:37,920 --> 00:04:42,640 entonces no sería capaz de acceder que el valor de n fuera de los rizada 88 00:04:42,640 --> 00:04:45,050 tirantes que indica el cuerpo del bucle. 89 00:04:45,050 --> 00:04:51,080 Pero nosotros queremos, de hecho, para acceder a la valor de n más adelante en nuestro programa. 90 00:04:51,080 --> 00:04:55,730 >> OK, así que ahora vamos a hablar de lo que esta condición debe ser. 91 00:04:55,730 --> 00:05:00,400 Queremos Nueva solicitud sólo el usuario, siempre y cuando n no es válido. 92 00:05:00,400 --> 00:05:04,640 Así piensa a sí mismo lo que un inválido valor entero se vería 93 00:05:04,640 --> 00:05:08,060 y luego crear un booleano expresión para expresar eso. 94 00:05:08,060 --> 00:05:13,070 >> Ya casi hemos terminado con nuestra subtarea de preguntar y validar la entrada del usuario. 95 00:05:13,070 --> 00:05:16,010 Así que vamos a hacer esto un poco poco más fácil de usar 96 00:05:16,010 --> 00:05:18,390 y dar al usuario un poco poco más de información 97 00:05:18,390 --> 00:05:20,510 de lo que les estamos solicitándole. 98 00:05:20,510 --> 00:05:24,500 Así que vamos a pedir al usuario, por la especificación, con los minutos de cadena. 99 00:05:24,500 --> 00:05:28,935 Así, utilizando sus estados de printf, hacer Asegúrese de que coincida exactamente esto. 100 00:05:28,935 --> 00:05:30,230 >> Todo bien. 101 00:05:30,230 --> 00:05:33,840 Así que ahora tenemos un usuario válido de entrada, un número entero positivo 102 00:05:33,840 --> 00:05:37,400 valor por el número de minutos que pasaron en la ducha. 103 00:05:37,400 --> 00:05:41,300 Entonces, ¿qué es lo próximo es calcular el número equivalente de botellas. 104 00:05:41,300 --> 00:05:45,250 Lo que vamos a hacer aquí podríamos ser muy obvio para usted al principio, 105 00:05:45,250 --> 00:05:46,640 y eso está bien. 106 00:05:46,640 --> 00:05:49,320 Lo que queremos hacer es que quieren empezar a practicar 107 00:05:49,320 --> 00:05:53,810 la idea de la detección de patrones y el desarrollo de fórmulas para el problema. 108 00:05:53,810 --> 00:05:57,200 >> Así se nos dice por la especificación que en un minuto en la ducha 109 00:05:57,200 --> 00:05:59,960 es equivalente a alrededor de 12 botellas de agua. 110 00:05:59,960 --> 00:06:03,020 De manera que lo haría dos minutos equivalente a 24, 111 00:06:03,020 --> 00:06:05,850 y cinco minutos te equivalente a 60. 112 00:06:05,850 --> 00:06:08,390 Así que ahora si usted piensa usted lo tiene, entonces vamos a 113 00:06:08,390 --> 00:06:10,390 ver si se puede llegar con un patrón o fórmula 114 00:06:10,390 --> 00:06:14,990 para expresar si hemos decir, n minutos, ¿cuántas botellas de agua 115 00:06:14,990 --> 00:06:17,930 habría que ser expresada en términos de n? 116 00:06:17,930 --> 00:06:20,680 >> Una vez más, a pesar de que este podría ser simple al principio, 117 00:06:20,680 --> 00:06:23,240 más adelante, cuando se llega a problemas más complicados 118 00:06:23,240 --> 00:06:26,360 vamos a querer entrar en la práctica de identificar 119 00:06:26,360 --> 00:06:30,120 patrones y las fórmulas en desarrollo para entender estas cosas. 120 00:06:30,120 --> 00:06:33,450 >> En c se tiene acceso a operaciones aritméticas estándar, 121 00:06:33,450 --> 00:06:36,520 suma resta, multiplicación y división. 122 00:06:36,520 --> 00:06:38,420 Así que lo dejo a ahora a averiguar 123 00:06:38,420 --> 00:06:41,300 la manera de expresar la número equivalente de botellas 124 00:06:41,300 --> 00:06:43,990 que el usuario consume durante su ducha. 125 00:06:43,990 --> 00:06:45,700 >> Muy bien, estamos casi hecho. 126 00:06:45,700 --> 00:06:50,650 Hemos pide al usuario para su entrada, nos hemos asegurado que se trata de una entrada válida, 127 00:06:50,650 --> 00:06:53,330 y luego hemos descubierto cómo para calcular el equivalente 128 00:06:53,330 --> 00:06:55,480 número de botellas que se consumen. 129 00:06:55,480 --> 00:06:59,430 Así que lo último que hay que hacer es la salida el número equivalente de botellas 130 00:06:59,430 --> 00:07:02,410 y es de esperar alentar a conservar un poco de agua. 131 00:07:02,410 --> 00:07:06,270 >> La salida será el valor ser una sentencia printf. 132 00:07:06,270 --> 00:07:09,720 Si quería decir que me tener tres animales domésticos, por ejemplo, 133 00:07:09,720 --> 00:07:13,090 Yo podría utilizar una instrucción printf que se ve algo como esto. 134 00:07:13,090 --> 00:07:15,880 Tengo tres animales domésticos, y un nuevo línea para el formato agradable. 135 00:07:15,880 --> 00:07:17,880 >> Ahora no queremos cosas simples de código duro. 136 00:07:17,880 --> 00:07:20,740 Decir el número de mi mascotas cambia con el tiempo. 137 00:07:20,740 --> 00:07:25,080 A continuación, voy a hacer uso de marcadores de posición en mi declaración printf. 138 00:07:25,080 --> 00:07:27,350 Así que aquí mi número es un número entero. 139 00:07:27,350 --> 00:07:31,480 Así que voy a hacer un marcador de posición para un entero utilizando% i. 140 00:07:31,480 --> 00:07:33,930 Voy a escribir la cadena, y luego después de la cadena 141 00:07:33,930 --> 00:07:38,000 Escribo una coma y luego el variable que quiero imprimir. 142 00:07:38,000 --> 00:07:42,730 Así será impreso ese valor en lugar de ese marcador de posición,% i. 143 00:07:42,730 --> 00:07:47,630 >> Puede utilizar marcadores de posición, como se así, para los flotadores con un% f. 144 00:07:47,630 --> 00:07:50,420 Usted también puede tener múltiples marcadores de posición en una cadena. 145 00:07:50,420 --> 00:07:53,950 Por ejemplo, si tengo algún número de los perros y algunos número de gatos, 146 00:07:53,950 --> 00:07:59,210 Pongo dos marcadores de posición aquí y luego mis dos variables en orden respectivo. 147 00:07:59,210 --> 00:08:03,130 >> Así que ahora que sabemos cómo imprimir los valores almacenados en las variables, 148 00:08:03,130 --> 00:08:06,030 la última cosa que hacer es asegurarse de que nos 149 00:08:06,030 --> 00:08:10,920 imprimir el valor en el formato exacto se indica en la especificación. 150 00:08:10,920 --> 00:08:14,990 Con esto, hemos impulsado a la usuario y se valida su entrada. 151 00:08:14,990 --> 00:08:17,920 a continuación, hemos calculado el equivalente número de botellas de agua 152 00:08:17,920 --> 00:08:22,100 que consumen durante su ducha, y hemos emite ese valor para ellos. 153 00:08:22,100 --> 00:08:24,440 Y así, hemos completado el agua. 154 00:08:24,440 --> 00:08:28,730 >> Me llamo [? Zamila,?] y esto es CS50. 155 00:08:28,730 --> 00:08:29,909