1 00:00:00,000 --> 00:00:00,980 2 00:00:00,980 --> 00:00:04,410 >> [MÚSICA DE XOGO] 3 00:00:04,410 --> 00:00:11,147 4 00:00:11,147 --> 00:00:12,230 DAVID J. Malan: Todo ben. 5 00:00:12,230 --> 00:00:16,440 Este é CS50, e este é o final da semana 2. 6 00:00:16,440 --> 00:00:18,480 Entón, hoxe, nós imos para continuar a nosa mirada 7 00:00:18,480 --> 00:00:21,150 o xeito no que representamos as cousas debaixo do hood-- afastándose 8 00:00:21,150 --> 00:00:23,520 de números como enteiros e valores de punto flotante 9 00:00:23,520 --> 00:00:26,810 e centrados en cordas e programas, finalmente, máis interesantes. 10 00:00:26,810 --> 00:00:30,140 Pero nós tamén imos dar un ollo a un par de problems-- específica de dominio 11 00:00:30,140 --> 00:00:33,620 a primeira das cales vai ser inclúen criptografía, 12 00:00:33,620 --> 00:00:36,570 o arte de codificación da información, en que ve enriba aquí 13 00:00:36,570 --> 00:00:41,480 é un retrato da Radio Orphan Annie anel decodificar secreto do pasado. 14 00:00:41,480 --> 00:00:46,490 >> Este é, en realidade forma moi primitiva e forma para nenos de cryptopgraphy 15 00:00:46,490 --> 00:00:50,590 en que este anel ten dous disks-- un dentro e outro fóra. 16 00:00:50,590 --> 00:00:54,740 E virando un deses, pode esencialmente aliñar letras como A 17 00:00:54,740 --> 00:00:59,520 a Z con outras letras B como a través da A. Por outras palabras, 18 00:00:59,520 --> 00:01:03,730 pode literalmente virar o alfabeto, benvida, así, cun cartografía a partir de 19 00:01:03,730 --> 00:01:07,820 cartas para cartas de xeito que, se quería enviar unha mensaxe secreta 20 00:01:07,820 --> 00:01:11,820 para alguén como Annie, podería escribir abaixo a mensaxe e, a continuación, xire 21 00:01:11,820 --> 00:01:15,370 as letras, en que, se quere dicir dicir "A", ten no canto dicir "B", 22 00:01:15,370 --> 00:01:17,280 Quere dicir "B", ti, en vez dicir "C" - 23 00:01:17,280 --> 00:01:20,240 ou algo un pouco máis intelixente que que-- e despois, en definitiva, 24 00:01:20,240 --> 00:01:24,630 mentres Annie ten ese decodificador anel, pode decodificar a mensaxe. 25 00:01:24,630 --> 00:01:28,540 Agora, ten que se lembrar, de feito, que este foi usado nunha película moi famoso que 26 00:01:28,540 --> 00:01:31,140 xoga ad nauseum durante a época de Nadal. 27 00:01:31,140 --> 00:01:32,650 Imos dar un ollo aquí. 28 00:01:32,650 --> 00:01:35,294 29 00:01:35,294 --> 00:01:37,210 RALPHIE PARKER: "Sexa coñecido por todos, en resumo 30 00:01:37,210 --> 00:01:41,000 que Ralph Parker é nomeado un membro da Little Orphan Annie Segredo 31 00:01:41,000 --> 00:01:44,860 Círculo e ten dereito a todos os honores e beneficios que se producen ao mesmo ". 32 00:01:44,860 --> 00:01:47,410 >> RALPHIE PARKER (narrando): Asinado Little Orphan Annie. 33 00:01:47,410 --> 00:01:50,070 Referendado, Pierre André! 34 00:01:50,070 --> 00:01:51,490 Na pintura. 35 00:01:51,490 --> 00:01:55,494 Honores e beneficios, xa coa idade de nove anos. 36 00:01:55,494 --> 00:01:57,402 >> [MÚSICA DE XOGO] 37 00:01:57,402 --> 00:02:00,470 >> [RADIO Chatter] 38 00:02:00,470 --> 00:02:01,470 RALPHIE PARKER: Imos alí. 39 00:02:01,470 --> 00:02:02,344 Seguiremos con el. 40 00:02:02,344 --> 00:02:06,029 Eu non teño todo ese jazz sobre contrabandistas e piratas. 41 00:02:06,029 --> 00:02:08,820 RADIO locutor: Escoite mañá noite para a aventura final 42 00:02:08,820 --> 00:02:11,060 do barco pirata Negro. 43 00:02:11,060 --> 00:02:14,740 Agora é o momento de Annie Mensaxe secreta para os membros da 44 00:02:14,740 --> 00:02:17,110 do Círculo Secreto. 45 00:02:17,110 --> 00:02:20,700 Teña en conta que dos miúdo, só membros de segredo Circle de Annie 46 00:02:20,700 --> 00:02:23,270 pode descodificar a mensaxe secreta de Annie. 47 00:02:23,270 --> 00:02:27,270 >> Lembre, Annie está dependendo de ti. 48 00:02:27,270 --> 00:02:30,060 Define os seus pinos para B-2. 49 00:02:30,060 --> 00:02:34,004 Aquí está o message-- 12, 11, 2-- 50 00:02:34,004 --> 00:02:36,503 RALPHIE PARKER (narrando): I estou no meu primeiro encontro secreto. 51 00:02:36,503 --> 00:02:40,041 RADIO locutor: --25, 14, 11, 18, 16-- 52 00:02:40,041 --> 00:02:42,790 RALPHIE PARKER (narrando): Oh, Pierre estaba en gran noite de voz. 53 00:02:42,790 --> 00:02:46,110 Podería dicir que esta noite mensaxe era realmente importante. 54 00:02:46,110 --> 00:02:47,930 >> RADIO locutor: --3, 25. 55 00:02:47,930 --> 00:02:49,940 Esta é unha mensaxe de Annie a si mesma. 56 00:02:49,940 --> 00:02:52,182 Teña en conta que, non conte a ninguén. 57 00:02:52,182 --> 00:02:55,077 >> [Ofegante] 58 00:02:55,077 --> 00:02:57,285 RALPHIE PARKER (narrando): Noventa segundos despois, eu son 59 00:02:57,285 --> 00:03:00,090 no único cuarto no casa onde un neno de nove anos 60 00:03:00,090 --> 00:03:04,380 podería sentar privacidade e decodificar. 61 00:03:04,380 --> 00:03:04,990 Ah. 62 00:03:04,990 --> 00:03:05,680 "B." 63 00:03:05,680 --> 00:03:06,524 >> [Risas] 64 00:03:06,524 --> 00:03:08,684 >> RALPHIE PARKER (narrando): Eu fun a outro. 65 00:03:08,684 --> 00:03:09,610 "E." 66 00:03:09,610 --> 00:03:11,641 A primeira palabra é "ser". 67 00:03:11,641 --> 00:03:12,140 Si! 68 00:03:12,140 --> 00:03:14,293 Estaba chegando máis fácil agora. 69 00:03:14,293 --> 00:03:15,259 "U." 70 00:03:15,259 --> 00:03:16,225 >> [Risas] 71 00:03:16,225 --> 00:03:18,157 >> Randy PARKER: Ah, imos alí, Ralphie. 72 00:03:18,157 --> 00:03:19,606 Eu teño que ir! 73 00:03:19,606 --> 00:03:21,538 >> RALPHIE PARKER: Vou baixar, Ma. 74 00:03:21,538 --> 00:03:22,504 Gee Whiz. 75 00:03:22,504 --> 00:03:25,402 76 00:03:25,402 --> 00:03:31,220 "T." "O." "Comprobe se con "." Asegúrese de "o que? 77 00:03:31,220 --> 00:03:33,981 Cal foi Little Orphan Annie intentando dicir? "Asegúrese de" o que? 78 00:03:33,981 --> 00:03:35,522 NAI: Ralphie, Randy ten que ir. 79 00:03:35,522 --> 00:03:36,735 Será que podería saír? 80 00:03:36,735 --> 00:03:38,190 >> RALPHIE PARKER: Todo ben, nai! 81 00:03:38,190 --> 00:03:39,787 Vou saír ben! 82 00:03:39,787 --> 00:03:41,995 RALPHIE PARKER (narrando): Eu estaba quedando máis preto agora. 83 00:03:41,995 --> 00:03:43,370 A tensión era terrible. 84 00:03:43,370 --> 00:03:44,794 Que foi? 85 00:03:44,794 --> 00:03:47,656 O destino do planeta poden estar en xogo. 86 00:03:47,656 --> 00:03:50,518 >> NAI: Ralphie, Randy ten que ir! 87 00:03:50,518 --> 00:03:53,635 >> RALPHIE PARKER: Eu estarei ben fóra, polo amor de Deus! 88 00:03:53,635 --> 00:03:55,343 RALPHIE PARKER (Narrando): Case alí! 89 00:03:55,343 --> 00:03:56,520 Os meus dedos voaron! 90 00:03:56,520 --> 00:03:58,500 A miña mente estaba nunha trampa de aceiro. 91 00:03:58,500 --> 00:03:59,850 Cada poro tensou. 92 00:03:59,850 --> 00:04:01,806 Era case suposto! 93 00:04:01,806 --> 00:04:02,773 Si! 94 00:04:02,773 --> 00:04:03,273 Si! 95 00:04:03,273 --> 00:04:03,773 Si! 96 00:04:03,773 --> 00:04:04,740 Si! 97 00:04:04,740 --> 00:04:10,250 >> RALPHIE PARKER: "Comprobe se para beber o seu Ovomaltine. " 98 00:04:10,250 --> 00:04:10,750 Ovomaltine? 99 00:04:10,750 --> 00:04:14,864 100 00:04:14,864 --> 00:04:17,539 Un comercial miserable? 101 00:04:17,539 --> 00:04:19,439 >> [MÚSICA DE XOGO] 102 00:04:19,439 --> 00:04:21,724 >> RALPHIE PARKER: Fillo de puta. 103 00:04:21,724 --> 00:04:23,460 >> [Risas] 104 00:04:23,460 --> 00:04:27,070 >> DAVID J. Malan: Para que, entón, é un reflexo do que o cifrado 105 00:04:27,070 --> 00:04:29,880 pode ser a un isto-- beber do pasado. 106 00:04:29,880 --> 00:04:30,900 Así, un anuncio rápido. 107 00:04:30,900 --> 00:04:33,410 Se está libre esta Venres ás 13:15 e faría 108 00:04:33,410 --> 00:04:36,610 quere unirse a nós para CS50 xantar, ir a este URL aquí. 109 00:04:36,610 --> 00:04:38,080 Primeiro en chegar, primeiro a servir como de costume. 110 00:04:38,080 --> 00:04:41,840 Pero co tempo, imos estar seguro de que máis quen quere participar 111 00:04:41,840 --> 00:04:43,640 Pode programar-wise. 112 00:04:43,640 --> 00:04:45,170 >> Así cordas. 113 00:04:45,170 --> 00:04:47,940 Temos Zamyla-- quen xa reuniu máis probable 114 00:04:47,940 --> 00:04:50,750 Na Serie 1-- cuxa nome está escrito así. 115 00:04:50,750 --> 00:04:53,570 E supoña que escribiu o nome nun programa de ordenador que é 116 00:04:53,570 --> 00:04:55,710 usando algo coma getString. 117 00:04:55,710 --> 00:04:57,890 A fin de recuperar esas teclas, como 118 00:04:57,890 --> 00:05:01,620 nós imos sobre o que representa unha corda, unha palabra, un parágrafo 119 00:05:01,620 --> 00:05:03,960 ou varias letras como estes aquí? 120 00:05:03,960 --> 00:05:06,790 >> Falamos última vez sobre enteiros e problemas 121 00:05:06,790 --> 00:05:09,960 que xorden con integer overflow e valores de punto flotante 122 00:05:09,960 --> 00:05:12,190 e os problemas que xurdir dentro de precisión. 123 00:05:12,190 --> 00:05:16,080 Con cordas, nós, polo menos, ter un pouco máis de flexibilidade 124 00:05:16,080 --> 00:05:17,970 porque strings-- só no real mundo-- 125 00:05:17,970 --> 00:05:19,790 poden ter unha lonxitude moi arbitraria. 126 00:05:19,790 --> 00:05:21,055 Moi curto, moi longo. 127 00:05:21,055 --> 00:05:23,680 Pero, aínda así, imos descubrir que ordenadores poden, por veces, 128 00:05:23,680 --> 00:05:27,200 sen memoria e nin sequera almacenar unha cadea grande abondo. 129 00:05:27,200 --> 00:05:30,840 >> Pero, por agora, imos comezar a ver unha secuencia como algo nesas caixas 130 00:05:30,840 --> 00:05:31,340 Aquí. 131 00:05:31,340 --> 00:05:36,410 Así, seis destas caixas, cada un dos cales representa un carácter ou "char". 132 00:05:36,410 --> 00:05:40,646 Entón, lembrar que "char" - c-h-a-r-- é un dos tipos de datos embutidos en C. 133 00:05:40,646 --> 00:05:43,520 E o que é bo é que pode usar que tipo de como un bloque de construción, 134 00:05:43,520 --> 00:05:47,880 unha peza de puzzle, se quere, para formar un maior tipo de datos que imos seguir 135 00:05:47,880 --> 00:05:49,410 para chamar unha "cadea". 136 00:05:49,410 --> 00:05:53,650 >> Agora, o que é útil pensar sobre cousas como cordas, deste xeito? 137 00:05:53,650 --> 00:05:57,720 Ben, acontece que pudermos realmente aproveitar esta estrutura 138 00:05:57,720 --> 00:06:01,420 para acceder, en realidade, caracteres individuais dunha forma moi sinxela. 139 00:06:01,420 --> 00:06:04,099 Eu estou indo a ir adiante e crear un ficheiro chamado "stringzero.c" 140 00:06:04,099 --> 00:06:05,765 pero pode chamalo de todo o que desexa. 141 00:06:05,765 --> 00:06:08,500 E na páxina web do curso é Neste exemplo xa antes, 142 00:06:08,500 --> 00:06:10,430 así que non escriba todo. 143 00:06:10,430 --> 00:06:13,820 >> E eu estou indo para adiante e primeiro facer void main int. 144 00:06:13,820 --> 00:06:15,980 E en poucos días, imos comezar a desmembrar 145 00:06:15,980 --> 00:06:19,070 o baleiro é aquí, por iso que é int xunto principal, e así por diante. 146 00:06:19,070 --> 00:06:21,180 Pero, por agora, imos seguir para copiar e pegar isto. 147 00:06:21,180 --> 00:06:23,455 >> Vou declarar unha cadea chamada s. 148 00:06:23,455 --> 00:06:26,920 E eu vou volver GetString calquera que sexan o usuario escribe. 149 00:06:26,920 --> 00:06:29,170 Este vai ser un simple programa, ningunha instrución, 150 00:06:29,170 --> 00:06:31,336 Eu só vou cegamente esperar que o usuario saiba 151 00:06:31,336 --> 00:06:32,600 o que facer para mantelo simple. 152 00:06:32,600 --> 00:06:34,220 >> E agora eu vou ter un loop for. 153 00:06:34,220 --> 00:06:37,450 E dentro do meu loop Estou terá int i recibe cero. 154 00:06:37,450 --> 00:06:40,660 E i é, de novo, só unha convención, un índice de variable de conta, 155 00:06:40,660 --> 00:06:42,350 pero eu podería chamar iso o que eu queira. 156 00:06:42,350 --> 00:06:46,275 Vou facer i é menos than-- ben O nome de Zamyla é de seis letras. 157 00:06:46,275 --> 00:06:48,150 Entón eu vou para o disco código que non para agora. 158 00:06:48,150 --> 00:06:49,730 >> E entón i ++. 159 00:06:49,730 --> 00:06:53,190 E agora dentro destes crespos claves eu vou facer printf, 160 00:06:53,190 --> 00:06:55,460 e quero imprimir un carácter de cada vez. 161 00:06:55,460 --> 00:06:58,227 Entón eu vou usar% c para quizais por primeira vez. 162 00:06:58,227 --> 00:07:00,560 E entón eu quero imprimir cada personaxe na súa propia liña. 163 00:07:00,560 --> 00:07:02,550 Entón eu vou poñer unha pouco barra invertida n alí. 164 00:07:02,550 --> 00:07:03,640 Pechar cotización. 165 00:07:03,640 --> 00:07:06,250 >> E agora quero facer algo aquí. 166 00:07:06,250 --> 00:07:10,610 Quero imprimir o letra específica na secuencia, 167 00:07:10,610 --> 00:07:13,670 s, como eu estou interactuar de cero en ata seis. 168 00:07:13,670 --> 00:07:17,150 Noutras palabras, quero imprimir o carácter i'ésima de s. 169 00:07:17,150 --> 00:07:18,420 Agora, como podo facer iso? 170 00:07:18,420 --> 00:07:21,550 >> Ben así como as caixas en esta representación aquí, 171 00:07:21,550 --> 00:07:25,560 tipo, evocar a noción de boxeo letras, pode facer do mesmo xeito que 172 00:07:25,560 --> 00:07:32,630 sintaticamente en C simplemente especificando, Quero imprimir s de i'ésima personaxe. 173 00:07:32,630 --> 00:07:35,640 Usando os corchetes no teclado do seu ordenador 174 00:07:35,640 --> 00:07:38,910 que nun teclado americano son xeralmente por riba da súa tecla de retorno. 175 00:07:38,910 --> 00:07:42,630 >> Entón iso non é certo Con todo, como ten que notar. 176 00:07:42,630 --> 00:07:44,780 Pero eu estou indo para o tipo de cegamente avanzar aquí. 177 00:07:44,780 --> 00:07:47,020 E eu vou facer facer secuencia 0. 178 00:07:47,020 --> 00:07:50,860 Pero antes de facelo, imos ver se nós non pode anticipar algúns erros comúns. 179 00:07:50,860 --> 00:07:52,844 Será que isto vai compilar? 180 00:07:52,844 --> 00:07:54,510 Non, eu estou perdendo unha morea de cousas. 181 00:07:54,510 --> 00:07:55,280 Bibliotecas oín. 182 00:07:55,280 --> 00:07:58,480 >> Así que ficheiros de cabeceira pode Quero engadir aquí? 183 00:07:58,480 --> 00:07:59,205 Si. 184 00:07:59,205 --> 00:08:01,580 >> Audiencia: Debe E / S estándar [inaudível] 185 00:08:01,580 --> 00:08:02,663 >> DAVID J. Malan: Excelente. 186 00:08:02,663 --> 00:08:06,060 Entón eu teño de E / estándar. Para que propósito que quero estándar I / O? 187 00:08:06,060 --> 00:08:06,670 Para printf. 188 00:08:06,670 --> 00:08:09,220 Polo tanto, incluír stdio.h. 189 00:08:09,220 --> 00:08:13,490 E tamén propoñer que inclúen a biblioteca CS50 por cal razón? 190 00:08:13,490 --> 00:08:14,650 Para ter cadeas. 191 00:08:14,650 --> 00:08:17,780 Entón, imos ver o que Biblioteca de CS50 está facendo 192 00:08:17,780 --> 00:08:19,260 para crear esa noción dunha cadea. 193 00:08:19,260 --> 00:08:21,930 Pero, polo de agora, pode só pensar niso como un tipo de datos real. 194 00:08:21,930 --> 00:08:23,596 >> Entón, que parece estar un pouco limpo. 195 00:08:23,596 --> 00:08:27,060 E agora eu estou indo para adiante e de feito fan secuencia 0. 196 00:08:27,060 --> 00:08:27,700 Compilado. 197 00:08:27,700 --> 00:08:28,370 Entón, iso é bo. 198 00:08:28,370 --> 00:08:32,799 Entón ./string0 déixeme achegar para que poidamos ver máis de preto o que está pasando. 199 00:08:32,799 --> 00:08:33,850 Intro. 200 00:08:33,850 --> 00:08:37,789 Z-A-H-Y-L-A entran. 201 00:08:37,789 --> 00:08:39,440 E nós temos impreso ao nome de Zamyla. 202 00:08:39,440 --> 00:08:40,409 >> Entón, iso é moi bo. 203 00:08:40,409 --> 00:08:43,220 Entón agora imos seguir adiante e executar este programa de novo, 204 00:08:43,220 --> 00:08:45,659 e escriba o nome completo de Daven. 205 00:08:45,659 --> 00:08:46,450 Sorpresa, sorpresa. 206 00:08:46,450 --> 00:08:48,021 Intro. 207 00:08:48,021 --> 00:08:48,520 Hmm. 208 00:08:48,520 --> 00:08:51,750 Non imprimiu Daven de nome completo correctamente. 209 00:08:51,750 --> 00:08:54,250 Agora iso debería ser evidente en retrospectiva por mor do que, 210 00:08:54,250 --> 00:08:57,010 tipo, deseño decisión estúpida? 211 00:08:57,010 --> 00:08:59,590 >> Si, eu codificado o seis dentro do meu loop for. 212 00:08:59,590 --> 00:09:01,610 Agora eu fixen iso só porque Eu sabía o nome de Zamyla 213 00:09:01,610 --> 00:09:02,776 ía ser seis letras. 214 00:09:02,776 --> 00:09:04,720 Pero, certamente, isto non é unha solución xeral. 215 00:09:04,720 --> 00:09:07,720 Entón non é que podemos de forma dinámica calcular a lonxitude dunha corda 216 00:09:07,720 --> 00:09:10,440 chamando unha función chamada strlen. 217 00:09:10,440 --> 00:09:12,840 >> De novo, deliberadamente sucintamente chamado só 218 00:09:12,840 --> 00:09:14,450 para facelo máis cómodo para escribir. 219 00:09:14,450 --> 00:09:17,170 Pero iso é sinónimo de obter a lonxitude dunha corda. 220 00:09:17,170 --> 00:09:23,190 Vou volver para o meu terminal fiestra e re-executar o compilador. 221 00:09:23,190 --> 00:09:24,170 Pero está berrando comigo. 222 00:09:24,170 --> 00:09:29,130 Implicitamente declarando función de biblioteca strlen con tipo unsigned int const-- 223 00:09:29,130 --> 00:09:29,780 Estou perdido. 224 00:09:29,780 --> 00:09:30,590 Completamente. 225 00:09:30,590 --> 00:09:32,940 >> Entón, especialmente como o seu ollos comezan a revirarem 226 00:09:32,940 --> 00:09:36,000 con mensaxes de erro como este, o foco honesta sobre as primeiras palabras. 227 00:09:36,000 --> 00:09:38,590 Sabemos que o problema está no liña 8, segundo se indica aquí. 228 00:09:38,590 --> 00:09:40,500 E é en corda-0.c. 229 00:09:40,500 --> 00:09:43,580 Implicitamente declarando función da biblioteca strlen. 230 00:09:43,580 --> 00:09:47,000 Así que é xeralmente vai haber un estándar de mensaxes de erro. 231 00:09:47,000 --> 00:09:49,190 Implicitamente declarando algo. 232 00:09:49,190 --> 00:09:53,250 >> Entón, en definitiva, que teño eu parecía ter feito con relación á liña 8, aquí. 233 00:09:53,250 --> 00:09:56,880 O que podería ser a solución ser aínda Se nunca usou strlen si mesmo? 234 00:09:56,880 --> 00:09:58,907 >> Audiencia: Parte dunha biblioteca diferente? 235 00:09:58,907 --> 00:10:00,740 DAVID J. Malan: Parte dunha biblioteca diferente. 236 00:10:00,740 --> 00:10:02,400 Por iso, é declarado, por así dicir. 237 00:10:02,400 --> 00:10:07,510 El é mencionado nalgún arquivo agás stdio.h e CS50.h. 238 00:10:07,510 --> 00:10:09,179 Agora, onde é definida? 239 00:10:09,179 --> 00:10:12,220 Para ser honesto, ten que só sei que esta enriba da súa cabeza, 240 00:10:12,220 --> 00:10:13,640 ou Google iso e descubrir. 241 00:10:13,640 --> 00:10:18,150 Ou saben diso, abrín na CS50 Aparello utilizado o programa da terminal, que 242 00:10:18,150 --> 00:10:22,200 é só o gran, versión para a pantalla completa de o que está na parte inferior da xanela do Gedit. 243 00:10:22,200 --> 00:10:24,970 >> E verifícase que hai unha comando similar sucinto, chamado 244 00:10:24,970 --> 00:10:29,280 home de manual, onde se insire o nome dunha función e prema Intro, 245 00:10:29,280 --> 00:10:32,240 vai volver moi documentación arcano. 246 00:10:32,240 --> 00:10:35,299 É só un texto que, xeralmente, parece un pouco algo como isto. 247 00:10:35,299 --> 00:10:37,090 É un pouco esmagadora a primeira vista. 248 00:10:37,090 --> 00:10:39,048 Pero, sinceramente, eu vou deixei meus ollos vidrosos 249 00:10:39,048 --> 00:10:41,930 e só concentrarse na parte Eu me preocupo co momento. 250 00:10:41,930 --> 00:10:42,780 >> Cal é este. 251 00:10:42,780 --> 00:10:45,470 Que parece estruturalmente como algo que eu estou familiarizado. 252 00:10:45,470 --> 00:10:48,080 De feito, a páxina de home, así para falar, vai dicir 253 00:10:48,080 --> 00:10:51,590 na cabeceira do ficheiro que a función como strlen é definido. 254 00:10:51,590 --> 00:10:54,170 Entón, eu vou volver agora para gedit. 255 00:10:54,170 --> 00:10:59,070 E eu estou indo a ir adiante e engadir aquí # include 256 00:10:59,070 --> 00:11:00,480 e salva o arquivo. 257 00:11:00,480 --> 00:11:04,300 >> Eu estou indo a limpar a pantalla con Control L Se está a se pregunta. 258 00:11:04,300 --> 00:11:08,210 E eu vou facer re-executa string.0, compila neste momento. 259 00:11:08,210 --> 00:11:11,790 ./string.0 Zamyla. 260 00:11:11,790 --> 00:11:15,020 Isto parecía funcionar Déixeme ir adiante e executa-o de novo con Davenport. 261 00:11:15,020 --> 00:11:15,860 Intro. 262 00:11:15,860 --> 00:11:17,730 E que, ademais, parecía funcionar. 263 00:11:17,730 --> 00:11:21,220 >> Así, podemos facer un pouco mellor do que iso, con todo, podemos comezar a aparcar as cousas 264 00:11:21,220 --> 00:11:23,257 -se un pouco. 265 00:11:23,257 --> 00:11:25,590 E eu vou, en realidade, introducir outra cousa agora. 266 00:11:25,590 --> 00:11:28,930 Eu estou indo a ir adiante e gardar esta nun ficheiro diferente. 267 00:11:28,930 --> 00:11:31,770 E eu vou chamar este string1.c ficheiro só 268 00:11:31,770 --> 00:11:34,620 para ser consistente co código vai ser capaz de atopar en liña. 269 00:11:34,620 --> 00:11:37,050 >> E imos centrar en exactamente o mesmo código. 270 00:11:37,050 --> 00:11:39,000 Acontece que eu teño foi unha especie de toma 271 00:11:39,000 --> 00:11:42,600 como certo o feito de que o meu portátil, e, á súa vez, o aparello CS50 272 00:11:42,600 --> 00:11:47,450 ten unha morea de memoria, unha morea de RAM, unha gran cantidade de bytes de espazo 273 00:11:47,450 --> 00:11:48,920 no que eu poida almacenar cadeas. 274 00:11:48,920 --> 00:11:53,560 >> Pero a realidade se eu escriba longo suficientes, e suficiente as teclas escritas, 275 00:11:53,560 --> 00:11:56,170 Podería, en teoría tipo en máis caracteres 276 00:11:56,170 --> 00:11:58,830 do que o meu ordenador fisicamente ten memoria para. 277 00:11:58,830 --> 00:11:59,830 E iso é problemático. 278 00:11:59,830 --> 00:12:03,050 Moi parecido un int só pode Cantidade de tan elevada, en teoría, 279 00:12:03,050 --> 00:12:06,600 só se pode empinar tantos personaxes na memoria RAM do seu ordenador ou aleatoria 280 00:12:06,600 --> 00:12:07,920 Access Memory. 281 00:12:07,920 --> 00:12:11,140 >> Entón, eu tiña mellor anticipar este problema, aínda 282 00:12:11,140 --> 00:12:13,660 aínda que poida ser un raro caso esquina, por así dicir. 283 00:12:13,660 --> 00:12:15,670 Non pasa que, moitas veces, pode ocorrer. 284 00:12:15,670 --> 00:12:18,815 E se isto acontecer e non anticipar e programa para que, 285 00:12:18,815 --> 00:12:20,300 meu programa podería facer quen sabe o que. 286 00:12:20,300 --> 00:12:22,220 Conxelar, frear, reiniciar, o que sexa. 287 00:12:22,220 --> 00:12:24,490 Algo espera podería acontecer. 288 00:12:24,490 --> 00:12:27,120 >> Entón o que eu vou facer agora, a partir deste momento, en realidade, 289 00:12:27,120 --> 00:12:31,630 é antes de eu nunca cegamente usar unha variable como s que 290 00:12:31,630 --> 00:12:36,790 foi concedido o valor de retorno de algunha outra función como getString, 291 00:12:36,790 --> 00:12:40,200 Vou ter a certeza que o seu valor é válido. 292 00:12:40,200 --> 00:12:44,280 Entón eu sei que só por ler Documentación do CS50 para getString, 293 00:12:44,280 --> 00:12:49,020 que en definitiva, imos apuntala-lo en, que getString retorna un símbolo especial 294 00:12:49,020 --> 00:12:53,610 chamado NULL, N-L-L-L en todos CAPS, se algo sae mal. 295 00:12:53,610 --> 00:12:55,650 >> Entón, normalmente, el retorna un cadea. 296 00:12:55,650 --> 00:12:59,700 Pero se non, se volve N-K-L-eu-- imos finalmente ver o que realmente 297 00:12:59,700 --> 00:13:01,790 means-- iso só significa algo malo aconteceu. 298 00:13:01,790 --> 00:13:05,560 Agora, isto significa, así como en perigo, Podo comprobar unha condición aquí en C, 299 00:13:05,560 --> 00:13:08,830 Se s non é igual a NULL. 300 00:13:08,830 --> 00:13:11,930 Entón, se non vin isto antes, isto significa só non é igual. 301 00:13:11,930 --> 00:13:15,290 >> Entón, é o contrario do iguais iguais, que, recordan, 302 00:13:15,290 --> 00:13:18,940 é diferente da única é igual, o que é atribución. 303 00:13:18,940 --> 00:13:23,030 Entón, se s non coincide NULL, só entón 304 00:13:23,030 --> 00:13:25,980 Quero realizar estas liñas de código. 305 00:13:25,980 --> 00:13:28,080 Así, noutras palabras, Antes de me afondar en cegamente 306 00:13:28,080 --> 00:13:30,919 e comezar a iteración sobre s, e tratándose o 307 00:13:30,919 --> 00:13:33,710 como se fose unha secuencia de personaxes, eu vou para a primeira verificación, 308 00:13:33,710 --> 00:13:37,900 agarde un minuto, é definitivamente non igual a este valor especial, NULL? 309 00:13:37,900 --> 00:13:40,030 >> Porque se é, cousas malas poden ocorrer. 310 00:13:40,030 --> 00:13:43,080 E de momento, asumir as cousas que os malos pasando significa que o seu programa traba, 311 00:13:43,080 --> 00:13:45,070 e non pode necesariamente recuperar. 312 00:13:45,070 --> 00:13:46,800 Entón, francamente, parece máis feo. 313 00:13:46,800 --> 00:13:48,660 é medio confuso agora a ollar. 314 00:13:48,660 --> 00:13:50,780 Pero esta se fai máis familiarizado antes de tempo. 315 00:13:50,780 --> 00:13:52,920 >> Pero eu vou propoñer agora outra mellora. 316 00:13:52,920 --> 00:13:54,660 Esta é unha mellora para corrección. 317 00:13:54,660 --> 00:13:58,800 O meu programa agora é máis correcta, pois No caso raro que a memoria non é suficiente 318 00:13:58,800 --> 00:14:01,180 existe, eu vou tratar con isto, e eu simplemente non facer nada. 319 00:14:01,180 --> 00:14:02,680 Eu, polo menos, non vai fallar. 320 00:14:02,680 --> 00:14:05,000 >> Pero imos facer unha versión final aquí. 321 00:14:05,000 --> 00:14:07,690 E un ficheiro chamado string2.c. 322 00:14:07,690 --> 00:14:10,190 Vou pegar este mesmo código só por un momento, 323 00:14:10,190 --> 00:14:14,210 e eu estou indo a destacar esta liña, 11, aquí, só por un momento. 324 00:14:14,210 --> 00:14:18,179 Agora, a realidade é que os compiladores intelixentes como Clang podería fixar iso para nós 325 00:14:18,179 --> 00:14:19,970 nos bastidores sen o noso nunca saber. 326 00:14:19,970 --> 00:14:24,670 Pero imos pensar sobre iso fundamentalmente como un proxecto problemático. 327 00:14:24,670 --> 00:14:29,010 >> Esta liña de código, por suposto, dicindo: arrincar algúns variable i a 0. 328 00:14:29,010 --> 00:14:30,260 Isto é moi sinxelo. 329 00:14:30,260 --> 00:14:34,691 E o que unha vez máis é esta declaración, aquí, i ++, facendo? 330 00:14:34,691 --> 00:14:37,066 Xa vimos isto antes, pero nós realmente non falar sobre iso. 331 00:14:37,066 --> 00:14:37,900 >> Audiencia: incrementando i. 332 00:14:37,900 --> 00:14:39,191 >> DAVID J. Malan: incrementando i. 333 00:14:39,191 --> 00:14:41,890 Así, cada iteración través este circuíto, cada ciclo, 334 00:14:41,890 --> 00:14:43,570 está incrementando i por un. 335 00:14:43,570 --> 00:14:45,740 Por iso, se fai maior e máis grande, e maior a que o loop remata. 336 00:14:45,740 --> 00:14:46,810 Como isto remata? 337 00:14:46,810 --> 00:14:49,430 Así, hai este medio condición que usan antes. 338 00:14:49,430 --> 00:14:52,500 Xa viu e en instrucións paso a paso no conxunto de P. 339 00:14:52,500 --> 00:14:53,880 >> Pero o que é esta palabra? 340 00:14:53,880 --> 00:14:58,352 Faga o seguinte loop para mentres i é menor que o que? 341 00:14:58,352 --> 00:14:59,810 Audiencia: A lonxitude da corda. 342 00:14:59,810 --> 00:15:01,518 David J. Malan: O lonxitude da corda. 343 00:15:01,518 --> 00:15:04,300 Por iso tradúcese moi limpa a inglés nese sentido. 344 00:15:04,300 --> 00:15:08,810 Agora o problema é que cada vez que eu iteración través deste ciclo, en teoría, 345 00:15:08,810 --> 00:15:10,000 Eu estou facendo esta pregunta. 346 00:15:10,000 --> 00:15:12,250 É i menor que a lonxitude da cadea de s? 347 00:15:12,250 --> 00:15:14,500 É i menor que a lonxitude da cadea de s? 348 00:15:14,500 --> 00:15:18,380 >> Agora é i cambiando cada iteración? 349 00:15:18,380 --> 00:15:18,880 É. 350 00:15:18,880 --> 00:15:19,629 Debido á ++. 351 00:15:19,629 --> 00:15:21,700 Así, cada iteración i está quedando maior. 352 00:15:21,700 --> 00:15:25,411 Pero é s quedando maior, ou menor, ou cambiar en todo? 353 00:15:25,411 --> 00:15:25,910 N º 354 00:15:25,910 --> 00:15:30,240 Así, en termos de deseño, un dos eixos ao longo do cal tratamos avaliar o código 355 00:15:30,240 --> 00:15:32,610 na clase, isto parece medio idiota. 356 00:15:32,610 --> 00:15:34,690 >> Como está literalmente en cada iteración 357 00:15:34,690 --> 00:15:37,110 deste lazo pedindo a mesma maldita pregunta de novo, 358 00:15:37,110 --> 00:15:40,770 e de novo, e de novo, e, literalmente, iso non vai cambiar. 359 00:15:40,770 --> 00:15:44,220 Polo menos, se eu non estou tocando s e tentar cambiar o contido de s. 360 00:15:44,220 --> 00:15:46,610 Para que eu poida facer un pouco mellor do que iso. 361 00:15:46,610 --> 00:15:49,530 >> E o que eu vou facer non é declarar só unha variable i, 362 00:15:49,530 --> 00:15:53,330 pero unha segunda variable Vou arbitrariamente, pero convencionalmente, chamalo de n. 363 00:15:53,330 --> 00:15:55,940 Asignar n igual ao lonxitude da corda de s. 364 00:15:55,940 --> 00:15:59,090 E entón para acá, vou facer un pouco de optimización intelixente, de xeito 365 00:15:59,090 --> 00:16:03,460 falar, que, ao final do día non máis correcta ou non menos correcta é 366 00:16:03,460 --> 00:16:04,260 que antes. 367 00:16:04,260 --> 00:16:05,500 Pero é un proxecto mellor. 368 00:16:05,500 --> 00:16:09,480 O feito de que está a usar menos tempo, menos ciclos de CPU, de xeito 369 00:16:09,480 --> 00:16:14,040 para falar, para responder a mesma pregunta, pero só unha vez. 370 00:16:14,040 --> 00:16:17,870 >> Calquera dúbida sobre que xeral principio de mellora, 371 00:16:17,870 --> 00:16:21,294 dicir, a eficiencia dun programa? 372 00:16:21,294 --> 00:16:21,991 Si? 373 00:16:21,991 --> 00:16:23,699 Audiencia: Por que usar o [inaudível]? 374 00:16:23,699 --> 00:16:25,760 375 00:16:25,760 --> 00:16:27,010 DAVID J. Malan: Boa pregunta. 376 00:16:27,010 --> 00:16:30,690 Entón, por que poñer o ++ a finais de i en vez de no inicio do i? 377 00:16:30,690 --> 00:16:33,070 Neste caso, ten ningún impacto funcional. 378 00:16:33,070 --> 00:16:36,670 E, en xeral, tenden a usar o operador postfix 379 00:16:36,670 --> 00:16:41,750 de xeito que é un pouco máis claro como para cando a operación está pasando. 380 00:16:41,750 --> 00:16:46,670 >> Para quen non coñece, existe outra declaracións en que podería facer ++ i. 381 00:16:46,670 --> 00:16:48,747 Estes son funcionalmente equivalente, neste caso 382 00:16:48,747 --> 00:16:51,080 porque non hai nada máis en torno a ese incremento. 383 00:16:51,080 --> 00:16:54,435 Pero pode vir ata con casos e liñas de código 384 00:16:54,435 --> 00:16:55,810 en que isto fai a diferenza. 385 00:16:55,810 --> 00:16:57,810 Entón, xeralmente, non temos incluso falar sobre iso. 386 00:16:57,810 --> 00:17:00,690 Porque, francamente, fai o seu código máis sexy, e unha especie de vigaristas, 387 00:17:00,690 --> 00:17:01,776 e menos caracteres. 388 00:17:01,776 --> 00:17:04,859 Pero a realidade é que é moito máis difícil, Creo que, mesmo para me involucrar miña mente 389 00:17:04,859 --> 00:17:07,319 en torno a, ás veces, a orde das operacións. 390 00:17:07,319 --> 00:17:09,750 Así como un aparte, se realmente non me gusta diso, 391 00:17:09,750 --> 00:17:14,650 aínda que este é o tipo de sexy buscar, tamén se pode facer i + = 1, 392 00:17:14,650 --> 00:17:18,880 que é a versión máis feo do mesma idea para postfix incrementação. 393 00:17:18,880 --> 00:17:22,250 >> Digo isto e vostede debe facer o desfrute del, 394 00:17:22,250 --> 00:17:25,140 pero vai ver como código algo bonito en pouco tempo. 395 00:17:25,140 --> 00:17:27,160 >> [Risas] 396 00:17:27,160 --> 00:17:28,410 >> DAVID J. Malan: Dereito? 397 00:17:28,410 --> 00:17:29,360 Si. 398 00:17:29,360 --> 00:17:30,480 Pregunta no medio. 399 00:17:30,480 --> 00:17:32,146 >> Audiencia: Debe dicir int n? 400 00:17:32,146 --> 00:17:34,020 DAVID J. Malan: Fai Non ten que dicir int n. 401 00:17:34,020 --> 00:17:37,670 Entón, por que xa dixemos int, non precisa dicir iso de novo. 402 00:17:37,670 --> 00:17:41,820 O problema é que n ten que ser o mesmo tipo de datos, como eu. 403 00:17:41,820 --> 00:17:43,310 Entón, iso é só unha conveniencia aquí. 404 00:17:43,310 --> 00:17:44,058 Si. 405 00:17:44,058 --> 00:17:47,806 >> Audiencia: Pode pasar por riba da soporte de impresión de caracteres s i de novo? 406 00:17:47,806 --> 00:17:48,930 DAVID J. Malan: Absolutamente. 407 00:17:48,930 --> 00:17:52,110 Entón,% c, lembrar da última tempo, é só un espazo reservado. 408 00:17:52,110 --> 00:17:53,930 Significa poñer un char aquí. 409 00:17:53,930 --> 00:17:56,780 n invertida, por suposto, só medio poñer un salto de liña aquí. 410 00:17:56,780 --> 00:17:59,540 Entón, iso só deixa, agora, este anaco de nova sintaxe. 411 00:17:59,540 --> 00:18:03,730 E este é, literalmente dicindo, grab a secuencia de chamadas s e ir buscar a súa 412 00:18:03,730 --> 00:18:06,050 carácter i'ésima, por así dicir. 413 00:18:06,050 --> 00:18:10,590 >> E eu sigo dicindo carácter i'ésima porque en cada iteración deste circuíto 414 00:18:10,590 --> 00:18:14,540 é coma se estamos imprimindo , En primeiro lugar s soporte 0, 415 00:18:14,540 --> 00:18:15,780 como programador podería dicir. 416 00:18:15,780 --> 00:18:18,680 Entón é franxa 1, logo s soporte 2, a continuación, 3, 4, axiña. 417 00:18:18,680 --> 00:18:21,610 Pero está claro que é unha variable, entón eu só expresar la con i. 418 00:18:21,610 --> 00:18:23,900 >> Clave, con todo, é entender, especialmente se non 419 00:18:23,900 --> 00:18:26,358 se aclimatando a este mundo de programación, onde todos nós 420 00:18:26,358 --> 00:18:28,950 parecen contar desde cero, ten que comeza a contar desde cero agora. 421 00:18:28,950 --> 00:18:35,130 Porque cordas, primeiro carácter, o z en Zamyla é para mellor ou para peor 422 00:18:35,130 --> 00:18:40,490 vai vivir no número de localización cero. 423 00:18:40,490 --> 00:18:48,210 >> Todo ben, entón deixe-me traer nos de volta aquí para Zamyla 424 00:18:48,210 --> 00:18:50,746 e ver o que realmente está a suceder por baixo do capó. 425 00:18:50,746 --> 00:18:52,370 Polo tanto, non hai esa noción de type casting. 426 00:18:52,370 --> 00:18:53,800 Pode que, en realidade, xogado con iso xa, 427 00:18:53,800 --> 00:18:55,970 quizais para o hacker edición do P definido. 428 00:18:55,970 --> 00:19:00,320 Pero type casting só se refire ao habilidade en C e outras linguaxes 429 00:19:00,320 --> 00:19:03,170 para converter un tipo de datos a outro. 430 00:19:03,170 --> 00:19:05,450 >> Agora como podemos ver iso moi directa? 431 00:19:05,450 --> 00:19:08,530 Entón iso, lembre, é o comezo do alfabeto inglés. 432 00:19:08,530 --> 00:19:11,265 E o contexto, lembrar, desde como hai unha semana é ASCII. 433 00:19:11,265 --> 00:19:13,790 A American Standard Code for Information Interchange. 434 00:19:13,790 --> 00:19:17,080 Que só é un longo camiño de dicir un mapeo dende cartas 435 00:19:17,080 --> 00:19:19,370 de números, e de números para letras. 436 00:19:19,370 --> 00:19:22,940 >> Entón, de A a M aquí, dot dot punto, aliñado con, recall, 437 00:19:22,940 --> 00:19:25,582 o número decimal 65 enriba. 438 00:19:25,582 --> 00:19:27,290 E nós non falamos sobre iso explicitamente, 439 00:19:27,290 --> 00:19:29,850 pero certamente hai semellante números ás letras minúsculas. 440 00:19:29,850 --> 00:19:30,820 E, de feito, existen. 441 00:19:30,820 --> 00:19:33,730 O mundo decidiu fai uns anos atrás que un pouco, minúsculas a, 442 00:19:33,730 --> 00:19:35,020 será 97. 443 00:19:35,020 --> 00:19:38,010 E pouco b vai igual a 98, e así por diante. 444 00:19:38,010 --> 00:19:40,200 >> E para calquera outra tecla no teclado, hai 445 00:19:40,200 --> 00:19:42,190 Vai ser un patrón semellante de bits. 446 00:19:42,190 --> 00:19:44,540 Ou equivalentemente, un número decimal. 447 00:19:44,540 --> 00:19:47,110 Entón, a cuestión en apreciado, entón, é como podemos 448 00:19:47,110 --> 00:19:49,400 realmente ver esta debaixo do capó? 449 00:19:49,400 --> 00:19:51,539 Entón, eu estou indo a ir a gedit novo. 450 00:19:51,539 --> 00:19:53,330 E no canto de Tipo este a partir de cero, 451 00:19:53,330 --> 00:19:55,330 Eu estou indo a ir adiante e basta abrir man de algo 452 00:19:55,330 --> 00:19:58,350 desde o código de hoxe chamado ASCII cero. 453 00:19:58,350 --> 00:20:01,210 >> E cero ASCII parécese iso. 454 00:20:01,210 --> 00:20:02,710 Entón, imos implicar nosas mentes en torno a este. 455 00:20:02,710 --> 00:20:04,969 Entón, primeiro, eu comentei o código, que é bo. 456 00:20:04,969 --> 00:20:07,010 Por literalmente me dicindo o que esperar, 457 00:20:07,010 --> 00:20:08,950 presentar un mapeamento para maiúsculas. 458 00:20:08,950 --> 00:20:13,690 Agora eu non sei ben o que eu quere dicir con iso, entón imos deducir. 459 00:20:13,690 --> 00:20:16,870 >> En inglés, quizais Inglés algo techie, 460 00:20:16,870 --> 00:20:20,660 o que fai a liña 18 aparecen estar facendo por nós? 461 00:20:20,660 --> 00:20:21,500 Só a liña 18. 462 00:20:21,500 --> 00:20:22,430 Que a indución? 463 00:20:22,430 --> 00:20:25,192 Que vai comezar? 464 00:20:25,192 --> 00:20:26,100 >> Audiencia: Un loop. 465 00:20:26,100 --> 00:20:26,630 >> DAVID J. Malan: Un loop. 466 00:20:26,630 --> 00:20:28,463 E cantas veces é que vai facer unha iteración? 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 Audiencia: [interpoñendo VOCES] seis veces. 469 00:20:33,270 --> 00:20:34,830 DAVID J. Malan: non seis veces. 470 00:20:34,830 --> 00:20:35,840 Audiencia: 26 veces. 471 00:20:35,840 --> 00:20:36,560 David J. Malan: 26 veces. 472 00:20:36,560 --> 00:20:37,060 Si, desculpe. 473 00:20:37,060 --> 00:20:37,960 26 veces. 474 00:20:37,960 --> 00:20:38,460 Por que? 475 00:20:38,460 --> 00:20:41,590 Ben, é un pouco raro, pero Comece a contar desde 65 anos. 476 00:20:41,590 --> 00:20:43,300 O que é raro, pero non é malo. 477 00:20:43,300 --> 00:20:44,610 Non é malo por dicir. 478 00:20:44,610 --> 00:20:46,980 E eu estou facendo iso só porque, para este exemplo, 479 00:20:46,980 --> 00:20:50,455 Eu son o tipo de anticipación que o capital A foi de 65. 480 00:20:50,455 --> 00:20:53,330 Agora, iso non é o máis elegante forma de facelo, a especie de código ríxido 481 00:20:53,330 --> 00:20:56,130 valores esotéricos que ninguén sempre espera para recordar. 482 00:20:56,130 --> 00:21:00,155 >> Pero, por agora, entender que eu son facendo iso a través de 65 máis 26. 483 00:21:00,155 --> 00:21:03,030 Porque, ao parecer, eu non quero nin para facer aritmética na miña cabeza. 484 00:21:03,030 --> 00:21:04,440 Entón eu vou deixar o compilador facelo. 485 00:21:04,440 --> 00:21:08,600 Pero, entón, en cada ciclo, cada iteración do circuíto, estou incrementando i. 486 00:21:08,600 --> 00:21:10,196 >> Entón, agora que parece un pouco enigmática. 487 00:21:10,196 --> 00:21:13,320 Pero hai que ter o básico de construción bloques que entender isto. 488 00:21:13,320 --> 00:21:15,510 % C é só un espazo reservado para un char. 489 00:21:15,510 --> 00:21:19,010 % I é un espazo reservado para un int. 490 00:21:19,010 --> 00:21:23,310 E verifícase que, ao utilizar este nova sintaxe, este parénteses, entón 491 00:21:23,310 --> 00:21:26,100 falar, polo tanto, un tipo de datos dentro dun parénteses 492 00:21:26,100 --> 00:21:32,270 Eu podo facer o compilador tratando i non é un número enteiro, pero como un char. 493 00:21:32,270 --> 00:21:35,520 >> Así, me amosando o carácter equivalente a ese número. 494 00:21:35,520 --> 00:21:37,986 Agora aquí abaixo, este código é practicamente idéntico. 495 00:21:37,986 --> 00:21:39,860 Eu só quería facer Super explícito o feito de 496 00:21:39,860 --> 00:21:42,095 que estou empezando a 97, o que é minúsculo a. 497 00:21:42,095 --> 00:21:44,080 Na anterior por máis 26 letras. 498 00:21:44,080 --> 00:21:46,970 E eu estou doing-- novo, lanzando i, por así dicir. 499 00:21:46,970 --> 00:21:49,160 Ou type casting i, por así dicir. 500 00:21:49,160 --> 00:21:51,420 >> A partir dun int a un char. 501 00:21:51,420 --> 00:21:55,760 Así, o resultado final vai ser, francamente, información que xa sabemos. 502 00:21:55,760 --> 00:21:59,411 Vou facer ASCII-0 non dot-- punto c. 503 00:21:59,411 --> 00:22:02,160 Teña en conta, probablemente o fixo erro que eu só fixen accidentalmente. 504 00:22:02,160 --> 00:22:03,820 Fai ASCII-0. 505 00:22:03,820 --> 00:22:06,090 Agora eu vou facer ./ascii-0. 506 00:22:06,090 --> 00:22:09,050 Vou aumentar o zoom, e, por desgraza, vai rolar para fóra da pantalla. 507 00:22:09,050 --> 00:22:15,060 Pero vemos un gráfico completo onde a mapas a 97, b mapas para 98, 508 00:22:15,060 --> 00:22:18,931 e desprazarse cara arriba aínda máis Un, por suposto, mapea a 65. 509 00:22:18,931 --> 00:22:21,180 Entón, iso é só para dicir que o que teño cravado, 510 00:22:21,180 --> 00:22:25,310 hai esa equivalencia, é de feito, o caso na realidade. 511 00:22:25,310 --> 00:22:28,000 Así, unha modificación rápida da presente. 512 00:22:28,000 --> 00:22:31,220 Déixeme abrir ASCII-1.c. 513 00:22:31,220 --> 00:22:38,070 E entender iso intelixente, tipo de, a clarificación deste. 514 00:22:38,070 --> 00:22:41,770 Esta é ASCII-1.c, e entender esa cousa tola. 515 00:22:41,770 --> 00:22:45,120 >> E iso realmente chega ao corazón de que os ordenadores están a facer. 516 00:22:45,120 --> 00:22:48,150 Aínda que nós seres humanos puidésemos non contan en termos de letters-- 517 00:22:48,150 --> 00:22:50,380 Non comezar a pensar, Todo ben, entón un b, 518 00:22:50,380 --> 00:22:52,590 e usalas para contar obxectos físicos. 519 00:22:52,590 --> 00:22:58,680 Pode certamente dicir que quero arrincar algúns variable chamada C-- 520 00:22:58,680 --> 00:23:03,220 pero eu podería chama este calquera coisa-- entón c é inicializar ao capital A. 521 00:23:03,220 --> 00:23:07,560 >> Porque ao final do día, o ordenador non importa o que está almacenando, 522 00:23:07,560 --> 00:23:10,170 el só lle importa como quere presentar esta información. 523 00:23:10,170 --> 00:23:13,560 Como queira que o equipo interpretar ese patrón de bits? 524 00:23:13,560 --> 00:23:16,320 Entón iso non é algo que me , En xeral, recomendo facer. 525 00:23:16,320 --> 00:23:19,500 É realmente só un exemplo para saber que pode absolutamente 526 00:23:19,500 --> 00:23:22,049 arrincar un enteiro para un char. 527 00:23:22,049 --> 00:23:24,090 Debido ao baixo capo dun char, por suposto, 528 00:23:24,090 --> 00:23:26,170 é só un número de 0 a 255. 529 00:23:26,170 --> 00:23:28,540 >> Así, pode certamente poñelas dentro dun int. 530 00:23:28,540 --> 00:23:30,890 E o que iso tamén demostra é que nos 531 00:23:30,890 --> 00:23:34,040 pode converter dun tipo a outro, aquí, 532 00:23:34,040 --> 00:23:36,780 en definitiva, a impresión do mesmo. 533 00:23:36,780 --> 00:23:44,760 E, de feito, iso vou corrixir online-- era para dicir iso, unha vez máis, aquí. 534 00:23:44,760 --> 00:23:48,610 Déixeme limpar iso en liña, e nós imos ver en un paso a paso en liña, se é necesario, 535 00:23:48,610 --> 00:23:50,280 o que se pretende non. 536 00:23:50,280 --> 00:23:50,960 >> Está ben. 537 00:23:50,960 --> 00:23:53,892 Así último exemplo, agora inclúen A e B e, a continuación, imos 538 00:23:53,892 --> 00:23:54,850 levar as cousas por riba de un entalhe. 539 00:23:54,850 --> 00:23:58,330 Así, con un e B e c está na capitalización 540 00:23:58,330 --> 00:24:01,560 e a equivalencia destes, imos bótalle un ollo neste exemplo aquí. 541 00:24:01,560 --> 00:24:02,752 Outro exemplo de código. 542 00:24:02,752 --> 00:24:04,460 Imos abrir un que é xa realizados, para que 543 00:24:04,460 --> 00:24:06,440 Non precisa escriba-lo todo a partir de cero. 544 00:24:06,440 --> 00:24:09,420 >> E teña en conta, en anticipación Utilizamos cabeceira múltiple 545 00:24:09,420 --> 00:24:13,240 arquivos, entre os que se noso novo amigo, string.h. 546 00:24:13,240 --> 00:24:15,597 Agora iso parece, a primeira vista, algo enigmática. 547 00:24:15,597 --> 00:24:18,180 Pero imos ver se non podemos razoar a través do que está pasando aquí. 548 00:24:18,180 --> 00:24:21,150 Primeiro eu teño unha cadea de usuario, e engada esa cadea nunha variable 549 00:24:21,150 --> 00:24:22,286 chamados s. 550 00:24:22,286 --> 00:24:24,090 Copiar de antes. 551 00:24:24,090 --> 00:24:27,250 Na liña 22, son aparentemente facendo o que 552 00:24:27,250 --> 00:24:30,760 Eu fixen hai pouco, estou interactuar sobre os personaxes de s. 553 00:24:30,760 --> 00:24:34,780 >> E os novos trucos aquí está a usar lonxitude da corda, a optimización menor 554 00:24:34,780 --> 00:24:37,930 de almacenar a lonxitude da corda en n, No canto de chamar strlen novo, 555 00:24:37,930 --> 00:24:38,850 e de novo, e de novo. 556 00:24:38,850 --> 00:24:41,120 E só comprobando que i é menor que n. 557 00:24:41,120 --> 00:24:43,330 Agora, aquí, as cousas están algo interesante. 558 00:24:43,330 --> 00:24:45,980 Pero é só unha aplicación desta mesma idea nova. 559 00:24:45,980 --> 00:24:48,470 O que fai en inglés s soporte i representa? 560 00:24:48,470 --> 00:24:51,772 561 00:24:51,772 --> 00:24:54,260 >> Audiencia: Contando cada carácter [inaudível]. 562 00:24:54,260 --> 00:24:55,926 >> DAVID J. Malan: Contando cada personaxe. 563 00:24:55,926 --> 00:24:58,680 E aínda máis sucinta, s soporte i representan o que? 564 00:24:58,680 --> 00:25:00,950 Vostede diría. 565 00:25:00,950 --> 00:25:04,084 Non colocar-lo no lugar aquí. 566 00:25:04,084 --> 00:25:06,375 >> Audiencia: Bem-- 567 00:25:06,375 --> 00:25:09,500 DAVID J. Malan: Entón, se a palabra é-- se a corda é Zamyla, que starts-- 568 00:25:09,500 --> 00:25:12,380 Audiencia: --você xestionar os caracteres separately-- 569 00:25:12,380 --> 00:25:13,690 DAVID J. Malan: Good. 570 00:25:13,690 --> 00:25:14,190 Exactamente. 571 00:25:14,190 --> 00:25:17,940 A notación corchete permite para acceder cada personaxe individual, 572 00:25:17,940 --> 00:25:21,120 entón s soporte 0 será o primeiro carácter en cadea. 573 00:25:21,120 --> 00:25:24,110 s soporte 1 será o segundo, e así por diante. 574 00:25:24,110 --> 00:25:28,050 Entón, a pregunta que eu estou pedindo, aquí, nesta condición é o que? 575 00:25:28,050 --> 00:25:33,984 O personaxe i'ésima de s maior o igual a un minúsculas? 576 00:25:33,984 --> 00:25:36,400 E o que iso significa, aquí, coas dobres e comercial? 577 00:25:36,400 --> 00:25:36,800 Audiencia (en conxunto): E. 578 00:25:36,800 --> 00:25:37,210 DAVID J. Malan: E. 579 00:25:37,210 --> 00:25:38,418 É só o equivalente a iso. 580 00:25:38,418 --> 00:25:42,310 E non é unha palabra clave en C, ten que uso, irritante, comercial e comercial. 581 00:25:42,310 --> 00:25:47,520 E iso, por outra banda, está a pedir é s de i'ésima carácter inferiores ou iguais 582 00:25:47,520 --> 00:25:49,030 para minúsculas z? 583 00:25:49,030 --> 00:25:52,440 E unha vez máis, aquí é onde comprender o subxacente 584 00:25:52,440 --> 00:25:54,550 implantación dun ordenador ten sentido. 585 00:25:54,550 --> 00:25:57,330 Teña en conta que, a pesar de eu ter o dot dot dot alí, 586 00:25:57,330 --> 00:26:04,410 Parece que da a Z en minúsculas son todos os valores de 97 contiguas superior enriba. 587 00:26:04,410 --> 00:26:07,820 >> E mesmo para maiúsculas desde 65. 588 00:26:07,820 --> 00:26:10,410 Así, o takeaway, entón, é que, en inglés, 589 00:26:10,410 --> 00:26:12,760 como describiría que liña 24 está facendo? 590 00:26:12,760 --> 00:26:15,736 591 00:26:15,736 --> 00:26:16,728 Si? 592 00:26:16,728 --> 00:26:21,575 >> Audiencia: O día 24 é a verificación para ver se cada personaxe é unha minúscula. 593 00:26:21,575 --> 00:26:24,700 DAVID J. Malan: É comprobar se cada personaxe é unha letra minúscula. 594 00:26:24,700 --> 00:26:28,590 Así, mesmo de forma máis sucinta, é o carácter i'ésima de s minúsculas? 595 00:26:28,590 --> 00:26:30,690 Isto é todo o que somos expresar aquí, loxicamente, 596 00:26:30,690 --> 00:26:33,750 algo enigmático, pero en definitiva, moi directa. 597 00:26:33,750 --> 00:26:36,480 É S de i'ésima letra minúscula? 598 00:26:36,480 --> 00:26:40,130 >> Se é así, e aquí é onde as cousas estar un pouco mente dobra 599 00:26:40,130 --> 00:26:44,760 só por un momento, se é así, vaia adiante e imprimir un carácter. 600 00:26:44,760 --> 00:26:47,360 Polo tanto, este é só un espazo reservado, pero o personaxe? 601 00:26:47,360 --> 00:26:53,710 Por que estou facendo s soporte de i menos esa expresión aquí? 602 00:26:53,710 --> 00:26:55,110 >> Ben entender o estándar aquí. 603 00:26:55,110 --> 00:26:57,380 Os números reais non importa tanto. 604 00:26:57,380 --> 00:27:02,700 Pero teña en conta que 97 é como lonxe de 65? 605 00:27:02,700 --> 00:27:03,560 >> Audiencia: 32. 606 00:27:03,560 --> 00:27:04,480 >> DAVID J. Malan: 32. 607 00:27:04,480 --> 00:27:06,890 A que distancia está de 98 desde 66? 608 00:27:06,890 --> 00:27:07,740 >> Audiencia: 32. 609 00:27:07,740 --> 00:27:09,890 >> DAVID J. Malan: Pouco c de gran C? 610 00:27:09,890 --> 00:27:10,420 32. 611 00:27:10,420 --> 00:27:14,550 Polo tanto, hai 32 saltos de unha carta a outro. 612 00:27:14,550 --> 00:27:17,790 Entón, sinceramente, eu, podería simplificar este aquel. 613 00:27:17,790 --> 00:27:20,400 Pero entón eu estou codificación algo difícil esta comprensión baixo nivel 614 00:27:20,400 --> 00:27:21,740 que non sempre é lector vai entender. 615 00:27:21,740 --> 00:27:25,080 Entón eu vou xeneralizar-lo como eu coñecer as letras minúsculas son maiores. 616 00:27:25,080 --> 00:27:28,400 Sei que as maiúsculas son valores menores, irónicamente. 617 00:27:28,400 --> 00:27:33,216 >> Pero esta é efectivamente equivalentes aos dicindo restar 32 de s soporte de i. 618 00:27:33,216 --> 00:27:35,430 Así, no ámbito destes letras, se a carta 619 00:27:35,430 --> 00:27:38,950 pasa a ser, unha minúscula un, e eu restar 32, 620 00:27:38,950 --> 00:27:43,442 que o efecto que isto ten, matematicamente, en minúsculas de a? 621 00:27:43,442 --> 00:27:44,400 Audiencia: Capitalizes-- 622 00:27:44,400 --> 00:27:45,691 David J. Malan: Capitalizes el. 623 00:27:45,691 --> 00:27:48,440 E, de feito, é por iso que o noso programa chámase capitalizar cero. 624 00:27:48,440 --> 00:27:51,590 Este programa quere capitalizar unha carta, 625 00:27:51,590 --> 00:27:54,580 tras comprobar que é en realidade, unha letra minúscula. 626 00:27:54,580 --> 00:27:59,810 Se non, na liña 30, o que debo facer se non é unha letra minúscula que eu son 627 00:27:59,810 --> 00:28:02,852 mirando nunha determinada iteración do bucle. 628 00:28:02,852 --> 00:28:03,890 Basta imprimir lo. 629 00:28:03,890 --> 00:28:07,010 >> Polo tanto, non cambiar cousas iso non é mesmo minúsculas. 630 00:28:07,010 --> 00:28:10,790 Restrinxir-se a un pouco a través pouco z. 631 00:28:10,790 --> 00:28:12,730 Agora iso é moi misterioso. 632 00:28:12,730 --> 00:28:15,230 Con todo, ao final do día, esta É así que, unha vez, 633 00:28:15,230 --> 00:28:16,460 tivo que aplicar cousas. 634 00:28:16,460 --> 00:28:19,780 Se eu, no canto aberto capitalizar un, oh grazas a Deus. 635 00:28:19,780 --> 00:28:22,320 Hai unha función chamados a superior que pode 636 00:28:22,320 --> 00:28:25,410 facer todo o que acabamos de facer a un nivel mínimo. 637 00:28:25,410 --> 00:28:28,752 >> Agora, para superior é interesante porque é declarado nun ficheiro, 638 00:28:28,752 --> 00:28:31,210 e só sabería diso comprobando a documentación, 639 00:28:31,210 --> 00:28:35,730 ou a ser dito, por exemplo, na aula, onde existe, nun ctype.h ficheiro chamado. 640 00:28:35,730 --> 00:28:37,630 Polo tanto, este é un novo amigo noso. 641 00:28:37,630 --> 00:28:40,750 E máis fai exactamente o que o seu nome indica. 642 00:28:40,750 --> 00:28:44,860 >> Pode pasar, como argumento, entre estes parénteses, algún personaxe. 643 00:28:44,860 --> 00:28:48,390 Vou pasar o carácter i'ésima de s usando a nosa nova notación fantasía 644 00:28:48,390 --> 00:28:49,870 inclúen corchetes. 645 00:28:49,870 --> 00:28:53,391 E dar un palpite, que é o regreso valor superior a aparentemente vai 646 00:28:53,391 --> 00:28:53,890 ser? 647 00:28:53,890 --> 00:28:56,460 648 00:28:56,460 --> 00:28:57,770 A letra maiúscula. 649 00:28:57,770 --> 00:28:58,620 A letra maiúscula. 650 00:28:58,620 --> 00:29:02,330 >> Entón, se eu pasar en minúsculas a, espero que, por definición para superior, 651 00:29:02,330 --> 00:29:05,600 vai voltar un maiúscula A. Se non, 652 00:29:05,600 --> 00:29:08,590 se non é unha letra minúscula en primeiro lugar, eu só imprimir lo. 653 00:29:08,590 --> 00:29:10,800 E, de feito, teña en conta a segundo amigo aquí. 654 00:29:10,800 --> 00:29:13,840 Non só a parte superior existe, pero é máis baixa, o cal 655 00:29:13,840 --> 00:29:16,200 en realidade, responde a esta pregunta para min. 656 00:29:16,200 --> 00:29:19,730 >> Agora quen escribiu isto, 10s de anos, xa sabe o que? 657 00:29:19,730 --> 00:29:23,840 Aplicado a superior e é descargar usando un código coma este. 658 00:29:23,840 --> 00:29:27,270 Pero, de novo, consistente con esa idea de abstraerse, 659 00:29:27,270 --> 00:29:29,190 tipo, nivel máis baixo detalles de implementación. 660 00:29:29,190 --> 00:29:32,600 E de pé sobre os ombreiros de persoas que viñeron antes de nós, a través de funcións 661 00:29:32,600 --> 00:29:36,300 como a parte superior e inferior é, que marabillosas suficiente son ben 662 00:29:36,300 --> 00:29:40,190 chamado para dicir o que eles fan, é un paradigma marabilloso para adoptar. 663 00:29:40,190 --> 00:29:44,040 >> Agora resulta que se eu ler a páxina man para, digamos, a parte superior, 664 00:29:44,040 --> 00:29:45,010 Eu aprendo algo máis. 665 00:29:45,010 --> 00:29:46,890 Así, o home toupper. 666 00:29:46,890 --> 00:29:48,050 É un pouco esmagadora. 667 00:29:48,050 --> 00:29:51,110 Pero aviso, aquí está que a mención de o ficheiro de cabeceira que eu debería usar. 668 00:29:51,110 --> 00:29:54,460 Como un aparte, porque esta é enganosa, a función 669 00:29:54,460 --> 00:29:59,070 usa enteiros en vez de caracteres por razóns de verificación de erros. 670 00:29:59,070 --> 00:30:01,260 Pero imos talvez veña de volta para que, no futuro. 671 00:30:01,260 --> 00:30:05,910 >> Pero teña en conta, aquí, aos convertidos superiores letra c en maiúsculas, se é posible. 672 00:30:05,910 --> 00:30:07,674 Entón, iso é moi sinxelo. 673 00:30:07,674 --> 00:30:09,340 E agora imos ser un pouco máis específico. 674 00:30:09,340 --> 00:30:12,750 Imos ollar para a parte do páxina do manual sobre valor de retorno. 675 00:30:12,750 --> 00:30:15,420 O valor de retorno é que da carta convertido. 676 00:30:15,420 --> 00:30:18,690 Ou c, a conversión non foi posible, 677 00:30:18,690 --> 00:30:20,250 en que c é a entrada orixinal. 678 00:30:20,250 --> 00:30:24,140 Que sei que a partir de aquí, a partir de argumento para a superior. 679 00:30:24,140 --> 00:30:25,780 >> Entón, cal é o takeaway iso? 680 00:30:25,780 --> 00:30:28,060 O valor de retorno é que da carta convertido, 681 00:30:28,060 --> 00:30:32,110 ou c, a letra orixinal, se a conversión non foi posible. 682 00:30:32,110 --> 00:30:36,460 Que mellora podo, polo tanto, facer o proxecto do meu código? 683 00:30:36,460 --> 00:30:37,146 Si? 684 00:30:37,146 --> 00:30:38,810 >> Audiencia: Pode eliminar o resto. 685 00:30:38,810 --> 00:30:40,810 DAVID J. Malan: eu poida retire a instrución else, 686 00:30:40,810 --> 00:30:42,510 e non só a instrución else. 687 00:30:42,510 --> 00:30:44,150 >> Audiencia: Pode eliminar [inaudível]. 688 00:30:44,150 --> 00:30:46,310 >> DAVID J. Malan: eu poida eliminar todo o garfo 689 00:30:46,310 --> 00:30:48,209 na estrada, o caso máis completo. 690 00:30:48,209 --> 00:30:50,250 Entón, en realidade, deixe-me abrir a versión final deste, 691 00:30:50,250 --> 00:30:55,540 capitalizar-2 e entender o no; si vai, sexy, o código está comezando agora, 692 00:30:55,540 --> 00:31:00,040 en que eu reducido dalgúns sete ou máis liñas para só catro, 693 00:31:00,040 --> 00:31:03,850 a función que eu pretendía simplemente chamando a superior, 694 00:31:03,850 --> 00:31:09,410 pasando s soporte de i, e impresión para fóra, co espazo reservado% c, 695 00:31:09,410 --> 00:31:11,090 que o carácter particular. 696 00:31:11,090 --> 00:31:14,560 >> Agora, sen dúbida, non é un erro, ou, polo menos, o risco de un erro, 697 00:31:14,560 --> 00:31:15,350 neste programa. 698 00:31:15,350 --> 00:31:18,200 Entón, só para volver para unha viaxe máis cedo, 699 00:31:18,200 --> 00:31:21,820 o que debo facer, probablemente, tamén en este programa para facelo máis robusto, 700 00:31:21,820 --> 00:31:24,974 de xeito que non hai ningunha maneira que pode falla, mesmo en casos raros? 701 00:31:24,974 --> 00:31:26,390 Audiencia: Asegúrese de que non é NULL. 702 00:31:26,390 --> 00:31:28,056 DAVID J. Malan: Asegúrese de que non é NULL. 703 00:31:28,056 --> 00:31:31,030 Entón, realmente, para facer este super bo, eu debería facer algo como: 704 00:31:31,030 --> 00:31:35,300 Se s non é nulo, entón dalle realizar 705 00:31:35,300 --> 00:31:38,470 estas liñas de código, que Podo entón guión así, 706 00:31:38,470 --> 00:31:39,870 e logo, poñer na miña clave de peche. 707 00:31:39,870 --> 00:31:41,550 Tan bo subordinación xunto das dúas ideas. 708 00:31:41,550 --> 00:31:42,429 Si? 709 00:31:42,429 --> 00:31:44,470 Audiencia: Podería usar un loop Do While, en vez diso? 710 00:31:44,470 --> 00:31:47,270 DAVID J. Malan: Could Fago un loop Do While? 711 00:31:47,270 --> 00:31:50,020 Audiencia: --você quere asegurarse de que realmente [inaudível]. 712 00:31:50,020 --> 00:31:51,728 DAVID J. Malan: Could usa un do tempo? 713 00:31:51,728 --> 00:31:52,450 Resposta curta, non. 714 00:31:52,450 --> 00:31:54,700 Porque está a piques de introducir outro caso canto. 715 00:31:54,700 --> 00:31:56,660 Se a cadea é de lonxitude cero. 716 00:31:56,660 --> 00:31:59,600 Se, por exemplo, só bater Intro, sen nunca escribindo Zamyla. 717 00:31:59,600 --> 00:32:02,490 Vou entrega-lo de volta un real corda, como imos finalmente ver, 718 00:32:02,490 --> 00:32:03,780 que ten cero caracteres. 719 00:32:03,780 --> 00:32:05,630 Aínda é unha cadea, é só super curto. 720 00:32:05,630 --> 00:32:07,960 Pero se usa un do tempo, vai cegamente 721 00:32:07,960 --> 00:32:10,050 tentar facer algo con relación a esa secuencia, 722 00:32:10,050 --> 00:32:12,537 e nada vai estar alí. 723 00:32:12,537 --> 00:32:18,607 >> Audiencia: Ben, se fixo facer [inaudível] mentres s-- 724 00:32:18,607 --> 00:32:21,190 DAVID J. Malan: Ah, eu vexo, manter recibindo unha cadea de usuario. 725 00:32:21,190 --> 00:32:23,525 Resposta tan curta, ten podería, e manter importunando 726 00:32:23,525 --> 00:32:26,150 lles darlle unha cadea que se curta o suficiente para caber na memoria. 727 00:32:26,150 --> 00:32:26,700 Absolutamente. 728 00:32:26,700 --> 00:32:27,630 Eu só non quixo. 729 00:32:27,630 --> 00:32:30,505 No caso de que non me dan a secuencia I quere, eu vou desistir, eu vou desistir. 730 00:32:30,505 --> 00:32:33,260 Pero, absolutamente, para ese efecto, pode absolutamente facelo. 731 00:32:33,260 --> 00:32:37,500 >> Así, os ficheiros de cabeceira da biblioteca que agora estamos familiarizados con son estes, aquí. 732 00:32:37,500 --> 00:32:41,550 Defecto I / O, CS50.h, string.h, ctype.h, e hai, de feito, outros. 733 00:32:41,550 --> 00:32:44,460 Algúns de vós xa descubriron a biblioteca de matemáticas en math.h. 734 00:32:44,460 --> 00:32:48,200 Pero deixe-me presentar-lle, agora, a esta característica que o persoal CS50, Davin, 735 00:32:48,200 --> 00:32:50,630 e Rob, e Gabe especial teñen xuntos. 736 00:32:50,630 --> 00:32:52,630 Que en breve conexión en web do curso. 737 00:32:52,630 --> 00:32:54,870 Chámase CS50 referencia. 738 00:32:54,870 --> 00:32:58,230 >> Que só para darlle un rápido me gusta diso, funciona como segue. 739 00:32:58,230 --> 00:33:00,740 Déixeme ir reference.cs50.net. 740 00:33:00,740 --> 00:33:02,990 Vai ver na man esquerda o outro unha lista esmagadora 741 00:33:02,990 --> 00:33:04,595 de funcións que veñen con c. 742 00:33:04,595 --> 00:33:07,790 Pero se eu me importa, para o momento, sobre algo como strlen, 743 00:33:07,790 --> 00:33:08,746 I pode escriba-lo alí. 744 00:33:08,746 --> 00:33:10,870 El filtra a lista só o que me interesa. 745 00:33:10,870 --> 00:33:11,940 Vou prema nel. 746 00:33:11,940 --> 00:33:14,740 E agora sobre a esquerda, vai ver o que esperamos 747 00:33:14,740 --> 00:33:18,290 é un máis sinxelo, humano explicación agradable de como 748 00:33:18,290 --> 00:33:19,170 Esta función funciona. 749 00:33:19,170 --> 00:33:20,600 >> Devolve a lonxitude dunha corda. 750 00:33:20,600 --> 00:33:24,060 Aquí está un resumo, aquí está como usalo en termos de ficheiro de cabeceira, 751 00:33:24,060 --> 00:33:27,430 e en termos do que a función Parece que en termos de seus argumentos. 752 00:33:27,430 --> 00:33:30,250 E entón, aquí, os retorno a lonxitude dunha cadea. 753 00:33:30,250 --> 00:33:34,280 Pero para aqueles de vostedes máis cómodo, realmente pode facer clic máis cómodo, 754 00:33:34,280 --> 00:33:37,070 e os contidos desta páxina, agora, vai cambiar 755 00:33:37,070 --> 00:33:41,660 ser os valores por defecto do que comeza a usar a páxina home. 756 00:33:41,660 --> 00:33:44,100 >> Noutras palabras, CS50 referencia é unha simplificación 757 00:33:44,100 --> 00:33:46,220 de páxinas de manual polo equipo, para os alumnos. 758 00:33:46,220 --> 00:33:49,320 En particular, os menos cómodo e no medio, de xeito que 759 00:33:49,320 --> 00:33:51,660 Non ten que tentar envolve súa mente en torno, a verdade, 760 00:33:51,660 --> 00:33:55,030 algunha sintaxe críptica e documentación nalgún momento. 761 00:33:55,030 --> 00:33:57,650 >> Polo tanto, manter isto presente os días que virán. 762 00:33:57,650 --> 00:33:59,560 Entón, aquí, unha vez máis, é un Zamyla. 763 00:33:59,560 --> 00:34:03,255 Imos agora facer unha pregunta que é un pouco máis accesible humano. 764 00:34:03,255 --> 00:34:05,380 Grazas a Chang, que foi imprimir máis elefantes 765 00:34:05,380 --> 00:34:07,090 sen deixar durante os últimos días. 766 00:34:07,090 --> 00:34:09,730 Temos unha oportunidade de dar polo menos un deles de distancia. 767 00:34:09,730 --> 00:34:13,239 Se puidésemos obter só un voluntario que se aproximase a deseñar na pantalla. 768 00:34:13,239 --> 00:34:14,530 E aquí? 769 00:34:14,530 --> 00:34:15,340 >> Imos cara arriba. 770 00:34:15,340 --> 00:34:16,720 Cal é o seu nome? 771 00:34:16,720 --> 00:34:17,219 ALEX: Alex. 772 00:34:17,219 --> 00:34:17,760 DAVID J. Malan: Alex. 773 00:34:17,760 --> 00:34:18,259 Todo correcto. 774 00:34:18,259 --> 00:34:19,388 Alex, imos cara arriba. 775 00:34:19,388 --> 00:34:21,679 Estamos a piques de ver a súa escrita na pantalla aquí. 776 00:34:21,679 --> 00:34:24,325 777 00:34:24,325 --> 00:34:25,570 Todo ben, pracer de coñece-lo. 778 00:34:25,570 --> 00:34:26,429 >> ALEX: Nice coñece-lo. 779 00:34:26,429 --> 00:34:27,512 >> DAVID J. Malan: Todo ben. 780 00:34:27,512 --> 00:34:28,969 Así, o exercicio super sinxelo. 781 00:34:28,969 --> 00:34:31,440 Bar non é alta para obter un elefante hoxe. 782 00:34:31,440 --> 00:34:33,439 Está facendo o papel getString. 783 00:34:33,439 --> 00:34:35,980 E eu vou só dicirlle a secuencia de caracteres que chegou. 784 00:34:35,980 --> 00:34:38,080 E supoñamos que, getString, foron chamados. 785 00:34:38,080 --> 00:34:42,480 E o ser humano, como eu, ten escriba Zamyla, Z-A-H-Y-L-A. 786 00:34:42,480 --> 00:34:45,650 Só tes que ir adiante e escribir Zamyla no pantalla como se conseguise 787 00:34:45,650 --> 00:34:47,250 e almacenados en algún lugar na memoria. 788 00:34:47,250 --> 00:34:52,370 789 00:34:52,370 --> 00:34:55,570 >> Deixando espazo para o que vai ser varias outro palavras-- todo ben, continúe. 790 00:34:55,570 --> 00:34:59,620 >> [Risas] 791 00:34:59,620 --> 00:35:00,800 >> Entón Zamyla, excelente. 792 00:35:00,800 --> 00:35:04,880 Entón, supoña que, getString, son chamados de novo. 793 00:35:04,880 --> 00:35:09,350 E, polo tanto, eu lle proporcionar, no teclado, con outro nome, Belinda. 794 00:35:09,350 --> 00:35:17,560 795 00:35:17,560 --> 00:35:18,060 Todo correcto. 796 00:35:18,060 --> 00:35:22,380 E agora o getString próxima vez é chamado, eu escribir algo como Gabe, 797 00:35:22,380 --> 00:35:27,560 L-A-B-E. Realmente está tomando ao corazón de memoria de acceso aleatorio. 798 00:35:27,560 --> 00:35:29,631 Que está atraendo todo de forma totalmente aleatoria. 799 00:35:29,631 --> 00:35:30,130 Está ben. 800 00:35:30,130 --> 00:35:31,104 >> [Risas] 801 00:35:31,104 --> 00:35:32,520 ALEX: Sentímolo miña letra é malo. 802 00:35:32,520 --> 00:35:33,770 DAVID J. Malan: Non, iso é OK. 803 00:35:33,770 --> 00:35:40,480 E como sobre Rob, R-O-B. Está ben. 804 00:35:40,480 --> 00:35:41,020 Boa. 805 00:35:41,020 --> 00:35:43,853 Entón, eu non esperaba que sería tipo de poñer as cousas deste xeito. 806 00:35:43,853 --> 00:35:45,020 Pero podemos facer este traballo. 807 00:35:45,020 --> 00:35:48,810 Entón como é que vai facer sobre postura estes caracteres en memoria? 808 00:35:48,810 --> 00:35:51,310 Noutras palabras, se pensamos esta pantalla negra rectangular 809 00:35:51,310 --> 00:35:53,550 como representando un RAM, ou memoria do ordenador. 810 00:35:53,550 --> 00:35:55,850 >> E lembrar que a RAM é só unha morea de bytes, 811 00:35:55,850 --> 00:35:57,480 e bytes son unha morea de bits. 812 00:35:57,480 --> 00:35:59,350 E bits son de algunha maneira aplicado, xeralmente 813 00:35:59,350 --> 00:36:01,119 con algún tipo de electricidade en hardware. 814 00:36:01,119 --> 00:36:03,160 Entón, iso é unha especie de estratificación xa falamos sobre 815 00:36:03,160 --> 00:36:04,510 e agora pode tomar para concedida. 816 00:36:04,510 --> 00:36:07,020 Como é que vai facer sobre decidir onde escribir 817 00:36:07,020 --> 00:36:11,634 Rob contra Gabe contra Belinda contra Zamyla? 818 00:36:11,634 --> 00:36:14,020 >> ALEX: Eu só fixen iso no ordenar que me dixo. 819 00:36:14,020 --> 00:36:15,650 >> DAVID J. Malan: E iso é verdade. 820 00:36:15,650 --> 00:36:20,100 Pero o que rexe onde se pon O nome de Belinda eo nome de Gabe? 821 00:36:20,100 --> 00:36:20,764 >> ALEX: Nada? 822 00:36:20,764 --> 00:36:22,930 DAVID J. Malan: [Risas] Así que funciona, iso é bo. 823 00:36:22,930 --> 00:36:25,290 Así, os ordenadores son pouco máis ordenada que iso. 824 00:36:25,290 --> 00:36:29,000 E así cando implement-- estar alí por só un moment-- cando nós realmente 825 00:36:29,000 --> 00:36:31,470 aplicar algo como getString nun ordenador, 826 00:36:31,470 --> 00:36:34,480 Zamyla pode ser instalado para fóra practicamente como fixo na pantalla, non. 827 00:36:34,480 --> 00:36:36,660 >> E o que é fundamental para entender aquí, o Alex fixo, 828 00:36:36,660 --> 00:36:40,260 é que hai unha especie de delimitación entre cada unha destas palabras, non? 829 00:36:40,260 --> 00:36:46,580 Non escribiu Z-A-H-Y-L-A-B-E-L-I-N-D-A-L-A-B-- 830 00:36:46,580 --> 00:36:49,740 noutras palabras, hai algún tipo de delimitación que parece ser, 831 00:36:49,740 --> 00:36:52,370 dalgunha forma, paso chou entre estas varias palabras. 832 00:36:52,370 --> 00:36:54,120 Pero iso é bo, porque nós, humanos, podemos agora 833 00:36:54,120 --> 00:36:56,470 ver que estes son catro cordas diferentes. 834 00:36:56,470 --> 00:36:59,540 Non é só unha secuencia de moitos personaxes. 835 00:36:59,540 --> 00:37:04,190 Así, un ordenador, entón, mentres tanto, pode ter unha cadea como Zamyla, 836 00:37:04,190 --> 00:37:07,220 que cada unha desas cartas dentro dun byte de memoria. 837 00:37:07,220 --> 00:37:10,400 Pero ese número é moito maior, claro, que seis caracteres. 838 00:37:10,400 --> 00:37:11,690 >> Hai unha morea de RAM. 839 00:37:11,690 --> 00:37:15,330 E así, a partir de agora, este reixa de caixas vai 840 00:37:15,330 --> 00:37:17,560 para representar o que Alex só fixen aquí en pantalla. 841 00:37:17,560 --> 00:37:20,937 E agora, Alex, podemos ofrecer-lle un azul ou un elefante laranxa de Chang. 842 00:37:20,937 --> 00:37:22,270 ALEX: Vou levar un elefante azul. 843 00:37:22,270 --> 00:37:23,120 DAVID J. Malan: Un elefante azul. 844 00:37:23,120 --> 00:37:25,580 Así, unha gran salva de palmas, se puidésemos, por Alex aquí. 845 00:37:25,580 --> 00:37:26,100 >> [Aplausos] 846 00:37:26,100 --> 00:37:26,766 >> ALEX: Grazas. 847 00:37:26,766 --> 00:37:28,820 DAVID J. Malan: Grazas. 848 00:37:28,820 --> 00:37:36,230 Entón, o que é estaladiça, moi aínda que o estándar medio que cambiou co paso do tempo, aquí 849 00:37:36,230 --> 00:37:40,430 na tarxeta, había un delimitación entre as distintas cadeas 850 00:37:40,430 --> 00:37:42,610 que Alex ten para nós. 851 00:37:42,610 --> 00:37:45,230 Agora, os ordenadores, a verdade, podería facer o mesmo. 852 00:37:45,230 --> 00:37:48,210 Poderían tipo de chape cordas en calquera lugar na RAM. 853 00:37:48,210 --> 00:37:50,710 Ata aquí, aquí, aquí en baixo, aquí abaixo. 854 00:37:50,710 --> 00:37:52,020 >> Poderían facer exactamente isto. 855 00:37:52,020 --> 00:37:54,280 Pero, por suposto, iso é probablemente non o mellor planificación. 856 00:37:54,280 --> 00:37:54,780 Correcto? 857 00:37:54,780 --> 00:37:57,340 Se eu ficaba pregunta para Alex obter nomes, probablemente tiña 858 00:37:57,340 --> 00:38:01,370 poñer un pouco máis aquí, quizais ata aquí, aquí, aquí, finalmente, 859 00:38:01,370 --> 00:38:02,211 aquí. 860 00:38:02,211 --> 00:38:05,460 Pero cun pouco máis de planificación, por suposto, poderiamos poñer as cousas de forma máis limpa. 861 00:38:05,460 --> 00:38:07,350 E, de feito, é o que un ordenador fai. 862 00:38:07,350 --> 00:38:10,720 >> Pero o problema é que se a seguinte secuencia de chegar 863 00:38:10,720 --> 00:38:14,050 despois Zamyla é algo como a Belinda, 864 00:38:14,050 --> 00:38:17,929 propoñer onde podemos escribir a letra b con relación a esta rede? 865 00:38:17,929 --> 00:38:18,720 Para onde ía? 866 00:38:18,720 --> 00:38:21,480 Para a dereita da un, baixo a z, a continuación a un? 867 00:38:21,480 --> 00:38:23,204 Cales serían os seus primeiros instintos ser? 868 00:38:23,204 --> 00:38:24,120 Audiencia: Abaixo a z. 869 00:38:24,120 --> 00:38:25,100 DAVID J. Malan: Entón, baixo a z. 870 00:38:25,100 --> 00:38:26,530 E iso é moi simple, non? 871 00:38:26,530 --> 00:38:29,321 É unha especie de puro, que é o que facemos nun teclado cando teclear Intro, 872 00:38:29,321 --> 00:38:31,770 ou unha mensaxe ao facer unha lista con viñetas das cousas. 873 00:38:31,770 --> 00:38:34,310 Pero a realidade é que os ordenadores proba ser máis eficiente, 874 00:38:34,310 --> 00:38:37,170 e empinar seguro tanto datos na memoria RAM como sexa posible, 875 00:38:37,170 --> 00:38:38,890 para que non perda ningún bytes. 876 00:38:38,890 --> 00:38:41,545 Para que non perda calquera inmoble pantalla. 877 00:38:41,545 --> 00:38:44,170 E o problema, con todo, é que se, literalmente, poñer a letra 878 00:38:44,170 --> 00:38:49,940 b tras un, como é que imos sabe onde o nome Zamyla remata 879 00:38:49,940 --> 00:38:51,840 eo nome da Belinda comeza? 880 00:38:51,840 --> 00:38:55,270 Entón, vostedes humanos só proposto, así, prema a tecla Intro, esencialmente. 881 00:38:55,270 --> 00:38:56,410 Pon-o a continuación. 882 00:38:56,410 --> 00:38:59,750 Ou incluso como Alex fixo, pode comezar a escribir o seguinte nome baixo do anterior, 883 00:38:59,750 --> 00:39:01,583 e baixo que un, e logo abaixo desa. 884 00:39:01,583 --> 00:39:02,510 Isto é un sinal visual. 885 00:39:02,510 --> 00:39:05,960 >> Os ordenadores teñen outra suxestión visual, pero é un pouco máis sucinto. 886 00:39:05,960 --> 00:39:07,840 É ese personaxe mal-cheiroso. 887 00:39:07,840 --> 00:39:11,890 0 barra invertida, o que é posible reminiscencia barra invertida n, 888 00:39:11,890 --> 00:39:12,640 e así por diante, agora. 889 00:39:12,640 --> 00:39:14,120 As secuencias de escape especiais. 890 00:39:14,120 --> 00:39:19,120 Barra invertida 0 é o camiño da representando oito bits cero nunha fileira. 891 00:39:19,120 --> 00:39:22,000 0000 0000. 892 00:39:22,000 --> 00:39:26,130 >> O xeito como expresar que non é alcanzou o número cero no teclado, 893 00:39:26,130 --> 00:39:28,140 Porque, de feito, que é un carbón ASCII. 894 00:39:28,140 --> 00:39:30,990 Parece un número, pero é, en realidade, un número decimal 895 00:39:30,990 --> 00:39:35,910 que representa a circular glifo, a fonte circular. 896 00:39:35,910 --> 00:39:38,410 Mentres tanto, a barra invertida cero significa literalmente 897 00:39:38,410 --> 00:39:40,700 poñer oito bytes cero aquí para min. 898 00:39:40,700 --> 00:39:42,136 >> Polo tanto, este é un tanto arbitraria. 899 00:39:42,136 --> 00:39:44,260 Poderiamos usar calquera defecto de bits, pero o mundo 900 00:39:44,260 --> 00:39:46,610 decidiu algúns anos atrás, que, para representar 901 00:39:46,610 --> 00:39:49,710 o extremo dunha corda na memoria, só tes que poñer unha morea de ceros. 902 00:39:49,710 --> 00:39:51,000 Como podemos detectar iso. 903 00:39:51,000 --> 00:39:54,790 Agora, o que significa que ningunha carta do alfabeto poden ser representados por ceros. 904 00:39:54,790 --> 00:39:58,480 >> Pero todo ben, xa vimos que estamos usando 65 en en 97 enriba. 905 00:39:58,480 --> 00:40:00,290 Non chegar a sitio ningún Preto de todos os ceros. 906 00:40:00,290 --> 00:40:03,040 907 00:40:03,040 --> 00:40:06,540 Entón Belinda na memoria dun ordenador está realmente indo a ir máis alá. 908 00:40:06,540 --> 00:40:09,764 Eu deseñei el en amarelo só para chamar a atención a el. 909 00:40:09,764 --> 00:40:11,680 E noten, tamén, este é totalmente arbitraria. 910 00:40:11,680 --> 00:40:12,680 Eu deseñei-a como unha reixa. 911 00:40:12,680 --> 00:40:14,460 Como, RAM é só un obxecto físico. 912 00:40:14,460 --> 00:40:17,300 Non ten necesariamente liñas e columnas, de per si. 913 00:40:17,300 --> 00:40:20,490 El só ten unha morea de bytes aplicado en hardware de algunha maneira. 914 00:40:20,490 --> 00:40:22,817 Pero se despois Belinda I ingresaran no nome de Gabe, 915 00:40:22,817 --> 00:40:25,650 vai acabar aquí na memoria, e se eu escriba o nome de Daven, 916 00:40:25,650 --> 00:40:27,316 por exemplo, que vai acabar por aquí. 917 00:40:27,316 --> 00:40:29,310 E podo seguir escribir aínda máis nomes. 918 00:40:29,310 --> 00:40:32,100 >> Desafortunadamente, se eu tentar escribir unha super longo nome, 919 00:40:32,100 --> 00:40:33,730 Podería, finalmente, quedar sen memoria. 920 00:40:33,730 --> 00:40:37,810 Neste caso, é getString devolverá NULL, como dixemos. 921 00:40:37,810 --> 00:40:41,720 Pero, por sorte, polo menos neste visuais aquí, non podemos tan lonxe. 922 00:40:41,720 --> 00:40:45,860 >> Agora, o que é bo é que esta idea xeral de tratar as cousas 923 00:40:45,860 --> 00:40:49,720 como en caixas é representativo dunha característica de C 924 00:40:49,720 --> 00:40:52,690 e unha morea de linguas, coñecida como unha matriz. 925 00:40:52,690 --> 00:40:55,490 Un array é outro tipo de datos. 926 00:40:55,490 --> 00:40:57,380 É unha estrutura de datos, se quere. 927 00:40:57,380 --> 00:41:01,160 Estrutura, no sentido de que, realmente, tipo de, parecendo unha caixa, polo menos 928 00:41:01,160 --> 00:41:02,320 no ollo da súa mente. 929 00:41:02,320 --> 00:41:09,680 Unha matriz é un contiguo secuencia de tipos de datos idénticos, 930 00:41:09,680 --> 00:41:11,330 volta atrás a volta atrás. 931 00:41:11,330 --> 00:41:14,720 >> Así, unha corda, noutro palabras, é unha matriz de caracteres. 932 00:41:14,720 --> 00:41:16,120 Unha matriz de caracteres. 933 00:41:16,120 --> 00:41:19,070 Pero acontece que pode ter matrices de acios de cousas. 934 00:41:19,070 --> 00:41:21,870 De feito, podemos poñer aínda os números nunha matriz. 935 00:41:21,870 --> 00:41:23,920 Así, a forma na que imos comezar 936 00:41:23,920 --> 00:41:26,590 declarar eses datos estrutura coñecida como unha matriz 937 00:41:26,590 --> 00:41:28,250 Tamén vai usar corchetes. 938 00:41:28,250 --> 00:41:31,500 Pero estes corchetes van teñen un significado diferente neste contexto. 939 00:41:31,500 --> 00:41:33,450 >> E imos ver como segue. 940 00:41:33,450 --> 00:41:36,780 Supoña que abrín -se aquí un novo ficheiro. 941 00:41:36,780 --> 00:41:38,535 E eu salve como ages.c. 942 00:41:38,535 --> 00:41:41,280 943 00:41:41,280 --> 00:41:43,470 E eu vou gardar iso na miña carpeta aquí. 944 00:41:43,470 --> 00:41:46,130 E agora eu estou indo para adiante e comezar a escribir algo 945 00:41:46,130 --> 00:41:53,940 como incluír CS50.h inclúen stdio.h, int void main. 946 00:41:53,940 --> 00:41:57,370 E entón, aquí dentro, quero a primeira ten un int chamado idade. 947 00:41:57,370 --> 00:42:01,371 >> E eu vou usar isto para obter un int do usuario para a súa idade. 948 00:42:01,371 --> 00:42:04,620 Pero este programa destinado a ser usado por varias persoas, por calquera contexto. 949 00:42:04,620 --> 00:42:05,490 Teño unha fila de persoas. 950 00:42:05,490 --> 00:42:08,281 Todos eles teñen que escribir a súa idade para quizais algúns, eu non sei, 951 00:42:08,281 --> 00:42:10,530 competición ou evento que chegaron a. 952 00:42:10,530 --> 00:42:13,030 Polo tanto, a seguinte persoa, eu teño outra variable. 953 00:42:13,030 --> 00:42:15,790 >> Porque se eu só fago idade queda getInt, iso é 954 00:42:15,790 --> 00:42:18,500 vai espancar, ou substituír a idade da persoa anterior. 955 00:42:18,500 --> 00:42:19,760 Entón, iso non é bo. 956 00:42:19,760 --> 00:42:21,790 Entón, o meu primeiro instinto se pode, oh, todo ben, 957 00:42:21,790 --> 00:42:26,260 se eu queira obter varias persoas da ages-- imos chamar este idade1, 958 00:42:26,260 --> 00:42:31,280 int age2 recibe int, int idade3 recibe getInt. 959 00:42:31,280 --> 00:42:35,340 E agora eu vou usar algún código pseudocódigo aquí. 960 00:42:35,340 --> 00:42:37,679 >> Fai algo con eses números. 961 00:42:37,679 --> 00:42:40,470 Imos deixar para outro día o que estamos facendo alí, porque nós só 962 00:42:40,470 --> 00:42:44,200 coidado co momento uns idade1, idade2, idade3. 963 00:42:44,200 --> 00:42:46,450 Desafortunadamente, xa que eu compilar este programa 964 00:42:46,450 --> 00:42:51,140 e poñelas diante de usuarios reais, cal é a mala concepción fundamentalmente 965 00:42:51,140 --> 00:42:53,890 decisión que parece ter feito? 966 00:42:53,890 --> 00:42:54,624 Si? 967 00:42:54,624 --> 00:42:55,499 Audiencia: [inaudível] 968 00:42:55,499 --> 00:42:58,071 969 00:42:58,071 --> 00:42:59,820 DAVID J. Malan: Si, Eu nin sequera tente 970 00:42:59,820 --> 00:43:02,028 para descubrir como moitas idades realmente se preocupan? 971 00:43:02,028 --> 00:43:05,380 Se eu tivera menos de tres persoas aquí, e, polo tanto, menos de tres séculos, 972 00:43:05,380 --> 00:43:07,260 Eu aínda estou esperando cegamente tres. 973 00:43:07,260 --> 00:43:08,720 Deus me libre catro persoas aparecen. 974 00:43:08,720 --> 00:43:10,990 O meu programa só non vai mesmo apoia-los. 975 00:43:10,990 --> 00:43:13,280 >> E así, este, longa historia En resumo, non é un bo hábito. 976 00:43:13,280 --> 00:43:13,780 Correcto? 977 00:43:13,780 --> 00:43:16,530 Estaba esencialmente copiar e pegando o código e só axustes 978 00:43:16,530 --> 00:43:17,430 os nomes das variables. 979 00:43:17,430 --> 00:43:22,410 E, meu Deus, se tivese, non tres as idades, pero 10, ou 100, ou 6500 980 00:43:22,410 --> 00:43:23,820 alumnos de graduación, por exemplo. 981 00:43:23,820 --> 00:43:26,950 Isto non vai ser especialmente código elegante, é sostible. 982 00:43:26,950 --> 00:43:29,200 Terá que reescribir o programa de cada vez 983 00:43:29,200 --> 00:43:30,760 o número de persoas cambia. 984 00:43:30,760 --> 00:43:35,090 >> Entón, por sorte, no noso actual arquivo ages.c para hoxe, 985 00:43:35,090 --> 00:43:36,970 temos unha solución máis intelixente. 986 00:43:36,970 --> 00:43:39,800 En primeiro lugar, eu vou pedir o construír usan algunhas veces, 987 00:43:39,800 --> 00:43:43,744 facede isto mentres loop, a fin de obter o número de persoas na sala. 988 00:43:43,744 --> 00:43:46,910 Eu estou indo só para molestar ao usuario, unha vez máis e outra vez, ata que el ou ela me dá 989 00:43:46,910 --> 00:43:49,260 un valor de n é un enteiro positivo. 990 00:43:49,260 --> 00:43:51,590 >> Podería usar, última tempo de obter int positivo. 991 00:43:51,590 --> 00:43:53,720 Pero non hai que sexa real, entón eu fun adiante 992 00:43:53,720 --> 00:43:55,660 e está implementada esta idea. 993 00:43:55,660 --> 00:43:58,410 Agora aquí, este é o novo truco. 994 00:43:58,410 --> 00:44:02,260 Na liña 27, como os comentarios na liña 26 indica, 995 00:44:02,260 --> 00:44:05,180 declarar unha matriz en que para almacenar a idade de todos. 996 00:44:05,180 --> 00:44:09,320 >> Entón, se quere obter, e non un int, non dúas interrupcións, pero todo un conxunto de enteiros. 997 00:44:09,320 --> 00:44:13,800 Especificamente n enteiros, eran n pode ser tres, pode ser 100, pode ser 1000. 998 00:44:13,800 --> 00:44:17,570 A sintaxe, moi simplemente, é a por exemplo, o tipo de datos que quere? 999 00:44:17,570 --> 00:44:19,620 O que quere chamar que pedazo de memoria? 1000 00:44:19,620 --> 00:44:23,530 O que quere chamar a reixa que se parece iso pictoricamente? 1001 00:44:23,530 --> 00:44:27,700 >> E entre parénteses aquí, di como gran quere a matriz para ser. 1002 00:44:27,700 --> 00:44:30,450 E así, máis cedo, cando dixo que o sintaxe é un pouco diferente aquí, 1003 00:44:30,450 --> 00:44:33,614 aínda estamos usando corchetes, pero cando estou declarando unha matriz, 1004 00:44:33,614 --> 00:44:35,530 o número dentro do corchetes medios 1005 00:44:35,530 --> 00:44:37,610 Cal é o tamaño que quere que o conxunto estar. 1006 00:44:37,610 --> 00:44:42,490 >> Por outra banda, cando estabamos usando s soporte de i hai pouco, s, unha cadea, 1007 00:44:42,490 --> 00:44:46,820 é de feito unha matriz de caracteres, pero cando non está declarando unha variable, 1008 00:44:46,820 --> 00:44:49,760 como aquí con esta palabra clave, está simplemente recibindo 1009 00:44:49,760 --> 00:44:54,280 un índice específico, un específico elemento desa matriz. 1010 00:44:54,280 --> 00:44:57,090 Xa que coñecemos, o resto iso é simple. 1011 00:44:57,090 --> 00:45:00,765 Se o novo Vou primeiro para imprimir cal é a idade da persoa número i. 1012 00:45:00,765 --> 00:45:03,890 Onde eu acabo de dicir número un persoa, persoa número dous, número tres persoa. 1013 00:45:03,890 --> 00:45:06,306 >> E eu só estou facendo aritmética, de xeito que, como persoas normais, 1014 00:45:06,306 --> 00:45:09,030 contamos desde un a este programa, e non a partir de cero. 1015 00:45:09,030 --> 00:45:13,620 Entón eu chamo getInt, pero eu gardar a resposta en idades adaptador. 1016 00:45:13,620 --> 00:45:16,610 Cal é o i-ésimo idade na matriz. 1017 00:45:16,610 --> 00:45:21,640 Así, mentres última vez que estaban tratando esas caixas como caracteres para o nome de Zamyla, 1018 00:45:21,640 --> 00:45:22,490 e outros. 1019 00:45:22,490 --> 00:45:26,530 Agora, estas caixas representan 32 bits, ou catro bytes 1020 00:45:26,530 --> 00:45:29,510 no que podemos almacenar un int, int, int. 1021 00:45:29,510 --> 00:45:31,890 Todos os cales, de novo, son o mesmo tipo de datos. 1022 00:45:31,890 --> 00:45:33,890 >> Agora fago algo parvo, como o tempo pasa, só 1023 00:45:33,890 --> 00:45:35,510 para xustificar a escribir este programa. 1024 00:45:35,510 --> 00:45:40,050 E entón aquí en baixo, volvo a iteración sobre a matriz dicindo aquí a un ano, 1025 00:45:40,050 --> 00:45:43,090 persoa número un testamento ser algo anos de idade. 1026 00:45:43,090 --> 00:45:45,010 E para descubrir o que math-- É dicir, isto 1027 00:45:45,010 --> 00:45:49,260 non é moi complicado arithmetic-- Acaba de engadir un para a súa idade. 1028 00:45:49,260 --> 00:45:51,240 Só demostrar, unha vez máis, este. 1029 00:45:51,240 --> 00:45:57,910 >> Así como podo índice nunha secuencia, s, para que eu poida índice nunha matriz de idades, 1030 00:45:57,910 --> 00:45:59,950 así hai. 1031 00:45:59,950 --> 00:46:03,340 Entón, onde é que isto vai ser nos levando? 1032 00:46:03,340 --> 00:46:07,070 Entón, imos ver, en definitiva, unha Algunhas cousas nos días que virán. 1033 00:46:07,070 --> 00:46:09,510 Un deles, de todo este tempo, cando escribir os seus propios programas, 1034 00:46:09,510 --> 00:46:11,239 como Mario, ganancioso, de crédito. 1035 00:46:11,239 --> 00:46:13,780 Foi a escribir o nome o programa e prema Intro. 1036 00:46:13,780 --> 00:46:15,610 E a continuación, obter a entrada do usuario. 1037 00:46:15,610 --> 00:46:18,137 >> Con getString, getInt, getLongLong, ou similares. 1038 00:46:18,137 --> 00:46:20,720 Pero resulta que os soportes C algo chamado de liña de comandos 1039 00:46:20,720 --> 00:46:25,740 argumentos, que vai deixarnos realmente chegar ao escoitar as palabras que escribe, 1040 00:46:25,740 --> 00:46:28,570 na liña piscando, despois do nome do seu programa. 1041 00:46:28,570 --> 00:46:31,430 >> Así, os días que virán, ten pode escribir algo como César, 1042 00:46:31,430 --> 00:46:34,950 ou ./caesar número 13, a partir de aí. 1043 00:46:34,950 --> 00:46:36,070 A ver como funciona isto. 1044 00:46:36,070 --> 00:46:37,550 Porque, de feito, en conxunto de problemas dous, estamos 1045 00:46:37,550 --> 00:46:39,383 vai presenta-lo para peixe 1046 00:46:39,383 --> 00:46:42,360 reminiscencia Ralphie de desafiar antes da cartografía. 1047 00:46:42,360 --> 00:46:43,970 A arte de codificación de información. 1048 00:46:43,970 --> 00:46:46,660 Isto, de feito, é moi recorda o que Ralphie fixo. 1049 00:46:46,660 --> 00:46:51,380 >> Este é un exemplo dunha codificación chamado algoritmo rot13, R-S-T 13. 1050 00:46:51,380 --> 00:46:54,910 Que significa simplemente virar o letras do alfabeto 13 lugares. 1051 00:46:54,910 --> 00:46:58,309 E se fai iso, vai ver agora o que é, quizais, unha frase familiar. 1052 00:46:58,309 --> 00:47:01,100 Pero o xeito no que imos utilizar isto, en última instancia, é unha forma máis xeral. 1053 00:47:01,100 --> 00:47:04,390 >> En I definir dous, na edición estándar, vai aplicar un par de cifras, 1054 00:47:04,390 --> 00:47:06,720 un chamado César, un chamado Vigenère. 1055 00:47:06,720 --> 00:47:10,090 Ambos son rotacional cifras, en que dalgún xeito 1056 00:47:10,090 --> 00:47:11,826 transformar unha letra en letra diferente. 1057 00:47:11,826 --> 00:47:12,950 E César é super sinxelo. 1058 00:47:12,950 --> 00:47:16,220 Podes engadir un, engade 13, ou algún número ata 26. 1059 00:47:16,220 --> 00:47:19,570 Vigenère fai iso en unha base por carta. 1060 00:47:19,570 --> 00:47:22,140 Entón Vigenère, como podes ver na especificación, é máis seguro. 1061 00:47:22,140 --> 00:47:24,973 >> Con todo, ao final do día, o que estará aplicando e P axustar dous, 1062 00:47:24,973 --> 00:47:29,050 é a clave que use tanto para cifrado e descifrado. 1063 00:47:29,050 --> 00:47:32,160 Refírese ao proceso de converter texto, algunha mensaxe orixinal, 1064 00:47:32,160 --> 00:47:34,490 en texto cifra, que é algo encriptado. 1065 00:47:34,490 --> 00:47:36,220 E despois decodifica-los de novo. 1066 00:47:36,220 --> 00:47:38,119 >> Na edición de hacker Mentres tanto, estará 1067 00:47:38,119 --> 00:47:40,660 encargado de algo semellante en espírito, onde nós imos dar-lle 1068 00:47:40,660 --> 00:47:44,610 un ficheiro, a partir dun Linux típico, é Mac, Unix ou ordenador chamado Etsy 1069 00:47:44,610 --> 00:47:47,800 contrasinal, o cal contén un conxunto banda de nomes de usuarios e contrasinais. 1070 00:47:47,800 --> 00:47:50,932 E os contrasinais teñen todo foron cifrados, ou hash, 1071 00:47:50,932 --> 00:47:53,140 por así dicir, máis propiamente como podes ver na spec. 1072 00:47:53,140 --> 00:47:57,090 >> E a edición hacker vai desafiar vós, sendo unha entrada como esta, 1073 00:47:57,090 --> 00:47:58,800 e romper o contrasinal. 1074 00:47:58,800 --> 00:48:02,590 Ou sexa, descubrir o que o contrasinal do ser humano, en realidade, era. 1075 00:48:02,590 --> 00:48:05,570 Porque, de feito, os contrasinais son xeralmente non son almacenados en claro, 1076 00:48:05,570 --> 00:48:08,260 e, xeralmente, os contrasinais debe ser difícil de adiviñar. 1077 00:48:08,260 --> 00:48:09,610 Isto non é frecuentemente o caso. 1078 00:48:09,610 --> 00:48:12,110 >> E o que eu penso que ía facer é Conclúo con un par de minutos 1079 00:48:12,110 --> 00:48:15,160 ollar para un particular mala elección de contrasinais 1080 00:48:15,160 --> 00:48:17,260 desde unha película que ten que se lembrar con cariño. 1081 00:48:17,260 --> 00:48:18,915 E se non, ten que alugar. 1082 00:48:18,915 --> 00:48:20,070 >> [REPRODUCIÓN] 1083 00:48:20,070 --> 00:48:22,320 >> -Helmet, Vostede diaño, o que está pasando? 1084 00:48:22,320 --> 00:48:24,240 O que está facendo a miña filla? 1085 00:48:24,240 --> 00:48:28,010 >> -permitir-Me envíe a brillante cirurxián plástico novo, 1086 00:48:28,010 --> 00:48:30,010 Doutor Phillip Schlotkin. 1087 00:48:30,010 --> 00:48:35,020 O maior nariz do home no traballo universo e Beverly Hills. 1088 00:48:35,020 --> 00:48:36,140 >> -O Seu Alteza. 1089 00:48:36,140 --> 00:48:36,820 >> Traballo -Nose? 1090 00:48:36,820 --> 00:48:37,700 Eu non entendín. 1091 00:48:37,700 --> 00:48:39,070 Ela xa tiña unha plástica no nariz. 1092 00:48:39,070 --> 00:48:40,800 Era o seu doce 16 agasallos. 1093 00:48:40,800 --> 00:48:42,590 >> Non, non é o que pensa. 1094 00:48:42,590 --> 00:48:44,490 É moi, moito peor. 1095 00:48:44,490 --> 00:48:48,160 Se non me der o combinación co escudo de aire, 1096 00:48:48,160 --> 00:48:52,748 médico Schlotkin vai dar o seu filla de volta o seu antigo nariz. 1097 00:48:52,748 --> 00:48:53,748 - [Suspiros] Nooooooooooooo. 1098 00:48:53,748 --> 00:48:57,684 1099 00:48:57,684 --> 00:48:59,652 Onde conseguiu iso? 1100 00:48:59,652 --> 00:49:00,640 >> -Certo. 1101 00:49:00,640 --> 00:49:02,506 Eu vou che dicir, eu vou dicir. 1102 00:49:02,506 --> 00:49:03,498 >> Non, papá, non. 1103 00:49:03,498 --> 00:49:04,490 Non debe. 1104 00:49:04,490 --> 00:49:06,090 >> -Vostede Dereito meu caro. 1105 00:49:06,090 --> 00:49:07,390 Vou sentir falta da súa nova nariz. 1106 00:49:07,390 --> 00:49:10,990 Pero eu non vou dicir-lles o combinación non importa o que. 1107 00:49:10,990 --> 00:49:12,450 >> -Moi Ben. 1108 00:49:12,450 --> 00:49:14,830 Doutor Schlotkin, faga o peor. 1109 00:49:14,830 --> 00:49:15,744 >> O pracer é meu. 1110 00:49:15,744 --> 00:49:19,860 1111 00:49:19,860 --> 00:49:20,800 >> Non! 1112 00:49:20,800 --> 00:49:22,780 Espere, espere. 1113 00:49:22,780 --> 00:49:24,000 Eu vou che dicir. 1114 00:49:24,000 --> 00:49:25,830 Eu vou che dicir. 1115 00:49:25,830 --> 00:49:28,270 >> Sabía que ía traballar. 1116 00:49:28,270 --> 00:49:31,390 Todo ben, deixa para min. 1117 00:49:31,390 --> 00:49:36,220 >> -The Combinación é un deles. 1118 00:49:36,220 --> 00:49:36,740 >> -One. 1119 00:49:36,740 --> 00:49:37,473 >> -One. 1120 00:49:37,473 --> 00:49:37,972 -Dous. 1121 00:49:37,972 --> 00:49:38,471 -Dous. 1122 00:49:38,471 --> 00:49:39,800 -Dous. 1123 00:49:39,800 --> 00:49:40,300 -Tres. 1124 00:49:40,300 --> 00:49:40,800 -Tres. 1125 00:49:40,800 --> 00:49:41,800 -Tres. 1126 00:49:41,800 --> 00:49:42,300 -Quatro. 1127 00:49:42,300 --> 00:49:42,800 -Quatro. 1128 00:49:42,800 --> 00:49:44,707 -Quatro. 1129 00:49:44,707 --> 00:49:45,521 -Cinco. 1130 00:49:45,521 --> 00:49:46,430 -Cinco. 1131 00:49:46,430 --> 00:49:47,930 -Cinco. 1132 00:49:47,930 --> 00:49:53,480 Entón A combinación é un, dous, tres, catro, cinco. 1133 00:49:53,480 --> 00:49:56,140 Esta é a combinación máis estúpida Eu xa oín na miña vida. 1134 00:49:56,140 --> 00:49:58,640 Ese é o tipo de cousas que un idiota tería na súa equipaxe. 1135 00:49:58,640 --> 00:50:00,000 >> Grazas, a súa Alteza. 1136 00:50:00,000 --> 00:50:01,340 >> [Click Remote] 1137 00:50:01,340 --> 00:50:02,450 >> -Cal Que fixeches? 1138 00:50:02,450 --> 00:50:03,800 >> I Desactivado do muro. 1139 00:50:03,800 --> 00:50:05,010 >> Non, non fixo, ten desconectada todo o filme. 1140 00:50:05,010 --> 00:50:06,220 >> Debe I apertou o botón errado. 1141 00:50:06,220 --> 00:50:07,064 >> Ben, poñelas de novo! 1142 00:50:07,064 --> 00:50:07,910 Pon a película de volta! 1143 00:50:07,910 --> 00:50:08,300 >> Si, señor! 1144 00:50:08,300 --> 00:50:08,799 Si, señor. 1145 00:50:08,799 --> 00:50:09,660 -Imos, Arnold. 1146 00:50:09,660 --> 00:50:10,450 Veña, Gretchen. 1147 00:50:10,450 --> 00:50:12,533 Claro que vostede sabe que eu vou ten que cobre-lo por iso. 1148 00:50:12,533 --> 00:50:16,720 1149 00:50:16,720 --> 00:50:17,220 Ben? 1150 00:50:17,220 --> 00:50:17,802 Será que isto funciona? 1151 00:50:17,802 --> 00:50:18,510 Onde está o rei? 1152 00:50:18,510 --> 00:50:20,218 >> -It Traballou, señor, teñen a combinación. 1153 00:50:20,218 --> 00:50:20,740 -Gran. 1154 00:50:20,740 --> 00:50:24,810 Agora podemos tomar cada último suspiro de aire fresco do planeta Druidia. 1155 00:50:24,810 --> 00:50:25,890 Cal é a combinación? 1156 00:50:25,890 --> 00:50:28,155 >> Un, dous, tres, catro, cinco. 1157 00:50:28,155 --> 00:50:29,890 >> Un, dous, tres, catro, cinco? 1158 00:50:29,890 --> 00:50:30,390 Si. 1159 00:50:30,390 --> 00:50:31,110 -É Incrible. 1160 00:50:31,110 --> 00:50:34,550 Eu teño o mesmo combinación na miña equipaxe. 1161 00:50:34,550 --> 00:50:37,160 Prepare Spaceball 1 para partida inmediata. 1162 00:50:37,160 --> 00:50:38,160 >> Si, señor. 1163 00:50:38,160 --> 00:50:40,745 >> -E Cambiar o combinación na miña equipaxe. 1164 00:50:40,745 --> 00:50:41,578 [Peche do porto SOUND] 1165 00:50:41,578 --> 00:50:42,064 [Clinker de portas CASCO QUE BATE] 1166 00:50:42,064 --> 00:50:42,550 -Ahh. 1167 00:50:42,550 --> 00:50:43,383 [FIN REPRODUCIÓN DE VIDEO] 1168 00:50:43,383 --> 00:50:46,700 DAVID J. Malan: Isto é todo para CS50, imos velo a próxima semana. 1169 00:50:46,700 --> 00:50:49,883 Narrador: E agora, Profundo Pensamentos, por Daven Farnham. 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> Daven FARNHAM: Codificación en C é moito máis difícil do que cero. 1172 00:50:55,860 --> 00:50:57,320 printf, risco era unha mentira. 1173 00:50:57,320 --> 00:50:59,930 1174 00:50:59,930 --> 00:51:01,430 >> [Risas SoundBite] 1175 00:51:01,430 --> 00:51:02,486