1 00:00:00,000 --> 00:00:02,970 >> [MÚSICA] 2 00:00:02,970 --> 00:00:14,355 3 00:00:14,355 --> 00:00:15,700 >> DAVID J. Malan: Està bé. 4 00:00:15,700 --> 00:00:18,832 Això és CS50 i això és l'inici de la Setmana 2. 5 00:00:18,832 --> 00:00:21,040 I et recordo que durant l'últim parell de setmanes, 6 00:00:21,040 --> 00:00:24,490 hem estat la introducció de l'ordinador la ciència i, al seu torn, la programació. 7 00:00:24,490 --> 00:00:27,640 >> I vam començar la història per mitjà de Scratch, que llenguatge gràfic 8 00:00:27,640 --> 00:00:28,990 del Laboratori de Mitjans del MIT. 9 00:00:28,990 --> 00:00:30,780 I després, més recentment, la setmana passada, oi 10 00:00:30,780 --> 00:00:34,450 introduir un higher-- 1 llenguatge de baix nivell conegut 11 00:00:34,450 --> 00:00:36,770 com C, cosa que és purament textual. 12 00:00:36,770 --> 00:00:39,440 I, de fet, l'última vegada que explorat dins d'aquest context 13 00:00:39,440 --> 00:00:40,450 una sèrie de conceptes. 14 00:00:40,450 --> 00:00:43,010 >> Això, recordo, va ser el primer programa mirem. 15 00:00:43,010 --> 00:00:45,710 I aquest programa, simplement, imprimeix, "hola, món". 16 00:00:45,710 --> 00:00:47,730 Però hi ha tant màgia aparent passant. 17 00:00:47,730 --> 00:00:51,460 Hi ha aquesta #include amb aquests suports d'angle. 18 00:00:51,460 --> 00:00:52,170 Hi ha int. 19 00:00:52,170 --> 00:00:53,020 Hi ha (void). 20 00:00:53,020 --> 00:00:56,330 Hi ha parèntesis, claudàtors, punt i coma, i molt més. 21 00:00:56,330 --> 00:00:58,480 >> I així, cal recordar que vam introduir les ratllades 22 00:00:58,480 --> 00:01:02,110 perquè poguéssim, si pot ser, veure més enllà que la sintaxi, les coses que en realitat no és 23 00:01:02,110 --> 00:01:04,590 tot el que intel·lectualment interessant, però des del principi 24 00:01:04,590 --> 00:01:07,700 és, en absolut, una mica complicat per embolicar la seva ment voltant. 25 00:01:07,700 --> 00:01:10,860 I, de fet, un dels més comuns les coses des del principi en una classe de programació, 26 00:01:10,860 --> 00:01:13,443 especialment per als menys còmode i sentir-se frustrat per 27 00:01:13,443 --> 00:01:17,460 i disparat per cert sintàctica errors, per no parlar dels errors lògics. 28 00:01:17,460 --> 00:01:19,800 I així entre els nostres objectius avui en dia, de fet, la voluntat 29 00:01:19,800 --> 00:01:23,280 ser per equipar-lo amb una mica tècniques de resolució de problemes per saber com 30 00:01:23,280 --> 00:01:26,705 per resoldre millor els problemes propis en forma de depuració. 31 00:01:26,705 --> 00:01:29,330 I com es recordarà, també, que el ambient que vam introduir 32 00:01:29,330 --> 00:01:31,780 última vegada que es diu CS50 IDE. 33 00:01:31,780 --> 00:01:34,850 Aquest és un programari basat en web que Li permet programar en el núvol, 34 00:01:34,850 --> 00:01:38,450 per així dir-ho, mentre es manté la totalitat del seu arxius junts, ja que novament serà avui. 35 00:01:38,450 --> 00:01:41,480 I recordar que ens revisited aquests temes aquí, 36 00:01:41,480 --> 00:01:44,480 entre ells, les funcions i bucles, i variables i expressions booleanes, 37 00:01:44,480 --> 00:01:45,110 i condicions. 38 00:01:45,110 --> 00:01:49,190 I en realitat una mica més que nosaltres traduït del món de les ratllades 39 00:01:49,190 --> 00:01:50,800 al món de la C. 40 00:01:50,800 --> 00:01:53,220 >> Però la construcció fonamental blocs, per així dir-ho, 41 00:01:53,220 --> 00:01:55,150 eren realment segueix sent el mateix la setmana passada. 42 00:01:55,150 --> 00:01:57,900 De fet, en realitat només vam tenir una diferents peça del trencaclosques, si es vol. 43 00:01:57,900 --> 00:02:00,300 En lloc que porpra guardar bloc, que en comptes 44 00:02:00,300 --> 00:02:02,940 havia printf, que és aquesta funció en C que 45 00:02:02,940 --> 00:02:05,890 li permet imprimir alguna cosa i el format de la pantalla. 46 00:02:05,890 --> 00:02:07,950 Vam introduir el CS50 Biblioteca, on es 47 00:02:07,950 --> 00:02:11,420 tenen ara a la seva disposició get_char, i get_int, i get_string, 48 00:02:11,420 --> 00:02:14,610 i algunes altres funcions com així, a través del qual es pot obtenir d'entrada 49 00:02:14,610 --> 00:02:16,260 de propi teclat de l'usuari. 50 00:02:16,260 --> 00:02:20,640 I també fem una ullada a les coses com aquestes: bool, i la carbonissa, 51 00:02:20,640 --> 00:02:22,490 i el doble, flotador, int, string LONG_LONG. 52 00:02:22,490 --> 00:02:25,170 I hi ha fins i tot altres tipus de dades en C. 53 00:02:25,170 --> 00:02:28,560 >> En altres paraules, quan es declara una variable per emmagatzemar algun valor, 54 00:02:28,560 --> 00:02:32,600 o quan s'implementa una funció que retorna algun valor, 55 00:02:32,600 --> 00:02:35,290 pot especificar quins tipus de valor que és. 56 00:02:35,290 --> 00:02:37,310 És una cadena, com una seqüència de caràcters? 57 00:02:37,310 --> 00:02:39,490 És un nombre, com un sencer? 58 00:02:39,490 --> 00:02:41,390 És un punt flotant valor, o similar? 59 00:02:41,390 --> 00:02:46,180 Així que a C, a diferència de les ratllades, que en realitat començar a especificar quin tipus de dades 60 00:02:46,180 --> 00:02:48,330 estàvem tornant o l'ús. 61 00:02:48,330 --> 00:02:51,910 >> Però, per descomptat, també ens trobem amb alguns límits fonamentals de la computació. 62 00:02:51,910 --> 00:02:54,100 I, en particular, aquest llenguatge C, el record 63 00:02:54,100 --> 00:02:57,070 que ens vam donar un cop d'ull a desbordament de sencers, la realitat 64 00:02:57,070 --> 00:03:00,460 que si només té una quantitat finita de memòria 65 00:03:00,460 --> 00:03:04,600 o, específicament, un nombre finit de bits, només es pot comptar tan alt. 66 00:03:04,600 --> 00:03:08,460 I així ens fixem en aquest exemple aquí pel qual un comptador en un avió ,, 67 00:03:08,460 --> 00:03:13,510 En realitat, si s'executa el temps suficient es desbordar i resultar en un programari 68 00:03:13,510 --> 00:03:15,560 un error potencial físic real. 69 00:03:15,560 --> 00:03:18,600 >> També ens fixem en flotant punt d'imprecisió, la realitat 70 00:03:18,600 --> 00:03:22,280 que amb només un nombre finit de bits, ja sigui 32 o 64, 71 00:03:22,280 --> 00:03:27,330 només pot especificar tants números després d'un punt decimal, després de la qual cosa es 72 00:03:27,330 --> 00:03:29,110 començar a tenir imprecisa. 73 00:03:29,110 --> 00:03:32,360 Així, per exemple, un terç en el món aquí, al nostre món humà, 74 00:03:32,360 --> 00:03:35,360 sabem que és només un nombre infinit de 3s després del punt decimal. 75 00:03:35,360 --> 00:03:38,820 No obstant això, un equip no pot necessàriament representar un nombre infinit de nombres 76 00:03:38,820 --> 00:03:42,590 si únicament permet que alguns quantitat finita d'informació. 77 00:03:42,590 --> 00:03:45,900 >> Així que no només hem de equipar amb més poder en termes 78 00:03:45,900 --> 00:03:49,280 de com pot expressar-se en un teclat en termes de programació, 79 00:03:49,280 --> 00:03:51,430 També ens limitem el en realitat es pot fer. 80 00:03:51,430 --> 00:03:55,790 I de fet, els errors i els errors poden sorgir d'aquest tipus de qüestions. 81 00:03:55,790 --> 00:03:59,900 I, en efecte, un dels temes d'avui van a ser temes com la depuració 82 00:03:59,900 --> 00:04:03,699 i en realitat mirant sota el capó la forma en què es van introduir les coses la setmana passada 83 00:04:03,699 --> 00:04:05,490 estan efectivament en pràctica de manera que és millor 84 00:04:05,490 --> 00:04:10,530 entendre tant les capacitats de les i les limitacions d'un llenguatge com C 85 00:04:10,530 --> 00:04:14,770 >> I de fet, anem a pelar les capes de la més simple d'estructura de dades, 86 00:04:14,770 --> 00:04:17,756 cosa que es diu una matriu, la qual De zero passa a anomenar una "llista". 87 00:04:17,756 --> 00:04:19,589 És una mica diferent en aquest context. 88 00:04:19,589 --> 00:04:23,340 I llavors també introduirem una de les primer dels nostres problemes específics de domini 89 00:04:23,340 --> 00:04:26,790 en CS50, el món de criptografia, l'art de l'aleatorització 90 00:04:26,790 --> 00:04:29,650 oa la informació de xifrat pel que pot enviar missatges secrets 91 00:04:29,650 --> 00:04:34,520 i descodificar missatges secrets entre dues persones, A i B. 92 00:04:34,520 --> 00:04:37,490 >> Així que abans que la transició a aquest nou món, 93 00:04:37,490 --> 00:04:42,059 tractarem de equipar-lo amb una mica tècniques amb les que es poden eliminar 94 00:04:42,059 --> 00:04:43,850 o reduir almenys alguns de les frustracions 95 00:04:43,850 --> 00:04:46,630 que és probable que hagi trobat durant l'última setmana només. 96 00:04:46,630 --> 00:04:50,830 De fet, abans que es tal-- alguns seus primers problemes en C. I les probabilitats són, 97 00:04:50,830 --> 00:04:54,010 Si ets com jo, el primer cop intenta escriure un programa, 98 00:04:54,010 --> 00:04:57,330 fins i tot si vostè pensa lògicament el programa és bastant simple, 99 00:04:57,330 --> 00:05:01,200 És molt possible que colpejar una paret, i el compilador no va a ajudar. 100 00:05:01,200 --> 00:05:03,940 Fer o no va Clang per fer realitat el seu fer una oferta. 101 00:05:03,940 --> 00:05:05,450 >> I per què podria ser? 102 00:05:05,450 --> 00:05:07,950 Bé, anem a fer una ullada a, potser, un programa senzill. 103 00:05:07,950 --> 00:05:11,190 Vaig a seguir endavant i guardar això en un arxiu anomenat deliberadament buggy0.c, 104 00:05:11,190 --> 00:05:13,590 perquè sé que a viciat per endavant. 105 00:05:13,590 --> 00:05:17,400 Però podria no adonar-se que si això és la primera o segona o tercera programa 106 00:05:17,400 --> 00:05:18,830 que en realitat estic fent a mi mateix. 107 00:05:18,830 --> 00:05:23,820 Així que seguiré endavant i escriure a màquina, int main (void). 108 00:05:23,820 --> 00:05:28,130 I després dins de les meves claus, una molt familiar ( "hola, món-- 109 00:05:28,130 --> 00:05:30,980 barra invertida, n ") - i un punt i coma. 110 00:05:30,980 --> 00:05:32,360 >> He guardat l'arxiu. 111 00:05:32,360 --> 00:05:34,850 Ara vaig a baixar al meu finestra de terminal 112 00:05:34,850 --> 00:05:40,340 i el tipus de maquillatge buggy0, perquè, de nou, el nom del fitxer d'avui és buggy0.c. 113 00:05:40,340 --> 00:05:43,660 Així que escric fer buggy0, Retorn. 114 00:05:43,660 --> 00:05:48,200 >> I, oh, Déu, recordar de l'última vegada que no hi ha missatges d'error és una bona cosa. 115 00:05:48,200 --> 00:05:49,740 Així que no hi ha sortida és una bona cosa. 116 00:05:49,740 --> 00:05:52,920 Però aquí tinc clarament cert nombre d'errors. 117 00:05:52,920 --> 00:05:56,470 >> Així que la primera línia de sortida després d'escriure fa buggy0, recordo, 118 00:05:56,470 --> 00:05:59,540 s'emet bastant detallat de So metàl·lic. 119 00:05:59,540 --> 00:06:02,067 Sota el capó, IDE CS50 està configurat 120 00:06:02,067 --> 00:06:04,150 utilitzar un munt de opcions amb aquest compilador 121 00:06:04,150 --> 00:06:05,941 de manera que vostè no ha pensar en ells. 122 00:06:05,941 --> 00:06:08,840 I això és tot el que la primera línia de mitjans que s'inicia amb Clang. 123 00:06:08,840 --> 00:06:11,720 >> Però després d'això, els problemes comencen a fer la seva aparició. 124 00:06:11,720 --> 00:06:17,390 Buggy0.c en la línia 3, caràcter 5, hi ha un gran error, vermell. 125 00:06:17,390 --> 00:06:18,380 Què és això? 126 00:06:18,380 --> 00:06:23,562 Declarant implícitament funció de biblioteca printf amb el tipus int (const char *, 127 00:06:23,562 --> 00:06:26,050 ...) [-Werror]. 128 00:06:26,050 --> 00:06:28,379 És a dir, és molt ràpid es posa molt arcà. 129 00:06:28,379 --> 00:06:30,170 I, per descomptat, en un primer moment vista, que no ho faria 130 00:06:30,170 --> 00:06:32,380 espero que ho entengui el totalitat d'aquest missatge. 131 00:06:32,380 --> 00:06:34,213 I el que una de les lliçons avui va 132 00:06:34,213 --> 00:06:36,919 a ser tractar de notar patrons, o coses similars, 133 00:06:36,919 --> 00:06:38,960 als errors que pugui tenir trobat en el passat. 134 00:06:38,960 --> 00:06:41,335 Així que anem a esmicolar només aquestes paraules que semblen familiars. 135 00:06:41,335 --> 00:06:44,290 El gran, vermell d'error és clarament simbòlic que alguna cosa va malament. 136 00:06:44,290 --> 00:06:47,940 >> declarant implícitament printf funció de biblioteca. 137 00:06:47,940 --> 00:06:51,680 Així que fins i tot si jo no entenc molt bé el declarant implícitament funció de biblioteca 138 00:06:51,680 --> 00:06:54,900 mitjans, el problema segurament es refereix a printf d'alguna manera. 139 00:06:54,900 --> 00:06:59,130 I la font d'aquesta qüestió té a veure amb el que es declara. 140 00:06:59,130 --> 00:07:02,440 >> La declaració d'una funció és esmentar que per a la primera vegada. 141 00:07:02,440 --> 00:07:06,210 I es va utilitzar la terminologia de la setmana passada de declarar el prototip d'una funció, 142 00:07:06,210 --> 00:07:11,860 ja sigui amb una línia a la part superior de la seva arxiu o incorporada a un fitxer de capçalera trucada. 143 00:07:11,860 --> 00:07:15,300 I en el que va fer que diem arxiu la setmana passada que printf és cita, 144 00:07:15,300 --> 00:07:17,080 Fi de la cita, declarada? 145 00:07:17,080 --> 00:07:20,950 En què fitxer és el seu prototip? 146 00:07:20,950 --> 00:07:24,640 >> Així que si vostè recorda, la primera cosa que em amb tipus, gairebé tots els programes última vegada-- 147 00:07:24,640 --> 00:07:30,790 i accidentalment fa un moment va començar escrivint myself-- era aquest aquí-- 148 00:07:30,790 --> 00:07:38,630 hash-- # include 00:07:41,860 si ara puc guardar aquest arxiu, vaig per seguir endavant i netejar la meva pantalla, 150 00:07:41,860 --> 00:07:44,740 que es pot fer escrivint És clar, o pot mantenir control L, 151 00:07:44,740 --> 00:07:47,680 només per aclarir la finestra de terminal només per eliminar alguns obstacles. 152 00:07:47,680 --> 00:07:51,370 >> Vaig a seguir endavant i Tipus de re-make buggy0, Retorn. 153 00:07:51,370 --> 00:07:53,790 I ja està, encara veig que comandament llarg de So metàl·lic, 154 00:07:53,790 --> 00:07:55,470 però no hi ha cap missatge d'error aquesta vegada. 155 00:07:55,470 --> 00:07:58,800 I de fet, si ho faig ./buggy0, com l'última vegada, 156 00:07:58,800 --> 00:08:01,860 on els punts que això significa directori, Slash només significa, 157 00:08:01,860 --> 00:08:05,040 aquí ve el nom del programa i que el nom del programa és buggy0, 158 00:08:05,040 --> 00:08:07,340 Introduir, "hola, món". 159 00:08:07,340 --> 00:08:09,440 >> Ara, com podria tenir aquesta solució obtinguda 160 00:08:09,440 --> 00:08:12,017 sense necessàriament reconeixent tantes paraules 161 00:08:12,017 --> 00:08:14,350 com ho vaig fer, sens dubte, tenir aquest fet durant tants anys? 162 00:08:14,350 --> 00:08:18,720 Bé, donar-se compte pel primer problema conjunt, li presentem una ordre 163 00:08:18,720 --> 00:08:21,175 que el propi personal de l'CS50 va escriure anomenada help50. 164 00:08:21,175 --> 00:08:24,300 I de fet, ho fa C plec de condicions de el problema establert quant a com usar això. 165 00:08:24,300 --> 00:08:27,210 >> Però help50 és essencialment un programa que el personal de l'CS50 166 00:08:27,210 --> 00:08:30,850 va escriure que li permet executar una ordre o executar un programa, 167 00:08:30,850 --> 00:08:36,169 i si vostè no entén la seva de sortida, passi a la seva sortida a help50, 168 00:08:36,169 --> 00:08:38,890 en el punt el programari que el personal del suposat escriure 169 00:08:38,890 --> 00:08:42,429 es veurà a la sortida del seu programa línia per línia, caràcter per caràcter. 170 00:08:42,429 --> 00:08:46,000 I si nosaltres, el personal, reconeix el missatge d'error que està experimentant, 171 00:08:46,000 --> 00:08:50,580 anem a tractar de provocar-amb alguna preguntes retòriques, amb alguns consells, 172 00:08:50,580 --> 00:08:54,890 de la mateixa manera que un TF o una CA o jo faria en persona en horari d'oficina. 173 00:08:54,890 --> 00:08:58,320 >> Així que mira a help50 si no ho fa necessàriament reconèixer un problema. 174 00:08:58,320 --> 00:09:00,790 Però no confiï en ell massa com una crossa. 175 00:09:00,790 --> 00:09:03,990 Per descomptat tractar de comprendre el seu de sortida i després aprendre d'ella 176 00:09:03,990 --> 00:09:07,571 de manera que ho fan només una vegada o dues vegades help50 vegada s'ha quedat a un error particular 177 00:09:07,571 --> 00:09:08,070 missatge. 178 00:09:08,070 --> 00:09:10,660 Després d'això, vostè ha d'estar millor a tu mateix equipat 179 00:09:10,660 --> 00:09:13,180 per esbrinar el que realment és. 180 00:09:13,180 --> 00:09:14,350 >> Anem a fer una altra aquí. 181 00:09:14,350 --> 00:09:20,410 Déjame anar per davant, i en un altre arxiu que anomenarem aquest buggy1.c. 182 00:09:20,410 --> 00:09:23,110 I en aquest arxiu que sóc anar a deliberately-- 183 00:09:23,110 --> 00:09:26,330 però pretendre que no ho faig entenc el error que he comès. 184 00:09:26,330 --> 00:09:31,420 >> Vaig a seguir endavant i fer això- # Include, ja que he 185 00:09:31,420 --> 00:09:33,660 après la lliçó de fa un moment. 186 00:09:33,660 --> 00:09:36,220 Int principal (void), com abans. 187 00:09:36,220 --> 00:09:40,880 I llavors aquí vaig fer cordes s - get_string. 188 00:09:40,880 --> 00:09:43,770 I recordar l'última vegada que aquest mitjà, bé, equip, 189 00:09:43,770 --> 00:09:48,280 dóna'm una variable, en diuen S i fer que el tipus d'aquesta variable d'una cadena 190 00:09:48,280 --> 00:09:50,150 pel que pot emmagatzemar una o més paraules en el mateix. 191 00:09:50,150 --> 00:09:52,191 >> I després en el de la dreta costat del signe igual 192 00:09:52,191 --> 00:09:54,980 es get_string, que és una funció a la biblioteca CS50 193 00:09:54,980 --> 00:09:55,980 que fa exactament això. 194 00:09:55,980 --> 00:09:59,740 Es posa una funció i després mans de dreta a esquerra. 195 00:09:59,740 --> 00:10:02,670 Pel que aquest signe igual no vol dir "Iguals" com podríem pensar en matemàtiques. 196 00:10:02,670 --> 00:10:04,750 Això vol dir que l'assignació de dreta a esquerra. 197 00:10:04,750 --> 00:10:09,640 Així que això significa, prendre la cadena de l'usuari i l'emmagatzema a l'interior del s. 198 00:10:09,640 --> 00:10:10,460 >> Ara utilitzarem la mateixa. 199 00:10:10,460 --> 00:10:13,820 Déjame anar endavant ara i com a segon línia, deixa anar per davant i dir "hola" - 200 00:10:13,820 --> 00:10:19,330 No "món", però "Hola,% S-- que és el nostre marcador de posició, coma s, 201 00:10:19,330 --> 00:10:22,030 que és la nostra variable, i després un punt i coma. 202 00:10:22,030 --> 00:10:26,070 Així que si no m'equivoco massa aquí, això es veu com codi correcte. 203 00:10:26,070 --> 00:10:28,090 >> I els meus instints són ara per compilar-lo. 204 00:10:28,090 --> 00:10:30,400 L'arxiu es diu buggy1.c. 205 00:10:30,400 --> 00:10:33,770 Així que vaig a fer que buggy1, Retorn. 206 00:10:33,770 --> 00:10:36,377 I donaran-it, si no hi ha fins i tot més errors que abans. 207 00:10:36,377 --> 00:10:38,210 És a dir, hi ha més Seria missatges d'error 208 00:10:38,210 --> 00:10:40,400 Sembla que les línies reals en aquest programa. 209 00:10:40,400 --> 00:10:42,730 >> Però el menjar per emportar és aquí, fins i tot si vostè està aclaparat 210 00:10:42,730 --> 00:10:45,040 amb dos o tres o 4 més missatges d'error, 211 00:10:45,040 --> 00:10:48,340 centrar-se sempre en el mateix primer d'aquests missatges. 212 00:10:48,340 --> 00:10:52,220 Quant a la part superior més un, desplaçant-se cap enrere fins que és necessari. 213 00:10:52,220 --> 00:10:53,930 Així que aquí he escrit maquillatge buggy1. 214 00:10:53,930 --> 00:10:55,700 Així és que la producció Clang com s'esperava. 215 00:10:55,700 --> 00:10:57,290 >> I aquí està el primer error vermell. 216 00:10:57,290 --> 00:11:02,370 L'ús de l'identificador no declarat cadena, el que vull dir estàndard en? 217 00:11:02,370 --> 00:11:04,260 Així que en estàndard és de en realitat una altra cosa. 218 00:11:04,260 --> 00:11:06,240 Es refereix a l'usuari de teclat, essencialment. 219 00:11:06,240 --> 00:11:08,080 >> Però això no és el que volia dir. 220 00:11:08,080 --> 00:11:11,770 Em refereixo a la seqüència, i ho deia get_string. 221 00:11:11,770 --> 00:11:16,200 Llavors, què és el que em es va oblidar de fer aquest cop? 222 00:11:16,200 --> 00:11:20,230 El que falta en aquesta ocasió? 223 00:11:20,230 --> 00:11:23,600 Tinc el meu # include, així que no tinc accés a printf. 224 00:11:23,600 --> 00:11:26,090 >> Però què és el que no tinc l'accés a de moment? 225 00:11:26,090 --> 00:11:29,420 Doncs bé, de la mateixa manera que l'última vegada, He de dir-li al compilador 226 00:11:29,420 --> 00:11:31,691 Clang el que aquestes funcions són. 227 00:11:31,691 --> 00:11:33,940 Get_string no ve amb C. I en particular, es 228 00:11:33,940 --> 00:11:38,160 no s'ajusta a la capçalera de l'arxiu ,. 229 00:11:38,160 --> 00:11:40,770 En el seu lloc, es presenta a cosa que el personal va escriure, 230 00:11:40,770 --> 00:11:44,176 que és un arxiu diferent nomenar però ben anomenat. 231 00:11:44,176 --> 00:11:46,990 232 00:11:46,990 --> 00:11:50,861 >> Així que simplement afegint una línia code-- de record de l'última vegada 233 00:11:50,861 --> 00:11:53,610 Clang que quan s'executa, es va per mirar la meva part superior de codi a sota, 234 00:11:53,610 --> 00:11:54,193 d'esquerra a dreta. 235 00:11:54,193 --> 00:11:57,200 Es notarà, oh, que desitja. 236 00:11:57,200 --> 00:11:59,900 Déjame anar i trobar que, sempre que sigui al servidor, 237 00:11:59,900 --> 00:12:03,090 copiar i enganxar, en essència, a la part superior del seu propi arxiu 238 00:12:03,090 --> 00:12:06,820 de manera que en aquest moment de la història, línia 1, la resta del programa 239 00:12:06,820 --> 00:12:11,651 pot, de fet, utilitzar qualsevol de les funcions en la mateixa, entre ells get_string. 240 00:12:11,651 --> 00:12:13,650 Així que vaig a ignorar la resta dels errors, 241 00:12:13,650 --> 00:12:17,190 perquè, de fet, sospito que només el primer d'ells en realitat importava. 242 00:12:17,190 --> 00:12:20,780 I vaig a seguir endavant i tornar a executar, després de guardar el meu arxiu que buggy1. 243 00:12:20,780 --> 00:12:22,580 I llest, ho va fer el treball. 244 00:12:22,580 --> 00:12:29,200 I si ho faig ./buggy1 i escrigui, per exemple, Zamyla, ara obtindrà hola, 245 00:12:29,200 --> 00:12:32,000 Zamyla, en lloc de hola, món. 246 00:12:32,000 --> 00:12:32,550 >> Tot bé. 247 00:12:32,550 --> 00:12:35,890 Així que el menjar per emportar aquí a continuació són per a, un, tractar de recollir tant com sigui possible 248 00:12:35,890 --> 00:12:39,140 a partir dels missatges d'error per si soles, mirant En algunes de les paraules recognoscibles. 249 00:12:39,140 --> 00:12:43,070 A part d'això, utilitzeu per help50 el problema conjunt d'especificacions. 250 00:12:43,070 --> 00:12:46,500 Però tret això, també, sempre es veuen a la part superior d'error només, almenys 251 00:12:46,500 --> 00:12:50,051 inicialment, per veure quina informació que en realitat podria cedir. 252 00:12:50,051 --> 00:12:52,300 Però resulta que hi ha encara més funcionalitat integrada 253 00:12:52,300 --> 00:12:55,030 a la Biblioteca CS50 per ajudar que des del principi en el semestre 254 00:12:55,030 --> 00:12:57,580 i al començament de la programació esbrinar el que va malament. 255 00:12:57,580 --> 00:12:59,840 Així que farem aquí un altre exemple. 256 00:12:59,840 --> 00:13:04,350 Vaig a trucar a aquest buggy2, que, de nou, va ser defectuós a terme 257 00:13:04,350 --> 00:13:05,650 de la porta, per disseny. 258 00:13:05,650 --> 00:13:09,980 >> I seguiré endavant i fer # include. 259 00:13:09,980 --> 00:13:12,580 I després vaig a fer int main (void). 260 00:13:12,580 --> 00:13:14,840 I llavors em vaig a fer un bucle. 261 00:13:14,840 --> 00:13:16,690 For (int i _ 0. 262 00:13:16,690 --> 00:13:18,750 i és menor que o igual a 10. 263 00:13:18,750 --> 00:13:24,260 i ++, i després entre claus, vaig imprimir només un símbol hashtag aquí 264 00:13:24,260 --> 00:13:25,920 i un caràcter de nova línia. 265 00:13:25,920 --> 00:13:29,220 >> Així que la meva intenció amb aquest programa és, senzillament, 266 00:13:29,220 --> 00:13:33,150 per repetir 10 vegades i en cada iteració 267 00:13:33,150 --> 00:13:35,260 d'aquest bucle cada vegada a través del cicle, 268 00:13:35,260 --> 00:13:37,660 imprimir un hashtag, un hashtag, un hashtag. 269 00:13:37,660 --> 00:13:40,480 Una línia per perquè tenir la nova línia allà. 270 00:13:40,480 --> 00:13:42,787 I per recordar que la llaç, per última setmana-- 271 00:13:42,787 --> 00:13:44,620 i obtindrà més familiaritzat amb la sintaxi 272 00:13:44,620 --> 00:13:47,170 usant-ho amb la pràctica abans d'això em dóna long-- 273 00:13:47,170 --> 00:13:49,740 una variable que es diu i ho estableix en 0. 274 00:13:49,740 --> 00:13:52,650 >> Això incrementa i en cada iteració per 1. 275 00:13:52,650 --> 00:13:54,940 Així que va a 1 a 2 a 3. 276 00:13:54,940 --> 00:13:57,690 I llavors aquesta condició en el mitjà entre els punts i comes 277 00:13:57,690 --> 00:14:03,010 aconsegueix comprovat en cada iteració per fer Segur que encara estem dins de l'abast. 278 00:14:03,010 --> 00:14:06,830 Per això vull repetir 10 vegades, de manera que tenen una mena de manera molt intuïtiva només 279 00:14:06,830 --> 00:14:09,070 lloc 10 com el meu límit superior allà. 280 00:14:09,070 --> 00:14:14,310 >> I, però, quan va executar això, després d' compilar amb maquillatge buggy2-- 281 00:14:14,310 --> 00:14:15,440 i es compila a D'acord. 282 00:14:15,440 --> 00:14:17,980 Així que no tinc una error de sintaxi en aquesta ocasió. 283 00:14:17,980 --> 00:14:20,940 Déjame anar per davant ara i executar buggy2, Retorn. 284 00:14:20,940 --> 00:14:22,620 I ara desplaçar-se cap amunt. 285 00:14:22,620 --> 00:14:24,890 I permetin-me augment la mida de la finestra. 286 00:14:24,890 --> 00:14:33,720 >> Em sembla que tenen 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11. 287 00:14:33,720 --> 00:14:38,891 Així que hi ha 11 hashtags, tot i que Poso clarament 10 en l'interior d'aquest bucle. 288 00:14:38,891 --> 00:14:42,140 Ara, alguns de vostès podrien veure immediatament el que l'error és degut al fet que, de fet, aquesta 289 00:14:42,140 --> 00:14:43,720 No és un error molt difícil de fer. 290 00:14:43,720 --> 00:14:46,070 Però és molt comunament fet molt d'hora. 291 00:14:46,070 --> 00:14:49,820 >> El que vull assenyalar, però, És a dir, com podria jo a resoldre això? 292 00:14:49,820 --> 00:14:52,300 Doncs bé, resulta que la Biblioteca CS50 ve 293 00:14:52,300 --> 00:14:55,380 no només amb get_string i get_int i get_float i altres funcions. 294 00:14:55,380 --> 00:14:59,980 També ve amb una funció especial EPRINTF trucada, o, printf error. 295 00:14:59,980 --> 00:15:03,270 I és que existeix solament per fer és una mica més fàcil per a vostè 296 00:15:03,270 --> 00:15:06,310 a depurar el codi per simplement imprimir un missatge d'error a la pantalla 297 00:15:06,310 --> 00:15:07,850 i saber d'on vi. 298 00:15:07,850 --> 00:15:11,000 >> Així, per exemple, una cosa que podria fer aquí amb aquesta funció és això- 299 00:15:11,000 --> 00:15:20,230 EPRINTF, i després vaig a seguir endavant i dir que ara és de% i, la barra invertida, n. 300 00:15:20,230 --> 00:15:22,330 I vaig a endollar en el valor de i. 301 00:15:22,330 --> 00:15:25,400 I al capdamunt, ja que aquest està a la Biblioteca CS50, 302 00:15:25,400 --> 00:15:27,580 Vaig a seguir endavant i incloure 303 00:15:27,580 --> 00:15:29,169 així que no tinc accés a aquesta funció. 304 00:15:29,169 --> 00:15:31,460 Però considerarem quina línia 9 se suposa que han de fer. 305 00:15:31,460 --> 00:15:32,670 Vaig a esborrar aquest temps. 306 00:15:32,670 --> 00:15:34,670 Això no té res a veure amb el meu objectiu primordial. 307 00:15:34,670 --> 00:15:39,090 Però EPRINTF, printf error, és només la intenció donar-me alguna informació de diagnòstic. 308 00:15:39,090 --> 00:15:42,460 Quan executo el meu programa, vull veure això a la pantalla temporalment 309 00:15:42,460 --> 00:15:44,550 que també acaba d'entendre què està passant. 310 00:15:44,550 --> 00:15:47,330 >> I, de fet, en cada iteració aquí de la línia 9 311 00:15:47,330 --> 00:15:49,260 Vull veure, quin és el valor d'i? 312 00:15:49,260 --> 00:15:50,290 Quin és el valor d'i? 313 00:15:50,290 --> 00:15:51,280 Quin és el valor d'i? 314 00:15:51,280 --> 00:15:55,650 I, amb sort, només ha de veure aquest missatge, també, 10 vegades. 315 00:15:55,650 --> 00:15:57,780 >> Així que permetin-me seguir endavant i recompilar el meu programa, 316 00:15:57,780 --> 00:15:59,905 ja que he de fer en qualsevol moment Faig un canvi. ./buggy2. 317 00:15:59,905 --> 00:16:02,680 318 00:16:02,680 --> 00:16:03,640 I ara-- OK. 319 00:16:03,640 --> 00:16:04,820 Hi ha molt més en joc. 320 00:16:04,820 --> 00:16:07,610 Així que permetin-me desplaçar-se cap amunt en una finestra encara més gran. 321 00:16:07,610 --> 00:16:10,190 >> I veurà que cadascun la hashtags està imprimint. 322 00:16:10,190 --> 00:16:15,270 Però entre cada un d'ells és ara això sortida de diagnòstic el següent format. 323 00:16:15,270 --> 00:16:17,960 El nom del meu programa aquí és buggy2. 324 00:16:17,960 --> 00:16:20,432 El nom de l'arxiu és buggy2.c. 325 00:16:20,432 --> 00:16:24,080 El nombre de línia de la qual aquest va ser imprès és la línia 9. 326 00:16:24,080 --> 00:16:27,500 I després a la dreta que és la missatge d'error que estic esperant. 327 00:16:27,500 --> 00:16:30,701 >> I el bo d'això és que Ara no he de comptar necessàriament 328 00:16:30,701 --> 00:16:32,200 en el meu cap el que el meu programa està fent. 329 00:16:32,200 --> 00:16:34,240 Puc veure que en el primera iteració i és 0, 330 00:16:34,240 --> 00:16:39,420 després 1, després 2, després 3, després 4, a continuació, 5, a continuació, 6, a continuació, 7, a continuació, 8, 9 a continuació, a continuació, 331 00:16:39,420 --> 00:16:40,980 10. 332 00:16:40,980 --> 00:16:42,050 Així que esperi un minut. 333 00:16:42,050 --> 00:16:43,740 Que està passant aquí? 334 00:16:43,740 --> 00:16:48,190 Encara em sembla estar explicant segons el previst fins a 10. 335 00:16:48,190 --> 00:16:50,550 >> Però, d'on començo? 336 00:16:50,550 --> 00:16:53,240 0, 1, 2, 3, 4, 5, 6, 7, 8, 10 set. 337 00:16:53,240 --> 00:16:58,040 Així 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10-- el dit 11 338 00:16:58,040 --> 00:16:59,990 és indicatiu del problema. 339 00:16:59,990 --> 00:17:02,850 Em sembla que han comptat incorrectament en el meu bucle. 340 00:17:02,850 --> 00:17:06,599 En lloc d'anar 10 iteracions, Estic començant a 0, 341 00:17:06,599 --> 00:17:09,550 Estic acabant en ia través de 10. 342 00:17:09,550 --> 00:17:12,030 Però com que, com un ordinador, Estic començant a comptar a 0, 343 00:17:12,030 --> 00:17:15,250 Hauria d'estar explicant fins a, però no a través de, 10. 344 00:17:15,250 --> 00:17:18,510 >> I així, la solució, que finalment adonat que aquí, és una de dues coses. 345 00:17:18,510 --> 00:17:22,430 Podria dir simplement molt comptar fins a menys de 10. 346 00:17:22,430 --> 00:17:27,260 Així 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, que és, de fet, correcta, 347 00:17:27,260 --> 00:17:28,900 encara que soni una mica malament. 348 00:17:28,900 --> 00:17:35,070 O podria fer menys que o igual a 9, sempre i quan començo a 0. 349 00:17:35,070 --> 00:17:40,056 O si realment no li agrada això, pot comptar cap amunt a través de 10 però comencen en 1. 350 00:17:40,056 --> 00:17:41,680 Però, de nou, això no és tan comú. 351 00:17:41,680 --> 00:17:43,977 En programming-- encara no tant en Scratch-- 352 00:17:43,977 --> 00:17:45,810 però en la programació en C i altres idiomes, 353 00:17:45,810 --> 00:17:47,670 com JavaScript i Python i altres, és 354 00:17:47,670 --> 00:17:49,880 simplement molt comú per la nostra discussió sobre binària 355 00:17:49,880 --> 00:17:53,450 que acaba de començar a comptar en el nombre més baix que pugui, que és 0. 356 00:17:53,450 --> 00:17:53,950 Tot bé. 357 00:17:53,950 --> 00:17:55,160 Així que això és EPRINTF. 358 00:17:55,160 --> 00:17:58,600 I de nou, ara que he descobert el meu problema, i ho vaig a tornar a 0 359 00:17:58,600 --> 00:18:01,470 a través de menys de 10, vaig per entrar i eliminar EPRINTF. 360 00:18:01,470 --> 00:18:04,580 >> No hauria de ser-hi quan enviar el meu codi o enviar el meu codi 361 00:18:04,580 --> 00:18:05,800 o mostrar-la a ningú més. 362 00:18:05,800 --> 00:18:07,980 És realment només la intenció per a ser utilitzades temporalment. 363 00:18:07,980 --> 00:18:11,650 Però ara m'he fixat aquest en particular problema també. 364 00:18:11,650 --> 00:18:16,780 >> Bé, farem un exemple més aquí que vaig a assotar sobre de la següent manera. 365 00:18:16,780 --> 00:18:22,850 Vaig a seguir endavant i #incloure . 50 $ 366 00:18:22,850 --> 00:18:25,580 I seguiré endavant i # include. 367 00:18:25,580 --> 00:18:29,030 >> I vaig a estalviar aquesta imatge com buggy3.c. 368 00:18:29,030 --> 00:18:31,740 I seguiré endavant i declarar int main (void). 369 00:18:31,740 --> 00:18:34,186 I després dins d'allà Vaig a fer int i _ - 370 00:18:34,186 --> 00:18:36,435 Vull posar en pràctica un programa d' amb un get_negative_int. 371 00:18:36,435 --> 00:18:39,146 372 00:18:39,146 --> 00:18:40,770 Això no és una funció que existeix encara. 373 00:18:40,770 --> 00:18:42,870 Així que anem a posar en pràctica en un moment. 374 00:18:42,870 --> 00:18:45,541 Però anem a veure per què és amb errors a la primera passada. 375 00:18:45,541 --> 00:18:47,290 I una vegada que he rebut 1 int l'usuari, 376 00:18:47,290 --> 00:18:53,365 Jo només vaig a imprimir% i és un negatiu nombre sencer, la barra invertida, n, coma, i. 377 00:18:53,365 --> 00:18:55,240 En altres paraules, tot el desitja que aquest programa per fer 378 00:18:55,240 --> 00:18:58,000 s'obtindrà una int negativa de l'usuari i després imprimir 379 00:18:58,000 --> 00:18:59,980 que tal i tal és un int negatiu. 380 00:18:59,980 --> 00:19:02,080 >> Ara necessito per implementar aquesta funció. 381 00:19:02,080 --> 00:19:05,740 Així que més endavant en el meu arxiu, aniré endavant i declarar una funció anomenada 382 00:19:05,740 --> 00:19:10,670 get_negative_int (void) - i anem a tornar al que significa una vegada més que la línia 383 00:19:10,670 --> 00:19:18,790 en un moment-- int n; fer-- do la following-- printf n és:. 384 00:19:18,790 --> 00:19:26,210 I després vaig a fer n - get_int, i fer això mentre que n és més gran que 0. 385 00:19:26,210 --> 00:19:28,310 I després tornar n;. 386 00:19:28,310 --> 00:19:31,730 >> Així que hi ha molt a fer en això, però cap dels quals no ho vam fer 387 00:19:31,730 --> 00:19:33,710 mirar la setmana passada, almenys breument. 388 00:19:33,710 --> 00:19:36,980 Així que en la línia 10 aquí he declarat una funció anomenada get_negative_int, 389 00:19:36,980 --> 00:19:39,620 i jo he posat (void), en parèntesi, la raó de ser d'aquest 390 00:19:39,620 --> 00:19:40,950 no té una entrada. 391 00:19:40,950 --> 00:19:42,910 No estic passant res a aquesta funció. 392 00:19:42,910 --> 00:19:44,690 M'estic fent alguna cosa a canvi d'ella. 393 00:19:44,690 --> 00:19:47,270 >> I el que estic esperant tornar és un nombre sencer. 394 00:19:47,270 --> 00:19:50,040 No hi ha cap tipus de dades en C diu negative_int. 395 00:19:50,040 --> 00:19:52,880 És només int, així que va per estar en nosaltres per assegurar 396 00:19:52,880 --> 00:19:55,340 que el valor que en realitat retornada és no només un int 397 00:19:55,340 --> 00:19:56,380 però també és negatiu. 398 00:19:56,380 --> 00:20:02,150 >> A la línia 12 que estic declarant una variable n trucada i el que és de tipus int. 399 00:20:02,150 --> 00:20:07,500 I després, en la línia 13 fins al 18 de Soy fer alguna cosa, mentre que alguna cosa és veritat. 400 00:20:07,500 --> 00:20:11,040 Vaig per davant i impressió n és a dir, còlon, i després un espai, 401 00:20:11,040 --> 00:20:12,800 com un indicador per a l'usuari. 402 00:20:12,800 --> 00:20:16,410 >> llavors jo estic trucant i get_int emmagatzemar el seu denominat valor de retorn 403 00:20:16,410 --> 00:20:18,130 en aquesta variable n. 404 00:20:18,130 --> 00:20:22,600 Però seguiré fent això mentre que n és més gran que 0. 405 00:20:22,600 --> 00:20:27,960 En altres paraules, si l'usuari dona una em int i aquest nombre és més gran que 0, 406 00:20:27,960 --> 00:20:31,180 ergo, positiu, vaig a només mantenir reprompting l'usuari, 407 00:20:31,180 --> 00:20:37,160 mantenir reprompting, obligant-los a cooperar i fes-me un int negatiu. 408 00:20:37,160 --> 00:20:41,640 >> I una vegada que n és en realitat negative-- Suposem que l'usuari finalment tipus -50, 409 00:20:41,640 --> 00:20:46,710 llavors aquest bucle while ja no és cert perquè -50 no és més gran que 0. 410 00:20:46,710 --> 00:20:51,140 Així que sortir d'aquest lògicament bucle i tornar n. 411 00:20:51,140 --> 00:20:53,520 >> Però hi ha una altra El que he de fer. 412 00:20:53,520 --> 00:20:56,190 I jo simplement puc fer això per copiar i enganxar 413 00:20:56,190 --> 00:20:58,540 una línia de codi a la part superior de l'arxiu. 414 00:20:58,540 --> 00:21:01,630 He de ensenyar a Clang, o promesa de so metàl·lic, 415 00:21:01,630 --> 00:21:04,630 explícitament que jo vull, de fet, anar i posar en pràctica 416 00:21:04,630 --> 00:21:06,020 aquesta funció get_negative_int. 417 00:21:06,020 --> 00:21:07,674 Potser només sigui inferior a l'arxiu. 418 00:21:07,674 --> 00:21:09,840 Un cop més, recordar que Clang llegeix coses de dalt a baix, 419 00:21:09,840 --> 00:21:12,330 d'esquerra a dreta, de manera que no pot cridar a una funció si Clang 420 00:21:12,330 --> 00:21:15,330 no sap que va a existir. 421 00:21:15,330 --> 00:21:18,430 >> Ara, per desgràcia, aquest programa, com alguns de vostès s'hauran adonat, 422 00:21:18,430 --> 00:21:19,590 Ja és buggy. 423 00:21:19,590 --> 00:21:21,400 Déjame seguir endavant i fer buggy3. 424 00:21:21,400 --> 00:21:26,904 Compila, pel que el meu problema ara no és un error de sintaxi, com un error textual, 425 00:21:26,904 --> 00:21:29,570 que és en realitat serà una lògica error que he deliberadament 426 00:21:29,570 --> 00:21:32,450 fet com una oportunitat per pas a través del que està passant. 427 00:21:32,450 --> 00:21:35,540 >> Vaig a seguir endavant ara i funcionament buggy3. 428 00:21:35,540 --> 00:21:37,490 I vaig a anar davant i no cooperar. 429 00:21:37,490 --> 00:21:39,494 Vaig a donar-li el número 1. 430 00:21:39,494 --> 00:21:41,410 Que no li va agradar, per la qual m'està provocant de nou. 431 00:21:41,410 --> 00:21:42,147 >> Què hi ha de 2? 432 00:21:42,147 --> 00:21:43,021 3? 433 00:21:43,021 --> 00:21:43,520 50? 434 00:21:43,520 --> 00:21:44,740 Cap dels que estan treballant. 435 00:21:44,740 --> 00:21:46,890 Què hi ha de -50? 436 00:21:46,890 --> 00:21:48,560 I el programa sembla funcionar. 437 00:21:48,560 --> 00:21:49,970 >> Déjame intentar-ho una vegada més. 438 00:21:49,970 --> 00:21:53,400 Permetin-me tractar -1, sembla que funciona. 439 00:21:53,400 --> 00:21:56,380 Permetin-me tractar -2, sembla que funciona. 440 00:21:56,380 --> 00:21:59,640 Permetin-me tractar de 0. 441 00:21:59,640 --> 00:22:01,684 Ei, això és incorrecte. 442 00:22:01,684 --> 00:22:03,350 Ara, estem sent una mica pedant aquí. 443 00:22:03,350 --> 00:22:07,090 Però és, de fet, el cas que 0 no és ni positiu ni negatiu. 444 00:22:07,090 --> 00:22:11,150 I així, el fet que el meu programa és dient que 0 és un enter negatiu, 445 00:22:11,150 --> 00:22:12,820 això no és tècnicament correcte. 446 00:22:12,820 --> 00:22:15,180 >> Ara, per què està fent això? 447 00:22:15,180 --> 00:22:16,270 Bé, pot ser que sigui obvi. 448 00:22:16,270 --> 00:22:18,110 I, de fet, el programa és destinat a ser bastant senzill 449 00:22:18,110 --> 00:22:19,670 així que tenim alguna cosa per explorar. 450 00:22:19,670 --> 00:22:25,870 >> Però anem a introduir un tercer depuració aquí es diu tècnica de debug50. 451 00:22:25,870 --> 00:22:27,750 Així que aquest és un programa que simplement hem creat 452 00:22:27,750 --> 00:22:30,770 aquest any es diu debug50 que li permetrà 453 00:22:30,770 --> 00:22:34,130 utilitzar el que s'anomena un predefinit depurador gràfic en IDE CS50. 454 00:22:34,130 --> 00:22:38,400 I un depurador és simplement un programa que en general, li permet executar el seu programa 455 00:22:38,400 --> 00:22:44,050 però pas a pas a pas, la línia per línia per línia, fent una pausa, furgant 456 00:22:44,050 --> 00:22:47,626 voltant, mirant a les variables de manera que el programa no es limita a bufar més enllà de vostè 457 00:22:47,626 --> 00:22:49,750 i imprimir ràpidament alguna cosa o no imprimir alguna cosa. 458 00:22:49,750 --> 00:22:53,250 Se li dóna una oportunitat, per la qual la velocitat humana, per interactuar amb ell. 459 00:22:53,250 --> 00:22:55,470 >> I per a això, simplement fer el següent. 460 00:22:55,470 --> 00:22:58,479 Després de compilar el codi, que ja vaig fer, buggy3, 461 00:22:58,479 --> 00:23:00,020 seguir endavant i executar debug50 ./buggy. 462 00:23:00,020 --> 00:23:03,460 463 00:23:03,460 --> 00:23:06,760 Tant com help50 ha d'executar help50 i llavors la comanda, 464 00:23:06,760 --> 00:23:10,120 debug50 ha d'executar i debug50 llavors el nom de la comanda. 465 00:23:10,120 --> 00:23:14,440 >> Ara observin el que passa a la meva pantalla, al costat dret en particular. 466 00:23:14,440 --> 00:23:19,400 Quan colpeig Executar, tota la panell de cop i volta aquest dret 467 00:23:19,400 --> 00:23:20,419 s'obre a la pantalla. 468 00:23:20,419 --> 00:23:22,210 I hi ha molt a fer en a primera vista. 469 00:23:22,210 --> 00:23:25,110 Però no hi ha massa molt de què preocupar-se encara. 470 00:23:25,110 --> 00:23:28,570 >> Això m'està mostrant tot que està passant dins del meu programa 471 00:23:28,570 --> 00:23:31,130 en aquest moment ia través d'aquests botons sobre de la tapa és llavors 472 00:23:31,130 --> 00:23:35,910 el que em permet el pas a través del meu codi en última instància, pas a pas a pas. 473 00:23:35,910 --> 00:23:37,140 Però no de moment. 474 00:23:37,140 --> 00:23:38,060 Observi el que passa. 475 00:23:38,060 --> 00:23:40,600 En la meva finestra de terminal Jo estic sent incitat per an. 476 00:23:40,600 --> 00:23:44,560 I vaig a seguir endavant i cooperar en aquesta ocasió i tipus de -1. 477 00:23:44,560 --> 00:23:48,770 I encara que una mica crípticament, -1 és un enter negatiu, com s'esperava. 478 00:23:48,770 --> 00:23:52,020 >> I llavors fill va acabar amb estat 0 gdbserver sortir. 479 00:23:52,020 --> 00:23:55,180 BGF, depurador de GNU, és el nom del programari subjacent 480 00:23:55,180 --> 00:23:56,620 que implementa aquest depurador. 481 00:23:56,620 --> 00:24:00,500 Però tot això significa en realitat, el depurador se'n va anar perquè el meu programa de deixar de fumar 482 00:24:00,500 --> 00:24:01,710 i tot estava bé. 483 00:24:01,710 --> 00:24:06,020 Si vull depurar realment el meu programa, He de dir-li preventivament debug50, 484 00:24:06,020 --> 00:24:08,920 on vull per començar passant a través del meu codi? 485 00:24:08,920 --> 00:24:11,750 >> I potser la forma més senzilla fer això és com segueix. 486 00:24:11,750 --> 00:24:15,300 Si hi ha sobre el canaleta del meu editor d'aquí, 487 00:24:15,300 --> 00:24:19,090 pel que en realitat només a la barra lateral aquí, a l'esquerra del nombre de línia, 488 00:24:19,090 --> 00:24:21,870 Recordeu que si només clic una vegada, vaig posar un petit punt vermell. 489 00:24:21,870 --> 00:24:24,460 I aquest petit punt vermell, com un senyal d'alt, mig, bé, 490 00:24:24,460 --> 00:24:29,430 debug50, pausa en l'execució de la meva codi just allà quan va executar aquest programa. 491 00:24:29,430 --> 00:24:30,260 >> Així que anem a fer això. 492 00:24:30,260 --> 00:24:37,340 Déjame anar per davant i córrer el meu programa de nou amb debug50 ./buggy3, Retorn. 493 00:24:37,340 --> 00:24:40,110 I ara, avís, alguna cosa diferent ha succeït. 494 00:24:40,110 --> 00:24:42,440 No estic que se li demani però, en la meva finestra de terminal 495 00:24:42,440 --> 00:24:45,430 per a res, perquè jo no tinc arribat allà encara en el meu programa. 496 00:24:45,430 --> 00:24:47,950 Cal notar que en la línia 8 que ara es posa en relleu, 497 00:24:47,950 --> 00:24:51,720 i hi ha una petita fletxa en dit esquerra, que es va aturar aquí. 498 00:24:51,720 --> 00:24:55,030 Aquesta línia de codi, la línia 8, encara no s'ha executat. 499 00:24:55,030 --> 00:24:58,940 >> I el que és curiós, si miro aquí al costat dret, 500 00:24:58,940 --> 00:25:03,530 adonar que i és un local de variable local en el sentit 501 00:25:03,530 --> 00:25:05,450 que hi ha dins de la funció actual. 502 00:25:05,450 --> 00:25:08,920 I el seu valor, pel que sembla, per defecte, i en certa manera convenientment, és 0. 503 00:25:08,920 --> 00:25:10,260 Però no em escrigui 0. 504 00:25:10,260 --> 00:25:13,410 Això només passa a ser el seu valor per defecte en el moment. 505 00:25:13,410 --> 00:25:15,490 >> Així que permetin-me seguir endavant i fer això ara. 506 00:25:15,490 --> 00:25:18,680 Déjame anar endavant i en la part superior dreta aquí, estic 507 00:25:18,680 --> 00:25:20,970 seguirà endavant i feu clic en aquesta icona dels primers quals 508 00:25:20,970 --> 00:25:25,360 significa passar per sobre del que significa no se salti però passar per sobre d'aquesta línia de codi, 509 00:25:25,360 --> 00:25:27,770 executar en el camí. 510 00:25:27,770 --> 00:25:30,710 >> I ara, compte, el meu ràpida acaba de canviar. 511 00:25:30,710 --> 00:25:31,380 Perquè és això? 512 00:25:31,380 --> 00:25:33,639 Li he dit a debug50, executar aquesta línia de codi. 513 00:25:33,639 --> 00:25:34,930 Què fa aquesta línia de codi fa? 514 00:25:34,930 --> 00:25:35,960 em porta a un int. 515 00:25:35,960 --> 00:25:36,460 D'ACORD. 516 00:25:36,460 --> 00:25:37,400 Permetin-me cooperar. 517 00:25:37,400 --> 00:25:41,340 Déjame anar endavant ara i escrigui -1, ENTER. 518 00:25:41,340 --> 00:25:42,920 I ara compte del que ha canviat. 519 00:25:42,920 --> 00:25:46,060 A la banda de la dreta, el meu variable local i 520 00:25:46,060 --> 00:25:48,200 s'indica com -1 ara. 521 00:25:48,200 --> 00:25:49,810 I segueix sent de tipus int. 522 00:25:49,810 --> 00:25:53,102 >> I avís, també, el meu anomenat la pila de trucades, on vaig fer una pausa? 523 00:25:53,102 --> 00:25:54,810 Parlarem més sobre això en el futur. 524 00:25:54,810 --> 00:25:58,620 Però la pila de trucades simplement es refereix al que funcions estan actualment en moviment. 525 00:25:58,620 --> 00:26:00,040 En aquest moment és simplement principal. 526 00:26:00,040 --> 00:26:03,590 I en aquest moment l'únic local de variable és i amb un valor d'1. 527 00:26:03,590 --> 00:26:09,840 >> I quan finalment passar per sobre d'aquesta línia aquí, amb aquest mateix icona a la part superior dreta, 528 00:26:09,840 --> 00:26:11,410 -1 És un enter negatiu. 529 00:26:11,410 --> 00:26:13,580 Ara s'està fent una pausa durant aquest claudàtor. 530 00:26:13,580 --> 00:26:14,740 Anem a deixar que faci la seva cosa. 531 00:26:14,740 --> 00:26:17,300 Dono un pas més d'aquesta línia, i llest. 532 00:26:17,300 --> 00:26:20,240 >> Així que no tot el que terriblement aclaridor però, 533 00:26:20,240 --> 00:26:23,550 però em va deixar una pausa i pensar amb lògica 534 00:26:23,550 --> 00:26:24,870 el que aquest programa està fent. 535 00:26:24,870 --> 00:26:26,890 Però aquest no va ser el cas errònia. 536 00:26:26,890 --> 00:26:28,510 Anem a fer això de nou de la següent manera. 537 00:26:28,510 --> 00:26:31,340 >> Vaig a sortir d'aquest punt d'interrupció en la línia 8 amb el punt vermell. 538 00:26:31,340 --> 00:26:32,830 Vaig a tornar a executar debug50. 539 00:26:32,830 --> 00:26:34,400 Es va fer una pausa automàticament aquí. 540 00:26:34,400 --> 00:26:37,660 Però aquesta vegada, en lloc de passant per sobre d'aquesta línia, 541 00:26:37,660 --> 00:26:42,290 me n'aniré en realitat dins get_negative_int i esbrinar, 542 00:26:42,290 --> 00:26:45,530 ¿Per què està acceptant 0 com una resposta vàlida? 543 00:26:45,530 --> 00:26:47,990 >> Així que en lloc de fer clic a Pas a pas per. 544 00:26:47,990 --> 00:26:50,630 Vaig a seguir endavant i feu clic a Pas a pas. 545 00:26:50,630 --> 00:26:54,030 I observi que la línia 8 que és Ara ressaltat ara de cop i volta 546 00:26:54,030 --> 00:26:56,900 es converteix en la línia 17. 547 00:26:56,900 --> 00:26:59,947 >> Ara, no és que el depurador ha saltat les línies 14 i 15 i 16. 548 00:26:59,947 --> 00:27:01,780 És que no hi ha res per mostrar-hi. 549 00:27:01,780 --> 00:27:04,050 Aquestes són només la declaració de variables, I després hi ha la paraula fer 550 00:27:04,050 --> 00:27:05,390 i després una clau d'obertura. 551 00:27:05,390 --> 00:27:09,227 L'única línia que és funcional sucosa realment és aquest d'aquí, 17. 552 00:27:09,227 --> 00:27:11,060 I aquí és on ens hem una pausa automàticament. 553 00:27:11,060 --> 00:27:13,870 >> Així printf ( "n.is:");, per la qual que encara no ha succeït. 554 00:27:13,870 --> 00:27:18,250 Així que seguirem endavant i feu clic a Pas a pas per. 555 00:27:18,250 --> 00:27:20,326 Ara el meu sistema, de fet, canviat a ( "n és:"). 556 00:27:20,326 --> 00:27:22,450 Ara get_int, no vaig molestar a entrar en, 557 00:27:22,450 --> 00:27:24,750 perquè que la funció era feta per CS50 a la Biblioteca. 558 00:27:24,750 --> 00:27:25,750 És presumiblement correcta. 559 00:27:25,750 --> 00:27:28,440 >> Així que seguiré endavant i tipus de cooperar donant-li 560 00:27:28,440 --> 00:27:30,590 un int, però no és un int negatiu. 561 00:27:30,590 --> 00:27:32,870 Així que permetin-me anar per davant i va colpejar 0. 562 00:27:32,870 --> 00:27:39,460 I ara el que passa aquí quan arribi fins a la línia 21? 563 00:27:39,460 --> 00:27:40,890 No he iterat de nou. 564 00:27:40,890 --> 00:27:43,320 No sembla que hi hagi encallat en aquest bucle. 565 00:27:43,320 --> 00:27:45,990 En altres paraules, aquest groc bar no seguir endavant voltant, 566 00:27:45,990 --> 00:27:47,130 i al voltant i voltant. 567 00:27:47,130 --> 00:27:48,340 >> Ara, per què? 568 00:27:48,340 --> 00:27:49,920 Bé, n, el que està n en aquest moment? 569 00:27:49,920 --> 00:27:53,280 Puc mirar a nivell local variables en el depurador. 570 00:27:53,280 --> 00:27:53,816 n és 0. 571 00:27:53,816 --> 00:27:55,190 Molt bé, quin era el meu condició? 572 00:27:55,190 --> 00:27:58,700 >> 20-- línia 20 és, així, 0 és més gran que 0. 573 00:27:58,700 --> 00:27:59,500 Això no és cert. 574 00:27:59,500 --> 00:28:01,020 0 no és més gran que 0. 575 00:28:01,020 --> 00:28:02,820 I pel que va sortir d'això. 576 00:28:02,820 --> 00:28:06,370 >> I per això és que en la línia 21, si realment continuo, 577 00:28:06,370 --> 00:28:10,370 Vaig a tornar 0, fins i tot tot i que hauria d'haver rebutjat 0 578 00:28:10,370 --> 00:28:12,484 que no sigui negatiu. 579 00:28:12,484 --> 00:28:14,650 Així que ara, realment no té ni es preocupen pel depurador. 580 00:28:14,650 --> 00:28:16,900 Tinc, el que no cal saber què més està passant. 581 00:28:16,900 --> 00:28:19,233 >> Així que seguiré endavant i només cal fer clic al botó Reproduir, 582 00:28:19,233 --> 00:28:20,240 i deixar que aquest acabat cap amunt. 583 00:28:20,240 --> 00:28:23,440 Ara, m'he adonat que la meva insecte és pel que sembla en la línia 20. 584 00:28:23,440 --> 00:28:25,160 Aquesta és la meva error lògic. 585 00:28:25,160 --> 00:28:28,100 >> I així ho vull de fer per canviar això? 586 00:28:28,100 --> 00:28:32,500 Si el problema és que no estic la captura de 0, que és només un error lògic. 587 00:28:32,500 --> 00:28:35,910 I puc dir, mentre que n és més gran que o igual a 0, 588 00:28:35,910 --> 00:28:38,330 mantenir a preguntar a l'usuari una vegada i una altra. 589 00:28:38,330 --> 00:28:41,050 >> Així, de nou, simple error, potser fins i tot òbvia quan em vas veure 590 00:28:41,050 --> 00:28:42,410 escriure-ho fa tan sols uns minuts. 591 00:28:42,410 --> 00:28:44,570 Però aquí el menjar per emportar és que amb depuració 50, 592 00:28:44,570 --> 00:28:46,850 i amb la depuració programari de manera més general, 593 00:28:46,850 --> 00:28:51,370 vostè té aquest nou poder de caminar a través del seu propi codi, mira 594 00:28:51,370 --> 00:28:55,590 a través d'aquest panell de la dreta ho els valors de les variables són. 595 00:28:55,590 --> 00:28:57,700 Pel que no necessàriament haver de fer servir alguna cosa 596 00:28:57,700 --> 00:29:00,630 com si EPRINTF per imprimir aquests valors. 597 00:29:00,630 --> 00:29:04,430 En realitat es pot veure visualment a la pantalla. 598 00:29:04,430 --> 00:29:08,920 >> Ara, més enllà d'això, val la pena assenyalar que no és altra tècnica que és 599 00:29:08,920 --> 00:29:09,890 en realitat molt comú. 600 00:29:09,890 --> 00:29:13,120 I un es pregunta per què aquesta petita tipus aquí s'ha assegut a l'escenari. 601 00:29:13,120 --> 00:29:16,490 Així que hi ha aquesta tècnica, en general, conegut com cautxú depuració d'ànec, 602 00:29:16,490 --> 00:29:18,786 que en realitat és només una testimoni del fet 603 00:29:18,786 --> 00:29:20,660 que sovint quan els programadors està escrivint codi, 604 00:29:20,660 --> 00:29:22,650 que no són necessàriament col·laborar amb els altres, 605 00:29:22,650 --> 00:29:24,030 o treballar en un entorn compartit. 606 00:29:24,030 --> 00:29:25,050 >> Són una espècie de a casa. 607 00:29:25,050 --> 00:29:25,910 Potser és tard a la nit. 608 00:29:25,910 --> 00:29:28,190 Estan tractant de figura a terme alguns errors en el seu codi. 609 00:29:28,190 --> 00:29:29,330 I no només estan veient. 610 00:29:29,330 --> 00:29:30,329 >> I no hi ha cap company de quart. 611 00:29:30,329 --> 00:29:31,250 No hi ha TF. 612 00:29:31,250 --> 00:29:32,680 No hi ha CA voltant. 613 00:29:32,680 --> 00:29:36,440 Tot el que tenen en la seva plataforma és aquest petit aneguet de goma. 614 00:29:36,440 --> 00:29:39,030 >> I així depuració ànec de goma és només aquesta invitació 615 00:29:39,030 --> 00:29:42,780 pensar en una cosa tan ximple ja que això com una criatura real 616 00:29:42,780 --> 00:29:46,940 i, de fet caminar a través del seu codi verbalment a aquest objecte inanimat. 617 00:29:46,940 --> 00:29:49,230 Així, per exemple, si aquest és el meu exemple aquí-- 618 00:29:49,230 --> 00:29:52,470 i recordar que abans el problema era això, 619 00:29:52,470 --> 00:29:58,140 si elimino aquesta primera línia de codi, i jo seguir endavant i fer buggy de 0 de nou, 620 00:29:58,140 --> 00:30:01,220 recordar que tenia aquests missatges d'error aquí. 621 00:30:01,220 --> 00:30:05,997 Així que la idea aquí, encara que ridícula sentir en el moment de fer això públicament, 622 00:30:05,997 --> 00:30:06,580 és que l'error. 623 00:30:06,580 --> 00:30:10,910 >> D'acord, pel que el meu problema és que tinc declarat implícitament una funció de biblioteca. 624 00:30:10,910 --> 00:30:12,610 I que la funció de biblioteca és printf. 625 00:30:12,610 --> 00:30:15,290 Declare-- bé, declarar em recorda de prototips. 626 00:30:15,290 --> 00:30:18,930 >> Això vol dir que necessito en realitat indicar al compilador per endavant el 627 00:30:18,930 --> 00:30:19,980 la funció es sembla. 628 00:30:19,980 --> 00:30:20,930 Espera un minut. 629 00:30:20,930 --> 00:30:23,580 No tenia io.h. norma 630 00:30:23,580 --> 00:30:24,530 Moltes gràcies. 631 00:30:24,530 --> 00:30:27,330 >> Pel que només aquest procés es de-- no cal tenir en realitat un ànec. 632 00:30:27,330 --> 00:30:29,819 Però aquesta idea de caminar a si mateix a través del seu propi codi 633 00:30:29,819 --> 00:30:31,610 de manera que fins se sent vostè mateix, de manera que vostè 634 00:30:31,610 --> 00:30:35,620 adonar-omissions en el seu propi observacions, és en general la idea. 635 00:30:35,620 --> 00:30:38,910 >> I, potser més lògicament, no tan amb molt a un, però el més implicat 636 00:30:38,910 --> 00:30:44,220 exemple que acabem de fer en 3.c amb errors, pot caminar a si mateix a través d'ell 637 00:30:44,220 --> 00:30:45,310 com segueix. 638 00:30:45,310 --> 00:30:49,190 Així bé, el cautxú aneguet, DDB, si es vol. 639 00:30:49,190 --> 00:30:52,350 Aquí tenim en la meva funció principal, Vaig a trucar a aconseguir int negatiu. 640 00:30:52,350 --> 00:30:54,660 >> I estic aconseguint el valor de retorn. 641 00:30:54,660 --> 00:31:00,410 Estic emmagatzemant a la banda esquerra en la línia 8 en una variable anomenada i. 642 00:31:00,410 --> 00:31:02,380 OK, però espera, com que reben aquest valor? 643 00:31:02,380 --> 00:31:04,130 Deixa que et miri la funció en la línia 12. 644 00:31:04,130 --> 00:31:05,760 >> En la línia 12, hem d'aconseguir int negatiu. 645 00:31:05,760 --> 00:31:08,190 No es necessita cap input, no retornar un int, OK. 646 00:31:08,190 --> 00:31:10,929 Declaro en la línia 14 una variable n. 647 00:31:10,929 --> 00:31:12,220 Es va a emmagatzemar un nombre sencer. 648 00:31:12,220 --> 00:31:13,760 Això és el que vull. 649 00:31:13,760 --> 00:31:18,480 >> El mateix passa amb la següent, mentre que n és-- va deixar Em desfer el que el punt de referència que ja va fer. 650 00:31:18,480 --> 00:31:22,710 Així, mentre que n és més gran que 0, imprimiu n és, a D'acord. 651 00:31:22,710 --> 00:31:25,170 I després trucar a quedar emmagatzemat int n. 652 00:31:25,170 --> 00:31:30,160 I a continuació, comprovar si n és 0, n és no-- aquí està. 653 00:31:30,160 --> 00:31:31,910 Així, de nou, no ho fa necessitarà l'ànec real. 654 00:31:31,910 --> 00:31:35,650 Però només caminar vostè mateix a través el seu codi com un exercici intel·lectual 655 00:31:35,650 --> 00:31:37,720 sovint l'ajudarà adonar-se del que està passant, 656 00:31:37,720 --> 00:31:41,170 en lloc de només fer alguna cosa així, mirant a la pantalla, 657 00:31:41,170 --> 00:31:43,720 i no parlar-se a si mateix a través ell, que sincerament no és 658 00:31:43,720 --> 00:31:46,270 gairebé com una tècnica eficaç. 659 00:31:46,270 --> 00:31:48,620 Així que aquí ho tenen, un nombre de diferents tècniques 660 00:31:48,620 --> 00:31:52,102 de fet la depuració del seu codi i la recerca d'errors, tots els quals 661 00:31:52,102 --> 00:31:54,810 han de ser eines en la seva caixa d'eines de manera que vostè no és tard a la nit, 662 00:31:54,810 --> 00:31:57,660 sobretot, que ets al menjador passadissos, o en horari d'oficina, 663 00:31:57,660 --> 00:32:00,368 un cop al cap contra la paret, tractant de resoldre algun problema. 664 00:32:00,368 --> 00:32:02,020 S'adonen que hi ha eines de programari. 665 00:32:02,020 --> 00:32:03,720 Hi eines d'ànec de goma. 666 00:32:03,720 --> 00:32:09,630 I hi ha tota una plantilla de donar suport a l'espera de donar un cop de mà. 667 00:32:09,630 --> 00:32:13,120 >> Així que ara, unes paraules sobre el problema conjunts, i en el que vostè està esperant 668 00:32:13,120 --> 00:32:15,620 sortir d'ells, i com ens ocupem de l'avaluació. 669 00:32:15,620 --> 00:32:17,680 Per programa del curs, butlletins de problemes de CS50 670 00:32:17,680 --> 00:32:22,320 són avaluats en quatre eixos primaris, per la qual speak-- a l'àmbit d'aplicació, correcció, disseny, 671 00:32:22,320 --> 00:32:23,060 i l'estil. 672 00:32:23,060 --> 00:32:25,910 I abast només es refereix a la quantitat de de la peça que ha mossegat? 673 00:32:25,910 --> 00:32:28,080 Quant d'un problema ha intentat? 674 00:32:28,080 --> 00:32:30,110 Quin nivell d'esforç ¿Ha manifestat? 675 00:32:30,110 --> 00:32:35,750 >> La correcció és, funciona el programa com se suposa que segons l'especificació CS50 676 00:32:35,750 --> 00:32:38,640 quan es proporciona certes entrades o certes sortides a tornar? 677 00:32:38,640 --> 00:32:41,130 El disseny és el més subjectiu d'ells. 678 00:32:41,130 --> 00:32:43,360 I és el que es que més triguen a aprendre 679 00:32:43,360 --> 00:32:47,220 i el més llarg per ensenyar, en la mesura que es redueix a, 680 00:32:47,220 --> 00:32:49,530 el ben escrit és el codi? 681 00:32:49,530 --> 00:32:52,920 >> És una cosa que acaba d'imprimir la correcta sortides o retornen els valors correctes. 682 00:32:52,920 --> 00:32:55,400 Però ho fas com eficientment com sigui possible? 683 00:32:55,400 --> 00:32:58,210 ¿Ho està fent bretxa i conquerir, o binari 684 00:32:58,210 --> 00:33:01,500 cerca com aviat veurem que vam fer Fa dues setmanes, amb la guia telefònica? 685 00:33:01,500 --> 00:33:04,670 Hi ha millors maneres de resoldre el problema que actualment té aquí? 686 00:33:04,670 --> 00:33:06,380 Això és una oportunitat per a un millor disseny. 687 00:33:06,380 --> 00:33:08,530 >> I llavors style-- com bonic és el codi? 688 00:33:08,530 --> 00:33:12,370 Es donarà compte de que estic bastant en particular sobre la sagnia meu codi, 689 00:33:12,370 --> 00:33:15,300 i assegurant-se que la meva variables es nomenen raonable. n, 690 00:33:15,300 --> 00:33:19,660 mentre resum, és un bon nom per a una nombre, i per un nombre enter de comptatge, 691 00:33:19,660 --> 00:33:20,727 s per a una cadena. 692 00:33:20,727 --> 00:33:22,560 I podem tenir més llarg estil dels noms de variables. 693 00:33:22,560 --> 00:33:25,500 L'estil és el bo Com es veu el codi? 694 00:33:25,500 --> 00:33:26,600 I com llegible és? 695 00:33:26,600 --> 00:33:29,650 >> I amb el temps, quina és la seva TA i TFS van a fer en el curs 696 00:33:29,650 --> 00:33:31,870 que es proporcionarà amb aquest tipus de retroalimentació qualitativa 697 00:33:31,870 --> 00:33:34,330 de manera que s'obté una millor en aquests diversos aspectes. 698 00:33:34,330 --> 00:33:37,510 I pel que fa a la forma en què avaluar cada un d'aquests eixos, 699 00:33:37,510 --> 00:33:40,080 que és típicament amb molt pocs cubs perquè, en general, 700 00:33:40,080 --> 00:33:41,680 tenir una idea de com està fent. 701 00:33:41,680 --> 00:33:45,680 I, de fet, si rep una puntuació en qualsevol dels axes-- correcció, disseny 702 00:33:45,680 --> 00:33:49,659 i l'estil especially-- aquest nombre generalment serà d'entre 1 i 5. 703 00:33:49,659 --> 00:33:52,450 I, literalment, si vostè està rebent 3 de l'inici del semestre, 704 00:33:52,450 --> 00:33:53,977 això és una cosa molt bona. 705 00:33:53,977 --> 00:33:55,810 Això vol dir que encara hi ha marge de millora, 706 00:33:55,810 --> 00:33:58,490 la qual és d'esperar en el prendre una classe per primera vegada. 707 00:33:58,490 --> 00:34:01,820 No és d'esperar algun fragment de sostre a la qual està aspirant a assolir. 708 00:34:01,820 --> 00:34:03,970 I així aconseguir el de 3 les primeres peces, 709 00:34:03,970 --> 00:34:06,550 si no un 2 i de 4 de, és, de fet, una bona cosa. 710 00:34:06,550 --> 00:34:08,880 És també dins de l'abast, bé dins del que s'esperava. 711 00:34:08,880 --> 00:34:11,421 >> I si la seva ment està corrent, esperi un minut, tres de cada cinc. 712 00:34:11,421 --> 00:34:12,620 Això és realment una sortida 6 oct. 713 00:34:12,620 --> 00:34:13,560 Això és 60%. 714 00:34:13,560 --> 00:34:14,830 Déu meu, que és una F. 715 00:34:14,830 --> 00:34:15,870 >> No és. 716 00:34:15,870 --> 00:34:17,600 No és, de fet, que. 717 00:34:17,600 --> 00:34:22,710 Més aviat, és una oportunitat per millorar en el transcurs del semestre. 718 00:34:22,710 --> 00:34:25,580 I si vostè està rebent alguna Poors, es tracta d'una oportunitat 719 00:34:25,580 --> 00:34:29,199 per aprofitar les hores d'oficina, certament, seccions i altres recursos. 720 00:34:29,199 --> 00:34:32,840 >> El millor és l'oportunitat, de veritat, per estar orgullosos del que lluny que ha 721 00:34:32,840 --> 00:34:34,520 arribat en el transcurs del semestre. 722 00:34:34,520 --> 00:34:38,199 Així que adonar-se, si res la resta, tres és bona. 723 00:34:38,199 --> 00:34:40,179 I permet espai per al creixement en el temps. 724 00:34:40,179 --> 00:34:43,090 >> Pel que fa a la forma en què aquests eixos són ponderada, de manera realista que estiguis 725 00:34:43,090 --> 00:34:46,745 passarà la major part del seu temps aconseguir coses per treballar, per no parlar correctament. 726 00:34:46,745 --> 00:34:49,120 I així tendeix a la correcció ponderar el més, com amb 727 00:34:49,120 --> 00:34:51,360 aquest factor multiplicador de tres. 728 00:34:51,360 --> 00:34:54,659 El disseny també és important, però cosa que no necessàriament 729 00:34:54,659 --> 00:34:58,220 passar totes aquestes hores en tractant d'aconseguir coses per treballar. 730 00:34:58,220 --> 00:35:00,019 >> I així es pondera una mica més lleugera. 731 00:35:00,019 --> 00:35:01,560 I a continuació, l'estil es pondera el menys. 732 00:35:01,560 --> 00:35:03,710 Tot i que no és menys fonamentalment important, 733 00:35:03,710 --> 00:35:05,990 És que, potser, el El més fàcil de fer el bé, 734 00:35:05,990 --> 00:35:08,440 imitant els exemples que fer en la conferència i la secció, 735 00:35:08,440 --> 00:35:11,080 amb les coses Nicely sangria, i va comentar: 736 00:35:11,080 --> 00:35:14,320 i així successivament està entre els més fàcils coses a fer i fer-ho bé. 737 00:35:14,320 --> 00:35:16,960 Així que, com a tal, s'adonen que aquestes són punts 738 00:35:16,960 --> 00:35:19,000 que són relativament fàcils d'entendre. 739 00:35:19,000 --> 00:35:22,360 >> I ara una paraula de esto-- honestedat acadèmica. 740 00:35:22,360 --> 00:35:25,150 Així pel curs de programa, veurà 741 00:35:25,150 --> 00:35:27,630 que el curs té un bon mica de llenguatge d'evitar això. 742 00:35:27,630 --> 00:35:31,380 I el curs es porta a la qüestió de la honestedat acadèmica molt seriosament. 743 00:35:31,380 --> 00:35:33,450 >> Tenim la distinció, per bé o per mal, 744 00:35:33,450 --> 00:35:36,570 d'haver enviat cada any més estudiants per prendre mesures disciplinàries 745 00:35:36,570 --> 00:35:39,670 que la majoria de qualsevol altre Per descomptat, que jo sàpiga. 746 00:35:39,670 --> 00:35:42,580 Això no és necessàriament indicatiu del fet 747 00:35:42,580 --> 00:35:46,340 que els estudiants CS, o els estudiants, són CS50 menys honest que els seus companys de classe. 748 00:35:46,340 --> 00:35:49,090 Però la realitat que en aquest món, per via electrònica, només 749 00:35:49,090 --> 00:35:50,990 tenen tecnològica mitjans de detecció d'aquest. 750 00:35:50,990 --> 00:35:53,360 >> És important per a nosaltres per equitat a través de la classe 751 00:35:53,360 --> 00:35:58,550 el que fem detectar això, i elevar la qüestió quan veiem coses. 752 00:35:58,550 --> 00:36:01,980 I només per pintar un quadre, i realment per ajudar a alguna cosa com això a la pica, 753 00:36:01,980 --> 00:36:04,600 aquests són els números de estudiants en els últims 10 anys 754 00:36:04,600 --> 00:36:07,610 que han estat involucrats en alguns aquestes qüestions d'honestedat acadèmica, 755 00:36:07,610 --> 00:36:10,990 amb uns 32 estudiants des de la tardor de 2015, que 756 00:36:10,990 --> 00:36:13,760 és a dir que nosaltres vam prendre l'assumpte molt seriosament. 757 00:36:13,760 --> 00:36:18,380 I, en última instància, aquests números componen, més recentment, al voltant de 3%, 4% o menys 758 00:36:18,380 --> 00:36:19,120 de la classe. 759 00:36:19,120 --> 00:36:25,220 >> Així que per a la majoria absoluta dels estudiants sembla que les línies estan clares. 760 00:36:25,220 --> 00:36:27,940 Però tingui això en ment, particularment tard 761 00:36:27,940 --> 00:36:32,080 a la nit quan lluita amb alguna solució a un conjunt de problemes, 762 00:36:32,080 --> 00:36:34,830 l'existència de mecanismes per arribar millor a si mateix 763 00:36:34,830 --> 00:36:37,870 el suport del que es pensar, fins i tot a aquesta hora. 764 00:36:37,870 --> 00:36:40,514 Adonar-se que quan vam rebre enviaments dels estudiants, que es creuen 765 00:36:40,514 --> 00:36:43,430 comparar cada presentació aquest any en contra de cada presentació l'any passat, 766 00:36:43,430 --> 00:36:47,590 contra tots els enviaments a partir del 2007, i des de, mirant, així, 767 00:36:47,590 --> 00:36:49,931 codi dels repositoris en línia, fòrums de discussió, llocs de treball. 768 00:36:49,931 --> 00:36:51,806 I esmentem això, Realment, tot en nom 769 00:36:51,806 --> 00:36:56,040 de la divulgació completa, que si una altra persona pot trobar en línia, 770 00:36:56,040 --> 00:36:57,880 sens dubte, per la qual cosa pot ser que el curs. 771 00:36:57,880 --> 00:37:00,100 Però, en realitat, l'esperit del curs es redueix 772 00:37:00,100 --> 00:37:01,650 a aquesta clàusula en el programa d'estudis. 773 00:37:01,650 --> 00:37:03,670 Realment és just, sigui raonable. 774 00:37:03,670 --> 00:37:06,680 >> I si haguéssim d'elaborar en això amb només una mica més la llengua, 775 00:37:06,680 --> 00:37:09,770 adonar-se que l'essència de tot el treball que enviï a aquest curs 776 00:37:09,770 --> 00:37:10,954 ha de ser la seva. 777 00:37:10,954 --> 00:37:13,870 Però dins d'això, sens dubte hi ha oportunitats i l'estímul, 778 00:37:13,870 --> 00:37:17,300 i el valor pedagògic en la transformació de altres-- mi mateix, el TFS, les entitats emissores, 779 00:37:17,300 --> 00:37:20,760 les AT, i altres a la classe, per al suport, que els seus amics sols 780 00:37:20,760 --> 00:37:23,547 i companys que han estudiat CS i programació abans. 781 00:37:23,547 --> 00:37:25,130 I pel que hi ha un marge per a això. 782 00:37:25,130 --> 00:37:28,180 I la regla general del polze es això- quan es demana ajuda, 783 00:37:28,180 --> 00:37:31,470 vostè pot mostrar el seu codi als altres, però vostè no pot veure la seva. 784 00:37:31,470 --> 00:37:34,880 Així que fins i tot si vostè està en horari d'oficina, oa la sala D, o en un altre lloc 785 00:37:34,880 --> 00:37:37,450 treballant en algun conjunt peça, treballant al costat d'un amic, que 786 00:37:37,450 --> 00:37:40,160 és totalment bé, en el final del dia el seu treball 787 00:37:40,160 --> 00:37:43,034 en última instància, han de pertànyer a cada que, respectivament, i no 788 00:37:43,034 --> 00:37:45,700 haver algun esforç de col·laboració, excepte per al projecte final on 789 00:37:45,700 --> 00:37:47,410 es permet i s'anima. 790 00:37:47,410 --> 00:37:49,830 >> Adonar-se que si estàs lluitant amb alguna cosa 791 00:37:49,830 --> 00:37:52,520 i el seu amic només passa per ser millor en això, llavors, 792 00:37:52,520 --> 00:37:55,130 o millor en aquest problema que tu, o una mica més endavant que vostè, 793 00:37:55,130 --> 00:37:57,330 que és totalment raonable per activar al seu amic i dir, hey, 794 00:37:57,330 --> 00:38:00,480 ¿Li importa mirant el meu codi aquí, ajudar-me albiro el que el meu problema és? 795 00:38:00,480 --> 00:38:03,760 I, amb sort, al interès del valor pedagògic 796 00:38:03,760 --> 00:38:07,040 aquest amic ho fa no només a dir, oh, fer això, sinó més aviat, 797 00:38:07,040 --> 00:38:09,917 el que li falta a la línia 6, o alguna cosa per l'estil? 798 00:38:09,917 --> 00:38:12,000 No obstant això, la solució no és per l'amic al teu costat 799 00:38:12,000 --> 00:38:15,617 a dir, oh, bé, aquí, deixa, trobaré això, i mostrar la meva solució per a vostè. 800 00:38:15,617 --> 00:38:16,450 Així que aquesta és la línia. 801 00:38:16,450 --> 00:38:18,670 Vostè mostra el seu codi de altres, però no es pot 802 00:38:18,670 --> 00:38:22,350 veure els seus, sense perjudici de l'altra restriccions en el curs del programa. 803 00:38:22,350 --> 00:38:24,760 >> Així que tenir en compte aquesta així anomenada clàusula de penediment 804 00:38:24,760 --> 00:38:27,560 en el programa del curs, així, que si comet algun acte que 805 00:38:27,560 --> 00:38:30,476 No és raonable, però portar-lo a l'atenció dels caps del curs 806 00:38:30,476 --> 00:38:34,240 dins de les 72 hores, el curs pot imposar sancions locals que 807 00:38:34,240 --> 00:38:37,380 pot incloure un insatisfactori o el grau d'fall per al treball presentat. 808 00:38:37,380 --> 00:38:41,410 Però el curs no es referirà al matèria de noves mesures disciplinàries, 809 00:38:41,410 --> 00:38:43,010 excepte en els casos d'actes repetits. 810 00:38:43,010 --> 00:38:46,632 En altres paraules, si vostè fa alguns estúpida, nit especialment al final, la decisió 811 00:38:46,632 --> 00:38:49,340 que al matí següent o dos dies més tard, es desperta i s'adona, 812 00:38:49,340 --> 00:38:50,870 ¿Què estava pensant? 813 00:38:50,870 --> 00:38:53,890 Vostè pot fer en CS50 tenir una sortida per a la fixació d'aquest problema 814 00:38:53,890 --> 00:38:57,170 i ser amo de l'altura, de manera que l'esperarà fins a la meitat i tractar 815 00:38:57,170 --> 00:39:01,500 amb ell en un assumpte que és alhora educatiu i valuós per a vostè, 816 00:39:01,500 --> 00:39:04,200 però encara punitiu d'alguna manera. 817 00:39:04,200 --> 00:39:08,590 I ara, en arribar al límit, això. 818 00:39:08,590 --> 00:39:10,570 >> [REPRODUCCIÓ DE VÍDEO] 819 00:39:10,570 --> 00:39:13,540 >> [MÚSICA] 820 00:39:13,540 --> 00:39:58,090 821 00:39:58,090 --> 00:39:58,866 >> [FI DE REPRODUCCIÓ] 822 00:39:58,866 --> 00:40:00,490 DAVID J. Malan: Molt bé, estem de tornada. 823 00:40:00,490 --> 00:40:03,680 I ara ens fixem en una de les primer dels nostres dominis del món real 824 00:40:03,680 --> 00:40:08,720 en CS50, l'art de la criptografia, l'art d'enviar i rebre 825 00:40:08,720 --> 00:40:11,840 missatges secrets, xifrada missatges si es vol, 826 00:40:11,840 --> 00:40:17,060 que només pot ser desxifrat si té alguns ingredient clau que el remitent té 827 00:40:17,060 --> 00:40:18,030 tant be. 828 00:40:18,030 --> 00:40:22,120 Així que per motivar això anem a prendre Un cop d'ull a aquesta cosa aquí, 829 00:40:22,120 --> 00:40:26,750 que és un exemple d'una anell descodificador que secreta 830 00:40:26,750 --> 00:40:34,042 es pot utilitzar per tal d'esbrinar el que és un missatge secret en realitat és. 831 00:40:34,042 --> 00:40:35,750 De fet, de tornada al dia a l'escola primària, 832 00:40:35,750 --> 00:40:38,787 si alguna vegada has enviat missatges secrets a algun amic o algun aixafament a classe, 833 00:40:38,787 --> 00:40:40,620 que podria haver pensat estaves sent intel·ligent 834 00:40:40,620 --> 00:40:46,530 pel canvi del seu tros de paper, de la mateixa manera que, d'A a B i de B a C i C a D, 835 00:40:46,530 --> 00:40:47,590 i així successivament. 836 00:40:47,590 --> 00:40:50,300 Però ja han estat realment xifrant seva informació, fins i tot 837 00:40:50,300 --> 00:40:53,300 si era una mica trivial, no era que dura perquè el professor s'adona, 838 00:40:53,300 --> 00:40:55,675 així, si vostè acaba de canviar B a A i C a B, 839 00:40:55,675 --> 00:40:57,550 que en realitat esbrinar el que el missatge era, 840 00:40:57,550 --> 00:40:59,700 però estaves en la informació de xifrat. 841 00:40:59,700 --> 00:41:03,420 >> Només estaves fent Simplement, igual que Ralphie aquí 842 00:41:03,420 --> 00:41:07,934 en una famosa pel·lícula que juga més o menys fins a la sacietat cada hivern. 843 00:41:07,934 --> 00:41:08,600 [REPRODUCCIÓ DE VÍDEO] 844 00:41:08,600 --> 00:41:11,180 -ja Sigui sabut per tots que Ralph Parker està present 845 00:41:11,180 --> 00:41:14,070 nomenat membre de la Petita Orphan Annie cercle secret 846 00:41:14,070 --> 00:41:17,700 i té dret a tots els honors i beneficis es produeixen a la mateixa. 847 00:41:17,700 --> 00:41:24,340 >> -signat, Little Orphan Annie, ratificat Pierre Andre, en tinta. 848 00:41:24,340 --> 00:41:27,160 Honors i beneficis, Ja a l'edat de nou anys. 849 00:41:27,160 --> 00:41:30,490 850 00:41:30,490 --> 00:41:31,825 >> [CRIT] 851 00:41:31,825 --> 00:41:33,750 852 00:41:33,750 --> 00:41:34,250 -Vinga. 853 00:41:34,250 --> 00:41:35,210 Seguirem endavant amb ella. 854 00:41:35,210 --> 00:41:39,530 No necessito tot aquest jazz sobre contrabandistes i pirates. 855 00:41:39,530 --> 00:41:41,660 >> demà a la nit per -listen l'aventura de conclusió 856 00:41:41,660 --> 00:41:43,880 del vaixell pirata negre. 857 00:41:43,880 --> 00:41:46,650 Ara, és el moment de missatge secret d'Annie 858 00:41:46,650 --> 00:41:49,840 per a vosaltres, els membres del Cercle Secret. 859 00:41:49,840 --> 00:41:53,570 Recordeu, els nens, els únics membres del cercle secret d'Annie 860 00:41:53,570 --> 00:41:56,140 pot descodificar el missatge secret d'Annie. 861 00:41:56,140 --> 00:42:00,340 >> Recordeu, Annie depèn de tu. 862 00:42:00,340 --> 00:42:02,880 Establir les seves passadors a B2. 863 00:42:02,880 --> 00:42:05,230 Aquí està el missatge. 864 00:42:05,230 --> 00:42:06,090 12, 11-- 865 00:42:06,090 --> 00:42:10,250 >> -Estic En la meva primera reunió secreta. 866 00:42:10,250 --> 00:42:13,890 >> -14, 11, 18, 16. 867 00:42:13,890 --> 00:42:15,780 >> -Pierre Va ser en gran veu aquesta nit. 868 00:42:15,780 --> 00:42:19,000 Podria dir que aquesta nit missatge era realment important. 869 00:42:19,000 --> 00:42:22,694 >> -3, 25, això és un missatge Annie de si mateixa. 870 00:42:22,694 --> 00:42:23,860 Recordeu, no dir-li a ningú. 871 00:42:23,860 --> 00:42:28,760 872 00:42:28,760 --> 00:42:32,930 >> -90 Segons més tard, estic en l'únic habitació de la casa on un nen de nou anys 873 00:42:32,930 --> 00:42:37,040 podria seure a la privacitat i la descodificació. 874 00:42:37,040 --> 00:42:39,730 Aha, B! 875 00:42:39,730 --> 00:42:42,360 Vaig anar a la següent, I. 876 00:42:42,360 --> 00:42:44,520 >> La primera paraula és ser. 877 00:42:44,520 --> 00:42:49,032 S, que havia de venir més fàcil ara, U, 25-- 878 00:42:49,032 --> 00:42:51,733 >> Oh, anem, Ralphie, me n'he d'anar! 879 00:42:51,733 --> 00:42:53,688 >> -Vaig A estar ben baix, Ma! 880 00:42:53,688 --> 00:42:54,188 Caram! 881 00:42:54,188 --> 00:42:58,116 882 00:42:58,116 --> 00:43:04,060 >> -T, O, asseguri A-- estar segur de què? 883 00:43:04,060 --> 00:43:05,970 Quina va ser la huerfanita Annie tractant de dir? 884 00:43:05,970 --> 00:43:07,264 Assegureu-vos que? 885 00:43:07,264 --> 00:43:09,634 >> -Ralphie, Andy ha de GO, feu el favor de sortir? 886 00:43:09,634 --> 00:43:10,480 >> -Tots Dreta, Ma! 887 00:43:10,480 --> 00:43:12,880 Vaig a estar bé! 888 00:43:12,880 --> 00:43:14,550 >> -I Estava més a prop ara. 889 00:43:14,550 --> 00:43:16,620 La tensió era terrible. 890 00:43:16,620 --> 00:43:17,720 Què era això? 891 00:43:17,720 --> 00:43:20,170 El destí del planeta pot penjar d'un fil. 892 00:43:20,170 --> 00:43:20,670 >> -Ralphie! 893 00:43:20,670 --> 00:43:23,170 Ha d'anar d'Andy! 894 00:43:23,170 --> 00:43:26,890 >> -Vaig A estar a la dreta, per amor de Déu! 895 00:43:26,890 --> 00:43:32,680 >> -gairebé Allà, els meus dits volaven, la meva ment Era un parany d'acer, cada porus va vibrar. 896 00:43:32,680 --> 00:43:37,198 Era gairebé clara, sí, sí, sí. 897 00:43:37,198 --> 00:43:43,091 >> -Assegureu-Vos De beure la seva Ovaltine. 898 00:43:43,091 --> 00:43:43,590 Ovaltine? 899 00:43:43,590 --> 00:43:48,160 900 00:43:48,160 --> 00:43:49,430 Un comercial de mala mort? 901 00:43:49,430 --> 00:43:53,046 902 00:43:53,046 --> 00:43:54,227 Fill de puta. 903 00:43:54,227 --> 00:43:54,810 [FI DE REPRODUCCIÓ] 904 00:43:54,810 --> 00:43:57,390 DAVID J. Malan: OK, llavors que era un camí molt llarg 905 00:43:57,390 --> 00:44:00,660 de la introducció de la criptografia, i també Ovaltine. 906 00:44:00,660 --> 00:44:04,470 De fet, a partir d'aquest anunci d'edat aquí, per què és tan bo Ovaltine? 907 00:44:04,470 --> 00:44:09,470 És una extracció concentrada d'madur malta d'ordi, llet pura de vaca cremós, 908 00:44:09,470 --> 00:44:14,360 i especialment preparat de cacau, juntament amb fosfats naturals i vitamines. 909 00:44:14,360 --> 00:44:18,240 Està fortificada amb major vitamines addicionals B i D, nyam. 910 00:44:18,240 --> 00:44:21,600 I encara es pot aconseguir que, segons sembla, a Amazon, com ho vam fer aquí. 911 00:44:21,600 --> 00:44:24,810 >> Però la motivació aquí era introduir la criptografia, en concret 912 00:44:24,810 --> 00:44:28,340 un tipus de criptografia coneguda com criptografia de clau secreta. 913 00:44:28,340 --> 00:44:34,284 I com el seu nom indica, el conjunt la seguretat d'un sistema de criptografia de clau secreta, 914 00:44:34,284 --> 00:44:36,200 si es vol, una metodologia per només aleatorització 915 00:44:36,200 --> 00:44:40,960 informació entre dues persones, és que només el remitent i només el destinatari 916 00:44:40,960 --> 00:44:46,980 saber un secret key-- algun valor, alguns frase secreta, un número secret, que 917 00:44:46,980 --> 00:44:50,660 els permet xifrar i desxifrar la informació. 918 00:44:50,660 --> 00:44:53,470 I la criptografia, en realitat, és només això des de la setmana 0. 919 00:44:53,470 --> 00:44:56,715 >> És un problema on no hi ha entrades, de la mateixa manera que el missatge real en Anglès 920 00:44:56,715 --> 00:44:59,340 o qualsevol altre idioma que es voleu enviar a algú de la classe, 921 00:44:59,340 --> 00:45:00,580 oa través d'internet. 922 00:45:00,580 --> 00:45:03,840 Hi ha una mica de sortida, que es va sent el missatge codificat que 923 00:45:03,840 --> 00:45:05,250 vol que el destinatari rebre. 924 00:45:05,250 --> 00:45:07,405 I fins i tot si algú en el mitjà rep també, 925 00:45:07,405 --> 00:45:09,780 vostè no vol que es necessàriament serà capaç de desxifrar-lo, 926 00:45:09,780 --> 00:45:12,840 perquè dins d'aquest quadre negre, o algoritme, 927 00:45:12,840 --> 00:45:17,650 és algun mecanisme, alguns pas a pas instruccions, per prendre aquesta entrada 928 00:45:17,650 --> 00:45:20,710 i convertir-lo en el de sortida, és d'esperar en una forma segura. 929 00:45:20,710 --> 00:45:23,640 >> I, de fet, hi ha una certa Vocabulari en aquest món de la següent manera. 930 00:45:23,640 --> 00:45:26,100 El text pla és la paraula d'una informàtic faria 931 00:45:26,100 --> 00:45:28,449 utilitzar per descriure l'entrada missatge, com l'anglès 932 00:45:28,449 --> 00:45:31,240 o qualsevol idioma que en realitat voler enviar a algun altre ésser humà. 933 00:45:31,240 --> 00:45:35,450 I a continuació, el text xifrat és la lluita a xifrada o encriptada, 934 00:45:35,450 --> 00:45:36,520 versió de la mateixa. 935 00:45:36,520 --> 00:45:38,750 >> Però hi ha un altre ingredient aquí. 936 00:45:38,750 --> 00:45:43,200 Hi ha una altra entrada al La criptografia de clau secreta. 937 00:45:43,200 --> 00:45:45,200 I aquesta és la clau, que és, en general, 938 00:45:45,200 --> 00:45:48,930 com veurem, un nombre, o lletra o paraula, qualsevol que sigui 939 00:45:48,930 --> 00:45:51,980 l'algoritme que és en realitat espera. 940 00:45:51,980 --> 00:45:53,870 >> I com desxifrar la informació? 941 00:45:53,870 --> 00:45:55,110 Com es pot desxifrar? 942 00:45:55,110 --> 00:45:57,950 Bé, només inverteix el les sortides i les entrades. 943 00:45:57,950 --> 00:46:00,900 >> En altres paraules, una vegada que algú rep el missatge xifrat, 944 00:46:00,900 --> 00:46:03,740 ell o ella simplement ha conèixer la mateixa clau. 945 00:46:03,740 --> 00:46:05,700 Han rebut el text xifrat. 946 00:46:05,700 --> 00:46:09,530 I connectant els dos entrades en el sistema de xifrat, 947 00:46:09,530 --> 00:46:14,260 l'algoritme, aquesta caixa de negre, fora ha de venir del text clar original. 948 00:46:14,260 --> 00:46:17,830 I això és el molt alt nivell Tenint en compte del que és en realitat la criptografia 949 00:46:17,830 --> 00:46:18,590 tot sobre. 950 00:46:18,590 --> 00:46:20,030 >> Així que anem a arribar-hi. 951 00:46:20,030 --> 00:46:22,700 Vegem ara per sota el capó d'alguna cosa 952 00:46:22,700 --> 00:46:26,000 ens hem donat per fet la setmana passada, i per aquesta sessió 953 00:46:26,000 --> 00:46:27,629 aquí-- la cadena. 954 00:46:27,629 --> 00:46:30,295 Una cadena a l'extrem del dia és simplement una seqüència de caràcters. 955 00:46:30,295 --> 00:46:33,610 >> Pot ser que sigui hola món, o hola Zamyla, o el que sigui. 956 00:46:33,610 --> 00:46:37,050 Però, què significa això per a ser una seqüència de caràcters? 957 00:46:37,050 --> 00:46:41,520 De fet, la biblioteca CS50 dóna nosaltres un tipus de dades anomenat cadena. 958 00:46:41,520 --> 00:46:45,140 >> Però en realitat no hi ha tal cosa com una cadena en C. 959 00:46:45,140 --> 00:46:49,450 Realment és una seqüència de caràcter, caràcters, caràcter, 960 00:46:49,450 --> 00:46:52,180 caràcter, cap enrere, cap enrere, a cap enrere, cap enrere, cap enrere a l'interior 961 00:46:52,180 --> 00:46:54,650 de la memòria de l'ordinador, o RAM. 962 00:46:54,650 --> 00:46:58,940 I veurem més que en el futur, quan ens fixem en la memòria mateixa, 963 00:46:58,940 --> 00:47:02,030 i la utilització, i el amenaces que estan involucrats. 964 00:47:02,030 --> 00:47:04,100 >> Però considerarem la cadena Zamyla. 965 00:47:04,100 --> 00:47:07,480 Pel que només el nom de l'ésser humà aquí, Zamyla, 966 00:47:07,480 --> 00:47:12,030 que és una seqüència de caràcters, Z-A-M-I-L-A. 967 00:47:12,030 --> 00:47:16,020 I ara anem a suposar que el nom de Zamyla està sent emmagatzemat a l'interior d'un ordinador 968 00:47:16,020 --> 00:47:16,880 programa. 969 00:47:16,880 --> 00:47:20,830 >> Bé, és lògic pensar que hauríem ser capaç de mirar a aquests personatges 970 00:47:20,830 --> 00:47:21,590 individualment. 971 00:47:21,590 --> 00:47:24,710 Així que només vaig a dibuixar una mica caixa al voltant el nom de Zamyla aquí. 972 00:47:24,710 --> 00:47:31,580 I és el cas en C que quan es tenir una cadena, com Zamyla-- i potser 973 00:47:31,580 --> 00:47:34,940 aquesta cadena ha tornat de una funció com a cadena GET, 974 00:47:34,940 --> 00:47:38,540 en realitat es pot manipular que caràcter per caràcter. 975 00:47:38,540 --> 00:47:42,070 >> Ara, això és pertinent per a la conversa en part, perquè 976 00:47:42,070 --> 00:47:46,420 en la criptografia si voleu canviar De A a B i de B a C i C a D, 977 00:47:46,420 --> 00:47:49,650 i així successivament, el que necessita per poder mirar els caràcters individuals 978 00:47:49,650 --> 00:47:50,190 en una cadena. 979 00:47:50,190 --> 00:47:52,695 Has de ser capaç de canviar la Z a una altra cosa, l'A 980 00:47:52,695 --> 00:47:55,280 a una altra cosa, el M de una altra cosa, i així successivament. 981 00:47:55,280 --> 00:47:58,000 I pel que necessitem una manera, programació, per la 982 00:47:58,000 --> 00:48:03,020 per parlar, en C per ser capaç de canviar i mirar les lletres individuals. 983 00:48:03,020 --> 00:48:05,690 I podem fer això de la següent manera. 984 00:48:05,690 --> 00:48:08,340 >> Déjame anar el cap cap enrere en el IDE CS50. 985 00:48:08,340 --> 00:48:11,130 I m'ho dius a mi anar per davant i crear un nou arxiu 986 00:48:11,130 --> 00:48:16,134 que vaig a trucar a aquest temps string0, com el nostre primer exemple d'això, punt c. 987 00:48:16,134 --> 00:48:18,300 I seguiré endavant i el fuet de la següent manera. 988 00:48:18,300 --> 00:48:22,870 >> Pel que inclouen CS50.h, i a continuació, incloure io.h estàndard, 989 00:48:22,870 --> 00:48:25,990 el qual gairebé sempre vaig a a utilitzar en els meus programes, almenys 990 00:48:25,990 --> 00:48:26,780 inicialment. 991 00:48:26,780 --> 00:48:32,180 int buit principal, i després aquí estic va a fer cordes aconsegueix arribar cadena. 992 00:48:32,180 --> 00:48:35,260 I després vaig a seguir endavant i fer-ho. 993 00:48:35,260 --> 00:48:37,460 Vull anar per davant i, com una comprovació de validesa, 994 00:48:37,460 --> 00:48:43,607 acaba de dir, hola, s per cent, punt i coma, fa que la cadena 0. 995 00:48:43,607 --> 00:48:44,690 Uh oh, què he fet aquí? 996 00:48:44,690 --> 00:48:45,930 Oh, no em connecto. 997 00:48:45,930 --> 00:48:48,120 Així lliçó apresa, que No va ser intencional. 998 00:48:48,120 --> 00:48:52,480 >> Així error, més cent conversions que els arguments de dades. 999 00:48:52,480 --> 00:48:54,940 I aquí és on, en 7-- línia OK, pel que tinc, 1000 00:48:54,940 --> 00:48:56,690 entre cometes, això és la meva cadena de printf. 1001 00:48:56,690 --> 00:48:58,151 Tinc un signe de percentatge. 1002 00:48:58,151 --> 00:48:59,650 Però em falta el segon argument. 1003 00:48:59,650 --> 00:49:03,190 >> Em falta la coma s, que Jo tenia en els exemples anteriors. 1004 00:49:03,190 --> 00:49:06,650 Així que una bona oportunitat de corregir una més error, per accident. 1005 00:49:06,650 --> 00:49:09,950 I ara em deixa córrer string0, el tipus de Zamyla. 1006 00:49:09,950 --> 00:49:10,970 OK, hola Zamyla. 1007 00:49:10,970 --> 00:49:14,144 >> Així que ens hem quedat aquest tipus de programa un parell de vegades diferents ara. 1008 00:49:14,144 --> 00:49:16,310 Però farem alguna cosa 1 mica diferent aquesta vegada. 1009 00:49:16,310 --> 00:49:19,450 En lloc de només la impressió de Zamyla Nom del conjunt amb printf, 1010 00:49:19,450 --> 00:49:21,350 ho farem caràcter per caràcter. 1011 00:49:21,350 --> 00:49:22,700 >> Vaig a utilitzar un bucle. 1012 00:49:22,700 --> 00:49:26,160 I vaig a lliurar-me una variable de comptatge, anomenat i. 1013 00:49:26,160 --> 00:49:33,530 I vaig a mantenir la iteració, per la qual sempre i quan i és menor que la longitud de s. 1014 00:49:33,530 --> 00:49:35,930 >> Resulta, no ho vam fer fer aquesta última vegada, 1015 00:49:35,930 --> 00:49:39,100 que c ve amb una funció anomenada Stirling. 1016 00:49:39,100 --> 00:49:42,690 De tornada en el dia, i en general tot i que l'aplicació de funcions, 1017 00:49:42,690 --> 00:49:45,405 els éssers humans sovint es tria molt noms succintes aquest tipus de so 1018 00:49:45,405 --> 00:49:48,280 de la mateixa manera que el que vol, encara que és falten algunes vocals o lletres. 1019 00:49:48,280 --> 00:49:50,660 Així Stirling és el el nom d'una funció que 1020 00:49:50,660 --> 00:49:53,880 pren una discussió entre parèntesi que ha de ser una cadena. 1021 00:49:53,880 --> 00:49:56,910 I que només es retorna un enter, la longitud d'aquesta cadena. 1022 00:49:56,910 --> 00:50:00,580 >> Pel que aquest bucle en la línia 7 que està passant per començar a comptar a i és igual a 0. 1023 00:50:00,580 --> 00:50:02,530 Es va a incrementar I en cada iteració 1024 00:50:02,530 --> 00:50:04,350 per 1, tal com ho hem estat fent un parell de vegades. 1025 00:50:04,350 --> 00:50:06,780 Però va fer només això fins al punt 1026 00:50:06,780 --> 00:50:09,660 quan i és la longitud de la mateixa cadena. 1027 00:50:09,660 --> 00:50:14,520 >> Així que aquest és una manera de, en última instància, iterar sobre els caràcters 1028 00:50:14,520 --> 00:50:17,430 a la cadena com és la següent. 1029 00:50:17,430 --> 00:50:20,670 Vaig a imprimir no és una cadena sencera, però per cent c, 1030 00:50:20,670 --> 00:50:22,860 un sol caràcter seguit d'una nova línia. 1031 00:50:22,860 --> 00:50:24,880 I després vaig a vagi per davant, i necessito 1032 00:50:24,880 --> 00:50:29,080 dir Vull imprimir caràcter d'ordre i del s. 1033 00:50:29,080 --> 00:50:33,450 >> Així que si i és la variable que indica l'índex de la cadena, on 1034 00:50:33,450 --> 00:50:37,230 que està en ella, necessita ser capaç de a dir, dóna'm el caràcter d'ordre i del s. 1035 00:50:37,230 --> 00:50:40,390 I c té una forma de fer això amb claudàtors. 1036 00:50:40,390 --> 00:50:43,679 Només cal que digui el nom de la cadena, que en aquest cas és s. 1037 00:50:43,679 --> 00:50:46,970 A continuació, utilitzeu claudàtors, que són en general just per sobre del Retorn o Intro 1038 00:50:46,970 --> 00:50:48,110 tecla en el teclat. 1039 00:50:48,110 --> 00:50:52,410 I a continuació, posar l'índex de la caràcter que voleu imprimir. 1040 00:50:52,410 --> 00:50:55,960 Així que l'índex es va a ser una number-- 0, o 1, o 2, o 3, o de punt, 1041 00:50:55,960 --> 00:50:57,590 punt, punt, algun altre número. 1042 00:50:57,590 --> 00:51:00,920 >> I ens assegurem que es va a ser el número correcte, perquè jo 1043 00:51:00,920 --> 00:51:02,360 començarà a comptar a 0. 1044 00:51:02,360 --> 00:51:07,020 I per defecte, el primer caràcter en una cadena és per convenció 0. 1045 00:51:07,020 --> 00:51:09,230 I el segon caràcter és el suport gener. 1046 00:51:09,230 --> 00:51:11,120 I el tercer és el suport febrer. 1047 00:51:11,120 --> 00:51:13,630 I no vol anar massa ara, però no anem perquè som 1048 00:51:13,630 --> 00:51:17,780 anar només per incrementar i fins que es és igual a la longitud de la cadena. 1049 00:51:17,780 --> 00:51:20,210 I en aquest moment, Aquest bucle s'aturarà. 1050 00:51:20,210 --> 00:51:25,550 >> Així que permetin-me anar endavant i guardar aquesta programa i executa make cadena de 0. 1051 00:51:25,550 --> 00:51:28,400 Però l'he cagada. 1052 00:51:28,400 --> 00:51:35,390 Declarant implícitament funció de biblioteca Stirling amb tal tipus i tal-- ara, 1053 00:51:35,390 --> 00:51:36,430 això sona familiar. 1054 00:51:36,430 --> 00:51:37,440 Però no és printf. 1055 00:51:37,440 --> 00:51:38,540 I no és arribar cadena. 1056 00:51:38,540 --> 00:51:40,480 >> No m'equivoco en de la mateixa manera aquest temps. 1057 00:51:40,480 --> 00:51:45,100 Però notar aquí una mica més avall a més, incloure la capçalera string.h, 1058 00:51:45,100 --> 00:51:47,210 proporcionar explícitament el declaració de Stirling. 1059 00:51:47,210 --> 00:51:48,820 Així que en realitat hi ha una pista en aquest país. 1060 00:51:48,820 --> 00:51:51,670 >> I de fet resulta hi ha un altre arxiu de capçalera 1061 00:51:51,670 --> 00:51:53,970 que nosaltres no hem fet servir però, a la classe, però és 1062 00:51:53,970 --> 00:51:56,480 entre els disponibles a vostè, anomenada string.h. 1063 00:51:56,480 --> 00:52:00,930 I en aquest arxiu, string.h Stirling és declarada. 1064 00:52:00,930 --> 00:52:05,220 Així que permetin-me seguir endavant i guardar aquesta, fer cordes 1065 00:52:05,220 --> 00:52:08,040 0-- agradable, no hi ha missatges d'error aquesta vegada. 1066 00:52:08,040 --> 00:52:12,290 >> ./string0 Zamyla, i Estic a punt de colpejar Enter, 1067 00:52:12,290 --> 00:52:16,710 moment en el qual es va getString per tornar la cadena, el va posar en s. 1068 00:52:16,710 --> 00:52:21,890 Després que per el bucle es repetirà sobre els personatges de S d'una en una, 1069 00:52:21,890 --> 00:52:28,420 i hi imprimeixi una per línia, perquè Havia de n barra invertida al final. 1070 00:52:28,420 --> 00:52:34,530 Així que podria ometre que la barra invertida n, i després simplement imprimir tota Zamyla 1071 00:52:34,530 --> 00:52:37,460 en la mateixa línia, reimplementar amb eficàcia 1072 00:52:37,460 --> 00:52:38,999 printf, que no és del tot útil. 1073 00:52:38,999 --> 00:52:40,540 Però en aquest cas, jo no he fet això. 1074 00:52:40,540 --> 00:52:43,610 De fet, he imprès 1 caràcter alhora, un per línia, 1075 00:52:43,610 --> 00:52:45,400 pel que veiem en realitat l'efecte. 1076 00:52:45,400 --> 00:52:46,900 >> No obstant això, he d'assenyalar una cosa aquí. 1077 00:52:46,900 --> 00:52:48,930 I tornarem a això en una setmana futur. 1078 00:52:48,930 --> 00:52:52,650 Resulta que aquest codi és potencialment defectuós. 1079 00:52:52,650 --> 00:52:56,560 >> Resulta que la cadena get i algunes altres funcions en la vida 1080 00:52:56,560 --> 00:53:00,280 no necessàriament sempre torni el que estàs esperant. 1081 00:53:00,280 --> 00:53:03,010 Sabem per última classe en aquest moment d'arribar 1082 00:53:03,010 --> 00:53:04,960 cadena se suposa que ha de tornar una cadena. 1083 00:53:04,960 --> 00:53:09,900 Però el que si l'usuari escriu a terme tals una paraula llarga, o un paràgraf, o un assaig 1084 00:53:09,900 --> 00:53:13,010 que simplement no hi ha prou memòria a l'ordinador per adaptar-s'hi. 1085 00:53:13,010 --> 00:53:15,410 >> Igual, ¿i si alguna cosa va mal sota de la campana? 1086 00:53:15,410 --> 00:53:18,400 Pot ser que no passa sovint, però podria succeir un cop 1087 00:53:18,400 --> 00:53:21,520 des de fa temps, amb molt poca freqüència. 1088 00:53:21,520 --> 00:53:25,460 I així resulta que la cadena get i funciona com ho fan no necessàriament 1089 00:53:25,460 --> 00:53:26,380 sempre tornen cadenes. 1090 00:53:26,380 --> 00:53:30,680 Podrien tornar algun valor d'error, algun valor sentinella per així dir-ho, 1091 00:53:30,680 --> 00:53:32,612 que indica que alguna cosa ha anat malament. 1092 00:53:32,612 --> 00:53:35,320 I només se sabria això des després d'haver après a classe ara, 1093 00:53:35,320 --> 00:53:37,700 o d'haver llegit algunes més documentació. 1094 00:53:37,700 --> 00:53:43,120 Resulta que la cadena get pot retornar un valor anomenat nul. 1095 00:53:43,120 --> 00:53:46,220 Nul és un valor especial que anem a tornar en una setmana futur. 1096 00:53:46,220 --> 00:53:50,420 Però per ara, només sé que si vull a ser molt adequat per avançar 1097 00:53:50,420 --> 00:53:52,650 utilitzant cadena GET, em No només ha de cridar-ho, 1098 00:53:52,650 --> 00:53:56,870 i cegament utilitzar el seu valor de retorn, confiant que es tracta d'una cadena. 1099 00:53:56,870 --> 00:53:59,420 >> He de dir en primer lloc, Hey, espera un minut, només es 1100 00:53:59,420 --> 00:54:03,380 procedir si s no és igual null, on null, de nou, 1101 00:54:03,380 --> 00:54:04,660 és només un valor especial. 1102 00:54:04,660 --> 00:54:07,770 I és l'únic valor especial ha de preocupar d'aconseguir per a la cadena. 1103 00:54:07,770 --> 00:54:10,900 Obtenir cadena és ben va per retornar una cadena o nul·la. 1104 00:54:10,900 --> 00:54:17,219 >> I aquest punt d'exclamació signe d'igual és possible saber de tal classe de matemàtiques 1105 00:54:17,219 --> 00:54:20,510 que pot dibuixar amb un signe igual una línia a través d'ell per indicar no és igual. 1106 00:54:20,510 --> 00:54:23,135 Això no és en general un caràcter pot escriure en el seu teclat. 1107 00:54:23,135 --> 00:54:26,480 I així, en la majoria dels llenguatges de programació, quan es vol dir que no és igual, 1108 00:54:26,480 --> 00:54:29,160 s'utilitza un signe d'exclamació, també conegut com a explosió. 1109 00:54:29,160 --> 00:54:33,180 Així que vostè diu és igual a l'explosió, la qual vol dir que no és igual, lògicament. 1110 00:54:33,180 --> 00:54:38,060 És igual que no hi ha un major que, o igual a, o menys de 1111 00:54:38,060 --> 00:54:41,270 o igual a la clau en el teclat que ho fa tot en un sol símbol. 1112 00:54:41,270 --> 00:54:44,020 Per això és que, en els exemples anteriors, que va fer un parèntesi obert, i després 1113 00:54:44,020 --> 00:54:48,670 un signe d'igualtat, amb la finalitat de fer més gran que o, per exemple, menys de. 1114 00:54:48,670 --> 00:54:49,910 >> Quina és el menjar per emportar en aquesta llista? 1115 00:54:49,910 --> 00:54:53,880 Això és simplement una manera d'ara la introducció d'aquesta sintaxi, aquesta característica, 1116 00:54:53,880 --> 00:54:57,390 iteració en persona caràcters d'una cadena. 1117 00:54:57,390 --> 00:55:00,260 I de la mateixa manera que els quadrats suports li permeten obtenir en ells, 1118 00:55:00,260 --> 00:55:03,790 considerar els claudàtors de la manera tipus d'al·lusió a aquest subjacent 1119 00:55:03,790 --> 00:55:06,040 disseny, de manera que cada caràcter dins d'una cadena 1120 00:55:06,040 --> 00:55:10,180 és una espècie de caixa en algun lloc sota la campana a la memòria de l'equip. 1121 00:55:10,180 --> 00:55:12,340 >> Però farem una variant d'aquest. 1122 00:55:12,340 --> 00:55:14,880 Resulta que aquest programa és correcte. 1123 00:55:14,880 --> 00:55:18,810 Així per eixos de CS50 per avaluar codi, això és correcte ara. 1124 00:55:18,810 --> 00:55:22,959 Sobretot ara que estic comprovant null, aquest programa mai ha de bloquejar-se. 1125 00:55:22,959 --> 00:55:24,500 I jo només sé que a partir de l'experiència. 1126 00:55:24,500 --> 00:55:28,040 Però no hi ha res més que realment podem equivocar aquí. 1127 00:55:28,040 --> 00:55:31,860 Però no és molt ben dissenyat, perquè anem a tornar al bàsic. 1128 00:55:31,860 --> 00:55:34,450 >> En primer lloc, principles-- el que fa un bucle for fer? 1129 00:55:34,450 --> 00:55:36,290 Un bucle fa tres coses. 1130 00:55:36,290 --> 00:55:39,340 S'inicialitza alguns valor, si se li pregunta a. 1131 00:55:39,340 --> 00:55:41,770 Es comprova una condició. 1132 00:55:41,770 --> 00:55:45,380 I a continuació, després de cada iteració, després de cada cicle, 1133 00:55:45,380 --> 00:55:49,330 s'incrementa alguns valor o valors, aquí. 1134 00:55:49,330 --> 00:55:50,600 >> Llavors, què vol dir això? 1135 00:55:50,600 --> 00:55:52,940 Inicialitzem i a 0. 1136 00:55:52,940 --> 00:55:58,610 Vam comprovar i ens assegurem i és menor que la longitud d's, que és Z-A-M-I-L-A, 1137 00:55:58,610 --> 00:55:59,900 pel que és menys de 6. 1138 00:55:59,900 --> 00:56:02,590 I, de fet, 0 quan menys de 6. 1139 00:56:02,590 --> 00:56:05,580 >> Imprimim Z del nom de Zamyla. 1140 00:56:05,580 --> 00:56:08,080 Llavors vam incrementar i 0-1. 1141 00:56:08,080 --> 00:56:11,290 A continuació, comprovar, és almenys 1 que la longitud de s? 1142 00:56:11,290 --> 00:56:13,270 La longitud de s és 6. 1143 00:56:13,270 --> 00:56:13,950 Si, ho és. 1144 00:56:13,950 --> 00:56:16,880 >> Així és la impressió d'una a nom de Zamyla, ZA. 1145 00:56:16,880 --> 00:56:20,090 Incrementem i des de 0, a 1, a 2. 1146 00:56:20,090 --> 00:56:23,720 A continuació, comprovar, és inferior a 2 la longitud del nom de Zamyla. 1147 00:56:23,720 --> 00:56:25,380 6- 2 és almenys de 6. 1148 00:56:25,380 --> 00:56:30,460 Sí, anem a imprimir ara en M El nom de Zamyla, el tercer personatge. 1149 00:56:30,460 --> 00:56:34,110 >> La clau aquí és que en cada iteració de la història, estic comprovant, 1150 00:56:34,110 --> 00:56:37,810 és i menor que la longitud d'Zamyla? 1151 00:56:37,810 --> 00:56:40,350 Però el problema és que Stirling no és una propietat. 1152 00:56:40,350 --> 00:56:43,100 Aquells de vostès que han programat abans en Java o en altres idiomes 1153 00:56:43,100 --> 00:56:46,310 pot conèixer la longitud d'una cadena és una propietat, només algunes de només lectura valor. 1154 00:56:46,310 --> 00:56:50,220 >> En C, en aquest cas, si això és una funció que és, literalment, 1155 00:56:50,220 --> 00:56:53,520 comptant el nombre de personatges de Zamyla cada vegada 1156 00:56:53,520 --> 00:56:54,740 cridem a aquesta funció. 1157 00:56:54,740 --> 00:56:58,500 Cada vegada que es demani l'equip per utilitzar Stirling, que és fer una ullada a Zamyla, 1158 00:56:58,500 --> 00:57:01,960 i dient Z-A-H-I-L-A, 6. 1159 00:57:01,960 --> 00:57:02,962 I torna juny. 1160 00:57:02,962 --> 00:57:04,920 La propera vegada que truqui que dins d'aquest bucle, 1161 00:57:04,920 --> 00:57:08,610 que va a mirar a Zamyla de nou, per exemple Z-A-M-I-L-A, 6. 1162 00:57:08,610 --> 00:57:10,320 I es va a tornar juny. 1163 00:57:10,320 --> 00:57:12,980 Quin és tan estúpida sobre aquest disseny? 1164 00:57:12,980 --> 00:57:17,700 >> Per què el meu codi no un 5 sobre 5 per al disseny en aquest moment, per dir-ho? 1165 00:57:17,700 --> 00:57:20,600 Bé, jo estic fent una pregunta innecessàriament. 1166 00:57:20,600 --> 00:57:23,030 Estic fent més feina del que necessito. 1167 00:57:23,030 --> 00:57:25,370 >> Així que, encara que la resposta és correcta, estic 1168 00:57:25,370 --> 00:57:29,560 demanant a l'ordinador, el que és la longitud d'Zamyla de nou, 1169 00:57:29,560 --> 00:57:31,380 i una altra, i una altra, i una altra? 1170 00:57:31,380 --> 00:57:33,980 I la resposta és mai canviarà. 1171 00:57:33,980 --> 00:57:35,900 Sempre va a ser 6. 1172 00:57:35,900 --> 00:57:39,730 >> Així que una solució millor que això seria aquesta propera versió. 1173 00:57:39,730 --> 00:57:43,390 Déjame anar per davant i el va posar en una arxiu separat anomenat string1.c, 1174 00:57:43,390 --> 00:57:44,990 només per mantenir-lo separat. 1175 00:57:44,990 --> 00:57:47,260 I resulta que en una de llaç, en realitat es pot 1176 00:57:47,260 --> 00:57:50,210 declarar múltiples variables alhora. 1177 00:57:50,210 --> 00:57:53,460 >> Així que seguiré I i posar-lo a 0. 1178 00:57:53,460 --> 00:57:56,190 Però també vaig a afegir una coma, i dir: 1179 00:57:56,190 --> 00:58:01,050 dóna'm una variable anomenada n, la valor és igual a la longitud de la cadena del s. 1180 00:58:01,050 --> 00:58:09,410 I ara, si us plau faci la meva condició sempre que i és menor que n. 1181 00:58:09,410 --> 00:58:14,140 >> Així d'aquesta manera, la lògica és idèntics al final del dia. 1182 00:58:14,140 --> 00:58:18,280 Però estic recordant la valor 6, en aquest cas. 1183 00:58:18,280 --> 00:58:19,780 Quina és la longitud del nom de Zamyla? 1184 00:58:19,780 --> 00:58:20,860 I ho estic posant en el n. 1185 00:58:20,860 --> 00:58:23,050 >> I encara estic comprovant la condició cada vegada. 1186 00:58:23,050 --> 00:58:24,300 És de 0 a menys de 6? 1187 00:58:24,300 --> 00:58:25,600 1 és inferior a 6? 1188 00:58:25,600 --> 00:58:28,600 És de 2 a menys de 6, i així successivament? 1189 00:58:28,600 --> 00:58:31,914 >> Però jo no estic demanant a l'equip de nou, i una altra, el que és 1190 00:58:31,914 --> 00:58:33,080 la longitud del nom de Zamyla? 1191 00:58:33,080 --> 00:58:34,320 Quina és la longitud del nom de Zamyla? 1192 00:58:34,320 --> 00:58:35,986 Quina és la longitud del nom d'aquesta Zamyla? 1193 00:58:35,986 --> 00:58:40,440 Estic literalment, recordant que el primer i Només respondre a aquesta segona variable n. 1194 00:58:40,440 --> 00:58:45,280 Així que això ara seria no només correcta, sinó també ben dissenyat. 1195 00:58:45,280 --> 00:58:46,670 >> Ara, què passa amb l'estil? 1196 00:58:46,670 --> 00:58:48,866 He nomenat meu variables força bé, diria jo. 1197 00:58:48,866 --> 00:58:50,240 Són súper succinta en aquest moment. 1198 00:58:50,240 --> 00:58:52,090 I això és totalment bé. 1199 00:58:52,090 --> 00:58:55,120 >> Si només té una cadena en un programa, 1200 00:58:55,120 --> 00:58:56,860 que també podria anomenar-s per cadenes. 1201 00:58:56,860 --> 00:58:59,370 Si només té una variable per explicar en un programa, 1202 00:58:59,370 --> 00:59:00,710 que també podria anomenar-i. 1203 00:59:00,710 --> 00:59:03,500 Si vostè té una longitud, n és super comuns també. 1204 00:59:03,500 --> 00:59:05,800 Però no he comentat res de la meva codi. 1205 00:59:05,800 --> 00:59:09,200 >> No he informat a la reader-- si aquest és el meu TF, o TA, 1206 00:59:09,200 --> 00:59:12,460 o simplement colleague-- el que se suposa a estar passant en aquest programa. 1207 00:59:12,460 --> 00:59:15,760 I així aconseguir un bon estil, el que jo vull fer 1208 00:59:15,760 --> 00:59:24,580 és una cosa això- com demanar usuari per a l'entrada. 1209 00:59:24,580 --> 00:59:26,670 I podria reescriure aquesta qualsevol nombre de maneres. 1210 00:59:26,670 --> 00:59:35,630 >> Assegureu-vos de S-- assegurar get string retorna una cadena. 1211 00:59:35,630 --> 00:59:40,280 I després, en aquí-- i això és potser la iterate comment-- més important 1212 00:59:40,280 --> 00:59:44,450 sobre els personatges de s un alhora. 1213 00:59:44,450 --> 00:59:47,060 I podria utilitzar qualsevol elecció de l'idioma Anglès 1214 00:59:47,060 --> 00:59:49,650 aquí per descriure cada d'aquests trossos de codi. 1215 00:59:49,650 --> 00:59:52,740 >> Cal notar que no he posat una observacions sobre cada línia de codi, 1216 00:59:52,740 --> 00:59:55,690 en realitat només en la interessant uns, els que 1217 00:59:55,690 --> 00:59:59,460 tenir algun sentit que podria voler fer molt clar per a algú 1218 00:59:59,460 --> 01:00:00,460 la lectura del meu codi. 1219 01:00:00,460 --> 01:00:02,920 I per què diu arribar pregunta a l'usuari per la cadena d'entrada? 1220 01:00:02,920 --> 01:00:05,450 Fins i tot que un no és necessàriament tot el que descriptiu. 1221 01:00:05,450 --> 01:00:09,340 Però ajuda a explicar una història, perquè el segona línia de la història és, asseguri 1222 01:00:09,340 --> 01:00:10,740 obtenir una cadena de retorna una cadena. 1223 01:00:10,740 --> 01:00:14,260 >> I la tercera línia de la història és, iterar sobre els personatges d'un s 1224 01:00:14,260 --> 01:00:15,380 en un moment. 1225 01:00:15,380 --> 01:00:17,920 I ara només per si de cas, Vaig a seguir endavant i afegir 1226 01:00:17,920 --> 01:00:24,560 un comentari més que simplement diu impressió caràcter i-èsim al s. 1227 01:00:24,560 --> 01:00:26,520 Ara, què he fet al final del dia? 1228 01:00:26,520 --> 01:00:29,190 >> He afegit una mica d'anglès paraules en forma de comentaris. 1229 01:00:29,190 --> 01:00:32,700 significa el símbol de barra barra, hey, ordinador és per a l'ésser humà, 1230 01:00:32,700 --> 01:00:33,820 no per a vostè, el seu equip. 1231 01:00:33,820 --> 01:00:35,119 Així que, lògicament, són ignorats. 1232 01:00:35,119 --> 01:00:35,910 Ells hi són. 1233 01:00:35,910 --> 01:00:39,830 >> I, de fet, CS50 IDE els mostra com gris, que són útils, però no clau 1234 01:00:39,830 --> 01:00:41,000 al programa. 1235 01:00:41,000 --> 01:00:42,570 Observi el que pot fer ara. 1236 01:00:42,570 --> 01:00:44,950 Si vostè sap C programació o no, 1237 01:00:44,950 --> 01:00:47,722 simplement es posen d'esquena a aquest programa i descremada els comentaris. 1238 01:00:47,722 --> 01:00:50,180 Preguntar a l'usuari per a l'entrada, vos arribar cadena retorna una cadena, 1239 01:00:50,180 --> 01:00:53,009 iterar sobre els personatges de s un alhora, imprimir el caràcter 1240 01:00:53,009 --> 01:00:55,550 i-èsim caràcter en S-- no ho fa fins i tot haver de mirar el codi 1241 01:00:55,550 --> 01:00:57,270 per entendre el que fa aquest programa. 1242 01:00:57,270 --> 01:01:00,280 I, millor encara, si vostè mira en aquest programa d'una setmana o dues, 1243 01:01:00,280 --> 01:01:02,280 o un mes, o un any, vostè també no té 1244 01:01:02,280 --> 01:01:04,420 per mirar el codi, tractant de recordar, 1245 01:01:04,420 --> 01:01:06,630 Què estava tractant de fer amb aquest codi? 1246 01:01:06,630 --> 01:01:07,770 >> Vostè mateix ha dit. 1247 01:01:07,770 --> 01:01:11,660 Ho has descrit per si mateix, o algun col·lega, o TA, o TF. 1248 01:01:11,660 --> 01:01:14,860 I així, aquest seria ara correcta, i el bon disseny, 1249 01:01:14,860 --> 01:01:18,210 i, finalment, un bon estil també. 1250 01:01:18,210 --> 01:01:19,990 El mateix passa amb tenir això en ment. 1251 01:01:19,990 --> 01:01:22,200 >> Així que hi ha una altra El que vaig a fer aquí 1252 01:01:22,200 --> 01:01:28,240 que ara poden revelar exactament el que està passant per sota el capó. 1253 01:01:28,240 --> 01:01:30,390 Així que hi ha aquesta característica en C, i altres idiomes, 1254 01:01:30,390 --> 01:01:33,010 anomenada encasellament que, o bé implícitament 1255 01:01:33,010 --> 01:01:37,250 o explícitament permet convertir d'un tipus de dades a un altre. 1256 01:01:37,250 --> 01:01:39,800 Hem estat tractant pel la data d'avui amb cordes. 1257 01:01:39,800 --> 01:01:41,250 >> I les seqüències són caràcters. 1258 01:01:41,250 --> 01:01:44,910 Però recordar des de la setmana 0, ¿quins són els caràcters? 1259 01:01:44,910 --> 01:01:49,334 Els personatges són simplement una abstracció a la part superior dels nombres decimals numbers--, 1260 01:01:49,334 --> 01:01:52,500 i els números decimals són en realitat una l'abstracció en la part superior dels nombres binaris, 1261 01:01:52,500 --> 01:01:53,720 com el definim. 1262 01:01:53,720 --> 01:01:55,540 >> Així caràcters són nombres. 1263 01:01:55,540 --> 01:01:58,410 I els números són caràcters, simplement en funció del context. 1264 01:01:58,410 --> 01:02:01,250 I resulta que a l'interior d'un programa d'ordinador, 1265 01:02:01,250 --> 01:02:06,830 es pot especificar la forma en què voleu cercar en els bits dins d'aquest programa? 1266 01:02:06,830 --> 01:02:10,400 >> Recordeu que en la setmana 0 que teníem Ascii, que és només el codi 1267 01:02:10,400 --> 01:02:11,620 cartes d'assignació als nombres. 1268 01:02:11,620 --> 01:02:13,660 I vam dir, el capital A és 65. 1269 01:02:13,660 --> 01:02:15,860 Capital B és 66, i així successivament. 1270 01:02:15,860 --> 01:02:20,500 >> I avís, que essencialment tenim en caràcters la fila superior aquí, com els anomenaria C, 1271 01:02:20,500 --> 01:02:23,400 caràcters, i després enters en la segona fila. 1272 01:02:23,400 --> 01:02:28,180 I resulta que es pot convertir sense problemes entre els dos, en general. 1273 01:02:28,180 --> 01:02:30,042 I si volem fer això deliberadament, es 1274 01:02:30,042 --> 01:02:31,750 pot ser que desitgi per fer front alguna cosa com això. 1275 01:02:31,750 --> 01:02:33,590 >> El que es vol convertir majúscula per baixar 1276 01:02:33,590 --> 01:02:35,330 cas, o minúscules a majúscules. 1277 01:02:35,330 --> 01:02:38,000 I resulta que no hi ha en realitat un patró ací 1278 01:02:38,000 --> 01:02:39,900 podem abastar en un moment. 1279 01:02:39,900 --> 01:02:44,120 Però anem a veure per primera vegada en una exemple de fer això explícitament. 1280 01:02:44,120 --> 01:02:46,340 >> Vaig a tornar al IDE CS50. 1281 01:02:46,340 --> 01:02:50,640 Vaig a crear una arxiu anomenat ASCII 0.c. 1282 01:02:50,640 --> 01:02:55,960 I vaig a seguir endavant i afegir el meu io.h estàndard en la part superior, nul·la principal int 1283 01:02:55,960 --> 01:02:57,370 a la part superior de la meva funció. 1284 01:02:57,370 --> 01:03:02,700 I a continuació, només vaig a fer el following-- un bucle d'i és igual, 1285 01:03:02,700 --> 01:03:04,610 diguem, 65. 1286 01:03:04,610 --> 01:03:10,460 >> I llavors va a ser inferior a 65, a més de 26 lletres en l'alfabet. 1287 01:03:10,460 --> 01:03:12,640 Així que vaig a deixar que l'ordinador fer els càlculs per a mi no. 1288 01:03:12,640 --> 01:03:15,100 I després dins d'aquest bucle, ho vaig a imprimir? 1289 01:03:15,100 --> 01:03:19,230 >> % C és n% i barra invertida. 1290 01:03:19,230 --> 01:03:21,290 I ara vull endollar dos valors. 1291 01:03:21,290 --> 01:03:24,530 He posat temporalment pregunta marca allà per convidar a la pregunta. 1292 01:03:24,530 --> 01:03:29,940 >> Vull repetir des del 65 en endavant durant 26 lletres de l'alfabet, 1293 01:03:29,940 --> 01:03:35,190 impressió que en cada iteració equivalent integrant del caràcter. 1294 01:03:35,190 --> 01:03:38,299 En altres paraules, vull iterar impressió de més de 26 números 1295 01:03:38,299 --> 01:03:41,590 el que és el caràcter ASCII, la carta, i ho és-- el número corresponent 1296 01:03:41,590 --> 01:03:44,650 en realitat només recreant el gràfic d'aquesta diapositiva. 1297 01:03:44,650 --> 01:03:47,010 Llavors, què haurien de ser aquests signes d'interrogació? 1298 01:03:47,010 --> 01:03:51,760 >> Doncs bé, resulta que el segon un de sol ha de ser la variable i. 1299 01:03:51,760 --> 01:03:53,860 Vull veure que a mesura que un nombre. 1300 01:03:53,860 --> 01:03:58,920 I l'argument de mitja aquí, puc dir-li a l'ordinador 1301 01:03:58,920 --> 01:04:03,470 per tractar aquest sencer I com un caràcter, de manera que 1302 01:04:03,470 --> 01:04:05,880 per substituir-aquí per cent C. 1303 01:04:05,880 --> 01:04:07,990 >> En altres paraules, si jo, el programador humà, saber 1304 01:04:07,990 --> 01:04:09,865 aquests són només números al final del dia. 1305 01:04:09,865 --> 01:04:12,500 I sé que el 65 ha de assignar a una mica de caràcter. 1306 01:04:12,500 --> 01:04:15,310 Amb aquesta conversió explícita, amb un parèntesi, 1307 01:04:15,310 --> 01:04:18,840 el nom del tipus de dades que voleu convertir, i un parèntesi tancat, 1308 01:04:18,840 --> 01:04:21,200 vostè pot dir la equip, hey, ordinador, 1309 01:04:21,200 --> 01:04:24,130 convertir aquest sencer en un char. 1310 01:04:24,130 --> 01:04:26,250 >> Així que quan corro aquesta programa després de compilar, 1311 01:04:26,250 --> 01:04:29,740 anem a veure el que faig get-- ASCII 0. 1312 01:04:29,740 --> 01:04:33,020 Maleïda sigui, què he fet malament? 1313 01:04:33,020 --> 01:04:35,884 Utilitzeu d'identificador no declarat, bé, no intencional, 1314 01:04:35,884 --> 01:04:37,800 però veurem si no podem raó per això. 1315 01:04:37,800 --> 01:04:41,220 >> Així five-- línia, així que no entenc molt lluny abans de ficar la pota. 1316 01:04:41,220 --> 01:04:42,140 Està bé. 1317 01:04:42,140 --> 01:04:46,560 Així la línia 5 per a i és igual a 65-- veig. 1318 01:04:46,560 --> 01:04:50,130 Així que recorda que en C, a diferència d'alguns idiomes si vostè té la programació prèvia 1319 01:04:50,130 --> 01:04:52,190 experiència, vostè té per indicar a l'ordinador, 1320 01:04:52,190 --> 01:04:55,040 a diferència de les ratllades, el tipus de variable que és. 1321 01:04:55,040 --> 01:04:56,860 >> I es va oblidar una contrasenya aquí. 1322 01:04:56,860 --> 01:04:59,200 A la línia cinc, He començat a utilitzar i. 1323 01:04:59,200 --> 01:05:01,560 Però no li he dit C les dades que tipus és. 1324 01:05:01,560 --> 01:05:04,570 Així que em vaig a anar d'aquí i dir, ah, fan que sigui un nombre sencer. 1325 01:05:04,570 --> 01:05:07,050 >> Ara vaig a seguir endavant i tornar a compilar. 1326 01:05:07,050 --> 01:05:08,080 Que fixa que. 1327 01:05:08,080 --> 01:05:12,660 ./ascii0 Enter, seria una mena de fresc. 1328 01:05:12,660 --> 01:05:15,360 No només és súper ràpid a demanar-li a l'ordinador aquesta pregunta, 1329 01:05:15,360 --> 01:05:18,885 en lloc de mirar cap amunt sobre un portaobjectes, s'imprimeix una per línia, A és 65, 1330 01:05:18,885 --> 01:05:24,860 B és 66, tot el camí des que down-- va fer això 26 vegades-- de les lletres Z, 1331 01:05:24,860 --> 01:05:25,630 que és 90. 1332 01:05:25,630 --> 01:05:27,790 I, de fet, lleugerament més intel·ligent faria 1333 01:05:27,790 --> 01:05:31,030 han estat per a mi no confiar a l'ordinador per afegir 26. 1334 01:05:31,030 --> 01:05:34,060 Em podria haver fet 90, així, sempre 1335 01:05:34,060 --> 01:05:37,390 ja que no cometre el mateix error dues vegades. 1336 01:05:37,390 --> 01:05:41,880 Vull anar cap amunt a través z, no només a través de i. 1337 01:05:41,880 --> 01:05:44,000 >> Així que aquesta és una conversió explícita. 1338 01:05:44,000 --> 01:05:47,860 Resulta que aquest Ni tan sols cal. 1339 01:05:47,860 --> 01:05:52,480 Déjame anar per davant i tornar a executar aquest compilador, i torneu a executar ASCII 0. 1340 01:05:52,480 --> 01:05:54,940 Resulta que C és molt intel·ligent. 1341 01:05:54,940 --> 01:05:57,150 >> I printf, en particular, és molt intel·ligent. 1342 01:05:57,150 --> 01:06:01,260 Si vostè només ha de passar un i dos cops per a tots dos marcadors de posició, printf 1343 01:06:01,260 --> 01:06:04,510 es donarà compte, oh, així que et conec em va donar un integer-- algun número, 1344 01:06:04,510 --> 01:06:06,380 igual que 65, o 90, o el que sigui. 1345 01:06:06,380 --> 01:06:10,170 Però veig que vostè em vol donar format a aquest nombre com un personatge. 1346 01:06:10,170 --> 01:06:16,460 I així implícitament printf pot llançar l'int a char per a vostè també. 1347 01:06:16,460 --> 01:06:19,360 Així que això no és un problema en absolut. 1348 01:06:19,360 --> 01:06:23,100 >> Però noti, a causa d'aquesta equivalència que realment podem fer això també. 1349 01:06:23,100 --> 01:06:26,520 Déjame seguir endavant i fer una una altra versió de això- 1.c ASCII 1350 01:06:26,520 --> 01:06:31,800 I en comptes d'una iteració sencers, realment pot volar la teva ment 1351 01:06:31,800 --> 01:06:33,610 iterant sobre els personatges. 1352 01:06:33,610 --> 01:06:37,660 Si un char c aconsegueix el capital A, I vulgui seguir endavant i fer això, 1353 01:06:37,660 --> 01:06:41,740 sempre i quan C és menor que o igual A a la Z. capital i en cada iteració 1354 01:06:41,740 --> 01:06:45,690 Vull incrementar C, que pugui Ara en la meva línia printf aquí 1355 01:06:45,690 --> 01:06:51,320 per exemple, el percentatge de C és i per cent més, coma C. 1356 01:06:51,320 --> 01:06:57,200 >> I ara, puc anar a l'altra direcció, fosa el caràcter explícitament 1357 01:06:57,200 --> 01:06:58,500 a un sencer. 1358 01:06:58,500 --> 01:07:00,560 Així, de nou, per què fas això? 1359 01:07:00,560 --> 01:07:03,830 És una mica estrany per ordenar de explicar en termes de caràcters. 1360 01:07:03,830 --> 01:07:07,430 >> Però si vostè entén el que està passant per sota de la campana, 1361 01:07:07,430 --> 01:07:08,430 en realitat no hi ha màgia. 1362 01:07:08,430 --> 01:07:13,060 Només ho dius, bé, equip donen em una variable anomenada C de tipus char. 1363 01:07:13,060 --> 01:07:16,520 Inicialitzar al capital A. I notar única qüestió cometes. 1364 01:07:16,520 --> 01:07:19,580 >> Per als caràcters en C, retirar de la la setmana passada, s'utilitzen cometes simples. 1365 01:07:19,580 --> 01:07:23,720 Per cadenes, per a les paraules, frases, s'utilitzen cometes dobles. 1366 01:07:23,720 --> 01:07:27,210 OK, ordinador, seguir fent això, per la sempre que el personatge és menor que 1367 01:07:27,210 --> 01:07:28,050 o igual a z. 1368 01:07:28,050 --> 01:07:32,640 I sé de la meva taula ASCII que tots d'aquests codis ASCII són contigües. 1369 01:07:32,640 --> 01:07:33,400 >> No hi ha cap buit. 1370 01:07:33,400 --> 01:07:36,737 Així que és només l'A a la Z, separats per un nombre cada un. 1371 01:07:36,737 --> 01:07:38,820 I llavors puc incrementar un char, si realment vull. 1372 01:07:38,820 --> 01:07:40,390 Al final del dia, és només un número. 1373 01:07:40,390 --> 01:07:41,030 Sé que això. 1374 01:07:41,030 --> 01:07:43,670 Així que només puc suposar afegir 1 a la mateixa. 1375 01:07:43,670 --> 01:07:46,940 >> I després d'aquest temps, puc imprimir c, i després l'equivalent integral. 1376 01:07:46,940 --> 01:07:50,170 I ni tan sols necessita la conversió explícita. 1377 01:07:50,170 --> 01:07:52,680 Puc deixar printf i la Figura ordinador les coses, 1378 01:07:52,680 --> 01:07:57,300 de manera que ara si em quedo fer Ascii1./ascii1, 1379 01:07:57,300 --> 01:08:01,520 Em surt exactament el mateix també. 1380 01:08:01,520 --> 01:08:04,530 >> programa inútil, ningú aunque-- en realitat es va a escriure programari 1381 01:08:04,530 --> 01:08:07,549 per tal d'esbrinar, el que va ser el nombre que s'assigna a A, o B, o Z? 1382 01:08:07,549 --> 01:08:10,340 Només vas a Google, o buscar-la en línia, o busqueu- 1383 01:08:10,340 --> 01:08:11,650 en una diapositiva, o similars. 1384 01:08:11,650 --> 01:08:13,520 Llavors, on aquesta realitat obtenir útil? 1385 01:08:13,520 --> 01:08:15,960 >> Bé, parlant d'aquest diapositiva, observi que hi ha 1386 01:08:15,960 --> 01:08:20,890 un patró real aquí entre majúscules i minúscules que no va ser accidental. 1387 01:08:20,890 --> 01:08:23,760 Observi que el capital A és 65. 1388 01:08:23,760 --> 01:08:25,830 A minúscula és 97. 1389 01:08:25,830 --> 01:08:29,649 I a quina distància és menor cas una? 1390 01:08:29,649 --> 01:08:32,649 >> Així que 65 és el nombre de passos de 97? 1391 01:08:32,649 --> 01:08:36,210 Almenys el 97 65 és 32. 1392 01:08:36,210 --> 01:08:37,910 Així que el capital és un 65. 1393 01:08:37,910 --> 01:08:39,939 Si s'agrega 32 al fet que, s'obté a minúscula. 1394 01:08:39,939 --> 01:08:43,729 I, el que és equivalent, si es resta 32, a tornar al capital A-- mateix amb B 1395 01:08:43,729 --> 01:08:46,380 a poc B, C gran a poc c. 1396 01:08:46,380 --> 01:08:50,670 >> Totes aquestes deficiències són 32 a part. 1397 01:08:50,670 --> 01:08:54,450 Ara, això semblaria que ens permeti fer alguna cosa com Microsoft Word, 1398 01:08:54,450 --> 01:08:57,729 o Google Docs compten, on pot seleccionar tot i després dir, 1399 01:08:57,729 --> 01:09:00,520 canviar tot en minúscules, o canviar tot en majúscules, 1400 01:09:00,520 --> 01:09:03,840 o canviar només la primera paraula d'una oració a majúscules. 1401 01:09:03,840 --> 01:09:07,390 De fet, podem fer alguna cosa de la mateixa manera que a nosaltres mateixos. 1402 01:09:07,390 --> 01:09:12,645 >> Déjame anar per davant i desar un fitxer aquí es diu capitalitzar 0.c. 1403 01:09:12,645 --> 01:09:15,770 I seguirem endavant i preparar ràpidament un programa que fa exactament això de la següent manera. 1404 01:09:15,770 --> 01:09:18,460 Pel que inclouen la biblioteca CS50. 1405 01:09:18,460 --> 01:09:21,430 I inclouen E / S estàndard. 1406 01:09:21,430 --> 01:09:22,787 >> I sé que això és molt aviat. 1407 01:09:22,787 --> 01:09:24,870 Així que vaig a posar-lo en ja, string.h, 1408 01:09:24,870 --> 01:09:26,960 així que no tinc accés a coses com Stirling, 1409 01:09:26,960 --> 01:09:29,620 i després int buit principal, com de costum. 1410 01:09:29,620 --> 01:09:33,420 I després vaig a seguir endavant i fer cordes aconsegueix obtenir la seqüència, 1411 01:09:33,420 --> 01:09:35,032 només per obtenir una cadena de l'usuari. 1412 01:09:35,032 --> 01:09:36,740 I després vaig a fer la meva comprovació de validesa. 1413 01:09:36,740 --> 01:09:40,510 Si cadena no és igual a un valor nul, llavors és segur procedir. 1414 01:09:40,510 --> 01:09:42,000 I què és el que vull fer? 1415 01:09:42,000 --> 01:09:48,700 Vaig a repetir des i és igual a 0, i n fins a la longitud de cadena del s. 1416 01:09:48,700 --> 01:09:51,899 >> I vaig a fer això, sempre que i és menor que n, i jo i més. 1417 01:09:51,899 --> 01:09:55,060 Fins al moment, estic realment només préstecs idees d'abans. 1418 01:09:55,060 --> 01:09:57,010 I ara vaig a introduir una branca. 1419 01:09:57,010 --> 01:09:59,635 >> Així que pensar en tornar a les ratllades, on vam tenir aquestes bifurcacions en el camí, 1420 01:09:59,635 --> 01:10:05,110 i la setmana passada a C. vaig a dir això, si el caràcter i-èsim en s 1421 01:10:05,110 --> 01:10:09,250 és major o igual a minúscules a, 1422 01:10:09,250 --> 01:10:13,340 i- en Scratch que, literalment, ho faria diu i, però en C dius signe, 1423 01:10:13,340 --> 01:10:19,830 ampersand-- i el caràcter i-èsim en s és menor que o igual a minúscules z, 1424 01:10:19,830 --> 01:10:21,780 farem alguna cosa interessant. 1425 01:10:21,780 --> 01:10:27,020 Anem a imprimir una realitat caràcter de nova línia sense 1426 01:10:27,020 --> 01:10:31,760 aquest és el caràcter de la cadena, el caràcter i-èsim en la cadena. 1427 01:10:31,760 --> 01:10:37,420 >> Però seguirem endavant i restar 32 d'ella. 1428 01:10:37,420 --> 01:10:42,120 Perquè si el personatge de la cadena que estem buscant 1429 01:10:42,120 --> 01:10:45,950 No està entre una mica i poc z, endavant 1430 01:10:45,950 --> 01:10:48,610 i acaba d'imprimir a terme sense canvis. 1431 01:10:48,610 --> 01:10:50,840 Així que hem introduït aquesta notació entre claudàtors 1432 01:10:50,840 --> 01:10:53,560 per als nostres fils perquè en el i-èsim caràcter de la cadena. 1433 01:10:53,560 --> 01:10:57,520 >> He afegit una mica de lògica condicional, igual Zero en la primera setmana de la setmana passada, on 1434 01:10:57,520 --> 01:10:59,880 Només estic fent servir el meu fonamental comprensió del que és 1435 01:10:59,880 --> 01:11:01,130 passant per sota el capó. 1436 01:11:01,130 --> 01:11:04,190 És el caràcter i de s major o igual a un? 1437 01:11:04,190 --> 01:11:08,290 Igual, que és 97 o 98, o 99, i així successivament? 1438 01:11:08,290 --> 01:11:11,940 >> Però és també menor que o igual al valor de z en minúscules? 1439 01:11:11,940 --> 01:11:16,210 I si és així, què significa aquesta línia? 1440 01:11:16,210 --> 01:11:20,250 14, això és una espècie de la germen de la idea, 1441 01:11:20,250 --> 01:11:23,840 capitalitzar la carta simplement restant 32 d'ella, 1442 01:11:23,840 --> 01:11:29,370 en aquest cas, perquè sé, per això carta, com es representen els meus números. 1443 01:11:29,370 --> 01:11:33,925 Així que seguirem endavant i executar aquest, després de compilar capitalitzar 0.c, 1444 01:11:33,925 --> 01:11:36,210 i córrer capitalitzar 0. 1445 01:11:36,210 --> 01:11:40,300 >> Escriurem una mena Zamyla entrar en minúscules. 1446 01:11:40,300 --> 01:11:42,780 I ara tenim Zamyla en majúscules. 1447 01:11:42,780 --> 01:11:45,050 Anem escrigui en Rob en minúscules. 1448 01:11:45,050 --> 01:11:46,674 Tractarem de Jason en minúscules. 1449 01:11:46,674 --> 01:11:48,590 I seguim aconseguir el capitalització forçada. 1450 01:11:48,590 --> 01:11:50,960 Hi ha un error menor que jo tipus de no anticipar. 1451 01:11:50,960 --> 01:11:54,050 Observi el meu nou símbol és acabar en la mateixa línia que els seus noms, 1452 01:11:54,050 --> 01:11:55,520 que se sent una mica desordenat. 1453 01:11:55,520 --> 01:11:59,170 >> Així que vaig a anar-hi, i en realitat al final d'aquest programa 1454 01:11:59,170 --> 01:12:02,110 imprimir un caràcter de nova línia. 1455 01:12:02,110 --> 01:12:03,160 Això és tot. 1456 01:12:03,160 --> 01:12:06,120 Amb printf, que no cal passar variables o codi de format. 1457 01:12:06,120 --> 01:12:08,460 Vostè pot, literalment, només imprimir una mena de nova línia. 1458 01:12:08,460 --> 01:12:13,529 >> Així que seguirem endavant i fer 0 capitalitzar de nou, tornar a executar-lo, Zamyla. 1459 01:12:13,529 --> 01:12:14,820 I ara és una mica més bonic. 1460 01:12:14,820 --> 01:12:17,274 Ara, el meu indicador està en la seva pròpia línia nova. 1461 01:12:17,274 --> 01:12:18,440 Així que això és tot fi i bo. 1462 01:12:18,440 --> 01:12:19,910 Així que és un bon exemple. 1463 01:12:19,910 --> 01:12:22,700 Però no ho sé si més no necessàriament necessitarà codificar el 32. 1464 01:12:22,700 --> 01:12:23,350 Tu saps que? 1465 01:12:23,350 --> 01:12:26,350 Podria dir-- no ho faig mai recordi quina és la diferència. 1466 01:12:26,350 --> 01:12:29,330 >> Però sé que si jo tenir una lletra minúscula, 1467 01:12:29,330 --> 01:12:34,430 Jo vull restar essencialment fora qualsevol que sigui la distància és d'entre poc 1468 01:12:34,430 --> 01:12:39,160 una de gran i A, perquè si jo suposo que totes les altres cartes són els mateixos, 1469 01:12:39,160 --> 01:12:41,045 que ha de fer la feina. 1470 01:12:41,045 --> 01:12:42,670 Però en lloc de fer això, saps què? 1471 01:12:42,670 --> 01:12:44,240 Hi ha una altra manera encara. 1472 01:12:44,240 --> 01:12:48,090 >> Si això és capitalitzar 1.c-- si fos per posar això en un arxiu separat. 1473 01:12:48,090 --> 01:12:51,030 Farem capitalitzar 2.c de la següent manera. 1474 01:12:51,030 --> 01:12:53,060 Vaig a netejar realment és aquí. 1475 01:12:53,060 --> 01:12:57,420 I en comptes d'haver de sap ni li importa sobre aquells baix nivell 1476 01:12:57,420 --> 01:13:01,090 detalls d'implementació, sóc vegada només va a imprimir un caràcter, 1477 01:13:01,090 --> 01:13:04,610 entre cometes, C cent, i a continuació, trucar a una altra funció que 1478 01:13:04,610 --> 01:13:09,950 hi ha que pren un argument, que és un personatge, com aquest. 1479 01:13:09,950 --> 01:13:12,630 >> Resulta que en C, hi ha una altra crida a la funció 1480 01:13:12,630 --> 01:13:15,550 a superior, que com el seu nom suggereix pren un caràcter 1481 01:13:15,550 --> 01:13:19,350 i ho fa al seu majúscules equivalent, i després el torna 1482 01:13:19,350 --> 01:13:21,410 de manera que printf pot connectar-hi. 1483 01:13:21,410 --> 01:13:25,484 I així, per fer això, però, em que hagi d'introduir un altre arxiu. 1484 01:13:25,484 --> 01:13:28,400 Resulta que hi ha un altre arxiu que només se sabria de la classe, 1485 01:13:28,400 --> 01:13:33,020 o un llibre de text o una línia referència, anomenat type.h. C 1486 01:13:33,020 --> 01:13:38,570 >> Així que si afegeixo que fins entre els de la meva capçalera arxius, i ara tornar a compilar aquest programa, 1487 01:13:38,570 --> 01:13:43,040 capitalize2, ./capitalize2 Retorn. 1488 01:13:43,040 --> 01:13:46,690 Anem escrigui a Zamyla en tot minúscula, segueix funcionant de la mateixa. 1489 01:13:46,690 --> 01:13:48,040 Però saps què? 1490 01:13:48,040 --> 01:13:55,590 Resulta que a la part superior té alguna altra funcionalitat. 1491 01:13:55,590 --> 01:13:58,410 >> I vaig a presentar aquesta comandar aquí, una mena de malaptesa 1492 01:13:58,410 --> 01:14:00,250 anomenat, però l'home per al manual. 1493 01:14:00,250 --> 01:14:03,960 Resulta que la majoria dels sistemes Linux, com estem utilitzant aquí-- operatiu Linux 1494 01:14:03,960 --> 01:14:06,270 system-- tenir un domini anomenat home, que diu: 1495 01:14:06,270 --> 01:14:08,530 Hey, ordinador, dóna'm el manual de l'equip. 1496 01:14:08,530 --> 01:14:10,680 Què és el que desitja mirar cap amunt en aquest manual? 1497 01:14:10,680 --> 01:14:13,840 >> Vull veure la funció cridats a superior, Retorn. 1498 01:14:13,840 --> 01:14:16,070 I és una mica críptic llegir de vegades. 1499 01:14:16,070 --> 01:14:18,780 Però Recordeu que estem en el Manual del Programador de Linux. 1500 01:14:18,780 --> 01:14:19,530 I és tot el text. 1501 01:14:19,530 --> 01:14:21,905 I l'avís que hi ha la nom de la funció aquí. 1502 01:14:21,905 --> 01:14:25,030 Resulta que té un cosí anomenat per baixar, el que fa el contrari. 1503 01:14:25,030 --> 01:14:29,710 I la notificació esmentada en resum, per utilitzar aquesta funcionar la pàgina del manual, per així dir-ho, 1504 01:14:29,710 --> 01:14:32,220 M'està dient que jo d'incloure c type.h. 1505 01:14:32,220 --> 01:14:33,630 I sabia que a partir de la pràctica. 1506 01:14:33,630 --> 01:14:36,210 >> Aquí, m'està mostrant els dos prototips per a la funció, 1507 01:14:36,210 --> 01:14:39,070 pel que si alguna vegada vull fer servir aquest Jo sé el que prenen com a entrada, 1508 01:14:39,070 --> 01:14:40,652 i el tornen com a sortida. 1509 01:14:40,652 --> 01:14:42,360 I llavors si llegeixo la descripció, veig 1510 01:14:42,360 --> 01:14:44,820 amb més detall el que fa la funció. 1511 01:14:44,820 --> 01:14:48,100 Però el més important, si Miro baix valor de retorn, 1512 01:14:48,100 --> 01:14:51,710 es diu que el valor retornat és la de la lletra convertit, 1513 01:14:51,710 --> 01:14:57,880 o C, l'entrada original, si la conversió no era possible. 1514 01:14:57,880 --> 01:15:01,992 >> En altres paraules, a superior a tractar per convertir una lletra en majúscules. 1515 01:15:01,992 --> 01:15:03,450 I si és així, que va a tornar-lo. 1516 01:15:03,450 --> 01:15:07,010 Però si no pot per alguna reason-- potser és el cas ja superior, 1517 01:15:07,010 --> 01:15:09,550 potser és un signe d'exclamació o alguna altra punctuation-- 1518 01:15:09,550 --> 01:15:12,200 que només va a tornar el C original, 1519 01:15:12,200 --> 01:15:17,340 que vol dir que puc fer que el meu codi millor dissenyat de la següent manera. 1520 01:15:17,340 --> 01:15:20,580 >> No necessito tots aquestes línies de codi maleït. 1521 01:15:20,580 --> 01:15:22,610 Totes les línies que he Només pot ressaltat 1522 01:15:22,610 --> 01:15:28,700 col·lapsar-se en un senzill línia, que és això- cent printf 1523 01:15:28,700 --> 01:15:33,510 c per suport superior S i. 1524 01:15:33,510 --> 01:15:36,090 I això seria una exemple d'un millor disseny. 1525 01:15:36,090 --> 01:15:40,040 >> Per què implementar en 7 o 8 línies de codi, el que fos que acabo 1526 01:15:40,040 --> 01:15:44,960 suprimit, quan en el seu lloc pot col·lapsar tots els que la lògica i la presa de decisions 1527 01:15:44,960 --> 01:15:49,620 en una sola línia, ara 13, que es basa en una biblioteca function-- 1528 01:15:49,620 --> 01:15:53,430 una funció que ve amb C, però que fa exactament el que vol que faci. 1529 01:15:53,430 --> 01:15:55,295 I, francament, fins i tot si que no va venir amb C, 1530 01:15:55,295 --> 01:15:58,880 es podria aplicar a mà com es que hem vist, amb arribar int negatiu 1531 01:15:58,880 --> 01:16:01,700 i obtenir positius int la setmana passada també. 1532 01:16:01,700 --> 01:16:03,470 >> Aquest codi ara és molt més fàcil de llegir. 1533 01:16:03,470 --> 01:16:06,670 I, de fet, si ens desplacem cap amunt, mira com molt més compacte 1534 01:16:06,670 --> 01:16:08,360 aquesta versió del meu programa és. 1535 01:16:08,360 --> 01:16:11,230 És una mica pesat sobre ara, Amb tot això inclou. 1536 01:16:11,230 --> 01:16:14,380 Però això està bé, perquè ara estic de peu sobre les espatlles dels programadors 1537 01:16:14,380 --> 01:16:15,300 abans que jo. 1538 01:16:15,300 --> 01:16:18,440 I qualsevol que implementat per realment superior 1539 01:16:18,440 --> 01:16:21,470 em va fer un favor, igual que qualsevol implementat realment Stirling 1540 01:16:21,470 --> 01:16:24,790 em va fer un favor fa algun temps. 1541 01:16:24,790 --> 01:16:26,970 I pel que ara tenim una millor programa de disseny 1542 01:16:26,970 --> 01:16:31,680 que implementa exactament la mateixa lògica. 1543 01:16:31,680 --> 01:16:35,580 >> Parlant de Stirling, va deixar Em seguir endavant i fer això. 1544 01:16:35,580 --> 01:16:38,320 Déjame anar per davant i guardar aquesta imatge com stirling.c. 1545 01:16:38,320 --> 01:16:43,255 I resulta que, podem pelar una altra capa bastant simple ara. 1546 01:16:43,255 --> 01:16:45,630 Vaig a seguir endavant i fuet un altre programa en el principal 1547 01:16:45,630 --> 01:16:49,759 aquí que simplement re-eines longitud de la cadena de la següent manera. 1548 01:16:49,759 --> 01:16:52,300 Així que aquí hi ha una línia de codi que Me per crear una cadena de l'usuari. 1549 01:16:52,300 --> 01:16:53,910 Seguim fent servir una vegada i una altra. 1550 01:16:53,910 --> 01:16:58,900 Déjame posar-me una variable anomenada n de tipus int que emmagatzema un nombre. 1551 01:16:58,900 --> 01:17:02,490 >> I em va deixar anar endavant i fer el següent lògica. 1552 01:17:02,490 --> 01:17:15,610 Mentre que el personatge fa enèsim en s és igual a 0 barra invertida, endavant 1553 01:17:15,610 --> 01:17:17,930 i incrementar n. 1554 01:17:17,930 --> 01:17:23,506 I després imprimir printf cent i n. 1555 01:17:23,506 --> 01:17:29,200 Jo reclamo que aquest programa aquí, sense cridar l'longitud de la cadena, 1556 01:17:29,200 --> 01:17:31,150 s'adona de la longitud d'una cadena. 1557 01:17:31,150 --> 01:17:34,600 >> I la màgia és enterament encapsulat en la línia 8 1558 01:17:34,600 --> 01:17:39,830 aquí amb el que sembla ser una nova sintaxi, aquesta barra invertida 0 cometes simples. 1559 01:17:39,830 --> 01:17:41,360 Però ¿per què és això? 1560 01:17:41,360 --> 01:17:44,100 Bé, tingui en compte el que ha estat passant tot aquest temps. 1561 01:17:44,100 --> 01:17:47,990 >> I com una banda abans que m'oblidi, s'adonen també, que, a més de les pàgines man 1562 01:17:47,990 --> 01:17:50,920 que vénen amb un típic sistema Linux com CS50 IDE, 1563 01:17:50,920 --> 01:17:53,770 adonar-se que nosaltres, els El personal de l'descomptat, també 1564 01:17:53,770 --> 01:17:56,030 fet un lloc Versió d'aquesta mateixa idea anomenada 1565 01:17:56,030 --> 01:17:59,940 reference.cs50.net, que té totes aquestes mateixes pàgines del manual, 1566 01:17:59,940 --> 01:18:02,020 tot d'aquest mateix documentació, així com 1567 01:18:02,020 --> 01:18:05,730 una petita caixa a la part superior que permet a convertir tota la justa 1568 01:18:05,730 --> 01:18:09,025 llenguatge arcà en menys còmode la manera, en el qual, el professorat, 1569 01:18:09,025 --> 01:18:12,150 han passat per i tractat de simplificar alguna cosa de la llengua per mantenir les coses 1570 01:18:12,150 --> 01:18:14,830 centrat en les idees, i no alguns dels aspectes tècnics. 1571 01:18:14,830 --> 01:18:20,070 Així que tenir en compte, reference.cs50.net com un altre recurs també. 1572 01:18:20,070 --> 01:18:23,800 >> Però ¿per què funciona la longitud de la cadena de la forma en què vaig proposar fa un moment? 1573 01:18:23,800 --> 01:18:25,160 Aquí hi ha el nom de Zamyla nou. 1574 01:18:25,160 --> 01:18:27,690 I aquí hi ha el nom de Zamyla encaixonat, com segueixo fent, 1575 01:18:27,690 --> 01:18:31,360 per pintar un quadre d'ell que és, en realitat, només una seqüència de caràcters. 1576 01:18:31,360 --> 01:18:34,260 Però Zamyla no existeix en l'aïllament en un programa. 1577 01:18:34,260 --> 01:18:37,420 >> Quan s'escriu i executa un programa, vostè està utilitzant el seu Mac o PC 1578 01:18:37,420 --> 01:18:40,010 com la memòria, o RAM per així dir-ho. 1579 01:18:40,010 --> 01:18:42,620 I que es pugui imaginar l'ordinador com tenir 1580 01:18:42,620 --> 01:18:44,730 una gran quantitat de gigabytes de memòria en aquests dies. 1581 01:18:44,730 --> 01:18:47,700 I un concert significa milers de milions, per la qual cosa milers de milions de bytes. 1582 01:18:47,700 --> 01:18:48,910 >> Però anem a retrocedir en el temps. 1583 01:18:48,910 --> 01:18:51,530 I suposem que estem utilitzant un equip molt vell que 1584 01:18:51,530 --> 01:18:55,150 només té 32 bytes de memòria. 1585 01:18:55,150 --> 01:18:59,310 Vaig poder, en la meva pantalla d'ordinador, simplement dibuixar això de la següent manera. 1586 01:18:59,310 --> 01:19:05,240 >> Jo podria simplement dir que el meu equip té tota aquesta memòria. 1587 01:19:05,240 --> 01:19:08,830 I això és com un pal de memòria, si Recordes la nostra imatge de l'última vegada. 1588 01:19:08,830 --> 01:19:11,670 I si em divideixo en aquest número suficient de vegades, 1589 01:19:11,670 --> 01:19:15,040 Puc reclamar que tinc 32 bytes de la memòria a la pantalla. 1590 01:19:15,040 --> 01:19:18,239 >> Ara, en realitat, només puc dibuixar fins el moment en aquesta pantalla aquí. 1591 01:19:18,239 --> 01:19:20,280 Així que seguiré endavant, i just per convenció, 1592 01:19:20,280 --> 01:19:24,050 cridar la memòria de l'ordinador com reixeta, no només com una línia recta. 1593 01:19:24,050 --> 01:19:28,190 En concret, reclam ara que aquesta reixeta, aquest 8 per 4 reixeta, 1594 01:19:28,190 --> 01:19:31,800 simplement representa els 32 bytes de memòria disponible al meu Mac, 1595 01:19:31,800 --> 01:19:33,030 o disposar d'un PC. 1596 01:19:33,030 --> 01:19:34,780 I estan embolicant en dues línies, just 1597 01:19:34,780 --> 01:19:38,030 perquè s'ajusta més a la pantalla. 1598 01:19:38,030 --> 01:19:40,800 Però aquest és el primer byte. 1599 01:19:40,800 --> 01:19:41,990 Aquest és el segon byte. 1600 01:19:41,990 --> 01:19:43,300 Aquesta és la tercera byte. 1601 01:19:43,300 --> 01:19:45,310 >> I aquest és el byte número 32. 1602 01:19:45,310 --> 01:19:52,910 O bé, si pensem com un ordinador científic, és a dir byte 0, 1, 2, 3, 31. 1603 01:19:52,910 --> 01:19:55,950 Pel que té de 0 a 31, si es comença a comptar a 0. 1604 01:19:55,950 --> 01:19:59,830 >> Així que si fem servir un programa que les trucades queden cadena, 1605 01:19:59,830 --> 01:20:05,280 i obtenim una cadena humana des de la com jo ho vaig fer anomenat Zamyla, Z-A-H-I-L-A, 1606 01:20:05,280 --> 01:20:09,430 com en el món fa el no perdre l'ordinador dels quals bytes, 1607 01:20:09,430 --> 01:20:12,230 el qual tros de memòria, pertany a quina seqüència? 1608 01:20:12,230 --> 01:20:16,270 En altres paraules, si es procedeix a escriure un altre nom a l'ordinador, 1609 01:20:16,270 --> 01:20:19,890 com això Andi, trucant obtenir una cadena d'una segona vegada, 1610 01:20:19,890 --> 01:20:23,030 A-N-D-I ha d'acabar al la memòria de l'ordinador també. 1611 01:20:23,030 --> 01:20:23,850 Però com? 1612 01:20:23,850 --> 01:20:29,700 >> Doncs bé, resulta que per sota de la capó, el que fa C a l'emmagatzemar cadenes 1613 01:20:29,700 --> 01:20:35,080 que els tipus humans a, o que provenen d'alguna altra font, que és 1614 01:20:35,080 --> 01:20:39,190 delinea la finalitat d'ells amb una barra invertida character-- especial 1615 01:20:39,190 --> 01:20:44,750 0, que és només una forma especial de dir 80 bits en una fila. 1616 01:20:44,750 --> 01:20:47,950 >> Així A-- aquest és el record el nombre 97. 1617 01:20:47,950 --> 01:20:51,770 Així algun patró de 8 bits representa el nombre decimal 97. 1618 01:20:51,770 --> 01:20:58,070 Aquesta barra invertida 0 és, literalment, el nombre 0, nul àlies, N-O-L, a diferència d'abans, 1619 01:20:58,070 --> 01:20:59,630 N-O-L-L, que hem parlat. 1620 01:20:59,630 --> 01:21:05,700 Però per ara, només sé que aquest 0 barra invertida es troba a 80 bits en una fila. 1621 01:21:05,700 --> 01:21:09,810 >> I és només aquesta línia en el sorra que es diu res a l'esquerra 1622 01:21:09,810 --> 01:21:12,610 pertany a una cadena, o un tipus de dades. 1623 01:21:12,610 --> 01:21:15,480 I qualsevol cosa a la dreta pertany a una altra cosa. 1624 01:21:15,480 --> 01:21:17,440 Nom d'Andi, per la seva banda, que acaba visualment 1625 01:21:17,440 --> 01:21:21,310 succeeix per embolicar a l'altra línia, però això és només un detall estètic, 1626 01:21:21,310 --> 01:21:23,990 De la mateixa manera s'acaba nul. 1627 01:21:23,990 --> 01:21:29,290 >> És una cadena de caràcters d'un A-N-D-I, a més d'un cinquè caràcter secret, 1628 01:21:29,290 --> 01:21:33,560 tots els bits 0, que simplement demarca al final del nom d'Andi també. 1629 01:21:33,560 --> 01:21:37,120 I si cridem a obtenir una cadena d'una tercera vegada a l'ordinador per obtenir una cadena com 1630 01:21:37,120 --> 01:21:44,210 Maria, H-A-R-I-A, de manera similar és Maria de nul nom acaba amb una barra invertida 0. 1631 01:21:44,210 --> 01:21:47,170 >> Aquesta és fonamentalment diferent des de com un ordinador faria normalment 1632 01:21:47,170 --> 01:21:51,850 emmagatzemar un nombre enter o un flotador o un altre tipus de dades tranquils, en el record, 1633 01:21:51,850 --> 01:21:57,420 un enter és en general de 32 bits, o 4 bytes, o potser fins i tot 64 bits, 1634 01:21:57,420 --> 01:21:59,100 o vuit bytes. 1635 01:21:59,100 --> 01:22:02,620 No obstant això, molts primitives en un ordinador en un llenguatge de programació 1636 01:22:02,620 --> 01:22:05,550 tenir un nombre fix de bytes sota de la hood-- 1637 01:22:05,550 --> 01:22:08,100 potser 1, 2 potser, potser 4, potser 8. 1638 01:22:08,100 --> 01:22:13,250 >> Però les cadenes, per disseny, tenen una Nombre dinàmica de caràcters. 1639 01:22:13,250 --> 01:22:16,980 No sap per endavant, fins els tipus humans en Z-A-M-I-L-A, 1640 01:22:16,980 --> 01:22:21,400 o M-A-R-I-A, o A-N-D-I. Vostè no sap el nombre de vegades que l'usuari va a colpejar 1641 01:22:21,400 --> 01:22:22,070 el teclat. 1642 01:22:22,070 --> 01:22:26,490 Per tant, vostè no sap com molts personatges d'antelació 1643 01:22:26,490 --> 01:22:27,540 necessitaràs. 1644 01:22:27,540 --> 01:22:31,840 >> I el que C només tipus de fulles com una molla de pa secreta sota de la campana 1645 01:22:31,840 --> 01:22:32,960 al final de la cadena. 1646 01:22:32,960 --> 01:22:39,280 Després d'emmagatzemar Z-A-M-I-L-A en la memòria, també només posa l'equivalent 1647 01:22:39,280 --> 01:22:40,210 d'un període. 1648 01:22:40,210 --> 01:22:45,060 Al final d'una frase, que posa 80 bits, per tal 1649 01:22:45,060 --> 01:22:49,120 de recordar on Zamyla comença i acaba. 1650 01:22:49,120 --> 01:22:51,490 >> Llavors, quin és la connexió, llavors, per a aquest programa? 1651 01:22:51,490 --> 01:22:55,190 Aquest programa aquí, Stirling, és simplement un mecanisme 1652 01:22:55,190 --> 01:22:57,970 per aconseguir una cadena per part de l'usuari, la línia 6. 1653 01:22:57,970 --> 01:23:01,160 Línia 7, declaro una variable n trucada i la va posar igual a 0. 1654 01:23:01,160 --> 01:23:08,680 >> I després, en la línia 8, simplement li vaig preguntar la qüestió, mentre que el caràcter n-èsim fa 1655 01:23:08,680 --> 01:23:12,120 no és igual tot 0 bits-- en altres paraules, no fa 1656 01:23:12,120 --> 01:23:14,500 igualtat d'aquest especial caràcter, la barra invertida 0, que 1657 01:23:14,500 --> 01:23:18,470 era només que character-- nul especial seguir endavant i només s'incrementa n. 1658 01:23:18,470 --> 01:23:21,460 >> I seguir fent-ho, i mantenir fent-ho, i seguir fent-ho. 1659 01:23:21,460 --> 01:23:23,430 I així, tot i que en el passat hem utilitzat i, 1660 01:23:23,430 --> 01:23:25,181 que està perfectament bé semànticament utilitzar n, 1661 01:23:25,181 --> 01:23:27,430 si vostè està tractant de comptar aquest temps deliberadament, 1662 01:23:27,430 --> 01:23:28,720 i només volen cridar n. 1663 01:23:28,720 --> 01:23:34,720 Així que això només segueix fent la pregunta, és el caràcter d'ordre n de s tots 0s? 1664 01:23:34,720 --> 01:23:38,470 Si no és així, busqui en l'aspecte, mirar cap al costat, mira a la següent, 1665 01:23:38,470 --> 01:23:39,460 mirar a la següent. 1666 01:23:39,460 --> 01:23:45,540 >> Però tan aviat com vostè veu barra invertida 0, aquesta línia loop-- 9 a 11-- s'atura. 1667 01:23:45,540 --> 01:23:49,640 Es trenca fora del bucle while, deixant a l'interior d'aquesta variable n 1668 01:23:49,640 --> 01:23:54,530 un recompte total de tota la caràcters de la cadena que el va veure, 1669 01:23:54,530 --> 01:23:55,660 d'aquesta manera la impressió cap a fora. 1670 01:23:55,660 --> 01:23:56,760 Així que anem a provar això. 1671 01:23:56,760 --> 01:23:59,500 >> Déjame anar per davant i, sense utilitzant la funció de stirling, 1672 01:23:59,500 --> 01:24:04,240 però només fent servir la meva pròpia versió de collita pròpia aquí es diu stirling, deixa anar per davant 1673 01:24:04,240 --> 01:24:07,700 i córrer stirling, escrigui alguna cosa com Zamyla, que sé per endavant 1674 01:24:07,700 --> 01:24:08,670 és de sis caràcters. 1675 01:24:08,670 --> 01:24:10,080 Ja veurem si funciona. 1676 01:24:10,080 --> 01:24:10,920 De fet, són les sis. 1677 01:24:10,920 --> 01:24:15,257 Anem a provar amb Rob, tres personatges, tres caràcters, així, i així successivament. 1678 01:24:15,257 --> 01:24:17,340 Així que això és tot el que està passant de sota el capó. 1679 01:24:17,340 --> 01:24:19,548 I notar les connexions, Després, amb la primera setmana 1680 01:24:19,548 --> 01:24:22,370 de la classe, on vam parlar sobre una mena de l'abstracció, 1681 01:24:22,370 --> 01:24:26,960 el qual és només aquesta estratificació de les idees, o complexitat, a la part superior dels principis bàsics. 1682 01:24:26,960 --> 01:24:30,710 En aquest cas, estem buscant una mena de sota el capó de Stirling, 1683 01:24:30,710 --> 01:24:33,510 per així dir-ho, d'esbrinar, com seria posat en pràctica? 1684 01:24:33,510 --> 01:24:35,232 >> I podríem executar-la de nou nosaltres mateixos. 1685 01:24:35,232 --> 01:24:37,440 Però estem mai més va per tornar a posar en pràctica Stirling. 1686 01:24:37,440 --> 01:24:39,780 Només anem a stirling utilitzar per tal 1687 01:24:39,780 --> 01:24:42,100 per aconseguir realment certa extensió cordes. 1688 01:24:42,100 --> 01:24:44,200 >> Però no hi ha màgia sota de la campana. 1689 01:24:44,200 --> 01:24:46,716 Si sap que sota el capó, una cadena 1690 01:24:46,716 --> 01:24:48,090 és simplement una seqüència de caràcters. 1691 01:24:48,090 --> 01:24:51,090 I aquesta seqüència de caràcters tots poden ser tractats numèricament 1692 01:24:51,090 --> 01:24:53,330 0 amb el suport, suport 1, suport 2, i 1693 01:24:53,330 --> 01:24:57,420 saber que al final d'una cadena és una caràcter especial, es pot esbrinar 1694 01:24:57,420 --> 01:25:01,710 com fer gairebé qualsevol cosa en una programa, perquè tot es redueix a 1695 01:25:01,710 --> 01:25:03,400 és la lectura i escriptura de la memòria. 1696 01:25:03,400 --> 01:25:06,130 És a dir, el canvi i mirant en la memòria, o moure coses 1697 01:25:06,130 --> 01:25:10,940 al voltant de la memòria, coses d'impressió a la pantalla, i així successivament. 1698 01:25:10,940 --> 01:25:14,800 >> Així que ara utilitzarem aquesta recent descoberta comprensió del que en realitat cordes 1699 01:25:14,800 --> 01:25:17,910 estan sota la campana, i pelar una altra capa 1700 01:25:17,910 --> 01:25:20,080 que fins ara hem estat ignorant per complet. 1701 01:25:20,080 --> 01:25:22,650 En particular, qualsevol moment hem implementat un programa, 1702 01:25:22,650 --> 01:25:25,930 que hem tingut aquesta línia de codi prop de la part superior declarant principal. 1703 01:25:25,930 --> 01:25:27,810 I hem especificat int void main. 1704 01:25:27,810 --> 01:25:31,240 >> I aquest buit dins dels parèntesis ha estat dient tot aquest temps que la principal 1705 01:25:31,240 --> 01:25:33,440 per si mateix no té cap argument. 1706 01:25:33,440 --> 01:25:36,210 Qualsevol entrada que el principal és va a obtenir dels usuaris 1707 01:25:36,210 --> 01:25:39,020 ha de venir d'alguna altra mecanisme, com get int, 1708 01:25:39,020 --> 01:25:42,040 o aconseguir flotador, o obtenir la seqüència, o alguna altra funció. 1709 01:25:42,040 --> 01:25:44,710 Però resulta que quan s'escriu un programa, 1710 01:25:44,710 --> 01:25:47,690 en realitat es pot especificar que aquest programa està 1711 01:25:47,690 --> 01:25:51,730 prendre les entrades de la humana en la pròpia línia d'ordres. 1712 01:25:51,730 --> 01:25:56,310 >> En altres paraules, tot i que fins al moment han estat funcionant només ./hola hola 1713 01:25:56,310 --> 01:26:00,312 o programes similars, tots de la altres programes que hem estat utilitzant, 1714 01:26:00,312 --> 01:26:02,770 que nosaltres mateixos no escrivim, ha estat prenent, segons sembla, 1715 01:26:02,770 --> 01:26:05,210 arguments-- línia d'ordres coses com el maquillatge. 1716 01:26:05,210 --> 01:26:07,450 Vostè diu alguna cosa així com maquillatge, i després una segona paraula. 1717 01:26:07,450 --> 01:26:10,950 O so metàl·lic, dius so metàl·lic, i després una segona paraula, el nom d'un arxiu. 1718 01:26:10,950 --> 01:26:14,410 >> O fins i tot RM o CP, com es pot han vist o ja utilitzat 1719 01:26:14,410 --> 01:26:15,880 per eliminar o copiar arxius. 1720 01:26:15,880 --> 01:26:18,920 Tots els que prenen els anomenats arguments-- línia d'ordres 1721 01:26:18,920 --> 01:26:21,130 paraules addicionals en la línia d'ordres. 1722 01:26:21,130 --> 01:26:23,260 Però fins ara, ens nosaltres mateixos no han tingut 1723 01:26:23,260 --> 01:26:27,080 aquest luxe de prendre l'entrada de la usuari quan ell o ella realment funciona 1724 01:26:27,080 --> 01:26:29,120 el propi programa a la línia d'ordres. 1725 01:26:29,120 --> 01:26:33,710 >> Però podem fer que en tornar a declarar principal cap endavant, no com tenir 1726 01:26:33,710 --> 01:26:36,750 anul·lar entre parèntesis, però aquests dos arguments 1727 01:26:36,750 --> 01:26:40,600 instead-- el primer un nombre sencer, i la segona una mica 1728 01:26:40,600 --> 01:26:44,170 nou, una cosa que anomenarem una matriu, alguna cosa similar en esperit 1729 01:26:44,170 --> 01:26:49,220 al que vam veure en Scratch com una llista, però una matriu de cadenes, com aviat veurem. 1730 01:26:49,220 --> 01:26:51,790 Però anem a veure això A tall d'exemple, abans que 1731 01:26:51,790 --> 01:26:53,690 distingir exactament el que això significa. 1732 01:26:53,690 --> 01:26:56,520 >> Així que si entro a CS50 IDE aquí, m'he anat per davant 1733 01:26:56,520 --> 01:27:01,840 i va declarar en un arxiu anomenat argv0.c la següent plantilla. 1734 01:27:01,840 --> 01:27:04,120 I noti l'única això és diferent en el que va 1735 01:27:04,120 --> 01:27:08,570 és que he canviat buit a int argc cadena argv suport d'obrir, tancar 1736 01:27:08,570 --> 01:27:09,070 suport. 1737 01:27:09,070 --> 01:27:11,730 I l'avís per ara, no hi ha res dins d'aquests suports. 1738 01:27:11,730 --> 01:27:12,620 >> No hi ha un nombre. 1739 01:27:12,620 --> 01:27:15,070 I no hi ha i, o n, o qualsevol altra lletra. 1740 01:27:15,070 --> 01:27:17,010 Només estic fent servir el claudàtors, per ara, 1741 01:27:17,010 --> 01:27:19,510 per raons anem a venir tornar en un moment. 1742 01:27:19,510 --> 01:27:21,330 >> I ara el que vaig a fer és el següent. 1743 01:27:21,330 --> 01:27:26,680 Si argc és igual a igual 2-- i recorden que és igual als iguals 1744 01:27:26,680 --> 01:27:30,040 és l'operador d'igualtat comparar l'esquerra i la dreta per la igualtat. 1745 01:27:30,040 --> 01:27:31,790 No és l'assignació operador, que és 1746 01:27:31,790 --> 01:27:36,510 el signe igual única, el que significa que la còpia des de la dreta a l'esquerra un cert valor. 1747 01:27:36,510 --> 01:27:42,840 >> Si argc és igual a igual a 2, vull per exemple, printf, hola, percentatges, nova línia, 1748 01:27:42,840 --> 01:27:47,340 i després connecti en-- i aquí està la nova suport de argv trick-- 1, per raons 1749 01:27:47,340 --> 01:27:48,840 que anem a tornar en un moment. 1750 01:27:48,840 --> 01:27:52,110 Perquè si no ho fa argc igual a 2, saps què? 1751 01:27:52,110 --> 01:27:57,400 Seguirem endavant i, com de costum, imprimir terme hola món sense substitució. 1752 01:27:57,400 --> 01:28:02,710 >> Per tant, semblaria que si argc, que representa el nombre d'arguments, és igual a 2, 1753 01:28:02,710 --> 01:28:04,740 Vaig a imprimir hola una cosa o una altra. 1754 01:28:04,740 --> 01:28:07,560 Altrament, per defecte, estic va a imprimir hola món. 1755 01:28:07,560 --> 01:28:08,770 Llavors, què vol dir això? 1756 01:28:08,770 --> 01:28:15,550 >> Bé, deixa anar per davant i guardar aquesta imatge i, a continuació, fer que argv0, 1757 01:28:15,550 --> 01:28:18,940 i després ./argv0, Retorn. 1758 01:28:18,940 --> 01:28:20,300 I diu hola món. 1759 01:28:20,300 --> 01:28:21,260 Ara, per què? 1760 01:28:21,260 --> 01:28:24,730 >> Doncs bé, resulta que en qualsevol moment que executar un programa a la línia d'ordres, 1761 01:28:24,730 --> 01:28:29,570 s'està omplint en el que anem a en general, trucar a un vector d'argument. 1762 01:28:29,570 --> 01:28:33,100 En altres paraules, de forma automàtica la ordinador, el sistema operatiu, 1763 01:28:33,100 --> 01:28:38,340 es va a lliurar al seu programa si mateix una llista de totes les paraules 1764 01:28:38,340 --> 01:28:40,850 que l'ésser humà ha teclejat en el símbol, en cas que 1765 01:28:40,850 --> 01:28:43,790 el programador vol fer alguna cosa amb aquesta informació. 1766 01:28:43,790 --> 01:28:48,540 I en aquest cas, l'única paraula M'he teclejat en l'indicador és ./argv0. 1767 01:28:48,540 --> 01:28:55,420 >> I pel que el nombre d'arguments que es es passa al meu programa és només un. 1768 01:28:55,420 --> 01:28:58,880 En altres paraules, l'argument comptar, també conegut com argc 1769 01:28:58,880 --> 01:29:00,970 aquí com un sencer, és només un. 1770 01:29:00,970 --> 01:29:03,000 Un, per descomptat, no és igual a dos. 1771 01:29:03,000 --> 01:29:05,980 I així que això és el que imprimeix, hola món. 1772 01:29:05,980 --> 01:29:08,170 >> Però m'ho dius a mi prendre això en algun lloc. 1773 01:29:08,170 --> 01:29:09,930 Permetin-me dir, argv0. 1774 01:29:09,930 --> 01:29:12,740 I llavors què hi ha de Maria? 1775 01:29:12,740 --> 01:29:14,990 I a continuació, premeu la tecla Enter. 1776 01:29:14,990 --> 01:29:18,020 >> I adonar-se del que passa aquí màgicament. 1777 01:29:18,020 --> 01:29:22,640 Ara, en comptes de hola món, no tinc canviat el comportament d'aquest programa 1778 01:29:22,640 --> 01:29:26,310 mitjançant l'adopció de l'entrada no des get cadena o alguna altra funció, 1779 01:29:26,310 --> 01:29:30,570 però a partir de, pel que sembla, el meu comandament en si, el que originalment escrit en. 1780 01:29:30,570 --> 01:29:35,720 I puc jugar a aquest joc de nou pel canviant-a Stelios, per exemple. 1781 01:29:35,720 --> 01:29:38,400 >> I ara veig un altre nom encara. 1782 01:29:38,400 --> 01:29:40,540 I aquí, podria dir Andi. 1783 01:29:40,540 --> 01:29:42,137 I podria dir Zamyla. 1784 01:29:42,137 --> 01:29:45,220 I podem jugar a aquest joc durant tot el dia, acaba de connectar diferents valors, 1785 01:29:45,220 --> 01:29:49,550 sempre que proporciono exactament dues paraules en l'indicador, 1786 01:29:49,550 --> 01:29:52,260 de tal manera que argc, compti el meu argument, és 2. 1787 01:29:52,260 --> 01:29:57,240 >> Veig que el nom endollat ​​a printf, per aquesta condició en aquesta llista? 1788 01:29:57,240 --> 01:30:00,550 Per tant, sembla que tenim ara la capacitat expressiva 1789 01:30:00,550 --> 01:30:04,410 de prendre l'aportació d'un altre mecanisme, des de la línia d'ordres trucada, 1790 01:30:04,410 --> 01:30:07,000 en lloc d'haver d'esperar fins que l'usuari executa el programa, 1791 01:30:07,000 --> 01:30:10,220 i després li demanarà utilitzen una part com a cadena GET. 1792 01:30:10,220 --> 01:30:11,230 >> Així que Què és això? 1793 01:30:11,230 --> 01:30:15,010 Argc, de nou, és només un nombre sencer, el nombre de paraules- arguments-- 1794 01:30:15,010 --> 01:30:18,540 que l'usuari proporcionada en el símbol, a la finestra de terminal, 1795 01:30:18,540 --> 01:30:20,110 incloent-hi el nom del programa. 1796 01:30:20,110 --> 01:30:23,340 Així que la nostra ./argv0 és, efectivament, el nom del programa, 1797 01:30:23,340 --> 01:30:24,520 o com executar el programa. 1798 01:30:24,520 --> 01:30:25,810 >> Això explica com una paraula. 1799 01:30:25,810 --> 01:30:27,080 Així argc seria 1. 1800 01:30:27,080 --> 01:30:29,750 Però quan escric Stelios, o Andi, o Zamyla, o Maria, 1801 01:30:29,750 --> 01:30:31,660 això vol dir que el nombre d'arguments és de dos. 1802 01:30:31,660 --> 01:30:33,910 I pel que ara hi ha dues paraules s'ha passat. 1803 01:30:33,910 --> 01:30:36,070 >> I avís, podem continuar amb aquesta lògica. 1804 01:30:36,070 --> 01:30:39,050 Si en realitat dic una mena de Zamyla Chan, 1805 01:30:39,050 --> 01:30:42,200 un nom complet, passant d'aquesta manera 03:00 arguments en total, 1806 01:30:42,200 --> 01:30:47,410 Ara es diu que el defecte de nou, perquè, per descomptat, 3 no és igual a 2. 1807 01:30:47,410 --> 01:30:54,080 >> I així, d'aquesta manera, he accés a través d'aquest nou argument argv 1808 01:30:54,080 --> 01:30:56,080 que tècnicament podria trucar a qualsevol cosa que vulguem. 1809 01:30:56,080 --> 01:30:58,940 No obstant això, per convenció, és argv i argc, respectivament. 1810 01:30:58,940 --> 01:31:04,470 Argv, vector argument, és una espècie d'un sinònim d'una programació 1811 01:31:04,470 --> 01:31:07,140 característica de C diu una matriu. 1812 01:31:07,140 --> 01:31:14,410 >> Una matriu és una llista de valors similars cap enrere, cap enrere, cap enrere, cap enrere. 1813 01:31:14,410 --> 01:31:17,810 En altres paraules, si un és just aquí, a RAM, el següent és just al costat d'ella, 1814 01:31:17,810 --> 01:31:18,800 i just al costat d'ella. 1815 01:31:18,800 --> 01:31:20,101 No són per tot el lloc. 1816 01:31:20,101 --> 01:31:23,100 I que aquest últim escenari, on les coses són per tot el lloc en la memòria, 1817 01:31:23,100 --> 01:31:25,082 en realitat pot ser una característica de gran abast. 1818 01:31:25,082 --> 01:31:28,040 Però anem a tornar a això quan ens parlar d'estructures de dades més elegants. 1819 01:31:28,040 --> 01:31:32,260 Per ara, una matriu és només una tros de memòria contigua, 1820 01:31:32,260 --> 01:31:36,520 cada un dels elements són cap enrere, cap enrere, cap enrere, cap enrere, 1821 01:31:36,520 --> 01:31:38,050 i generalment del mateix tipus. 1822 01:31:38,050 --> 01:31:42,630 >> Així que si es pensa, a partir d'una Fa moment, el que és una cadena? 1823 01:31:42,630 --> 01:31:50,460 Bé, una cadena, com Zamyla, Z-A-H-I-L-A, és, tècnicament, 1824 01:31:50,460 --> 01:31:51,400 simplement una matriu. 1825 01:31:51,400 --> 01:31:53,700 És un conjunt de caràcters. 1826 01:31:53,700 --> 01:31:59,250 >> I així, si és que realment traiem això, com he ho va fer abans, com un tros de memòria, 1827 01:31:59,250 --> 01:32:04,510 resulta que cada un d'aquests personatges reprèn un byte. 1828 01:32:04,510 --> 01:32:07,630 I després hi ha aquest especial caràcter sentinella, la barra invertida 0, 1829 01:32:07,630 --> 01:32:12,360 o els vuit bits de 0, que es demarca al final d'aquesta cadena. 1830 01:32:12,360 --> 01:32:15,090 Així que una cadena, es converteix terme, citar cadena de tancament de cometes, 1831 01:32:15,090 --> 01:32:20,580 és simplement un conjunt de chara-- xerrada ser un tipus de dades real. 1832 01:32:20,580 --> 01:32:24,560 >> I ara argv, meanwhile-- anirem de nou al programa. 1833 01:32:24,560 --> 01:32:29,582 Argv, tot i que veiem la paraula cadena aquí, no és una cadena en si. 1834 01:32:29,582 --> 01:32:33,640 Argv, l'argument del vector, és una matriu de cadenes. 1835 01:32:33,640 --> 01:32:37,620 >> Així mateixa manera que pot tenir una gran varietat de caràcters, que poden tenir un nivell més alt, 1836 01:32:37,620 --> 01:32:46,279 una matriu de strings-- així, per exemple, quan vaig escriure fa un moment ./argv0 1837 01:32:46,279 --> 01:33:00,150 argv0, l'espai Z-A-H-I-L-A, que va afirmar que argv tenia dues cadenes en ./argv0 it--, 1838 01:33:00,150 --> 01:33:03,185 i Z-A-M-I-L-A. a altres paraules, argc era 2. 1839 01:33:03,185 --> 01:33:03,980 Perquè és això? 1840 01:33:03,980 --> 01:33:08,370 >> Bé, efectivament, el que està passant és en què cadascuna d'aquestes cadenes 1841 01:33:08,370 --> 01:33:13,990 és, per descomptat, una matriu de caràcters Com abans, cada un dels personatges 1842 01:33:13,990 --> 01:33:15,670 ocupa un byte. 1843 01:33:15,670 --> 01:33:19,720 I no cal confondre el 0 real en el nom del programa amb el 0, 1844 01:33:19,720 --> 01:33:22,040 el que significa que els 80 bits. 1845 01:33:22,040 --> 01:33:27,140 I Zamyla, per la seva banda, segueix sent També una sèrie de caràcters. 1846 01:33:27,140 --> 01:33:31,450 >> Així que al final del dia, el que realment sembla que aquesta sota de la campana. 1847 01:33:31,450 --> 01:33:38,800 Però argv, per la naturalesa de la forma principal obres, em permet embolicar tot això 1848 01:33:38,800 --> 01:33:44,810 per obtenir, si es vol, un arranjament més gran que, si una mica més de simplificar 1849 01:33:44,810 --> 01:33:48,180 el que la imatge s'assembla i no fer bastant dibuixar a escala allà, 1850 01:33:48,180 --> 01:33:56,720 aquesta matriu és només de mida 2, la primera element dels quals conté una cadena, 1851 01:33:56,720 --> 01:33:59,230 el segon element de que conté una cadena. 1852 01:33:59,230 --> 01:34:01,687 I, al seu torn, si tipus de zoom en cada 1853 01:34:01,687 --> 01:34:03,770 d'aquestes cadenes, el que veure sota la campana 1854 01:34:03,770 --> 01:34:07,190 és que cada cadena és només una matriu de caràcters. 1855 01:34:07,190 --> 01:34:11,680 >> Ara, igual que amb les cadenes, hem estat capaços d'aconseguir l'accés 1856 01:34:11,680 --> 01:34:15,260 al caràcter i-èsim d'una sèrie usant aquesta notació de claudàtors. 1857 01:34:15,260 --> 01:34:17,320 De la mateixa manera, amb matrius en general, podem 1858 01:34:17,320 --> 01:34:22,700 utilitzar notació de claudàtors per obtenir en qualsevol nombre de cadenes en una matriu? 1859 01:34:22,700 --> 01:34:25,100 Per exemple, em va deixar seguir endavant i fer-ho. 1860 01:34:25,100 --> 01:34:32,420 >> Déjame seguir endavant i crear argv1.c, que és una mica diferent aquesta vegada. 1861 01:34:32,420 --> 01:34:35,635 En lloc de la comprovació de argc2, Vaig a fer això al seu lloc. 1862 01:34:35,635 --> 01:34:41,270 Per int amb si 0, i és menor que argc, jo i més, 1863 01:34:41,270 --> 01:34:47,920 i després imprimir a l'interior d'aquesta, cent s, nova línia, i després 1864 01:34:47,920 --> 01:34:50,740 argv suport de i. 1865 01:34:50,740 --> 01:34:55,220 >> Així, en altres paraules, no estic tractant amb caràcters individuals en el moment. 1866 01:34:55,220 --> 01:35:00,190 Argv, com es dedueix d'aquests casella buida els suports a la dreta del nom de argv, 1867 01:35:00,190 --> 01:35:03,320 significa argv és una matriu de cadenes. 1868 01:35:03,320 --> 01:35:04,870 I argc és només un int. 1869 01:35:04,870 --> 01:35:08,800 >> Aquesta línia aquí, 6, és dient conjunt i igual a 0. 1870 01:35:08,800 --> 01:35:11,980 Comptar tot el camí fins, però no incloent-hi, argc. 1871 01:35:11,980 --> 01:35:14,010 I a continuació, en cada iteració, imprimir una cadena. 1872 01:35:14,010 --> 01:35:14,800 El corda? 1873 01:35:14,800 --> 01:35:17,270 >> La cadena d'ordre i en argv. 1874 01:35:17,270 --> 01:35:19,530 Així que, abans que fos utilitzant el claudàtor 1875 01:35:19,530 --> 01:35:22,180 notació per arribar a la i-èsima caràcter d'una cadena, ara 1876 01:35:22,180 --> 01:35:27,240 Estic usant la notació de claudàtors per arribar a la cadena i-èsima d'una matriu. 1877 01:35:27,240 --> 01:35:30,310 Així que és una cosa d'una capa anteriorment, conceptualment. 1878 01:35:30,310 --> 01:35:35,390 >> I així, el que és bo d'aquest programa d'ara, si puc compilar argv1, 1879 01:35:35,390 --> 01:35:42,067 i després fer ./argv1 i escriviu en una mena foo bar baz, 1880 01:35:42,067 --> 01:35:45,400 que són les tres paraules que un defecte Informàtic arriba per a qualsevol moment 1881 01:35:45,400 --> 01:35:51,010 ell o ella necessita algunes paraules de marcador de posició, i premeu la tecla Enter, cadascuna d'aquestes paraules, 1882 01:35:51,010 --> 01:35:54,980 incloent el nom del programa, el qual està en argv a la primera ubicació, 1883 01:35:54,980 --> 01:35:58,320 acaba sent impreses d'una en una. 1884 01:35:58,320 --> 01:36:05,290 I si canvi d'això, i dic una mena de argv1 Zamyla Chan, 1885 01:36:05,290 --> 01:36:08,800 obtenim els tres dels paraules, que és argv0, 1886 01:36:08,800 --> 01:36:14,400 argv1, argv2, ja que en aquest argc cas, el recompte, es 3. 1887 01:36:14,400 --> 01:36:20,020 >> Però el que és interessant és si s'entén argv que és només una matriu de cadenes, 1888 01:36:20,020 --> 01:36:24,910 i entén que una cadena és un conjunt de caràcters, 1889 01:36:24,910 --> 01:36:29,470 en realitat podem utilitzar aquest tipus de notació de claudàtors diverses vegades 1890 01:36:29,470 --> 01:36:33,320 per triar una cadena, i després triar un caràcter dins de la cadena, 1891 01:36:33,320 --> 01:36:35,730 busseig en el més profund de la següent manera. 1892 01:36:35,730 --> 01:36:40,100 En aquest exemple, em va deixar anar endavant i cridar a aquest argv2.c. 1893 01:36:40,100 --> 01:36:43,920 1894 01:36:43,920 --> 01:36:50,180 I en aquest exemple, deixa anar per davant i fer el following-- per int i obtenir 0, 1895 01:36:50,180 --> 01:36:53,286 i és menor que argc, i més a més, igual que abans. 1896 01:36:53,286 --> 01:36:55,910 Així, en una altra paraules-- i ara això està aconseguint bastant complicat. 1897 01:36:55,910 --> 01:36:59,940 A continuació vaig a dir iterar sobre cadenes en argv, 1898 01:36:59,940 --> 01:37:01,294 com un comentari a mi mateix. 1899 01:37:01,294 --> 01:37:03,960 I després vaig a tenir una niat per al llaç, que és probable 1900 01:37:03,960 --> 01:37:06,290 ho han fet, o es considera fent, en Scratch, on 1901 01:37:06,290 --> 01:37:08,600 Vaig a dir que sóc int-- no es va a utilitzar de nou i, 1902 01:37:08,600 --> 01:37:12,590 perquè jo no vull a l'ombra, o tipus de sobreescriure l'i existent. 1903 01:37:12,590 --> 01:37:15,780 >> Vaig a, en lloc de, diguem j, perquè això és el meu anar a la variable després que, 1904 01:37:15,780 --> 01:37:18,590 quan jo només intento comptar nombres simples. 1905 01:37:18,590 --> 01:37:28,850 Per j aconsegueix 0-- i també, n, va obtenir la longitud de popa del suport de argv I, 1906 01:37:28,850 --> 01:37:36,030 sempre que j és inferior a m, j plus plus, feu el següent. 1907 01:37:36,030 --> 01:37:37,500 I aquí hi ha la part interessant. 1908 01:37:37,500 --> 01:37:46,330 >> Imprimir un caràcter i una nova línia, endollar el suport argv i, j suport. 1909 01:37:46,330 --> 01:37:47,940 OK, així que permetin-me afegir alguns comentaris aquí. 1910 01:37:47,940 --> 01:37:54,820 Iterar sobre personatges a la cadena actual, 1911 01:37:54,820 --> 01:38:02,290 impressió de caràcters j-èsim en la cadena d'ordre i. 1912 01:38:02,290 --> 01:38:04,630 Així que ara, considerarem el que signifiquen aquests comentaris. 1913 01:38:04,630 --> 01:38:06,750 >> Iterar sobre les cordes en argv-- quants 1914 01:38:06,750 --> 01:38:09,300 cadenes estan en argv, que és una matriu? 1915 01:38:09,300 --> 01:38:13,420 Argc molts, així que estic iterant des i és igual a 0 fins argc. 1916 01:38:13,420 --> 01:38:20,020 Mentrestant, el nombre de caràcters es troben a la cadena d'ordre i en argv? 1917 01:38:20,020 --> 01:38:22,880 >> Doncs bé, per obtenir aquesta resposta, Acabo de trucar longitud de la cadena 1918 01:38:22,880 --> 01:38:26,810 en la cura de cadena actual I aproximadament, que és argv suport de i. 1919 01:38:26,810 --> 01:38:30,090 I vaig a emmagatzemar temporalment que valor de n, només per a fins d'emmagatzematge en memòria cau, 1920 01:38:30,090 --> 01:38:31,590 recordar que per a l'eficiència. 1921 01:38:31,590 --> 01:38:36,330 I després vaig inicialitzar j a 0, seguir endavant, sempre que j és menor que n, 1922 01:38:36,330 --> 01:38:38,430 i en cada increment iteració j. 1923 01:38:38,430 --> 01:38:41,030 >> I llavors aquí, per meu comentari en la línia 12, 1924 01:38:41,030 --> 01:38:43,390 imprimir un caràcter, seguit d'una nova línia, 1925 01:38:43,390 --> 01:38:48,140 suport específicament argv i em dóna la cadena i-èsim 1926 01:38:48,140 --> 01:38:51,690 en argv-- pel que la primera paraula, la segona paraula, la tercera paraula, el que sigui. 1927 01:38:51,690 --> 01:38:57,370 I cau en picat en j més profund, i obté jo el caràcter j-èsim de la paraula. 1928 01:38:57,370 --> 01:39:02,200 I així, en efecte, es pot tractar argv com un multi-dimensional, 1929 01:39:02,200 --> 01:39:06,050 com una de dues dimensions, matriu, de manera que cada paraula amable de mirades 1930 01:39:06,050 --> 01:39:08,580 com aquest en la seva ment de ull, i cada personatge 1931 01:39:08,580 --> 01:39:10,930 és una espècie de compost en una columna, si això ajuda. 1932 01:39:10,930 --> 01:39:13,260 >> En realitat, quan ens burlem aquesta separació, en les setmanes següents, 1933 01:39:13,260 --> 01:39:15,580 que va a ser una mica més sofisticat que això. 1934 01:39:15,580 --> 01:39:17,800 Però el que realment pot pensar que, per ara, 1935 01:39:17,800 --> 01:39:22,110 tan sols per aquesta bidimensional matriu, de manera que un nivell d'ella 1936 01:39:22,110 --> 01:39:23,260 és tot de les cordes. 1937 01:39:23,260 --> 01:39:26,760 I llavors si busseig al més profund, pot arribar als caràcters individuals 1938 01:39:26,760 --> 01:39:29,600 en ella mitjançant l'ús d'aquesta notació aquí. 1939 01:39:29,600 --> 01:39:31,620 >> Llavors, quin és l'efecte net? 1940 01:39:31,620 --> 01:39:34,970 Déjame anar endavant i fer rematadament argv2-- ella. 1941 01:39:34,970 --> 01:39:36,210 He comès un error aquí. 1942 01:39:36,210 --> 01:39:40,160 Declarant implícitament la stirling funció de biblioteca. 1943 01:39:40,160 --> 01:39:42,190 Així que tot aquest temps, és potser apropiada 1944 01:39:42,190 --> 01:39:45,130 que estem tipus d'acabat exactament on vam començar. 1945 01:39:45,130 --> 01:39:48,160 >> Vaig cometre un error, declarant implícitament stirling funció de biblioteca. 1946 01:39:48,160 --> 01:39:48,987 OK, espera un minut. 1947 01:39:48,987 --> 01:39:51,070 Recordo que, sobretot ja que està just aquí. 1948 01:39:51,070 --> 01:39:54,490 Necessito incloure en string.h aquesta versió del programa. 1949 01:39:54,490 --> 01:40:00,050 >> Déjame anar endavant i incloc string.h, llevat que, endavant 1950 01:40:00,050 --> 01:40:04,460 i recompilar argv2. 1951 01:40:04,460 --> 01:40:08,390 I ara, aquí anem, que argv2, Retorn. 1952 01:40:08,390 --> 01:40:10,590 I encara que és una mica críptica a primera vista, 1953 01:40:10,590 --> 01:40:15,690 notar que, en efecte, el s'imprimeix és argv2 punt. 1954 01:40:15,690 --> 01:40:19,970 >> Però si escric algunes paraules després de la símbol, com argv2 Zamyla Chan, 1955 01:40:19,970 --> 01:40:22,560 Introdueix, també una mica críptica a primera vista. 1956 01:40:22,560 --> 01:40:30,540 Però si ens desplacem cap amunt, ./argv2 Z-A-M-I-L-A C-H-A-N. 1957 01:40:30,540 --> 01:40:32,190 Per a això hem repeteixen al llarg de cada paraula. 1958 01:40:32,190 --> 01:40:37,770 I, al seu torn, hem repeteixen al llarg tots els personatges dins d'una paraula. 1959 01:40:37,770 --> 01:40:40,040 >> Ara, després de tot això, s'adonen que hi ha 1960 01:40:40,040 --> 01:40:43,120 un altre detall que hem estat espècie fent cas omís de tot aquest temps. 1961 01:40:43,120 --> 01:40:46,180 Simplement, se separen el les entrades del principal pot ser? 1962 01:40:46,180 --> 01:40:47,780 Què passa amb la producció del principal? 1963 01:40:47,780 --> 01:40:50,540 >> Tot aquest temps, hem estat només copiar i enganxar 1964 01:40:50,540 --> 01:40:53,870 la paraula int front principal, encara que és possible veure en línia, 1965 01:40:53,870 --> 01:40:58,340 de vegades incorrectament en les versions anteriors de C i compiladors, que diuen buit, 1966 01:40:58,340 --> 01:40:59,410 o gens en absolut. 1967 01:40:59,410 --> 01:41:01,580 Però, de fet, per a la versió de C que estem utilitzant, 1968 01:41:01,580 --> 01:41:06,180 C 11, o 2011, compta que ha de ser int. 1969 01:41:06,180 --> 01:41:09,300 I ha de ser o bé nul·la o argc i argv aquí. 1970 01:41:09,300 --> 01:41:10,790 >> Però per què int main? 1971 01:41:10,790 --> 01:41:12,480 Com és en realitat tornant? 1972 01:41:12,480 --> 01:41:16,280 Doncs bé, resulta que tot aquest temps, qualsevol moment vostè ha escrit un programa principal 1973 01:41:16,280 --> 01:41:18,440 Sempre està tornant alguna cosa. 1974 01:41:18,440 --> 01:41:19,960 Però ha estat fent en secret. 1975 01:41:19,960 --> 01:41:23,350 >> Aquest alguna cosa és una int, com suggereix la línia 5. 1976 01:41:23,350 --> 01:41:24,225 Però el int? 1977 01:41:24,225 --> 01:41:26,100 Bé, hi ha una convenció en la programació, 1978 01:41:26,100 --> 01:41:29,790 pel que si no té sortit malament i tot està bé, 1979 01:41:29,790 --> 01:41:34,250 programes i funcions en general return-- alguna cosa counterintuitively-- 1980 01:41:34,250 --> 01:41:35,230 0. 1981 01:41:35,230 --> 01:41:38,070 0 vol dir generalment que tot està bé. 1982 01:41:38,070 --> 01:41:40,610 Així que, encara que es pensa en com a falsa en molts contextos, 1983 01:41:40,610 --> 01:41:42,930 que en realitat vol dir generalment una bona cosa 1984 01:41:42,930 --> 01:41:49,560 >> Mentrestant, si un programa torna 1, o negatiu 1, o 5, o negatiu 42, 1985 01:41:49,560 --> 01:41:52,941 o qualsevol valor que no sigui 0, això significa generalment 1986 01:41:52,941 --> 01:41:54,190 que alguna cosa ha anat malament. 1987 01:41:54,190 --> 01:41:56,700 De fet, en el seu propi Mac o PC, és possible que hagi vist realment 1988 01:41:56,700 --> 01:42:01,050 un missatge d'error, mitjançant la qual diu una cosa o una altra, l'error 1989 01:42:01,050 --> 01:42:04,940 codi negatiu 42, o codi d'error 23, o alguna cosa per l'estil. 1990 01:42:04,940 --> 01:42:08,980 Aquest nombre és en general només un toc per al programador, o l'empresa 1991 01:42:08,980 --> 01:42:11,174 Això va fer que el programari, el que va sortir malament i per què, 1992 01:42:11,174 --> 01:42:13,590 de manera que puguin mirar a través la seva documentació o codi, 1993 01:42:13,590 --> 01:42:15,465 i esbrinar quin és el d'error realment significa. 1994 01:42:15,465 --> 01:42:18,400 En general, no és útil per a nosaltres els usuaris finals. 1995 01:42:18,400 --> 01:42:20,550 >> Però quan principals retorna 0, tot està bé. 1996 01:42:20,550 --> 01:42:23,770 I si no s'especifica el principal ha de retornar, 1997 01:42:23,770 --> 01:42:26,950 s'acaba de forma automàtica retornar 0 per a vostè. 1998 01:42:26,950 --> 01:42:30,870 Però tornant una mica la resta és realment útil. 1999 01:42:30,870 --> 01:42:34,660 >> En aquest programa final, em va deixar seguir endavant i cridar a aquest exit.c, 2000 01:42:34,660 --> 01:42:38,630 i introduir l'últim d'avui temes, conegut com un codi d'error. 2001 01:42:38,630 --> 01:42:42,930 Déjame anar per davant i inclou la nostra arxius coneguts fins a la part superior, fan int principal. 2002 01:42:42,930 --> 01:42:49,500 I aquesta vegada, farem int argc, argv cadena, i amb els meus suports 2003 01:42:49,500 --> 01:42:50,836 donar a entendre que està en la matriu. 2004 01:42:50,836 --> 01:42:52,460 I llavors em van deixar de fer una comprovació de validesa. 2005 01:42:52,460 --> 01:42:56,640 Aquest cop, si no ho fa argc igual a 2, llavors saps què? 2006 01:42:56,640 --> 01:42:57,520 Oblida-ho. 2007 01:42:57,520 --> 01:43:03,170 Vaig a dir que, bé, usuari, es troba a faltar l'argument de línia d'ordres 2008 01:43:03,170 --> 01:43:04,210 n barra invertida. 2009 01:43:04,210 --> 01:43:05,230 >> I llavors això és tot. 2010 01:43:05,230 --> 01:43:06,130 Desitjo sortir. 2011 01:43:06,130 --> 01:43:11,030 Vaig a manera preventiva, i prematurament realment, el retorn 2012 01:43:11,030 --> 01:43:12,810 alguna cosa que no sigui el número 1. 2013 01:43:12,810 --> 01:43:15,360 El lloc on anar per al primer valor error que pot passar és 1. 2014 01:43:15,360 --> 01:43:17,860 Si té alguna altra errònia situació que pugui produir-se, 2015 01:43:17,860 --> 01:43:21,390 es podria dir de retorn de 2 o retornar 3, o potser fins i tot negatiu o negatiu febrer 1. 2016 01:43:21,390 --> 01:43:23,750 >> Aquests són només els codis de sortida que són, en general, 2017 01:43:23,750 --> 01:43:27,770 només és útil per al programador, o el companyia que ha d'enviar el programari. 2018 01:43:27,770 --> 01:43:30,500 Però el fet que és No 0 és l'important. 2019 01:43:30,500 --> 01:43:34,310 Així que si en aquest programa, vull garantir que aquest programa només 2020 01:43:34,310 --> 01:43:38,190 funciona si l'usuari m'ofereix amb un nombre d'arguments de dos, 2021 01:43:38,190 --> 01:43:42,880 el nom del programa, i algun altre paraula, que pot valer tant com segueix, 2022 01:43:42,880 --> 01:43:46,110 cridar a l'usuari amb dit printf, falten arguments de línia de comandes, 2023 01:43:46,110 --> 01:43:46,970 tornar 1. 2024 01:43:46,970 --> 01:43:49,940 Que s'acaba immediatament sortir del programa. 2025 01:43:49,940 --> 01:43:55,840 >> Només si argc és igual a 2 caldrà baixar aquí, en aquest moment em vaig a dir, 2026 01:43:55,840 --> 01:44:00,410 hola cent s, la barra invertida n, argv1. 2027 01:44:00,410 --> 01:44:03,827 En altres paraules, estic No va després de argv 0, 2028 01:44:03,827 --> 01:44:05,410 que és només el nom del programa. 2029 01:44:05,410 --> 01:44:09,450 Vull imprimir hola, coma, la segona paraula que va escriure l'ésser humà. 2030 01:44:09,450 --> 01:44:12,580 I en aquest cas a línia 13, tot està bé. 2031 01:44:12,580 --> 01:44:15,920 >> Sé que argc es 2 lògicament d'aquest programa. 2032 01:44:15,920 --> 01:44:17,770 Vaig a seguir endavant i tornar 0. 2033 01:44:17,770 --> 01:44:21,230 Sigui dit de passada, tenir en compte que això és cert en Scratch també. 2034 01:44:21,230 --> 01:44:24,760 >> Lògicament, podria fer això i encapsular aquestes línies 2035 01:44:24,760 --> 01:44:27,020 del codi d'aquesta altra clàusula aquí. 2036 01:44:27,020 --> 01:44:29,420 Però això és una mena de innecessàriament sagnia meu codi. 2037 01:44:29,420 --> 01:44:31,800 I vull fer súper clar que no importa què, 2038 01:44:31,800 --> 01:44:34,670 per defecte, hola alguna cosa va a aconseguir imprès, 2039 01:44:34,670 --> 01:44:36,050 sempre que l'usuari coopera. 2040 01:44:36,050 --> 01:44:39,360 >> Així que és molt comú l'ús de una condició, només un cas, 2041 01:44:39,360 --> 01:44:41,870 per agafar una mica errònia situació, i després sortir. 2042 01:44:41,870 --> 01:44:45,690 I després, sempre és tot així, no tenir una cosa, 2043 01:44:45,690 --> 01:44:48,060 però només tenen el codi a part que si, perquè és 2044 01:44:48,060 --> 01:44:51,060 equivalents en aquest Cas particular, lògicament. 2045 01:44:51,060 --> 01:44:54,480 Així que estic tornant un 0, només per signifiquen explícitament que tot està bé. 2046 01:44:54,480 --> 01:44:58,480 >> Si he omès el retorn 0, ho faria ser assumida de forma automàtica per a mi. 2047 01:44:58,480 --> 01:45:00,890 Però ara que estic tornant un almenys en aquest cas, 2048 01:45:00,890 --> 01:45:04,940 Vaig a, per si de cas, i claredat, tornen 0 en aquest cas. 2049 01:45:04,940 --> 01:45:09,690 Així que ara vull seguir endavant i fer la sortida, que és una transició perfecta per deixar només. 2050 01:45:09,690 --> 01:45:14,401 >> Però fer la sortida, i em va deixar anar endavant i fer ./exit, Retorn. 2051 01:45:14,401 --> 01:45:16,900 I el programa em va cridar, falta argument de línia d'ordres. 2052 01:45:16,900 --> 01:45:18,120 OK, deixa cooperar. 2053 01:45:18,120 --> 01:45:23,810 >> Permetin-me fer lloc ./exit, David, Enter. 2054 01:45:23,810 --> 01:45:25,190 I ara es diu, hola David. 2055 01:45:25,190 --> 01:45:27,300 I que normalment no veure això. 2056 01:45:27,300 --> 01:45:30,650 >> Però resulta que hi ha una de manera especial en Linux per veure realment 2057 01:45:30,650 --> 01:45:34,470 de manera que la sortida codi d'un programa es tanca. 2058 01:45:34,470 --> 01:45:37,184 A vegades en un gràfic món com Mac OS o Windows, 2059 01:45:37,184 --> 01:45:40,100 només es veu aquests números quan una missatge d'error apareix a la pantalla 2060 01:45:40,100 --> 01:45:41,940 i el programador que mostra que el nombre. 2061 01:45:41,940 --> 01:45:44,773 Però si volem veure el que l'error el missatge és, podem fer-ho aquí-- 2062 01:45:44,773 --> 01:45:48,100 pel ./exit, Enter, imprimir falta argument de línia d'ordres. 2063 01:45:48,100 --> 01:45:54,590 >> Si ara ho faig ressò $?, Que és ridículament críptica buscant. 2064 01:45:54,590 --> 01:45:56,590 Però $? 2065 01:45:56,590 --> 01:45:59,220 és l'encantament màgic que diu, escolta, ordinador, 2066 01:45:59,220 --> 01:46:01,900 digues-me el que l'anterior codi de sortida del programa era. 2067 01:46:01,900 --> 01:46:03,410 I vaig arribar a Enter. 2068 01:46:03,410 --> 01:46:07,520 Veig a 1, perquè això és el que jo dit a la meva funció principal per tornar. 2069 01:46:07,520 --> 01:46:12,310 >> Mentrestant, si faig ./exit David, i prem enter, veig, hola David. 2070 01:46:12,310 --> 01:46:16,800 I si ara ho faig ressò $?, Veig hola 0. 2071 01:46:16,800 --> 01:46:19,080 I així això va ser informació valuosa 2072 01:46:19,080 --> 01:46:23,420 en el context de l'depurador, no tan tant que, l'ésser humà, li faria res. 2073 01:46:23,420 --> 01:46:26,060 No obstant això, el depurador i una altra els programes que farem servir en aquest semestre 2074 01:46:26,060 --> 01:46:29,420 sovint mirar a aquest nombre, tot i que és una espècie de amagat 2075 01:46:29,420 --> 01:46:32,780 llevat que vostè ho busca, a determinar si un programa d'o no 2076 01:46:32,780 --> 01:46:37,050 execució va ser correcta o incorrecta. 2077 01:46:37,050 --> 01:46:40,450 >> I pel que ens porta a això, al final del dia. 2078 01:46:40,450 --> 01:46:43,917 Comencem avui examinat depuració, i al seu torn en el curs 2079 01:46:43,917 --> 01:46:46,750 sí, i després més interessant, tècnicament sota de la campana 2080 01:46:46,750 --> 01:46:49,490 en quines cadenes són, que va durar setmana ens ho prenem per fet, 2081 01:46:49,490 --> 01:46:51,900 i per descomptat els va portar per fet a Scratch. 2082 01:46:51,900 --> 01:46:56,040 >> Seguidament, examinem com podem accedir caràcters individuals en una cadena, 2083 01:46:56,040 --> 01:47:00,310 i després va tornar a prendre un nivell més alt mirar les coses, mirant com bé-- 2084 01:47:00,310 --> 01:47:04,226 Si volem arribar a nivell individual elements d'una llista com l'estructura, 2085 01:47:04,226 --> 01:47:05,850 no podem fer això amb diverses cadenes? 2086 01:47:05,850 --> 01:47:08,050 I que podem amb els arguments de línia de comandes. 2087 01:47:08,050 --> 01:47:12,800 Però aquesta imatge d'aquí només caixes és demostrativa d'aquesta idea general 2088 01:47:12,800 --> 01:47:14,451 d'una matriu o una llista o un vector. 2089 01:47:14,451 --> 01:47:16,450 I depenent de la context, totes aquestes paraules 2090 01:47:16,450 --> 01:47:17,880 significats lleugerament diferents. 2091 01:47:17,880 --> 01:47:20,060 Així que en C, només anem parlar d'una matriu. 2092 01:47:20,060 --> 01:47:23,840 I una matriu és un tros de la memòria, cada un dels quals és 2093 01:47:23,840 --> 01:47:27,720 elements són contigus, de nou, cap enrere, cap enrere, cap enrere. 2094 01:47:27,720 --> 01:47:31,970 >> I aquests elements són, en general, del mateix tipus de dades, caràcter, 2095 01:47:31,970 --> 01:47:35,966 caràcter, caràcters, caràcter, o cadena, cadena, cadena, cadena, o int, 2096 01:47:35,966 --> 01:47:38,600 int, int, sigui el que sigui estem tractant d'emmagatzemar. 2097 01:47:38,600 --> 01:47:42,540 Però al final del dia, això és el que sembla conceptualment. 2098 01:47:42,540 --> 01:47:44,530 Vostè està prenent el seu memòria o RAM de l'ordinador. 2099 01:47:44,530 --> 01:47:48,590 I que està tallat a terme en caixes de la mateixa mida, tots els quals 2100 01:47:48,590 --> 01:47:50,920 estan de tornada, cap enrere, a de nou, a la part posterior d'aquesta manera. 2101 01:47:50,920 --> 01:47:53,200 >> I el que és bo de aquesta idea, i el fet 2102 01:47:53,200 --> 01:47:58,580 que podem expressar els valors d'aquesta manera amb la primera de les nostres estructures de dades 2103 01:47:58,580 --> 01:48:02,520 a la classe, vol dir que podem començar per resoldre problemes amb el codi 2104 01:48:02,520 --> 01:48:04,079 que van arribar de manera intuïtiva en la setmana 0. 2105 01:48:04,079 --> 01:48:05,870 Vostè recordarà el telèfon exemple llibre, on 2106 01:48:05,870 --> 01:48:09,110 es va utilitzar un divideix i venceràs, o un algoritme de recerca binari, 2107 01:48:09,110 --> 01:48:13,220 per tamisar a través d'un conjunt munt de noms i números. 2108 01:48:13,220 --> 01:48:18,220 Però hem suposat, recordar, que aquesta llibreta de telèfons que ja es va solucionar, 2109 01:48:18,220 --> 01:48:21,630 que una altra persona ja tenia Robust out-- donat una llista de noms 2110 01:48:21,630 --> 01:48:24,430 i numbers-- com alfabèticament ells. 2111 01:48:24,430 --> 01:48:26,950 I ara que estem en C, també, tenir la capacitat 2112 01:48:26,950 --> 01:48:30,290 per posar les coses, no es físicament en una llibreta de telèfons 2113 01:48:30,290 --> 01:48:34,220 però pràcticament en un ordinador de memòria, serem capaços setmana que 2114 01:48:34,220 --> 01:48:38,470 introduir de nou la primera esto-- de les nostres estructures de dades en un array-- 2115 01:48:38,470 --> 01:48:43,530 però el més important, equip real algoritmes implementats ciència 2116 01:48:43,530 --> 01:48:47,720 en el codi, amb el qual podem emmagatzemar les dades en les estructures d'aquest tipus, 2117 01:48:47,720 --> 01:48:50,730 i després començar a manipular-la, i per resoldre efectivament els problemes amb ella, 2118 01:48:50,730 --> 01:48:53,570 i construir sobre d'això, en última instància, els programes en C, 2119 01:48:53,570 --> 01:48:56,730 en Python, en JavaScript, la consulta de bases de dades amb SQL? 2120 01:48:56,730 --> 01:48:59,980 >> I veurem que tots aquests idees diferents d'enclavament. 2121 01:48:59,980 --> 01:49:04,100 Però per ara, recordar que la domini que presentem avui 2122 01:49:04,100 --> 01:49:06,920 Va ser aquesta cosa aquí, i el món de la criptografia. 2123 01:49:06,920 --> 01:49:11,200 I entre els següents problemes que vostè mateix resoldrà és l'art de la criptografia, 2124 01:49:11,200 --> 01:49:13,630 aleatorització i desaleatorización informació, i de xifrat 2125 01:49:13,630 --> 01:49:15,930 i desxifrar el text, i suposant que en última instància 2126 01:49:15,930 --> 01:49:18,970 que ara sap el que hi ha sota el capó 2127 01:49:18,970 --> 01:49:21,860 de manera que quan es veu o rep un missatge com aquest, 2128 01:49:21,860 --> 01:49:24,060 vostè mateix pot desxifrar-lo. 2129 01:49:24,060 --> 01:49:26,740 Tot això, i més la propera vegada. 2130 01:49:26,740 --> 01:49:29,890 2131 01:49:29,890 --> 01:49:30,790 >> [REPRODUCCIÓ DE VÍDEO] 2132 01:49:30,790 --> 01:49:32,970 >> -Moure Acaba d'arribar. 2133 01:49:32,970 --> 01:49:35,146 Vaig a anar a visitar el seu professor de la universitat. 2134 01:49:35,146 --> 01:49:37,611 Sí. 2135 01:49:37,611 --> 01:49:40,080 Hola. 2136 01:49:40,080 --> 01:49:40,660 Ets tu. 2137 01:49:40,660 --> 01:49:44,125 2138 01:49:44,125 --> 01:49:45,110 Esperi! 2139 01:49:45,110 --> 01:49:45,610 David. 2140 01:49:45,610 --> 01:49:53,936 2141 01:49:53,936 --> 01:49:56,060 Només estic intentant entendre el que li va passar. 2142 01:49:56,060 --> 01:49:58,130 Si us plau, qualsevol cosa podria ajudar. 2143 01:49:58,130 --> 01:50:05,020 2144 01:50:05,020 --> 01:50:08,354 Eres la seva universitat company de pis, oi? 2145 01:50:08,354 --> 01:50:10,770 Vostè hi era amb ell quan acabar el projecte CS50? 2146 01:50:10,770 --> 01:50:13,770 2147 01:50:13,770 --> 01:50:15,765 >> [MÚSICA] 2148 01:50:15,765 --> 01:50:32,110 2149 01:50:32,110 --> 01:50:33,150 >> Això va ser CS50. 2150 01:50:33,150 --> 01:50:42,690 2151 01:50:42,690 --> 01:50:44,770 >> M'encanta aquest lloc. 2152 01:50:44,770 --> 01:50:45,854 >> -Menjar-se. 2153 01:50:45,854 --> 01:50:47,020 Anem a sortir dels negocis. 2154 01:50:47,020 --> 01:50:52,120 2155 01:50:52,120 --> 01:50:53,970 >> [FI DE REPRODUCCIÓ]