1 00:00:00,000 --> 00:00:10,982 2 00:00:10,982 --> 00:00:11,940 DAVID Malan: Todo ben. 3 00:00:11,940 --> 00:00:16,470 Polo tanto, esta é CS50, e este é agora o inicio da semana tres. 4 00:00:16,470 --> 00:00:19,960 >> Entón, ata agora, temos escribir programas en C 5 00:00:19,960 --> 00:00:23,210 que mirar un pouco algo coma isto aquí. 6 00:00:23,210 --> 00:00:25,470 Entón, nós temos un par de afiado inclúe, na parte superior. 7 00:00:25,470 --> 00:00:28,490 Temos int, principal, nula e entón algo para facer no medio, 8 00:00:28,490 --> 00:00:30,590 algún anaco de código dentro desta función. 9 00:00:30,590 --> 00:00:34,170 Pero clave foi o feito de que dixemos baleiro aquí. 10 00:00:34,170 --> 00:00:39,320 Entón, baleiro, todo este tempo, especifica que este programa, cando se executa, 11 00:00:39,320 --> 00:00:41,300 só pode ser executado a través do seu nome. 12 00:00:41,300 --> 00:00:46,330 Non pode escribir calquera outras palabras ou números despois do nome do programa cando 13 00:00:46,330 --> 00:00:46,830 executalo. 14 00:00:46,830 --> 00:00:51,200 Así, por exemplo, se o programa foron compilados nun arquivo chamado Ola, 15 00:00:51,200 --> 00:00:53,480 podería facer ./hello, pero é iso. 16 00:00:53,480 --> 00:00:56,750 >> O único xeito que podería contribuír a este programa 17 00:00:56,750 --> 00:00:57,960 é chamando unha función. 18 00:00:57,960 --> 00:00:59,790 Por exemplo, que a función temos benvida a empregar ata agora 19 00:00:59,790 --> 00:01:00,950 para entrada de usuario? 20 00:01:00,950 --> 00:01:02,117 >> Audiencia: Obter cadea. 21 00:01:02,117 --> 00:01:04,700 DAVID Malan: Para obter corda, ou obter int, ou xa viu noutros, 22 00:01:04,700 --> 00:01:07,630 mesmo se non telos usado aínda, como obter moito, moito e afíns. 23 00:01:07,630 --> 00:01:09,380 Pero supoña que realmente quere comezar 24 00:01:09,380 --> 00:01:12,760 escribir programas que son algo máis versátil, e, francamente, un pouco máis 25 00:01:12,760 --> 00:01:15,090 como as ordes que recibido, espero, 26 00:01:15,090 --> 00:01:16,550 algo afeito. 27 00:01:16,550 --> 00:01:18,560 Como cd espazo Dropbox. 28 00:01:18,560 --> 00:01:20,800 Isto, por suposto, os cambios seu directorio, asumindo 29 00:01:20,800 --> 00:01:23,590 está na casa de John Harvard directorio, na súa carpeta Dropbox. 30 00:01:23,590 --> 00:01:27,380 Mentres tanto, un comando coma este crea un novo directorio chamado pset2, 31 00:01:27,380 --> 00:01:30,290 como xa pode ter ou pronto para o problema de definir dous. 32 00:01:30,290 --> 00:01:33,970 Engadir Ola, por suposto, é unha orde que constrúe un programa chamado Ola 33 00:01:33,970 --> 00:01:35,770 a partir dun ficheiro chamado Ola punto c. 34 00:01:35,770 --> 00:01:39,140 E en cada un destes casos, agora, tivemos 35 00:01:39,140 --> 00:01:43,620 proporcionan unha discusión sobre o chamado liña de comandos, o poder piscando, 36 00:01:43,620 --> 00:01:48,540 para que make sabe o que construír, e así por que sabe o que mkdir cartafol para crear, 37 00:01:48,540 --> 00:01:51,110 e para que cd sabe onde quere ir. 38 00:01:51,110 --> 00:01:54,720 Pero ata agora, seguimos a dicir que o principal, a función estándar, 39 00:01:54,720 --> 00:01:58,500 ten unha expresión baleira dentro destes parénteses, 40 00:01:58,500 --> 00:02:01,250 o que significa que non pode tomar calquera argumentos. 41 00:02:01,250 --> 00:02:03,240 >> Entón, a partir de hoxe, o que imos facer 42 00:02:03,240 --> 00:02:06,270 é, imos comezar apoiar cousas como esta mesma. 43 00:02:06,270 --> 00:02:08,990 De feito, neste caso, o que lle non adoitan escribir manualmente 44 00:02:08,990 --> 00:02:11,130 Fai vén facendo iso para nós, non hai 45 00:02:11,130 --> 00:02:15,840 un, pero de un, dous, tres adicional cordas tras o programa de chamada 46 00:02:15,840 --> 00:02:16,850 clang. 47 00:02:16,850 --> 00:02:18,240 Entón, como imos conseguir isto? 48 00:02:18,240 --> 00:02:20,260 >> Ben, a partir de hoxe, nos casos en que queremos 49 00:02:20,260 --> 00:02:22,855 para facilitar entrada a través da chamado de liña de comandos, 50 00:02:22,855 --> 00:02:24,980 imos comezar a engadir aquí o que está yellow-- 51 00:02:24,980 --> 00:02:30,520 substituíndo baleiro con int argc comas corda argv soporte aberto pechar parénteses. 52 00:02:30,520 --> 00:02:32,520 Agora isto é interesante por un par de razóns. 53 00:02:32,520 --> 00:02:35,690 Un deles, que vai deixar-nos escribir programas que son un pouco máis dinámico. 54 00:02:35,690 --> 00:02:37,570 Pero, máis convincente, que vai abrir 55 00:02:37,570 --> 00:02:40,340 agora unha conversa acerca de o que matrices poden realmente 56 00:02:40,340 --> 00:02:43,300 ser utilizado, para o que unha cadea realmente é debaixo do capó, 57 00:02:43,300 --> 00:02:47,320 ata a próxima semana, cando comezamos mergullo no máis profundo de como a máquina está 58 00:02:47,320 --> 00:02:48,590 facendo todo este traballo material. 59 00:02:48,590 --> 00:02:51,920 Pero, por agora, imos deseñar, quizais, unha imaxe. 60 00:02:51,920 --> 00:02:54,950 >> Cando escribe un programa con principal declarada 61 00:02:54,950 --> 00:02:58,810 deste xeito, de tal xeito que principal recibe dous argumentos, un int 62 00:02:58,810 --> 00:03:03,233 e-- que tipo de datos é o segundo argumento? 63 00:03:03,233 --> 00:03:04,529 >> Audiencia: Array. 64 00:03:04,529 --> 00:03:05,320 DAVID Malan: Array. 65 00:03:05,320 --> 00:03:09,170 Polo tanto, parece a primeira vista como se fose un corda, pero observar os corchetes. 66 00:03:09,170 --> 00:03:12,760 Teña en conta que a última vez que introduciu a noción dunha matriz. 67 00:03:12,760 --> 00:03:16,210 E matrices usar corchetes nun par de contextos. 68 00:03:16,210 --> 00:03:19,160 Podes usar o cadrado soportes para ir nunha matriz 69 00:03:19,160 --> 00:03:22,710 e obter un elemento particular, como soporte 0 ou soporte dunha ou soporte 2. 70 00:03:22,710 --> 00:03:25,500 Pero vimos, aínda que brevemente, a semana pasada que tamén 71 00:03:25,500 --> 00:03:28,790 usar estes corchetes para declarar o tamaño dunha matriz, 72 00:03:28,790 --> 00:03:31,790 Se sabe de antemán cantos Ints ou como cadeas de moitos ou o que 73 00:03:31,790 --> 00:03:32,630 realmente queren. 74 00:03:32,630 --> 00:03:34,790 Entón non é que hai un terceiro contexto aquí 75 00:03:34,790 --> 00:03:37,890 que non ten ningún número dentro dos corchetes. 76 00:03:37,890 --> 00:03:41,920 Cando especificar, como eu teño aquí, o nome de algo como argv, 77 00:03:41,920 --> 00:03:44,550 que é só un xeito elegante de dicindo argumento vector, que 78 00:03:44,550 --> 00:03:47,750 é outra forma elegante de dicindo unha matriz de argumentos, 79 00:03:47,750 --> 00:03:50,870 soporte aberto pechar parénteses só significa que non precisa necesariamente 80 00:03:50,870 --> 00:03:52,960 saber con antelación como gran a matriz será, 81 00:03:52,960 --> 00:03:55,070 pero xa sabe que vai ser un array. 82 00:03:55,070 --> 00:03:57,320 Entón, se non sabe o número non poñer-lo alí dentro, 83 00:03:57,320 --> 00:04:01,160 para soporte aberto pechar parénteses significa que argv non é unha cadea, 84 00:04:01,160 --> 00:04:03,124 pero un conxunto de cordas. 85 00:04:03,124 --> 00:04:05,040 Entón, sintaticamente, se creo que volta a semana pasada, 86 00:04:05,040 --> 00:04:09,460 é moi similar a dicir algo así como int idades soporte aberto, 87 00:04:09,460 --> 00:04:10,984 e logo despois diso algo. 88 00:04:10,984 --> 00:04:12,150 Entón o que iso parece? 89 00:04:12,150 --> 00:04:13,399 Imos realmente sacar unha foto. 90 00:04:13,399 --> 00:04:18,756 Entón, cando executar este programa coa principal tendo dous argumentos definido dentro 91 00:04:18,756 --> 00:04:21,339 destes parénteses, é esencialmente teñen polo menos dous anacos 92 00:04:21,339 --> 00:04:23,560 de memoria entrega a vostede debaixo do capó. 93 00:04:23,560 --> 00:04:26,550 Un deles, como eu vou deseña como este rectángulo, será chamado argc. 94 00:04:26,550 --> 00:04:30,645 E así como unha rápida recapitulación, cal é o tipo de argc datos? 95 00:04:30,645 --> 00:04:31,270 Polo tanto, é un int. 96 00:04:31,270 --> 00:04:33,480 Así, un número vai para ir en quendas argc-- 97 00:04:33,480 --> 00:04:35,660 que representa o número de argumentos. 98 00:04:35,660 --> 00:04:38,887 Mentres tanto, eu deseño argv como unha matriz. 99 00:04:38,887 --> 00:04:40,970 E eu realmente non sei canto tempo vai ser, 100 00:04:40,970 --> 00:04:42,470 polo tanto, para fins de hoxe dot dot dot. 101 00:04:42,470 --> 00:04:43,636 Pode estar de algún tempo. 102 00:04:43,636 --> 00:04:45,640 Pero eu teño mostrado aquí polo menos catro rectángulos. 103 00:04:45,640 --> 00:04:50,970 Así, argv unha peza de memoria que almacena cadea cadea cadea dot dot dot, 104 00:04:50,970 --> 00:04:53,950 e argc é só unha peza de memoria para un número enteiro. 105 00:04:53,950 --> 00:04:55,710 >> Entón, agora, imos ser un pouco máis preciso. 106 00:04:55,710 --> 00:04:59,200 Se, cando eu teño cordas Nesta matriz, chamado 107 00:04:59,200 --> 00:05:03,290 argv, quero chegar a eles individualmente, así como a semana pasada, 108 00:05:03,290 --> 00:05:05,670 imos usar a notación como soporte argv 0 109 00:05:05,670 --> 00:05:07,650 para obter o primeiro que un array. 110 00:05:07,650 --> 00:05:10,440 Argv soporte 1 para obter a segundo lugar, e así por diante. 111 00:05:10,440 --> 00:05:14,597 A clave aquí é que aínda estamos 0 indexed-- aínda estamos contando a partir de 0. 112 00:05:14,597 --> 00:05:16,430 Entón agora imos realmente poñer algo nese sentido. 113 00:05:16,430 --> 00:05:21,670 Se eu fose para compilar un programa chamado Hola a partir dun ficheiro chamado Ola punto c, 114 00:05:21,670 --> 00:05:24,340 e entón eu executar este programa con punto barra Ola, 115 00:05:24,340 --> 00:05:28,380 que é o que o meu ordenador, o meu portátil, parecer debaixo do capó 116 00:05:28,380 --> 00:05:31,300 no momento en que realizar dot reducir Ola e prema Intro? 117 00:05:31,300 --> 00:05:33,500 Ben, este é, quizais, o que poderiamos describir 118 00:05:33,500 --> 00:05:37,010 como o contido do seu ordenador de memoria, ou memoria de acceso aleatorio RAM--. 119 00:05:37,010 --> 00:05:40,330 Noutras palabras, o ordenador, dalgún xeito para que pase de máxica, 120 00:05:40,330 --> 00:05:45,360 pon o número 1 en argc, aka argcount, e pon literalmente a cadea 121 00:05:45,360 --> 00:05:48,200 ./hello en argv soporte 0. 122 00:05:48,200 --> 00:05:51,750 Eu non teño idea, francamente, o que é no soporte argv 1 ou 2 ou 3, 123 00:05:51,750 --> 00:05:55,550 porque, se o usuario non ten ingresaran somente ./hello, 124 00:05:55,550 --> 00:05:58,550 imos supor que estes son valores de lixo máis probables, 125 00:05:58,550 --> 00:05:59,700 por así dicir. 126 00:05:59,700 --> 00:06:02,650 Estes anacos de memoria existen, pero non cabe a nós 127 00:06:02,650 --> 00:06:05,710 de ollar para eles, porque o argcount é un só. 128 00:06:05,710 --> 00:06:07,870 >> Agora, mentres tanto, se eu escribir executar outro programa, 129 00:06:07,870 --> 00:06:12,250 cd, que é máis adecuadamente un comando, no seu espazo de palpebrar cd prompt-- 130 00:06:12,250 --> 00:06:17,200 Dropbox-- cando corro que, efectivamente, cando o programa é executado cd, argc, 131 00:06:17,200 --> 00:06:22,270 dentro da memoria do meu ordenador, é a o máis breve segundo o número 2. 132 00:06:22,270 --> 00:06:25,936 E, a continuación, o soporte ten argv cd, soporte argv 1 ten Dropbox, 133 00:06:25,936 --> 00:06:28,560 e despois, por suposto, o comando conclúe, entón todo isto de memoria 134 00:06:28,560 --> 00:06:30,420 esencialmente vai e se usa para outra cousa. 135 00:06:30,420 --> 00:06:32,270 E é por iso que eu digo só unha fracción de segundo. 136 00:06:32,270 --> 00:06:35,720 >> Mentres tanto, se facemos mkdir pset2, o cadro é case o mesmo, 137 00:06:35,720 --> 00:06:37,900 pero con diferentes cadeas dentro argv. 138 00:06:37,900 --> 00:06:42,570 Se eu fai clang trazo Ola Ola punto c, a mesma idea. 139 00:06:42,570 --> 00:06:47,060 Máis material é cuberto para argv e argc, por suposto, é 4. 140 00:06:47,060 --> 00:06:49,150 Así, noutras palabras, aínda que esta matriz 141 00:06:49,150 --> 00:06:52,950 pode ser dot dot dot, dalgún de lonxitude variable, por así dicir, 142 00:06:52,950 --> 00:06:56,720 sempre sabe onde a fin de todo é, pois argc vai dicir 143 00:06:56,720 --> 00:07:00,120 en que punto ten que deixar mirando para elementos en argv. 144 00:07:00,120 --> 00:07:03,660 Só podes ollar catro en total, neste caso. 145 00:07:03,660 --> 00:07:06,600 >> Entón, imos agora dar un ollo, quizais, un programa sinxelo. 146 00:07:06,600 --> 00:07:09,070 Un que di Ola para alguén como Zamyla. 147 00:07:09,070 --> 00:07:12,620 Entón, eu afirmo que vou escribir un programa en só un momento, a través do cal eu podería facer 148 00:07:12,620 --> 00:07:16,670 ./hello espazo Zamyla, e entón eu quero meu programa para imprimir algo 149 00:07:16,670 --> 00:07:18,520 super-sinxelo, como "Ola, Zamyla." 150 00:07:18,520 --> 00:07:20,100 Agora, no pasado usamos getString. 151 00:07:20,100 --> 00:07:22,850 Polo tanto, no pasado, aínda que vostede é novo en programación, 152 00:07:22,850 --> 00:07:27,180 posibilidades son que pode preparar unha programa que usa getString 153 00:07:27,180 --> 00:07:29,390 e entón usa printf para dicir ola para Zamyla. 154 00:07:29,390 --> 00:07:31,290 Pero non imos usar GetString neste momento. 155 00:07:31,290 --> 00:07:37,510 Déixeme en vez de ir ao Appliant e que inclúen estándar S dot h. 156 00:07:37,510 --> 00:07:41,160 Déixeme tamén inclúen CS50 punto h. 157 00:07:41,160 --> 00:07:44,730 Agora int main, e agora eu son non vai facer baleiro hoxe. 158 00:07:44,730 --> 00:07:51,200 Pola contra, eu vou facer int argc corda argv soporte aberto pechar parénteses, 159 00:07:51,200 --> 00:07:52,640 non especificar un número. 160 00:07:52,640 --> 00:07:54,644 E agora, aquí está o meu chamado para facer. 161 00:07:54,644 --> 00:07:57,560 O que eu vou facer agora é, eu son vai facer un pouco de un salto de fe, 162 00:07:57,560 --> 00:08:00,560 Vou asumir que o usuario do vai utilizar este programa correctamente, 163 00:08:00,560 --> 00:08:04,980 e eu estou indo simplemente para facer printf Ola,% sn. 164 00:08:04,980 --> 00:08:06,630 Polo tanto, nada novo nisto. 165 00:08:06,630 --> 00:08:11,470 Pero quero agora poñer calquera palabra que o tipo de usuarios despois do nome do programa. 166 00:08:11,470 --> 00:08:16,970 Entón, se eu fai ./hello espazo Zamyla, I quere dalgún xeito programática acceso 167 00:08:16,970 --> 00:08:20,870 entre comiñas "Zamyla." entón eu pode ir ao meu argumento vector, 168 00:08:20,870 --> 00:08:25,980 miña matriz de cadeas, e se a orde, de novo, foi ./hello espazo Zamyla, 169 00:08:25,980 --> 00:08:29,340 o número que quero para poñer en argv aquí? 170 00:08:29,340 --> 00:08:29,840 Audiencia: 1. 171 00:08:29,840 --> 00:08:32,355 DAVID Malan: 1, porque soporte 0 botan 172 00:08:32,355 --> 00:08:34,230 será o nome do programa, como vimos. 173 00:08:34,230 --> 00:08:37,789 Entón soporte 1 é a primeira palabra que eu, o usuario, escribiu. 174 00:08:37,789 --> 00:08:39,559 Eu estou indo a ir adiante e salva este. 175 00:08:39,559 --> 00:08:42,830 Eu estou indo a ir a miña carpeta onde eu teño este ficheiro. 176 00:08:42,830 --> 00:08:44,920 Vou facer facer Ola 3. 177 00:08:44,920 --> 00:08:46,230 Aceptar da Comp IO. 178 00:08:46,230 --> 00:08:51,380 ./hello Zamyla Intro. 179 00:08:51,380 --> 00:08:54,480 O que eu fixen de malo? 180 00:08:54,480 --> 00:08:57,270 Eu fun pego de sorpresa me por un momento alí. 181 00:08:57,270 --> 00:08:58,230 O que eu fixen de malo? 182 00:08:58,230 --> 00:08:59,220 >> Audiencia: Nome. 183 00:08:59,220 --> 00:09:01,767 >> DAVID Malan: O ficheiro de realmente chamado hello3.c. 184 00:09:01,767 --> 00:09:03,850 E eu fixen iso só para consistencia, porque 185 00:09:03,850 --> 00:09:06,550 tiveron ola.c de no pasado no código en liña. 186 00:09:06,550 --> 00:09:11,550 Entón imos solucionar isto ./hello soporte trazo 3 Zamyla. 187 00:09:11,550 --> 00:09:12,370 Intro. 188 00:09:12,370 --> 00:09:14,030 E agora temos Ola, Zamyla. 189 00:09:14,030 --> 00:09:17,650 Mentres tanto, podo cambiar isto ser Rob, é realmente calquera outra palabra. 190 00:09:17,650 --> 00:09:19,230 >> Pero imos considerar un caso de canto. 191 00:09:19,230 --> 00:09:24,360 O que podería esperar que terá lugar se Non escriba o nome de quen queira que sexa? 192 00:09:24,360 --> 00:09:25,270 >> Audiencia: Error. 193 00:09:25,270 --> 00:09:27,300 >> DAVID Malan: un erro dalgunha sorte, quizais. 194 00:09:27,300 --> 00:09:28,200 Imos ver. 195 00:09:28,200 --> 00:09:29,440 Intro. 196 00:09:29,440 --> 00:09:30,210 Null. 197 00:09:30,210 --> 00:09:33,870 Entón printf está realmente sendo un pouco de protección de nós 198 00:09:33,870 --> 00:09:38,131 aquí, e, literalmente, imprimir paréntese aberta null, pero as cousas aínda peores poden ocorrer. 199 00:09:38,131 --> 00:09:40,130 E só para demostrar algo que absolutamente 200 00:09:40,130 --> 00:09:42,800 non debe facer, imos entrar aquí e empezar a picar arredor. 201 00:09:42,800 --> 00:09:43,300 Correcto? 202 00:09:43,300 --> 00:09:46,410 Se eu sei que a imaxe memoria é esencialmente iso, 203 00:09:46,410 --> 00:09:52,660 argv franxa 1 ten Zamyla, argv soporte 0 ten ./hello, ou ./hello-3. 204 00:09:52,660 --> 00:09:55,400 Que é da clase 2? 205 00:09:55,400 --> 00:09:58,210 Entón, podo responder a esta cuestionar-me, non? 206 00:09:58,210 --> 00:10:00,460 Podo só cambiar o 1 á 2. 207 00:10:00,460 --> 00:10:07,270 Agora podo recompilar Ola 3, ./hello3 Imos ampliar e prema Intro. 208 00:10:07,270 --> 00:10:08,270 Whoops. 209 00:10:08,270 --> 00:10:10,660 Sen comiñas. 210 00:10:10,660 --> 00:10:12,540 Interesante. 211 00:10:12,540 --> 00:10:15,530 Entón, iso é ben legal para ver o que máis está aquí. 212 00:10:15,530 --> 00:10:17,130 >> Entón o que máis está dentro do meu portátil? 213 00:10:17,130 --> 00:10:20,390 Imos salvalo con soporte 3. 214 00:10:20,390 --> 00:10:25,190 Fai hello3, ./hello-3. 215 00:10:25,190 --> 00:10:26,500 Curioso. 216 00:10:26,500 --> 00:10:30,560 E agora imos realmente bold-- 50. 217 00:10:30,560 --> 00:10:34,340 Entón, iso é realmente profundo mergullo na memoria do meu ordenador. 218 00:10:34,340 --> 00:10:35,930 50 en índices. 219 00:10:35,930 --> 00:10:41,950 Entón faga Ola 3 ./hello-3. 220 00:10:41,950 --> 00:10:42,680 Curioso. 221 00:10:42,680 --> 00:10:44,660 Todo ben, agora eu son só vai conseguir boa idea. 222 00:10:44,660 --> 00:10:47,331 Imos para 5000. 223 00:10:47,331 --> 00:10:47,830 Todo correcto. 224 00:10:47,830 --> 00:10:49,520 Entón deixe-me recompilar. 225 00:10:49,520 --> 00:10:51,460 Fai hello3, ./hello-3. 226 00:10:51,460 --> 00:10:55,780 227 00:10:55,780 --> 00:10:56,460 Está ben. 228 00:10:56,460 --> 00:10:59,250 Agora algúns de vostedes, non pode ser unha lámpada a saír. 229 00:10:59,250 --> 00:11:01,900 Como moitos de vostedes teñen ver esta mensaxe antes? 230 00:11:01,900 --> 00:11:03,440 Está ben. 231 00:11:03,440 --> 00:11:04,420 Entón, por que? 232 00:11:04,420 --> 00:11:07,250 >> Odds é-- e hai diferentes cousas que poden causar iso, 233 00:11:07,250 --> 00:11:09,730 e é evidente que está en boa company-- temos claramente 234 00:11:09,730 --> 00:11:11,900 causou o que se chama un fallo de segmento. 235 00:11:11,900 --> 00:11:15,890 E short longo da historia para hoxe, eu tocar un segmento de memoria 236 00:11:15,890 --> 00:11:17,060 que eu non debería ter. 237 00:11:17,060 --> 00:11:19,970 Sempre que un segmento significa só unha peza de memoria que eu non debería ter. 238 00:11:19,970 --> 00:11:25,530 Agora, o equipo asegura que, se I realizar ./helloZamyla que podo tocar argv 239 00:11:25,530 --> 00:11:27,760 ser soporte 0 e argv soporte 1. 240 00:11:27,760 --> 00:11:32,730 Pero argc é o valor 2, isto significa que eu son só allowed-- é unha especie de honor 241 00:11:32,730 --> 00:11:35,180 system-- tocar soporte 0 e soporte 1. 242 00:11:35,180 --> 00:11:37,990 Se eu ir máis lonxe, hai absolutamente será memoria alí. 243 00:11:37,990 --> 00:11:40,660 A miña memoria RAM hai fisicamente no ordenador. 244 00:11:40,660 --> 00:11:42,080 Pero quen sabe o que está aí? 245 00:11:42,080 --> 00:11:44,450 En realidade, eu estou correndo múltiple programas de unha soa vez. 246 00:11:44,450 --> 00:11:46,910 Eu podería seen-- se eu non estivese facendo iso no Appliant 247 00:11:46,910 --> 00:11:49,937 pero no meu Mac ou PC-- eu podería ver o contido dun correo electrónico. 248 00:11:49,937 --> 00:11:52,270 Podería ver un instante Mensaxe Eu recentemente enviou. 249 00:11:52,270 --> 00:11:55,390 Calquera cousa que poida ser persistente en torno á memoria 250 00:11:55,390 --> 00:11:59,180 podía ser accedido a través de esta notación corchete arbitraria. 251 00:11:59,180 --> 00:12:02,850 Ou, peor aínda, pode que atopou unha das miñas claves 252 00:12:02,850 --> 00:12:05,859 que recentemente introduciu, que unha programa tiña almacenado na memoria de forma 253 00:12:05,859 --> 00:12:07,900 para me rexistrar e logo só un tipo de esquerda que 254 00:12:07,900 --> 00:12:09,910 na memoria RAM ata que deixei ese programa. 255 00:12:09,910 --> 00:12:12,860 >> E, de feito, este é un dos o perigo e un dos poderes 256 00:12:12,860 --> 00:12:15,980 de usar unha linguaxe como C. Ten acceso sen restricións 257 00:12:15,980 --> 00:12:18,860 a todo o contido da memoria dun programa, 258 00:12:18,860 --> 00:12:21,340 eo que bandidos poden mesmo facer nesas cases-- 259 00:12:21,340 --> 00:12:23,807 especialmente cando comeza a programación web 260 00:12:23,807 --> 00:12:26,890 ata o final do semestre, imos revisitar este topic-- é bisbilhotar, 261 00:12:26,890 --> 00:12:31,660 potencialmente, alguén é o ordenador de memoria e atopar tales cousas curiosas 262 00:12:31,660 --> 00:12:32,570 como vimos alí. 263 00:12:32,570 --> 00:12:36,900 Ou peor aínda, os contrasinais que ou ela pode usar para facer cousas malas. 264 00:12:36,900 --> 00:12:40,240 >> Entón, claramente, que eu non debería ter feito isto, porque cousas estrañas empezan a ocorrer. 265 00:12:40,240 --> 00:12:42,310 En realidade, este é un programa que deixa de funcionar. 266 00:12:42,310 --> 00:12:44,580 Isto sería equivalente a Mac OS ou Windows 267 00:12:44,580 --> 00:12:46,770 unha fiestra de programa simplemente desaparecer. 268 00:12:46,770 --> 00:12:48,300 Houbo un erro inesperado. 269 00:12:48,300 --> 00:12:50,840 No ámbito de liña de comandos vemos algo como isto. 270 00:12:50,840 --> 00:12:54,480 Pero é por iso, é que estou simplemente tocando memoria que non pertence a min. 271 00:12:54,480 --> 00:12:57,090 >> Entón imos defender contra este un pouco dun xeito diferente 272 00:12:57,090 --> 00:12:59,010 mirando para este programa. 273 00:12:59,010 --> 00:13:01,000 Así, unha vez máis, o esqueleto que vimos earlier-- 274 00:13:01,000 --> 00:13:02,480 e teño destaque esta vez int. 275 00:13:02,480 --> 00:13:05,900 E todo este tempo principal ten en realidade, retornou un valor. 276 00:13:05,900 --> 00:13:09,120 Aínda que na maior parte do noso charla exemplos que xamais usados 277 00:13:09,120 --> 00:13:10,990 volver nada na principal. 278 00:13:10,990 --> 00:13:13,710 Acaba de escribir printf preto chaveta e é iso. 279 00:13:13,710 --> 00:13:16,500 Pero de balde, o que o compilador feito para ti, 280 00:13:16,500 --> 00:13:19,510 efectivamente, está retornando 0 para ti. 281 00:13:19,510 --> 00:13:22,950 Acontece out-- e é un pouco counterintuitive-- que 0 é bo. 282 00:13:22,950 --> 00:13:24,690 Iso non significa falso en si. 283 00:13:24,690 --> 00:13:29,080 0 é bo, e calquera non-0 valor, o mundo decidiu, 284 00:13:29,080 --> 00:13:30,619 pode significar un erro. 285 00:13:30,619 --> 00:13:32,910 Entón, se xa mexeu algo no seu ordenador, 286 00:13:32,910 --> 00:13:36,600 ou un programa acaba de morrer en ti e que obteña algunha fiestra incorrecta 287 00:13:36,600 --> 00:13:40,360 na pantalla dicindo erro negativo 49 ou erro 23-- 288 00:13:40,360 --> 00:13:44,170 algúns value-- arbitraria que é por un programador-codificado 289 00:13:44,170 --> 00:13:49,370 un valor como negativo ou positivo 49 23 para representar calquera número, atrévome a dicir, 290 00:13:49,370 --> 00:13:53,340 de 4 millóns de cousas posibles que pode dar mal en un programa. 291 00:13:53,340 --> 00:13:55,700 >> Entón, como eu podería vantaxe deste a min mesmo? 292 00:13:55,700 --> 00:13:58,970 Ben, deixe-me abrir un programa que escribín antes, 293 00:13:58,970 --> 00:14:01,450 e bisbilhotar liña chamado Ola 4. 294 00:14:01,450 --> 00:14:05,650 E é case idéntico, salvo que o ten un pouco de verificación de erros. 295 00:14:05,650 --> 00:14:09,660 Neste caso, eu de novo declarada principal como tendo dous argumentos, 296 00:14:09,660 --> 00:14:13,180 pero esta vez, na liña 17, a notificación Eu estou facendo un pouco de verificación de sanidade. 297 00:14:13,180 --> 00:14:17,100 Estou facendo-se de que argc coincide é igual a 2. 298 00:14:17,100 --> 00:14:18,960 Porque se é, que significa que podo con seguridade 299 00:14:18,960 --> 00:14:21,420 tocar non só soporte 0, pero soporte 1. 300 00:14:21,420 --> 00:14:24,330 E eu vou adiante e imprimir, neste caso, Zamyla ou Rob 301 00:14:24,330 --> 00:14:26,020 ou con calquera palabra que eu escriba. 302 00:14:26,020 --> 00:14:28,020 E agora só para conseguir algo máis axeitada, 303 00:14:28,020 --> 00:14:31,910 Vou volver explicitamente 0 para indicar que todo está ben. 304 00:14:31,910 --> 00:14:33,300 Nada de malo aconteceu. 305 00:14:33,300 --> 00:14:38,590 >> Pero por convención, vou volver 1, ou francamente calquera valor diferente de 0, 306 00:14:38,590 --> 00:14:40,160 si algo dese mal. 307 00:14:40,160 --> 00:14:43,270 Agora, o usuario non vai realmente entender o que está pasando. 308 00:14:43,270 --> 00:14:50,410 En realidade, se eu entrar nese directorio, nós zoom in e fan Ola 4, 309 00:14:50,410 --> 00:14:54,210 ./hello-4 Zamyla compórtase como eu esperaba. 310 00:14:54,210 --> 00:14:58,570 Pero se eu, no canto non escriba nada, nada parece ocorrer, 311 00:14:58,570 --> 00:14:59,680 pero non falla. 312 00:14:59,680 --> 00:15:04,660 E se eu non facer algo como Rob é un inspector 313 00:15:04,660 --> 00:15:07,550 no reparto Thayer-- información arbitraria. 314 00:15:07,550 --> 00:15:13,680 Pero aviso, argv 1, 2, 3, 4, e 5 agora debe existir na memoria. 315 00:15:13,680 --> 00:15:16,540 Isto, tamén, non o que é meu programa de espera, 316 00:15:16,540 --> 00:15:20,300 porque eu teño comprobado se argc coincide é igual a 2 ou non. 317 00:15:20,300 --> 00:15:22,140 Entón, eu estou agora a defensa contra iso. 318 00:15:22,140 --> 00:15:25,290 >> Agora, como un aparte, que o programmer-- ou mellor, o users-- 319 00:15:25,290 --> 00:15:29,670 nunca ver que 0 ou 1, pero utilizando unha ferramenta chamada Debugger, ou outras ferramentas, 320 00:15:29,670 --> 00:15:32,250 como veremos antes tempo, o programador 321 00:15:32,250 --> 00:15:36,590 Pode realmente ver o que se pode pasando mal dentro do seu programa. 322 00:15:36,590 --> 00:15:39,170 >> Entón, calquera dúbida sobre argc? 323 00:15:39,170 --> 00:15:40,873 Si. 324 00:15:40,873 --> 00:15:45,292 >> Audiencia: Vin onde non tiveron o personaxe, [inaudível] 325 00:15:45,292 --> 00:15:49,669 só dixo corda estrela d, como asterisco comas. 326 00:15:49,669 --> 00:15:50,710 Son equivalentes aquí? 327 00:15:50,710 --> 00:15:51,626 >> DAVID Malan: Son. 328 00:15:51,626 --> 00:15:55,080 Entón a pregunta é, ten programas ocasionalmente vistos 329 00:15:55,080 --> 00:15:57,270 así que non forman din soporte secuencia argv 330 00:15:57,270 --> 00:16:01,015 pero dicir algo como carbón soporte estrela argv. 331 00:16:01,015 --> 00:16:03,140 E hai aínda outro variantes que se pode ver. 332 00:16:03,140 --> 00:16:04,264 Son de feito equivalentes. 333 00:16:04,264 --> 00:16:06,240 Por agora temos estes tipo de Rodas pequenas 334 00:16:06,240 --> 00:16:09,737 sobre o xeito de cadea no CS50 biblioteca, pero en pouco máis dunha semana 335 00:16:09,737 --> 00:16:12,570 ou entón nós imos eliminar este obstrución totalmente e efectivamente 336 00:16:12,570 --> 00:16:16,820 ollar para o que o carbón ea estrela son, e como os que se refiren á memoria 337 00:16:16,820 --> 00:16:18,140 representación máis xeral. 338 00:16:18,140 --> 00:16:19,540 Entón, imos volver a iso. 339 00:16:19,540 --> 00:16:21,540 >> Outras preguntas sobre a nosa argv ou argc? 340 00:16:21,540 --> 00:16:22,397 Si. 341 00:16:22,397 --> 00:16:24,438 Audiencia: Por que volver un erro [inaudível]? 342 00:16:24,438 --> 00:16:27,147 343 00:16:27,147 --> 00:16:29,230 DAVID Malan: Por que fixo iso voltar un erro only-- oh! 344 00:16:29,230 --> 00:16:31,813 No caso anterior, cando foron futzing volta coa memoria, 345 00:16:31,813 --> 00:16:35,110 por que só volverá un erro cando realmente escribiu un número grande? 346 00:16:35,110 --> 00:16:36,620 A resposta curta é que só tivo sorte. 347 00:16:36,620 --> 00:16:39,240 Dun modo xeral, un ordenador aloca memoria en anacos, 348 00:16:39,240 --> 00:16:42,900 e el me deu unha peza grande abondo que Eu fun aínda que, sen ser notado, 349 00:16:42,900 --> 00:16:46,280 de soporte de tocar 2, o soporte 3, soporte de 50, pero así que eu empurre 350 00:16:46,280 --> 00:16:49,080 a miña sorte, eu fun alá do límites do bloque de memoria 351 00:16:49,080 --> 00:16:50,520 o sistema operativo tiña me deu. 352 00:16:50,520 --> 00:16:52,720 E foi aí que axustado para abaixo e dixo: non. 353 00:16:52,720 --> 00:16:54,580 Erro de segmentación. 354 00:16:54,580 --> 00:16:55,692 Si. 355 00:16:55,692 --> 00:16:58,890 >> Audiencia: Como funciona o ordenador saber o valor de argc? 356 00:16:58,890 --> 00:17:02,390 >> DAVID Malan: Como é que o ordenador sabe o valor de argc? 357 00:17:02,390 --> 00:17:07,920 Cando executa un programa, este programa, pola natureza da solicitude de palpebrar, 358 00:17:07,920 --> 00:17:11,359 se entrega a matriz de palabras que foron escritas 359 00:17:11,359 --> 00:17:13,300 na liña, que era ingresaran no prompt. 360 00:17:13,300 --> 00:17:16,569 E así é o seu funcionamento sistema que esencialmente 361 00:17:16,569 --> 00:17:20,329 enche os argumentos de principais para ti. 362 00:17:20,329 --> 00:17:22,829 Entón ese é un dos servizos que recibe, máis ou menos en segredo 363 00:17:22,829 --> 00:17:24,869 debaixo da capa de un sistema operativo. 364 00:17:24,869 --> 00:17:27,118 Outras cuestións? 365 00:17:27,118 --> 00:17:27,618 Si. 366 00:17:27,618 --> 00:17:29,787 >> Audiencia: Qué dump de memoria significa? 367 00:17:29,787 --> 00:17:31,370 DAVID Malan: Qué dump de memoria significa? 368 00:17:31,370 --> 00:17:32,950 Así que esta é unha boa pregunta. 369 00:17:32,950 --> 00:17:35,312 E déixeme volver este directorio aquí. 370 00:17:35,312 --> 00:17:37,270 E vai entender que Eu teño un novo ficheiro alí. 371 00:17:37,270 --> 00:17:41,670 É, en realidade chámase núcleo, e é en realidade, normalmente un arquivo de tamaño decente. 372 00:17:41,670 --> 00:17:45,300 Isto é esencialmente unha instantánea de o contido da memoria do meu programa 373 00:17:45,300 --> 00:17:46,902 ou RAM cando caeu. 374 00:17:46,902 --> 00:17:49,110 E iso vai ser útil, potencialmente, diagnosticamente, 375 00:17:49,110 --> 00:17:52,850 unha vez que se fala nunha charla futuro e sección sobre a depuración, 376 00:17:52,850 --> 00:17:55,730 porque realmente pode facer o equivalente a unha autopsia dixitais 377 00:17:55,730 --> 00:18:00,300 nese arquivo para axudar a descubrir o que fixo de malo no seu programa. 378 00:18:00,300 --> 00:18:01,220 Si. 379 00:18:01,220 --> 00:18:04,450 >> Audiencia: É argc unha orde no si mesmo, ou pode nomealo de algo? 380 00:18:04,450 --> 00:18:05,575 >> DAVID Malan: Boa pregunta. 381 00:18:05,575 --> 00:18:08,040 Argc é unha orde, en si, ou pode chamalo de algo? 382 00:18:08,040 --> 00:18:09,290 Definitivamente non é un comando. 383 00:18:09,290 --> 00:18:13,500 É simplemente unha variable de nome ou o nome dun argumento, 384 00:18:13,500 --> 00:18:15,481 e de xeito absolutamente nós podería chamar este foo, 385 00:18:15,481 --> 00:18:18,480 poderiamos chamar este bar, que tenden ser o go-to palabras que un ordenador 386 00:18:18,480 --> 00:18:19,860 científico vai. 387 00:18:19,860 --> 00:18:22,820 Pero, por convención, usan argc e argv. 388 00:18:22,820 --> 00:18:25,360 Pero isto é só un ser humano convención, nada máis. 389 00:18:25,360 --> 00:18:25,860 Todo correcto. 390 00:18:25,860 --> 00:18:28,140 Así acaba, eu estiven contando un pouco de lie-- branco 391 00:18:28,140 --> 00:18:31,264 e, a verdade, no futuro, verá vimos dicir outras mentiras brancas. 392 00:18:31,264 --> 00:18:33,510 Pero, por agora, imos para pelar un destes. 393 00:18:33,510 --> 00:18:37,310 Neste caso aquí, cando anteriormente correu un programa como ./hello ou ./hello-3 394 00:18:37,310 --> 00:18:42,780 Zamyla tivemos o contido do meu memoria do ordenador a buscar máis ou menos como 395 00:18:42,780 --> 00:18:43,280 este. 396 00:18:43,280 --> 00:18:45,070 Pero lembre que unha cadea é. 397 00:18:45,070 --> 00:18:49,279 O que dixemos hai unha semana que un corda realmente é debaixo do capó? 398 00:18:49,279 --> 00:18:50,320 Audiencia: matriz de caracteres. 399 00:18:50,320 --> 00:18:52,111 DAVID Malan: É unha matriz de caracteres, non? 400 00:18:52,111 --> 00:18:55,760 Así, poderiamos ter unha matriz de cadeas, pero, á súa vez, unha cadea 401 00:18:55,760 --> 00:18:57,150 é un array de caracteres. 402 00:18:57,150 --> 00:19:00,010 Entón, se eu realmente quero ser anal cando aproveitar esta foto, 403 00:19:00,010 --> 00:19:03,290 Realmente debería estar chegando algo máis así, 404 00:19:03,290 --> 00:19:08,000 polo que, en cada unha delas índices de miña matriz argv, 405 00:19:08,000 --> 00:19:11,432 non é en si toda unha serie que está nunha matriz. 406 00:19:11,432 --> 00:19:13,140 E agora a mentira estamos dicindo hoxe 407 00:19:13,140 --> 00:19:15,181 é que a imaxe non mira como esta. 408 00:19:15,181 --> 00:19:19,110 De feito, os pequenos cadrados son normalmente fóra dos grandes rectángulos 409 00:19:19,110 --> 00:19:19,610 Alí. 410 00:19:19,610 --> 00:19:21,280 Pero imos voltar a iso en pouco tempo. 411 00:19:21,280 --> 00:19:25,440 Pero iso é ./hello barra invertida 0, que sendo o carácter especial que 412 00:19:25,440 --> 00:19:28,310 demarca o fin dunha secuencia de caracteres, e temos outro despois 413 00:19:28,310 --> 00:19:29,360 Nome do Zamyla. 414 00:19:29,360 --> 00:19:30,900 Entón o que significa isto? 415 00:19:30,900 --> 00:19:33,410 >> Ben, deixe-me ir adiante e abre-se dous outros exemplos 416 00:19:33,410 --> 00:19:35,220 que están dispoñibles en liña. 417 00:19:35,220 --> 00:19:40,590 Un chámase argv1.c e outro é argv2. 418 00:19:40,590 --> 00:19:44,260 É un programa super-sinxelo que é diferente de programas anteriores 419 00:19:44,260 --> 00:19:47,260 en que agora está a usar argc e argv aquí. 420 00:19:47,260 --> 00:19:54,300 E agora eu estou integrando-se con un loop na liña 18, a partir de i = 0 en ata ARGC. 421 00:19:54,300 --> 00:19:56,850 E que é o que eu vou facer con esta liña de código aquí? 422 00:19:56,850 --> 00:19:58,270 En inglés. 423 00:19:58,270 --> 00:20:00,510 Isto, obviamente, demostra a utilización de argc. 424 00:20:00,510 --> 00:20:03,670 Pero en inglés, o que fai Que facer se eu executar este programa? 425 00:20:03,670 --> 00:20:04,366 Si? 426 00:20:04,366 --> 00:20:07,386 >> Audiencia: Vai imprimir o seu pantalla cantas veces quixer. 427 00:20:07,386 --> 00:20:08,260 DAVID Malan: Exactamente. 428 00:20:08,260 --> 00:20:10,480 Entón o que palabras I escriba na liña de comandos, é 429 00:20:10,480 --> 00:20:13,120 vai regurgitar los para min un por liña. 430 00:20:13,120 --> 00:20:14,370 Entón, imos seguir adiante e facelo. 431 00:20:14,370 --> 00:20:17,862 Déixeme ir ao meu directorio e fan ./argv1 argv1. 432 00:20:17,862 --> 00:20:20,521 433 00:20:20,521 --> 00:20:21,770 E agora, imos mantelo simple. 434 00:20:21,770 --> 00:20:23,834 Imos facer nada en primeiro lugar. 435 00:20:23,834 --> 00:20:26,750 Fixo imprimir unha cousa, e que é de feito o nome do programa, 436 00:20:26,750 --> 00:20:28,240 porque é na franxa 0. 437 00:20:28,240 --> 00:20:33,290 Se eu agora dicir foo, que vai facer aqueles dous, e se eu digo bar foo, 438 00:20:33,290 --> 00:20:35,580 vai dicir estas tres cousas. 439 00:20:35,580 --> 00:20:37,740 Agora que é un pouco interesante, quizais. 440 00:20:37,740 --> 00:20:41,450 Pero lembre que argv é unha matriz de cadeas, 441 00:20:41,450 --> 00:20:45,960 pero unha cadea é un array de caracteres, para que poidamos levar as cousas por riba de un entalhe 442 00:20:45,960 --> 00:20:48,560 e aplicar ese básica lóxica e facer o código que 443 00:20:48,560 --> 00:20:51,160 parece un pouco máis crítico, en realidade. 444 00:20:51,160 --> 00:20:53,540 Pero por un aninhado loop, algo semellante 445 00:20:53,540 --> 00:20:57,030 para o que pode lembrar de Mario, por exemplo, se o fixo deste xeito. 446 00:20:57,030 --> 00:21:00,380 >> Entón agora notar na liña 19, eu son novo a iteración sobre os meus argumentos, 447 00:21:00,380 --> 00:21:02,410 de 0 a ata ARGC. 448 00:21:02,410 --> 00:21:05,510 E agora, en liña 21-- estou préstamo de un truco de última week-- 449 00:21:05,510 --> 00:21:11,090 Estou comprobando o que é o lonxitude de soporte argv i. 450 00:21:11,090 --> 00:21:12,920 Eu son almacenar esa resposta no n. 451 00:21:12,920 --> 00:21:18,230 E entón eu estou integrando desde j en ata n, onde j é inicializar a 0. 452 00:21:18,230 --> 00:21:19,460 Entón, convención para a conta. 453 00:21:19,460 --> 00:21:22,335 Xa que usou i, se ten un loop aninhado, non pode usar i novo, 454 00:21:22,335 --> 00:21:25,770 se non vai espancar, potencialmente, o valor fóra do loop interno. 455 00:21:25,770 --> 00:21:27,200 Entón, eu estou usando j por convención. 456 00:21:27,200 --> 00:21:28,020 Podemos usar k. 457 00:21:28,020 --> 00:21:31,080 Se ten máis de k, probablemente ten moito asentamento, normalmente. 458 00:21:31,080 --> 00:21:33,800 Pero agora, teña en conta a miña printf A liña é un pouco diferente. 459 00:21:33,800 --> 00:21:37,520 Eu non estou imprimindo% s, estou imprimir c%, o que, evidentemente, 460 00:21:37,520 --> 00:21:39,460 é un espazo reservado para un char. 461 00:21:39,460 --> 00:21:40,770 >> E agora observe esta sintaxe. 462 00:21:40,770 --> 00:21:41,270 Novo. 463 00:21:41,270 --> 00:21:42,630 Non vimos isto antes. 464 00:21:42,630 --> 00:21:47,290 Pero, loxicamente, isto significa só obter a secuencia om en argv 465 00:21:47,290 --> 00:21:50,067 e obter o j o que? 466 00:21:50,067 --> 00:21:50,900 Audiencia: Personaxe. 467 00:21:50,900 --> 00:21:52,800 DAVID Malan: Personaxe en que secuencia. 468 00:21:52,800 --> 00:21:57,100 Entón, usando corchetes seguido por corchetes, 469 00:21:57,100 --> 00:22:00,390 este é o mergullo primeiro en cadeas de argv, 470 00:22:00,390 --> 00:22:02,225 e, a continuación, o segundo corchetes con j 471 00:22:02,225 --> 00:22:06,580 é mergullar nos personaxes de que determinada secuencia en argv. 472 00:22:06,580 --> 00:22:09,562 E entón, só para unha boa medida, Estou imprimindo unha nova liña aquí. 473 00:22:09,562 --> 00:22:12,020 Entón, agora deixe-me ir adiante e abrir unha fiestra un pouco maior 474 00:22:12,020 --> 00:22:13,600 así que podemos ver iso en acción. 475 00:22:13,600 --> 00:22:15,700 Déixeme ir esa carpeta. 476 00:22:15,700 --> 00:22:22,550 E agora fan argv-2-- whoops-- facer argv-2, ./argv 2. 477 00:22:22,550 --> 00:22:23,110 Intro. 478 00:22:23,110 --> 00:22:24,860 E é algo difícil ler vertical, 479 00:22:24,860 --> 00:22:27,920 pero iso é en realidade o nome do programa, seguido por unha liña en branco. 480 00:22:27,920 --> 00:22:30,210 Agora, deixe-me ir adiante e facer foo. 481 00:22:30,210 --> 00:22:33,210 Igualmente difícil de ler, pero é en realidade imprimir un carácter por liña. 482 00:22:33,210 --> 00:22:36,780 E se eu fai bar, é agora imprimir os liña por liña. 483 00:22:36,780 --> 00:22:40,140 Así, o takeaway aquí non é tanto que, wow, mirar para este novo truco 484 00:22:40,140 --> 00:22:44,750 onde pode obter o contido de caracteres específicos dunha matriz, 485 00:22:44,750 --> 00:22:48,380 pero como estamos tomando estes básico ideas como a indexación nunha matriz, 486 00:22:48,380 --> 00:22:51,620 e logo, a indexación nunha matriz que estaba nesa matriz, 487 00:22:51,620 --> 00:22:56,180 e só aplicar as mesmas ideas para exemplos lixeiramente máis sofisticados. 488 00:22:56,180 --> 00:22:59,560 Pero o básico realmente non ten modificado, mesmo desde a semana pasada. 489 00:22:59,560 --> 00:23:02,350 >> Agora, esta é unha especie de oportuna, en que, lembre, a semana de cero 490 00:23:02,350 --> 00:23:04,110 xogamos cunha axenda telefónica como esta. 491 00:23:04,110 --> 00:23:06,670 E aínda que este é, obviamente, pezas físicas do papel, 492 00:23:06,670 --> 00:23:09,150 pode tipo de pensar unha lista telefónica como unha matriz. 493 00:23:09,150 --> 00:23:12,770 Certamente, se fose para reimplementar este pezas destes anacos de papel 494 00:23:12,770 --> 00:23:15,260 nun ordenador, probablemente usaría algo 495 00:23:15,260 --> 00:23:20,270 como unha matriz para almacenar todos aqueles nomes e números dunha todo o camiño 496 00:23:20,270 --> 00:23:23,800 a Z. Entón, iso é bo, porque permítenos unha oportunidade, 497 00:23:23,800 --> 00:23:28,310 quizais, a pensar en como pode realmente implementar algo parecido. 498 00:23:28,310 --> 00:23:31,250 Igual que unha serie de portas aquí. 499 00:23:31,250 --> 00:23:36,380 Entón, se eu could-- necesitamos unha voluntarios que se aproximase. 500 00:23:36,380 --> 00:23:36,980 Imos ver. 501 00:23:36,980 --> 00:23:40,650 Unha cara descoñecida quizais rostro descoñecido, quizais. 502 00:23:40,650 --> 00:23:42,090 Como sobre a laranxa? 503 00:23:42,090 --> 00:23:42,680 Aquí. 504 00:23:42,680 --> 00:23:45,870 Camisa laranxa, imos cara arriba. 505 00:23:45,870 --> 00:23:52,230 >> Imos adiante agora e movemento estas portas ao lado, 506 00:23:52,230 --> 00:23:54,020 mover los para fora do camiño por un momento. 507 00:23:54,020 --> 00:23:56,600 508 00:23:56,600 --> 00:23:57,760 Cal é o seu nome? 509 00:23:57,760 --> 00:23:58,580 >> Ajay: 510 00:23:58,580 --> 00:23:58,655 >> DAVID Malan: Ajay. 511 00:23:58,655 --> 00:23:58,680 David. 512 00:23:58,680 --> 00:23:59,451 Pracer en coñece-lo. 513 00:23:59,451 --> 00:23:59,950 Todo correcto. 514 00:23:59,950 --> 00:24:04,500 Polo tanto, temos detrás destas seis portas dixitalmente no screen-- 515 00:24:04,500 --> 00:24:07,810 Ou mellor, sete portas no screen-- unha morea de números. 516 00:24:07,810 --> 00:24:10,099 E eu lle dixen nada en advance-- acordo? 517 00:24:10,099 --> 00:24:11,140 Ajay: Nada de antelación. 518 00:24:11,140 --> 00:24:14,730 DAVID Malan: Todo o que quero que faga agora é atopar a min, e para nós, 519 00:24:14,730 --> 00:24:20,920 realmente, o número 50, un paso de cada vez. 520 00:24:20,920 --> 00:24:21,830 >> Ajay: Número 50? 521 00:24:21,830 --> 00:24:22,580 >> DAVID Malan: Número 50. 522 00:24:22,580 --> 00:24:24,746 E pode revelar o que está detrás de cada unha destas portas 523 00:24:24,746 --> 00:24:27,930 simplemente tocando o con un dedo. 524 00:24:27,930 --> 00:24:31,364 Caramba. [Risas] 525 00:24:31,364 --> 00:24:34,560 >> [Aplausos] 526 00:24:34,560 --> 00:24:39,540 >> Moi ben feito. 527 00:24:39,540 --> 00:24:40,400 Está ben. 528 00:24:40,400 --> 00:24:44,090 Temos un fermoso agasallo premio para ti aquí. 529 00:24:44,090 --> 00:24:46,520 A súa elección de películas que discutido a semana pasada. 530 00:24:46,520 --> 00:24:47,362 >> Ajay: Oh, cara. 531 00:24:47,362 --> 00:24:49,050 Oh, eu nunca vin Spaceballs. 532 00:24:49,050 --> 00:24:49,520 >> DAVID Malan: Spaceballs. 533 00:24:49,520 --> 00:24:50,140 Todo correcto. 534 00:24:50,140 --> 00:24:53,790 Polo tanto, manteña en só un momento. 535 00:24:53,790 --> 00:24:57,430 How-- imos facelo un moment-- ensinável 536 00:24:57,430 --> 00:25:00,412 como é que vai facer sobre atopar o número 50? 537 00:25:00,412 --> 00:25:01,370 Ajay: Eu escollín aleatoriamente. 538 00:25:01,370 --> 00:25:03,420 DAVID Malan: Entón escolleu azar e tivo sorte. 539 00:25:03,420 --> 00:25:03,790 Ajay: Si. 540 00:25:03,790 --> 00:25:04,456 DAVID Malan: Aceptar. 541 00:25:04,456 --> 00:25:05,050 Excelente. 542 00:25:05,050 --> 00:25:08,470 Entón, agora, se non tivese tido sorte, o que máis 543 00:25:08,470 --> 00:25:10,210 podería acontecer detrás desas portas? 544 00:25:10,210 --> 00:25:12,930 Entón, se eu ir adiante e revelar estes números aquí, 545 00:25:12,930 --> 00:25:15,180 realmente están en orde aleatoria. 546 00:25:15,180 --> 00:25:17,750 E o mellor que pode ter feito, a verdade, é de, en última instancia, 547 00:25:17,750 --> 00:25:19,410 no peor dos casos, alomenos todos eles. 548 00:25:19,410 --> 00:25:23,000 Entón tes super-sorte, o que Non é o que chamaría de un algoritmo. 549 00:25:23,000 --> 00:25:24,730 Si, parabéns. 550 00:25:24,730 --> 00:25:27,010 Pero agora let's-- humor min, se puidese. 551 00:25:27,010 --> 00:25:28,310 Imos para esta guía aquí. 552 00:25:28,310 --> 00:25:31,460 E aquí están os números en clara o que parece ser unha orde aleatoria, 553 00:25:31,460 --> 00:25:32,280 e eles foron. 554 00:25:32,280 --> 00:25:35,160 Pero agora, se eu en vez reivindicación que detrás desas portas 555 00:25:35,160 --> 00:25:39,070 son números que son clasificados. 556 00:25:39,070 --> 00:25:41,780 O obxectivo agora é tamén atopar-nos no número 50. 557 00:25:41,780 --> 00:25:45,910 Pero facelo a través de algoritmos e di-nos como está indo con iso. 558 00:25:45,910 --> 00:25:48,020 E se atopala, a manter a película. 559 00:25:48,020 --> 00:25:49,520 Non atopalo, darlle de volta. 560 00:25:49,520 --> 00:25:52,720 561 00:25:52,720 --> 00:25:58,112 Ajay: Entón, eu vou dar un ollo nos extremos en primeiro lugar, para determinar se there's-- 562 00:25:58,112 --> 00:26:02,048 [Risas e aplausos] 563 00:26:02,048 --> 00:26:04,451 564 00:26:04,451 --> 00:26:05,492 DAVID Malan: Velaquí. 565 00:26:05,492 --> 00:26:17,080 566 00:26:17,080 --> 00:26:21,700 Imos dar un ollo a un dos antecesores de Ajay, 567 00:26:21,700 --> 00:26:25,450 Sean, que non foi tan afortunado. 568 00:26:25,450 --> 00:26:28,670 OK, así que a súa tarefa aquí, Sean, é o seguinte. 569 00:26:28,670 --> 00:26:32,970 Eu escondín detrás destes portas do número sete, 570 00:26:32,970 --> 00:26:37,200 pero escondido nalgunhas desas portas tamén son outros números non-negativos. 571 00:26:37,200 --> 00:26:40,730 E o seu obxectivo é pensar desta liña superior de números como só unha matriz. 572 00:26:40,730 --> 00:26:43,590 Somos só unha secuencia de pezas de papel cos números detrás delas. 573 00:26:43,590 --> 00:26:47,640 E o seu obxectivo é, usando só o principio matriz aquí, atopar-me o número sete. 574 00:26:47,640 --> 00:26:51,200 E nós estamos indo axiña para criticar como vai facer sobre iso. 575 00:26:51,200 --> 00:26:52,920 Atopar-nos o número sete, por favor. 576 00:26:52,920 --> 00:27:02,570 577 00:27:02,570 --> 00:27:03,070 N º 578 00:27:03,070 --> 00:27:06,760 579 00:27:06,760 --> 00:27:08,179 5, 19, 13. 580 00:27:08,179 --> 00:27:16,752 581 00:27:16,752 --> 00:27:17,835 Non é unha pregunta capciosa. 582 00:27:17,835 --> 00:27:21,420 583 00:27:21,420 --> 00:27:21,920 1. 584 00:27:21,920 --> 00:27:26,715 585 00:27:26,715 --> 00:27:29,840 Neste punto, a súa puntuación non é moi bo, entón pode moi ben seguir. 586 00:27:29,840 --> 00:27:32,870 587 00:27:32,870 --> 00:27:33,370 3. 588 00:27:33,370 --> 00:27:38,570 589 00:27:38,570 --> 00:27:39,802 Dalle. 590 00:27:39,802 --> 00:27:42,510 Francamente, eu non podo axudar, pero pregunta o que está mesmo a pensar. 591 00:27:42,510 --> 00:27:44,990 >> SEAN: Podo tomar só o principio de liña. 592 00:27:44,990 --> 00:27:46,240 DAVID Malan: Só a liña superior. 593 00:27:46,240 --> 00:27:47,281 Entón tes tres esquerda. 594 00:27:47,281 --> 00:27:48,310 Entón, atopar-me 7. 595 00:27:48,310 --> 00:27:54,758 596 00:27:54,758 --> 00:27:59,141 >> [Audiencia berros SUXESTIÓNS] 597 00:27:59,141 --> 00:28:22,210 598 00:28:22,210 --> 00:28:26,130 Así, estes dous eran incrible por razóns moi diferentes. 599 00:28:26,130 --> 00:28:29,150 Polo tanto, este é o lugar onde nós parou un instante atrás, 600 00:28:29,150 --> 00:28:32,530 ea introspección clave aquí foi estas portas tiñan números 601 00:28:32,530 --> 00:28:37,390 detrás deles, que foron clasificadas, o ideal takeaway para que é que pode facer 602 00:28:37,390 --> 00:28:39,670 fundamentalmente mellor Nesta segunda example-- 603 00:28:39,670 --> 00:28:42,380 e, de feito, que foi de Sean primeiro intento con números aleatorios 604 00:28:42,380 --> 00:28:45,460 así como antes-- pero así como eses números son clasificadas, 605 00:28:45,460 --> 00:28:47,980 moi parecido ao libro de teléfono, o que pode, obviamente, facer? 606 00:28:47,980 --> 00:28:50,090 Ou como pode aproveitar este coñecemento? 607 00:28:50,090 --> 00:28:51,530 Si. 608 00:28:51,530 --> 00:28:54,910 >> Audiencia: Vai no medio do camiño [inaudível]. 609 00:28:54,910 --> 00:28:55,660 DAVID Malan: Yeah. 610 00:28:55,660 --> 00:28:56,160 Exactamente. 611 00:28:56,160 --> 00:28:59,680 Entón instinto inicial de Ajay foi para comprobar os extremos, se ben me lembra, 612 00:28:59,680 --> 00:29:02,320 e entón nós medio que acaba o exemplo rapidamente. 613 00:29:02,320 --> 00:29:05,220 Pero se comezamos a facelo máis metodicamente ao longo destas liñas, 614 00:29:05,220 --> 00:29:07,860 pero empezando talvez no medio, porque están ordenados, 615 00:29:07,860 --> 00:29:10,900 así que revelan a número 16, que, polo tanto, sabe-- 616 00:29:10,900 --> 00:29:14,850 e imos facer exactamente que-- nós polo tanto, saber que o 50, no caso de hoxe, 617 00:29:14,850 --> 00:29:16,080 ten que ser á dereita. 618 00:29:16,080 --> 00:29:18,735 Así como a semana cero cando que resgou o libro de teléfono pola metade 619 00:29:18,735 --> 00:29:21,490 e xogou a metade do problema de distancia, mesma idea aquí. 620 00:29:21,490 --> 00:29:23,680 Podemos xogar nesta parte do problema de distancia. 621 00:29:23,680 --> 00:29:25,730 E, probablemente, o que pode facer a través de algoritmos, 622 00:29:25,730 --> 00:29:28,710 cando vostede sabe que o 50 debe ser á dereita, se é en calquera lugar, 623 00:29:28,710 --> 00:29:31,390 é tentar alí, no medio das restantes portas. 624 00:29:31,390 --> 00:29:33,450 Por suposto, o 50 é maior de 42, para que poidamos 625 00:29:33,450 --> 00:29:36,060 xogar este remanente trimestre do problema de distancia, 626 00:29:36,060 --> 00:29:38,510 e, finalmente, identificar algo así como 50. 627 00:29:38,510 --> 00:29:41,050 Pero, así como co lista telefónica, eses números 628 00:29:41,050 --> 00:29:44,560 foron dadas a nós xa en orde de clasificación, o que nos deixa 629 00:29:44,560 --> 00:29:47,450 coa cuestión, como facer as cousas en orde de clasificación? 630 00:29:47,450 --> 00:29:49,640 E, francamente, a que custo? 631 00:29:49,640 --> 00:29:51,390 É unha cousa para ser entregou o libro de teléfono 632 00:29:51,390 --> 00:29:54,810 e impresionar os seus amigos por atopar un número de teléfono moi rapidamente, non? 633 00:29:54,810 --> 00:29:58,520 Rasgar 32 páxinas para atopar un persoa de 4 mil millóns de páxinas, 634 00:29:58,520 --> 00:30:00,470 dixemos foi un exemplo extremo. 635 00:30:00,470 --> 00:30:03,320 Pero canto tempo tardou Verizon para ordenar que o libro de teléfono? 636 00:30:03,320 --> 00:30:06,170 Canto tempo tardou para nós para clasificar estes sete números? 637 00:30:06,170 --> 00:30:10,110 Esta é unha pregunta que temos ata agora totalmente ignorado. 638 00:30:10,110 --> 00:30:12,330 >> Entón, imos responder a esta pregunta agora. 639 00:30:12,330 --> 00:30:15,920 E estamos todos de películas agora, pero temos algunhas bolas de estrés. 640 00:30:15,920 --> 00:30:19,480 Se, por exemplo, oito voluntarios Non me importaría unirse a nós aquí enriba? 641 00:30:19,480 --> 00:30:24,100 Imos adiante e facer, como sobre vostedes catro, tres de vós aquí? 642 00:30:24,100 --> 00:30:25,290 Vexa algunhas caras novas. 643 00:30:25,290 --> 00:30:27,220 E os catro de alí? 644 00:30:27,220 --> 00:30:30,760 E agora-- non imos viés aqui-- e número oito alí ao final. 645 00:30:30,760 --> 00:30:32,060 Imos cara arriba. 646 00:30:32,060 --> 00:30:32,560 Todo correcto. 647 00:30:32,560 --> 00:30:37,480 Entón o que temos aquí para cada un de vós é un número. 648 00:30:37,480 --> 00:30:40,055 Se quere ir adiante, cara este número. 649 00:30:40,055 --> 00:30:40,763 Cal é o seu nome? 650 00:30:40,763 --> 00:30:41,950 >> Artie: Artie. 651 00:30:41,950 --> 00:30:43,100 >> DAVID Malan: Artie, ok. 652 00:30:43,100 --> 00:30:44,297 Vostede é o número 1. 653 00:30:44,297 --> 00:30:45,310 >> Amin: Amin. 654 00:30:45,310 --> 00:30:46,060 DAVID Malan: Amin. 655 00:30:46,060 --> 00:30:46,820 David. 656 00:30:46,820 --> 00:30:47,530 Vostede é o número 2. 657 00:30:47,530 --> 00:30:49,100 E vai adiante, como eu entrego que as follas de papel, 658 00:30:49,100 --> 00:30:52,130 aliñan-se diante da música está no mesmo orde como se alí. 659 00:30:52,130 --> 00:30:52,660 >> Andy: Ola, Andy. 660 00:30:52,660 --> 00:30:53,970 >> DAVID Malan: Andy, é bo te ver. 661 00:30:53,970 --> 00:30:54,520 Número 3. 662 00:30:54,520 --> 00:30:55,310 >> JACOB: Jacob. 663 00:30:55,310 --> 00:30:56,760 >> DAVID Malan: Jacob, número 4. 664 00:30:56,760 --> 00:30:57,549 Benvido a bordo. 665 00:30:57,549 --> 00:30:58,090 GRANT: Grant. 666 00:30:58,090 --> 00:30:58,881 DAVID Malan: Grant. 667 00:30:58,881 --> 00:31:00,348 Número 5. 668 00:31:00,348 --> 00:31:01,200 >> Alanna: Alanna. 669 00:31:01,200 --> 00:31:02,766 >> DAVID Malan: Alanna, número 6. 670 00:31:02,766 --> 00:31:03,589 >> FRANCES: Frances. 671 00:31:03,589 --> 00:31:04,880 DAVID Malan: Frances, número 7. 672 00:31:04,880 --> 00:31:05,200 E? 673 00:31:05,200 --> 00:31:05,830 >> RACHEL: Rachel. 674 00:31:05,830 --> 00:31:06,815 >> DAVID Malan: Rachel, número 8. 675 00:31:06,815 --> 00:31:07,100 Todo correcto. 676 00:31:07,100 --> 00:31:08,766 Dalle obter-se, por esta orde. 677 00:31:08,766 --> 00:31:11,440 Deixe-me poñer un remanente música estar no lugar. 678 00:31:11,440 --> 00:31:13,670 Onde é que precisa dun soporte? 679 00:31:13,670 --> 00:31:14,170 Está ben. 680 00:31:14,170 --> 00:31:18,710 Dalle só poñer os seus números onde o público pode velos en, 681 00:31:18,710 --> 00:31:20,340 música estar volto para fóra. 682 00:31:20,340 --> 00:31:27,240 E espero que, o noso primeiro verificación de sanidade aqui-- 4, 2, 6. 683 00:31:27,240 --> 00:31:27,890 Oh-oh. 684 00:31:27,890 --> 00:31:29,070 Espere un minuto. 685 00:31:29,070 --> 00:31:31,140 Non temos un 8. 686 00:31:31,140 --> 00:31:35,180 Necesito despejo-lo do o exemplo de algunha maneira. 687 00:31:35,180 --> 00:31:35,680 N º 688 00:31:35,680 --> 00:31:36,940 Non, iso é OK. 689 00:31:36,940 --> 00:31:37,890 Imos ver. 690 00:31:37,890 --> 00:31:38,880 Podemos facelo. 691 00:31:38,880 --> 00:31:39,440 Estar por. 692 00:31:39,440 --> 00:31:43,970 693 00:31:43,970 --> 00:31:45,740 Alí imos nós. 694 00:31:45,740 --> 00:31:46,800 Correcto. 695 00:31:46,800 --> 00:31:47,360 Todo correcto. 696 00:31:47,360 --> 00:31:50,260 Entón, agora temos 8, 1, 3 7, 5. 697 00:31:50,260 --> 00:31:50,760 Está ben. 698 00:31:50,760 --> 00:31:51,360 Excelente. 699 00:31:51,360 --> 00:31:54,400 >> Polo tanto, a cuestión en apreciado é, en que custo, e vía o que o método, 700 00:31:54,400 --> 00:31:58,580 podemos realmente resolver estes números aquí para que poidamos tipo de traballo cara atrás, 701 00:31:58,580 --> 00:32:02,759 en última instancia, e decide-- é realmente impresionante, é realmente eficiente, 702 00:32:02,759 --> 00:32:04,550 que eu poida dividir e conquistar un libro de teléfono? 703 00:32:04,550 --> 00:32:06,716 Será que é realmente eficaz que Podo dividir e conquistar 704 00:32:06,716 --> 00:32:08,600 estas pezas dixitais de papel no taboleiro, 705 00:32:08,600 --> 00:32:14,500 se cadra iso vai custa-nos fortuna no tempo ou ciclos de enerxía ou de CPU 706 00:32:14,500 --> 00:32:17,340 para realmente obter os nosos datos nalgunha orde de clasificación? 707 00:32:17,340 --> 00:32:18,930 Entón, imos facer esta pregunta. 708 00:32:18,930 --> 00:32:22,077 >> Entón, en primeiro lugar, estas cifras son en orde aleatoria practicamente, 709 00:32:22,077 --> 00:32:24,160 e eu vou propoñer un algoritmo, ou proceso 710 00:32:24,160 --> 00:32:25,970 polo cal podemos clasificar estas persoas. 711 00:32:25,970 --> 00:32:28,100 Vou abordar esta moi inxenuamente. 712 00:32:28,100 --> 00:32:30,730 E eu vou recoñecer que é unha especie de unha chea para min 713 00:32:30,730 --> 00:32:32,890 implicar miña mente en torno á datos enteiros axustar dunha vez. 714 00:32:32,890 --> 00:32:33,640 Pero vostede sabe o que? 715 00:32:33,640 --> 00:32:37,450 Vou facer algunhas correccións marxinais moi sinxelo. 716 00:32:37,450 --> 00:32:41,152 4 e 2 están fóra de orde, se o obxectivo é ir de un a ata 8. 717 00:32:41,152 --> 00:32:41,860 Entón vostede sabe o que? 718 00:32:41,860 --> 00:32:43,776 Vou ter vostede caras cambiar, se cambiar 719 00:32:43,776 --> 00:32:46,380 fisicamente posicións e os anacos de papel. 720 00:32:46,380 --> 00:32:47,894 Agora, 4 e 6, estes son, en orde. 721 00:32:47,894 --> 00:32:49,060 Vou deixar os ser. 722 00:32:49,060 --> 00:32:50,227 6 e 8, aqueles están en orde. 723 00:32:50,227 --> 00:32:51,185 Indo para deixalos ser. 724 00:32:51,185 --> 00:32:52,170 8 e1, fóra de orde. 725 00:32:52,170 --> 00:32:54,790 Se vostedes dous non lle importaría trocar. 726 00:32:54,790 --> 00:32:57,300 Agora 8 e 3, se vostedes poderían cambiar. 727 00:32:57,300 --> 00:32:59,320 8 e 7, se vostedes poderían cambiar. 728 00:32:59,320 --> 00:33:01,790 E 8 e 5, se vostedes poderían cambiar. 729 00:33:01,790 --> 00:33:03,980 >> Agora, eu estou listo? 730 00:33:03,980 --> 00:33:05,200 Non, evidentemente non. 731 00:33:05,200 --> 00:33:07,880 Pero eu fixen o situación mellor, non? 732 00:33:07,880 --> 00:33:09,430 Cal era o seu nome, número 8? 733 00:33:09,430 --> 00:33:10,055 >> RACHEL: Rachel. 734 00:33:10,055 --> 00:33:12,850 DAVID Malan: Entón Rachel ten efectivamente borbulhava moi lonxe, 735 00:33:12,850 --> 00:33:15,660 todo o camiño para a fin de miña matriz de números aquí. 736 00:33:15,660 --> 00:33:17,310 E así que é o tipo de problema resolto. 737 00:33:17,310 --> 00:33:21,670 Agora, claro, dúas aínda que mover un pouco, e 4 e 6 e 1. 738 00:33:21,670 --> 00:33:24,420 Pero paréceme obter un pouco máis preto da solución. 739 00:33:24,420 --> 00:33:26,790 Entón, imos aplicar esta mesma heurística inxenuo novo. 740 00:33:26,790 --> 00:33:27,690 2 e 4, OK. 741 00:33:27,690 --> 00:33:28,810 4 e 6, Aceptar. 742 00:33:28,810 --> 00:33:29,930 6 e 1, mm-mm. 743 00:33:29,930 --> 00:33:32,230 Imos cambiar. 744 00:33:32,230 --> 00:33:33,200 6 e 3, mm-mm. 745 00:33:33,200 --> 00:33:34,420 Imos cambiar. 746 00:33:34,420 --> 00:33:35,580 6 e 7 é OK. 747 00:33:35,580 --> 00:33:36,590 7 e 5, Nope. 748 00:33:36,590 --> 00:33:37,790 Imos cambiar. 749 00:33:37,790 --> 00:33:38,470 E agora 7 e 8. 750 00:33:38,470 --> 00:33:39,862 E cal é o seu nome? 751 00:33:39,862 --> 00:33:40,570 FRANCES: Frances. 752 00:33:40,570 --> 00:33:41,445 DAVID Malan: Frances. 753 00:33:41,445 --> 00:33:44,230 Polo tanto, agora é en Frances mesmo unha mellor posición, porque agora 7 e 8 754 00:33:44,230 --> 00:33:46,440 están correctamente abrollou ata o cumio. 755 00:33:46,440 --> 00:33:47,510 Entón, 2 e 4, OK. 756 00:33:47,510 --> 00:33:48,720 4 e 1, cambio de let. 757 00:33:48,720 --> 00:33:50,410 4 e 3, cambio de let. 758 00:33:50,410 --> 00:33:51,550 4 e 6, está OK. 759 00:33:51,550 --> 00:33:53,340 6 e 5, cambio de let. 760 00:33:53,340 --> 00:33:54,590 E agora estes faces son bos. 761 00:33:54,590 --> 00:33:55,780 Estamos case alí. 762 00:33:55,780 --> 00:33:57,706 2 e 1, fóra de orde, entón cambiar. 763 00:33:57,706 --> 00:33:59,080 E agora déixeme facer unha proba de sanidade. 764 00:33:59,080 --> 00:34:03,080 2 e 3, 3 e 4, 4 e 5, 5 e 6, 6 e 7, 8. 765 00:34:03,080 --> 00:34:05,060 OK, entón estamos a facer. 766 00:34:05,060 --> 00:34:09,310 >> Pero a que prezo fixen Ordenar estas cifras aquí? 767 00:34:09,310 --> 00:34:13,960 Ben, cantos pasos fixen potencialmente levar ao clasificar esas persoas? 768 00:34:13,960 --> 00:34:15,710 Ben, imos voltar a esta pregunta. 769 00:34:15,710 --> 00:34:18,030 Pero, francamente, se ten algo aburrido, que é 770 00:34:18,030 --> 00:34:22,270 tipo de revelar en que iso non era quizais o algoritmo máis eficiente. 771 00:34:22,270 --> 00:34:25,230 E, de feito, a verdade, estou suando aínda máis camiñando cara atrás e cara adiante. 772 00:34:25,230 --> 00:34:26,639 Iso non me sinto especialmente eficiente. 773 00:34:26,639 --> 00:34:27,805 Entón, imos tratar outra cousa. 774 00:34:27,805 --> 00:34:31,870 Se vostedes poderían axustar vos a estes oito valores. 775 00:34:31,870 --> 00:34:32,969 Bo traballo. 776 00:34:32,969 --> 00:34:36,570 >> Imos dar un ollo dixital, para só un momento antes de outra cousa, 777 00:34:36,570 --> 00:34:38,179 co que acababa de acontecer. 778 00:34:38,179 --> 00:34:41,330 Ata aquí, está a piques de ver unha visualización destes oito seres humanos 779 00:34:41,330 --> 00:34:44,719 cal azul e vermello barras representan números. 780 00:34:44,719 --> 00:34:46,670 O máis alto do bar, canto maior sexa o número. 781 00:34:46,670 --> 00:34:48,510 Canto máis curto o bar, canto menor sexa o número. 782 00:34:48,510 --> 00:34:51,560 E o que vai ver é en azar máis que oito deles. 783 00:34:51,560 --> 00:34:55,830 Vai ver estas barras sendo clasificado por ese mesmo algoritmo, 784 00:34:55,830 --> 00:34:59,890 ou un conxunto de instrucións, o cal imos chamar adiante bubble sort. 785 00:34:59,890 --> 00:35:04,000 Entón, observe, cada segundo ou así, dous bares están acendendo en vermello, 786 00:35:04,000 --> 00:35:05,590 están a ser comparados polo ordenador. 787 00:35:05,590 --> 00:35:08,630 E entón, se o gran bar eo pequeno bar están fóra de orde, 788 00:35:08,630 --> 00:35:11,220 están sendo trocados por min. 789 00:35:11,220 --> 00:35:15,120 >> Agora iso é incrible entediante para asistir a este, certamente, 790 00:35:15,120 --> 00:35:18,630 por moito tempo, pero observar o takeaway-- grandes bares que se cambiar para a dereita, 791 00:35:18,630 --> 00:35:20,460 pequenos bares que se desprazan á esquerda. 792 00:35:20,460 --> 00:35:23,380 Imos abortar este proceso e acelerar o proceso 793 00:35:23,380 --> 00:35:27,330 ser moito máis rápido, para que poidamos ter unha noción de alto nivel que, 794 00:35:27,330 --> 00:35:29,970 de feito, bubble sort está facendo. 795 00:35:29,970 --> 00:35:33,150 En realidade, está borbulhando ata a lado dereito da lista, 796 00:35:33,150 --> 00:35:35,260 ou a matriz, as barras maiores. 797 00:35:35,260 --> 00:35:40,020 E, inversamente, os pequenos bares están burbullas seu camiño cara á esquerda, 798 00:35:40,020 --> 00:35:42,950 aínda que a un ritmo máis rápido do que xa fixo. 799 00:35:42,950 --> 00:35:45,850 Entón, máis difícil de ver cos seres humanos, pero visualmente que é de feito o que 800 00:35:45,850 --> 00:35:46,540 estaba a ocorrer. 801 00:35:46,540 --> 00:35:49,110 >> Pero imos tratar unha fundamentalmente visión diferente agora. 802 00:35:49,110 --> 00:35:52,387 Imos tentar un distinto algoritmo polo cal temos que 803 00:35:52,387 --> 00:35:59,640 caras comezan nestes orixinais posicións, o que foi esta orde. 804 00:35:59,640 --> 00:36:00,827 E imos adiante agora. 805 00:36:00,827 --> 00:36:02,910 E eu vou facer algo aínda máis sinxelo, non? 806 00:36:02,910 --> 00:36:06,710 En retrospectiva, o intercambio de parellas novo e, de novo, case un pouco intelixente. 807 00:36:06,710 --> 00:36:10,460 Imos facer as cousas aínda máis inxenuamente, onde se quere clasificar estas persoas, 808 00:36:10,460 --> 00:36:12,560 déixeme seguir buscando para o elemento máis pequeno. 809 00:36:12,560 --> 00:36:14,570 Entón, agora, é o 4 menor número que eu xa vin. 810 00:36:14,570 --> 00:36:15,695 Vou me lembrar diso. 811 00:36:15,695 --> 00:36:17,750 Non, dous é mellor, e lembre-se diso. 812 00:36:17,750 --> 00:36:20,730 1 é aínda máis reducida. 813 00:36:20,730 --> 00:36:21,970 3, 7, 5. 814 00:36:21,970 --> 00:36:22,470 Está ben. 815 00:36:22,470 --> 00:36:23,750 Um-- cal é o seu nome? 816 00:36:23,750 --> 00:36:24,400 >> Artie: Artie. 817 00:36:24,400 --> 00:36:24,610 >> DAVID Malan: Artie. 818 00:36:24,610 --> 00:36:25,460 Entón, Artie, vai adiante. 819 00:36:25,460 --> 00:36:27,043 Vou puxa-lo para fóra da liña. 820 00:36:27,043 --> 00:36:28,400 Se puidese volver aquí. 821 00:36:28,400 --> 00:36:30,790 E eu teño para facer o cuarto para el. 822 00:36:30,790 --> 00:36:32,040 Temos un punto de decisión aquí. 823 00:36:32,040 --> 00:36:36,000 Como podemos dar espazo para Artie aquí en principio, onde o número 1 pertence? 824 00:36:36,000 --> 00:36:36,770 >> Audiencia: Shift. 825 00:36:36,770 --> 00:36:38,950 >> DAVID Malan: OK, nós podería cambiar todo. 826 00:36:38,950 --> 00:36:40,860 Pero propoñer unha optimización. 827 00:36:40,860 --> 00:36:43,410 Isto parece un pouco aburrido para min pedir catro persoas 828 00:36:43,410 --> 00:36:44,620 para mover todo o camiño. 829 00:36:44,620 --> 00:36:45,520 Que máis podería facer? 830 00:36:45,520 --> 00:36:46,360 >> Audiencia: muda-los. 831 00:36:46,360 --> 00:36:46,850 >> DAVID Malan: muda-los. 832 00:36:46,850 --> 00:36:47,900 E cal é o seu nome? 833 00:36:47,900 --> 00:36:48,441 >> JACOB: Jacob. 834 00:36:48,441 --> 00:36:50,330 DAVID Malan: Jacob, mover. 835 00:36:50,330 --> 00:36:54,440 Moito máis eficiente só de ter Lugares de intercambio Jacob con Artie, 836 00:36:54,440 --> 00:36:56,710 en oposición a forzar todas estas catro persoas, 837 00:36:56,710 --> 00:36:58,734 moitas grazas, a súa posición correcta. 838 00:36:58,734 --> 00:37:01,150 Que é agradable sobre Artie agora, está na súa posición correcta. 839 00:37:01,150 --> 00:37:02,060 Imos facer iso de novo. 840 00:37:02,060 --> 00:37:03,730 2, que é o menor número que eu xa vin. 841 00:37:03,730 --> 00:37:05,690 3, 7, 5. 842 00:37:05,690 --> 00:37:06,190 Está ben. 843 00:37:06,190 --> 00:37:07,467 2 é sempre menor. 844 00:37:07,467 --> 00:37:08,550 Non ten que facer ningún traballo. 845 00:37:08,550 --> 00:37:09,320 Imos facer iso de novo. 846 00:37:09,320 --> 00:37:10,070 6. 847 00:37:10,070 --> 00:37:10,640 Menor? 848 00:37:10,640 --> 00:37:11,140 8. 849 00:37:11,140 --> 00:37:11,590 Non. 850 00:37:11,590 --> 00:37:11,720 4? 851 00:37:11,720 --> 00:37:12,220 Ooh. 852 00:37:12,220 --> 00:37:13,420 Que eu me lembre 4. 853 00:37:13,420 --> 00:37:13,950 3. 854 00:37:13,950 --> 00:37:15,110 Que eu me lembre 3. 855 00:37:15,110 --> 00:37:16,080 7, 5. 856 00:37:16,080 --> 00:37:18,490 O menor número que teño ver nesta pasaxe é 3. 857 00:37:18,490 --> 00:37:20,340 Se ven para fóra. 858 00:37:20,340 --> 00:37:21,986 Onde é que imos poñer-lo? 859 00:37:21,986 --> 00:37:22,860 E cal o seu nome? 860 00:37:22,860 --> 00:37:23,530 >> Alanna: Alanna. 861 00:37:23,530 --> 00:37:25,780 >> DAVID Malan: Alanna, estamos terá que despejo-lo. 862 00:37:25,780 --> 00:37:28,670 Pero isto é máis eficiente, só para cambiar dúas persoas, 863 00:37:28,670 --> 00:37:31,850 que ter varias persoas realmente evitar over. 864 00:37:31,850 --> 00:37:32,850 Agora imos facelo de novo. 865 00:37:32,850 --> 00:37:34,980 Vou seleccionar 4, entón imos alí para fóra. 866 00:37:34,980 --> 00:37:36,540 E quen é o que vai cambiar? 867 00:37:36,540 --> 00:37:37,750 Número 8, claro. 868 00:37:37,750 --> 00:37:40,260 Se eu agora atopar o número 5, vén para fóra. 869 00:37:40,260 --> 00:37:42,104 Número 8 se ve despexados novo. 870 00:37:42,104 --> 00:37:43,770 Estou indo agora para atopar o número 6 no lugar. 871 00:37:43,770 --> 00:37:44,410 7 no lugar. 872 00:37:44,410 --> 00:37:45,080 8 no lugar. 873 00:37:45,080 --> 00:37:48,590 >> O que acabamos de facer agora é algo chamado de selección de clasificación, 874 00:37:48,590 --> 00:37:52,560 e se ver isto, é Vai sentirse un pouco diferente. 875 00:37:52,560 --> 00:37:56,800 Imos adiante e esta menú aquí, este visualization-- 876 00:37:56,800 --> 00:38:02,920 imos cambiar este para-- veña, Firefox. 877 00:38:02,920 --> 00:38:07,610 Imos cambiar isto para a selección de clasificación. 878 00:38:07,610 --> 00:38:11,830 E imos acelera-lo como antes, e iniciar a visualización agora. 879 00:38:11,830 --> 00:38:13,990 E este algoritmo teña unha sensación diferente. 880 00:38:13,990 --> 00:38:16,480 En cada iteración, francamente, é aínda máis sinxela. 881 00:38:16,480 --> 00:38:18,385 Eu só estou seleccionando o menor elemento. 882 00:38:18,385 --> 00:38:21,510 Agora, francamente, eu teño un pouco de sorte que tempo, na medida en que ordenados super-rápido. 883 00:38:21,510 --> 00:38:22,660 Os elementos foron aleatorias. 884 00:38:22,660 --> 00:38:25,520 Non é, como veremos, finalmente, ver, fundamentalmente máis rápido. 885 00:38:25,520 --> 00:38:29,400 Pero imos ver un terceiro e último abordar aquí, como o que está a suceder. 886 00:38:29,400 --> 00:38:36,230 Entón, imos adiante e axustar vostedes unha última vez para ser nesta orde aquí. 887 00:38:36,230 --> 00:38:38,450 >> E agora, eu vou ser un pouco máis intelixente, 888 00:38:38,450 --> 00:38:40,220 só para completar os nosos algoritmos. 889 00:38:40,220 --> 00:38:41,230 Vou facelo. 890 00:38:41,230 --> 00:38:43,140 Eu estou indo a non ir adiante e cara atrás tanto. 891 00:38:43,140 --> 00:38:44,900 Francamente, estou cansa de todo este desprazamento. 892 00:38:44,900 --> 00:38:47,691 Eu só vou ter o que eu son dada no inicio da lista, 893 00:38:47,691 --> 00:38:49,460 e eu estou indo a clasificar que alí mesmo. 894 00:38:49,460 --> 00:38:50,140 Entón aquí estamos nós. 895 00:38:50,140 --> 00:38:51,030 Número 4. 896 00:38:51,030 --> 00:38:53,680 Eu estou indo a introducir o número 4 nunha lista ordenada. 897 00:38:53,680 --> 00:38:54,180 Feito. 898 00:38:54,180 --> 00:38:58,300 Eu reivindico agora, e só para facelo máis suposto, esta parte da miña lista é ordenada. 899 00:38:58,300 --> 00:39:02,610 É unha especie de unha proposta estúpido, pero de feito 4 están clasificados nunha lista de tamaño dun. 900 00:39:02,610 --> 00:39:04,210 Agora, eu vou tomar o número 2. 901 00:39:04,210 --> 00:39:07,670 Número 2 agora eu vou introducir no lugar seguro. 902 00:39:07,670 --> 00:39:08,680 Entón onde é que dous pertencen? 903 00:39:08,680 --> 00:39:09,824 Obviamente, aquí. 904 00:39:09,824 --> 00:39:11,490 Entón vai adiante e volver, se puidese. 905 00:39:11,490 --> 00:39:14,406 E por que non pode ter caras súa música está con vostede neste momento. 906 00:39:14,406 --> 00:39:17,020 E imos forzar a entrada que ao comezo da lista. 907 00:39:17,020 --> 00:39:17,936 Entón, un pouco máis de traballo. 908 00:39:17,936 --> 00:39:20,890 Tiven que cambiar Jacob arredor, e cal é o seu nome? 909 00:39:20,890 --> 00:39:21,420 >> Amin: Amin. 910 00:39:21,420 --> 00:39:22,270 >> DAVID Malan: Amin. 911 00:39:22,270 --> 00:39:24,350 Pero polo menos eu non fun para atrás e para adiante. 912 00:39:24,350 --> 00:39:25,739 Eu só estou levando as cousas como eu ir. 913 00:39:25,739 --> 00:39:27,530 Estou só inserir-los no lugar seguro. 914 00:39:27,530 --> 00:39:29,220 6, este é realmente moi fácil. 915 00:39:29,220 --> 00:39:31,510 Imos introducir ti alí, se só quería pasar un pouco. 916 00:39:31,510 --> 00:39:32,870 Número 8, tamén moi fácil. 917 00:39:32,870 --> 00:39:33,741 Ben alí. 918 00:39:33,741 --> 00:39:34,240 Caramba. 919 00:39:34,240 --> 00:39:37,590 Número 1, non podemos simplemente intercambiar con Amin aquí, 920 00:39:37,590 --> 00:39:39,340 porque o que está a suceder para interferir a orde. 921 00:39:39,340 --> 00:39:40,660 Entón, temos que ser un pouco máis intelixente. 922 00:39:40,660 --> 00:39:42,770 Entón, Artie, se puidese facer a copia de seguridade por un momento. 923 00:39:42,770 --> 00:39:46,550 Imos adiante e cambiar agora, Ao contrario dos nosos algoritmos anteriores, 924 00:39:46,550 --> 00:39:50,910 para dar espazo para Artie aquí no inicio. 925 00:39:50,910 --> 00:39:54,690 Así, ao final do día, eu son o tipo de facendo o que eu quería evitar antes. 926 00:39:54,690 --> 00:39:57,770 E así o meu algoritmo é unha especie de revertido, intelectualmente, 927 00:39:57,770 --> 00:39:59,070 do que era orixinalmente. 928 00:39:59,070 --> 00:40:01,240 Eu só estou facendo o desprazamento nun punto distinto. 929 00:40:01,240 --> 00:40:02,291 Agora estou no 3. 930 00:40:02,291 --> 00:40:02,790 Oh, maldito. 931 00:40:02,790 --> 00:40:04,039 Temos que facer máis traballo de novo. 932 00:40:04,039 --> 00:40:05,060 Entón, imos empurralo para fóra. 933 00:40:05,060 --> 00:40:09,360 Imos pasar 8, 6, 4-- oh Oh-- e 3 vai dar certo alí. 934 00:40:09,360 --> 00:40:11,490 Entón, pequenas economías menos esta vez. 935 00:40:11,490 --> 00:40:13,100 7, moito traballo non se debe facer. 936 00:40:13,100 --> 00:40:15,370 Entón, se quere pop de volta, imos introducir-lo. 937 00:40:15,370 --> 00:40:17,440 E, para rematar, 5, se quere aparecer de novo, nós 938 00:40:17,440 --> 00:40:22,610 que cambiar ti, ti, ti, ata cinco está no lugar. 939 00:40:22,610 --> 00:40:25,670 >> Entón agora a ver isto nun alto nivel gráficamente 940 00:40:25,670 --> 00:40:31,080 imos facer ese algoritmo visualización dun tempo adicional. 941 00:40:31,080 --> 00:40:33,580 Entón iso chamaremos de inserción tipo. 942 00:40:33,580 --> 00:40:37,700 Imos executa-lo só como rápido, e inicia-lo aquí. 943 00:40:37,700 --> 00:40:39,580 E, tamén, ten unha sensación diferente. 944 00:40:39,580 --> 00:40:42,180 É unha especie de ir mellor e mellor, pero nunca é perfecto 945 00:40:42,180 --> 00:40:44,630 ata eu entrar e lisa esas lagoas. 946 00:40:44,630 --> 00:40:47,860 Porque, unha vez máis, eu estou só tomando o que Estou a ser dado a partir de esquerda a dereita. 947 00:40:47,860 --> 00:40:50,350 Entón, eu non tiven tanta sorte que todo foi perfecto. 948 00:40:50,350 --> 00:40:54,190 É por iso que tivemos estes pequenos mispositions que fixos ao longo do tempo. 949 00:40:54,190 --> 00:40:58,890 >> Entón, todos estes algoritmos parecen executado en un pouco diferentes ritmos. 950 00:40:58,890 --> 00:41:02,030 En realidade, o que diría se o mellor é o máis rápido ata o momento? 951 00:41:02,030 --> 00:41:03,450 Bubble sort, o primeiro? 952 00:41:03,450 --> 00:41:05,000 Tipo de selección, a segunda? 953 00:41:05,000 --> 00:41:08,450 Tipo de inserción, o terceiro? 954 00:41:08,450 --> 00:41:10,710 Ouzo algúns tipos de selección. 955 00:41:10,710 --> 00:41:13,280 Outros pensamentos? 956 00:41:13,280 --> 00:41:16,880 >> Así, verifícase que todos estes algoritmos 957 00:41:16,880 --> 00:41:22,400 son fundamentalmente tan eficiente canto cada outro-- ou, pola contra, só como 958 00:41:22,400 --> 00:41:25,980 ineficiente como o outro, porque podemos facer fundamentalmente 959 00:41:25,980 --> 00:41:28,120 mellor que os tres destes algoritmos. 960 00:41:28,120 --> 00:41:29,990 E iso é un pouco de unha mentira, tamén. 961 00:41:29,990 --> 00:41:32,580 cando digo que o máis eficiente ou como ineficiente, 962 00:41:32,580 --> 00:41:35,040 que é, como mínimo, a super-grandes valores de n. 963 00:41:35,040 --> 00:41:38,450 Cando temos só oito persoas aquí, ou quizais 50 ou máis barras na pantalla, 964 00:41:38,450 --> 00:41:41,645 vai absolutamente notar diferenzas entre estes tres algoritmos. 965 00:41:41,645 --> 00:41:44,020 Pero como n, o número de persoas, ou o número de números, 966 00:41:44,020 --> 00:41:46,350 ou o número de persoas no teléfono libro, ou o número de páxinas web 967 00:41:46,350 --> 00:41:48,230 na base de datos de Google fica cada vez maior, 968 00:41:48,230 --> 00:41:51,650 veremos que os tres destes algoritmos son realmente moi pobre. 969 00:41:51,650 --> 00:41:54,060 E podemos facer fundamentalmente mellor que iso. 970 00:41:54,060 --> 00:41:56,830 >> Imos dar un ollo, por fin, en que estes algoritmos pode 971 00:41:56,830 --> 00:41:59,520 soar como no contexto dalgúns outros 972 00:41:59,520 --> 00:42:03,550 así como por medio do presente visualización aquí 973 00:42:03,550 --> 00:42:06,860 que vai presentar a un número de algoritmos. 974 00:42:06,860 --> 00:42:10,330 Imos adiante e parabenizar nosos participantes aquí, os cales 975 00:42:10,330 --> 00:42:11,690 clasificadas-se moi ben. 976 00:42:11,690 --> 00:42:15,124 Se quere dar un regalo de despedida. 977 00:42:15,124 --> 00:42:16,540 Pode manter os seus números tamén. 978 00:42:16,540 --> 00:42:19,460 979 00:42:19,460 --> 00:42:22,520 E o que vai ver, ou mellor, escoitar, agora, 980 00:42:22,520 --> 00:42:25,710 é que, como poñemos sons cada unha destas barras 981 00:42:25,710 --> 00:42:28,660 e asocia-lo co software, diferentes frecuencias de son, 982 00:42:28,660 --> 00:42:33,970 pode implicar a súa mente máis audioly arredor do que cada unha destas cousas 983 00:42:33,970 --> 00:42:34,470 parece. 984 00:42:34,470 --> 00:42:39,325 A primeira das cales é a ordenación por inserción 985 00:42:39,325 --> 00:42:44,275 >> [Tons] 986 00:42:44,275 --> 00:42:47,245 987 00:42:47,245 --> 00:42:49,720 >> Este é bubble sort. 988 00:42:49,720 --> 00:42:54,175 >> [Tons] 989 00:42:54,175 --> 00:43:17,250 990 00:43:17,250 --> 00:43:18,222 >> Tipo de selección. 991 00:43:18,222 --> 00:43:22,596 >> [Tons] 992 00:43:22,596 --> 00:43:33,570 993 00:43:33,570 --> 00:43:35,150 >> Algo chamado merge sort. 994 00:43:35,150 --> 00:43:38,140 >> [Tons] 995 00:43:38,140 --> 00:43:49,510 996 00:43:49,510 --> 00:43:51,278 >> Tipo Gnome. 997 00:43:51,278 --> 00:43:56,390 >> [Tons] 998 00:43:56,390 --> 00:44:08,240 999 00:44:08,240 --> 00:44:09,430 >> Isto é todo para CS50. 1000 00:44:09,430 --> 00:44:13,360 Imos velo na Mércores. 1001 00:44:13,360 --> 00:44:16,671 >> Narrador: E agora, "Deep Pensamentos ", de Daven Farnham. 1002 00:44:16,671 --> 00:44:19,910 1003 00:44:19,910 --> 00:44:21,590 Por que é un loop? 1004 00:44:21,590 --> 00:44:23,200 Por que non facelo mellor? 1005 00:44:23,200 --> 00:44:25,970 Eu faría un circuíto de cinco. 1006 00:44:25,970 --> 00:44:28,720 >> [Risas]