1 00:00:00,000 --> 00:00:03,353 >> [REPRODUCCIÓN DE MÚSICA] 2 00:00:03,353 --> 00:00:04,842 3 00:00:04,842 --> 00:00:06,050 DAVID MALAN: Hola a todos. 4 00:00:06,050 --> 00:00:07,777 Esto es supersección de CS50. 5 00:00:07,777 --> 00:00:09,860 Secciones asignados no lo hará comenzar otra semana. 6 00:00:09,860 --> 00:00:11,580 Y por eso hoy, estoy aquí con-- 7 00:00:11,580 --> 00:00:12,122 >> MARIA: María. 8 00:00:12,122 --> 00:00:14,163 DAVID MALAN: --to realidad echar un vistazo a un problema 9 00:00:14,163 --> 00:00:16,110 establecer uno, el curso de primeras semanas de material, 10 00:00:16,110 --> 00:00:19,780 conseguirle orientado con IDE CS50, un poco de Linux, el sistema operativo que es 11 00:00:19,780 --> 00:00:22,290 que se ejecuta en IDE, así como ver algunas de la transición 12 00:00:22,290 --> 00:00:25,730 desde cero en C líder hasta un problema establecer uno. 13 00:00:25,730 --> 00:00:28,340 >> Así que sin más preámbulos, en el problema de establecer uno, 14 00:00:28,340 --> 00:00:30,520 usted va a ser presenten a CS50 IDE, que 15 00:00:30,520 --> 00:00:33,230 es esta programación basada en la web entorno que utilizamos con el fin 16 00:00:33,230 --> 00:00:34,280 escribir programas. 17 00:00:34,280 --> 00:00:37,280 Ha sido diseñado para parecer muy reminiscencia de un ordenador típico 18 00:00:37,280 --> 00:00:39,430 sistema que ejecuta una operación sistema llamado Linux. 19 00:00:39,430 --> 00:00:42,440 Pero es en la llamada nube, lo que significa que todos en la clase 20 00:00:42,440 --> 00:00:45,100 en realidad puede tener su propia cuenta y usarlo, también. 21 00:00:45,100 --> 00:00:48,950 >> Así que la mayoría de ustedes probablemente nunca han utilizado un entorno Linux antes o tal vez 22 00:00:48,950 --> 00:00:50,447 incluso un entorno de línea de comandos. 23 00:00:50,447 --> 00:00:52,280 Y una línea de comandos medio ambiente es diferente. 24 00:00:52,280 --> 00:00:53,200 Todo es textual. 25 00:00:53,200 --> 00:00:54,730 Es todos los comandos de teclado. 26 00:00:54,730 --> 00:00:59,480 Y no es pasar el ratón, no hay iconos, sin ventanas de diálogo, no hay menús. 27 00:00:59,480 --> 00:01:00,212 Es puramente texto. 28 00:01:00,212 --> 00:01:01,920 Así que en un primer momento, que tipo de se siente como un paso 29 00:01:01,920 --> 00:01:04,434 hacia atrás en términos de sofisticación. 30 00:01:04,434 --> 00:01:06,600 Pero termina siendo mucho más potente, sin duda, 31 00:01:06,600 --> 00:01:08,510 para un científico de la computación, en última instancia. 32 00:01:08,510 --> 00:01:09,540 >> Así que vamos a echar un vistazo. 33 00:01:09,540 --> 00:01:13,850 Aquí estoy en CS50.io, a través del cual puede iniciar sesión en IDE CS50. 34 00:01:13,850 --> 00:01:17,414 Y al igual que en Scratch, hay tres áreas principales a esta pantalla. 35 00:01:17,414 --> 00:01:20,080 Así que en el lado de la izquierda, tenemos cuál será el explorador de archivos. 36 00:01:20,080 --> 00:01:22,413 Y hay esta carpeta en superior, que es ahora vacío 37 00:01:22,413 --> 00:01:24,690 desde que me deshice de todo mi archivos antes supersección. 38 00:01:24,690 --> 00:01:27,599 Y ahí es donde vamos guardar archivos de C que escribimos. 39 00:01:27,599 --> 00:01:30,890 En la parte superior derecha, tenemos un lugar donde todo nuestro código va a poner por escrito. 40 00:01:30,890 --> 00:01:34,610 Y de hecho, si hago clic en este plus, esta se va a dejar que me elijo Nuevo archivo. 41 00:01:34,610 --> 00:01:38,310 Y yo que puedo empezar a escribir código C o, Realmente, cualquier número de otros idiomas. 42 00:01:38,310 --> 00:01:42,670 >> Y luego en la parte inferior donde se dice jharvard @ ide50-- y la tuya será 43 00:01:42,670 --> 00:01:45,080 decir algo un poco diferente-- lo que se llama esto? 44 00:01:45,080 --> 00:01:48,644 45 00:01:48,644 --> 00:01:49,310 Ventana de Terminal. 46 00:01:49,310 --> 00:01:49,570 Sí. 47 00:01:49,570 --> 00:01:51,810 Por lo tanto la ventana de terminal es la llamada de línea de comandos 48 00:01:51,810 --> 00:01:55,540 interfaz a través de la cual se puede interactuar con el sistema operativo subyacente. 49 00:01:55,540 --> 00:01:58,220 Y por ahora, vamos a hacer muy poco uso de esto-- 50 00:01:58,220 --> 00:02:01,170 acaba de compilar, mirar mensajes de error que vemos, 51 00:02:01,170 --> 00:02:02,347 y para ejecutar nuestros programas. 52 00:02:02,347 --> 00:02:04,680 Pero en última instancia, vamos hacer mucho más, también. 53 00:02:04,680 --> 00:02:07,490 E incluso se puede instalar el software y administrar su espacio de trabajo 54 00:02:07,490 --> 00:02:09,066 dentro de CS50 IDE, también. 55 00:02:09,066 --> 00:02:10,440 Pero más sobre esto en otro momento. 56 00:02:10,440 --> 00:02:12,689 >> Así que vamos a seguir adelante y escribir un programa muy sencillo solo 57 00:02:12,689 --> 00:02:15,064 que pasar por un calentamiento de hello.c, que es quizás 58 00:02:15,064 --> 00:02:16,480 el programa más simple podemos escribir. 59 00:02:16,480 --> 00:02:18,330 Yo ya he abierto una nueva pestaña. 60 00:02:18,330 --> 00:02:24,310 Voy a seguir adelante y decir incluir io.h. estándar 61 00:02:24,310 --> 00:02:25,325 Entonces int main (void). 62 00:02:25,325 --> 00:02:28,930 63 00:02:28,930 --> 00:02:35,200 Y entonces printf ("hola, mundo" barra invertida n, cerca de cotización, 64 00:02:35,200 --> 00:02:39,480 cerrar paréntesis y punto y coma. 65 00:02:39,480 --> 00:02:39,990 >> Correcto. 66 00:02:39,990 --> 00:02:41,700 Así que ahora se dio cuenta de mi ventana no tiene título. 67 00:02:41,700 --> 00:02:44,840 Así que voy muy rápido subir a Archivo, Guardar. 68 00:02:44,840 --> 00:02:46,910 Y es importante que Me llamo no esta "hola". 69 00:02:46,910 --> 00:02:49,243 Así que un error muy común, especialmente en un problema conjunto uno, 70 00:02:49,243 --> 00:02:52,530 es accidentalmente acaba de llamar a su programa de "agua" o "codiciosos" o "Mario" 71 00:02:52,530 --> 00:02:53,890 o "crédito" o similares. 72 00:02:53,890 --> 00:02:55,970 Pero en realidad se quiere hacer Seguro que tiene la extensión de archivo 73 00:02:55,970 --> 00:02:58,928 porque esta es la única manera de que el compilador y también el editor de código 74 00:02:58,928 --> 00:03:00,710 sabe que eres realmente escribir código C. 75 00:03:00,710 --> 00:03:02,280 Así que déjame ir adelante y haga clic en Guardar. 76 00:03:02,280 --> 00:03:05,710 >> Y ahora, también, lo que CS50 IDE ha hecho por nosotros es que es también 77 00:03:05,710 --> 00:03:07,120 sintaxis resaltado todo. 78 00:03:07,120 --> 00:03:08,822 Así que ha hecho todo muy colorido. 79 00:03:08,822 --> 00:03:10,780 Y todo el propósito de que no es funcional. 80 00:03:10,780 --> 00:03:14,290 Es sólo para dibujar los ojos a la conceptualmente diferentes piezas 81 00:03:14,290 --> 00:03:15,310 de este programa. 82 00:03:15,310 --> 00:03:17,570 Así que vamos a seguir adelante y compilar esto. 83 00:03:17,570 --> 00:03:19,490 Y puedo compilar este en un par de maneras. 84 00:03:19,490 --> 00:03:22,010 Y en la semana uno, el manera de la vieja escuela que hicimos 85 00:03:22,010 --> 00:03:26,250 estaba literalmente en el "hello.c sonido metálico." comando line-- 86 00:03:26,250 --> 00:03:27,596 Y entonces me golpeó Intro. 87 00:03:27,596 --> 00:03:29,720 Y nada parece suceder en la ventana de terminal. 88 00:03:29,720 --> 00:03:32,654 Pero lo que hizo el cambio en el IDE? 89 00:03:32,654 --> 00:03:35,320 Cuando, una vez más, el IDE sólo significa Entorno de desarrollo integrado. 90 00:03:35,320 --> 00:03:38,360 Es una forma elegante de decir este desarrollo integrado 91 00:03:38,360 --> 00:03:40,620 medio ambiente para el desarrollo de software. 92 00:03:40,620 --> 00:03:42,477 Entonces, ¿qué cambió en la interfaz de usuario? 93 00:03:42,477 --> 00:03:44,310 ¿Qué notaste eso es diferente, María? 94 00:03:44,310 --> 00:03:47,100 >> MARIA: Me di cuenta de algo bajo la IDE50 carpeta aquí. 95 00:03:47,100 --> 00:03:47,850 >> DAVID MALAN: Sí. 96 00:03:47,850 --> 00:03:50,230 Así que aquí, no sólo ¿tenemos "hello.c." 97 00:03:50,230 --> 00:03:53,120 También tenemos "a.out", que es clase de nombre tonto para un programa. 98 00:03:53,120 --> 00:03:56,430 Pero de hecho, es el nombre predeterminado para un programa cuando usted acaba de compilar el código 99 00:03:56,430 --> 00:03:59,110 y no decirle al compilador qué archivo de salida. 100 00:03:59,110 --> 00:04:01,790 Así que si quiero correr esto, necesitar decirle al compiler-- 101 00:04:01,790 --> 00:04:05,340 o más bien, necesito decirle al espacio de trabajo que 102 00:04:05,340 --> 00:04:09,780 desee ejecutar el programa llamado "a.out". 103 00:04:09,780 --> 00:04:10,550 Entrar. 104 00:04:10,550 --> 00:04:12,474 Y hay "hola, mundo. "Ahora el" ./ ". 105 00:04:12,474 --> 00:04:13,390 es realmente importante. 106 00:04:13,390 --> 00:04:16,050 A pesar de que normalmente sólo escribir los nombres de comandos, 107 00:04:16,050 --> 00:04:19,060 cuando es un programa que tienes por escrito, usted quiere decir "./" 108 00:04:19,060 --> 00:04:22,460 porque eso dice explícitamente Linux que desea ejecutar un programa llamado 109 00:04:22,460 --> 00:04:26,930 "a.out" que está en esto, en que punto significa este directorio que estoy actualmente 110 00:04:26,930 --> 00:04:31,600 en, que pasa a ser llamado espacio de trabajo, "a.out. 111 00:04:31,600 --> 00:04:35,410 Porque si simplemente le dije "a.out" Enter, Yo voy a conseguir "a.out comando no 112 00:04:35,410 --> 00:04:38,035 encontrado "porque el computer-- porque yo inventé "a.out"; 113 00:04:38,035 --> 00:04:40,910 que no vino con la computer-- no sabe dónde buscarlo, 114 00:04:40,910 --> 00:04:43,590 a pesar de que es lo correcto bajo mi nariz, por así decirlo. 115 00:04:43,590 --> 00:04:44,090 OKAY. 116 00:04:44,090 --> 00:04:49,910 Así que podemos cambiar esto a ser "clang -o hola hello.c." 117 00:04:49,910 --> 00:04:53,030 Y si pulsa enter, qué programa ¿Esto va a la salida para mí? 118 00:04:53,030 --> 00:04:55,710 ¿Cuál es el nombre del archivo? 119 00:04:55,710 --> 00:04:57,500 Sí, en la parte trasera. 120 00:04:57,500 --> 00:04:58,479 Eso es correcto. "Hola." 121 00:04:58,479 --> 00:05:00,520 Así que "hola" va a ser el nombre del programa 122 00:05:00,520 --> 00:05:04,610 porque nosotros hemos utilizado la llamada de un argumento de la línea de comandos, que es justo 123 00:05:04,610 --> 00:05:08,120 una forma de cambiar el comportamiento de el compilador realidad de salida 124 00:05:08,120 --> 00:05:09,450 un nombre de archivo específico. 125 00:05:09,450 --> 00:05:12,400 Y de hecho, si el zoom y mirar hacia arriba aquí, 126 00:05:12,400 --> 00:05:17,430 ahora tengo no sólo "a.out" y "hello.c", sino también "hola", también. 127 00:05:17,430 --> 00:05:22,410 Así que ahora que puedo hacer "./hola," Enter. 128 00:05:22,410 --> 00:05:23,640 Y hay "hola, mundo". 129 00:05:23,640 --> 00:05:25,640 Pero lastly-- y esto ahora será la convención 130 00:05:25,640 --> 00:05:27,590 usamos todo el semestre, typically-- 131 00:05:27,590 --> 00:05:30,070 es que también puede simplemente decir "hacer hola." 132 00:05:30,070 --> 00:05:33,370 Y, en efecto, está diciendo que es hasta hasta la fecha porque ya existe. 133 00:05:33,370 --> 00:05:37,860 Déjame ir por delante y quitar, con el comando rm, tanto "a.out" - 134 00:05:37,860 --> 00:05:39,644 y decir "quitar a.out archivo normal?" 135 00:05:39,644 --> 00:05:41,810 Eso sólo significa, ¿verdad Seguro que deseas eliminarlo? 136 00:05:41,810 --> 00:05:42,880 Voy a decir que sí. 137 00:05:42,880 --> 00:05:46,690 Y luego me voy a quitar "hola", pero no "hello.c." 138 00:05:46,690 --> 00:05:49,920 Voy a decir "sí" de manera explícita, pero "y" es suficiente, también. 139 00:05:49,920 --> 00:05:52,140 >> Y ahora si me cuenta escriba ls-- que, recuerdo, 140 00:05:52,140 --> 00:05:55,540 significa películas-- que enumera todos de los archivos en mi carpeta. 141 00:05:55,540 --> 00:05:57,850 Y de hecho, si el zoom y mira arriba a la izquierda, 142 00:05:57,850 --> 00:05:59,730 confirma que lo que hay en esta carpeta, incluso 143 00:05:59,730 --> 00:06:04,990 aunque ha etiquetado como IDE50 aquí y no del área de trabajo, es sólo "hello.c." 144 00:06:04,990 --> 00:06:09,152 Así que ahora aquí, si yo no "hacer hola," Enter, 145 00:06:09,152 --> 00:06:12,360 ahora veo un comando mucho más tiempo, sino una más sofisticado de comandos que está pasando 146 00:06:12,360 --> 00:06:13,940 para ser útil en las semanas venideras. 147 00:06:13,940 --> 00:06:16,720 Y ahora lo que puedo decir "./hola." 148 00:06:16,720 --> 00:06:19,257 >> Así que echemos un rápido recorrido comandos de alguna otra Linux. 149 00:06:19,257 --> 00:06:21,840 Entonces, ¿por qué no dar un paso atrás y realmente se ven en C más 150 00:06:21,840 --> 00:06:25,020 en general, la transición desde cero a C, y luego concluir con una mirada 151 00:06:25,020 --> 00:06:27,305 en el primer problema establecido en C. De acuerdo. 152 00:06:27,305 --> 00:06:30,430 Así que voy a seguir adelante y sólo limpia mi espacio de trabajo con Control-L solo 153 00:06:30,430 --> 00:06:31,429 para mantener la pantalla limpia. 154 00:06:31,429 --> 00:06:33,520 Pero eso no tiene ningún funcional impactar de otro modo. 155 00:06:33,520 --> 00:06:35,820 >> Recordemos que hemos visto algunos comandos ahora. 156 00:06:35,820 --> 00:06:39,900 Así que hemos visto sonido metálico, que por lo general usted no tendrá que ejecutar manualmente más. 157 00:06:39,900 --> 00:06:41,650 Lugar Usaremos maquillaje. 158 00:06:41,650 --> 00:06:45,290 Pero también vimos ls, que muestra una lista de los archivos en mi directorio. 159 00:06:45,290 --> 00:06:48,750 Y ahora por qué es allí-- Hay de dos archivos ahora, "hola" y "hello.c." 160 00:06:48,750 --> 00:06:52,240 ¿Por qué hay una estrella o un asterisco después de "hola"? 161 00:06:52,240 --> 00:06:54,900 ¿Qué significa eso, en base en lo que vimos en la primera semana? 162 00:06:54,900 --> 00:06:58,852 163 00:06:58,852 --> 00:07:00,400 ¿Qué piensas? 164 00:07:00,400 --> 00:07:02,742 ¿Qué significa la estrella? 165 00:07:02,742 --> 00:07:04,614 >> MARIA: para-- el programa "hola"? 166 00:07:04,614 --> 00:07:05,530 DAVID MALAN: "Hola *". 167 00:07:05,530 --> 00:07:06,330 Sí. 168 00:07:06,330 --> 00:07:07,760 ¿Oh si? 169 00:07:07,760 --> 00:07:08,639 Oh, ejecutable. 170 00:07:08,639 --> 00:07:09,180 Eso es correcto. 171 00:07:09,180 --> 00:07:10,890 Así que eso significa que "hola" es ejecutable. 172 00:07:10,890 --> 00:07:13,430 Así que de hecho, es por eso Que puedo hacer "./hola." 173 00:07:13,430 --> 00:07:13,930 Correcto. 174 00:07:13,930 --> 00:07:15,179 Entonces, ¿qué más puedo hacer aquí? 175 00:07:15,179 --> 00:07:17,290 Bueno, resulta que lo que pueda También crear directorios. 176 00:07:17,290 --> 00:07:20,924 Así que permítanme seguir adelante y crear, por ejemplo, un directorio "pset1". 177 00:07:20,924 --> 00:07:23,590 Y la especificación conjunto de problemas tendrá que hacer exactamente esto, 178 00:07:23,590 --> 00:07:25,260 por lo que no tiene que recordar hoy. 179 00:07:25,260 --> 00:07:27,340 Pero "pset1 mkdir" parece no tener ningún impacto. 180 00:07:27,340 --> 00:07:30,540 Pero, de nuevo, ningún mensaje de error en general es una buena cosa. 181 00:07:30,540 --> 00:07:34,060 Así que si escribo "ls" ahora-- ah, ahora Tengo un archivo ejecutable llamado 182 00:07:34,060 --> 00:07:36,570 "hola", un archivo C llama "hello.c." 183 00:07:36,570 --> 00:07:40,860 Y entonces la barra final, por lo que hablar, significa que este es un directorio. 184 00:07:40,860 --> 00:07:42,510 >> Así que de hecho, ahora quiero abrirlo. 185 00:07:42,510 --> 00:07:45,730 Y no me doble clic sobre ella como en una interfaz gráfica de usuario, un entorno gráfico. 186 00:07:45,730 --> 00:07:48,550 Yo en cambio digo "pset1 cd." 187 00:07:48,550 --> 00:07:49,640 Entrar. 188 00:07:49,640 --> 00:07:53,100 Nada interesante parece tener sucedido, excepto mi pequeño símbolo 189 00:07:53,100 --> 00:07:57,300 aquí-- ésta es la manera de recordar de Linux conmigo donde yo estoy, así que ¿qué carpeta está abierta. 190 00:07:57,300 --> 00:08:00,080 Es sólo que me dice de manera explícita en contraposición a gráficamente. 191 00:08:00,080 --> 00:08:05,100 Y si escribo "ls", porque he visto que otra prompt inmediatamente, piensa usted, 192 00:08:05,100 --> 00:08:07,269 cuando enumero los contenidos de pset1? 193 00:08:07,269 --> 00:08:09,310 MARIA: Probablemente no lo hace tener algo allí. 194 00:08:09,310 --> 00:08:09,630 DAVID MALAN: Sí. 195 00:08:09,630 --> 00:08:11,510 Así que no lo hemos hecho, obviamente, creado algo allí 196 00:08:11,510 --> 00:08:13,150 porque me acabo de crear el directorio. 197 00:08:13,150 --> 00:08:17,690 Ahora, si yo quería crear un file-- para ejemplo, podría crear un nuevo archivo. 198 00:08:17,690 --> 00:08:20,190 Y entonces yo podría ir a Guardar y guardar como, 199 00:08:20,190 --> 00:08:23,090 como, "mario.c" si está haciendo la edición estándar del conjunto de procesadores una. 200 00:08:23,090 --> 00:08:27,610 Y luego, como cualquier Mac o PC, simplemente elegir la carpeta "pset1, Guardar. 201 00:08:27,610 --> 00:08:28,740 Y ahora el archivo está vacío. 202 00:08:28,740 --> 00:08:31,160 Pero vamos a acercar de nuevo por un segundo. 203 00:08:31,160 --> 00:08:32,470 Vamos a hacer ls aquí. 204 00:08:32,470 --> 00:08:34,470 Ahora vemos "mario.c". 205 00:08:34,470 --> 00:08:37,850 >> Así que hay algunos otros comandos que vale la pena teniendo en cuenta más de tiempo-- 206 00:08:37,850 --> 00:08:41,200 claro, o Control-L es lo que tengo estado golpeando; mkdir que hemos visto; 207 00:08:41,200 --> 00:08:45,240 rm que hemos visto, también, que es para eliminar o borrar un archivo. 208 00:08:45,240 --> 00:08:49,310 Cuidado puedes También-- y si te fijas a tutoriales en línea, podrás rm -rf 209 00:08:49,310 --> 00:08:52,630 es una forma muy común de decir eliminar una carpeta que tiene cosas en él. 210 00:08:52,630 --> 00:08:54,280 Apenas sea super, super cuidado. 211 00:08:54,280 --> 00:08:58,780 -rf significa recursivamente eliminar lo que sea 212 00:08:58,780 --> 00:09:01,150 usted está tratando de eliminar y por la fuerza eliminarlo. 213 00:09:01,150 --> 00:09:04,630 Así medios recursivo si se trata de una carpeta con una carpeta con una carpeta con una carpeta, 214 00:09:04,630 --> 00:09:05,690 eliminar todos ellos. 215 00:09:05,690 --> 00:09:08,680 Y la fuerza significa ni siquiera me pregunta sí o no, estoy seguro? 216 00:09:08,680 --> 00:09:11,960 Así que es una manera estupenda de peligroso la supresión de un montón de cosas rápidamente. 217 00:09:11,960 --> 00:09:17,210 Pero beware-- demasiado a menudo hace un intrépido estudiante borrar accidentalmente, por ejemplo, conjunto de procesadores 218 00:09:17,210 --> 00:09:18,000 uno, por ejemplo. 219 00:09:18,000 --> 00:09:19,833 >> MARIA: ¿Y si sólo hacer -r, van 220 00:09:19,833 --> 00:09:21,870 para preguntarles sobre cada archivo. 221 00:09:21,870 --> 00:09:22,790 >> DAVID MALAN: ¿Qué es moderadamente molesto. 222 00:09:22,790 --> 00:09:23,480 >> MARIA: Sí. 223 00:09:23,480 --> 00:09:25,813 >> DAVID MALAN: Así que por eso muchos de nosotros, incluido uno mismo, 224 00:09:25,813 --> 00:09:27,070 estoy en el hábito de usar -rf. 225 00:09:27,070 --> 00:09:27,861 Pero es peligroso. 226 00:09:27,861 --> 00:09:29,010 Así que el comprador tenga cuidado. 227 00:09:29,010 --> 00:09:31,050 Y luego mv es una especie de Curiosamente llamado. 228 00:09:31,050 --> 00:09:33,600 Así que este es el comando de movimiento, que se siente un poco raro 229 00:09:33,600 --> 00:09:37,260 porque de hecho se puede utilizar para mover archivos de un lugar a otro. 230 00:09:37,260 --> 00:09:39,970 Por ejemplo, supongamos que metí la pata. 231 00:09:39,970 --> 00:09:43,660 Supongamos que he creado un nuevo archivo para el conjunto de procesadores. 232 00:09:43,660 --> 00:09:46,320 Y yo guardé como "greedy.c." 233 00:09:46,320 --> 00:09:49,970 Pero supongamos que accidentalmente guardarlo en IDE50-- así que en mi propio espacio de trabajo 234 00:09:49,970 --> 00:09:51,580 y no en pset1. 235 00:09:51,580 --> 00:09:53,960 >> Usted puede ver tanto en la parte superior izquierda. 236 00:09:53,960 --> 00:09:55,284 Hay "greedy.c." 237 00:09:55,284 --> 00:09:56,450 Y hay algunas soluciones. 238 00:09:56,450 --> 00:09:58,324 Así que uno, puedo utilizar el manera fácil de usar súper 239 00:09:58,324 --> 00:09:59,740 de tan sólo arrastrar y soltar. 240 00:09:59,740 --> 00:10:01,910 Y eso haría realidad solucionar este problema. 241 00:10:01,910 --> 00:10:04,967 Pero hoy, que estamos tratando de mirar las formas más arcanos pero poderosas 242 00:10:04,967 --> 00:10:05,550 de hacer esto. 243 00:10:05,550 --> 00:10:07,880 Así que quiero aprovechar "ls" en pset1. 244 00:10:07,880 --> 00:10:09,690 Y yo sólo veo "mario.c." 245 00:10:09,690 --> 00:10:13,450 Déjame ir adelante y hacerlo "cd ..". 246 00:10:13,450 --> 00:10:15,320 Así CD de nuevo es cambiar directorio. 247 00:10:15,320 --> 00:10:18,130 ".." Significa lo que, sin embargo? 248 00:10:18,130 --> 00:10:21,100 La última vez que dije "cd pset1 "para entrar en pset1. 249 00:10:21,100 --> 00:10:24,360 Así que cuando digo "cd ..", ¿qué estoy haciendo? 250 00:10:24,360 --> 00:10:24,910 Hacia atrás. 251 00:10:24,910 --> 00:10:25,150 Sí. 252 00:10:25,150 --> 00:10:26,750 >> Así que va a la llamada de los padres. 253 00:10:26,750 --> 00:10:29,730 Ir a un nivel superior, al igual que salir de una carpeta. 254 00:10:29,730 --> 00:10:30,500 Así Intro. 255 00:10:30,500 --> 00:10:31,900 Y de hecho, mira lo que hizo. 256 00:10:31,900 --> 00:10:37,070 Me conmovió solo en área de trabajo en su lugar de en pset1, que está en espacio de trabajo. 257 00:10:37,070 --> 00:10:39,710 Y ahora si escribo "ls", hay un montón de cosas. 258 00:10:39,710 --> 00:10:41,650 En hay "greedy.c". 259 00:10:41,650 --> 00:10:48,720 Así que ahora me deja utilizar mv para, literalmente, mover "greedy.c" en pset1. 260 00:10:48,720 --> 00:10:51,120 Y por lo que una gran cantidad de comandos de Linux trabajar exactamente como esta. 261 00:10:51,120 --> 00:10:54,470 Toman sin argumentos o tomar una argumento o toman dos líneas de comandos 262 00:10:54,470 --> 00:10:55,449 argumentos y así sucesivamente. 263 00:10:55,449 --> 00:10:57,240 Y en este caso, es haciendo literalmente lo 264 00:10:57,240 --> 00:11:01,670 que dice, aunque succinctly-- mover greedy.c en pset1. 265 00:11:01,670 --> 00:11:02,310 Entrar. 266 00:11:02,310 --> 00:11:03,310 Nada parece suceder. 267 00:11:03,310 --> 00:11:06,180 Pero si hago un ls de nuevo, codiciosos se ha ido. 268 00:11:06,180 --> 00:11:12,437 Y si lo hago "pset1 cd", Enter, y luego ls nuevo, ahora que está en el lugar correcto. 269 00:11:12,437 --> 00:11:14,270 Como acotación al margen, si por algunos reason-- especialmente 270 00:11:14,270 --> 00:11:16,194 si usted tiene intermitente conectividad de red 271 00:11:16,194 --> 00:11:18,360 o usted está caminando alrededor campus con su tapa del portátil 272 00:11:18,360 --> 00:11:20,180 cerrado y luego abrirlo de nuevo y su espacio de trabajo 273 00:11:20,180 --> 00:11:21,730 parece un poco fuera de sincronización, no es gran cosa. 274 00:11:21,730 --> 00:11:23,646 Sólo recargar su navegador ventana, y lo que debería 275 00:11:23,646 --> 00:11:26,339 resync de modo que la mano izquierda explorador de archivos se ve exactamente 276 00:11:26,339 --> 00:11:27,380 al igual que la ventana de terminal. 277 00:11:27,380 --> 00:11:27,921 No es para preocuparse. 278 00:11:27,921 --> 00:11:31,460 En caso de duda, vuelva a cargar la página, por lo que siempre y cuando haya guardado los archivos ya. 279 00:11:31,460 --> 00:11:31,960 OKAY. 280 00:11:31,960 --> 00:11:34,710 Así mv también se puede utilizar para cambiar el nombre de los ficheros. 281 00:11:34,710 --> 00:11:36,760 Y vamos a echar un vistazo a este comando final aquí. 282 00:11:36,760 --> 00:11:39,950 Así suppose-- y esto es muy común, también, desde el principio. 283 00:11:39,950 --> 00:11:46,400 Algunos estudiantes de vez en cuando crean un archivo llamada, vamos a decir-- lo que es otro? 284 00:11:46,400 --> 00:11:47,730 Al igual que "WATER.C." 285 00:11:47,730 --> 00:11:51,080 Así que voy a gritar, por ninguna razón, en mayúsculas. 286 00:11:51,080 --> 00:11:53,190 Pero este no es el nombre correcto para el archivo 287 00:11:53,190 --> 00:11:56,660 aunque sólo sea porque nuestro problema ajustado especificación no te lo dijo 288 00:11:56,660 --> 00:11:59,430 para guardar el archivo como todas las tapas "WATER.C." 289 00:11:59,430 --> 00:12:01,320 En su lugar, esperamos "water.c" en minúsculas. 290 00:12:01,320 --> 00:12:03,140 Y, de hecho, este es problemático porque check50, 291 00:12:03,140 --> 00:12:04,370 un programa que vas para reunirse en un problema 292 00:12:04,370 --> 00:12:07,350 establecer uno que prueba de forma automática la exactitud de su código 293 00:12:07,350 --> 00:12:11,615 va a gritar a usted si no puede encontrar "water.c" en minúsculas. 294 00:12:11,615 --> 00:12:12,712 >> Así que tengo que arreglar esto. 295 00:12:12,712 --> 00:12:14,920 Así que muchas maneras diferentes a ello, la primera de ellas 296 00:12:14,920 --> 00:12:18,330 sería la de Control y haga clic o haga clic el nombre del archivo y sólo cambia en Cambiar nombre. 297 00:12:18,330 --> 00:12:19,740 Totalmente bien para hacerlo. 298 00:12:19,740 --> 00:12:21,820 Pero, de nuevo, hoy, vamos a lo hace un poco más de lujo. 299 00:12:21,820 --> 00:12:26,680 Vamos a usar mv cambiar "WATER.C" a "water.c." 300 00:12:26,680 --> 00:12:30,690 Así que usted puede también utilizar el primer argumento para cambiar su nombre al segundo argumento 301 00:12:30,690 --> 00:12:34,455 si el segundo argumento no, está en De hecho, una carpeta o un nombre de directorio. 302 00:12:34,455 --> 00:12:35,120 >> Correcto. 303 00:12:35,120 --> 00:12:39,560 Y, por último, un poco trick-- así que estoy en mi directorio de espacio de trabajo en el momento. 304 00:12:39,560 --> 00:12:43,660 Si yo quiero entrar en pset uno, Ciertamente puedo escribir "pset1 cd." 305 00:12:43,660 --> 00:12:47,260 Pero es tan tedioso para escribir "pset1" o ya los nombres de archivos o nombres de directorio 306 00:12:47,260 --> 00:12:47,980 quieto. 307 00:12:47,980 --> 00:12:51,960 Así que muy a menudo en Linux, lo que usted puede hacer es empezar a escribir "pse" 308 00:12:51,960 --> 00:12:56,100 y simplemente se aburren, presione Tab, y dejar la figura del ordenador hacia fuera para usted. 309 00:12:56,100 --> 00:12:58,190 Súper útil para entrar en ese hábito. 310 00:12:58,190 --> 00:13:01,079 El único inconveniente es que si tienes varios archivos o carpetas que empiezan 311 00:13:01,079 --> 00:13:02,870 con la letra "p" o "ps", es posible que tenga 312 00:13:02,870 --> 00:13:05,525 para escribir un poco más antes de que el computadora sabe qué hacer. 313 00:13:05,525 --> 00:13:06,820 >> MARIA: Nos gustan los atajos. 314 00:13:06,820 --> 00:13:08,695 >> DAVID MALAN: Esta voluntad le ahorrará mucho tiempo. 315 00:13:08,695 --> 00:13:11,930 Y también, como hemos dicho en la conferencia, que puede desplazarse hacia arriba en la historia, de arriba abajo, 316 00:13:11,930 --> 00:13:15,461 encontrar recientemente ejecutada comandos, también. 317 00:13:15,461 --> 00:13:15,960 Correcto. 318 00:13:15,960 --> 00:13:20,904 Así que ahora, vamos a centrar nuestra atención de nuevo a un programa simple, hola mundo. 319 00:13:20,904 --> 00:13:22,195 Así que hemos recopilado esto exactamente. 320 00:13:22,195 --> 00:13:24,050 Y ahora ¿por qué no tomamos un vistazo a los tipos de datos 321 00:13:24,050 --> 00:13:26,776 y luego la transición de algunos bloques de Scratch correspondiente a C. 322 00:13:26,776 --> 00:13:27,400 MARIA: Awesome. 323 00:13:27,400 --> 00:13:30,031 Así que ahora que usted ha comenzado escribir programas en C, 324 00:13:30,031 --> 00:13:32,530 vamos a empezar a hablar acerca de los tipos de datos y variables. 325 00:13:32,530 --> 00:13:37,570 Así que algunos tipos de datos que querría saber a partir de ahora 326 00:13:37,570 --> 00:13:39,400 son los que están resaltado en azul. 327 00:13:39,400 --> 00:13:42,420 Así que tenemos int primero, que significa entero. 328 00:13:42,420 --> 00:13:46,075 Y eso vale enteros, como usted podría tener guessed-- de modo 1, 2, 3, 329 00:13:46,075 --> 00:13:47,950 y cualesquiera otros números enteros que usted se pueda imaginar. 330 00:13:47,950 --> 00:13:48,730 >> DAVID MALAN: Y también negativo. 331 00:13:48,730 --> 00:13:50,220 >> MARIA: Y también los negativos, sí. 332 00:13:50,220 --> 00:13:51,450 Y 0. 333 00:13:51,450 --> 00:13:54,250 Entonces tenemos carrozas, que son números de punto flotante. 334 00:13:54,250 --> 00:13:58,360 Así que eso es todos los números reales que tienen puntos decimales. 335 00:13:58,360 --> 00:14:03,960 Así 5,0, 5,2, y aún más dígitos después del punto decimal, 336 00:14:03,960 --> 00:14:05,620 como bien, y también los negativos. 337 00:14:05,620 --> 00:14:07,530 Entonces tenemos carbón, que es un personaje. 338 00:14:07,530 --> 00:14:10,240 Así que creo que hablamos esto en la conferencia de hoy. 339 00:14:10,240 --> 00:14:15,682 Pero tenemos letras, por ejemplo-- A, B, C-- que se puede almacenar como un char. 340 00:14:15,682 --> 00:14:18,390 Pero entonces tenemos mucho más símbolos que pueden almacenarse como un char. 341 00:14:18,390 --> 00:14:22,380 Y los que se almacenan como ASCII. 342 00:14:22,380 --> 00:14:25,280 >> Y luego tenemos bool, que son booleanos. 343 00:14:25,280 --> 00:14:29,067 Y los evalúan como True o Falso o 1 y 0, respectivamente. 344 00:14:29,067 --> 00:14:31,650 DAVID MALAN: Y recordemos que bool proviene de la biblioteca CS50. 345 00:14:31,650 --> 00:14:33,300 Así que no es incorporado en C, pero es super útil 346 00:14:33,300 --> 00:14:34,850 tener la noción de verdadero y falso. 347 00:14:34,850 --> 00:14:36,990 Y a pesar de que podría think-- hecho de la diversión. 348 00:14:36,990 --> 00:14:43,700 Un bool técnicamente necesita la cantidad de bits, verdaderamente, para representar Verdadera contra Falsa? 349 00:14:43,700 --> 00:14:47,910 ¿Cuántos bits crees lo que se necesita, como máximo? 350 00:14:47,910 --> 00:14:48,790 Sí, sólo uno. 351 00:14:48,790 --> 00:14:52,077 Así que resulta que C no le pueden dar sólo un poco. 352 00:14:52,077 --> 00:14:54,160 La unidad más pequeña de medida que puede obtener es de ocho. 353 00:14:54,160 --> 00:14:57,090 Así que es un poco derrochador que eres utilizando un byte completo, o ocho bits, 354 00:14:57,090 --> 00:14:58,340 para representar Verdadero o Falso. 355 00:14:58,340 --> 00:15:01,807 Pero eso es sólo la forma en que es implementado en C por la biblioteca CS50. 356 00:15:01,807 --> 00:15:04,890 MARIA: Y entonces los que estamos No vamos a hablar de la forma más amplia 357 00:15:04,890 --> 00:15:08,060 derecho ahora-- doble, eso es para carrozas más grandes. 358 00:15:08,060 --> 00:15:09,811 Larga largo y corto también son para los números enteros. 359 00:15:09,811 --> 00:15:10,643 DAVID MALAN: En efecto. 360 00:15:10,643 --> 00:15:13,190 En la edición pirata de pset uno, realmente usamos mucho, mucho. 361 00:15:13,190 --> 00:15:15,801 Sin embargo, para la edición estándar, no debería ser necesario. 362 00:15:15,801 --> 00:15:16,300 MARIA: Cool. 363 00:15:16,300 --> 00:15:17,361 OKAY. 364 00:15:17,361 --> 00:15:20,110 Así operators-- usted debería ser probablemente está familiarizado con la mayor parte de estos. 365 00:15:20,110 --> 00:15:22,620 Además, +; sustracción, -. 366 00:15:22,620 --> 00:15:24,070 Para la multiplicación, tenemos el *. 367 00:15:24,070 --> 00:15:25,900 Así que no es la X que solemos utilizar. 368 00:15:25,900 --> 00:15:27,840 División, tenemos la barra invertida. 369 00:15:27,840 --> 00:15:31,380 Y modulo es nuestro último operador que vamos a hablar en este momento. 370 00:15:31,380 --> 00:15:35,610 Es un operador que nos permite tomar el resto de una división. 371 00:15:35,610 --> 00:15:40,630 Así que si tenemos 4% 2, 4 dividido por 2 es 2 con un resto de 0. 372 00:15:40,630 --> 00:15:41,740 Así que 4% 2 es 0. 373 00:15:41,740 --> 00:15:42,950 4% 3 es 1. 374 00:15:42,950 --> 00:15:44,870 4% 5 es 4, lo que podría haber imaginado. 375 00:15:44,870 --> 00:15:48,860 Y recuerde al utilizar todos estos operadores utilizar las reglas PEMDAS. 376 00:15:48,860 --> 00:15:54,060 >> DAVID MALAN: Así que para ser claros, si hacer 4% 2, ¿por qué es que 0, exactamente? 377 00:15:54,060 --> 00:15:57,480 >> MARIA: Debido a 4 dividido por 2 es 2 con un resto de 0. 378 00:15:57,480 --> 00:16:00,752 Así módulo nos da esa resto como en comparación con el resultado de la división. 379 00:16:00,752 --> 00:16:02,960 DAVID MALAN: Y, en efecto, lo que encontraremos útil? 380 00:16:02,960 --> 00:16:05,640 para decir que en algunos problemas eso no es necesariamente uno, 381 00:16:05,640 --> 00:16:08,040 si usted quiere tener la efecto de restringir a ti mismo 382 00:16:08,040 --> 00:16:10,720 para un rango de números como 0 a través de algo, 383 00:16:10,720 --> 00:16:13,904 puede utilizar módulo para envolver antes que como el 2000000000 384 00:16:13,904 --> 00:16:16,320 o el valor de 4 mil millones que que hemos hablado en la conferencia. 385 00:16:16,320 --> 00:16:16,870 >> MARIA: Sí. 386 00:16:16,870 --> 00:16:19,429 E incluso en "codiciosos" que podría. 387 00:16:19,429 --> 00:16:21,345 DAVID MALAN: Sí, en problema configurado uno, también. 388 00:16:21,345 --> 00:16:22,520 MARIA: Sí, muy bien. 389 00:16:22,520 --> 00:16:24,340 DAVID MALAN: Buen toque. 390 00:16:24,340 --> 00:16:25,750 MARIA: Lo siento. 391 00:16:25,750 --> 00:16:28,590 Boolean expressions-- lo para los operadores booleanos, 392 00:16:28,590 --> 00:16:31,770 vamos a hablar de todo de estos que usted ve aquí. 393 00:16:31,770 --> 00:16:35,310 Así que ahora mismo, tenemos dos signos de igual enumeran para iguales. 394 00:16:35,310 --> 00:16:38,650 Así que estos son para la comparación. 395 00:16:38,650 --> 00:16:40,830 Hasta ahora, sólo hemos visto un solo signo igual. 396 00:16:40,830 --> 00:16:44,870 Fue entonces cuando le asignamos un valor a una variable. 397 00:16:44,870 --> 00:16:50,160 Así que si hemos visto int n = 5, a continuación, hemos asignado 5 a la variable n. 398 00:16:50,160 --> 00:16:55,600 Pero si queremos usar == para comparación, se puede comprobar si n == 5. 399 00:16:55,600 --> 00:16:58,310 Y si n == 5, entonces eso es cierto. 400 00:16:58,310 --> 00:17:01,950 >> Así que los operadores booleanos nos permite, básicamente, 401 00:17:01,950 --> 00:17:04,670 para evaluar Boolean expresiones de verdadero o falso. 402 00:17:04,670 --> 00:17:07,819 Así que no equals-- tenemos la signo de exclamación y los iguales. 403 00:17:07,819 --> 00:17:14,240 Así también podríamos comprobar si n no es igual a lo 5-- n! = 5. 404 00:17:14,240 --> 00:17:17,640 Menor que, menor que o igual a, mayor que, mayor que o igual a, 405 00:17:17,640 --> 00:17:20,720 y luego tenemos la lógica Y ya la lógica OR. 406 00:17:20,720 --> 00:17:24,060 Y los que nos permiten evaluar múltiples expresiones booleanas juntos 407 00:17:24,060 --> 00:17:27,930 venir básicamente juntos como una sola expresión booleana conjunto. 408 00:17:27,930 --> 00:17:34,970 Así que si queremos encontrar un número, por ejemplo, que es mayor que 5 pero menos de 15 409 00:17:34,970 --> 00:17:39,810 al mismo tiempo, nos gustaría utilizar el operador lógico AND para ver si n es 410 00:17:39,810 --> 00:17:42,937 mayor que 5 && n menos de 15. 411 00:17:42,937 --> 00:17:44,770 DAVID MALAN: Y aquí, también, es muy fácil 412 00:17:44,770 --> 00:17:47,290 desde el principio para accidentalmente utilizar un solo signo 413 00:17:47,290 --> 00:17:48,572 o una sola barra vertical. 414 00:17:48,572 --> 00:17:51,280 Y espero que el compilador gritarte porque en realidad 415 00:17:51,280 --> 00:17:52,530 tener un significado muy diferente. 416 00:17:52,530 --> 00:17:55,660 Para los curiosos, son utilizado para operaciones bit a bit, 417 00:17:55,660 --> 00:17:57,197 operando en bits individuales. 418 00:17:57,197 --> 00:17:58,780 Pero sí quiero el par de ellos aquí. 419 00:17:58,780 --> 00:18:01,560 Y muy importante es que primero, el signo igual, 420 00:18:01,560 --> 00:18:05,270 que es el operador de igualdad como en comparación con el operador de asignación. 421 00:18:05,270 --> 00:18:08,552 >> MARIA: Y la barra vertical es situado entre el Eliminar y Retorno. 422 00:18:08,552 --> 00:18:09,260 DAVID MALAN: Sí. 423 00:18:09,260 --> 00:18:11,420 En un teclado típico de Estados Unidos. 424 00:18:11,420 --> 00:18:13,190 >> MARIA: Sí. 425 00:18:13,190 --> 00:18:15,890 Así que vamos a entrar de lleno en sentencias condicionales. 426 00:18:15,890 --> 00:18:18,300 En Scratch, usted tiene ya se ha visto, probablemente, 427 00:18:18,300 --> 00:18:22,730 si las declaraciones que le permiten comprobar si algo es cierto, entonces 428 00:18:22,730 --> 00:18:23,660 hacer algo más. 429 00:18:23,660 --> 00:18:28,410 Así que usted puede ser que haya querido para comprobar si tu sprite es 430 00:18:28,410 --> 00:18:31,410 tocando alguna otra sprites o el borde de la pantalla. 431 00:18:31,410 --> 00:18:35,520 Y entonces usted puede ser que haya querido terminar el juego o hacer otra cosa. 432 00:18:35,520 --> 00:18:40,000 Así que la sintaxis para que es "si (condición)." 433 00:18:40,000 --> 00:18:46,820 Así que si tu sprite está tocando algo, entonces no está dentro de las llaves. 434 00:18:46,820 --> 00:18:48,980 >> Entonces tenemos if-else. 435 00:18:48,980 --> 00:18:54,080 Else nos permite hacer algo Si la condición de que 436 00:18:54,080 --> 00:18:55,870 comprobar si en un principio no es cierto. 437 00:18:55,870 --> 00:19:01,530 Así que si el sprite toca el fronteriza hacer esto, más haga algo más. 438 00:19:01,530 --> 00:19:04,030 Así que de lo contrario hacer algo más. 439 00:19:04,030 --> 00:19:07,530 Entonces tenemos un pequeño ejemplo para esto. 440 00:19:07,530 --> 00:19:11,551 Así que si (military_time <12), que querer printf "¡Buenos días!" 441 00:19:11,551 --> 00:19:13,300 Else vamos a printf "Buenas noches!" 442 00:19:13,300 --> 00:19:14,860 Ejemplo básico. 443 00:19:14,860 --> 00:19:15,680 >> DAVID MALAN: Good. 444 00:19:15,680 --> 00:19:16,760 >> MARIA: Cool. 445 00:19:16,760 --> 00:19:18,560 Así que ahora tenemos sentencias switch. 446 00:19:18,560 --> 00:19:21,960 Cambie declaraciones en general puede nos permiten hacer un montón de lo mismo 447 00:19:21,960 --> 00:19:25,070 que acabamos de hablar acerca de si las declaraciones. 448 00:19:25,070 --> 00:19:29,440 Por ejemplo, ahora mismo tenemos la forma general de la sentencia switch 449 00:19:29,440 --> 00:19:33,870 que permite que tomemos una variable llamada n 450 00:19:33,870 --> 00:19:37,670 y compararlo con una gran cantidad de diferentes valores, que aquí estamos 451 00:19:37,670 --> 00:19:40,010 han llamado Constant1, constant2. 452 00:19:40,010 --> 00:19:41,150 Es posible que tengamos mucho más. 453 00:19:41,150 --> 00:19:42,930 Y los que son llamados casos. 454 00:19:42,930 --> 00:19:46,280 >> Así que si tenemos un interruptor statement-- y esta obra 455 00:19:46,280 --> 00:19:50,580 sólo para integers-- tenemos una variable en este caso que es n. 456 00:19:50,580 --> 00:19:53,840 Si la variable n es igual a Constant1, nos 457 00:19:53,840 --> 00:19:59,720 ejecutará algún fragmento de código o algo que queremos hacer. 458 00:19:59,720 --> 00:20:01,280 Y entonces podríamos romper. 459 00:20:01,280 --> 00:20:04,820 Así que la ruptura significa que la sentencia switch 460 00:20:04,820 --> 00:20:08,120 se detendrá la ejecución si n es igual a Constant1, 461 00:20:08,120 --> 00:20:09,752 y luego el programa continuará. 462 00:20:09,752 --> 00:20:11,835 Se saldrá fuera de la cambiar declaración y que va a 463 00:20:11,835 --> 00:20:13,520 seguir haciendo otra cosa. 464 00:20:13,520 --> 00:20:17,204 >> Sin embargo, si n no es igual Constant1, entonces el caso de constant2 465 00:20:17,204 --> 00:20:17,870 se comprobará. 466 00:20:17,870 --> 00:20:21,750 Así que si n es igual constant2, ese otro se ejecutará fragmento de código. 467 00:20:21,750 --> 00:20:23,850 Y luego se va a romper si eso es igual a ella. 468 00:20:23,850 --> 00:20:27,580 Y luego podemos tener También-- no necesariamente, aunque-- un caso por defecto, 469 00:20:27,580 --> 00:20:32,290 que sucederá si n no es igual a cualquiera de los casos que usted ha enumerado. 470 00:20:32,290 --> 00:20:35,400 Y en el caso por defecto, también no necesitan un descanso necesariamente 471 00:20:35,400 --> 00:20:39,271 porque la sentencia switch conocerá que necesita para terminar después del default 472 00:20:39,271 --> 00:20:40,270 caso si ese es el caso. 473 00:20:40,270 --> 00:20:42,140 >> DAVID MALAN: Pero estilísticamente, siempre nos ponemos en allí. 474 00:20:42,140 --> 00:20:42,540 >> MARIA: Sí. 475 00:20:42,540 --> 00:20:42,710 >> DAVID MALAN: Sí. 476 00:20:42,710 --> 00:20:44,750 Así que sobre todo cuando empiezan, especialmente si entre los menos 477 00:20:44,750 --> 00:20:47,458 cómoda, lo haría personalmente simplemente recomiendan seguir con las FI 478 00:20:47,458 --> 00:20:51,564 e IFS-vigilara y si-else-if vigilara y así sucesivamente si solamente 479 00:20:51,564 --> 00:20:53,480 porque son un poco más sencillo. 480 00:20:53,480 --> 00:20:56,142 Esta es una buena optimización, o a veces incluso estéticamente 481 00:20:56,142 --> 00:20:57,350 hace que el código sea más legible. 482 00:20:57,350 --> 00:20:59,599 Y de hecho, probablemente mitad del semestre vamos a ver un problema 483 00:20:59,599 --> 00:21:02,504 set donde sólo se ve mejor y más fácil de leer para los humanos 484 00:21:02,504 --> 00:21:03,670 mediante el uso de una sentencia switch. 485 00:21:03,670 --> 00:21:05,460 Pero no te preocupes aferrándose a esta demasiado pronto. 486 00:21:05,460 --> 00:21:05,680 >> MARIA: Sí. 487 00:21:05,680 --> 00:21:08,840 Si usted tiene un montón de sentencias if, simplemente no podría ser muy legible. 488 00:21:08,840 --> 00:21:10,965 Puede que no sea muy rápido para que usted vaya a través de él. 489 00:21:10,965 --> 00:21:13,230 Así que cambiar declaraciones pueden ser muy útil, también. 490 00:21:13,230 --> 00:21:17,900 Y también, no remember-- no hacer se olvide de poner las pausas en ese país. 491 00:21:17,900 --> 00:21:20,330 >> DAVID MALAN: No recuerda esto. 492 00:21:20,330 --> 00:21:24,890 >> MARIA: Porque entonces usted podría caer a través de un caso a otro. 493 00:21:24,890 --> 00:21:27,930 Así que digamos que el caso Constant1 no tienen una sentencia break en el mismo. 494 00:21:27,930 --> 00:21:31,920 Entonces podríamos caer a través de constant2 caso dentro. 495 00:21:31,920 --> 00:21:35,070 Y nosotros no queremos hacer eso si que ya hemos alcanzado caso Constant1 496 00:21:35,070 --> 00:21:37,830 y es igual a n. 497 00:21:37,830 --> 00:21:45,100 >> Así, por ejemplo, si tenemos una variable n que contiene un número de clase, 498 00:21:45,100 --> 00:21:48,990 y queremos ver lo que clase es-- si n es igual a 50, 499 00:21:48,990 --> 00:21:51,957 vamos a imprimir "CS50 es Introducción a las Ciencias de la Computación I. " 500 00:21:51,957 --> 00:21:53,040 Entonces vamos a romper. 501 00:21:53,040 --> 00:21:53,920 Y eso es. 502 00:21:53,920 --> 00:21:55,950 Si, sin embargo, n es igual a 51, vamos 503 00:21:55,950 --> 00:21:58,494 imprimir "CS51 es Introducción de Ciencias de la Computación II ". 504 00:21:58,494 --> 00:21:59,910 Entonces, de nuevo, vamos a romper. 505 00:21:59,910 --> 00:22:05,080 Sin embargo, si a continuación, ponemos 124, 61, cualquier otro número que usted podría pensar, 506 00:22:05,080 --> 00:22:06,890 o programa no va reconocer que. 507 00:22:06,890 --> 00:22:09,010 Así que va a decir: "Lo siento, estoy no está familiarizado con esa clase ". 508 00:22:09,010 --> 00:22:10,009 Y se va a romper. 509 00:22:10,009 --> 00:22:12,847 DAVID MALAN: Así que realmente puede ver el if, else if, else idea aquí. 510 00:22:12,847 --> 00:22:15,430 Es simplemente diferente sintaxis para expresando la misma idea exacta. 511 00:22:15,430 --> 00:22:17,690 >> MARIA: Exactamente. 512 00:22:17,690 --> 00:22:19,480 Ahora tenemos nuestros operadores ternarios. 513 00:22:19,480 --> 00:22:24,900 Así que los operadores ternarios tienen de tres parts-- una condición, 514 00:22:24,900 --> 00:22:27,220 algo que hacer si que la condición es verdadera, 515 00:22:27,220 --> 00:22:29,730 y luego algo que hacer si esa condición es falsa. 516 00:22:29,730 --> 00:22:33,400 Como puede ver, básicamente, la sintaxis de eso aquí. 517 00:22:33,400 --> 00:22:37,792 Tenemos el signo de interrogación, y entonces el-- ¿qué es lo que llamamos esto? 518 00:22:37,792 --> 00:22:38,750 DAVID MALAN: El colon. 519 00:22:38,750 --> 00:22:39,100 MARIA: Colón. 520 00:22:39,100 --> 00:22:39,599 Gracias. 521 00:22:39,599 --> 00:22:41,880 Lo lamento. 522 00:22:41,880 --> 00:22:45,800 Así que echemos un vistazo a nuestro ejemplo de ver si podemos dar sentido a esto-- 523 00:22:45,800 --> 00:22:47,840 class_num == 50. 524 00:22:47,840 --> 00:22:52,580 Así que aquí vemos nuestro operador booleano == que compara la class_num variables 525 00:22:52,580 --> 00:22:53,100 a 50. 526 00:22:53,100 --> 00:22:55,150 Tiendas Así class_num un entero. 527 00:22:55,150 --> 00:22:58,180 Y si ese entero es igual a 50, entonces estamos 528 00:22:58,180 --> 00:23:02,810 va a almacenar "David Malan" en el interior del profesor cadena. 529 00:23:02,810 --> 00:23:05,912 Si el número de clases no igual a 50, "No está David Malan" 530 00:23:05,912 --> 00:23:07,120 va a ser el profesor. 531 00:23:07,120 --> 00:23:08,630 >> DAVID MALAN: Gracias. 532 00:23:08,630 --> 00:23:12,110 Y así parece equivalente a qué, usted diría, a primera vista? 533 00:23:12,110 --> 00:23:17,930 534 00:23:17,930 --> 00:23:19,960 >> MARIA: A mí me parece como if-else declaraciones. 535 00:23:19,960 --> 00:23:20,709 >> DAVID MALAN: Sí. 536 00:23:20,709 --> 00:23:24,020 Y de hecho, esto es una especie de un bonito un trazador de líneas, 537 00:23:24,020 --> 00:23:27,520 por así decirlo, para la aplicación de exactamente la lógica de if-else 538 00:23:27,520 --> 00:23:29,010 pero hacerlo todo en un solo paso. 539 00:23:29,010 --> 00:23:29,860 >> MARIA: Exactamente. 540 00:23:29,860 --> 00:23:30,360 Sí. 541 00:23:30,360 --> 00:23:33,520 Declaraciones Así que si-más podría ocupan mucho espacio. 542 00:23:33,520 --> 00:23:36,283 Puede ser que sean demasiado largos para algo tan simple como esto. 543 00:23:36,283 --> 00:23:38,350 Así esto puede ser muy sucinta y muy agradable. 544 00:23:38,350 --> 00:23:40,880 545 00:23:40,880 --> 00:23:46,820 Así que ahora vamos a mirar la ejecución de algo una y otra vez, 546 00:23:46,820 --> 00:23:50,060 lo que la comprobación para una condicionar varias veces 547 00:23:50,060 --> 00:23:53,510 y luego continuar a hacer algo mientras que la condición es verdadera. 548 00:23:53,510 --> 00:23:56,740 Así que esto nos lleva muy bien en ciclos while. 549 00:23:56,740 --> 00:23:59,270 >> A la izquierda, tenemos nuestro primer bucle while. 550 00:23:59,270 --> 00:24:03,840 Así, mientras que algo es verdad, hacer algo una y otra vez. 551 00:24:03,840 --> 00:24:08,850 Así que asegúrese de darse cuenta de que nuestra condición que aquí se valida en la parte superior. 552 00:24:08,850 --> 00:24:14,150 Mientras que con nuestra segunda loop-- llamamos que un do-while loop-- hacemos algo, 553 00:24:14,150 --> 00:24:15,890 a continuación, comprobamos por una condición. 554 00:24:15,890 --> 00:24:17,980 Y si esa condición sigue siendo cierto, 555 00:24:17,980 --> 00:24:20,150 volvemos y hacemos la cosa de nuevo. 556 00:24:20,150 --> 00:24:23,360 Así que la principal diferencia es donde la condición se comprueba. 557 00:24:23,360 --> 00:24:29,260 Y el código no puede ser nunca ejecutada si la condición no es 558 00:24:29,260 --> 00:24:30,430 cierto con el bucle while. 559 00:24:30,430 --> 00:24:33,050 Mientras que con el do-while lazo, tenemos el código 560 00:24:33,050 --> 00:24:35,380 que siempre se ejecuta al menos una vez. 561 00:24:35,380 --> 00:24:37,470 Y a continuación, mientras que la condición sigue siendo cierto, 562 00:24:37,470 --> 00:24:39,960 podemos volver atrás y repetir de nuevo en el interior. 563 00:24:39,960 --> 00:24:43,625 Entonces, ¿por qué crees que usaríamos un do-while en un bucle while? 564 00:24:43,625 --> 00:24:48,221 565 00:24:48,221 --> 00:24:48,720 Correcto. 566 00:24:48,720 --> 00:24:52,600 Así que si queremos pedir al usuario de algún tipo de entrada, 567 00:24:52,600 --> 00:24:55,400 si queremos pedirles de entrar en su nombre, 568 00:24:55,400 --> 00:24:57,342 queremos al menos pedirles una vez. 569 00:24:57,342 --> 00:24:59,050 Y si entran ese nombre, no estamos 570 00:24:59,050 --> 00:25:00,740 va a pedir de nuevo porque ya la conocemos. 571 00:25:00,740 --> 00:25:02,656 Pero si no entran su nombre, o si 572 00:25:02,656 --> 00:25:05,787 entrar en algo que es obviamente no es un nombre, 573 00:25:05,787 --> 00:25:08,120 todavía queremos continuar preguntándoles por su nombre. 574 00:25:08,120 --> 00:25:10,710 >> DAVID MALAN: Y en la conferencia que tuvo uno así con el conseguir int positivo 575 00:25:10,710 --> 00:25:13,550 ejemplo, donde no hay nada que comprobar en primer lugar porque no tiene aun 576 00:25:13,550 --> 00:25:14,190 conseguido un int. 577 00:25:14,190 --> 00:25:16,680 Así que queremos hacer esto-- conseguir un int del user-- 578 00:25:16,680 --> 00:25:18,860 a continuación, comprobar que, tal vez, una y otra y otra vez. 579 00:25:18,860 --> 00:25:21,030 >> MARIA: Exactamente. 580 00:25:21,030 --> 00:25:22,060 Para loops-- Aceptar. 581 00:25:22,060 --> 00:25:25,842 Para bucles pueden permitir que hagamos casi exactamente lo mismo, también. 582 00:25:25,842 --> 00:25:27,300 De hecho, es exactamente lo mismo. 583 00:25:27,300 --> 00:25:30,190 Así que no hay nada que que puede hacer con los bucles 584 00:25:30,190 --> 00:25:32,840 que no sería capaz de que ver con ciclos while. 585 00:25:32,840 --> 00:25:36,900 Pero para los bucles puede parecer un poco poco más complicado sintácticamente 586 00:25:36,900 --> 00:25:39,730 porque tienen tres partes dentro de lo que 587 00:25:39,730 --> 00:25:42,990 fue antes sólo el condiciones, con bucles de tiempo. 588 00:25:42,990 --> 00:25:48,260 Así que la primera parte que el mar, la más a la izquierda, tenemos "int enanos = 0." 589 00:25:48,260 --> 00:25:51,490 Así que aquí es donde nos inicializar nuestra variable. 590 00:25:51,490 --> 00:25:55,210 >> Entonces tenemos un punto y coma y "enanos <7." 591 00:25:55,210 --> 00:25:57,100 Así que aquí es donde fuera condición que realmente es. 592 00:25:57,100 --> 00:26:00,170 Así que eso es lo que tendríamos poner sólo en el tiempo loop-- 593 00:26:00,170 --> 00:26:01,880 "mientras que los enanos <7." 594 00:26:01,880 --> 00:26:05,380 Aquí, que va en el medio de nuestro bucle for. 595 00:26:05,380 --> 00:26:07,190 Así que "dwaves <7." 596 00:26:07,190 --> 00:26:11,350 Y luego la última parte es "enanos ++" que es donde nos actualizamos nuestra variable. 597 00:26:11,350 --> 00:26:15,470 Así que lo importante es darse cuenta de que este 598 00:26:15,470 --> 00:26:22,010 va a ir a través de este bucle siete veces y ejecutar siete veces. 599 00:26:22,010 --> 00:26:24,020 Así que tenemos de siete enanos, y son todos 600 00:26:24,020 --> 00:26:26,020 va a decir: "Yo estoy aquí para ayudarle, Blanca Nieves " 601 00:26:26,020 --> 00:26:28,860 porque están listos para ayudar a Blancanieves. 602 00:26:28,860 --> 00:26:33,600 >> Con bucles while, que habrían hecho la inicialización y la actualización 603 00:26:33,600 --> 00:26:37,490 no dentro de la condición, de nuevo, pero ya sea antes o dentro del bucle while 604 00:26:37,490 --> 00:26:40,210 para asegurarse de que nosotros-- porque siempre necesitamos esas partes. 605 00:26:40,210 --> 00:26:42,835 Así que para asegurarse de que tenemos ellos, nos lo hemos todavía les añadido 606 00:26:42,835 --> 00:26:44,580 en adelante, no dentro de los paréntesis. 607 00:26:44,580 --> 00:26:47,288 >> DAVID MALAN: Y por lo que parece como-- en la conferencia, por ejemplo, 608 00:26:47,288 --> 00:26:50,250 Yo casi siempre uso, como, iy n y las variables bastante aburridas. 609 00:26:50,250 --> 00:26:53,050 Parece que se puede utilizar más ingeniosamente llamado las variables, también. 610 00:26:53,050 --> 00:26:56,300 >> MARIA: Sí, en realidad es muy agradable utilizar variables un poco más descriptivos 611 00:26:56,300 --> 00:26:59,400 debido sobre todo si alguien más es la lectura de su code-- tal vez usted es alumno 612 00:26:59,400 --> 00:27:00,940 o si usted está colaborando con alguien-- 613 00:27:00,940 --> 00:27:03,481 usted quiere asegurarse de que Entiendes lo que estás haciendo. 614 00:27:03,481 --> 00:27:05,750 615 00:27:05,750 --> 00:27:06,400 >> OKAY. 616 00:27:06,400 --> 00:27:11,435 Así que esto es algo muy funky-- bucle for dentro de un bucle for. 617 00:27:11,435 --> 00:27:13,060 No sé si nos hemos visto esto antes. 618 00:27:13,060 --> 00:27:13,830 Probablemente no. 619 00:27:13,830 --> 00:27:17,750 Pero en realidad podemos tener esto-- así bucles en lugar de bucles. 620 00:27:17,750 --> 00:27:25,130 Así que, ¿alguien quiere caminar tal vez mí a través de lo que está pasando aquí? 621 00:27:25,130 --> 00:27:28,240 622 00:27:28,240 --> 00:27:29,490 DAVID MALAN: voy a tomar una puñalada. 623 00:27:29,490 --> 00:27:29,970 MARIA: Cool. 624 00:27:29,970 --> 00:27:30,636 DAVID MALAN: OK. 625 00:27:30,636 --> 00:27:34,690 Así, spoiler-- queremos imprimir el material que está en la esquina inferior derecha 626 00:27:34,690 --> 00:27:35,190 allí. 627 00:27:35,190 --> 00:27:35,450 >> MARIA: Correcto. 628 00:27:35,450 --> 00:27:35,710 Sí, sí. 629 00:27:35,710 --> 00:27:38,043 >> DAVID MALAN: Así que acabamos de puesto que la producción de la muestra allí. 630 00:27:38,043 --> 00:27:42,590 Así que puedo deducir de la bucle superior que eres 631 00:27:42,590 --> 00:27:45,680 iterar sobre las filas bucle más externo, por así decirlo. 632 00:27:45,680 --> 00:27:48,107 Y estás iterar sobre columnas con el bucle más interior. 633 00:27:48,107 --> 00:27:50,190 Y de manera intuitiva, esta debe de esperar tiene sentido 634 00:27:50,190 --> 00:27:52,070 porque por naturaleza de todos los programas que hemos visto 635 00:27:52,070 --> 00:27:55,570 antes, printf, que es el función que estamos usando, en última instancia, 636 00:27:55,570 --> 00:27:58,190 tiene la capacidad de imprimir cosas esencialmente línea por línea. 637 00:27:58,190 --> 00:27:59,960 Al igual que, una vez que haya emitidos una nueva línea, hay 638 00:27:59,960 --> 00:28:02,876 sin doblar la espalda y la impresión de algo mayor en la pantalla, por lo menos 639 00:28:02,876 --> 00:28:04,530 no usar printf como este. 640 00:28:04,530 --> 00:28:07,750 >> Y así, en ese sentido, se hace sentido de que el bucle más externo 641 00:28:07,750 --> 00:28:10,930 debe referirse a las filas porque para cada fila dada, 642 00:28:10,930 --> 00:28:13,650 usted va a querer imprimir XXXXX, y luego 643 00:28:13,650 --> 00:28:15,520 pasar a la siguiente fila, XXXXX. 644 00:28:15,520 --> 00:28:17,317 Así filas son lo primero. 645 00:28:17,317 --> 00:28:19,150 Y luego dentro de cada fila, imprimir columnas. 646 00:28:19,150 --> 00:28:21,160 Si se trató de hacerlo de la contrario, es probable que no lo haría 647 00:28:21,160 --> 00:28:21,690 salir como piensa. 648 00:28:21,690 --> 00:28:22,190 >> MARIA: Sí. 649 00:28:22,190 --> 00:28:24,950 No podíamos volver a la fila anterior con printf. 650 00:28:24,950 --> 00:28:27,658 >> DAVID MALAN: ¿Y qué es interesante por charla de hoy sobre el alcance, 651 00:28:27,658 --> 00:28:31,600 en realidad, es que la fila es un int eso es declarado en el bucle superior. 652 00:28:31,600 --> 00:28:34,030 Pero nótese que aún es dentro de, por así decirlo, 653 00:28:34,030 --> 00:28:35,982 las llaves que inmediatamente seguir, 654 00:28:35,982 --> 00:28:38,440 a pesar de que no es técnicamente dentro de esas llaves. 655 00:28:38,440 --> 00:28:41,750 Así fila está en el ámbito de la totalidad del fragmento de código, 656 00:28:41,750 --> 00:28:44,690 tanto dentro del ciclo for exterior y en el interior del interior de bucle. 657 00:28:44,690 --> 00:28:48,050 Pero por el contrario, donde es la columna en su alcance? 658 00:28:48,050 --> 00:28:49,810 La columna variable? 659 00:28:49,810 --> 00:28:51,310 Sí, sólo en el bucle interior. 660 00:28:51,310 --> 00:28:54,280 Y eso está bien, porque no accedemos fuera de sus llaves. 661 00:28:54,280 --> 00:28:57,280 Todo lo que hacemos es imprimir un nuevo línea al final allí. 662 00:28:57,280 --> 00:28:58,670 Así que, de hecho, está bien. 663 00:28:58,670 --> 00:29:03,740 >> Así que esto tiene el efecto, parece que, de hacer las tres filas y cuatro columnas. 664 00:29:03,740 --> 00:29:04,370 >> MARIA: Correcto. 665 00:29:04,370 --> 00:29:06,270 Así que primero vamos a través de nuestra primera fila. 666 00:29:06,270 --> 00:29:10,520 Y justo en nuestra primera fila, nosotros hacemos el cuatro columnas dentro de la primera fila. 667 00:29:10,520 --> 00:29:11,980 Así que imprimimos a cabo cuatro de X. 668 00:29:11,980 --> 00:29:15,800 Y luego podemos salir del bucle for, ya ya hemos imprimimos cuatro de X. 669 00:29:15,800 --> 00:29:17,100 Y imprimimos una nueva línea. 670 00:29:17,100 --> 00:29:19,920 Y luego vamos a través de la mismo proceso para dos filas más 671 00:29:19,920 --> 00:29:21,170 para hacer un total de tres. 672 00:29:21,170 --> 00:29:23,530 >> DAVID MALAN: Y vale la pena señalar que es simplemente un artefacto de la fuente, el hecho 673 00:29:23,530 --> 00:29:25,680 que la salida de la muestra parece mucho más alto, 674 00:29:25,680 --> 00:29:27,520 como si aún hay más filas que columnas. 675 00:29:27,520 --> 00:29:29,824 Pero es sólo porque el X es más alto que ancho. 676 00:29:29,824 --> 00:29:32,740 Eso es todo lo que está pasando allí, más el espacio en blanco entre líneas. 677 00:29:32,740 --> 00:29:33,281 >> MARIA: Correcto. 678 00:29:33,281 --> 00:29:34,792 Guay. 679 00:29:34,792 --> 00:29:35,750 DAVID MALAN: De acuerdo. 680 00:29:35,750 --> 00:29:39,830 Así que una mirada rápida a un problema establece una, tomar alguna pregunta, y luego levantar la sesión? 681 00:29:39,830 --> 00:29:40,330 Correcto. 682 00:29:40,330 --> 00:29:43,164 Así que en el problema fijó uno, hay de tres principales desafíos, en última instancia. 683 00:29:43,164 --> 00:29:44,955 Pero primero, usted encontrará que el problema establecido 684 00:29:44,955 --> 00:29:47,900 especificación, al igual que con muchos el conjuntos de procesadores de este otoño, va a caminar a 685 00:29:47,900 --> 00:29:50,691 a través de algunos ejercicios de calentamiento, que señalar algunos recursos 686 00:29:50,691 --> 00:29:52,440 que puede o no han visto ya. 687 00:29:52,440 --> 00:29:54,440 Por ejemplo, CS50 tiene un conjunto de pantalones cortos, 688 00:29:54,440 --> 00:29:56,481 que son videos cortos, no a diferencia de esto, pero que 689 00:29:56,481 --> 00:29:58,460 son specific-- mismo tema tal vez cinco minutos, 690 00:29:58,460 --> 00:30:02,360 10 minutos de duración sobre los bucles o en condiciones o en algoritmos 691 00:30:02,360 --> 00:30:04,125 o posterior en más temas avanzados, también. 692 00:30:04,125 --> 00:30:06,000 Y por lo general, integramos aquellos en el problema 693 00:30:06,000 --> 00:30:07,950 juegos para que los estudiantes tener un recurso con el cual 694 00:30:07,950 --> 00:30:10,840 para revisar el material que podría tener ya surgido en conferencia o sección. 695 00:30:10,840 --> 00:30:13,220 Pero de esta manera es más centrado y mucho más a su alcance. 696 00:30:13,220 --> 00:30:15,928 >> También tendemos a incrustar en el problema establece cosas llamadas tutoriales. 697 00:30:15,928 --> 00:30:20,790 Así que casi todos los ejemplos que hago en la conferencia, en el escenario aquí, también 698 00:30:20,790 --> 00:30:24,565 se han disparado en la cámara en avanzar en una más lenta, 699 00:30:24,565 --> 00:30:28,760 un recorrido íntimo por mí en mi portátil de ese código, línea por línea 700 00:30:28,760 --> 00:30:31,427 de manera que en la clase, a menudo voy leerlo a través de algo o alguien 701 00:30:31,427 --> 00:30:33,260 se intercalar con una responder a una pregunta. 702 00:30:33,260 --> 00:30:35,820 Pero no se hunde necesariamente por todos en la audiencia. 703 00:30:35,820 --> 00:30:38,230 Así encontrarás código tutoriales para la mayoría de los ejemplos 704 00:30:38,230 --> 00:30:40,950 lo que hacemos aquí en la conferencia para que puede caminar a través de él a su propio ritmo 705 00:30:40,950 --> 00:30:43,580 y rebobinado o avance rápido o omitir por completo, si lo desea. 706 00:30:43,580 --> 00:30:45,356 >> Hay a menudo algunos preguntas de calentamiento que 707 00:30:45,356 --> 00:30:47,105 pedirle que ordenar de reforzar este material 708 00:30:47,105 --> 00:30:50,250 y asegúrese de que usted es cómodo antes de continuar con el resto del conjunto de procesadores. 709 00:30:50,250 --> 00:30:51,700 Y luego, por supuesto, está el propio conjunto de procesadores. 710 00:30:51,700 --> 00:30:53,450 Y una de las cosas que deliberadamente 711 00:30:53,450 --> 00:30:57,202 hacerlo en CS50 es casi todos sin interés o intelectualmente interesante 712 00:30:57,202 --> 00:30:58,910 paso mecánico que es posible que tenga que hacer 713 00:30:58,910 --> 00:31:00,519 está casi siempre muy bien documentado. 714 00:31:00,519 --> 00:31:03,560 En el transcurso del plazo, vamos a empezar a hacer preguntas más retóricos 715 00:31:03,560 --> 00:31:06,187 como recordar cómo hacer esto o aquello? 716 00:31:06,187 --> 00:31:08,520 Pero, en general, usted encontrará que los conjuntos de problemas le consiguen 717 00:31:08,520 --> 00:31:10,269 a través de la mecánica de modo que algo 718 00:31:10,269 --> 00:31:14,160 los interesantes, retos intelectuales son en última instancia, de izquierda a que el estudiante. 719 00:31:14,160 --> 00:31:17,390 >> Con eso dicho, Zamyla, a los que mantienen refiriéndose hoy en conferencia, 720 00:31:17,390 --> 00:31:20,190 es uno de nuestro personal de toda la vida miembro de que también tiene tutoriales 721 00:31:20,190 --> 00:31:24,520 en problemas específicos PSet como mario y codicioso, aunque no regar este año. 722 00:31:24,520 --> 00:31:26,540 Y es en los Tutoriales que a menudo 723 00:31:26,540 --> 00:31:29,450 ofrece algunos consejos y trucos para la forma de proceder, no diciendo que 724 00:31:29,450 --> 00:31:31,810 exactamente qué hacer, pero rather-- como una condición, 725 00:31:31,810 --> 00:31:35,200 si Voluntad-- que le da al menos un par de ideas para que le toca a usted, 726 00:31:35,200 --> 00:31:37,830 en última instancia, para decidir cómo acercarse a ellos. 727 00:31:37,830 --> 00:31:41,200 >> MARIA: como especie de alto nivel comprensión de la lógica de lo 728 00:31:41,200 --> 00:31:42,220 le pedimos que hacer. 729 00:31:42,220 --> 00:31:42,485 >> DAVID MALAN: Exactamente. 730 00:31:42,485 --> 00:31:44,190 Y, de hecho, de Zamyla tutoriales están destinados 731 00:31:44,190 --> 00:31:46,190 para responder a la frecuencia pregunta de dónde 732 00:31:46,190 --> 00:31:48,610 hago empecé, especialmente cuando estos largos especificaciones están 733 00:31:48,610 --> 00:31:51,960 un poco desalentador dado todo el texto y las imágenes que tienen en ellos. 734 00:31:51,960 --> 00:31:54,890 >> Así water.c, encontrará después de que usted la ha completado, 735 00:31:54,890 --> 00:31:56,920 en realidad es relativamente sencillo. 736 00:31:56,920 --> 00:31:58,882 Absolutamente son un manojo de ustedes va a golpear 737 00:31:58,882 --> 00:32:01,840 sus cabezas contra la pared tratando averiguar por qué no es la compilación 738 00:32:01,840 --> 00:32:03,450 o por qué no está funcionando correctamente. 739 00:32:03,450 --> 00:32:05,040 Pero una vez que haya terminado con ella y una vez que haya 740 00:32:05,040 --> 00:32:07,620 pasado algún tiempo luchando con cualquier de los errores que pueda tener, 741 00:32:07,620 --> 00:32:09,490 usted encontrará que es un programa muy corto. 742 00:32:09,490 --> 00:32:11,770 Se puede hacer en tan sólo unos pocos líneas de código, la mayoría de los cuales 743 00:32:11,770 --> 00:32:15,030 que hemos visto aquí en la conferencia ya, si que se monten los bloques de construcción adecuadas. 744 00:32:15,030 --> 00:32:16,810 >> Y como le sugerimos aquí, va a pedir 745 00:32:16,810 --> 00:32:22,250 especificar cuántos minutos alguien está tomando una ducha en el campus. 746 00:32:22,250 --> 00:32:24,779 Especificamos en el problema ajustar la tasa de flujo de agua 747 00:32:24,779 --> 00:32:27,320 en, como, una ducha de bajo flujo cabeza, al igual que el clip de Seinfeld 748 00:32:27,320 --> 00:32:29,180 vimos ayer o la misma opuesto. 749 00:32:29,180 --> 00:32:30,971 Y luego sólo tienes para hacer un poco de matemáticas, 750 00:32:30,971 --> 00:32:34,710 realmente-- aritmética utilizando C para contar nosotros cómo muchos, aproximadamente, botellas de agua 751 00:32:34,710 --> 00:32:37,720 es que equivale a si somos tomando una ducha n minutos. 752 00:32:37,720 --> 00:32:41,389 >> Ahora, en mario.c, esto va para ser un programa ligeramente más largo. 753 00:32:41,389 --> 00:32:42,930 Todavía no va a estar tanto tiempo. 754 00:32:42,930 --> 00:32:45,130 A sólo unas pocas líneas más largas que water.c. 755 00:32:45,130 --> 00:32:48,230 Pero va a ser la oportunidad para recrear la antigua escuela Mario 756 00:32:48,230 --> 00:32:50,670 pirámide de Super Mario Hermanos o algún seguimiento. 757 00:32:50,670 --> 00:32:53,510 No va a parecer más bonita o tan colorido como que uno allí. 758 00:32:53,510 --> 00:32:56,468 Sólo vamos a utilizar pequeños hashtags como el que tenemos aquí en la pantalla 759 00:32:56,468 --> 00:32:58,120 el uso de texto ASCII. 760 00:32:58,120 --> 00:33:00,362 Pero va a aproximar la misma idea. 761 00:33:00,362 --> 00:33:02,570 Y va a ser un ejercicio que a primera vista 762 00:33:02,570 --> 00:33:04,720 parece bastante justo simple-- imprimir una sencilla pirámide. 763 00:33:04,720 --> 00:33:07,345 Pero hay un par de características aquí que son interesantes. 764 00:33:07,345 --> 00:33:12,400 Observe que el borde más a la derecha de la pirámide en realidad tiene la anchura de dos. 765 00:33:12,400 --> 00:33:14,570 Así que hay de dos iguales columnas de altura, los cuales 766 00:33:14,570 --> 00:33:16,804 hace que se requiere un poco de poco de pensamiento para hacer 767 00:33:16,804 --> 00:33:19,720 Seguro que consigue que toda la razón, ya que en lugar de sólo un ángulo perfectamente 768 00:33:19,720 --> 00:33:20,220 línea. 769 00:33:20,220 --> 00:33:23,340 Así que eso es un poco de un caso esquina pero coincide con el juego real. 770 00:33:23,340 --> 00:33:27,610 >> Y también es no evidente a primera vista cómo imprimir el espacio en blanco. 771 00:33:27,610 --> 00:33:29,430 Así que cuando me veo en el muestra de salida aquí-- 772 00:33:29,430 --> 00:33:32,440 y también en el que spec-- tipo de parece a un rectángulo, 773 00:33:32,440 --> 00:33:35,120 sino una diagonal de la rectángulo ha sido cortado, 774 00:33:35,120 --> 00:33:37,320 y es sólo espacios en blanco, por así decirlo. 775 00:33:37,320 --> 00:33:40,100 Y así una frecuencia hechas pregunta aquí es siempre bueno, 776 00:33:40,100 --> 00:33:43,302 ¿cómo me muevo los hashtags a la derecha? 777 00:33:43,302 --> 00:33:44,760 O cómo puedo imprimir los espacios en blanco? 778 00:33:44,760 --> 00:33:46,860 Y en realidad es más fácil que la mayoría de los estudiantes piensan. 779 00:33:46,860 --> 00:33:47,360 ¿Correcto? 780 00:33:47,360 --> 00:33:51,620 Usted puede aproximar visualmente con sólo golpear la barra espaciadora una o dos veces 781 00:33:51,620 --> 00:33:52,700 o tres veces. 782 00:33:52,700 --> 00:33:56,260 >> Y así, a pesar de que con printf casi siempre imprimir una cuerda o un int 783 00:33:56,260 --> 00:33:59,950 o una palabra como "hola, mundo "o una serie de palabras, 784 00:33:59,950 --> 00:34:03,560 también puede simplemente imprimir cita, espacio, fin de la cita. 785 00:34:03,560 --> 00:34:06,320 Y eso realmente dar que un espacio en blanco allí. 786 00:34:06,320 --> 00:34:08,330 Así que tenlo en cuenta y no pensar demasiado esto. 787 00:34:08,330 --> 00:34:10,570 Usted realmente tiene que decidir fila por fila por fila, 788 00:34:10,570 --> 00:34:14,280 no muy diferente de su ejemplo, un momento hace, ¿cuántos de los 789 00:34:14,280 --> 00:34:18,420 columnas deben ser espacios en blanco y cuántos de ellos debe ser hashtags. 790 00:34:18,420 --> 00:34:21,560 Tomará un poco de tiempo, pero es en última instancia, un rompecabezas de la lógica de clases. 791 00:34:21,560 --> 00:34:22,060 >> MARIA: Sí. 792 00:34:22,060 --> 00:34:25,060 Pero la lógica de ir fila por fila va a ser muy útil en este caso. 793 00:34:25,060 --> 00:34:25,810 DAVID MALAN: Sí. 794 00:34:25,810 --> 00:34:28,976 Creo que el código de ejemplo que gave-- aun aunque no era un programa completo. 795 00:34:28,976 --> 00:34:34,247 Usted todavía necesita int y principal y sin efecto y #include stdio.h, 796 00:34:34,247 --> 00:34:35,580 una gran cantidad de las cosas de la conferencia. 797 00:34:35,580 --> 00:34:37,629 Pero los bloques de construcción parecen estar allí. 798 00:34:37,629 --> 00:34:39,920 Y luego, por último, es algo un poco más algorítmica. 799 00:34:39,920 --> 00:34:43,210 Así que resulta que cada vez que ir a CVS o cualquier tienda de conveniencia 800 00:34:43,210 --> 00:34:47,810 y alguien te da en la facturas cajero o monedas como el cambio, 801 00:34:47,810 --> 00:34:50,620 resulta que ellos, los seres humanos, si o no lo sepan o no, 802 00:34:50,620 --> 00:34:53,300 probablemente están utilizando lo que hay llamado un algoritmo codicioso, 803 00:34:53,300 --> 00:34:58,170 por el que si que se le debe, por ejemplo, $ 21 en cambio, porque por alguna razón 804 00:34:58,170 --> 00:35:01,580 usted compró algo muy barato con una gran factura al CVS, 805 00:35:01,580 --> 00:35:05,910 que sería muy molesto si la cajero le dio 21 habitaciones individuales o, peor 806 00:35:05,910 --> 00:35:07,629 sin embargo, una gran cantidad de monedas. 807 00:35:07,629 --> 00:35:10,670 Más bien, lo que una persona razonable es probablemente va a hacer es que van 808 00:35:10,670 --> 00:35:14,224 para tomar un $ 20 y luego un proyecto de ley de $ 1, y que entregar sólo dos proyectos de ley en ese caso. 809 00:35:14,224 --> 00:35:17,390 MARIA: ¿Así que estamos tratando de minimizar el cambio que se dan de nuevo a usted. 810 00:35:17,390 --> 00:35:17,850 DAVID MALAN: Exactamente. 811 00:35:17,850 --> 00:35:19,540 Y mismo acuerdo con las monedas, también. 812 00:35:19,540 --> 00:35:23,040 Si usted le debe, por ejemplo, $ 0,50, esperemos que no quieres 50 centavos. 813 00:35:23,040 --> 00:35:25,500 En su lugar, quiere de dos cuartas partes, por ejemplo. 814 00:35:25,500 --> 00:35:27,540 Ahora bien, esto hace suponer que el cajero tiene 815 00:35:27,540 --> 00:35:29,940 basta de toda denominación que él o ella puede ser que desee darle. 816 00:35:29,940 --> 00:35:32,148 Pero nosotros permitimos que asumas tanto en el problema. 817 00:35:32,148 --> 00:35:35,590 Y el objetivo, en última instancia, es implementar en código C un algoritmo codicioso. 818 00:35:35,590 --> 00:35:37,344 Así se permite que el usuario para escribir en la cantidad 819 00:35:37,344 --> 00:35:40,510 cambiar él o ella se le debe con dólares y centavos, una especie de punto flotante 820 00:35:40,510 --> 00:35:41,590 valor probable. 821 00:35:41,590 --> 00:35:45,530 Y entonces usted tiene que hacer los cálculos y averiguar algorítmicamente, bueno, 822 00:35:45,530 --> 00:35:49,020 cuántas monedas puedo dar que mínimamente para darle 823 00:35:49,020 --> 00:35:50,270 exactamente esa cantidad de cambio. 824 00:35:50,270 --> 00:35:53,470 Pero no va a ser un algunas partes difíciles aquí, ¿verdad? 825 00:35:53,470 --> 00:35:56,236 Al igual que está el conjunto tema imprecisión. 826 00:35:56,236 --> 00:35:56,860 MARIA: Exactamente. 827 00:35:56,860 --> 00:35:59,114 Así que el punto flotante valores tienen imprecisión. 828 00:35:59,114 --> 00:36:00,780 ¿Acaso hablamos de esto en la conferencia de hoy? 829 00:36:00,780 --> 00:36:02,340 >> DAVID MALAN: Hicimos el la última vez en la conferencia. 830 00:36:02,340 --> 00:36:03,506 Hablamos de imprecisión. 831 00:36:03,506 --> 00:36:08,840 Y usted no quiere engañar al usuario de la cantidad de cambio que él o ella se le debe. 832 00:36:08,840 --> 00:36:11,290 Y así el tutorial, en la especificación de conjunto de problemas, 833 00:36:11,290 --> 00:36:15,990 reflexionar, en última instancia, en cuanto a cómo se puede mitigar los imprecisión 834 00:36:15,990 --> 00:36:17,280 errores, potencialmente. 835 00:36:17,280 --> 00:36:21,050 Es evitable, sin duda, por las entradas de las que estamos hablando. 836 00:36:21,050 --> 00:36:23,590 Y, de hecho, pennies-- tal vez vamos a aplazar a Zamyla, 837 00:36:23,590 --> 00:36:25,136 Creo que, para los trucos allí. 838 00:36:25,136 --> 00:36:27,760 Así que, finalmente, encontrará una la progresión de los problemas de esta semana, 839 00:36:27,760 --> 00:36:30,700 el primero de los cuales es bastante pequeña, a continuación, medio, y luego un poco más grande. 840 00:36:30,700 --> 00:36:33,200 Pero todos ellos utilizar el edificio cuadras de la semana pasada, 841 00:36:33,200 --> 00:36:35,280 de esta supersección, problema especificación establecida 842 00:36:35,280 --> 00:36:36,710 lo pone en innumerables recursos. 843 00:36:36,710 --> 00:36:41,000 Pero aún así, si es que lo que lucha, especialmente entre los menos cómodos 844 00:36:41,000 --> 00:36:42,917 sin conocimientos previos, llegado a las horas de oficina 845 00:36:42,917 --> 00:36:44,958 el lunes y martes y Miercoles y jueves. 846 00:36:44,958 --> 00:36:46,950 Ir a CS50 Hable a través de la página web de la asignatura, 847 00:36:46,950 --> 00:36:49,080 a través de la cual puedes chatear con el personal y los compañeros de clase. 848 00:36:49,080 --> 00:36:51,670 >> Pero en última instancia, creo que el mejor consejo es simplemente empezar temprano. 849 00:36:51,670 --> 00:36:54,711 No es el tipo de clase que debe iniciar conjuntos de procesadores el miércoles 850 00:36:54,711 --> 00:36:56,640 noche, o peor noche del jueves. 851 00:36:56,640 --> 00:36:59,067 >> MARIA: Mi mejor consejo es haber comenzado el lunes. 852 00:36:59,067 --> 00:36:59,900 DAVID MALAN: Lunes. 853 00:36:59,900 --> 00:37:02,490 Así que si usted no ha comenzado ya-- no. 854 00:37:02,490 --> 00:37:04,732 Pero incluso si no el lunes, luego el martes. 855 00:37:04,732 --> 00:37:05,690 Cuanto antes mejor. 856 00:37:05,690 --> 00:37:08,605 Y esa es la razón por la Por supuesto tiene tantos días de retraso es 857 00:37:08,605 --> 00:37:10,535 para darle un poco de un presión psicológica 858 00:37:10,535 --> 00:37:13,684 para empezar antes, pero todavía deja cosas resbalen cuando las cosas toman más tiempo 859 00:37:13,684 --> 00:37:14,350 de lo esperado. 860 00:37:14,350 --> 00:37:17,950 >> MARIA: ¿Y usted quiere hacer uso de horario de oficina lo más que puede, también. 861 00:37:17,950 --> 00:37:20,291 >> DAVID MALAN: ¿Alguna pregunta? 862 00:37:20,291 --> 00:37:20,790 Correcto. 863 00:37:20,790 --> 00:37:22,930 Bueno, ¿por qué no levantar la sesión aquí? 864 00:37:22,930 --> 00:37:23,487