1 00:00:00,000 --> 00:00:11,280 2 00:00:11,280 --> 00:00:13,650 >> COLUMNA 1: Todo ben. 3 00:00:13,650 --> 00:00:14,390 Benvido de volta. 4 00:00:14,390 --> 00:00:19,260 Esta é a Semana Dúas das CS50, e nós temos ata agora foi o uso de funcións, pero 5 00:00:19,260 --> 00:00:20,830 en gran medida toma para concedida. 6 00:00:20,830 --> 00:00:23,430 Usamos printf que ten a efectos secundarios de impresión 7 00:00:23,430 --> 00:00:24,110 as cousas na pantalla. 8 00:00:24,110 --> 00:00:25,790 Usamos get int si flotar. 9 00:00:25,790 --> 00:00:29,230 >> Pero e se o desexa súas propias funcións, como algúns dos 10 00:00:29,230 --> 00:00:31,740 xa debería ter comezado a facer por Problem Set One, aínda 11 00:00:31,740 --> 00:00:33,140 non é estrictamente necesario? 12 00:00:33,140 --> 00:00:37,150 Ben, imos adiante e revisitar este problema de só pedindo ao usuario para 13 00:00:37,150 --> 00:00:40,660 o seu nome e a impresión algo na pantalla, pero intenta Fatorar algúns 14 00:00:40,660 --> 00:00:44,000 da comuñón que temos ver no noso código ata agora. 15 00:00:44,000 --> 00:00:45,120 Entón, por que quero dicir o seguinte. 16 00:00:45,120 --> 00:00:47,315 >> Eu estou indo a ir adiante e crear un novo programa, pode conectar para 17 00:00:47,315 --> 00:00:49,320 el HELLO.C como de costume. 18 00:00:49,320 --> 00:00:53,730 Eu estou indo a ir adiante e darme incluír io.h defecto na parte superior. 19 00:00:53,730 --> 00:00:57,040 Vou tamén darme cautelarmente a biblioteca de forma que CS50 20 00:00:57,040 --> 00:00:59,080 Non me gritou polo compilador. 21 00:00:59,080 --> 00:01:02,400 E agora eu estou indo a ir adiante e declarar int, principal, nula. 22 00:01:02,400 --> 00:01:09,020 >> E entón, aquí, é aquí que quero para comezar a terceirizar funcionalidade para 23 00:01:09,020 --> 00:01:12,090 outra función que eu mesmo son vai escribir, pero que non 24 00:01:12,090 --> 00:01:13,820 hai actualmente. 25 00:01:13,820 --> 00:01:19,210 Por exemplo, supoñamos que eu quería escribir unha función que me permite 26 00:01:19,210 --> 00:01:23,830 imprimir Ola, comas, e entón o nome dalgún usuario. 27 00:01:23,830 --> 00:01:29,010 En vez de seguir facendo printf Ola,% s, non sería bo se 28 00:01:29,010 --> 00:01:33,380 había só unha función chamada non printf, pero o nome de impresión? 29 00:01:33,380 --> 00:01:36,600 >> Polo tanto, noutras palabras, quero ser capaz de escribir un programa que fai un pouco 30 00:01:36,600 --> 00:01:37,710 algo así. 31 00:01:37,710 --> 00:01:42,070 En primeiro lugar, eu vou dicir o printf nome, tendo, así, o usuario 32 00:01:42,070 --> 00:01:46,150 me dar o seu nome, e entón eu son vai utilizar as cordas s familiares para 33 00:01:46,150 --> 00:01:47,290 declarar unha cadea. 34 00:01:47,290 --> 00:01:50,420 Déame unha variable de tipo cadea, chamalo s, e tenda en que o 35 00:01:50,420 --> 00:01:52,120 resultado da chamada obter cadea. 36 00:01:52,120 --> 00:01:56,060 Pero, agora, nas últimas semanas, eu tería algo tediosamente feito Ola,% s / n. 37 00:01:56,060 --> 00:01:58,630 38 00:01:58,630 --> 00:02:02,570 >> E, en outras palabras, vimos esta exemplo, unha morea de veces, e é un 39 00:02:02,570 --> 00:02:05,280 trivial exemplo, porque hai só unha liña de código para que el non é realmente un 40 00:02:05,280 --> 00:02:06,860 gran negocio para estar escribindo novo. 41 00:02:06,860 --> 00:02:09,990 Pero supoñamos que esta liña de código en realidade, estaban facendo un fardo, e 42 00:02:09,990 --> 00:02:12,900 non é unha liña de código, pero é 10 liñas de código de un par de semanas a partir de agora, 43 00:02:12,900 --> 00:02:15,190 e só está canso de copiar e pegar ou 44 00:02:15,190 --> 00:02:17,180 redigitação ese mesmo código. 45 00:02:17,180 --> 00:02:22,100 Non sería bo en vez de facer printf Ola,% s e así por diante, 46 00:02:22,100 --> 00:02:26,500 Non sería bo se houbese só unha función chamada nome de impresión que 47 00:02:26,500 --> 00:02:27,560 recibe un argumento - 48 00:02:27,560 --> 00:02:29,120 noutras palabras, é preciso entrada - 49 00:02:29,120 --> 00:02:30,620 e logo, punto e coma. 50 00:02:30,620 --> 00:02:33,240 Entón esa función, non sería Sería bo que existía? 51 00:02:33,240 --> 00:02:36,690 Así que non tería que preocuparse printf que é, o que% se todos 52 00:02:36,690 --> 00:02:39,400 estas complexidades que sexan non todo o que interesante. 53 00:02:39,400 --> 00:02:40,570 Son útiles. 54 00:02:40,570 --> 00:02:44,700 >> Así, o nome de impresión, por desgraza, non se inventou uns 40 anos máis atrás. 55 00:02:44,700 --> 00:02:45,980 Ninguén pensou en escribilo. 56 00:02:45,980 --> 00:02:48,300 Pero esa é a beleza de ter un linguaxe de programación, así como no 57 00:02:48,300 --> 00:02:52,930 De cero, pode definir bloques personalizados, para en C e calquera lingua, pode 58 00:02:52,930 --> 00:02:57,260 definir a súa propia función, pode definir as súas propias funcións. 59 00:02:57,260 --> 00:03:01,710 Polo tanto, a pesar de chegar principal automático de balde, podemos declarar 60 00:03:01,710 --> 00:03:02,730 nosas propias funcións. 61 00:03:02,730 --> 00:03:05,670 >> Entón, eu vou facer un espazo aquí enriba, e eu vou declarar o meu 62 00:03:05,670 --> 00:03:08,210 propia función que vai buscar un pouco raro no comezo, pero nós imos chegar 63 00:03:08,210 --> 00:03:09,400 de volta a este antes de tempo. 64 00:03:09,400 --> 00:03:12,310 Eu vou dicir nula, así indicando que esta función fai 65 00:03:12,310 --> 00:03:16,040 algo, ten un efecto secundario, pero non devolver algo para min no 66 00:03:16,040 --> 00:03:18,810 mesmo xeito que se int ou obter corda en si fai. 67 00:03:18,810 --> 00:03:22,450 E eu vou dar a este unha función nome do nome de impresión, e eu vou 68 00:03:22,450 --> 00:03:26,470 especifica que este cara vai levar unha cadea, e eu vou chamar a que 69 00:03:26,470 --> 00:03:27,600 nome cadea. 70 00:03:27,600 --> 00:03:32,100 Podería chamalo de calquera cousa que eu queira, pero eu quero o meu código para ser auto-documentado. 71 00:03:32,100 --> 00:03:34,770 Noutras palabras, se un de vós fose abrir este ficheiro e lelo, podería 72 00:03:34,770 --> 00:03:39,020 tipo de inferir a partir do nome que entrada o papel que debería desempeñar. 73 00:03:39,020 --> 00:03:42,270 >> E agora por baixo diso, eu vou abrir crespos e rizados cinta cinta pechada, 74 00:03:42,270 --> 00:03:47,140 e así entender que eu teño seguido a mesma estándar en liñas de catro a sete como 75 00:03:47,140 --> 00:03:51,622 Eu teño acompañado dunha boa semana, ademais de agora entre, digamos, nove liñas e 76 00:03:51,622 --> 00:03:53,400 14 que compoñen principal. 77 00:03:53,400 --> 00:03:56,160 Noutras palabras, imprimir o nome é outra función. 78 00:03:56,160 --> 00:03:58,990 Agora, o compilador non vai saber chamar esa cousa automaticamente 79 00:03:58,990 --> 00:04:02,670 por que eu literalmente inventou, pero vai saber aínda para chamar principal 80 00:04:02,670 --> 00:04:08,710 automaticamente, e entón, por suposto, en liña 13, eu estou chamando miña propia función. 81 00:04:08,710 --> 00:04:12,805 E por que eu teño declarado que a función na liña catro, antes de inicio, 82 00:04:12,805 --> 00:04:16,579 iso vai ensinar o compilador o orzamento, pecha comiñas ", nome print" 83 00:04:16,579 --> 00:04:18,140 significa eo que debe facer. 84 00:04:18,140 --> 00:04:22,700 Entón, eu son unha especie de darlle un novo costume bloquear no contexto, digamos, cero. 85 00:04:22,700 --> 00:04:27,240 >> Entón, aquí, podo poñer isto moi común ou patrón recorrente de código gardo 86 00:04:27,240 --> 00:04:32,300 escrita en clase, printf Ola% s,% s / n "- 87 00:04:32,300 --> 00:04:36,720 88 00:04:36,720 --> 00:04:37,590 o que quero poñer aquí? 89 00:04:37,590 --> 00:04:39,200 S? 90 00:04:39,200 --> 00:04:41,420 Entón, quero poñer o nome neste contexto. 91 00:04:41,420 --> 00:04:43,440 Entón, teña en conta un pouco de unha dicotomía aquí. 92 00:04:43,440 --> 00:04:47,680 Porque estou declarando miña propia función e eu teño un pouco arbitrariamente chamada 93 00:04:47,680 --> 00:04:50,880 que imprimir o nome, e por que eu teño indicado entre parénteses que esta 94 00:04:50,880 --> 00:04:55,035 función recibe un argumento, o tipo de que é unha cadea - polo que é unha palabra 95 00:04:55,035 --> 00:05:00,010 ou frase, ou algo así - e Estou chamando este nome argumento, que 96 00:05:00,010 --> 00:05:04,770 significa que a única variable que está en ámbito, por así dicir, é o nome. 97 00:05:04,770 --> 00:05:07,780 >> S só existe entre o que dous claves, claro? 98 00:05:07,780 --> 00:05:12,990 Ben, en realidade, así como a liña 10 mediante 14, entón só como o luns non pode usar 99 00:05:12,990 --> 00:05:17,650 S, pero o que podo facer é pasar S en nome de impresión. 100 00:05:17,650 --> 00:05:21,030 Imprimir o nome só acontece para darlle un alias, un sinónimo, un apelido, 101 00:05:21,030 --> 00:05:24,400 chamándoo de nome, e agora usalo nesta liña. 102 00:05:24,400 --> 00:05:26,840 Entón, agora déixeme gardar esta, zoom out. 103 00:05:26,840 --> 00:05:31,250 >> Déixeme ir adiante e facer Olá 104 00:05:31,250 --> 00:05:32,400 Parece bo. 105 00:05:32,400 --> 00:05:36,110 Non cuspir erros. . / Ola Intro. 106 00:05:36,110 --> 00:05:37,020 Cal é o meu nome? 107 00:05:37,020 --> 00:05:38,060 David. 108 00:05:38,060 --> 00:05:39,270 E Ola David. 109 00:05:39,270 --> 00:05:41,820 Así, non todo o que emocionante, pero só de pensar agora. 110 00:05:41,820 --> 00:05:44,310 Agora ten o mesmo ingrediente como fixemos en risco a 111 00:05:44,310 --> 00:05:45,420 facer as nosas propias funcións. 112 00:05:45,420 --> 00:05:46,770 >> Pero hai un pouco de unha pegadinha. 113 00:05:46,770 --> 00:05:50,620 Supoñamos que eu realmente non tiña pensado isto a través e realmente sen 114 00:05:50,620 --> 00:05:54,250 realmente pensar sobre iso escribiu esa función aquí. 115 00:05:54,250 --> 00:05:55,420 Sente perfectamente razoable. 116 00:05:55,420 --> 00:05:58,440 En risco, non hai noción de localización nos seus scripts. 117 00:05:58,440 --> 00:06:00,670 Podería poñer un aquí enriba, aquí enriba, un aquí, e isto pode comezar a 118 00:06:00,670 --> 00:06:03,310 a parecer un pouco confuso se non o fas poñelas perfectamente, pero non 119 00:06:03,310 --> 00:06:05,910 importa onde físicamente os guións estaban na pantalla. 120 00:06:05,910 --> 00:06:09,660 Por desgraza en C - e esta é diferente linguaxes como Java e Python 121 00:06:09,660 --> 00:06:13,600 e outros que pode estar familiarizado con - por desgraza, en C, a orde non 122 00:06:13,600 --> 00:06:15,830 importa, porque o que é reloxo vai pasar agora. 123 00:06:15,830 --> 00:06:19,010 >> A función estándar que está a suceder para realizar, por suposto, a principal. 124 00:06:19,010 --> 00:06:22,290 Principal vai chamar o nome de impresión en A liña de oito, pero, desgraciadamente, a 125 00:06:22,290 --> 00:06:26,660 compilador non vai nin saber que o nome de impresión Existe ata chegar a liña 11, 126 00:06:26,660 --> 00:06:28,520 que, por desgraza, é será demasiado tarde. 127 00:06:28,520 --> 00:06:30,660 Entón, imos facer facer Olá 128 00:06:30,660 --> 00:06:32,950 E agora, dous erros malditos xerada. 129 00:06:32,950 --> 00:06:36,050 Entón, agora déixeme ir ata a propia En primeiro lugar, como sempre hai que facer, e 130 00:06:36,050 --> 00:06:39,560 ter en conta que está berrando para min, "Declaración implícita da función 131 00:06:39,560 --> 00:06:40,540 imprimir o nome. " 132 00:06:40,540 --> 00:06:43,860 >> Entón, vimos esa mensaxe antes, declaración implícita de función. 133 00:06:43,860 --> 00:06:48,080 Cando vimos este tipo de erro? 134 00:06:48,080 --> 00:06:49,180 Cando eu non inclui unha biblioteca. 135 00:06:49,180 --> 00:06:53,470 Se eu esquezo cs50.h e eu ía estar gritou para corda ou obter int. 136 00:06:53,470 --> 00:06:56,880 Pero, neste caso, esta función de impresión nome non está na biblioteca, non? 137 00:06:56,880 --> 00:07:00,230 É literalmente neste arquivo, de xeito o que é realmente o problema? 138 00:07:00,230 --> 00:07:04,660 >> Ben, sentímolo, en C, é preciso que tan incrible literalmente que se 139 00:07:04,660 --> 00:07:08,640 quero unha función chamada nome de impresión para existe, ten que aplicar 140 00:07:08,640 --> 00:07:11,940 esta función na parte superior da súa código para que sexa accesíbel para baixar 141 00:07:11,940 --> 00:07:15,070 funcións, pero, francamente, que se fai desleixado moi rapidamente. 142 00:07:15,070 --> 00:07:18,160 Persoalmente, eu gosto de poñer principal en primeiro lugar por que, entón, é moi claro o que iso 143 00:07:18,160 --> 00:07:19,890 programa fai a primeira vista. 144 00:07:19,890 --> 00:07:23,290 E máis, pode poñerse no ángulo estraño casos en que se quere chamar x 145 00:07:23,290 --> 00:07:27,530 y mais y podería chamar x, só fisicamente non pode realmente colocar un 146 00:07:27,530 --> 00:07:28,540 por riba do outro. 147 00:07:28,540 --> 00:07:31,230 >> Pero resulta que en C, pode-se solucionar isto de xeito moi sinxelo. 148 00:07:31,230 --> 00:07:34,010 Vou poñer un pouco de espazo ata aquí, e eu só vou 149 00:07:34,010 --> 00:07:38,170 cautelarmente, aínda que algo redundante, vai ensinar a 150 00:07:38,170 --> 00:07:42,320 compilador que existe unha función chamou o nome de impresión, é preciso unha cadea, 151 00:07:42,320 --> 00:07:46,330 e eu vou chamar el nomear punto e coma. 152 00:07:46,330 --> 00:07:50,220 >> Polo tanto, este momento na liña de catro, o que nos non teña visto antes, é unha declaración 153 00:07:50,220 --> 00:07:53,940 un nome de función de impresión, pero é só unha promesa de que esta función 154 00:07:53,940 --> 00:07:56,620 finalmente definirse, finalmente ser aplicado. 155 00:07:56,620 --> 00:08:00,180 Este agora podo deixar só, porque agora esta é a definición, o 156 00:08:00,180 --> 00:08:04,090 implementación, unha especie de última milla da implantación deste 157 00:08:04,090 --> 00:08:05,130 función particular. 158 00:08:05,130 --> 00:08:08,450 Entón, francamente, é estúpido, é aburrido, pero este é o camiño é C, e é 159 00:08:08,450 --> 00:08:12,050 porque leva moito literalmente e, como un ordenador, a verdade debería, 160 00:08:12,050 --> 00:08:16,020 só fai exactamente o que diga a el facer, e para que orde é importante. 161 00:08:16,020 --> 00:08:18,940 >> Polo tanto, manter isto presente e, de novo, comezar a entender a recorrencia de estándares. 162 00:08:18,940 --> 00:08:21,850 As probabilidades son que vai, se non ten xa, comezar a atopar mensaxes 163 00:08:21,850 --> 00:08:24,700 coma este, que a primeira vista parecen totalmente enigmática, pero se comezar 164 00:08:24,700 --> 00:08:29,000 a ollar para estas palabras clave como "Declaración implícita", a mención dun 165 00:08:29,000 --> 00:08:32,380 función neste caso - e, a verdade, ten ás veces ata estar un pouco verde 166 00:08:32,380 --> 00:08:35,010 símbolo cenoria que lle di onde o problema pode ser - 167 00:08:35,010 --> 00:08:40,980 pode comezar a traballar o seu camiño a través de aínda mensaxes de erro invisible. 168 00:08:40,980 --> 00:08:45,860 Calquera dúbida sobre como escribir o seu propia función deste xeito? 169 00:08:45,860 --> 00:08:47,540 >> Imos facer algo que é un pouco máis convincente. 170 00:08:47,540 --> 00:08:51,760 En vez de só facer algo que ten un efecto colateral de impresión, deixe-me ir 171 00:08:51,760 --> 00:08:55,340 adiante e gardar un novo ficheiro, e nós imos chamar este positive.c, aínda que sexa 172 00:08:55,340 --> 00:08:57,600 será un pouco diferente contra a última vez. 173 00:08:57,600 --> 00:09:01,910 E esta vez, quero volver a aplicar exemplo positive.C a última vez, que 174 00:09:01,910 --> 00:09:04,430 é forzar ao usuario a dar me un enteiro positivo. 175 00:09:04,430 --> 00:09:07,280 Pero eu tiña que usar get int última vez. 176 00:09:07,280 --> 00:09:10,780 Non sería bo se houbese unha función chamada obter int positivo 177 00:09:10,780 --> 00:09:13,610 que eu podería simplemente terceirizar esa peza de funcionalidade para? 178 00:09:13,610 --> 00:09:16,480 Así, a diferenza aquí é que nós imos aplicar obter int positivo, pero a diferenza 179 00:09:16,480 --> 00:09:20,330 Nome impresión que tivo un efecto colateral - é non devolver algo para min como 180 00:09:20,330 --> 00:09:21,710 un número ou unha cadea - 181 00:09:21,710 --> 00:09:25,510 se int positivo é, por suposto, vai atrás, espero, un int positivo. 182 00:09:25,510 --> 00:09:26,170 >> Entón, imos facelo. 183 00:09:26,170 --> 00:09:30,840 Incluír cs50.h, inclúen Standard io.h. 184 00:09:30,840 --> 00:09:33,520 Int void main. 185 00:09:33,520 --> 00:09:42,160 E agora aquí, eu estou indo a ir adiante e digamos que int, chamalo de n, é igual a 186 00:09:42,160 --> 00:09:44,270 obter int positivo. 187 00:09:44,270 --> 00:09:49,080 E, así como obter int xa existe porque o persoal escribiu, eu vou 188 00:09:49,080 --> 00:09:53,950 asumir ao momento en que obteña int positivo existe, e agora eu vou 189 00:09:53,950 --> 00:09:57,730 para ir adiante e dicir printf, grazas pola% i / n ", n. 190 00:09:57,730 --> 00:10:02,940 191 00:10:02,940 --> 00:10:07,770 >> Polo tanto, agora que eu compilar ese programa, o que que vai pasar no meu terminal 192 00:10:07,770 --> 00:10:09,075 fiestra na parte inferior da pantalla? 193 00:10:09,075 --> 00:10:11,580 194 00:10:11,580 --> 00:10:13,900 Vou probablemente obter este mesmo erro de antes. 195 00:10:13,900 --> 00:10:14,570 Entón, imos tentar iso. 196 00:10:14,570 --> 00:10:16,450 Fai positiva. 197 00:10:16,450 --> 00:10:19,900 E unha vez máis, declaración implícita da función, obter int positivo. 198 00:10:19,900 --> 00:10:21,970 Así, podemos solucionar isto en un par de formas. 199 00:10:21,970 --> 00:10:27,310 Vou mantelo simple e só coloque miña declaración aquí e obteña 200 00:10:27,310 --> 00:10:28,120 int positivo. 201 00:10:28,120 --> 00:10:29,720 Necesito asine so-Called. 202 00:10:29,720 --> 00:10:32,410 A sinatura refírese só á estética do 203 00:10:32,410 --> 00:10:34,090 primeira liña do programa. 204 00:10:34,090 --> 00:10:37,420 Entón, o que debe obter positivo int retorno? 205 00:10:37,420 --> 00:10:37,970 >> Así, un int. 206 00:10:37,970 --> 00:10:41,540 Quero dicir, idealmente, sería volver algo así como int positivo, pero que 207 00:10:41,540 --> 00:10:42,160 non existe. 208 00:10:42,160 --> 00:10:45,280 Non vimos que, entre os nosos datos tipo, polo que temos que xestione o 209 00:10:45,280 --> 00:10:47,170 feito de que temos moi poucos tipos de datos para traballar. 210 00:10:47,170 --> 00:10:50,360 Pero podemos voltar un int e só confiar que será positivo. 211 00:10:50,360 --> 00:10:52,690 Vai ser chamado obter int positivo. 212 00:10:52,690 --> 00:10:55,122 >> E agora, como sobre os seus argumentos? 213 00:10:55,122 --> 00:10:56,440 Leva calquera entrada? 214 00:10:56,440 --> 00:10:58,280 Será que precisa de calquera entrada? 215 00:10:58,280 --> 00:11:00,900 Por iso, non precisa saber nada de antemán. 216 00:11:00,900 --> 00:11:03,220 Obter corda non, int non. 217 00:11:03,220 --> 00:11:06,430 Printf fai - necesita ter algún entrada pasou para el - eo nome de impresión 218 00:11:06,430 --> 00:11:09,020 precisaba de algunha entrada, pero se int positivo non. 219 00:11:09,020 --> 00:11:11,530 Entón eu vou explicitamente dicir o baleiro compilador. 220 00:11:11,530 --> 00:11:13,470 Baleiro é a ausencia de calquera outra cousa. 221 00:11:13,470 --> 00:11:17,990 Entón baleiro non significa nada está a suceder dentro destes parénteses, o punto e coma. 222 00:11:17,990 --> 00:11:20,840 >> E agora, no fondo do meu arquivo - e de novo, estou só sendo amable de anal 223 00:11:20,840 --> 00:11:23,640 aquí poñendo principal na parte superior, o que é unha boa práctica, xa que deste xeito, 224 00:11:23,640 --> 00:11:26,220 sempre que vostede ou alguén abre o ficheiro, o 225 00:11:26,220 --> 00:11:27,400 función é logo alí. 226 00:11:27,400 --> 00:11:29,660 Pode mergullo a partir dunha praza. 227 00:11:29,660 --> 00:11:34,190 Entón agora eu vou duplicar isto, estar baleiro int positivo, pero eu non son 228 00:11:34,190 --> 00:11:35,430 vai bater un punto e coma agora. 229 00:11:35,430 --> 00:11:38,280 Vou abrir chaves, e agora eu teño tomar prestado 230 00:11:38,280 --> 00:11:39,700 algunhas ideas de luns. 231 00:11:39,700 --> 00:11:44,450 >> Entón, como recorda, fixemos algo como facer o seguinte mentres 232 00:11:44,450 --> 00:11:45,830 algo que era certo. 233 00:11:45,830 --> 00:11:46,630 E o que foi que eu fixen? 234 00:11:46,630 --> 00:11:51,540 Eu fixen algo parecido dar me un enteiro positivo, 235 00:11:51,540 --> 00:11:52,430 pouco máis dun prompt. 236 00:11:52,430 --> 00:11:53,540 Podería usar todas as palabras que quero. 237 00:11:53,540 --> 00:11:54,960 E entón eu usei o que? 238 00:11:54,960 --> 00:11:59,530 Int n é igual a ser int, sen argumentos para iso. 239 00:11:59,530 --> 00:12:00,550 >> E notar a diferenza. 240 00:12:00,550 --> 00:12:04,680 Cando chamar a unha función, cando usa unha función, non poñer en baleiro. 241 00:12:04,680 --> 00:12:08,570 Só fai iso cando declarar un función, ensinando o compilador que 242 00:12:08,570 --> 00:12:09,780 debe esperar. 243 00:12:09,780 --> 00:12:11,650 Entón non necesita pór anular alí mesmo. 244 00:12:11,650 --> 00:12:12,940 >> E agora, o que era a miña condición? 245 00:12:12,940 --> 00:12:19,670 Ben, n non coincide co positivo, pero iso é só pseudo-código. 246 00:12:19,670 --> 00:12:22,530 Entón, como podo expresar iso de forma máis limpa? 247 00:12:22,530 --> 00:12:24,090 Así, a menos que o igual a cero. 248 00:12:24,090 --> 00:12:26,250 Entón, de novo, teña en conta que podes facer inferior ou igual a. 249 00:12:26,250 --> 00:12:28,100 Aínda que sexa dous separados símbolos, pode facelo en 250 00:12:28,100 --> 00:12:29,350 o teclado como tal. 251 00:12:29,350 --> 00:12:33,950 >> Pero aínda hai un erro que Fixen asneira última vez tamén. 252 00:12:33,950 --> 00:12:36,950 Teño que declarar - 253 00:12:36,950 --> 00:12:37,460 exactamente. 254 00:12:37,460 --> 00:12:39,640 Teño que declarar n fóra do loop. 255 00:12:39,640 --> 00:12:44,180 Entón eu teño que poñer n aquí enriba, e eu non quero volver a declaralo lo aquí 256 00:12:44,180 --> 00:12:46,480 para que eu non obter unha nova variable. 257 00:12:46,480 --> 00:12:48,860 Eu só quero asignar un valor aquí. 258 00:12:48,860 --> 00:12:54,320 >> E agora eu non estou ben feito aquí. 259 00:12:54,320 --> 00:12:57,290 Déixeme chegar á fronte de min e finxir que son feito. 260 00:12:57,290 --> 00:13:01,220 Chegar a ser positiva, e agora hai un novo erro. 261 00:13:01,220 --> 00:13:04,550 Control atinxe final función non baleiro. 262 00:13:04,550 --> 00:13:07,760 Entón nova mensaxe de erro, pero se tipo de desmembrar cada unha das palabras, 263 00:13:07,760 --> 00:13:09,620 probablemente apunta para o que está mal. 264 00:13:09,620 --> 00:13:11,240 >> Controlar. 265 00:13:11,240 --> 00:13:14,250 Control significa só que a orde de operacións nun programa. 266 00:13:14,250 --> 00:13:16,510 O ordenador está no control e algo deu mal. 267 00:13:16,510 --> 00:13:18,510 Polo tanto, chega ao final do unha función non baleiro. 268 00:13:18,510 --> 00:13:21,760 Que función é aparentemente referencia? 269 00:13:21,760 --> 00:13:24,790 Que función é non baleiro? 270 00:13:24,790 --> 00:13:27,400 Polo tanto, obter int positivo, e un pouco confuso en que o ben, 271 00:13:27,400 --> 00:13:29,010 é unha especie de baleiro. 272 00:13:29,010 --> 00:13:33,070 Ten unha especificación de baleiro para a súa argumentos, pero a súa saída vai 273 00:13:33,070 --> 00:13:34,540 ser do tipo n. 274 00:13:34,540 --> 00:13:37,260 Así, a palabra da esquerda é o así chamado tipo de retorno. 275 00:13:37,260 --> 00:13:40,320 A palabra no interior aquí é O cero ou máis argumentos 276 00:13:40,320 --> 00:13:41,970 que a función recibe. 277 00:13:41,970 --> 00:13:44,060 >> Entón o que eu teño que facer? 278 00:13:44,060 --> 00:13:47,650 Neste punto, o meu código, liña 21, onde ventá piscando agora é que eu 279 00:13:47,650 --> 00:13:51,430 ten un int positivo dentro da variable chamada n. 280 00:13:51,430 --> 00:13:55,200 Como fago para devolve-lo ao principal? 281 00:13:55,200 --> 00:13:55,960 Literalmente. 282 00:13:55,960 --> 00:13:59,320 Voltar n comas. 283 00:13:59,320 --> 00:14:04,090 >> Polo tanto, así como Colton volveu unha peza de papel con unha resposta para me soltando 284 00:14:04,090 --> 00:14:07,020 aquel anaco de papel na little black caixa sobre a mesa, para facelo en 285 00:14:07,020 --> 00:14:10,100 código, literalmente, só tes que escribir, o regreso n, e é como se fose Colton 286 00:14:10,100 --> 00:14:12,140 entregando-me algo físico. 287 00:14:12,140 --> 00:14:15,870 Neste caso, o que está a ocorrer é obter int positivo vai devolver 288 00:14:15,870 --> 00:14:19,220 o que é probablemente positivo enteiro para quen? 289 00:14:19,220 --> 00:14:21,380 Onde é que ese valor acabar? 290 00:14:21,380 --> 00:14:29,080 Iso acaba nesta variable, n, e entón imos seguir coa liña de nove. 291 00:14:29,080 --> 00:14:31,920 >> Así, noutras palabras, a fin de operacións, este programa comeza 292 00:14:31,920 --> 00:14:34,430 execución, eo compilador percibe, Oh, quere a biblioteca? 293 00:14:34,430 --> 00:14:36,310 Deixe-me ir coller o que está dentro diso. 294 00:14:36,310 --> 00:14:37,750 Oh, quere a biblioteca IO defecto? 295 00:14:37,750 --> 00:14:39,660 Deixe-me ir coller o que está dentro diso. 296 00:14:39,660 --> 00:14:44,510 O que fai o compilador dicir para si mesmo cando chega a catro liñas? 297 00:14:44,510 --> 00:14:47,980 Oh, vostede prometeu para aplicar o función chamada queda positivo, pero 298 00:14:47,980 --> 00:14:50,820 imos voltar a iso máis tarde, algo nese sentido. 299 00:14:50,820 --> 00:14:53,450 >> Int void main significa só aquí as entrañas do meu programa. 300 00:14:53,450 --> 00:14:54,990 Liña sete é só unha chaveta. 301 00:14:54,990 --> 00:14:59,540 Liña de oito está dicindo á esquerda, dar me 32 bits para un enteiro, chamalo de n. 302 00:14:59,540 --> 00:15:02,160 No lado dereito, é dicindo se int positivo. 303 00:15:02,160 --> 00:15:07,120 Agora imos facer unha pausa nesa historia, porque agora Non manter en movemento o meu cursor abaixo. 304 00:15:07,120 --> 00:15:11,720 O meu cursor agora se pon aquí porque agora comezar int positivo executa. 305 00:15:11,720 --> 00:15:13,100 Int n é declarada. 306 00:15:13,100 --> 00:15:14,040 Faga o seguinte. 307 00:15:14,040 --> 00:15:16,090 Printf me dá un enteiro positivo. 308 00:15:16,090 --> 00:15:19,740 >> Obter un int do usuario, almacena-lo en n, e quizais facelo de novo e de novo. 309 00:15:19,740 --> 00:15:23,010 Este ciclo significa que este código pode realizar arriba e abaixo como este novo 310 00:15:23,010 --> 00:15:25,810 e de novo, pero cando o usuario finalmente coopera e me dá un positivo 311 00:15:25,810 --> 00:15:31,750 int, eu bati en liña de 21, momento no que o número é entregado de volta, e que unha 312 00:15:31,750 --> 00:15:34,280 debo destacar agora? 313 00:15:34,280 --> 00:15:35,070 Nine. 314 00:15:35,070 --> 00:15:39,010 Control, por así dicir, regresa para aliñar nove. 315 00:15:39,010 --> 00:15:40,650 Esa é a liña que está ao mando. 316 00:15:40,650 --> 00:15:43,250 >> Entón, iso é o que está pasando esta vez baixo o capó, pero 317 00:15:43,250 --> 00:15:46,480 cando usamos funcións como printf ou ata obter corda que alguén 318 00:15:46,480 --> 00:15:50,600 escribiu para ti, o control estaba sendo entregado a outra persoa da liña de código 319 00:15:50,600 --> 00:15:51,290 por liña por liña. 320 00:15:51,290 --> 00:15:53,770 É só que non podía velo e nós realmente non podería representa-lo neste 321 00:15:53,770 --> 00:15:57,620 programa, porque está nalgún outro ficheiro no disco duro 322 00:15:57,620 --> 00:16:00,000 sen o coñecemento de nós. 323 00:16:00,000 --> 00:16:02,100 Entón, imos realmente compilar e realizar iso agora. 324 00:16:02,100 --> 00:16:03,890 >> Fai positiva. 325 00:16:03,890 --> 00:16:05,260 Compilar, iso é progreso. 326 00:16:05,260 --> 00:16:06,650 . / Positivo. 327 00:16:06,650 --> 00:16:08,020 Dáme un enteiro positivo. 328 00:16:08,020 --> 00:16:08,800 Imos ser difícil. 329 00:16:08,800 --> 00:16:10,430 Negativo 1. 330 00:16:10,430 --> 00:16:11,360 Cero. 331 00:16:11,360 --> 00:16:13,370 Imos darlle 50. 332 00:16:13,370 --> 00:16:18,100 Grazas por 50, e así por control xa retornou. 333 00:16:18,100 --> 00:16:21,750 Calquera dúbida, entón, sobre iso? 334 00:16:21,750 --> 00:16:23,180 Si? 335 00:16:23,180 --> 00:16:25,630 >> [Inaudível]. 336 00:16:25,630 --> 00:16:26,130 >> Indicar novo. 337 00:16:26,130 --> 00:16:27,860 Oh, boa pregunta. 338 00:16:27,860 --> 00:16:31,100 Así, pode notar un paralelo aquí que Eu son o tipo de corte de un canto. 339 00:16:31,100 --> 00:16:35,420 Na liña 12, eu digo que si int positivo retorna un int, pero por ese mesmo 340 00:16:35,420 --> 00:16:39,660 lóxica, agora lóxico que en liña seis, eu estou dicindo que os principais retorno 341 00:16:39,660 --> 00:16:44,040 un int, pero o que temos nunca tiña en calquera dos nosos programas? 342 00:16:44,040 --> 00:16:46,470 Nós nunca tivemos mención de esta palabra clave retorno. 343 00:16:46,470 --> 00:16:49,970 >> Así, verifícase que en C, polo menos a versión que estamos usando 344 00:16:49,970 --> 00:16:55,750 feito en 1999, técnicamente, este é pasa automaticamente para ti. 345 00:16:55,750 --> 00:16:59,300 Cada vez que aplicar un programa e que implementar unha función chamada de inicio, 346 00:16:59,300 --> 00:17:04,230 que a función volverá cero estándar, se non dicir o contrario, 347 00:17:04,230 --> 00:17:05,849 e cero é só unha convención. 348 00:17:05,849 --> 00:17:09,430 O mundo volve cero, así, indicando que está todo ben, 349 00:17:09,430 --> 00:17:13,040 efectivamente nos deixando con catro millóns posibles cousas que poden dar 350 00:17:13,040 --> 00:17:17,530 mal para que se volvemos un, que pode significar un código que significa que este 351 00:17:17,530 --> 00:17:18,310 algo deu errado. 352 00:17:18,310 --> 00:17:20,589 Poderiamos volver dous, o que significa esa outra cousa deu mal. 353 00:17:20,589 --> 00:17:23,440 Poderiamos volver catro millóns, o que significa esa outra cousa deu mal. 354 00:17:23,440 --> 00:17:27,170 >> E se agora pensar sobre o seu propio PC ou Mac, ten que lembrar que 355 00:17:27,170 --> 00:17:29,610 ás veces recibe mensaxes de erro enigmáticas do programa que está a 356 00:17:29,610 --> 00:17:32,650 utilizando e, ás veces, ten un humano descrición agradable, pero hai 357 00:17:32,650 --> 00:17:35,265 miúdo un código ou un número na pantalla? 358 00:17:35,265 --> 00:17:37,800 Se iso non veñen á mente, só manter un ollo para fóra para el. 359 00:17:37,800 --> 00:17:40,790 Isto é xeralmente o que estes códigos está referindo. 360 00:17:40,790 --> 00:17:44,200 Están incluídos no Microsoft Word e outros programas, de xeito que, se presentar unha 361 00:17:44,200 --> 00:17:48,850 informe de erro coa empresa, pode dicirlles, oh, eu teño o número do erro 45. 362 00:17:48,850 --> 00:17:51,750 E algún desenvolvedor de volta na empresa pode ver que na súa 363 00:17:51,750 --> 00:17:54,940 código e dicir, oh, iso é porque eu fixen ese erro e é por iso que o usuario 364 00:17:54,940 --> 00:17:56,240 teño esa mensaxe. 365 00:17:56,240 --> 00:17:59,490 >> Pero, francamente, é un pouco distracción e un pouco entediante para 366 00:17:59,490 --> 00:18:02,130 Conclúese que, polo menos, no noso primeiros programas, polo que temos 367 00:18:02,130 --> 00:18:02,970 se omiti-lo. 368 00:18:02,970 --> 00:18:07,450 Pero todo este tempo, cada un de seu funcións principal segredo tiña esa 369 00:18:07,450 --> 00:18:11,600 liña engadida automaticamente a vostede polo compilador, só por convención 370 00:18:11,600 --> 00:18:13,172 aforrar tempo. 371 00:18:13,172 --> 00:18:14,620 >> [Inaudível]. 372 00:18:14,620 --> 00:18:16,250 >> Non precisa incluíla no inicio. 373 00:18:16,250 --> 00:18:16,700 Iso é bo. 374 00:18:16,700 --> 00:18:20,260 Ten que inclui-lo se fose implementación dunha función como esta. 375 00:18:20,260 --> 00:18:22,850 En caso contrario, a función plana fóra non ía funcionar. 376 00:18:22,850 --> 00:18:24,480 Pero no inicio, non é necesario. 377 00:18:24,480 --> 00:18:28,450 Nunha semana ou dúas, imos comezar a recibir en que o costume, xa que pretende iniciar 378 00:18:28,450 --> 00:18:29,690 significando erros. 379 00:18:29,690 --> 00:18:32,550 Pregunta moi boa. 380 00:18:32,550 --> 00:18:36,880 >> Pausa verbal tan rápido para mencionar que este venres, que non terá xantar 381 00:18:36,880 --> 00:18:39,980 per se, pero imos ter unha cea con algúns dos alumnos e funcionarios. 382 00:18:39,980 --> 00:18:42,940 Se desexa unirse a nós, Sinto-se libre para ir a cs50.net/rsvp. 383 00:18:42,940 --> 00:18:45,030 06:00 deste venres. 384 00:18:45,030 --> 00:18:47,990 O espazo é, como sempre, limitado, pero imos seguir facelos nun case 385 00:18:47,990 --> 00:18:51,420 semanalmente o espazo se esgota esta semana. 386 00:18:51,420 --> 00:18:56,160 >> Así, o suspense que paramos en Luns era que as cordas realmente 387 00:18:56,160 --> 00:19:00,520 ser indexado en, que significa só que pode comezar no primeiro carácter, o 388 00:19:00,520 --> 00:19:03,770 segundo personaxe, o terceiro personaxe e así por diante, porque pode 389 00:19:03,770 --> 00:19:07,860 efectivamente pensar nunha cadea, como Ola, como neste caso, de cinco 390 00:19:07,860 --> 00:19:09,670 letras dentro de caixas. 391 00:19:09,670 --> 00:19:13,370 E pode obter en cada un destes caixas co que fixemos sintaxe 392 00:19:13,370 --> 00:19:15,230 presentar o luns? 393 00:19:15,230 --> 00:19:16,760 Estes corchetes no seu teclado. 394 00:19:16,760 --> 00:19:18,980 Isto significa só ir ata o lugar cero. 395 00:19:18,980 --> 00:19:22,840 >> Comezamos a partir de cero, entón o soporte de cero significa h, soporte dun 396 00:19:22,840 --> 00:19:25,170 significa e, e así por diante. 397 00:19:25,170 --> 00:19:28,490 E así o tempo cando nós estivemos utilizando cordas e escribir "Ola" 398 00:19:28,490 --> 00:19:31,250 e "mundo" e outras cousas en pantalla, el foi gardado 399 00:19:31,250 --> 00:19:32,820 en caixas como esta. 400 00:19:32,820 --> 00:19:33,370 E dar un palpite. 401 00:19:33,370 --> 00:19:37,470 Que cada caixa de representar fisicamente dentro do seu ordenador? 402 00:19:37,470 --> 00:19:38,250 >> [Inaudível]. 403 00:19:38,250 --> 00:19:39,150 >> Sentímolo? 404 00:19:39,150 --> 00:19:39,580 >> Caracteres. 405 00:19:39,580 --> 00:19:44,760 >> Así, un personaxe, por suposto, no caso de cordas, e un personaxe é só 406 00:19:44,760 --> 00:19:46,800 oito bits ou un byte. 407 00:19:46,800 --> 00:19:49,550 Entón probablemente ten polo menos vagamente familiarizado co feito de que o seu 408 00:19:49,550 --> 00:19:50,500 ordenador ten memoria. 409 00:19:50,500 --> 00:19:52,110 Ten dous tipos de memoria, polo menos. 410 00:19:52,110 --> 00:19:54,810 Un deles é o disco duro onde gardar cousas de forma permanente, e iso é 411 00:19:54,810 --> 00:19:57,400 tipicamente grande, polo que pode que películas música e así por diante. 412 00:19:57,400 --> 00:20:04,010 >> Así que ten outro tipo de memoria chamada RAM, R-A-M, Random Access 413 00:20:04,010 --> 00:20:07,510 Memoria, e este é o tipo de memoria que se usa cando o computador é 414 00:20:07,510 --> 00:20:11,520 funciona, pero se perder o poder ou a súa batería morre, todo o que está almacenado 415 00:20:11,520 --> 00:20:15,300 na RAM desaparece se perder o poder completamente, porque non é 416 00:20:15,300 --> 00:20:16,060 persistente. 417 00:20:16,060 --> 00:20:19,120 Vostede normalmente ten, a día de hoxe, un concerto del, dous concertos, talvez máis. 418 00:20:19,120 --> 00:20:23,490 E a cabeza de RAM é que é moi moito máis rápido que os discos duros 419 00:20:23,490 --> 00:20:27,390 ou incluso discos de estado sólido a día de hoxe, pero é xeralmente máis caro por iso 420 00:20:27,390 --> 00:20:28,480 ten menos. 421 00:20:28,480 --> 00:20:32,400 >> Entón, a conversa de hoxe realmente se refire para a memoria RAM, que tipo de memoria que 422 00:20:32,400 --> 00:20:35,270 só existe mentres hai poder sendo alimentada no seu computador. 423 00:20:35,270 --> 00:20:40,530 Entón, cando escribir H-E-L-L-O, intro teclado, o H vai nunha 424 00:20:40,530 --> 00:20:44,550 byte de memoria RAM, o E está indo outro byte de memoria RAM, como é 425 00:20:44,550 --> 00:20:45,800 resto da palabra. 426 00:20:45,800 --> 00:20:49,010 Entón, lembro que fomos capaces para facer última vez foi esta. 427 00:20:49,010 --> 00:20:53,940 Déixeme ir adiante e abrir o ficheiro que chamamos string.c, e recordar 428 00:20:53,940 --> 00:20:56,860 que parecía un pouco algo así. 429 00:20:56,860 --> 00:20:59,860 Permítanme, en realidade, desfacer e cambiar é o que parecía, 430 00:20:59,860 --> 00:21:02,654 lonxitude da corda de s. 431 00:21:02,654 --> 00:21:04,560 >> Entón mire para o programa aquí. 432 00:21:04,560 --> 00:21:08,530 Nós temos a biblioteca CS50 así que podemos utilizar si cadea. 433 00:21:08,530 --> 00:21:11,400 Nós temos io.h estándar polo que podemos usar printf. 434 00:21:11,400 --> 00:21:13,580 Por que nós incluímos string.h? 435 00:21:13,580 --> 00:21:16,980 Iso era novo o luns. 436 00:21:16,980 --> 00:21:18,230 Entón, nós queriamos lonxitude da corda. 437 00:21:18,230 --> 00:21:19,090 Str Comp. 438 00:21:19,090 --> 00:21:21,470 As persoas decidiron hai uns anos, imos ser só sucinta. 439 00:21:21,470 --> 00:21:24,290 En vez de chamalo "lonxitude da corda" imos chamalo de "str Comp" e deixar o 440 00:21:24,290 --> 00:21:28,540 figura mundial que fóra, e por iso é que temos acceso con string.h. 441 00:21:28,540 --> 00:21:29,390 >> Este é familiar. 442 00:21:29,390 --> 00:21:30,320 Este é familiar. 443 00:21:30,320 --> 00:21:31,450 Este é familiar. 444 00:21:31,450 --> 00:21:32,370 Isto é algo novo. 445 00:21:32,370 --> 00:21:35,420 Na liña 22 - e imos volver para iso, pero agora sei - 446 00:21:35,420 --> 00:21:37,880 e só sei que este teña le a documentación ou se 447 00:21:37,880 --> 00:21:39,010 xa sabía C - 448 00:21:39,010 --> 00:21:41,510 obter corda, por veces, pode romper. 449 00:21:41,510 --> 00:21:45,130 O usuario é realmente contraditorio ou cooperante e el ou ela só 450 00:21:45,130 --> 00:21:49,450 non escribir nada no teclado ou tipo tanto no teclado 451 00:21:49,450 --> 00:21:53,760 el domina a memoria do ordenador, en teoría, obter corda podería volver 452 00:21:53,760 --> 00:21:56,270 algo distinto dun secuencia de caracteres. 453 00:21:56,270 --> 00:22:01,930 Podería voltar un valor especial chamado NULL en todas as tapas, N-L-L-L, e esta é 454 00:22:01,930 --> 00:22:03,390 só un chamado valor centinela. 455 00:22:03,390 --> 00:22:08,010 É un valor especial que significa algo de malo aconteceu neste caso. 456 00:22:08,010 --> 00:22:10,520 É a ausencia dunha secuencia. 457 00:22:10,520 --> 00:22:16,190 >> Entón nulo Estou comprobando simplemente para que, En resumo, str Leng e 458 00:22:16,190 --> 00:22:20,230 outras funcións que veñen con C, se esperan unha corda, pero paso-los 459 00:22:20,230 --> 00:22:23,630 a ausencia dunha cadea, se pasar eles NULL, o ordenador ou o programa 460 00:22:23,630 --> 00:22:25,000 só vai fallar completamente. 461 00:22:25,000 --> 00:22:25,610 Vai frear. 462 00:22:25,610 --> 00:22:27,250 Que vai vomitar algunha mensaxe de erro. 463 00:22:27,250 --> 00:22:28,690 Cousas malas van ocorrer. 464 00:22:28,690 --> 00:22:31,130 Así, aínda que este aínda é non ben definido - 465 00:22:31,130 --> 00:22:33,730 iso vai facer máis sentido nunha semana ou dous - na liña 22, este é só un 466 00:22:33,730 --> 00:22:38,790 exemplo de auto comprobación de erros defensivos só no caso de que un tempo fóra de 467 00:22:38,790 --> 00:22:42,040 un millón de algo sae mal, a menos o meu programa non ha falla. 468 00:22:42,040 --> 00:22:45,960 >> Entón, se s non é igual a algo malo, Eu teño ese loop for, e iso foi 469 00:22:45,960 --> 00:22:47,710 onde tivemos que outro nova peza de sintaxe. 470 00:22:47,710 --> 00:22:51,580 Eu teño un loop de iteración cero ata a lonxitude do s. 471 00:22:51,580 --> 00:22:56,140 E entón aquí, eu era unha impresión de fóra s soporte de i, pero por que eu uso% c todo 472 00:22:56,140 --> 00:23:00,770 súpeto, no canto de% s ata que s é unha cadea? 473 00:23:00,770 --> 00:23:02,110 É un personaxe, non é? 474 00:23:02,110 --> 00:23:06,560 S é unha cadea, pero s soporte de algo, s soporte i, onde i é cero 475 00:23:06,560 --> 00:23:10,380 ou un ou dous, iso é un individuo carácter na cadea, e así por 476 00:23:10,380 --> 00:23:14,970 que, printf ten que ser informada de que é na verdade un personaxe que esperar. 477 00:23:14,970 --> 00:23:18,096 >> E entón lembro, o que o fixo programa realmente fai? 478 00:23:18,096 --> 00:23:19,848 >> Impreso-lo en columnas. 479 00:23:19,848 --> 00:23:21,120 >> Si, exactamente. 480 00:23:21,120 --> 00:23:24,990 E só imprimiu a palabra que eu escribir unha columna, un carácter por liña. 481 00:23:24,990 --> 00:23:26,190 Entón imos ver iso de novo. 482 00:23:26,190 --> 00:23:27,810 Entón faga cadea. 483 00:23:27,810 --> 00:23:30,200 Compilado Aceptar. . / Cadea. 484 00:23:30,200 --> 00:23:35,560 Déixeme escribir H-E-L-L-O, Intro e en realidade eu entendo, un por liña. 485 00:23:35,560 --> 00:23:37,280 >> Entón deixe-me facer unha optimización aquí. 486 00:23:37,280 --> 00:23:40,240 Se pensar sobre iso, especialmente se xa programou antes, hai 487 00:23:40,240 --> 00:23:43,340 sen dúbida, unha ineficiencia na liña 24. 488 00:23:43,340 --> 00:23:46,160 Noutras palabras, non é necesariamente o mellor deseño. 489 00:23:46,160 --> 00:23:50,200 Simple, polo menos unha vez lembre que str Comp é, pero é 490 00:23:50,200 --> 00:23:52,640 facendo parvada potencialmente. 491 00:23:52,640 --> 00:23:54,863 O que pode ser iso? 492 00:23:54,863 --> 00:23:56,280 >> [Inaudível]. 493 00:23:56,280 --> 00:23:56,800 >> Exactamente. 494 00:23:56,800 --> 00:24:00,340 É comprobando a lonxitude do s en cada momento, aínda que 495 00:24:00,340 --> 00:24:02,980 H-E-L-L-O sempre vai ser de cinco caracteres. 496 00:24:02,980 --> 00:24:05,490 Cada vez que a través desta malla, a cinco non está a cambiar. 497 00:24:05,490 --> 00:24:08,750 Podería estar incrementando i, pero o que é a lonxitude do s en cada 498 00:24:08,750 --> 00:24:09,690 iteración deste loop? 499 00:24:09,690 --> 00:24:15,810 E cinco, e cinco, que é cinco, e aínda estou preguntando iso, con todo 500 00:24:15,810 --> 00:24:18,320 pregunta de novo e de novo e de novo. 501 00:24:18,320 --> 00:24:20,750 Agora, francamente, o ordenador é tan maldita rápido, ninguén vai notar unha 502 00:24:20,750 --> 00:24:23,780 diferenza de, neste caso, pero estes tipos de decisións de deseño pobre pode 503 00:24:23,780 --> 00:24:28,330 comezar a sumar o propio compilador non tentar corrixir isto para vostede que 504 00:24:28,330 --> 00:24:30,630 que normalmente non faría, polo polo menos no interior do aparello. 505 00:24:30,630 --> 00:24:31,540 >> Entón eu vou facelo. 506 00:24:31,540 --> 00:24:34,580 Eu estou indo a engadir unha coma despois miña primeira variable, i. 507 00:24:34,580 --> 00:24:37,310 Vou darme outro variable, chamando-n, só por 508 00:24:37,310 --> 00:24:41,330 convención para números, e entón eu estou vai asignar n o valor de cadea 509 00:24:41,330 --> 00:24:42,530 longo do s. 510 00:24:42,530 --> 00:24:46,060 E entón eu vou cambiar miña condición de ser o que? 511 00:24:46,060 --> 00:24:51,960 Vou cambiar a miña condición para cando sexa menor que n. 512 00:24:51,960 --> 00:24:55,700 >> Entón, agora, as veces son eu comprobar a lonxitude do s? 513 00:24:55,700 --> 00:25:00,110 Unha vez, pero é OK para comprobar i contra n unha e outra vez, xa que agora os 514 00:25:00,110 --> 00:25:03,170 Os valores non están realmente cambiando. 515 00:25:03,170 --> 00:25:06,020 Agora, polo de agora, só sei que cando chamar a unha función, hai un pouco de 516 00:25:06,020 --> 00:25:09,930 encima, non o suficiente para desanima-lo realmente sempre de utilizar as funcións, pero 517 00:25:09,930 --> 00:25:12,750 seguramente cando hai unha liña de código así - e as liñas se ve 518 00:25:12,750 --> 00:25:15,490 máis interesante antes de tempo - onde hai unha oportunidade para pensar, se eu 519 00:25:15,490 --> 00:25:18,320 Introduce este código, cantas veces vai executar? 520 00:25:18,320 --> 00:25:20,950 Vai comezar a ver ao longo do tempo a desempeño dos seus programas poden 521 00:25:20,950 --> 00:25:21,660 de feito cambiar. 522 00:25:21,660 --> 00:25:24,110 >> De feito, un dos problemas define temos fixo o ano pasado, implica 523 00:25:24,110 --> 00:25:27,600 implantación, como ten que lembrar de semana cero, un corrector ortográfico, pero unha 524 00:25:27,600 --> 00:25:31,380 corrector ortográfico que está deseñado para soportar un dicionario de 150 mil máis 525 00:25:31,380 --> 00:25:32,860 palabras que dan a vostedes. 526 00:25:32,860 --> 00:25:37,100 Vostede tería que escribir un código que carga esas palabras na memoria RAM, así en 527 00:25:37,100 --> 00:25:40,700 caixas como vimos na pantalla dun momento atrás, e logo, tan rápido como 528 00:25:40,700 --> 00:25:43,740 pode, ten que ser capaz de responder a unha cuestión da forma, é esta palabra 529 00:25:43,740 --> 00:25:44,280 incorrecto? 530 00:25:44,280 --> 00:25:45,420 É esta palabra incorrecta? 531 00:25:45,420 --> 00:25:46,770 É esta palabra incorrecta? 532 00:25:46,770 --> 00:25:49,525 >> E, en algo parecido a isto que temos feito o ano pasado se converteu, 533 00:25:49,525 --> 00:25:53,500 aínda que nunha base opt-in opcional, un competición do tipo, en que o 534 00:25:53,500 --> 00:25:59,470 alumnos que usan o menos RAM e menos tempo, menos ciclos de CPU, acaban 535 00:25:59,470 --> 00:26:02,640 burbulla para o inicio dun pequeno tarxeta do líder ou a clasificación que puxo en 536 00:26:02,640 --> 00:26:04,770 páxina de inicio do curso, como xa feito nos últimos anos. 537 00:26:04,770 --> 00:26:08,100 Así, unha vez máis, totalmente opcional, pero esta fala ás oportunidades de deseño 538 00:26:08,100 --> 00:26:11,250 que están á cabeza cando comezamos construción na parte superior dalgunhas destas 539 00:26:11,250 --> 00:26:14,010 bloques de construción básicos. 540 00:26:14,010 --> 00:26:16,780 >> Entón deixe-me volver a este diagrama para só un momento e revelar algo 541 00:26:16,780 --> 00:26:17,610 algo máis. 542 00:26:17,610 --> 00:26:21,400 Este feito é unha cadea, e tivemos vantaxe de algunhas bibliotecas 543 00:26:21,400 --> 00:26:25,150 io.h estándar que ten - 544 00:26:25,150 --> 00:26:26,110 >> Printf. 545 00:26:26,110 --> 00:26:27,860 >> Printf, entre outras cousas. 546 00:26:27,860 --> 00:26:31,540 cs50.h, que se int e obter cadea e así por diante, string.h, que 547 00:26:31,540 --> 00:26:32,570 tivo str Comp. 548 00:26:32,570 --> 00:26:34,800 Pero resulta que hai aínda outro. 549 00:26:34,800 --> 00:26:38,540 Francamente, hai moitas e moitas cabeceira arquivos que declarar funcións 550 00:26:38,540 --> 00:26:43,320 para as bibliotecas, pero iso é ctype.h realmente vai ser un pouco 551 00:26:43,320 --> 00:26:46,900 vantaxoso, porque eu vou para ir adiante e aplicar un 552 00:26:46,900 --> 00:26:48,120 outro programa aquí. 553 00:26:48,120 --> 00:26:52,420 >> Déixeme ir adiante e abrir man de algo Escribín antes chamada 554 00:26:52,420 --> 00:26:55,750 capitalize.c, e imos dar un ollo en como funciona isto. 555 00:26:55,750 --> 00:27:00,340 Lembre que está a usar, nesta versión del, tres arquivos familiares. 556 00:27:00,340 --> 00:27:04,110 Teña en conta que, na liña 18, eu son obter unha liña de texto. 557 00:27:04,110 --> 00:27:07,660 Observe na liña 21, estou afirmando que o seguinte código vai 558 00:27:07,660 --> 00:27:12,170 capitalizar s, o que o usuario inseriu , E como eu estou facendo isto? 559 00:27:12,170 --> 00:27:13,300 Ben, eu estou tomando - 560 00:27:13,300 --> 00:27:14,750 lección aprendida a última vez - 561 00:27:14,750 --> 00:27:18,370 Estou declarando i e n e iteración sobre os caracteres na cadea. 562 00:27:18,370 --> 00:27:22,720 E entón o que é ese bloque de código na liña 24 a 27 563 00:27:22,720 --> 00:27:24,550 facer en termos laicos? 564 00:27:24,550 --> 00:27:27,766 565 00:27:27,766 --> 00:27:29,730 >> Minúsculas carta de volta. 566 00:27:29,730 --> 00:27:30,430 >> Exactamente. 567 00:27:30,430 --> 00:27:35,920 Se s soporte i - por iso, se o i-th carácter de s, que é dalgún 568 00:27:35,920 --> 00:27:40,220 carácter na cadea, é maior que o igual a un e minúsculas - 569 00:27:40,220 --> 00:27:42,670 recordar que o dúo comercial significan e - 570 00:27:42,670 --> 00:27:46,810 e mesmo personaxe, s soporte i, é inferior ou igual a Z. minúsculas, 571 00:27:46,810 --> 00:27:50,600 isto significa que se un A ou B ou C ou punto, punto, punto ou z, o que significa 572 00:27:50,600 --> 00:27:51,340 é minúscula. 573 00:27:51,340 --> 00:27:52,900 O que quero facer nese caso? 574 00:27:52,900 --> 00:27:55,010 Ben, eu podo facelo un pouco enigmaticamente, pero 575 00:27:55,010 --> 00:27:56,160 imos provocar este apart. 576 00:27:56,160 --> 00:28:00,210 >> Vou chamar ao printf, imprime% c porque quero reimprimir este 577 00:28:00,210 --> 00:28:01,580 personaxe na pantalla. 578 00:28:01,580 --> 00:28:06,650 Estou pasando entón a ter soporte s i, o i-th personaxe s, e despois por 579 00:28:06,650 --> 00:28:12,330 estou facendo este pequeno truco aquí, minúsculas Un capital de menos? 580 00:28:12,330 --> 00:28:16,352 Que dará me, dun modo xeral? 581 00:28:16,352 --> 00:28:18,600 >> [Inaudível]. 582 00:28:18,600 --> 00:28:19,390 >> Exactamente. 583 00:28:19,390 --> 00:28:20,860 Realmente non me lembro - 584 00:28:20,860 --> 00:28:24,390 que foi de 65 para o capital A. Realmente non lembre que é un minúsculo, 585 00:28:24,390 --> 00:28:25,540 pero non importa. 586 00:28:25,540 --> 00:28:26,580 O ordenador sabe. 587 00:28:26,580 --> 00:28:30,380 Así dicindo, minúsculas salvo maiúscula, é estraño ser 588 00:28:30,380 --> 00:28:33,530 restando un char doutro, pero cales son chars debaixo do capo? 589 00:28:33,530 --> 00:28:34,520 Son só números. 590 00:28:34,520 --> 00:28:36,980 Entón o que estes números son, deixar que o equipo recorda que 591 00:28:36,980 --> 00:28:38,240 en vez de o que me humana. 592 00:28:38,240 --> 00:28:41,710 >> Entón minúsculas unha capital menos un é me vai dar a diferenza. 593 00:28:41,710 --> 00:28:45,370 El pasa a ser de 32, e que sería o caso de minúsculas b e de capital B 594 00:28:45,370 --> 00:28:45,930 e así por diante. 595 00:28:45,930 --> 00:28:47,710 El permanece consistente, por sorte. 596 00:28:47,710 --> 00:28:51,930 Entón, eu estou dicindo esencialmente, tomar o letra minúscula, restar off que 597 00:28:51,930 --> 00:28:55,340 diferenza de nivel, e que efectivamente cambios s soporte de i 598 00:28:55,340 --> 00:28:59,400 minúsculas, claro, maiúscula, sen que eu realmente ter que pensar 599 00:28:59,400 --> 00:29:03,040 sobre ou lembre, o que eran os números falamos cando os oito 600 00:29:03,040 --> 00:29:04,800 voluntarios xurdiu no escenario? 601 00:29:04,800 --> 00:29:08,800 Agora, mentres tanto, no máis, se non é unha letra minúscula, conforme determinado 602 00:29:08,800 --> 00:29:10,400 pola liña 24, só imprimir lo. 603 00:29:10,400 --> 00:29:12,590 Eu só quero tocar a caracteres que eran 604 00:29:12,590 --> 00:29:14,410 de feito orixinalmente minúsculas. 605 00:29:14,410 --> 00:29:15,150 >> Entón, imos ver iso. 606 00:29:15,150 --> 00:29:17,400 Fai capitalizar. 607 00:29:17,400 --> 00:29:18,470 Compilado, Aceptar. 608 00:29:18,470 --> 00:29:19,730 . / Capitalizar. 609 00:29:19,730 --> 00:29:23,530 E déixeme escribir H-E-L-L-O en letras minúsculas, Intro. 610 00:29:23,530 --> 00:29:26,370 E entender que se converter en letras maiúsculas. 611 00:29:26,370 --> 00:29:27,940 Déixeme facer iso de novo con unha palabra diferente. 612 00:29:27,940 --> 00:29:32,720 Que tal D-A-V-I-D co primeiro D capitalizados como un nome tipicamente é? 613 00:29:32,720 --> 00:29:33,560 Intro. 614 00:29:33,560 --> 00:29:34,870 Teña en conta que é correcta. 615 00:29:34,870 --> 00:29:40,250 El só emite o primeiro inalterada D vía que calquera outra construción. 616 00:29:40,250 --> 00:29:42,170 >> Polo tanto, teña en mente, entón, un algunhas cousas aquí. 617 00:29:42,170 --> 00:29:45,060 Un, se quere revisar dous condicións dunha soa vez, pode e 618 00:29:45,060 --> 00:29:46,500 xuntos, como prevíamos. 619 00:29:46,500 --> 00:29:49,900 Pode comparar personaxes dese xeito e tratar eficazmente personaxes como 620 00:29:49,900 --> 00:29:53,050 números, pero, francamente, iso é tan maldita críptica eu nunca vou recordar 621 00:29:53,050 --> 00:29:56,510 Como chegar a este a partir de cero sen razoar con el por un bo 622 00:29:56,510 --> 00:29:57,140 un pouco de tempo. 623 00:29:57,140 --> 00:30:00,590 >> Non sería bo se alguén aí, escribiu unha función chamada 624 00:30:00,590 --> 00:30:05,390 inferior ao que podería responder por min certa ou falsa, este personaxe é minúscula? 625 00:30:05,390 --> 00:30:09,350 Ben, por sorte, quen escribiu ctype.h fixo exactamente iso. 626 00:30:09,350 --> 00:30:15,540 Déixeme ir ata aquí e engadir ctype para c tipo, e agora déixeme ir ata aquí e 627 00:30:15,540 --> 00:30:18,820 reescribir esta liña como segue. 628 00:30:18,820 --> 00:30:27,510 >> Entón, se se chama é menor, eu afirmo, s soporte de i, entón eu vou borrar 629 00:30:27,510 --> 00:30:29,400 estas dúas liñas completamente. 630 00:30:29,400 --> 00:30:32,570 Entón agora a alguén, eu estou esperando, escribiu unha función chamada é menor, e é 631 00:30:32,570 --> 00:30:36,250 Acontece que fixeron e declararon lo dentro ctype.h. 632 00:30:36,250 --> 00:30:39,480 E agora vou saír da liña 27 só, eu vou deixar liña 31 633 00:30:39,480 --> 00:30:41,890 só, pero entender o que eu teño reforzouse o meu código. 634 00:30:41,890 --> 00:30:42,690 É agora máis limpo. 635 00:30:42,690 --> 00:30:47,250 É menos difícil ollar a través porque agora a función, ademais, é 636 00:30:47,250 --> 00:30:50,080 tan marabillosas nomeado só fai o que di. 637 00:30:50,080 --> 00:30:51,520 >> Entón agora eu estou indo a gardar esta. 638 00:30:51,520 --> 00:30:52,930 Vou diminuír o zoom. 639 00:30:52,930 --> 00:30:56,650 E así como en risco podería ter Booleanos, valores booleanos certo ou 640 00:30:56,650 --> 00:31:01,530 falsa, iso é o que se efectivamente reducir retorno. 641 00:31:01,530 --> 00:31:02,960 Déixeme recompilar. 642 00:31:02,960 --> 00:31:04,500 Déixeme re-run. 643 00:31:04,500 --> 00:31:07,350 E agora imos tratar de novo, H-E-L-L-S, Intro. 644 00:31:07,350 --> 00:31:07,970 Iso é moi bo. 645 00:31:07,970 --> 00:31:10,150 E probe de novo, comproba se I non romper algo. 646 00:31:10,150 --> 00:31:11,670 Isto é capitalizado tamén. 647 00:31:11,670 --> 00:31:14,190 >> Pero iso non é bo o suficiente, xa que o outra cousa que eu nunca vou 648 00:31:14,190 --> 00:31:19,090 Teña en conta que se non traballar con el de verdade coidadosamente sobre, digamos, o papel é 649 00:31:19,090 --> 00:31:19,920 esta liña maldita. 650 00:31:19,920 --> 00:31:23,450 Non sería bo se houbese unha función chamada a superior? 651 00:31:23,450 --> 00:31:26,930 Ben, pasa por aí está en ctype.h ben. 652 00:31:26,930 --> 00:31:30,150 Eu estou indo a ir adiante e escribir - 653 00:31:30,150 --> 00:31:31,340 deixe-me traer a liña de volta. 654 00:31:31,340 --> 00:31:36,430 Pola contra aquí, deixe-me ir adiante e digo, substituír o% c da 655 00:31:36,430 --> 00:31:42,110 resultado de chamar esta función para superior da i-th carácter de s. 656 00:31:42,110 --> 00:31:45,430 E agora entende que está quedando algo equilibrado. 657 00:31:45,430 --> 00:31:48,870 Eu teño que manter o control de cantas parénteses eu abría e pechaba. 658 00:31:48,870 --> 00:31:50,050 >> Entón, agora é aínda máis limpo. 659 00:31:50,050 --> 00:31:53,460 Agora, este programa está quedando mellor e mellor deseñado, sen dúbida, porque é 660 00:31:53,460 --> 00:31:56,450 moito máis lexible, pero non é ningunha imos corrixir. 661 00:31:56,450 --> 00:31:57,600 Fai capitalizar. 662 00:31:57,600 --> 00:31:58,930 . / Capitalizar. 663 00:31:58,930 --> 00:32:03,220 H-E-L-L-S. Imos executa-lo de novo, D-V-A-I-D. OK, entón aínda estamos en 664 00:32:03,220 --> 00:32:04,250 boa forma. 665 00:32:04,250 --> 00:32:06,030 >> Pero agora a superior. 666 00:32:06,030 --> 00:32:09,720 Propoño que hai unha Limpe poderíamos facelo sería 667 00:32:09,720 --> 00:32:12,820 moi bo, que podería realmente usar se este código e realmente nos dan cinco 668 00:32:12,820 --> 00:32:15,150 de cinco para o proxecto, por exemplo. 669 00:32:15,150 --> 00:32:16,510 O que sería bo para se librar? 670 00:32:16,510 --> 00:32:20,770 Ben, mira como maldito longo deste bloque de código é só para facer algo simple. 671 00:32:20,770 --> 00:32:23,850 >> Agora, como un aparte, como pode ter ver na sección de super ese pasado 672 00:32:23,850 --> 00:32:27,570 fin de semana, non rigorosamente o claves cando só ten unha 673 00:32:27,570 --> 00:32:32,180 liña de código, aínda que propuxemos mantelos de xeito que fai moito 674 00:32:32,180 --> 00:32:36,190 máis claro, como en forma de U de cero bloques, o que está dentro do sector. 675 00:32:36,190 --> 00:32:40,170 Pero non sería bo se a superior, cando dada a súa entrada, transformouse o en 676 00:32:40,170 --> 00:32:44,730 maiúsculas, se non é, e cal sería ser marabilloso, en caso contrario, se 677 00:32:44,730 --> 00:32:47,210 xa é maiúscula? 678 00:32:47,210 --> 00:32:49,620 Só pasalo a través e deixalo só. 679 00:32:49,620 --> 00:32:50,660 >> Entón quizais sexa iso. 680 00:32:50,660 --> 00:32:52,990 Podería probar e só espero que el, pero déixeme 681 00:32:52,990 --> 00:32:54,450 introducir unha outra cousa. 682 00:32:54,450 --> 00:32:57,440 No canto de empregar esta built-in da terminal fiestra aquí en baixo, recorda que 683 00:32:57,440 --> 00:33:01,130 esta icona cadrado negro dálle unha grande fiestra de terminal que podo encher 684 00:33:01,130 --> 00:33:02,260 pantalla, se eu queira? 685 00:33:02,260 --> 00:33:05,820 Entón non é que son unha especie de estraño nomeado, pero non hai esas cousas chamadas 686 00:33:05,820 --> 00:33:10,970 Man pages, páxinas de manual, o home para breve, e podo acceder a estes por 687 00:33:10,970 --> 00:33:14,515 escribindo man - 688 00:33:14,515 --> 00:33:15,570 o que me gustaría escribir? 689 00:33:15,570 --> 00:33:17,830 Home superior. 690 00:33:17,830 --> 00:33:21,090 >> E agora entender que existe unha funcionando no interior do ordenador, en 691 00:33:21,090 --> 00:33:23,970 Neste caso, o aparello, que é só o sistema operativo Linux, que vai 692 00:33:23,970 --> 00:33:27,920 para me dar un conxunto un tanto enigmática de saída, pero vai atopar ao longo do tempo que 693 00:33:27,920 --> 00:33:31,720 el sempre está formatado practicamente o aínda así que comezar a se acostumar con iso. 694 00:33:31,720 --> 00:33:35,130 Teña en conta na parte superior para arriba, e é aparentemente o mesmo documentación 695 00:33:35,130 --> 00:33:35,680 para diminuír. 696 00:33:35,680 --> 00:33:38,740 Quen escribiu que estaba cortando algúns ángulos e poñer todo nunha páxina. 697 00:33:38,740 --> 00:33:40,720 Propósito destas "cousas en vida é a de converter un 698 00:33:40,720 --> 00:33:42,780 carta a maiúsculas ou minúsculas. 699 00:33:42,780 --> 00:33:46,290 >> Teña en conta que na sinopse, a páxina man está me ensinando que ficheiro eu teño 700 00:33:46,290 --> 00:33:48,130 para incluír a usar esta cousa. 701 00:33:48,130 --> 00:33:51,320 Está me dando as sinaturas para estes funcións, ambos, incluso 702 00:33:51,320 --> 00:33:53,510 aínda que agora só se preocupan un. 703 00:33:53,510 --> 00:33:54,730 Aquí é agora unha descrición. 704 00:33:54,730 --> 00:33:58,800 Para superior convértese letra c en maiúsculas, se é posible. 705 00:33:58,800 --> 00:34:02,280 >> Aínda non é instrutivo, pero déixeme agora ollar por baixo do valor de cambio, a cousa 706 00:34:02,280 --> 00:34:03,520 que se entrega de volta. 707 00:34:03,520 --> 00:34:08,600 Así, o valor que é de retorno do carta ou c converter o 708 00:34:08,600 --> 00:34:09,870 conversión non se pode. 709 00:34:09,870 --> 00:34:11,202 Que é c? 710 00:34:11,202 --> 00:34:12,560 >> O carácter orixinal. 711 00:34:12,560 --> 00:34:15,370 >> O personaxe orixinal e sabemos polo que, de novo, indo ata a 712 00:34:15,370 --> 00:34:19,179 sinopse, e quen escribiu isto función só decidiu que a entrada 713 00:34:19,179 --> 00:34:22,909 cara á parte superior e inferior é só arbitrariamente será chamado c. 714 00:34:22,909 --> 00:34:24,909 Eles poderían ter chamado máis nada eles queren, pero eles mantiveron 715 00:34:24,909 --> 00:34:26,270 simple como c. 716 00:34:26,270 --> 00:34:27,880 Entón, eu consultei a páxina do manual. 717 00:34:27,880 --> 00:34:31,870 Esta frase me garantiu que, se non é unha letra minúscula, é 718 00:34:31,870 --> 00:34:34,969 me vai dar de volta c, o que é perfecta, o que significa que pode se librar de 719 00:34:34,969 --> 00:34:36,199 miña condición de persoa. 720 00:34:36,199 --> 00:34:39,679 >> Entón deixe-me volver a gedit, e agora déixeme facelo. 721 00:34:39,679 --> 00:34:41,960 Vou copiar a miña instrución printf. 722 00:34:41,960 --> 00:34:45,969 Eu estou indo a ir adiante e á dereita dentro o loop de impresión para fóra, e obter 723 00:34:45,969 --> 00:34:48,760 Libren-se agora toda esta construción se. 724 00:34:48,760 --> 00:34:51,860 Non era unha mala idea, e foi moi moi correcto e coherente con 725 00:34:51,860 --> 00:34:54,100 todo o que teño cravado, Pero non é necesario. 726 00:34:54,100 --> 00:34:57,070 Así que entender algunha biblioteca función de que hai alguén 727 00:34:57,070 --> 00:35:01,340 escribiu, ou quizais escribiu noutro lugar o ficheiro, pode usalo e realmente 728 00:35:01,340 --> 00:35:02,690 comezar a usar o código. 729 00:35:02,690 --> 00:35:06,080 >> E cando digo cousas como bo estilo, o feito de que a persoa chamada 730 00:35:06,080 --> 00:35:11,490 funcionar a superior, ou anteriormente se inferior é incrible útil porque 731 00:35:11,490 --> 00:35:12,900 son moi descriptivo. 732 00:35:12,900 --> 00:35:16,120 Non quere chamar as funcións x e y e z, os cales teñen 733 00:35:16,120 --> 00:35:19,620 moito, moito menor significado. 734 00:35:19,620 --> 00:35:25,160 Calquera dúbida sobre esta serie de melloras? 735 00:35:25,160 --> 00:35:28,010 >> Entón, só tes que dicir que un dos delivery é mesmo como o seu propio problema 736 00:35:28,010 --> 00:35:30,960 set - quizais un conxunto de problemas, pero seguramente I definir dous e para adiante, mesmo 737 00:35:30,960 --> 00:35:34,380 cando se está correcto non necesariamente significa que son perfectos só 738 00:35:34,380 --> 00:35:36,155 ou aínda particularmente ben deseñado. 739 00:35:36,155 --> 00:35:38,420 Ese é o outro eixe para comezar a pensar. 740 00:35:38,420 --> 00:35:41,730 Polo tanto, esta foi unha secuencia dentro da súa memoria do ordenador, pero se ten un 741 00:35:41,730 --> 00:35:46,180 grupo enteiro de personaxes como H-E-L-L-O dentro de RAM, e supoña 742 00:35:46,180 --> 00:35:51,330 que no seu programa de chamar obter cadea varias veces de tal forma que 743 00:35:51,330 --> 00:35:54,200 chamar obter secuencia dunha vez, entón chamar obter corda de novo. 744 00:35:54,200 --> 00:35:55,880 Ben, o que vai ocorrer ao longo do tempo? 745 00:35:55,880 --> 00:35:59,170 >> Noutras palabras, se ten unha liña de código, aínda que fóra de contexto, como 746 00:35:59,170 --> 00:36:02,120 cadea s queda - 747 00:36:02,120 --> 00:36:02,960 imos facelo. 748 00:36:02,960 --> 00:36:05,270 String nome coincide obter cadea. 749 00:36:05,270 --> 00:36:08,590 Entón supoño que esta liña de código se destina pedir ao usuario para o seu nome. 750 00:36:08,590 --> 00:36:14,580 Esta seguinte liña de código é usado para solicitar o usuario para a súa escola, e 751 00:36:14,580 --> 00:36:15,920 esta liña seguinte, e así por diante. 752 00:36:15,920 --> 00:36:18,150 Supoña que sigo a preguntar o usuario a outro e 753 00:36:18,150 --> 00:36:19,750 outra e outra cadea. 754 00:36:19,750 --> 00:36:22,390 Eles van estar na memoria á vez. 755 00:36:22,390 --> 00:36:24,280 Un non vai espancar o outro. 756 00:36:24,280 --> 00:36:26,420 A escola non é substituír o outro. 757 00:36:26,420 --> 00:36:28,520 Pero onde eles fan todo acabar na memoria? 758 00:36:28,520 --> 00:36:32,030 >> Ben, se comezar a debuxar na pantalla, que podemos utilizar esta cousa 759 00:36:32,030 --> 00:36:35,800 aquí como un cadro-negro, se ese negro rectángulo representa o meu ordenador de 760 00:36:35,800 --> 00:36:39,800 memoria, vou comezar a arbitrariamente dividíndoo en cadrados pequenos, 761 00:36:39,800 --> 00:36:42,120 cada un dos cales representa un byte de memoria. 762 00:36:42,120 --> 00:36:46,560 Francamente, se ten un gigabyte de memoria RAM nos días de hoxe, ten mil millóns de bytes 763 00:36:46,560 --> 00:36:49,540 de memoria no seu ordenador, de xeito mil millóns destas prazas. 764 00:36:49,540 --> 00:36:52,110 Entón, só tes que dicir que, este non é realmente a escala. 765 00:36:52,110 --> 00:36:58,250 >> Pero poderiamos estar tirando todos estes claramente non escala cadrados, e este 766 00:36:58,250 --> 00:37:01,260 representa colectivamente memoria do meu ordenador. 767 00:37:01,260 --> 00:37:03,136 Agora imos facer punto, punto, punto. 768 00:37:03,136 --> 00:37:06,260 Polo tanto, noutras palabras, cando eu agora levar o usuario coa corda get me dar unha 769 00:37:06,260 --> 00:37:07,350 cadea, o que pasa? 770 00:37:07,350 --> 00:37:14,270 Se o usuario escribe en "Ola", que remata Se en H-E-L-L-S. Pero supoña que o 771 00:37:14,270 --> 00:37:15,720 entón o usuario tipo de - 772 00:37:15,720 --> 00:37:17,250 en realidade, eu non debería ter feito Hola, porque estamos pedindo 773 00:37:17,250 --> 00:37:18,330 los polos seus nomes. 774 00:37:18,330 --> 00:37:20,580 Entón, imos voltar se podo facelo. 775 00:37:20,580 --> 00:37:26,130 >> Entón, se eu escribir D-A-V-I-D para o meu nome, pero recorda que a segunda liña de 776 00:37:26,130 --> 00:37:29,220 código foi conseguir a cadea de novo para obter a súa escola. 777 00:37:29,220 --> 00:37:32,090 Onde é que a palabra que o usuario tipos en indo a ir xunto? 778 00:37:32,090 --> 00:37:38,290 Ben, quizais vai entrar H-A-N-V-A-R-D. Así, aínda que eu teño 779 00:37:38,290 --> 00:37:41,560 deseñado como dúas liñas, este é só unha morea de bytes na súa 780 00:37:41,560 --> 00:37:42,710 RAM do ordenador. 781 00:37:42,710 --> 00:37:46,560 Hai un problema, porque agora se eu son usar RAM neste moi razoable 782 00:37:46,560 --> 00:37:49,910 pero unha especie de forma inxenua, o que pode aparentemente non distinguir? 783 00:37:49,910 --> 00:37:52,640 784 00:37:52,640 --> 00:37:54,680 Onde empeza un e onde remata un, non? 785 00:37:54,680 --> 00:37:55,860 Son o tipo de borrar xuntos. 786 00:37:55,860 --> 00:37:57,920 >> Así, verifícase que o ordenador non fai iso. 787 00:37:57,920 --> 00:38:04,720 Déixeme realmente rolar de volta o tempo a poucos personaxes, e ao contrario de Harvard 788 00:38:04,720 --> 00:38:09,570 vai inmediatamente despois do nome do usuario, o usuario realmente queda, detrás 789 00:38:09,570 --> 00:38:12,000 das escenas, un personaxe especial inserido pola 790 00:38:12,000 --> 00:38:13,885 ordenador para el ou ela. 791 00:38:13,885 --> 00:38:19,470 / 0, tamén coñecido como o personaxe nul annoyingly chamado N-K-L, nin 792 00:38:19,470 --> 00:38:22,190 N-L-L-L, pero escribilo como / 0. 793 00:38:22,190 --> 00:38:27,130 É que todos os bits cero é un marcador de entre a primeira palabra que o usuario 794 00:38:27,130 --> 00:38:28,290 ingresaran eo segundo. 795 00:38:28,290 --> 00:38:33,020 >> Entón Harvard realmente agora remata como esta secuencia de caracteres 796 00:38:33,020 --> 00:38:36,110 e un máis / 0. 797 00:38:36,110 --> 00:38:41,690 Así, noutras palabras, facendo que estes valores sentinela, de oito a cero contigua 798 00:38:41,690 --> 00:38:45,220 anacos, agora pode comezar a diferenciar un personaxe doutro. 799 00:38:45,220 --> 00:38:49,720 Entón, todo este tempo que estaba "Ola" é en realidade, "Ola" coa / 0, e 800 00:38:49,720 --> 00:38:53,580 con todo, pode moi ben ser un pouco máis memoria RAM 801 00:38:53,580 --> 00:38:56,400 no interior do ordenador. 802 00:38:56,400 --> 00:38:57,810 >> Deixe-me facer outra cousa agora. 803 00:38:57,810 --> 00:39:01,800 Acontece que todas esas prazas temos que chegou a deseñar, son, si, 804 00:39:01,800 --> 00:39:06,140 cordas, pero máis xeralmente, estas cousas son matrices. 805 00:39:06,140 --> 00:39:10,590 Unha matriz é só unha peza de memoria que está de volta a facer a volta atrás, 806 00:39:10,590 --> 00:39:15,130 e normalmente usa unha matriz por medio desta notación corchete. 807 00:39:15,130 --> 00:39:18,210 Entón, imos ver estes un pouco ao longo do tempo, pero déixeme ir adiante e 808 00:39:18,210 --> 00:39:21,160 abrir, imos chamalo as idades. 809 00:39:21,160 --> 00:39:23,920 E teña en conta o que podemos facer con estes mesmos trucos, algo 810 00:39:23,920 --> 00:39:25,750 pouco máis de sintaxe aquí. 811 00:39:25,750 --> 00:39:29,270 >> Así, na liña 17 deste programa - De feito, deixe-me executar o programa primeiro 812 00:39:29,270 --> 00:39:30,770 para que poidamos ver o que esa cousa fai. 813 00:39:30,770 --> 00:39:33,530 Deixe-me chamar para facer as idades compilar este programa. 814 00:39:33,530 --> 00:39:34,950 As idades. /. 815 00:39:34,950 --> 00:39:36,480 Cantas persoas están na sala? 816 00:39:36,480 --> 00:39:38,020 Chamalo de tres. 817 00:39:38,020 --> 00:39:39,575 Idade da primeira persoa? 818 00:39:39,575 --> 00:39:42,710 18, 19 e 20. 819 00:39:42,710 --> 00:39:46,770 E agora un pouco ridículo, eu só fixeron un programa que idades os 820 00:39:46,770 --> 00:39:47,740 tres persoas. 821 00:39:47,740 --> 00:39:50,390 >> Polo tanto, hai claramente unha oportunidade por algunha aritmética diversión aquí. 822 00:39:50,390 --> 00:39:51,560 Afortunadamente, a matemática é correcta. 823 00:39:51,560 --> 00:39:54,720 18 foi a 19, 19 foron a 20 e así por diante. 824 00:39:54,720 --> 00:39:58,510 Pero o que realmente significaba ser ilustrativo aquí é o xeito no que estamos almacenando 825 00:39:58,510 --> 00:40:00,190 idades destas tres persoas. 826 00:40:00,190 --> 00:40:02,370 Déixeme achegar o que está pasando aquí. 827 00:40:02,370 --> 00:40:06,240 >> Entón, primeiro, estas primeiras liñas deben estar recibindo moi familiar. 828 00:40:06,240 --> 00:40:08,770 Estou só alertando o usuario á número de persoas na sala. 829 00:40:08,770 --> 00:40:11,490 Entón eu estou usando obter int e facer mentres a facelo de novo e de novo e de novo. 830 00:40:11,490 --> 00:40:15,780 Vimos que o patrón anterior, pero liña 27 é novo e moi 831 00:40:15,780 --> 00:40:18,160 útil, e se fará cada vez máis útil. 832 00:40:18,160 --> 00:40:21,620 Teña en conta que o que é diferente en liña 27 é que me parece que é declarar un 833 00:40:21,620 --> 00:40:23,960 int chamados idades, pero esperar. 834 00:40:23,960 --> 00:40:27,140 Non son só as idades int. 835 00:40:27,140 --> 00:40:30,130 Hai estes corchetes, dentro da cal é n. 836 00:40:30,130 --> 00:40:35,150 >> Así, o soporte n neste contexto, non dentro dunha instrución printf aquí, pero 837 00:40:35,150 --> 00:40:44,370 nesa soa liña 27, esta liña está dicindo, me n ints dar, cada un dos cales 838 00:40:44,370 --> 00:40:46,080 é do tipo int. 839 00:40:46,080 --> 00:40:49,870 Polo tanto, este é un balde, por así dicir, de, neste caso, tres enteiros de volta ao 840 00:40:49,870 --> 00:40:52,770 volta para atrás para que eu efectivamente ten tres variables. 841 00:40:52,770 --> 00:40:54,890 A alternativa, ser suposto, sería esta. 842 00:40:54,890 --> 00:40:57,400 >> Se eu quixese o primeiro alumno idade, eu podería facelo. 843 00:40:57,400 --> 00:40:59,520 Se eu quixese a segunda alumno idade que eu podería facelo. 844 00:40:59,520 --> 00:41:01,860 Se eu quixese a terceira alumno idade, eu podería facelo. 845 00:41:01,860 --> 00:41:04,320 E Deus me libre que necesitamos de todo o mundo idade nesta sala - 846 00:41:04,320 --> 00:41:07,670 Quero dicir, este é un anaco de un monte de copia, colar de novo e de novo e de novo. 847 00:41:07,670 --> 00:41:10,870 E unha vez eu compilar este programa, se outro alumno camiña sobre a 848 00:41:10,870 --> 00:41:14,200 daquela porta, agora a miña identidade de variables é correcto. 849 00:41:14,200 --> 00:41:17,450 >> Entón, o que é agradable sobre unha matriz é como Así que comezar a sentir-se 850 00:41:17,450 --> 00:41:20,190 copiando e pegando, as probabilidades son que se non é a mellor visión. 851 00:41:20,190 --> 00:41:22,240 Unha matriz é dinámica potencialmente. 852 00:41:22,240 --> 00:41:24,610 Non sei con antelación cantas persoas van estar na sala, 853 00:41:24,610 --> 00:41:28,670 pero eu sei que eu teño n delas, e eu vou descubrir n cando chegar a hora. 854 00:41:28,670 --> 00:41:35,500 Esta liña de código significa que agora me dea un anaco de memoria que se parece con isto 855 00:41:35,500 --> 00:41:40,380 onde o número de caixas na pantalla é enteiramente dependente do que n 856 00:41:40,380 --> 00:41:42,010 o usuario inseriu dentro 857 00:41:42,010 --> 00:41:44,850 >> Entón, agora o resto do programa realmente moi semellante ao que 858 00:41:44,850 --> 00:41:46,860 só fixen cos personaxes. 859 00:41:46,860 --> 00:41:49,970 Repare que eu teño un loop comezando na liña 30. 860 00:41:49,970 --> 00:41:54,920 Entón, logo despois que eu incorporarse o array, I iteración de y é igual a cero en ata n. 861 00:41:54,920 --> 00:41:58,890 Eu só teño este printf instrutivo mensaxe dicindo, dáme a idade 862 00:41:58,890 --> 00:42:03,690 de persoa #% i, entón o número un, número dous, número tres. 863 00:42:03,690 --> 00:42:04,730 E por que eu fixen iso? 864 00:42:04,730 --> 00:42:08,870 Francamente, os humanos prefiren contar dun en ata mentres científicos da computación, 865 00:42:08,870 --> 00:42:09,620 zerar enriba. 866 00:42:09,620 --> 00:42:11,700 científicos da computación non vai utilizar este tipo de programa, polo que estamos 867 00:42:11,700 --> 00:42:13,990 vai só comezar a contar nun como persoas normais. 868 00:42:13,990 --> 00:42:17,630 >> E agora, en liña 33, teña en conta a lixeiramente diferente peza de sintaxe. 869 00:42:17,630 --> 00:42:23,710 O i-th idade en que a variable do tipo matriz é indo a obter un int. 870 00:42:23,710 --> 00:42:25,770 E agora, por fin, este é só aritmética aquí. 871 00:42:25,770 --> 00:42:29,200 Decidín nun circuíto separado para reclamar algún tempo pasa, e agora neste 872 00:42:29,200 --> 00:42:31,400 circuíto separado, estas liñas de executar. 873 00:42:31,400 --> 00:42:35,810 >> Un ano a partir de agora, a persoa i será i anos de idade, pero teña en conta que este non é o 874 00:42:35,810 --> 00:42:36,500 variable i. 875 00:42:36,500 --> 00:42:38,390 Isto agora é% i para int. 876 00:42:38,390 --> 00:42:43,210 E noten como o primeiro espazo reservado, I plugin i + 1, entón contamos como unha 877 00:42:43,210 --> 00:42:44,250 persoa normal. 878 00:42:44,250 --> 00:42:49,190 E, a continuación, para o valor da súa idade, para i anos de idade, eu tomo as idades soporte 879 00:42:49,190 --> 00:42:52,980 i - e por que eu estou facendo un máis aquí? 880 00:42:52,980 --> 00:42:53,760 Eles só envellecido. 881 00:42:53,760 --> 00:42:55,030 É a miña elección estúpida de programas. 882 00:42:55,030 --> 00:42:56,810 Eles só envelleceu un ano. 883 00:42:56,810 --> 00:42:59,770 Podería escribir calquera número que En realidade, eu quero alí. 884 00:42:59,770 --> 00:43:02,430 >> Entón, cal é, en realidade, todos a relevancia aquí? 885 00:43:02,430 --> 00:43:07,610 Ben, deixe-me realmente rolar cara atrás aquí e pintar un cadro 886 00:43:07,610 --> 00:43:10,830 do que está por vir. 887 00:43:10,830 --> 00:43:15,720 O que imos facer o noso próximo Problema Set Two é inmiscirse-se no 888 00:43:15,720 --> 00:43:17,070 mundo da criptografía. 889 00:43:17,070 --> 00:43:22,500 Polo tanto, esta é unha cadea de carácteres, co fin de secuencia de varios caracteres, eo que 890 00:43:22,500 --> 00:43:23,750 que iso di? 891 00:43:23,750 --> 00:43:28,530 892 00:43:28,530 --> 00:43:30,600 Non é a versión en liña das diapositivas. 893 00:43:30,600 --> 00:43:35,880 >> Entón, eu afirmo que isto equivale a iso, unha propaganda estúpida de moitos anos 894 00:43:35,880 --> 00:43:39,950 hai que poida realmente lembrar unha das súas orixes. 895 00:43:39,950 --> 00:43:42,740 Polo tanto, este é un exemplo de cifrado ou cifrado. 896 00:43:42,740 --> 00:43:46,150 Acontece que, se quere en realidade, enviar información ou partes 897 00:43:46,150 --> 00:43:49,310 información con alguén de forma segura, como unha mensaxe como esta, pode 898 00:43:49,310 --> 00:43:50,500 embaralhar as cartas. 899 00:43:50,500 --> 00:43:53,170 Pero, normalmente, as palabras son non revoltos aleatoriamente. 900 00:43:53,170 --> 00:43:56,365 Están permutados, de algunha maneira ou modificados de algunha maneira para que - oops. 901 00:43:56,365 --> 00:43:59,040 Isto é un spoiler divertido para a próxima vez. 902 00:43:59,040 --> 00:44:04,390 >> Así, pode localizar nun mapa o que é, ao parecer, A para B. Teña en conta que aliñan 903 00:44:04,390 --> 00:44:05,420 capitalización-wise. 904 00:44:05,420 --> 00:44:07,960 Ao parecer, r torna-se e. 905 00:44:07,960 --> 00:44:14,000 Ao parecer F-H-E-R convértese en S-L-R-E. Así verifícase que hai un mapa, e en 906 00:44:14,000 --> 00:44:18,720 Neste caso, hai un moi estúpido cartografía se alguén descubrir-lo? 907 00:44:18,720 --> 00:44:21,440 Isto é algo chamado Rot 13, Rotar 13. 908 00:44:21,440 --> 00:44:24,760 É o máis estúpido de cifrado mecanismos, xa que literalmente 909 00:44:24,760 --> 00:44:29,160 engade 13 cada unha das letras, estúpido no sentido de que se só 910 00:44:29,160 --> 00:44:31,890 ter un pouco de tempo libre nas súas mans e un lapis, ou simplemente pensa que 911 00:44:31,890 --> 00:44:35,260 a través da súa cabeza, pode probar todo incrementos posibles - un, dous, 912 00:44:35,260 --> 00:44:38,470 tres, punto, punto, punto, de 25 a só executar o alfabeto enteiro, e 913 00:44:38,470 --> 00:44:40,860 Finalmente, vai descubrir que esta é unha mensaxe. 914 00:44:40,860 --> 00:44:43,700 Entón, se fixo algo parecido a isto en escola primaria pasando mensaxes para a súa 915 00:44:43,700 --> 00:44:46,830 mellor amigo, se a escola primaria profesor simplemente ler a través da 916 00:44:46,830 --> 00:44:50,320 mensaxe e ataque de forza bruta a solución, pode ter comezado 917 00:44:50,320 --> 00:44:52,550 unha resposta por iso. 918 00:44:52,550 --> 00:44:54,970 >> Agora, por suposto, no mundo real, cifrado é máis sofisticada. 919 00:44:54,970 --> 00:45:00,120 Este é un fragmento do texto dun sistema informático que ten nomes de usuario e 920 00:45:00,120 --> 00:45:03,630 contrasinais, como case todos do noso facer, e iso é o que o seu contrasinal pode 921 00:45:03,630 --> 00:45:07,260 mira como se almacenado no seu disco dirixir, pero de forma cifrada. 922 00:45:07,260 --> 00:45:11,050 Este non é só un xiro de letras, A e B e B e C. Trátase 923 00:45:11,050 --> 00:45:15,620 moito máis sofisticado, pero usa o que é xeralmente coñecido como clave secreta 924 00:45:15,620 --> 00:45:16,690 cifrado. 925 00:45:16,690 --> 00:45:20,210 A imaxe di o seguinte historia con algúns iconas. 926 00:45:20,210 --> 00:45:22,250 >> Na parte esquerda, o que temos imos chamar de texto simple. 927 00:45:22,250 --> 00:45:25,420 No mundo da criptografía, plain texto é só a mensaxe orixinal 928 00:45:25,420 --> 00:45:29,050 escrito en inglés ou francés ou calquera outra lingua calquera. 929 00:45:29,050 --> 00:45:32,405 Se quere cifrar tanto, imos pasar a través dun cadeado pictoricamente, así 930 00:45:32,405 --> 00:45:35,580 dalgún tipo de algoritmo, algunhas funcións ou programa que alguén escribiu 931 00:45:35,580 --> 00:45:39,880 que embaralha as cartas espera complicatedly máis que a suma de 13 932 00:45:39,880 --> 00:45:40,980 para cada un deles. 933 00:45:40,980 --> 00:45:43,780 >> O que saír dese proceso no medio alí chámase cyphertext. 934 00:45:43,780 --> 00:45:44,850 Así unha especie de palabra sexy. 935 00:45:44,850 --> 00:45:47,630 Significa só que é o cifrado versión do texto. 936 00:45:47,630 --> 00:45:52,570 E só se ten o mesmo segredo, 13 ou menos 13, vostede é capaz de 937 00:45:52,570 --> 00:45:54,970 descifrar unha mensaxe como esta. 938 00:45:54,970 --> 00:45:57,770 >> Así, o conxunto de problemas Dous, entre as cousas vai facer no Hacker 939 00:45:57,770 --> 00:46:01,860 Edition, terá que escribir código para romper esas contrasinais, descubrir 940 00:46:01,860 --> 00:46:05,170 o que eran e como eran criptografía, aínda que darlle un pouco 941 00:46:05,170 --> 00:46:06,460 de orientación ao longo do camiño. 942 00:46:06,460 --> 00:46:09,320 Na Standard Edition, introducimos un par de cifras, o cifrado 943 00:46:09,320 --> 00:46:12,400 mecanismos, un chamado César, un chamado Vigenère, que aínda están 944 00:46:12,400 --> 00:46:16,100 cifras de rotación, onde se fai un algo, B convértese en algo, pero 945 00:46:16,100 --> 00:46:18,820 ten que facelo a través de programación porque hai de feito será un segredo 946 00:46:18,820 --> 00:46:22,840 clave implicados, que normalmente é un número ou unha contrasinal que só o 947 00:46:22,840 --> 00:46:26,420 remitente eo destinatario destes mensaxes deben entender. 948 00:46:26,420 --> 00:46:28,660 >> Agora, iso ten realmente encarnações no mundo real. 949 00:46:28,660 --> 00:46:32,910 Este, por exemplo, é pouco orfo Anel decodificar secreto de Annie, e 950 00:46:32,910 --> 00:46:35,180 realmente pode aplicar estas cifras de rotación - 951 00:46:35,180 --> 00:46:37,930 Un convértese en algo, B pasa a ser algo - cun par de rodas, 952 00:46:37,930 --> 00:46:40,840 unha no lado de fóra, unha no lado de dentro de tal forma que se xirar a roda ou 953 00:46:40,840 --> 00:46:44,170 o anel, pode realmente aliñar o cartas con letras distintas, 954 00:46:44,170 --> 00:46:45,430 obtención dun código secreto. 955 00:46:45,430 --> 00:46:48,110 E así como gancho para hoxe, o que eu penso que eu ía facer é un pouco de 956 00:46:48,110 --> 00:46:52,170 retroceso que, se conectar a TV o 24 de decembro, pode asistir a 957 00:46:52,170 --> 00:46:55,390 película ad nauseum para 24 horas nunha cola. 958 00:46:55,390 --> 00:47:06,030 Pero por hoxe, vou abri-lo aquí e dar só dous minutos de 959 00:47:06,030 --> 00:47:13,493 Historia de Nadal pedagoxicamente relevantes cun pouco de suxeito chamado Ralphie. 960 00:47:13,493 --> 00:47:14,400 >> [REPRODUCIÓN] 961 00:47:14,400 --> 00:47:17,420 >> -Que sexa coñecido por toda a xente que Ralph Parker é nomeado 962 00:47:17,420 --> 00:47:20,650 membro da Orphan Annie pequeno segredo círculo e ten o dereito de todos 963 00:47:20,650 --> 00:47:23,460 os honores e beneficios ocorrendo ao mesmo. 964 00:47:23,460 --> 00:47:25,990 >> -Asinado, Little Orphan Annie. 965 00:47:25,990 --> 00:47:30,100 Referendado, Pierre André en pintura. 966 00:47:30,100 --> 00:47:34,270 Honores e beneficios xa coa idade de nove anos. 967 00:47:34,270 --> 00:47:39,440 >> [Gritando ON RADIO] 968 00:47:39,440 --> 00:47:40,770 >> Imos, imos pronto con iso. 969 00:47:40,770 --> 00:47:44,965 Eu non teño todo o que arredor de jazz contrabandistas e piratas. 970 00:47:44,965 --> 00:47:48,270 >> -Escoita mañá á noite para a concluíndo aventura do negro 971 00:47:48,270 --> 00:47:49,650 navío pirata. 972 00:47:49,650 --> 00:47:53,320 Agora é o momento de segredo de Annie Mensaxe a vós, membros 973 00:47:53,320 --> 00:47:55,720 de The Secret Circle. 974 00:47:55,720 --> 00:47:56,580 Lembre, nenos. 975 00:47:56,580 --> 00:48:01,720 Só os membros do Círculo Secreto de Annie pode descodificar a mensaxe secreta de Annie. 976 00:48:01,720 --> 00:48:05,872 Lembre, Annie está dependendo de ti. 977 00:48:05,872 --> 00:48:08,670 Define as súas patas para B2. 978 00:48:08,670 --> 00:48:11,000 Aquí está a mensaxe. 979 00:48:11,000 --> 00:48:12,335 12, 11, 2 - 980 00:48:12,335 --> 00:48:14,670 >> -Estou no meu primeiro encontro secreto. 981 00:48:14,670 --> 00:48:19,720 >> -25, 14, 11, 18, 16 - 982 00:48:19,720 --> 00:48:21,650 >> -Pierre estaba en gran voz onte á noite. 983 00:48:21,650 --> 00:48:24,830 Podería dicir que a mensaxe de hoxe á noite foi moi importante. 984 00:48:24,830 --> 00:48:26,400 >> -3, 25. 985 00:48:26,400 --> 00:48:28,540 Esta é unha mensaxe de Annie se. 986 00:48:28,540 --> 00:48:30,086 Lembre, non diga a ninguén. 987 00:48:30,086 --> 00:48:34,370 988 00:48:34,370 --> 00:48:38,710 >> -90 Segundos despois, estou na única sala na casa onde un neno de nove anos 989 00:48:38,710 --> 00:48:42,668 podería sentar intimidade e decodificación. 990 00:48:42,668 --> 00:48:47,628 Aha, B. Eu fun a outro. 991 00:48:47,628 --> 00:48:53,060 E. A primeira palabra é "ser". S. Estaba chegando máis fácil agora. 992 00:48:53,060 --> 00:48:54,980 U. 25. 993 00:48:54,980 --> 00:48:55,940 Isto é R. 994 00:48:55,940 --> 00:48:56,900 >> -Imos, Ralphie. 995 00:48:56,900 --> 00:48:57,860 Teño que ir. 996 00:48:57,860 --> 00:48:59,780 >> -Eu vou estar ben abaixo, Ma 997 00:48:59,780 --> 00:49:01,030 Mirabolantes. 998 00:49:01,030 --> 00:49:04,300 999 00:49:04,300 --> 00:49:08,220 >> -T. O. Comprobe se. 1000 00:49:08,220 --> 00:49:09,500 Asegúrese de que? 1001 00:49:09,500 --> 00:49:11,660 Cal foi a Little Orphan Annie está intentando dicir? 1002 00:49:11,660 --> 00:49:12,844 Asegúrese de que? 1003 00:49:12,844 --> 00:49:14,732 >> -Ralphie, Randy ten que ir. 1004 00:49:14,732 --> 00:49:16,148 Quere facer o favor de saír? 1005 00:49:16,148 --> 00:49:17,092 >> -Todo ben, nai. 1006 00:49:17,092 --> 00:49:18,510 Eu estarei fóra. 1007 00:49:18,510 --> 00:49:20,270 >> -Eu estaba quedando máis preto agora. 1008 00:49:20,270 --> 00:49:21,823 A tensión era terrible. 1009 00:49:21,823 --> 00:49:23,045 Que foi? 1010 00:49:23,045 --> 00:49:26,510 O destino do planeta pode colgar na balanza. 1011 00:49:26,510 --> 00:49:28,985 >> -Ralphie, go gotta de Randy. 1012 00:49:28,985 --> 00:49:32,680 >> -Eu vou estar ben para fóra para Crying Out Loud. 1013 00:49:32,680 --> 00:49:33,956 >> -Case alí. 1014 00:49:33,956 --> 00:49:35,140 Meus dedos voaron. 1015 00:49:35,140 --> 00:49:36,880 A miña mente estaba nunha trampa de aceiro. 1016 00:49:36,880 --> 00:49:38,010 Todos os poros vibrar. 1017 00:49:38,010 --> 00:49:39,878 Era case clara. 1018 00:49:39,878 --> 00:49:43,210 Si, si, si, si, si. 1019 00:49:43,210 --> 00:49:49,030 >> -Asegúrese de beber o seu Ovomaltine. 1020 00:49:49,030 --> 00:49:50,280 Ovomaltine? 1021 00:49:50,280 --> 00:49:53,980 1022 00:49:53,980 --> 00:49:55,230 Un comercial porco? 1023 00:49:55,230 --> 00:49:58,572 1024 00:49:58,572 --> 00:50:00,694 Fillo de puta. 1025 00:50:00,694 --> 00:50:01,900 >> [FIN reprodución de vídeo] 1026 00:50:01,900 --> 00:50:04,260 >> COLUMNA 1: Este é CS50, e que será Problem Set Two. 1027 00:50:04,260 --> 00:50:06,305 Vexo vostedes a próxima semana. 1028 00:50:06,305 --> 00:50:08,800 >> COLUMNA 2: Na seguinte CS50, isto ocorre. 1029 00:50:08,800 --> 00:50:11,060 >> COLUMNA 1: Entón, un tema que non ten mirou ata agora é 1030 00:50:11,060 --> 00:50:12,220 a de punteiros de función. 1031 00:50:12,220 --> 00:50:14,540 Agora, un punteiro de función só é a dirección dun público 1032 00:50:14,540 --> 00:50:17,000 función, pero moi parecido - 1033 00:50:17,000 --> 00:50:18,250 fillo dun - 1034 00:50:18,250 --> 00:50:19,670