1 00:00:00,000 --> 00:00:00,980 2 00:00:00,980 --> 00:00:04,410 >> [REPRODUCCIÓ DE MÚSICA] 3 00:00:04,410 --> 00:00:11,147 4 00:00:11,147 --> 00:00:12,230 DAVID J. Malan: Molt bé. 5 00:00:12,230 --> 00:00:16,440 Això és CS50, i això és el final de la Setmana 2. 6 00:00:16,440 --> 00:00:18,480 Així que avui, anem per continuar la nostra mirada 7 00:00:18,480 --> 00:00:21,150 la forma en què representem les coses sota de la hood-- allunyant 8 00:00:21,150 --> 00:00:23,520 de nombres com nombres enters i valors de punt flotant 9 00:00:23,520 --> 00:00:26,810 i se centra en les cadenes i programes en última instància, més interessants. 10 00:00:26,810 --> 00:00:30,140 Però també anem a fer una ullada a un parell de problemes-- de domini específic 11 00:00:30,140 --> 00:00:33,620 la primera de les quals serà ser la participació de la criptografia, 12 00:00:33,620 --> 00:00:36,570 l'art de la codificació de la informació, en el qual es veu per sobre d'aquí 13 00:00:36,570 --> 00:00:41,480 és un quadre de Ràdio Orphan Annie anell descodificador secret d'antany. 14 00:00:41,480 --> 00:00:46,490 >> Això és en realitat forma molt primitiva i la forma de cryptopgraphy per a nens 15 00:00:46,490 --> 00:00:50,590 pel que aquest anell té dues disks-- un dins i un altre fora. 16 00:00:50,590 --> 00:00:54,740 I girant un d'aquests, vostè pot essencialment ordenar les lletres com l'A 17 00:00:54,740 --> 00:00:59,520 A a la Z amb altres lletres com B a través d'A En altres paraules, 18 00:00:59,520 --> 00:01:03,730 pot girar literalment l'alfabet, procedent d'aquesta manera amb un mapeig des 19 00:01:03,730 --> 00:01:07,820 cartes a les cartes de manera que, si vostè volgut enviar un missatge secret 20 00:01:07,820 --> 00:01:11,820 per a algú com Annie, podria escriure pel seu missatge i després giri 21 00:01:11,820 --> 00:01:15,370 les lletres, per la qual cosa, si vostè es refereix a dir "A", que en lloc de dir "B" 22 00:01:15,370 --> 00:01:17,280 Vol dir "B" que en lloc de dir "C" - 23 00:01:17,280 --> 00:01:20,240 o alguna cosa una mica més intel · ligent que això-- i, a continuació, en última instància, 24 00:01:20,240 --> 00:01:24,630 sempre que Annie té aquest descodificador anell, es pot descodificar el missatge. 25 00:01:24,630 --> 00:01:28,540 Ara, vostè pot recordar, en efecte, que aquest es va utilitzar en una pel · lícula molt famosa que 26 00:01:28,540 --> 00:01:31,140 juga fins a la sacietat durant la temporada de Nadal. 27 00:01:31,140 --> 00:01:32,650 Anem a fer una ullada aquí. 28 00:01:32,650 --> 00:01:35,294 29 00:01:35,294 --> 00:01:37,210 Ralphie PARKER: "Ja es tracti de conegut per tots que en resum 30 00:01:37,210 --> 00:01:41,000 que Ralph Parker Es nomena és membre de Little Orphan Annie Secret 31 00:01:41,000 --> 00:01:44,860 Cercle i té dret a tota la honors i beneficis que ocorren a la mateixa ". 32 00:01:44,860 --> 00:01:47,410 >> Ralphie PARKER (narrar): Signat Little Orphan Annie. 33 00:01:47,410 --> 00:01:50,070 Ratificat, Pierre Andre! 34 00:01:50,070 --> 00:01:51,490 En tinta. 35 00:01:51,490 --> 00:01:55,494 Honors i beneficis, Ja a l'edat de nou anys. 36 00:01:55,494 --> 00:01:57,402 >> [REPRODUCCIÓ DE MÚSICA] 37 00:01:57,402 --> 00:02:00,470 >> [Chatter RÀDIO] 38 00:02:00,470 --> 00:02:01,470 Ralphie PARKER: Anem. 39 00:02:01,470 --> 00:02:02,344 Seguirem endavant amb ella. 40 00:02:02,344 --> 00:02:06,029 Jo no necessito tot aquest jazz sobre contrabandistes i pirates. 41 00:02:06,029 --> 00:02:08,820 RÀDIO LOCUTOR: Escolti matí nit per l'aventura final 42 00:02:08,820 --> 00:02:11,060 del Negre del vaixell pirata. 43 00:02:11,060 --> 00:02:14,740 Ara, és el moment d'Annie Missatge secret per a vosaltres membres 44 00:02:14,740 --> 00:02:17,110 del Cercle Secret. 45 00:02:17,110 --> 00:02:20,700 Recordeu els nens, els únics membres d'Annie Secret Circle 46 00:02:20,700 --> 00:02:23,270 pot descodificar el missatge secret d'Annie. 47 00:02:23,270 --> 00:02:27,270 >> Recordeu, Annie depèn de tu. 48 00:02:27,270 --> 00:02:30,060 Definiu les seves agulles per a B-2. 49 00:02:30,060 --> 00:02:34,004 Aquí hi ha la mensaje-- 12, 11, 2-- 50 00:02:34,004 --> 00:02:36,503 Ralphie PARKER (narrar): I estic en la meva primera reunió secreta. 51 00:02:36,503 --> 00:02:40,041 RÀDIO LOCUTOR: -25, 14, 11, 18, 16-- 52 00:02:40,041 --> 00:02:42,790 Ralphie PARKER (narrar): Oh, Pere es en gran veu aquesta nit. 53 00:02:42,790 --> 00:02:46,110 Em vaig adonar que aquesta nit missatge era realment important. 54 00:02:46,110 --> 00:02:47,930 >> RÀDIO LOCUTOR: -3, 25. 55 00:02:47,930 --> 00:02:49,940 Aquest és un missatge d'Annie si mateixa. 56 00:02:49,940 --> 00:02:52,182 Recordeu, no l'hi diguis a ningú. 57 00:02:52,182 --> 00:02:55,077 >> [Panteix] 58 00:02:55,077 --> 00:02:57,285 Ralphie PARKER (narrar): Noranta segons després, estic 59 00:02:57,285 --> 00:03:00,090 en l'única habitació de la casa on un nen de nou anys 60 00:03:00,090 --> 00:03:04,380 podia seure a privacitat i descodificació. 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 >> [Riu] 64 00:03:06,524 --> 00:03:08,684 >> Ralphie PARKER (narrar): Vaig anar a la següent. 65 00:03:08,684 --> 00:03:09,610 "I." 66 00:03:09,610 --> 00:03:11,641 La primera paraula és "ser". 67 00:03:11,641 --> 00:03:12,140 Sí! 68 00:03:12,140 --> 00:03:14,293 Venia més fàcil ara. 69 00:03:14,293 --> 00:03:15,259 "U." 70 00:03:15,259 --> 00:03:16,225 >> [Riu] 71 00:03:16,225 --> 00:03:18,157 >> RANDY PARKER: Aw, anem, Ralphie. 72 00:03:18,157 --> 00:03:19,606 Me n'he d'anar! 73 00:03:19,606 --> 00:03:21,538 >> Ralphie PARKER: Estaré baix, Ma. 74 00:03:21,538 --> 00:03:22,504 Whiz Gee. 75 00:03:22,504 --> 00:03:25,402 76 00:03:25,402 --> 00:03:31,220 "T." "O." "Assegureu-vos a "." Assegureu-vos "què? 77 00:03:31,220 --> 00:03:33,981 Quina va ser la petita òrfena Annie tractant de dir? "Assegureu-vos" què? 78 00:03:33,981 --> 00:03:35,522 MARE: Ralphie, Randy ha d'anar. 79 00:03:35,522 --> 00:03:36,735 Feu el favor de sortir? 80 00:03:36,735 --> 00:03:38,190 >> Ralphie PARKER: Bé, mare! 81 00:03:38,190 --> 00:03:39,787 Estaré fos cert! 82 00:03:39,787 --> 00:03:41,995 Ralphie PARKER (narrar): Jo estava més a prop ara. 83 00:03:41,995 --> 00:03:43,370 La tensió era terrible. 84 00:03:43,370 --> 00:03:44,794 Què era? 85 00:03:44,794 --> 00:03:47,656 El destí del planeta pot penjar d'un fil. 86 00:03:47,656 --> 00:03:50,518 >> MARE: Ralphie, Randy ha d'anar! 87 00:03:50,518 --> 00:03:53,635 >> Ralphie PARKER: Torno a terme, per l'amor de Déu! 88 00:03:53,635 --> 00:03:55,343 Ralphie PARKER (Narrant): Gairebé allà! 89 00:03:55,343 --> 00:03:56,520 Els meus dits van volar! 90 00:03:56,520 --> 00:03:58,500 La meva ment era un parany d'acer. 91 00:03:58,500 --> 00:03:59,850 Cada porus vibrar. 92 00:03:59,850 --> 00:04:01,806 Era gairebé clar! 93 00:04:01,806 --> 00:04:02,773 Sí! 94 00:04:02,773 --> 00:04:03,273 Sí! 95 00:04:03,273 --> 00:04:03,773 Sí! 96 00:04:03,773 --> 00:04:04,740 Sí! 97 00:04:04,740 --> 00:04:10,250 >> Ralphie PARKER: "Assegureu-vos beure la seva Ovaltine ". 98 00:04:10,250 --> 00:04:10,750 Ovaltine? 99 00:04:10,750 --> 00:04:14,864 100 00:04:14,864 --> 00:04:17,539 Un comercial de mala mort? 101 00:04:17,539 --> 00:04:19,439 >> [REPRODUCCIÓ DE MÚSICA] 102 00:04:19,439 --> 00:04:21,724 >> Ralphie PARKER: Fill de puta. 103 00:04:21,724 --> 00:04:23,460 >> [Rialles] 104 00:04:23,460 --> 00:04:27,070 >> DAVID J. Malan: Així que a continuació és un cop d'ull al que la criptografia 105 00:04:27,070 --> 00:04:29,880 pot ser per a un esto-- beure d'antany. 106 00:04:29,880 --> 00:04:30,900 Així que un anunci ràpid. 107 00:04:30,900 --> 00:04:33,410 Si vostè és lliure d'aquesta Divendres a les 01:15 pm i ho faria 108 00:04:33,410 --> 00:04:36,610 agradaria unir-se a nosaltres per CS50 el dinar, el cap a aquest URL aquí. 109 00:04:36,610 --> 00:04:38,080 En primer arribat, primer, com de costum. 110 00:04:38,080 --> 00:04:41,840 Però amb el temps, ens assegurarem que més tots els que vulguin participar 111 00:04:41,840 --> 00:04:43,640 pot programar-savi. 112 00:04:43,640 --> 00:04:45,170 >> Així cordes. 113 00:04:45,170 --> 00:04:47,940 Tenim Zamyla-- qui ara has conegut més probable 114 00:04:47,940 --> 00:04:50,750 en Butlletí de problemes 1-- la nom s'escriu així. 115 00:04:50,750 --> 00:04:53,570 I supose que ha escrit el seu nom en un programa informàtic que està 116 00:04:53,570 --> 00:04:55,710 usant alguna cosa com getString. 117 00:04:55,710 --> 00:04:57,890 Per tal de recuperar els cops de teclat, com 118 00:04:57,890 --> 00:05:01,620 anem sobre el que representa un cadena, una paraula, un paràgraf, 119 00:05:01,620 --> 00:05:03,960 o diverses lletres com aquestes aquí? 120 00:05:03,960 --> 00:05:06,790 >> Parlem sobre l'última vegada sencers i problemes 121 00:05:06,790 --> 00:05:09,960 que sorgeixen amb desbordament de sencers i valors de punt flotant 122 00:05:09,960 --> 00:05:12,190 i els problemes que sorgir dins de la precisió. 123 00:05:12,190 --> 00:05:16,080 Amb cordes, almenys tenir una mica més de flexibilitat 124 00:05:16,080 --> 00:05:17,970 perquè només strings-- en la realitat món-- 125 00:05:17,970 --> 00:05:19,790 pot ser una longitud prou arbitrari. 126 00:05:19,790 --> 00:05:21,055 Bastant curt, bastant llarg. 127 00:05:21,055 --> 00:05:23,680 Però fins i tot llavors, anem a trobar que els ordinadors de vegades pot 128 00:05:23,680 --> 00:05:27,200 quedar-se sense memòria i ni tan sols emmagatzemar una cadena prou gran. 129 00:05:27,200 --> 00:05:30,840 >> Però per ara, anem a començar a visualitzar una cadena com alguna cosa en aquestes caixes 130 00:05:30,840 --> 00:05:31,340 Aquí. 131 00:05:31,340 --> 00:05:36,410 Així que sis de tals caixes, cadascuna de les quals representa un personatge o "char". 132 00:05:36,410 --> 00:05:40,646 Així que recorda que "char" - c-h-a-r-- és un dels tipus de dades incorporats en C. 133 00:05:40,646 --> 00:05:43,520 I el que és interessant és que es pot utilitzar aquest tipus de com un bloc de construcció, 134 00:05:43,520 --> 00:05:47,880 una peça del trencaclosques, si es vol, per formar un major tipus de dades que seguirem 135 00:05:47,880 --> 00:05:49,410 per cridar a una "cadena". 136 00:05:49,410 --> 00:05:53,650 >> Ara, el que és útil sobre el pensament sobre coses com cordes d'aquesta manera? 137 00:05:53,650 --> 00:05:57,720 Bé, resulta que podem realment aprofitar aquesta estructura 138 00:05:57,720 --> 00:06:01,420 Per accedir realment a caràcters individuals d'una manera bastant senzilla. 139 00:06:01,420 --> 00:06:04,099 Vaig a seguir endavant i crear un arxiu anomenat "stringzero.c," 140 00:06:04,099 --> 00:06:05,765 però se li pot dir el que vostè desitja. 141 00:06:05,765 --> 00:06:08,500 I a la pàgina web del curs és ia aquest exemple per endavant, 142 00:06:08,500 --> 00:06:10,430 per la qual cosa no cal escriure tot. 143 00:06:10,430 --> 00:06:13,820 >> I seguiré endavant i primer fer void main int. 144 00:06:13,820 --> 00:06:15,980 I als pocs dies, anem a començar a esmicolar 145 00:06:15,980 --> 00:06:19,070 el buit és aquí, per què és int al costat del principal, i així successivament. 146 00:06:19,070 --> 00:06:21,180 Però per ara, continuarem copiar enganxar això. 147 00:06:21,180 --> 00:06:23,455 >> Vaig a declarar una cadena anomenada s. 148 00:06:23,455 --> 00:06:26,920 I vaig a tornar de GetString qualsevol l'usuari tecleja. 149 00:06:26,920 --> 00:06:29,170 Això serà un simple programa, no hi ha instruccions, 150 00:06:29,170 --> 00:06:31,336 Jo només vaig a cegues esperar que l'usuari coneix 151 00:06:31,336 --> 00:06:32,600 què fer perquè sigui senzill. 152 00:06:32,600 --> 00:06:34,220 >> I ara vaig a tenir un bucle. 153 00:06:34,220 --> 00:06:37,450 I dins del meu bucle estic tindrà int i en zero. 154 00:06:37,450 --> 00:06:40,660 I i és, de nou, només una convenció, una variable d'índex per al recompte, 155 00:06:40,660 --> 00:06:42,350 però jo podria cridar a això el que jo vulgui. 156 00:06:42,350 --> 00:06:46,275 Jo faré i és inferior a: així El nom de Zamyla és de sis lletres. 157 00:06:46,275 --> 00:06:48,150 Així que vaig a dur codi que hi ha per ara. 158 00:06:48,150 --> 00:06:49,730 >> I després i ++. 159 00:06:49,730 --> 00:06:53,190 I ara a l'interior d'aquests arrissat claus faré printf, 160 00:06:53,190 --> 00:06:55,460 i vull imprimir una caràcter alhora. 161 00:06:55,460 --> 00:06:58,227 Així que vaig a utilitzar% c per Potser per primera vegada. 162 00:06:58,227 --> 00:07:00,560 I després vull imprimir cada personatge en la seva pròpia línia. 163 00:07:00,560 --> 00:07:02,550 Així que em vaig a posar un petita barra invertida n allà. 164 00:07:02,550 --> 00:07:03,640 Tancar cotització. 165 00:07:03,640 --> 00:07:06,250 >> I ara vull fer alguna cosa aquí. 166 00:07:06,250 --> 00:07:10,610 Vull imprimir el lletra específica a la cadena, 167 00:07:10,610 --> 00:07:13,670 s, ja que estic iteració de zero en un màxim de sis. 168 00:07:13,670 --> 00:07:17,150 En altres paraules, vull imprimir el caràcter i-èsim de s. 169 00:07:17,150 --> 00:07:18,420 Ara, com puc fer això? 170 00:07:18,420 --> 00:07:21,550 >> Doncs igual que les caixes en aquesta representació aquí, 171 00:07:21,550 --> 00:07:25,560 classe de, evocar la noció de boxa lletres, es pot fer de manera similar que 172 00:07:25,560 --> 00:07:32,630 sintàcticament en C simplement especificant, Vull imprimir s l'i-èsim caràcter. 173 00:07:32,630 --> 00:07:35,640 L'ús dels claudàtors en el teclat del seu ordinador 174 00:07:35,640 --> 00:07:38,910 que en un teclat dels Estats Units són generalment per sobre de la tecla de retorn. 175 00:07:38,910 --> 00:07:42,630 >> Així que això no és del tot correcte però, com t'hauràs adonat. 176 00:07:42,630 --> 00:07:44,780 Però jo vaig a classe de forjar a cegues aquí. 177 00:07:44,780 --> 00:07:47,020 I jo faré que la cadena 0. 178 00:07:47,020 --> 00:07:50,860 Però abans de fer això, anem a veure si ens no poden anticipar alguns errors comuns. 179 00:07:50,860 --> 00:07:52,844 Això va a compilar? 180 00:07:52,844 --> 00:07:54,510 No, m'estic perdent un munt de coses. 181 00:07:54,510 --> 00:07:55,280 Biblioteques vaig sentir. 182 00:07:55,280 --> 00:07:58,480 >> Així que arxius de capçalera podria jo desitjar afegir aquí? 183 00:07:58,480 --> 00:07:59,205 Sí. 184 00:07:59,205 --> 00:08:01,580 >> AUDIÈNCIA: Cal I / S estàndard [inaudible] 185 00:08:01,580 --> 00:08:02,663 >> DAVID J. Malan: Excel · lent. 186 00:08:02,663 --> 00:08:06,060 Així que necessito I / S estàndard. Per a què propòsit fer Vull estàndard d'E / S? 187 00:08:06,060 --> 00:08:06,670 Per printf. 188 00:08:06,670 --> 00:08:09,220 Així incloure stdio.h. 189 00:08:09,220 --> 00:08:13,490 I també es proposa que incloc la biblioteca CS50 per quina raó? 190 00:08:13,490 --> 00:08:14,650 Per tenir cordes. 191 00:08:14,650 --> 00:08:17,780 Així que ja veurem el que La biblioteca del CS50 està fent 192 00:08:17,780 --> 00:08:19,260 per crear aquesta noció d'una cadena. 193 00:08:19,260 --> 00:08:21,930 Però per ara, només pot pensar en ell com un tipus de dades real. 194 00:08:21,930 --> 00:08:23,596 >> Així que sembla ser una mica de neteja. 195 00:08:23,596 --> 00:08:27,060 I ara vaig a seguir endavant i, de fet fer fer cadena de 0. 196 00:08:27,060 --> 00:08:27,700 Compilat. 197 00:08:27,700 --> 00:08:28,370 Així que això és bo. 198 00:08:28,370 --> 00:08:32,799 Així ./string0 deixar-me el zoom de manera que puguem veure més de prop el que està passant. 199 00:08:32,799 --> 00:08:33,850 Intro. 200 00:08:33,850 --> 00:08:37,789 Z-A-M-i-L-A entrar. 201 00:08:37,789 --> 00:08:39,440 I hem imprès a nom de Zamyla. 202 00:08:39,440 --> 00:08:40,409 >> Així que això és bastant bo. 203 00:08:40,409 --> 00:08:43,220 Així que ara seguirem endavant i executar aquest programa de nou, 204 00:08:43,220 --> 00:08:45,659 i escriviu el nom complet del cap 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 No hem imprès Daven de Nom complet correctament. 209 00:08:51,750 --> 00:08:54,250 Ara bé, això hauria de ser obvi a Retrospect causa del que, 210 00:08:54,250 --> 00:08:57,010 classe de, decisió de disseny estúpid? 211 00:08:57,010 --> 00:08:59,590 >> Sí, jo no modificable la 06:00 interior del meu bucle. 212 00:08:59,590 --> 00:09:01,610 Ara que ho vaig fer només perquè Sabia el nom de Zamyla 213 00:09:01,610 --> 00:09:02,776 que havia de ser de sis lletres. 214 00:09:02,776 --> 00:09:04,720 Però segurament això no és una solució general. 215 00:09:04,720 --> 00:09:07,720 Així que resulta que podem dinàmicament esbrinar la longitud d'una cadena 216 00:09:07,720 --> 00:09:10,440 cridant a una funció anomenada strlen. 217 00:09:10,440 --> 00:09:12,840 >> Una vegada més, deliberadament succintament anomenat simplement 218 00:09:12,840 --> 00:09:14,450 perquè sigui més còmode per escriure. 219 00:09:14,450 --> 00:09:17,170 Però això és sinònim de obtenir la longitud d'una cadena. 220 00:09:17,170 --> 00:09:23,190 Vaig a tornar al meu terminal finestra i tornar a executar el compilador. 221 00:09:23,190 --> 00:09:24,170 Però ha cridar. 222 00:09:24,170 --> 00:09:29,130 Implícitament es declara la funció de biblioteca strlen amb tipus unsigned int const-- 223 00:09:29,130 --> 00:09:29,780 Estic perdut. 224 00:09:29,780 --> 00:09:30,590 Completament. 225 00:09:30,590 --> 00:09:32,940 >> Així, especialment com el seu ulls comencen a vidriosos 226 00:09:32,940 --> 00:09:36,000 amb missatges d'error com aquest, l'enfocament Sincerament, en les primeres paraules. 227 00:09:36,000 --> 00:09:38,590 Sabem que el problema està en línia 8, tal com s'indica aquí. 228 00:09:38,590 --> 00:09:40,500 I és en la cadena de 0.c. 229 00:09:40,500 --> 00:09:43,580 Implícitament declarar funció de biblioteca strlen. 230 00:09:43,580 --> 00:09:47,000 Així que en general es va a ser un patró de missatges d'error. 231 00:09:47,000 --> 00:09:49,190 Implícitament declarar alguna cosa. 232 00:09:49,190 --> 00:09:53,250 >> Així que en resum, què tinc jo semblava han fet pel que fa a la línia 8, aquí. 233 00:09:53,250 --> 00:09:56,880 Quina podria ser la solució sigui encara si vostè mai ha fet servir strlen a tu mateix? 234 00:09:56,880 --> 00:09:58,907 >> AUDIÈNCIA: Part d'una biblioteca diferent? 235 00:09:58,907 --> 00:10:00,740 DAVID J. Malan: Part d'una biblioteca diferent. 236 00:10:00,740 --> 00:10:02,400 Així es declara, per així dir-ho. 237 00:10:02,400 --> 00:10:07,510 S'esmenta en algun arxiu a part de stdio.h i CS50.h. 238 00:10:07,510 --> 00:10:09,179 Ara, on es defineix? 239 00:10:09,179 --> 00:10:12,220 Per ser honest, que o bé ha de tot just saber això de la part superior del seu cap, 240 00:10:12,220 --> 00:10:13,640 o busca a Google això i ho esbrini. 241 00:10:13,640 --> 00:10:18,150 O que això, que he obert al CS50 Appliance el programa de terminal, que 242 00:10:18,150 --> 00:10:22,200 és només la versió gran de pantalla completa de el que hi ha a la part inferior de la finestra de gedit. 243 00:10:22,200 --> 00:10:24,970 >> I resulta que hi ha una ordre semblant succinta, anomenat 244 00:10:24,970 --> 00:10:29,280 home de manual, en la qual si s'escriu en el nom d'una funció i premeu Enter, 245 00:10:29,280 --> 00:10:32,240 que posarem bastant documentació arcà. 246 00:10:32,240 --> 00:10:35,299 És només que el text general es veu una mica d'alguna cosa com això. 247 00:10:35,299 --> 00:10:37,090 És una mica aclaparador a primera vista. 248 00:10:37,090 --> 00:10:39,048 Però, francament, em vaig a deixar que els meus ulls es posen vidriosos 249 00:10:39,048 --> 00:10:41,930 i només se centren en la part Em preocupo de moment. 250 00:10:41,930 --> 00:10:42,780 >> Què és això. 251 00:10:42,780 --> 00:10:45,470 Què es veu estructuralment com cosa que estic familiaritzat. 252 00:10:45,470 --> 00:10:48,080 De fet, la pàgina de manual, de manera que a parlar, li dirà 253 00:10:48,080 --> 00:10:51,590 en el que encapçalat presentar una funció com strlen es defineix. 254 00:10:51,590 --> 00:10:54,170 Així que em vaig a tornar ara a gedit. 255 00:10:54,170 --> 00:10:59,070 I jo seguiré endavant i afegir aquí #include 256 00:10:59,070 --> 00:11:00,480 i deseu el fitxer. 257 00:11:00,480 --> 00:11:04,300 >> Vaig a netejar la pantalla amb Control de L Si vostè ha estat preguntant. 258 00:11:04,300 --> 00:11:08,210 I jo faré tornar a executar string.0, compila aquest moment. 259 00:11:08,210 --> 00:11:11,790 ./string.0 Zamyla. 260 00:11:11,790 --> 00:11:15,020 Això ha actuat Déjame anar endavant i tornar a executar-lo amb Davenport. 261 00:11:15,020 --> 00:11:15,860 Intro. 262 00:11:15,860 --> 00:11:17,730 I això, també, semblava funcionar. 263 00:11:17,730 --> 00:11:21,220 >> Així podem fer una mica millor que això, però, podem començar a coses ordenades 264 00:11:21,220 --> 00:11:23,257 fins a només una mica. 265 00:11:23,257 --> 00:11:25,590 I jo vaig a realitat introduir una altra cosa ara. 266 00:11:25,590 --> 00:11:28,930 Vaig a seguir endavant i guardar això en un arxiu diferent. 267 00:11:28,930 --> 00:11:31,770 I jo vaig a trucar aquest fitxer string1.c només 268 00:11:31,770 --> 00:11:34,620 per ser coherent amb el codi podràs trobar en línia. 269 00:11:34,620 --> 00:11:37,050 >> I anem a concentrar-nos en el exactament el mateix codi. 270 00:11:37,050 --> 00:11:39,000 Resulta que tinc estat una mena de presa de 271 00:11:39,000 --> 00:11:42,600 per fet el fet que el meu portàtil, i, al seu torn, l'aparell CS50 272 00:11:42,600 --> 00:11:47,450 té una gran quantitat de memòria, una gran quantitat de RAM, una gran quantitat de bytes d'espai 273 00:11:47,450 --> 00:11:48,920 en la qual puc emmagatzemar cadenes. 274 00:11:48,920 --> 00:11:53,560 >> Però la realitat si em va escriure llarg suficients i bastants cops de teclat, 275 00:11:53,560 --> 00:11:56,170 Vaig poder en tipus teoria a més caràcters 276 00:11:56,170 --> 00:11:58,830 del meu equip té memòria per físicament. 277 00:11:58,830 --> 00:11:59,830 I això és problemàtic. 278 00:11:59,830 --> 00:12:03,050 Igual que un int només pot comptar tan alt, en teoria, 279 00:12:03,050 --> 00:12:06,600 només es pot ficar tants personatges en la memòria RAM de l'ordinador o l'atzar 280 00:12:06,600 --> 00:12:07,920 Memòria d'Accés. 281 00:12:07,920 --> 00:12:11,140 >> Així que millor que havia anticipar aquest problema, fins i tot 282 00:12:11,140 --> 00:12:13,660 encara que podria ser una rara cas de la cantonada, per així dir-ho. 283 00:12:13,660 --> 00:12:15,670 No passa molt sovint, podria succeir. 284 00:12:15,670 --> 00:12:18,815 I si passa i no ho faig anticipar i programa per a això, 285 00:12:18,815 --> 00:12:20,300 el meu programa podia fer qui sap què. 286 00:12:20,300 --> 00:12:22,220 Congelar, pengi, reinici, el que sigui. 287 00:12:22,220 --> 00:12:24,490 Una cosa anticipat que podria succeir. 288 00:12:24,490 --> 00:12:27,120 >> Així que el que vaig a fer Ara, a partir d'ara de veritat, 289 00:12:27,120 --> 00:12:31,630 és abans que jo cegament utilitzar una variable com es que 290 00:12:31,630 --> 00:12:36,790 se li ha assignat el valor de retorn de alguna altra funció com getString, 291 00:12:36,790 --> 00:12:40,200 Vaig a assegurar que el seu valor és vàlid. 292 00:12:40,200 --> 00:12:44,280 Així que sé només d'haver llegit Documentació del CS50 per getString, 293 00:12:44,280 --> 00:12:49,020 que en última instància hi farem assenyalar, que getString retorna un símbol especial 294 00:12:49,020 --> 00:12:53,610 anomenada NULL, N-O-L-L en tota tapes, si alguna cosa surt malament. 295 00:12:53,610 --> 00:12:55,650 >> Així que normalment, es retorna una cadena. 296 00:12:55,650 --> 00:12:59,700 Però d'altra banda si torna N-O-L-L-- que amb el temps veiem el que realment 297 00:12:59,700 --> 00:13:01,790 significa: Això només significa una cosa dolenta ha passat. 298 00:13:01,790 --> 00:13:05,560 Ara bé, això vol dir que, igual que en Scratch, Puc comprovar una condició aquí a C, 299 00:13:05,560 --> 00:13:08,830 si s no és igual a NULL. 300 00:13:08,830 --> 00:13:11,930 Així que si no has vist això abans, això només vol dir no és igual. 301 00:13:11,930 --> 00:13:15,290 >> Així que és el contrari iguals iguals, que, recorden, 302 00:13:15,290 --> 00:13:18,940 és diferent de sol iguals, que és l'assignació. 303 00:13:18,940 --> 00:13:23,030 Així que si s no és igual a NULL, només llavors 304 00:13:23,030 --> 00:13:25,980 Vull executar aquestes línies de codi. 305 00:13:25,980 --> 00:13:28,080 Així, en altres paraules, abans de submergir cegament 306 00:13:28,080 --> 00:13:30,919 i començar la iteració més de s, i tractar 307 00:13:30,919 --> 00:13:33,710 com si és una seqüència de personatges, vaig a comprovar en primer lloc, 308 00:13:33,710 --> 00:13:37,900 esperi un minut, és definitivament no igual a aquest valor especial NULL? 309 00:13:37,900 --> 00:13:40,030 >> Perquè si ho és, les coses dolentes poden succeir. 310 00:13:40,030 --> 00:13:43,080 I per ara, assumir que les coses dolentes succeint significa que el seu programa es bloqueja, 311 00:13:43,080 --> 00:13:45,070 i no es pot necessàriament recuperar-se. 312 00:13:45,070 --> 00:13:46,800 Així que, francament, sembla més lleig. 313 00:13:46,800 --> 00:13:48,660 És una mica confús ara fer una ullada a. 314 00:13:48,660 --> 00:13:50,780 Però això es farà més familiaritzar-se en poc temps. 315 00:13:50,780 --> 00:13:52,920 >> Però jo vaig a proposar ara una altra millora. 316 00:13:52,920 --> 00:13:54,660 Això és una millora a la correcció. 317 00:13:54,660 --> 00:13:58,800 El meu programa és ara més correcta, perquè en el rar cas que no hi ha prou memòria 318 00:13:58,800 --> 00:14:01,180 existeix, vaig a tractar-lo, i jo faré res. 319 00:14:01,180 --> 00:14:02,680 Jo almenys no vaig a estavellar. 320 00:14:02,680 --> 00:14:05,000 >> Però farem una versió final aquí. 321 00:14:05,000 --> 00:14:07,690 I un arxiu anomenat string2.c. 322 00:14:07,690 --> 00:14:10,190 Vaig a pegar aquest mateix codi per a un moment, 323 00:14:10,190 --> 00:14:14,210 i jo vaig a posar en relleu aquest línia, 11, aquí, només per un moment. 324 00:14:14,210 --> 00:14:18,179 Ara la realitat és que els compiladors intel · ligents Clang com podria arreglar això per a nosaltres 325 00:14:18,179 --> 00:14:19,970 darrere de les escenes sense el nostre saber mai. 326 00:14:19,970 --> 00:14:24,670 Però anem a pensar en aquest fonamentalment com un disseny problemàtica. 327 00:14:24,670 --> 00:14:29,010 >> Aquesta línia de codi és, per descomptat, dient: inicialitzar una variable ia 0. 328 00:14:29,010 --> 00:14:30,260 Això és bastant senzill. 329 00:14:30,260 --> 00:14:34,691 I la novetat és aquest declaració, aquí, i ++, fent? 330 00:14:34,691 --> 00:14:37,066 Ho hem vist abans, però en realitat no parlar-ne. 331 00:14:37,066 --> 00:14:37,900 >> AUDIÈNCIA: Increment i. 332 00:14:37,900 --> 00:14:39,191 >> DAVID J. Malan: i Increment. 333 00:14:39,191 --> 00:14:41,890 Així que en cada iteració a través aquest bucle, cada cicle, 334 00:14:41,890 --> 00:14:43,570 vostè està incrementant i per un. 335 00:14:43,570 --> 00:14:45,740 Per tant, es fa més gran i més gran, i gran fins que el bucle acaba. 336 00:14:45,740 --> 00:14:46,810 Com acaba? 337 00:14:46,810 --> 00:14:49,430 Bé hi ha aquest mitjà condició que hem fet servir abans. 338 00:14:49,430 --> 00:14:52,500 Vostè ha vist i en Tutorials en el conjunt P. 339 00:14:52,500 --> 00:14:53,880 >> Però, ¿què és aquesta paraula? 340 00:14:53,880 --> 00:14:58,352 Feu el següent bucle el sempre i quan i és menor que el que? 341 00:14:58,352 --> 00:14:59,810 AUDIÈNCIA: La longitud de la cadena. 342 00:14:59,810 --> 00:15:01,518 DAVID J. Malan: La longitud de la cadena. 343 00:15:01,518 --> 00:15:04,300 Per tant, es tradueix bastant netament d'anglès en aquest sentit. 344 00:15:04,300 --> 00:15:08,810 Ara el problema és que cada vegada que iterar a través d'aquest bucle en teoria, 345 00:15:08,810 --> 00:15:10,000 Estic fent aquesta pregunta. 346 00:15:10,000 --> 00:15:12,250 Sóc jo menys de la longitud de la cadena de s? 347 00:15:12,250 --> 00:15:14,500 Sóc jo menys de la longitud de la cadena de s? 348 00:15:14,500 --> 00:15:18,380 >> Ara sóc jo canviant en cada iteració? 349 00:15:18,380 --> 00:15:18,880 Ho és. 350 00:15:18,880 --> 00:15:19,629 A causa de la ++. 351 00:15:19,629 --> 00:15:21,700 Així que cada iteració i és cada vegada més gran. 352 00:15:21,700 --> 00:15:25,411 Però és s cada vegada més gran, o més petit, o canviar en absolut? 353 00:15:25,411 --> 00:15:25,910 No 354 00:15:25,910 --> 00:15:30,240 Així que en termes de disseny, un dels eixos al llarg de la qual tractem d'avaluar codi 355 00:15:30,240 --> 00:15:32,610 a la classe, això se sent una mica estúpid. 356 00:15:32,610 --> 00:15:34,690 >> Igual que vostè és, literalment, a cada iteració 357 00:15:34,690 --> 00:15:37,110 d'aquest bucle demanant al mateixa maleïda pregunta de nou, 358 00:15:37,110 --> 00:15:40,770 i una altra, i una altra, i, literalment, mai canviarà. 359 00:15:40,770 --> 00:15:44,220 Almenys si no estic tocant s i tractant de canviar el contingut de s. 360 00:15:44,220 --> 00:15:46,610 Així que em puc fer una mica millor que això. 361 00:15:46,610 --> 00:15:49,530 >> I el que faré no és declarar només una variable i, 362 00:15:49,530 --> 00:15:53,330 però una segona variable vaig arbitràriament, però convencionalment, cridar n. 363 00:15:53,330 --> 00:15:55,940 Assignar n igual a la longitud de la cadena de s. 364 00:15:55,940 --> 00:15:59,090 I després aquí, vaig a fer una mica d'optimització intel · ligent, de manera que 365 00:15:59,090 --> 00:16:03,460 per parlar, que al final del dia no més correcta o no menys correcta és 366 00:16:03,460 --> 00:16:04,260 que abans. 367 00:16:04,260 --> 00:16:05,500 Però és un millor disseny. 368 00:16:05,500 --> 00:16:09,480 En el fet que estic fent servir menys temps, menys cicles de CPU, de manera que 369 00:16:09,480 --> 00:16:14,040 de parlar, de respondre a la mateixa pregunta, però només una vegada. 370 00:16:14,040 --> 00:16:17,870 >> Teniu alguna pregunta respecte aquest general principi de millora, 371 00:16:17,870 --> 00:16:21,294 dir, l'eficiència d'un programa? 372 00:16:21,294 --> 00:16:21,991 Sí? 373 00:16:21,991 --> 00:16:23,699 AUDIÈNCIA: Per què utilitzar el [inaudible]? 374 00:16:23,699 --> 00:16:25,760 375 00:16:25,760 --> 00:16:27,010 DAVID J. Malan: Bona pregunta. 376 00:16:27,010 --> 00:16:30,690 Llavors, ¿per què posem la ++ a l'extrem del I en lloc del començament de la i? 377 00:16:30,690 --> 00:16:33,070 En aquest cas, té cap impacte funcional. 378 00:16:33,070 --> 00:16:36,670 I, en general, tendeixo a utilitzar l'operador de sufix 379 00:16:36,670 --> 00:16:41,750 pel que és una mica més clar per quan l'operació està succeint. 380 00:16:41,750 --> 00:16:46,670 >> Per aquells no familiaritzats, hi ha un altre declaracions pel que vostè podria fer ++ i. 381 00:16:46,670 --> 00:16:48,747 Aquests són funcionalment equivalent en aquest cas 382 00:16:48,747 --> 00:16:51,080 perquè no hi ha res més al voltant d'aquest incrementación. 383 00:16:51,080 --> 00:16:54,435 Però un es pot topar amb casos i línies de codi 384 00:16:54,435 --> 00:16:55,810 en què això fa la diferència. 385 00:16:55,810 --> 00:16:57,810 Així que en general, no ho fem fins i tot parlar d'aquest. 386 00:16:57,810 --> 00:17:00,690 Perquè, francament, que fa que la seva codi més sexy, i una mena de impermeable, 387 00:17:00,690 --> 00:17:01,776 i menys caràcters. 388 00:17:01,776 --> 00:17:04,859 Però la realitat és que és molt més difícil, Crec que, fins i tot per mi que embolico la meva ment 389 00:17:04,859 --> 00:17:07,319 voltant d'ella de vegades, l'ordre de les operacions. 390 00:17:07,319 --> 00:17:09,750 Així com un part, si Realment no m'agrada això, 391 00:17:09,750 --> 00:17:14,650 tot i que això és una mica sexy buscant, també pot fer i + = 1, 392 00:17:14,650 --> 00:17:18,880 que és la versió més lleig de la mateixa idea de incrementación postfix. 393 00:17:18,880 --> 00:17:22,250 >> Dic això i vostè ha burlar-se d'ell, 394 00:17:22,250 --> 00:17:25,140 però s'arriba a veure el codi com cosa bell en poc temps. 395 00:17:25,140 --> 00:17:27,160 >> [Rialles] 396 00:17:27,160 --> 00:17:28,410 >> DAVID J. Malan: Oi? 397 00:17:28,410 --> 00:17:29,360 Sí. 398 00:17:29,360 --> 00:17:30,480 Pregunta al centre. 399 00:17:30,480 --> 00:17:32,146 >> AUDIÈNCIA: Cal dir int n? 400 00:17:32,146 --> 00:17:34,020 DAVID J. Malan: Fas No necessito dir int n. 401 00:17:34,020 --> 00:17:37,670 Així doncs ja hem dit int, que no cal tornar a dir-ho. 402 00:17:37,670 --> 00:17:41,820 El problema és que n ha de ser del mateix tipus de dades com i. 403 00:17:41,820 --> 00:17:43,310 Així que això és simplement una comoditat aquí. 404 00:17:43,310 --> 00:17:44,058 Sí. 405 00:17:44,058 --> 00:17:47,806 >> AUDIÈNCIA: Es pot anar pel Suport de caràcters d'impressió s i de nou? 406 00:17:47,806 --> 00:17:48,930 DAVID J. Malan: Absolutament. 407 00:17:48,930 --> 00:17:52,110 Així% c, recordar de passada temps, és només un marcador de posició. 408 00:17:52,110 --> 00:17:53,930 Significa posar un char aquí. 409 00:17:53,930 --> 00:17:56,780 n barra invertida, és clar, només mitjans posar un salt de línia aquí. 410 00:17:56,780 --> 00:17:59,540 Així que simplement se'n va, ara, aquesta peça de la nova sintaxi. 411 00:17:59,540 --> 00:18:03,730 I això està dient literalment, agafar la cadena anomenada s i veu a buscar el seu 412 00:18:03,730 --> 00:18:06,050 caràcter i'th, per així dir-ho. 413 00:18:06,050 --> 00:18:10,590 >> I segueixo dient caràcter i'th perquè en cada iteració d'aquest bucle 414 00:18:10,590 --> 00:18:14,540 és com si estem imprimint , En primer lloc s suport 0, 415 00:18:14,540 --> 00:18:15,780 com a programador podria dir. 416 00:18:15,780 --> 00:18:18,680 Llavors S suport 1, a continuació, s el suport 2, a continuació, 3, a continuació, 4. 417 00:18:18,680 --> 00:18:21,610 Però és clar que és una variable, així que només ho expresso amb i. 418 00:18:21,610 --> 00:18:23,900 >> Clau, però, és adonar-se, sobretot si no tens 419 00:18:23,900 --> 00:18:26,358 estat aclimatar-se a aquest món de la programació, en la qual tots 420 00:18:26,358 --> 00:18:28,950 semblen comptar des de zero, he de començar a comptar des de zero ara. 421 00:18:28,950 --> 00:18:35,130 Perquè les cadenes, primer caràcter, el z en Zamyla és per bé o per mal 422 00:18:35,130 --> 00:18:40,490 va a viure al lloc número zero. 423 00:18:40,490 --> 00:18:48,210 >> Molt bé, així que anem a portar-me nosaltres tornar aquí per Zamyla 424 00:18:48,210 --> 00:18:50,746 i veure el que realment està passant a sota de la caputxa. 425 00:18:50,746 --> 00:18:52,370 Així que hi ha aquesta noció de la conversió de tipus. 426 00:18:52,370 --> 00:18:53,800 És possible que tingui realitat jugat amb això ja, 427 00:18:53,800 --> 00:18:55,970 potser pel hacker edició de P d'un conjunt. 428 00:18:55,970 --> 00:19:00,320 Però la conversió de tipus només es refereix a la capacitat en C i altres llenguatges 429 00:19:00,320 --> 00:19:03,170 per convertir un tipus de dades a un altre. 430 00:19:03,170 --> 00:19:05,450 >> Ara com podem veure aquesta bastant sense embuts? 431 00:19:05,450 --> 00:19:08,530 Així que això, el record, és el començament l'alfabet anglès. 432 00:19:08,530 --> 00:19:11,265 I el context, cal recordar, d' com fa una setmana és ASCII. 433 00:19:11,265 --> 00:19:13,790 El Codi Estàndard Americà per Intercanvi d'Informació. 434 00:19:13,790 --> 00:19:17,080 La qual cosa és només un camí molt llarg de dir un mapatge de les cartes 435 00:19:17,080 --> 00:19:19,370 als números i de nombres a lletres. 436 00:19:19,370 --> 00:19:22,940 >> Així Mitjançant M aquí, punt punt punts, línies amb, recordar, 437 00:19:22,940 --> 00:19:25,582 el nombre decimal 65 en endavant. 438 00:19:25,582 --> 00:19:27,290 I no parlem sobre això de manera explícita, 439 00:19:27,290 --> 00:19:29,850 però segurament hi ha similars els números corresponents a les lletres minúscules. 440 00:19:29,850 --> 00:19:30,820 I de fet, n'hi ha. 441 00:19:30,820 --> 00:19:33,730 El món decidir alguns anys Fa poc que una minúscula amb 442 00:19:33,730 --> 00:19:35,020 serà 97. 443 00:19:35,020 --> 00:19:38,010 I poc b va ser 98, i així successivament. 444 00:19:38,010 --> 00:19:40,200 >> I per a qualsevol altra tecla el teclat, no hi ha 445 00:19:40,200 --> 00:19:42,190 serà un patró similar de bits. 446 00:19:42,190 --> 00:19:44,540 O equivalentment, un nombre decimal. 447 00:19:44,540 --> 00:19:47,110 Així que la pregunta que ens ocupa, llavors, és com podem 448 00:19:47,110 --> 00:19:49,400 veure realment aquesta sota de la caputxa? 449 00:19:49,400 --> 00:19:51,539 Així que vaig a anar a gedit nou. 450 00:19:51,539 --> 00:19:53,330 I en comptes d'escriure aquest a partir de zero, 451 00:19:53,330 --> 00:19:55,330 Vaig a seguir endavant i Només ha d'obrir alguna cosa 452 00:19:55,330 --> 00:19:58,350 des del codi d'avui anomenat ASCII zero. 453 00:19:58,350 --> 00:20:01,210 >> I ASCII zero són aquestes. 454 00:20:01,210 --> 00:20:02,710 Així que anem a embolicar les nostres ments al voltant d'això. 455 00:20:02,710 --> 00:20:04,969 Així que primer, jo he comentat el codi, que és agradable. 456 00:20:04,969 --> 00:20:07,010 Com que és, literalment, em diu què esperar, 457 00:20:07,010 --> 00:20:08,950 mostrar una assignació per a les lletres en majúscules. 458 00:20:08,950 --> 00:20:13,690 Ara, jo no sé molt bé el que dir amb això, així que anem a deduir. 459 00:20:13,690 --> 00:20:16,870 >> En Anglès, potser poc techie Anglès, 460 00:20:16,870 --> 00:20:20,660 el que fa la línia 18 apareix a fer per nosaltres? 461 00:20:20,660 --> 00:20:21,500 Només la línia 18. 462 00:20:21,500 --> 00:20:22,430 Com és la inducció? 463 00:20:22,430 --> 00:20:25,192 Què es posarà en marxa aquí? 464 00:20:25,192 --> 00:20:26,100 >> AUDIÈNCIA: Un bucle. 465 00:20:26,100 --> 00:20:26,630 >> DAVID J. Malan: un bucle. 466 00:20:26,630 --> 00:20:28,463 I quantes vegades és que repetirà? 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 AUDIÈNCIA: [interposant VEUS] sis vegades. 469 00:20:33,270 --> 00:20:34,830 DAVID J. Malan: no sis vegades. 470 00:20:34,830 --> 00:20:35,840 AUDIÈNCIA: 26 vegades. 471 00:20:35,840 --> 00:20:36,560 DAVID J. Malan: 26 vegades. 472 00:20:36,560 --> 00:20:37,060 Sí, ho sento. 473 00:20:37,060 --> 00:20:37,960 26 vegades. 474 00:20:37,960 --> 00:20:38,460 Per què? 475 00:20:38,460 --> 00:20:41,590 Bé, és una mica estrany, però He començat a comptar des del 65. 476 00:20:41,590 --> 00:20:43,300 El que és estrany, però no està malament. 477 00:20:43,300 --> 00:20:44,610 No està malament per l'opinió. 478 00:20:44,610 --> 00:20:46,980 I jo estic fent que només perquè, per a aquest exemple, 479 00:20:46,980 --> 00:20:50,455 Sóc una espècie d'anticipar que el capital A era 65. 480 00:20:50,455 --> 00:20:53,330 Ara bé, aquest no és el més elegant manera de fer això, quin tipus de codi dur 481 00:20:53,330 --> 00:20:56,130 valors esotèrics que ningú s'espera que cada vegada que cal recordar. 482 00:20:56,130 --> 00:21:00,155 >> Però per ara, noto que estic fer això a través de 65 més 26. 483 00:21:00,155 --> 00:21:03,030 Perquè pel que sembla jo no vull ni per fer l'aritmètica en el meu cap. 484 00:21:03,030 --> 00:21:04,440 Així que vaig a deixar que el compilador ho faci. 485 00:21:04,440 --> 00:21:08,600 Però llavors en cada bucle, cada iteració del bucle, estic incrementant i. 486 00:21:08,600 --> 00:21:10,196 >> Així que ara això sembla una mica críptic. 487 00:21:10,196 --> 00:21:13,320 Però hem de tenir l'edifici bàsic blocs amb els que entenen això. 488 00:21:13,320 --> 00:21:15,510 % C és només un marcador de posició per a un char. 489 00:21:15,510 --> 00:21:19,010 % I és un marcador de posició per a un int. 490 00:21:19,010 --> 00:21:23,310 I resulta que l'ús d'aquest nova sintaxi, aquest parèntesi, per la qual 491 00:21:23,310 --> 00:21:26,100 parlar, de manera que un tipus de dades dins d'un parèntesi, 492 00:21:26,100 --> 00:21:32,270 Puc obligar el compilador per tractar i no és un sencer, sinó com un char. 493 00:21:32,270 --> 00:21:35,520 >> D'aquesta manera em mostra el caràcter equivalent d'aquest nombre. 494 00:21:35,520 --> 00:21:37,986 Ara aquí, aquest codi és gairebé idèntica. 495 00:21:37,986 --> 00:21:39,860 Jo només volia fer súper explícit el fet 496 00:21:39,860 --> 00:21:42,095 que estic començant als 97, que és minúscula. 497 00:21:42,095 --> 00:21:44,080 Al cap amunt a través de 26 cartes més. 498 00:21:44,080 --> 00:21:46,970 I estic haciendo-- de nou, fosa i, per així dir-ho. 499 00:21:46,970 --> 00:21:49,160 O la conversió de tipus i, per així dir-ho. 500 00:21:49,160 --> 00:21:51,420 >> Des d'un int a un char. 501 00:21:51,420 --> 00:21:55,760 Així que el resultat final serà, francament, la informació que ja sabem. 502 00:21:55,760 --> 00:21:59,411 Jo faré ascii-0 no dot-- dot c. 503 00:21:59,411 --> 00:22:02,160 Avís, vostè probablement ha fet que error, ja que acabo de fer accidentalment. 504 00:22:02,160 --> 00:22:03,820 Fer ascii-0. 505 00:22:03,820 --> 00:22:06,090 Ara em faré ./ascii-0. 506 00:22:06,090 --> 00:22:09,050 Vaig a apropar, i per desgràcia que va a desplaçar-se fora de la pantalla. 507 00:22:09,050 --> 00:22:15,060 Però veiem tota una taula on 01:00 mapes a 97, b mapes a 98, 508 00:22:15,060 --> 00:22:18,931 i si ens desplacem fins a més A, per descomptat, es correlaciona amb 65. 509 00:22:18,931 --> 00:22:21,180 Així que això és només per dir que el que hem estat predicant, 510 00:22:21,180 --> 00:22:25,310 existeix aquesta equivalència, es de fet, el cas en la realitat. 511 00:22:25,310 --> 00:22:28,000 Així que una modificació ràpida d'aquest. 512 00:22:28,000 --> 00:22:31,220 Permetin-me obro ascii-1.c. 513 00:22:31,220 --> 00:22:38,070 I noti aquest punt, espècie de, l'aclariment d'això. 514 00:22:38,070 --> 00:22:41,770 Això és ascii-1.c, i compte d'aquesta bogeria. 515 00:22:41,770 --> 00:22:45,120 >> I això realment arriba al cor del que els ordinadors estan fent. 516 00:22:45,120 --> 00:22:48,150 Tot i que nosaltres els humans ho faria No comptar en termes de letters-- 517 00:22:48,150 --> 00:22:50,380 No em poso a pensar, bé una continuació, b, 518 00:22:50,380 --> 00:22:52,590 i usar-los per explicar objectes físics. 519 00:22:52,590 --> 00:22:58,680 Per descomptat que pot dir que jo vull inicialitzar una variable anomenada C-- 520 00:22:58,680 --> 00:23:03,220 però podria haver cridat a aquest alguna cosa-- així c s'inicialitza al capital A. 521 00:23:03,220 --> 00:23:07,560 >> Com que al final del dia, l'ordinador no importa el que vostè està emmagatzemant, 522 00:23:07,560 --> 00:23:10,170 només li importa com desitja per presentar aquesta informació. 523 00:23:10,170 --> 00:23:13,560 Com vol que l'ordinador interpretar que el patró de bits? 524 00:23:13,560 --> 00:23:16,320 Així que això no és una cosa que seria generalment recomanaria fer-ho. 525 00:23:16,320 --> 00:23:19,500 No deixa de ser un exemple per transmetre que es pot absolutament 526 00:23:19,500 --> 00:23:22,049 inicialitzar un enter a un char. 527 00:23:22,049 --> 00:23:24,090 Com que per sota de la capó d'un char, per descomptat, 528 00:23:24,090 --> 00:23:26,170 és només un nombre del 0 al 255. 529 00:23:26,170 --> 00:23:28,540 >> Pel que pot sens dubte el va posar dins d'un int. 530 00:23:28,540 --> 00:23:30,890 I el que això també demostra que 531 00:23:30,890 --> 00:23:34,040 pot convertir d'un tipus a un altre, aquí, 532 00:23:34,040 --> 00:23:36,780 en última instància, la impressió de la mateixa cosa. 533 00:23:36,780 --> 00:23:44,760 I de fet, això em va a arreglar online-- va ser volgut dir això, de nou, aquí. 534 00:23:44,760 --> 00:23:48,610 Déjame netejar això en línia, i anem a veure en un tutorial en línia, segons sigui necessari, 535 00:23:48,610 --> 00:23:50,280 el que es pretenia allà. 536 00:23:50,280 --> 00:23:50,960 >> Okay. 537 00:23:50,960 --> 00:23:53,892 Així que ahir per exemple que actualment participen A i B, i després anem a 538 00:23:53,892 --> 00:23:54,850 prendre les coses a un nivell superior. 539 00:23:54,850 --> 00:23:58,330 Així que amb A i B, i c d'en la capitalització 540 00:23:58,330 --> 00:24:01,560 i l'equivalència dels mateixos, anem a fer una ullada a aquest exemple, aquí. 541 00:24:01,560 --> 00:24:02,752 Un altre exemple de codi. 542 00:24:02,752 --> 00:24:04,460 Obrirem un que sigui ja feta, de manera que 543 00:24:04,460 --> 00:24:06,440 no haver de escriure tot des de zero. 544 00:24:06,440 --> 00:24:09,420 >> I fixeu-vos en previsió estem usant encapçalat múltiple 545 00:24:09,420 --> 00:24:13,240 arxius, entre els quals es nostre nou amic, string.h. 546 00:24:13,240 --> 00:24:15,597 Ara això s'assembla, a primera vista, una mica críptic. 547 00:24:15,597 --> 00:24:18,180 Però anem a veure si no podem raonar a través del que està passant aquí. 548 00:24:18,180 --> 00:24:21,150 En primer lloc em dóna una cadena de l'usuari, i vaig posar aquesta cadena en una variable 549 00:24:21,150 --> 00:24:22,286 anomenats s. 550 00:24:22,286 --> 00:24:24,090 Copiar enganxar des d'abans. 551 00:24:24,090 --> 00:24:27,250 En la línia 22, estic aparentment fent exactament el 552 00:24:27,250 --> 00:24:30,760 Jo ho vaig fer fa un moment, estic iteració sobre els personatges de s. 553 00:24:30,760 --> 00:24:34,780 >> I els nous trucs aquí estan utilitzant longitud de la cadena, l'optimització de menor importància 554 00:24:34,780 --> 00:24:37,930 d'emmagatzemar la longitud de la cadena a n, En lloc de cridar strlen nou, 555 00:24:37,930 --> 00:24:38,850 i una altra, i una altra. 556 00:24:38,850 --> 00:24:41,120 I comprovant que i és menor que n. 557 00:24:41,120 --> 00:24:43,330 Ara aquí, les coses es posen una mica interessant. 558 00:24:43,330 --> 00:24:45,980 Però és només una aplicació d'aquesta mateixa idea nova. 559 00:24:45,980 --> 00:24:48,470 El que en anglès fa s suport i representen? 560 00:24:48,470 --> 00:24:51,772 561 00:24:51,772 --> 00:24:54,260 >> AUDIÈNCIA: Comptant cada caràcter [inaudible]. 562 00:24:54,260 --> 00:24:55,926 >> DAVID J. Malan: Comptant cada personatge. 563 00:24:55,926 --> 00:24:58,680 I encara més succinta, s suport i representen què? 564 00:24:58,680 --> 00:25:00,950 Vostè diria. 565 00:25:00,950 --> 00:25:04,084 Per no posar en el punt aquí. 566 00:25:04,084 --> 00:25:06,375 >> AUDIÈNCIA: Bueno-- 567 00:25:06,375 --> 00:25:09,500 DAVID J. Malan: Així que si la paraula és-- si la cadena és Zamyla, que starts-- 568 00:25:09,500 --> 00:25:12,380 AUDIÈNCIA: --Vostè tractar amb els personatges en forma separada: 569 00:25:12,380 --> 00:25:13,690 DAVID J. Malan: Good. 570 00:25:13,690 --> 00:25:14,190 Exactament. 571 00:25:14,190 --> 00:25:17,940 La notació de claudàtors que permet accedir a cada caràcter individual, 572 00:25:17,940 --> 00:25:21,120 per s suport 0 serà la primer caràcter en la cadena. 573 00:25:21,120 --> 00:25:24,110 s suport 1 serà la segona, i així successivament. 574 00:25:24,110 --> 00:25:28,050 Per tant el dubte que estic fent, aquí, en aquesta condició és el que? 575 00:25:28,050 --> 00:25:33,984 És el caràcter d'ordre i de s major o igual a minúscules 01:00? 576 00:25:33,984 --> 00:25:36,400 I què significa això, aquí, amb els símbols d'unió dobles? 577 00:25:36,400 --> 00:25:36,800 AUDIÈNCIA (JUNTS): I. 578 00:25:36,800 --> 00:25:37,210 DAVID J. Malan: I. 579 00:25:37,210 --> 00:25:38,418 És només equivalent a aquest. 580 00:25:38,418 --> 00:25:42,310 I no és una paraula clau en C, vostè ha de ús, molest, signe ampersand. 581 00:25:42,310 --> 00:25:47,520 I això, per contra, està demanant és s de l'i-èsim caràcter menors o iguals 582 00:25:47,520 --> 00:25:49,030 a minúscules z? 583 00:25:49,030 --> 00:25:52,440 I un cop més, aquí és on la comprensió de la subjacent 584 00:25:52,440 --> 00:25:54,550 implementació d'un ordinador té sentit. 585 00:25:54,550 --> 00:25:57,330 Tingueu en compte que, tot i que tinc el punt punt punt allà, 586 00:25:57,330 --> 00:26:04,410 s'assembla a la aa la z en minúscules es tots els valors contigus fins de 97 d'ara endavant. 587 00:26:04,410 --> 00:26:07,820 >> I el mateix per majúscules a partir de les 65. 588 00:26:07,820 --> 00:26:10,410 Així que el menjar per emportar, llavors, és que en anglès, 589 00:26:10,410 --> 00:26:12,760 Com descriuria el que la línia 24 està fent? 590 00:26:12,760 --> 00:26:15,736 591 00:26:15,736 --> 00:26:16,728 Sí? 592 00:26:16,728 --> 00:26:21,575 >> AUDIÈNCIA: El 24 està comprovant si cada personatge és una minúscula. 593 00:26:21,575 --> 00:26:24,700 DAVID J. Malan: Es comprovar si cada caràcter és una lletra minúscula. 594 00:26:24,700 --> 00:26:28,590 Així que, fins i tot de forma més succinta, és el caràcter i-èsim de s minúscula? 595 00:26:28,590 --> 00:26:30,690 Això és tot el que estem expressar aquí lògicament, 596 00:26:30,690 --> 00:26:33,750 una mica críptic, però en última instància, molt francament. 597 00:26:33,750 --> 00:26:36,480 És s de i'th minúscules personatge? 598 00:26:36,480 --> 00:26:40,130 >> Si és així, i aquí és on les coses aconseguir una mica al · lucinant 599 00:26:40,130 --> 00:26:44,760 per un moment, si és així, aneu per davant i imprimir un caràcter. 600 00:26:44,760 --> 00:26:47,360 Així que això és només un marcador de posició, però, ¿quin personatge? 601 00:26:47,360 --> 00:26:53,710 Per què faig s suport d'i menys aquesta expressió aquí? 602 00:26:53,710 --> 00:26:55,110 >> Bé notar el patró aquí. 603 00:26:55,110 --> 00:26:57,380 Els nombres reals no importen tant. 604 00:26:57,380 --> 00:27:02,700 Però observi que 97 és a quina distància de 65? 605 00:27:02,700 --> 00:27:03,560 >> AUDIÈNCIA: 32. 606 00:27:03,560 --> 00:27:04,480 >> DAVID J. Malan: 32. 607 00:27:04,480 --> 00:27:06,890 Què tan lluny és 98 de 66? 608 00:27:06,890 --> 00:27:07,740 >> AUDIÈNCIA: 32. 609 00:27:07,740 --> 00:27:09,890 >> DAVID J. Malan: Poc c de C gran? 610 00:27:09,890 --> 00:27:10,420 32. 611 00:27:10,420 --> 00:27:14,550 Així que hi ha 32 salts d' una lletra a una altra. 612 00:27:14,550 --> 00:27:17,790 Així que, francament, jo, podia simplificar aquest a això. 613 00:27:17,790 --> 00:27:20,400 Però llavors estic una mica difícil de codificació Aquest baix nivell de comprensió 614 00:27:20,400 --> 00:27:21,740 que cap lector està sempre va a entendre. 615 00:27:21,740 --> 00:27:25,080 Així que vaig a generalitzar com jo conèixer les lletres minúscules són més grans. 616 00:27:25,080 --> 00:27:28,400 Sé que les lletres majúscules són valors més petits, irònicament. 617 00:27:28,400 --> 00:27:33,216 >> Però això és efectivament equivalent a dient restar 32 del segle suport de i. 618 00:27:33,216 --> 00:27:35,430 Així, en el context d'aquests cartes, si la carta 619 00:27:35,430 --> 00:27:38,950 passa a ser una minúscula a, i li resta 32, 620 00:27:38,950 --> 00:27:43,442 ¿Quin efecte té això, matemàticament, en minúscula? 621 00:27:43,442 --> 00:27:44,400 AUDIÈNCIA: Capitalizes-- 622 00:27:44,400 --> 00:27:45,691 DAVID J. Malan: majúscula ella. 623 00:27:45,691 --> 00:27:48,440 I de fet, aquesta és la raó per la programa es diu capitalitzar zero. 624 00:27:48,440 --> 00:27:51,590 Aquest programa ja sigui capitalitza una carta, 625 00:27:51,590 --> 00:27:54,580 després de comprovar si es tracta de fet, una lletra minúscula. 626 00:27:54,580 --> 00:27:59,810 Altrament, en la línia 30, què faig si que no és una lletra minúscula que sóc 627 00:27:59,810 --> 00:28:02,852 mirant a una determinada iteració en el bucle. 628 00:28:02,852 --> 00:28:03,890 Només imprimir. 629 00:28:03,890 --> 00:28:07,010 >> Així que no canviar les coses això ni tan sols és minúscula. 630 00:28:07,010 --> 00:28:10,790 Restringir-se a a poc a poc a través de z. 631 00:28:10,790 --> 00:28:12,730 Ara bé, això és bastant arcà. 632 00:28:12,730 --> 00:28:15,230 Però al final del dia, aquesta és la forma en què, hi havia una vegada, 633 00:28:15,230 --> 00:28:16,460 hagut de implementar coses. 634 00:28:16,460 --> 00:28:19,780 Si en comptes oberta amb majúscula un, gràcies oh déu. 635 00:28:19,780 --> 00:28:22,320 Hi ha una funció cridats a superior que pot 636 00:28:22,320 --> 00:28:25,410 fer tot el que acabem de fer a un nivell força baix. 637 00:28:25,410 --> 00:28:28,752 >> Ara a part superior és interessant perquè s'ha declarat en un arxiu, 638 00:28:28,752 --> 00:28:31,210 i vostè només saber això mitjançant la comprovació de la documentació, 639 00:28:31,210 --> 00:28:35,730 o que em diguin, per exemple, a la classe, on existeix, en un arxiu anomenat ctype.h. 640 00:28:35,730 --> 00:28:37,630 Així que aquest és un altre nou amic nostre. 641 00:28:37,630 --> 00:28:40,750 I ho fa superior exactament que el seu nom suggereix. 642 00:28:40,750 --> 00:28:44,860 >> Pot passar, com un argument, entre aquests parèntesi, una mica de caràcter. 643 00:28:44,860 --> 00:28:48,390 Vaig a passar en el caràcter i'th de s utilitzant la nostra nova notació de luxe 644 00:28:48,390 --> 00:28:49,870 que implica claudàtors. 645 00:28:49,870 --> 00:28:53,391 I prendre una conjectura, el que és el retorn valor d'superior sembla va 646 00:28:53,391 --> 00:28:53,890 a ser? 647 00:28:53,890 --> 00:28:56,460 648 00:28:56,460 --> 00:28:57,770 Una lletra majúscula. 649 00:28:57,770 --> 00:28:58,620 Una lletra majúscula. 650 00:28:58,620 --> 00:29:02,330 >> Així que si pas en minúscula, amb sort, per definició de a superior, 651 00:29:02,330 --> 00:29:05,600 que va a tornar un majúscula A. En cas contrari, 652 00:29:05,600 --> 00:29:08,590 si no és una lletra minúscula a primer lloc, acabo de imprimir-lo. 653 00:29:08,590 --> 00:29:10,800 I, en efecte, observi el segon amic aquí. 654 00:29:10,800 --> 00:29:13,840 No només per la part superior hi ha, però és menor, el que 655 00:29:13,840 --> 00:29:16,200 en realitat respon a aquesta pregunta per a mi. 656 00:29:16,200 --> 00:29:19,730 >> Ara qui va escriure aquestes coses, 10s de fa anys, saps què? 657 00:29:19,730 --> 00:29:23,840 Implementat a superior i és reduir l'ús de codi com aquest. 658 00:29:23,840 --> 00:29:27,270 Però, de nou, d'acord amb aquesta idea d'abstreure de distància, 659 00:29:27,270 --> 00:29:29,190 més o menys, el nivell més baix detalls d'implementació. 660 00:29:29,190 --> 00:29:32,600 I de peu sobre les espatlles de la gent que van venir abans que nosaltres, l'ús de funcions 661 00:29:32,600 --> 00:29:36,300 com a superior i és més baixa, el que suficient meravellosament estan molt ben 662 00:29:36,300 --> 00:29:40,190 anomenat per dir el que fan, és un paradigma meravellós per adoptar. 663 00:29:40,190 --> 00:29:44,040 >> Ara, resulta que si llegeixo la pàgina del manual per a, per exemple, per a la part superior, 664 00:29:44,040 --> 00:29:45,010 Aprenc alguna cosa més. 665 00:29:45,010 --> 00:29:46,890 Així que l'home ToUpper. 666 00:29:46,890 --> 00:29:48,050 És una mica aclaparador. 667 00:29:48,050 --> 00:29:51,110 Però avís, així és que la menció de l'arxiu de capçalera que he d'utilitzar. 668 00:29:51,110 --> 00:29:54,460 Com acotació al marge, ja que aquest és enganyosa, la funció 669 00:29:54,460 --> 00:29:59,070 utilitza sencers en lloc de caràcters per raons de comprovació d'errors. 670 00:29:59,070 --> 00:30:01,260 Però potser vindrem de nou a que en el futur. 671 00:30:01,260 --> 00:30:05,910 >> Però fixa't, aquí, als conversos superiors la lletra c a majúscules si és possible. 672 00:30:05,910 --> 00:30:07,674 Així que això és bastant senzill. 673 00:30:07,674 --> 00:30:09,340 I ara anem a ser una mica més específic. 674 00:30:09,340 --> 00:30:12,750 Fem una ullada a la part de la Pàgina home baix valor de retorn. 675 00:30:12,750 --> 00:30:15,420 El valor retornat és que de la carta convertit. 676 00:30:15,420 --> 00:30:18,690 O c, si la conversió no era possible, 677 00:30:18,690 --> 00:30:20,250 on c és l'entrada original. 678 00:30:20,250 --> 00:30:24,140 Què sé d'aquí, de l'argument que al superior. 679 00:30:24,140 --> 00:30:25,780 >> Llavors, què és el menjar per emportar d'aquesta? 680 00:30:25,780 --> 00:30:28,060 El valor retornat és que de la carta convertit, 681 00:30:28,060 --> 00:30:32,110 o c, la carta original, si la conversió no era possible. 682 00:30:32,110 --> 00:30:36,460 Quines millores puc, per tant, fer que el disseny del meu codi? 683 00:30:36,460 --> 00:30:37,146 Sí? 684 00:30:37,146 --> 00:30:38,810 >> AUDIÈNCIA: Vostè pot treure la cosa. 685 00:30:38,810 --> 00:30:40,810 DAVID J. Malan: puc eliminar la sentència else, 686 00:30:40,810 --> 00:30:42,510 i no només la sentència else. 687 00:30:42,510 --> 00:30:44,150 >> AUDIÈNCIA: Vostè pot eliminar [inaudible]. 688 00:30:44,150 --> 00:30:46,310 >> DAVID J. Malan: puc eliminar tot la forquilla 689 00:30:46,310 --> 00:30:48,209 en el camí, el cas més en conjunt. 690 00:30:48,209 --> 00:30:50,250 Així que de fet, deixa obrir la versió final d'aquest, 691 00:30:50,250 --> 00:30:55,540 capitalitzar-2 i notar com, si vostè, sexy, el codi és ara aconseguir, 692 00:30:55,540 --> 00:31:00,040 en què he reduït d'alguns 07:00 més o menys línies a només quatre, 693 00:31:00,040 --> 00:31:03,850 la funcionalitat que tenia la intenció simplement trucant a la superior, 694 00:31:03,850 --> 00:31:09,410 passant en si suport i, i la impressió a terme, amb el marcador de posició% c, 695 00:31:09,410 --> 00:31:11,090 aquest personatge en particular. 696 00:31:11,090 --> 00:31:14,560 >> Ara podria dir-se que hi ha un error, o almenys el risc d'un error, 697 00:31:14,560 --> 00:31:15,350 en aquest programa. 698 00:31:15,350 --> 00:31:18,200 Així que per tornar a una menjar per emportar abans, 699 00:31:18,200 --> 00:31:21,820 ¿Què he de fer, probablement, també en aquest programa perquè sigui més robusta, 700 00:31:21,820 --> 00:31:24,974 de manera que no hi ha manera que pugui estavellar, fins i tot en casos rars? 701 00:31:24,974 --> 00:31:26,390 AUDIÈNCIA: Assegureu-vos que no és NULL. 702 00:31:26,390 --> 00:31:28,056 DAVID J. Malan: Assegureu-vos que no és NULL. 703 00:31:28,056 --> 00:31:31,030 Així que en realitat, per fer aquesta súper adequada, que hauria de fer alguna cosa semblant, 704 00:31:31,030 --> 00:31:35,300 si s no és NULL, seguir endavant i executar 705 00:31:35,300 --> 00:31:38,470 aquestes línies de codi, que Puc llavors guió així, 706 00:31:38,470 --> 00:31:39,870 i després posar en el meu clau de tancament. 707 00:31:39,870 --> 00:31:41,550 Així que bé lligar juntes de les dues idees. 708 00:31:41,550 --> 00:31:42,429 Sí? 709 00:31:42,429 --> 00:31:44,470 AUDIÈNCIA: Podries utilitzar un bucle Do While, en el seu lloc? 710 00:31:44,470 --> 00:31:47,270 DAVID J. Malan: Podria Faig una do while? 711 00:31:47,270 --> 00:31:50,020 AUDIÈNCIA: --Vostè vull assegurar-me que en realitat [inaudible]. 712 00:31:50,020 --> 00:31:51,728 DAVID J. Malan: Podria utilitza un do estona? 713 00:31:51,728 --> 00:31:52,450 Resposta curta, no. 714 00:31:52,450 --> 00:31:54,700 Com que vostè està a punt de introduir un altre cas cantonada. 715 00:31:54,700 --> 00:31:56,660 Si la cadena és de longitud zero. 716 00:31:56,660 --> 00:31:59,600 Si, per exemple, m'acaba de colpejar Introduïu, sense mai escriure Zamyla. 717 00:31:59,600 --> 00:32:02,490 Vaig a lliurar una còpia d'un real cadena, com veurem amb el temps veiem, 718 00:32:02,490 --> 00:32:03,780 que té zero caràcters. 719 00:32:03,780 --> 00:32:05,630 Encara és una cadena, és només súper curt. 720 00:32:05,630 --> 00:32:07,960 Però si utilitza un do temps, vas a cegues 721 00:32:07,960 --> 00:32:10,050 tractar de fer alguna cosa amb respectar aquesta cadena, 722 00:32:10,050 --> 00:32:12,537 i res va a ser-hi. 723 00:32:12,537 --> 00:32:18,607 >> AUDIÈNCIA: Bé, si ho has fet fer [inaudible] mentre S-- 724 00:32:18,607 --> 00:32:21,190 DAVID J. Malan: Oh, ja veig, segueixo Obtenció d'una cadena de l'usuari. 725 00:32:21,190 --> 00:32:23,525 Així que la resposta curta, que podria, i mantenir la llauna 726 00:32:23,525 --> 00:32:26,150 que et donin una cadena que és prou curt com per cabre en la memòria. 727 00:32:26,150 --> 00:32:26,700 Absolutament. 728 00:32:26,700 --> 00:32:27,630 Jo vaig optar per no fer-ho. 729 00:32:27,630 --> 00:32:30,505 Si ells no em donen la cadena I vulgui, jo vaig a deixar, em vaig a rendir. 730 00:32:30,505 --> 00:32:33,260 Però absolutament, per a aquest propòsit, vostè pot absolutament fer això. 731 00:32:33,260 --> 00:32:37,500 >> Així que els arxius de capçalera de la biblioteca que ara estem familiaritzats amb són aquests, aquí. 732 00:32:37,500 --> 00:32:41,550 I / S estàndard, CS50.h, string.h, ctype.h, i hi ha, de fet, altres. 733 00:32:41,550 --> 00:32:44,460 Alguns de vosaltres heu descobert la biblioteca de matemàtiques a math.h. 734 00:32:44,460 --> 00:32:48,200 Però permeteu-me que li presenti, ara, a aquest recurs que el personal CS50, Davin, 735 00:32:48,200 --> 00:32:50,630 i Rob, i Gabe particular, han posat juntes. 736 00:32:50,630 --> 00:32:52,630 Això aviat enllaçar a la pàgina web del curs. 737 00:32:52,630 --> 00:32:54,870 Es diu CS50 referència. 738 00:32:54,870 --> 00:32:58,230 >> Què acaba de donar-li una ràpida gust de la mateixa, funciona com segueix. 739 00:32:58,230 --> 00:33:00,740 Déjame anar a reference.cs50.net. 740 00:33:00,740 --> 00:33:02,990 Vostè veurà a la mà esquerra banda una llista aclaparadora 741 00:33:02,990 --> 00:33:04,595 de les funcions que vénen amb c. 742 00:33:04,595 --> 00:33:07,790 Però si m'importa, de moment, sobre alguna cosa com strlen, 743 00:33:07,790 --> 00:33:08,746 Em pot escriure-hi. 744 00:33:08,746 --> 00:33:10,870 Es filtra la llista simplement el que m'importa. 745 00:33:10,870 --> 00:33:11,940 Vaig a fer clic. 746 00:33:11,940 --> 00:33:14,740 I ara a l'esquerra, veuràs el que esperem 747 00:33:14,740 --> 00:33:18,290 és una més senzilla, humana amable explicació de com 748 00:33:18,290 --> 00:33:19,170 aquesta funció treballa. 749 00:33:19,170 --> 00:33:20,600 >> Retorna la longitud d'una cadena. 750 00:33:20,600 --> 00:33:24,060 Heus aquí un resum, així és com vostè utilitzar-lo en termes de l'arxiu de capçalera, 751 00:33:24,060 --> 00:33:27,430 i en termes del que la funció sembla que en termes dels seus arguments. 752 00:33:27,430 --> 00:33:30,250 I llavors aquí, devolucions la longitud d'una cadena. 753 00:33:30,250 --> 00:33:34,280 Però per a aquells de vostès més còmode, en realitat es pot fer clic més còmoda, 754 00:33:34,280 --> 00:33:37,070 i el contingut d'aquest pàgina, ara, canviarà 755 00:33:37,070 --> 00:33:41,660 sent els valors per defecte del s'obté mitjançant l'ús de la pàgina de manual. 756 00:33:41,660 --> 00:33:44,100 >> En altres paraules, CS50 de referència és una simplificació 757 00:33:44,100 --> 00:33:46,220 d'home pàgines pel personal, per als estudiants. 758 00:33:46,220 --> 00:33:49,320 En particular, els menys còmode i al mig, de manera que vostè 759 00:33:49,320 --> 00:33:51,660 no han de tractar d'embolicar la seva ment al voltant, francament, 760 00:33:51,660 --> 00:33:55,030 una sintaxi força críptic i documentació en algun moment. 761 00:33:55,030 --> 00:33:57,650 >> Així que tingues en compte en els dies per venir. 762 00:33:57,650 --> 00:33:59,560 Així que aquí, de nou, és un Zamyla. 763 00:33:59,560 --> 00:34:03,255 Ara anem a fer una pregunta que és una mica més humana accessible. 764 00:34:03,255 --> 00:34:05,380 Gràcies a Chang, que ha estat imprimir més elefants 765 00:34:05,380 --> 00:34:07,090 sense parar durant els últims dies. 766 00:34:07,090 --> 00:34:09,730 Tenim una oportunitat de donar almenys un d'ells de distància. 767 00:34:09,730 --> 00:34:13,239 Si poguéssim aconseguir tot just un voluntari venir en un màxim de dibuixar a la pantalla. 768 00:34:13,239 --> 00:34:14,530 I aquí? 769 00:34:14,530 --> 00:34:15,340 >> Anem amunt. 770 00:34:15,340 --> 00:34:16,720 Quin és el teu nom? 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 Bé. 774 00:34:18,259 --> 00:34:19,388 Alex, anem a dalt. 775 00:34:19,388 --> 00:34:21,679 Estem a punt de veure la seva escriptura a mà a la pantalla aquí. 776 00:34:21,679 --> 00:34:24,325 777 00:34:24,325 --> 00:34:25,570 Molt bé, encantat de conèixer-te. 778 00:34:25,570 --> 00:34:26,429 >> ALEX: Niça que vostè compleix. 779 00:34:26,429 --> 00:34:27,512 >> DAVID J. Malan: Molt bé. 780 00:34:27,512 --> 00:34:28,969 Així, l'exercici super simple. 781 00:34:28,969 --> 00:34:31,440 Bar no és alt per aconseguir un elefant avui. 782 00:34:31,440 --> 00:34:33,439 Està jugant el paper de getString. 783 00:34:33,439 --> 00:34:35,980 I jo vaig a simplement dir-li la cadena que t'has posat. 784 00:34:35,980 --> 00:34:38,080 I suposem que, getString, han estat cridats. 785 00:34:38,080 --> 00:34:42,480 I l'ésser humà, com jo, té escrit en Zamyla, Z-A-M-i-L-A. 786 00:34:42,480 --> 00:34:45,650 Només has d'anar endavant i escriure Zamyla al pantalla com si vostè ha aconseguit 787 00:34:45,650 --> 00:34:47,250 i s'emmagatzema en algun lloc de la memòria. 788 00:34:47,250 --> 00:34:52,370 789 00:34:52,370 --> 00:34:55,570 >> Deixant espai per al que serà diversos altra paraules-- això està bé, segueix endavant. 790 00:34:55,570 --> 00:34:59,620 >> [Rialles] 791 00:34:59,620 --> 00:35:00,800 >> Així Zamyla, Excel · lent. 792 00:35:00,800 --> 00:35:04,880 Així que ara suposi que, getString, són cridats de nou. 793 00:35:04,880 --> 00:35:09,350 I per tant, dono que, al teclat, amb un altre nom, Belinda. 794 00:35:09,350 --> 00:35:17,560 795 00:35:17,560 --> 00:35:18,060 Bé. 796 00:35:18,060 --> 00:35:22,380 I ara, la propera vegada és getString trucada, escric en una mena Gabe, 797 00:35:22,380 --> 00:35:27,560 G-A-B-E. Realment estàs prenent al cor de la memòria d'accés aleatori. 798 00:35:27,560 --> 00:35:29,631 Què és el dibuix tot completament a l'atzar. 799 00:35:29,631 --> 00:35:30,130 Okay. 800 00:35:30,130 --> 00:35:31,104 >> [Rialles] 801 00:35:31,104 --> 00:35:32,520 ALEX: Ho sento meva lletra és dolenta. 802 00:35:32,520 --> 00:35:33,770 DAVID J. Malan: No, això està bé. 803 00:35:33,770 --> 00:35:40,480 I què hi ha de Rob, R-O-B. Okay. 804 00:35:40,480 --> 00:35:41,020 Bé. 805 00:35:41,020 --> 00:35:43,853 Així que no t'ho anava a anticipar tipus d'assentar les coses d'aquesta manera. 806 00:35:43,853 --> 00:35:45,020 Però podem fer que això funcioni. 807 00:35:45,020 --> 00:35:48,810 Llavors, ¿com va ser el procés de col · locació aquests caràcters en la memòria? 808 00:35:48,810 --> 00:35:51,310 En altres paraules, si pensem en aquesta pantalla negre rectangular 809 00:35:51,310 --> 00:35:53,550 com a representació d'un RAM, o memòria de l'ordinador. 810 00:35:53,550 --> 00:35:55,850 >> I recorda que la memòria RAM és només un munt de bytes, 811 00:35:55,850 --> 00:35:57,480 i bytes són un munt de bits. 812 00:35:57,480 --> 00:35:59,350 I bits són d'alguna manera implementat, generalment 813 00:35:59,350 --> 00:36:01,119 amb alguna forma de electricitat en maquinari. 814 00:36:01,119 --> 00:36:03,160 Així que és una espècie de la estratificació que hem parlat 815 00:36:03,160 --> 00:36:04,510 i ara es pot donar per fet. 816 00:36:04,510 --> 00:36:07,020 Com va ser el procés de decidir on escriure 817 00:36:07,020 --> 00:36:11,634 Rob front Gabe cara Belinda front Zamyla? 818 00:36:11,634 --> 00:36:14,020 >> ALEX: Jo només ho va fer en el demana que em vas dir. 819 00:36:14,020 --> 00:36:15,650 >> DAVID J. Malan: I això és cert. 820 00:36:15,650 --> 00:36:20,100 Però el que regeix on poses El nom de Belinda i el nom de Gabe? 821 00:36:20,100 --> 00:36:20,764 >> ALEX: Res? 822 00:36:20,764 --> 00:36:22,930 DAVID J. Malan: [Rialles] Perquè funcioni, això està bé. 823 00:36:22,930 --> 00:36:25,290 Així que els ordinadors són poc més ordenat que això. 824 00:36:25,290 --> 00:36:29,000 I així, quan ens vam quedar allà implement-- per només un moment-- quan en realitat 825 00:36:29,000 --> 00:36:31,470 aplicar una cosa així GetString en un ordinador, 826 00:36:31,470 --> 00:36:34,480 Zamyla podria ser establert més o menys com ho va fer a la pantalla, no. 827 00:36:34,480 --> 00:36:36,660 >> I el que és clau per notar aquí, el que Alex va fer, 828 00:36:36,660 --> 00:36:40,260 és que hi ha una espècie de demarcació entre cadascuna d'aquestes paraules, oi? 829 00:36:40,260 --> 00:36:46,580 No vas escriure Z-A-i-M-L-A-B-E-L-I-N-D-A-G-A-B-- 830 00:36:46,580 --> 00:36:49,740 en altres paraules, hi ha una espècie de demarcació que sembla ser, 831 00:36:49,740 --> 00:36:52,370 classe de, l'espaiament aleatori entre aquestes diverses paraules. 832 00:36:52,370 --> 00:36:54,120 Però això és bo, perquè nosaltres, els humans poden ara 833 00:36:54,120 --> 00:36:56,470 visualitzar que aquests són quatre cordes diferents. 834 00:36:56,470 --> 00:36:59,540 No és només una seqüència de de lots de caràcters. 835 00:36:59,540 --> 00:37:04,190 Així que un ordinador, llavors, per la seva banda, podria tenir una cadena com Zamyla, 836 00:37:04,190 --> 00:37:07,220 posar cadascuna d'aquestes lletres dins d'un byte de memòria. 837 00:37:07,220 --> 00:37:10,400 Però aquest nombre és molt més gran, per descomptat, de sis caràcters. 838 00:37:10,400 --> 00:37:11,690 >> Hi ha un munt de RAM. 839 00:37:11,690 --> 00:37:15,330 I així en endavant, aquest reixeta de caixes va 840 00:37:15,330 --> 00:37:17,560 per representar el que Alex acaba no aquí a la pantalla. 841 00:37:17,560 --> 00:37:20,937 I ara, Alex, li podem oferir una blau o un elefant taronja de Chang. 842 00:37:20,937 --> 00:37:22,270 ALEX: em quedo amb un elefant blau. 843 00:37:22,270 --> 00:37:23,120 DAVID J. Malan: Un elefant blau. 844 00:37:23,120 --> 00:37:25,580 Així que un gran aplaudiment, si poguéssim, per a Alex aquí. 845 00:37:25,580 --> 00:37:26,100 >> [Aplaudiments] 846 00:37:26,100 --> 00:37:26,766 >> ALEX: Gràcies. 847 00:37:26,766 --> 00:37:28,820 DAVID J. Malan: Gràcies. 848 00:37:28,820 --> 00:37:36,230 Així que el menjar per emportar és que, encara que el patró de tipus de canviar amb el temps, aquí 849 00:37:36,230 --> 00:37:40,430 en el tauler, hi havia un demarcació entre les diverses cadenes 850 00:37:40,430 --> 00:37:42,610 que Alex té per a nosaltres. 851 00:37:42,610 --> 00:37:45,230 Ara les computadores, francament, podria fer el mateix. 852 00:37:45,230 --> 00:37:48,210 Podrien tipus de plop cadenes en qualsevol lloc a la memòria RAM. 853 00:37:48,210 --> 00:37:50,710 Fins aquí, per aquí, aquí baix, aquí baix. 854 00:37:50,710 --> 00:37:52,020 >> Ells podrien fer exactament això. 855 00:37:52,020 --> 00:37:54,280 Però, és clar, això és probablement no la millor planificació. 856 00:37:54,280 --> 00:37:54,780 ¿Cert? 857 00:37:54,780 --> 00:37:57,340 Si em van sol · licitar a Alex Obtingui els noms, probablement ell havia 858 00:37:57,340 --> 00:38:01,370 posar una mica més per aquí, potser fins aquí, per aquí, per aquí, amb el temps 859 00:38:01,370 --> 00:38:02,211 per aquí. 860 00:38:02,211 --> 00:38:05,460 Però amb una mica més de planificació, sens dubte, podríem posar les coses de manera més neta. 861 00:38:05,460 --> 00:38:07,350 I de fet, això és el que fa un ordinador. 862 00:38:07,350 --> 00:38:10,720 >> Però el problema és que si la cadena obtinc 863 00:38:10,720 --> 00:38:14,050 després de Zamyla és una cosa com el Belinda, 864 00:38:14,050 --> 00:38:17,929 proposar on podríem escriure la lletra B pel que fa a aquesta reixeta? 865 00:38:17,929 --> 00:38:18,720 On vols anar? 866 00:38:18,720 --> 00:38:21,480 A la dreta de la 1, per sota de la z, per sota de la A? 867 00:38:21,480 --> 00:38:23,204 Quins serien els seus primers instints? 868 00:38:23,204 --> 00:38:24,120 AUDIÈNCIA: Per sota de la z. 869 00:38:24,120 --> 00:38:25,100 DAVID J. Malan: Així que per sota de la z. 870 00:38:25,100 --> 00:38:26,530 I això és bastant senzill, oi? 871 00:38:26,530 --> 00:38:29,321 És una mena de neta, que és el que fem en un teclat quan prem enter, 872 00:38:29,321 --> 00:38:31,770 o un correu electrònic al realitzar una llista amb vinyetes de les coses. 873 00:38:31,770 --> 00:38:34,310 Però la realitat és que els ordinadors tractar de ser més eficient, 874 00:38:34,310 --> 00:38:37,170 i ficar sens dubte el més dades en la memòria RAM com sigui possible, 875 00:38:37,170 --> 00:38:38,890 de manera que no perdi cap bytes. 876 00:38:38,890 --> 00:38:41,545 Així que no perdis qualsevol espai de la pantalla. 877 00:38:41,545 --> 00:38:44,170 I el problema, però, és que quan la posem literalment la carta 878 00:38:44,170 --> 00:38:49,940 b després d'una, com anem a saber on acaba el nom de Zamyla 879 00:38:49,940 --> 00:38:51,840 i comença el nom del Belinda? 880 00:38:51,840 --> 00:38:55,270 Així que els éssers humans que acaba de proposar, així, prem la tecla Intro, essencialment. 881 00:38:55,270 --> 00:38:56,410 Poseu baix. 882 00:38:56,410 --> 00:38:59,750 O com va fer Alex, simplement començar a escriure el següent nom sota de l'anterior, 883 00:38:59,750 --> 00:39:01,583 i per sota d'aquell, i a continuació, per sota d'aquell. 884 00:39:01,583 --> 00:39:02,510 Això és un senyal visual. 885 00:39:02,510 --> 00:39:05,960 >> Els ordinadors tenen una altra senyal visual, però és una mica més concís. 886 00:39:05,960 --> 00:39:07,840 És aquest caràcter covard. 887 00:39:07,840 --> 00:39:11,890 Backslash 0, el que és potser una reminiscència de la barra invertida n, 888 00:39:11,890 --> 00:39:12,640 i així successivament, ara. 889 00:39:12,640 --> 00:39:14,120 Les seqüències d'escapament especials. 890 00:39:14,120 --> 00:39:19,120 Backslash 0 és la manera de en representació de vuit bits zero consecutius. 891 00:39:19,120 --> 00:39:22,000 0000 0000. 892 00:39:22,000 --> 00:39:26,130 >> La forma d'expressar que no és colpejar el nombre zero en el teclat, 893 00:39:26,130 --> 00:39:28,140 perquè en fet que és un Char ASCII. 894 00:39:28,140 --> 00:39:30,990 Es veu com un nombre, però és en realitat un nombre decimal 895 00:39:30,990 --> 00:39:35,910 que representa la circular glifo, el tipus de lletra circular. 896 00:39:35,910 --> 00:39:38,410 Mentrestant, la barra invertida zero significa, literalment, 897 00:39:38,410 --> 00:39:40,700 posar 08:00 zero bytes aquí per a mi. 898 00:39:40,700 --> 00:39:42,136 >> Així que això és una cosa arbitrari. 899 00:39:42,136 --> 00:39:44,260 Podríem haver utilitzat qualsevol patró de bits, però el món 900 00:39:44,260 --> 00:39:46,610 decidit alguns anys fa, que per representar 901 00:39:46,610 --> 00:39:49,710 al final d'una cadena a la memòria, només cal posar un munt de zeros. 902 00:39:49,710 --> 00:39:51,000 Perquè podem detectar això. 903 00:39:51,000 --> 00:39:54,790 Ara que significa que cap carta de la alfabet pot ser representat amb zeros. 904 00:39:54,790 --> 00:39:58,480 >> Però això està bé, ja hem vist que estem fent servir 65 a fins al 97 d'ara endavant. 905 00:39:58,480 --> 00:40:00,290 Nosaltres no arribarem enlloc prop de tots els zeros. 906 00:40:00,290 --> 00:40:03,040 907 00:40:03,040 --> 00:40:06,540 Així Belinda a la memòria d'un ordinador és en realitat va a anar aquí. 908 00:40:06,540 --> 00:40:09,764 He dibuixat en groc just per cridar la nostra atenció. 909 00:40:09,764 --> 00:40:11,680 I fixin-, també, aquesta és completament arbitrària. 910 00:40:11,680 --> 00:40:12,680 He dibuixat com una quadrícula. 911 00:40:12,680 --> 00:40:14,460 Igual, la memòria RAM és només un objecte físic. 912 00:40:14,460 --> 00:40:17,300 No necessàriament ha files i columnes, per se. 913 00:40:17,300 --> 00:40:20,490 És només té un munt de bytes implementat en maquinari d'alguna manera. 914 00:40:20,490 --> 00:40:22,817 Però si després de Belinda I escrit en nom de Gabe, 915 00:40:22,817 --> 00:40:25,650 ell va a acabar aquí a la memòria, i si he escrit en nom de Daven, 916 00:40:25,650 --> 00:40:27,316 per exemple, que acabarà aquí. 917 00:40:27,316 --> 00:40:29,310 I puc seguir escriure fins i tot més noms. 918 00:40:29,310 --> 00:40:32,100 >> Per desgràcia, si intento escriviu un nom de súper llarga, 919 00:40:32,100 --> 00:40:33,730 Jo podria finalment quedar-se sense memòria. 920 00:40:33,730 --> 00:40:37,810 En aquest cas, és getString tornarà NULL, com hem dit. 921 00:40:37,810 --> 00:40:41,720 Però, per sort, almenys en aquest visual aquí, no arribem tan lluny. 922 00:40:41,720 --> 00:40:45,860 >> Ara el que és interessant és que aquesta idea general de tractar les coses 923 00:40:45,860 --> 00:40:49,720 com és en caixes representant d'una característica de C 924 00:40:49,720 --> 00:40:52,690 i una gran quantitat d'idiomes, coneguda com una matriu. 925 00:40:52,690 --> 00:40:55,490 Una matriu és un altre tipus de dades. 926 00:40:55,490 --> 00:40:57,380 És una estructura de dades, si es vol. 927 00:40:57,380 --> 00:41:01,160 Estructura en el sentit que realment, classe de, l'aspecte d'un quadre, almenys 928 00:41:01,160 --> 00:41:02,320 a l'ull de la teva ment. 929 00:41:02,320 --> 00:41:09,680 Una matriu és un contigu seqüència de tipus de dades idèntiques, 930 00:41:09,680 --> 00:41:11,330 esquena amb esquena a esquena amb esquena. 931 00:41:11,330 --> 00:41:14,720 >> Així que una cadena, en una altra És a dir, és una sèrie de caràcters. 932 00:41:14,720 --> 00:41:16,120 Un conjunt de caràcters. 933 00:41:16,120 --> 00:41:19,070 Però resulta que vostè pot tenir arrays de raïms de coses. 934 00:41:19,070 --> 00:41:21,870 De fet, podem posar fins i tot nombres en una matriu. 935 00:41:21,870 --> 00:41:23,920 Així que la forma en què anem a començar 936 00:41:23,920 --> 00:41:26,590 declarar aquestes dades estructura coneguda com una matriu 937 00:41:26,590 --> 00:41:28,250 També es va a utilitzar claudàtors. 938 00:41:28,250 --> 00:41:31,500 Però aquests claudàtors van a tenir un significat diferent en aquest context. 939 00:41:31,500 --> 00:41:33,450 >> I anem a veure de la següent manera. 940 00:41:33,450 --> 00:41:36,780 Suposem que jo vaig obrir un nou arxiu aquí. 941 00:41:36,780 --> 00:41:38,535 I puc guardar això com ages.c. 942 00:41:38,535 --> 00:41:41,280 943 00:41:41,280 --> 00:41:43,470 I vaig a guardar això en el meu carpeta d'aquí. 944 00:41:43,470 --> 00:41:46,130 I ara vaig a seguir endavant i començar a escriure alguna cosa 945 00:41:46,130 --> 00:41:53,940 com incloure CS50.h, incloure stdio.h, int void main. 946 00:41:53,940 --> 00:41:57,370 I després dins d'aquí, vull tenir primer un int anomenada edat. 947 00:41:57,370 --> 00:42:01,371 >> I jo vaig a utilitzar això per aconseguir un int l'usuari per la seva edat. 948 00:42:01,371 --> 00:42:04,620 Però aquest programa està destinat a ser utilitzat per diverses persones, per qualsevol context. 949 00:42:04,620 --> 00:42:05,490 Tinc una fila de persones. 950 00:42:05,490 --> 00:42:08,281 Tots ells han d'escriure en la seva edat per potser una mica, no sé, 951 00:42:08,281 --> 00:42:10,530 concurs o esdeveniment que han arribat a. 952 00:42:10,530 --> 00:42:13,030 Així que la propera persona, em necessitar una altra variable. 953 00:42:13,030 --> 00:42:15,790 >> Perquè si acabo de fer edat getInt, això és 954 00:42:15,790 --> 00:42:18,500 va a donar-li una pallissa, o sobreescriure edat de la persona anterior. 955 00:42:18,500 --> 00:42:19,760 Així que això no és bo. 956 00:42:19,760 --> 00:42:21,790 Així que el meu primer instint podria ser, oh, està bé, 957 00:42:21,790 --> 00:42:26,260 si vull obtenir diverses de les persones ages-- anem a cridar aquesta edad1, 958 00:42:26,260 --> 00:42:31,280 int age2 aconsegueix int, int edad3 aconsegueix getInt. 959 00:42:31,280 --> 00:42:35,340 I ara vaig a utilitzar algun codi pseudocodi aquí. 960 00:42:35,340 --> 00:42:37,679 >> Fer alguna cosa amb aquests nombres. 961 00:42:37,679 --> 00:42:40,470 Deixarem per un altre dia el que estem fent allà, perquè només 962 00:42:40,470 --> 00:42:44,200 tenir cura de moment sobre la edad1, age2, edad3. 963 00:42:44,200 --> 00:42:46,450 Desafortunadament, una vegada que compilar aquest programa 964 00:42:46,450 --> 00:42:51,140 i el va posar davant dels usuaris reals, ¿Quin és el mal disseny fonamentalment 965 00:42:51,140 --> 00:42:53,890 decisió em sembla que han fet? 966 00:42:53,890 --> 00:42:54,624 Sí? 967 00:42:54,624 --> 00:42:55,499 AUDIÈNCIA: [inaudible] 968 00:42:55,499 --> 00:42:58,071 969 00:42:58,071 --> 00:42:59,820 DAVID J. Malan: Sí, Ni tan sols he intentat 970 00:42:59,820 --> 00:43:02,028 esbrinar com moltes edats Com puc realment importa? 971 00:43:02,028 --> 00:43:05,380 Si tinc menys de tres persones aquí, i per tant menys de tres anys d'edat, 972 00:43:05,380 --> 00:43:07,260 Encara estic esperant a cegues 03:00. 973 00:43:07,260 --> 00:43:08,720 Déu no ho vulgui a quatre persones es presenten. 974 00:43:08,720 --> 00:43:10,990 El meu programa no serà fins i tot donar-los suport. 975 00:43:10,990 --> 00:43:13,280 >> I pel que aquest, llarga història resum, no és un bon hàbit. 976 00:43:13,280 --> 00:43:13,780 ¿Cert? 977 00:43:13,780 --> 00:43:16,530 Jo estava copiant essencialment i enganxar el codi i només es pessiguen 978 00:43:16,530 --> 00:43:17,430 els noms de les variables. 979 00:43:17,430 --> 00:43:22,410 I, per Déu, si ho haguessis fet, no 3 les edats, però 10 o 100, o fins i tot 6500 980 00:43:22,410 --> 00:43:23,820 estudiants universitaris, per exemple. 981 00:43:23,820 --> 00:43:26,950 Això no serà particularment Codi elegant, o sostenible. 982 00:43:26,950 --> 00:43:29,200 Vas a haver de reescriure el programa cada vegada que 983 00:43:29,200 --> 00:43:30,760 el nombre de persones canvia. 984 00:43:30,760 --> 00:43:35,090 >> Així que gràcies a Déu, en la nostra actual arxiu ages.c per ara, 985 00:43:35,090 --> 00:43:36,970 tenim una solució més intel · ligent. 986 00:43:36,970 --> 00:43:39,800 En primer lloc, vaig a demanar prestat el Construïm hem fet servir un parell de vegades, 987 00:43:39,800 --> 00:43:43,744 aquest bucle Do While, per tal d'aconseguir el nombre de persones a l'habitació. 988 00:43:43,744 --> 00:43:46,910 Jo només vaig a molestar a l'usuari, un cop més i una altra, fins que ell o ella em dóna 989 00:43:46,910 --> 00:43:49,260 un valor de n que és un enter positiu. 990 00:43:49,260 --> 00:43:51,590 >> Jo podria haver utilitzat, últim temps a arribar int positiu. 991 00:43:51,590 --> 00:43:53,720 Però no hem de de veritat, així que em vaig anar per davant 992 00:43:53,720 --> 00:43:55,660 i tornar en pràctica aquesta idea. 993 00:43:55,660 --> 00:43:58,410 Ara aquí, aquest és el nou truc. 994 00:43:58,410 --> 00:44:02,260 En la línia 27, com els comentaris en la línia 26 indica, 995 00:44:02,260 --> 00:44:05,180 declarar una matriu en la qual per emmagatzemar l'edat de cadascú. 996 00:44:05,180 --> 00:44:09,320 >> Així que si vol aconseguir, no un int, no dos enters, però un munt de punts. 997 00:44:09,320 --> 00:44:13,800 Específicament n nombres enters, eren n poden ser de tres, podria ser 100, podria ser 1000. 998 00:44:13,800 --> 00:44:17,570 La sintaxi, simplement, és que per exemple, quin tipus de dades és el que vols? 999 00:44:17,570 --> 00:44:19,620 Què és el que voleu marcar que parteix de la memòria? 1000 00:44:19,620 --> 00:44:23,530 Què vols de trucar a la reixeta que són aquestes pictòricament? 1001 00:44:23,530 --> 00:44:27,700 >> I entre parèntesi aquí, vostè diu el gran que desitja que la matriu sigui. 1002 00:44:27,700 --> 00:44:30,450 I així abans, quan vaig dir que la sintaxi és una mica diferent aquí, 1003 00:44:30,450 --> 00:44:33,614 encara estem utilitzant claudàtors, però quan estic declarant una matriu, 1004 00:44:33,614 --> 00:44:35,530 el número dins de la claudàtors mitjans 1005 00:44:35,530 --> 00:44:37,610 què tan gran vols la matriu sigui. 1006 00:44:37,610 --> 00:44:42,490 >> Per contra, quan utilitzem s suport i fa un moment, s, una cadena, 1007 00:44:42,490 --> 00:44:46,820 és de fet una sèrie de caràcters, però quan no s'està declarant una variable, 1008 00:44:46,820 --> 00:44:49,760 Igual que amb aquesta paraula clau aquí, simplement està rebent 1009 00:44:49,760 --> 00:44:54,280 un índex específic, una específica element d'aquesta matriu. 1010 00:44:54,280 --> 00:44:57,090 Quan sapiguem això, la resta d'això és senzill. 1011 00:44:57,090 --> 00:45:00,765 Si nou que estic primer va a imprimir ¿Quina és l'edat de la persona número i. 1012 00:45:00,765 --> 00:45:03,890 Quan acabo de dir la persona número u, persona número dos, la persona número tres. 1013 00:45:03,890 --> 00:45:06,306 >> I jo només estic fent aritmètica, de manera que les persones normals com, 1014 00:45:06,306 --> 00:45:09,030 comptem des d'un per a aquest programa, i no des de zero. 1015 00:45:09,030 --> 00:45:13,620 Llavors jo dic getInt, però guardo la resposta en edats mènsula. 1016 00:45:13,620 --> 00:45:16,610 Que és l'edat i-èsim de la matriu. 1017 00:45:16,610 --> 00:45:21,640 Així, mentre que l'última vegada que estàvem tractant aquestes caixes com caràcters per al nom de Zamyla, 1018 00:45:21,640 --> 00:45:22,490 i altres. 1019 00:45:22,490 --> 00:45:26,530 Ara, aquestes caixes representen 32 bits, o quatre bytes 1020 00:45:26,530 --> 00:45:29,510 en el qual podem emmagatzemar 1 int, int, int. 1021 00:45:29,510 --> 00:45:31,890 Tot això, de nou, són el mateix tipus de dades. 1022 00:45:31,890 --> 00:45:33,890 >> Ara faig alguna cosa ximple, com passa el temps, només 1023 00:45:33,890 --> 00:45:35,510 per justificar la redacció d'aquest programa. 1024 00:45:35,510 --> 00:45:40,050 I després aquí baix, vaig tornar a iterar sobre la matriu dient aquí a un any, 1025 00:45:40,050 --> 00:45:43,090 persona número u voluntat ser alguna cosa anys. 1026 00:45:43,090 --> 00:45:45,010 I en adonar-se que math-- Vull dir, això 1027 00:45:45,010 --> 00:45:49,260 no és molt complicat arithmetic-- Acabo d'afegir un a la seva edat. 1028 00:45:49,260 --> 00:45:51,240 Només per demostrar, de nou, aquesta. 1029 00:45:51,240 --> 00:45:57,910 >> Així com jo pot indexar en una cadena, s, així que pot indexar I en una varietat d'edats, 1030 00:45:57,910 --> 00:45:59,950 com que hi ha. 1031 00:45:59,950 --> 00:46:03,340 Llavors, on és aquest estarà prenent nosaltres? 1032 00:46:03,340 --> 00:46:07,070 Així que anem a veure, en última instància, un poques coses en els dies per venir. 1033 00:46:07,070 --> 00:46:09,510 Un, tot aquest temps, quan escriure els seus propis programes, 1034 00:46:09,510 --> 00:46:11,239 com Mario, cobdiciós, el crèdit. 1035 00:46:11,239 --> 00:46:13,780 Vostè ha estat escrivint el nom de el programa i prémer la tecla Enter. 1036 00:46:13,780 --> 00:46:15,610 I a continuació, obtenir la entrada de l'usuari. 1037 00:46:15,610 --> 00:46:18,137 >> Amb getString, getInt, getLongLong, o similars. 1038 00:46:18,137 --> 00:46:20,720 Però resulta que els suports C cosa que es diu la línia d'ordres 1039 00:46:20,720 --> 00:46:25,740 arguments, que ens permetrà aconseguir realment les paraules que escriu, 1040 00:46:25,740 --> 00:46:28,570 en l'indicador parpelleja, després el nom del seu programa. 1041 00:46:28,570 --> 00:46:31,430 >> Així que en els dies per venir, podria escriure alguna cosa com César, 1042 00:46:31,430 --> 00:46:34,950 o el nombre 13, a partir de llavors ./caesar. 1043 00:46:34,950 --> 00:46:36,070 Anem a veure com funciona. 1044 00:46:36,070 --> 00:46:37,550 Com que de fet, en problema va fixar dos, estem 1045 00:46:37,550 --> 00:46:39,383 va a presentar- a una mica d'alguna cosa 1046 00:46:39,383 --> 00:46:42,360 reminiscència de Ralphie de desafiar a principis de la cartografia. 1047 00:46:42,360 --> 00:46:43,970 L'art de la codificació de la informació. 1048 00:46:43,970 --> 00:46:46,660 Això, de fet, és molt reminiscència del que Ralphie va fer. 1049 00:46:46,660 --> 00:46:51,380 >> Aquest és un exemple d'un xifrat algoritme anomenat ROT13, R-O-T 13. 1050 00:46:51,380 --> 00:46:54,910 Què significa simplement giri la lletres en l'alfabet 13 llocs. 1051 00:46:54,910 --> 00:46:58,309 I si ho fa, veurà ara el que és, potser, una frase familiar. 1052 00:46:58,309 --> 00:47:01,100 Però la manera en que utilitzarem això, en última instància, és més general. 1053 00:47:01,100 --> 00:47:04,390 >> En P posat dos, en l'edició estàndard, vostè implementa un parell de xifres, 1054 00:47:04,390 --> 00:47:06,720 un anomenat César, un anomenat Vigenère. 1055 00:47:06,720 --> 00:47:10,090 Tots dos són de rotació xifres, que d'alguna manera 1056 00:47:10,090 --> 00:47:11,826 convertir una lletra en una lletra diferent. 1057 00:47:11,826 --> 00:47:12,950 I César és super simple. 1058 00:47:12,950 --> 00:47:16,220 Per afegir una, afegeix 13, o un nombre de fins a 26. 1059 00:47:16,220 --> 00:47:19,570 Vigenère fa que en un lloc per carta. 1060 00:47:19,570 --> 00:47:22,140 Així Vigenère, com es veurà en l'especificació, és més segur. 1061 00:47:22,140 --> 00:47:24,973 >> Però al final del dia el que vostè estarà implementant i P estableix dos, 1062 00:47:24,973 --> 00:47:29,050 és aquesta clau que s'utilitza tant per al xifrat i el desxifrat. 1063 00:47:29,050 --> 00:47:32,160 En relació amb el procés de convertir text pla, algun missatge original, 1064 00:47:32,160 --> 00:47:34,490 en text xifrat, que és una cosa xifrada. 1065 00:47:34,490 --> 00:47:36,220 I després desxifrar de nou. 1066 00:47:36,220 --> 00:47:38,119 >> En l'edició de hackers, Mentrestant, podràs 1067 00:47:38,119 --> 00:47:40,660 encarregat d'alguna cosa semblant en esperit, on li donarem 1068 00:47:40,660 --> 00:47:44,610 un arxiu, des d'un Linux típic, o Mac o Unix ordinador anomenat etsy 1069 00:47:44,610 --> 00:47:47,800 contrasenya, que conté un conjunt munt de noms d'usuari i contrasenyes. 1070 00:47:47,800 --> 00:47:50,932 I aquestes contrasenyes tenen tot ha xifrat o hash, 1071 00:47:50,932 --> 00:47:53,140 per així dir-ho, més adequadament com es veurà en l'especificació. 1072 00:47:53,140 --> 00:47:57,090 >> I l'edició de hackers desafiarà que amb la presa d'una entrada com aquesta, 1073 00:47:57,090 --> 00:47:58,800 i esquerdament de la contrasenya. 1074 00:47:58,800 --> 00:48:02,590 És a dir, esbrinar el que la la contrasenya de l'humà en realitat era. 1075 00:48:02,590 --> 00:48:05,570 Perquè, de fet, les contrasenyes són generalment no s'emmagatzemen en el clar, 1076 00:48:05,570 --> 00:48:08,260 i generalment contrasenyes ha de ser difícil d'endevinar. 1077 00:48:08,260 --> 00:48:09,610 Això no és sovint el cas. 1078 00:48:09,610 --> 00:48:12,110 >> I el que jo pensava que faríem és concloure amb un parell de minuts 1079 00:48:12,110 --> 00:48:15,160 mirada a un particular mala elecció de contrasenyes 1080 00:48:15,160 --> 00:48:17,260 d'una pel · lícula es pot recordar amb afecte. 1081 00:48:17,260 --> 00:48:18,915 I si no, vostè ha de llogar. 1082 00:48:18,915 --> 00:48:20,070 >> [REPRODUCCIÓ DE VÍDEO] 1083 00:48:20,070 --> 00:48:22,320 >> Casc, vostè dimoni, ¿què està passant? 1084 00:48:22,320 --> 00:48:24,240 Què estàs fent amb la meva filla? 1085 00:48:24,240 --> 00:48:28,010 >> Em -Permit per introduir el cirurgià plàstic brillant i jove, 1086 00:48:28,010 --> 00:48:30,010 El doctor Phillip Schlotkin. 1087 00:48:30,010 --> 00:48:35,020 L'home més gran del nas al tot l'univers i Beverly Hills. 1088 00:48:35,020 --> 00:48:36,140 >> El teu Altesa. 1089 00:48:36,140 --> 00:48:36,820 >> Treball -Nose? 1090 00:48:36,820 --> 00:48:37,700 No entenc. 1091 00:48:37,700 --> 00:48:39,070 Ella ja ha tingut una cirurgia de nas. 1092 00:48:39,070 --> 00:48:40,800 Era el seu dolç 16 presents. 1093 00:48:40,800 --> 00:48:42,590 >> No, no és el que penses. 1094 00:48:42,590 --> 00:48:44,490 És molt, molt pitjor. 1095 00:48:44,490 --> 00:48:48,160 Si no em dones la combinació per l'escut d'aire, 1096 00:48:48,160 --> 00:48:52,748 Schlotkin metge li donarà al seu filla de tornada a la seva antiga nas. 1097 00:48:52,748 --> 00:48:53,748 - [Sospirs] nooooooooooooo. 1098 00:48:53,748 --> 00:48:57,684 1099 00:48:57,684 --> 00:48:59,652 D'on vas treure això? 1100 00:48:59,652 --> 00:49:00,640 >> -Tots Dreta. 1101 00:49:00,640 --> 00:49:02,506 Et diré, t'ho diré. 1102 00:49:02,506 --> 00:49:03,498 >> No, pare, no. 1103 00:49:03,498 --> 00:49:04,490 No has de fer-ho. 1104 00:49:04,490 --> 00:49:06,090 >> -Ets Dret estimada. 1105 00:49:06,090 --> 00:49:07,390 Vaig a estranyar la seva nova nas. 1106 00:49:07,390 --> 00:49:10,990 Però no vaig a dir-los la combinació no importa què. 1107 00:49:10,990 --> 00:49:12,450 >> -molt Bé. 1108 00:49:12,450 --> 00:49:14,830 Metge Schlotkin, fer el que vulguis. 1109 00:49:14,830 --> 00:49:15,744 >> Plaer -El meu. 1110 00:49:15,744 --> 00:49:19,860 1111 00:49:19,860 --> 00:49:20,800 >> No! 1112 00:49:20,800 --> 00:49:22,780 Espera, espera. 1113 00:49:22,780 --> 00:49:24,000 T'ho diré. 1114 00:49:24,000 --> 00:49:25,830 T'ho diré. 1115 00:49:25,830 --> 00:49:28,270 >> Ho sabia anava a funcionar. 1116 00:49:28,270 --> 00:49:31,390 Molt bé, dóna-me'l. 1117 00:49:31,390 --> 00:49:36,220 >> -El Combinació és un. 1118 00:49:36,220 --> 00:49:36,740 >> -Un. 1119 00:49:36,740 --> 00:49:37,473 >> -Un. 1120 00:49:37,473 --> 00:49:37,972 Dos. 1121 00:49:37,972 --> 00:49:38,471 Dos. 1122 00:49:38,471 --> 00:49:39,800 Dos. 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 -Quatre. 1127 00:49:42,300 --> 00:49:42,800 -Quatre. 1128 00:49:42,800 --> 00:49:44,707 -Quatre. 1129 00:49:44,707 --> 00:49:45,521 -Cinc. 1130 00:49:45,521 --> 00:49:46,430 -Cinc. 1131 00:49:46,430 --> 00:49:47,930 -Cinc. 1132 00:49:47,930 --> 00:49:53,480 -SO La combinació és un, dos, tres, quatre, cinc. 1133 00:49:53,480 --> 00:49:56,140 Aquesta és la combinació més estúpida Jo mai vaig escoltar en la meva vida. 1134 00:49:56,140 --> 00:49:58,640 Aquest és el tipus de cosa que un idiota tindria en el seu equipatge. 1135 00:49:58,640 --> 00:50:00,000 >> Vostè -Gràcies, la seva altesa. 1136 00:50:00,000 --> 00:50:01,340 >> [CLICS REMOT] 1137 00:50:01,340 --> 00:50:02,450 >> Què vas fer? 1138 00:50:02,450 --> 00:50:03,800 >> -I Apagar la paret. 1139 00:50:03,800 --> 00:50:05,010 >> No, no ho vas fer, et apagat tota la pel · lícula. 1140 00:50:05,010 --> 00:50:06,220 >> Hi ha d'haver -I pressionar el botó equivocat. 1141 00:50:06,220 --> 00:50:07,064 >> Bé, posar de nou en! 1142 00:50:07,064 --> 00:50:07,910 Col loqueu la pel · lícula al seu lloc! 1143 00:50:07,910 --> 00:50:08,300 >> Sí, senyor! 1144 00:50:08,300 --> 00:50:08,799 Sí, senyor. 1145 00:50:08,799 --> 00:50:09,660 -Anem, Arnold. 1146 00:50:09,660 --> 00:50:10,450 Vinga, Gretchen. 1147 00:50:10,450 --> 00:50:12,533 Per descomptat que sé que vaig a haver de cobrar per aquest. 1148 00:50:12,533 --> 00:50:16,720 1149 00:50:16,720 --> 00:50:17,220 Bé? 1150 00:50:17,220 --> 00:50:17,802 ¿Va funcionar? 1151 00:50:17,802 --> 00:50:18,510 On és el rei? 1152 00:50:18,510 --> 00:50:20,218 >> És Treballades, senyor, tenir la combinació. 1153 00:50:20,218 --> 00:50:20,740 -Gran. 1154 00:50:20,740 --> 00:50:24,810 Ara podem prendre fins a l'últim alè d'aire fresc des del planeta Druidia. 1155 00:50:24,810 --> 00:50:25,890 Quina és la combinació? 1156 00:50:25,890 --> 00:50:28,155 >> Ona, dos, tres, quatre, cinc. 1157 00:50:28,155 --> 00:50:29,890 >> Ona, dos, tres, quatre, cinc? 1158 00:50:29,890 --> 00:50:30,390 Sí. 1159 00:50:30,390 --> 00:50:31,110 Això és increïble. 1160 00:50:31,110 --> 00:50:34,550 Tinc la mateixa combinació en el meu equipatge. 1161 00:50:34,550 --> 00:50:37,160 Preparar Spaceball 1 per a sortida immediata. 1162 00:50:37,160 --> 00:50:38,160 >> Sí, senyor. 1163 00:50:38,160 --> 00:50:40,745 >> -i Canviar el combinació en el meu equipatge. 1164 00:50:40,745 --> 00:50:41,578 [PORTA DE CLOENDA DE SO] 1165 00:50:41,578 --> 00:50:42,064 [Clink DE PORTES QUE colpeja el CASC] 1166 00:50:42,064 --> 00:50:42,550 -Ahh. 1167 00:50:42,550 --> 00:50:43,383 [FI REPRODUCCIÓ DE VÍDEO] 1168 00:50:43,383 --> 00:50:46,700 DAVID J. Malan: Això és tot per CS50, ens veiem la setmana que ve. 1169 00:50:46,700 --> 00:50:49,883 NARRADOR: I ara, Deep Pensaments, per Daven Farnham. 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> Daven FARNHAM: Codificació en C és molt més difícil d'esgarrapades. 1172 00:50:55,860 --> 00:50:57,320 printf, Scratch era una mentida. 1173 00:50:57,320 --> 00:50:59,930 1174 00:50:59,930 --> 00:51:01,430 >> [FRASE DE L'HUMOR] 1175 00:51:01,430 --> 00:51:02,486